mirror of
https://github.com/duckietm/Nitro-V3.git
synced 2026-06-19 23:16:21 +00:00
a1bee1d825
Adopt React 19 idioms across the codebase. The runtime was already on
react@19.2.5 but no React 19 APIs were in use.
- forwardRef -> ref-as-prop in 7 layout/component files
(NitroInput/Button/ItemCountBadge/Card×5/InfiniteGridItem,
ToolbarItemView, AvatarEditorIcon)
- <Ctx.Provider> -> <Ctx> in 6 contexts (CatalogAdmin, FloorplanEditor,
UiSettings, GridContext, NitroCardContext, NitroCardAccordionContext)
- Native <script> hoisting for Turnstile, ExternalPluginLoader, GoogleAdsView
(React 19 dedupes by src; removes manual document.head.appendChild +
module-level promise caches)
- React Compiler enabled at build time via babel-plugin-react-compiler
in vite.config.mjs (target: '19'), plus eslint-plugin-react-compiler
in lint mode
- Global <ErrorBoundary> + <Suspense> in src/index.tsx using
react-error-boundary, with LoadingView as fallback
- BackgroundsView migrated to use(promise) as a demonstrator pattern
for Suspense-driven config loading
- ESLint react setting bumped 18.3.1 -> 19.2; legacy
@typescript-eslint/ban-types replaced with no-restricted-types
(the old rule was removed in @typescript-eslint v8)
- Refresh public/configuration/{asset-loader,bootstrap}.js to match
current write-asset-loader.mjs output
Phase 3 (login forms -> useActionState/useFormStatus) deferred:
LoginView is 1623 lines with lockout + Turnstile + heartbeat
interleaving; safer as its own PR.
https://claude.ai/code/session_01GrR87LAqnAEyKG2ZbmQt5Q
54 lines
1.8 KiB
JSON
54 lines
1.8 KiB
JSON
{
|
|
"name": "nitro-react",
|
|
"version": "2.2",
|
|
"homepage": ".",
|
|
"private": true,
|
|
"scripts": {
|
|
"prebuild": "node scripts/write-asset-loader.mjs",
|
|
"start": "vite --host",
|
|
"build": "vite build && node scripts/minify-dist.mjs",
|
|
"build:prod": "npx browserslist@latest --update-db && yarn build",
|
|
"eslint": "eslint ./src"
|
|
},
|
|
"dependencies": {
|
|
"@babel/runtime": "^7.29.2",
|
|
"@emoji-mart/data": "^1.2.1",
|
|
"@emoji-mart/react": "^1.1.1",
|
|
"@radix-ui/react-popover": "^1.1.6",
|
|
"@radix-ui/react-slider": "^1.2.4",
|
|
"@tanstack/react-virtual": "3.13.24",
|
|
"dompurify": "^3.4.1",
|
|
"emoji-mart": "^5.6.0",
|
|
"emoji-toolkit": "10.0.0",
|
|
"framer-motion": "^12.38.0",
|
|
"react": "^19.2.5",
|
|
"react-dom": "^19.2.5",
|
|
"react-error-boundary": "^6.1.1",
|
|
"react-icons": "^5.5.0",
|
|
"react-player": "^2.16.0",
|
|
"use-between": "^1.4.0"
|
|
},
|
|
"devDependencies": {
|
|
"@tailwindcss/forms": "^0.5.11",
|
|
"@tailwindcss/postcss": "^4.2.4",
|
|
"@types/node": "^25.6.0",
|
|
"@types/react": "^19.2.14",
|
|
"@types/react-dom": "^19.2.3",
|
|
"@typescript-eslint/eslint-plugin": "^8.59.1",
|
|
"@typescript-eslint/parser": "^8.59.1",
|
|
"@vitejs/plugin-react": "^6.0.1",
|
|
"babel-plugin-react-compiler": "^1.0.0",
|
|
"eslint": "^10.2.1",
|
|
"eslint-plugin-react": "^7.37.5",
|
|
"eslint-plugin-react-compiler": "19.1.0-rc.2",
|
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
"postcss": "^8.5.12",
|
|
"postcss-nested": "^7.0.2",
|
|
"sass": "^1.99.0",
|
|
"tailwindcss": "^4.2.4",
|
|
"typescript": "^6.0.3",
|
|
"typescript-eslint": "^8.59.1",
|
|
"vite": "^8.0.10"
|
|
}
|
|
}
|