From 37ee056c04405af06bb27541a892caf294c272c1 Mon Sep 17 00:00:00 2001 From: Sven Anders Robbestad <1560743+robbestad@users.noreply.github.com> Date: Tue, 1 Sep 2026 15:43:40 +0200 Subject: [PATCH] feat: rewrite for React 19 and React Router 7 Replace the Webpack 3 / Redux v2 stack with TypeScript, Vite, and a context-based API. Close stale Dependabot PRs against the old toolchain. --- .babelrc | 7 - .eslintrc | 25 - .github/workflows/ci.yml | 25 + .github/workflows/pages.yml | 37 + .gitignore | 13 +- .travis.yml | 4 - CHANGELOG.md | 69 +- README.md | 174 +- demo/.babelrc | 7 - demo/README.md | 39 +- demo/dist/CNAME | 1 - demo/dist/bundle.js | 20 - demo/dist/index.html | 13 - demo/index.html | 26 + demo/package-lock.json | 8222 -------------------- demo/package.json | 32 - demo/src/app.css | 13 - demo/src/app.jsx | 53 - demo/src/controls.tsx | 44 + demo/src/crumb-route.jsx | 24 - demo/src/data.ts | 61 + demo/src/events.jsx | 35 - demo/src/friends.jsx | 39 - demo/src/index.jsx | 28 - demo/src/layout.tsx | 78 + demo/src/locations.jsx | 35 - demo/src/main.tsx | 15 + demo/src/pages/events.tsx | 53 + demo/src/pages/friends.tsx | 63 + demo/src/pages/home.tsx | 30 + demo/src/pages/locations.tsx | 72 + demo/src/pages/not-found.tsx | 17 + demo/src/router.tsx | 94 + demo/src/styles.css | 314 + demo/src/vite-env.d.ts | 3 + demo/vite.config.ts | 30 + demo/webpack.dev.js | 38 - demo/webpack.prod.js | 38 - dist/react-breadcrumbs.min.js | 2 - dist/react-breadcrumbs.min.js.map | 1 - e2e/demo.spec.ts | 40 + eslint.config.js | 23 + package-lock.json | 11327 ++++++++++------------------ package.json | 99 +- playwright.config.ts | 18 + src/breadcrumb.jsx | 75 - src/breadcrumb.tsx | 42 + src/breadcrumbs.jsx | 104 - src/breadcrumbs.test.tsx | 273 + src/breadcrumbs.tsx | 115 + src/context.tsx | 56 + src/index.js | 2 - src/index.ts | 16 + src/sort-crumbs.test.ts | 35 + src/sort-crumbs.ts | 12 + src/store.js | 33 - src/style.css | 40 - src/styles.css | 55 + src/test/setup.ts | 7 + src/types.ts | 59 + src/use-breadcrumbs.ts | 1 + src/use-route-crumbs.ts | 36 + tsconfig.json | 31 + tsup.config.ts | 21 + vitest.config.ts | 11 + webpack.config.js | 58 - yarn.lock | 4661 ------------ 67 files changed, 6207 insertions(+), 20937 deletions(-) delete mode 100644 .babelrc delete mode 100644 .eslintrc create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/pages.yml delete mode 100644 .travis.yml delete mode 100644 demo/.babelrc delete mode 100644 demo/dist/CNAME delete mode 100644 demo/dist/bundle.js delete mode 100644 demo/dist/index.html create mode 100644 demo/index.html delete mode 100644 demo/package-lock.json delete mode 100644 demo/package.json delete mode 100644 demo/src/app.css delete mode 100644 demo/src/app.jsx create mode 100644 demo/src/controls.tsx delete mode 100644 demo/src/crumb-route.jsx create mode 100644 demo/src/data.ts delete mode 100644 demo/src/events.jsx delete mode 100644 demo/src/friends.jsx delete mode 100644 demo/src/index.jsx create mode 100644 demo/src/layout.tsx delete mode 100644 demo/src/locations.jsx create mode 100644 demo/src/main.tsx create mode 100644 demo/src/pages/events.tsx create mode 100644 demo/src/pages/friends.tsx create mode 100644 demo/src/pages/home.tsx create mode 100644 demo/src/pages/locations.tsx create mode 100644 demo/src/pages/not-found.tsx create mode 100644 demo/src/router.tsx create mode 100644 demo/src/styles.css create mode 100644 demo/src/vite-env.d.ts create mode 100644 demo/vite.config.ts delete mode 100644 demo/webpack.dev.js delete mode 100644 demo/webpack.prod.js delete mode 100644 dist/react-breadcrumbs.min.js delete mode 100644 dist/react-breadcrumbs.min.js.map create mode 100644 e2e/demo.spec.ts create mode 100644 eslint.config.js create mode 100644 playwright.config.ts delete mode 100644 src/breadcrumb.jsx create mode 100644 src/breadcrumb.tsx delete mode 100644 src/breadcrumbs.jsx create mode 100644 src/breadcrumbs.test.tsx create mode 100644 src/breadcrumbs.tsx create mode 100644 src/context.tsx delete mode 100644 src/index.js create mode 100644 src/index.ts create mode 100644 src/sort-crumbs.test.ts create mode 100644 src/sort-crumbs.ts delete mode 100644 src/store.js delete mode 100644 src/style.css create mode 100644 src/styles.css create mode 100644 src/test/setup.ts create mode 100644 src/types.ts create mode 100644 src/use-breadcrumbs.ts create mode 100644 src/use-route-crumbs.ts create mode 100644 tsconfig.json create mode 100644 tsup.config.ts create mode 100644 vitest.config.ts delete mode 100644 webpack.config.js delete mode 100644 yarn.lock diff --git a/.babelrc b/.babelrc deleted file mode 100644 index edd5def..0000000 --- a/.babelrc +++ /dev/null @@ -1,7 +0,0 @@ -{ - "presets": [ - [ "env", { "modules": false } ], - "stage-0", - "react" - ] -} diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 93d680d..0000000 --- a/.eslintrc +++ /dev/null @@ -1,25 +0,0 @@ -{ - "extends": [ - "eslint:recommended", - "plugin:react/recommended" - ], - "plugins": [ - "react" - ], - "parser": "babel-eslint", - "parserOptions": { - "ecmaVersion": 6, - "sourceType": "module", - "ecmaFeatures": { - "jsx": true - } - }, - "env": { - "browser": false, - "node": true, - "es6": true - }, - "rules": { - "semi": [ 2, "never" ] - } -} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..aab6e92 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,25 @@ +name: CI + +on: + push: + branches: [master, v3] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + - run: npm ci + - run: npm run typecheck + - run: npm run lint + - run: npm test + - run: npm run build + - run: npm pack --dry-run + - run: npx playwright install --with-deps chromium + - run: npm run test:e2e + - run: npm run build:demo diff --git a/.github/workflows/pages.yml b/.github/workflows/pages.yml new file mode 100644 index 0000000..919c220 --- /dev/null +++ b/.github/workflows/pages.yml @@ -0,0 +1,37 @@ +name: Pages + +on: + push: + branches: [master] + workflow_dispatch: + +permissions: + contents: read + pages: write + id-token: write + +concurrency: + group: pages + cancel-in-progress: true + +jobs: + deploy: + runs-on: ubuntu-latest + environment: + name: github-pages + url: ${{ steps.deploy.outputs.page_url }} + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: 22 + cache: npm + - run: npm ci + - run: npm run build:demo + env: + VITE_BASE: /react-breadcrumbs/ + - uses: actions/upload-pages-artifact@v3 + with: + path: demo/dist + - id: deploy + uses: actions/deploy-pages@v4 diff --git a/.gitignore b/.gitignore index bb714a0..7585cd6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,12 @@ node_modules/ -.idea -npm-debug.log +dist/ +demo/dist/ +*.log +.DS_Store +.idea +playwright-report/ +test-results/ +blob-report/ +.vite/ +.playwright-mcp/ +*.tgz diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index e32a325..0000000 --- a/.travis.yml +++ /dev/null @@ -1,4 +0,0 @@ -language: node_js -node_js: - - "node" - - "8" diff --git a/CHANGELOG.md b/CHANGELOG.md index 905d1b9..f930aa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,62 +1,65 @@ # Changelog -All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +All notable changes to this project will be documented in this file. -### [2.1.7](https://github.com/svenanders/react-breadcrumbs/compare/v2.1.6...v2.1.7) (2019-06-14) +## [3.0.0] - 2026-09-01 +Rewrite for React 19 and React Router 7. v2 remains available as `react-breadcrumbs@2`. -### Bug Fixes - -* allow usage with latest react-router version ([d4258e9](https://github.com/svenanders/react-breadcrumbs/commit/d4258e9)) - - - - -## [2.1.6](https://github.com/svenanders/react-breadcrumbs/compare/v2.1.5...v2.1.6) (2018-07-05) - +### Breaking +- Peer dependencies are now `react`/`react-dom` ≥ 19 and `react-router` ≥ 7. +- `` is required. The Redux singleton store is gone. +- Default markup is `