7c0136b97b
## What Migrates the frontend stack from **React 18.3 → 19.2**. The website, sdk, companion and emails packages were already on React 19; this brings the remaining holdouts (`twenty-front`, `twenty-ui`, `twenty-ui-deprecated`, `twenty-front-component-renderer`) and `twenty-server`'s email rendering onto 19, and pins a single React version repo-wide. ## Why React 18.x is now the legacy line. Staying current keeps us on the patched/maintained branch and unblocks downstream library majors (react-router 7, mantine 9, etc.) that require React 19 peers. ## Dependency bumps (required by React 19 peers / removed APIs) | Package | From | To | Reason | |---|---|---|---| | react / react-dom | 18.3.1 | 19.2.3 | core | | @hello-pangea/dnd | 16 | 18 | peer `^18 \|\| ^19` | | react-datepicker | 6 | 9 | v<7 used removed `findDOMNode`; drops `@types/react-datepicker` | | react-data-grid | beta.13 | beta.59 | peer `^19.2`; new render API | | graphiql (+ @graphiql/react, plugin-explorer) | 3 / 0.23 / 1 | 5 / 0.37 / 5.1 | peer `^18 \|\| ^19` | | react-helmet-async | 1.3 | **@dr.pogodin/react-helmet** 3.2 | upstream caps peer at `^18`; drop-in React 19 fork | A `resolutions` pin enforces a single React (19.2.3) + `@types/react` (19.2.14) across the monorepo to avoid duplicate copies / type-identity splits. Versions are the aged lockfile patches (clears the `npmMinimalAgeGate`). ## Code changes - **Global `JSX` shim** (`react-jsx-global.d.ts` per package): React 19 moved the `JSX` namespace under `React.JSX`; several deps' published types (notably `@linaria/react`'s `styled.d.ts`, which types every `styled.x` via `keyof JSX.IntrinsicElements`) still reference the global namespace. Without the shim, every styled component degrades to `any` props. - **Ref nullability**: `useRef<T>(null)` now returns `RefObject<T | null>`; widened consumer prop/hook ref types accordingly (incl. the shared `useListenClickOutside`). - **react-datepicker v9**: `onChange`/`onSelect` accept `Date | null`, `calendarStartDay` typing, `ReactDatePickerProps`→`DatePickerProps`, relaxed the dynamic `selectsMultiple` discriminated union. - **react-data-grid beta.59**: `formatter`→`renderCell`, `editor`→`renderEditCell`, `headerRenderer`→`renderHeaderCell`, `components`→`renderers`, `onRowClick`→`onCellClick`, object-shaped `useRowSelection`, Set-based selection. - **dnd style cast**: `@radix-ui/react-popper` augments `CSSProperties` with a `--radix-*` index signature that dnd's closed `DraggingStyle` doesn't satisfy → cast at the spread. ## Status / testing - ✅ `typecheck` green: twenty-front, twenty-ui, twenty-ui-deprecated, twenty-front-component-renderer, twenty-server - ⏳ build / lint / unit tests / storybook+argos / runtime smoke-test in progress Draft until local + CI verification completes. Notable behavior to QA manually: spreadsheet import (data-grid), date pickers, drag-and-drop boards/lists, GraphQL playground, page titles/favicon. <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/21531?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
62 lines
1.9 KiB
JSON
62 lines
1.9 KiB
JSON
{
|
|
"name": "twenty-desktop",
|
|
"productName": "Twenty",
|
|
"version": "1.0.0",
|
|
"description": "Twenty meeting recorder",
|
|
"main": ".webpack/main",
|
|
"scripts": {
|
|
"start": "concurrently \"yarn start:server\" \"yarn start:electron\"",
|
|
"start:electron": "electron-forge start",
|
|
"package": "electron-forge package",
|
|
"make": "electron-forge make",
|
|
"publish": "electron-forge publish",
|
|
"lint": "echo \"No linting configured\"",
|
|
"start:server": "node ./src/server.js"
|
|
},
|
|
"keywords": [],
|
|
"author": {
|
|
"name": "Nick Faro",
|
|
"email": "yux50000@hotmail.com"
|
|
},
|
|
"license": "MIT",
|
|
"devDependencies": {
|
|
"@babel/plugin-proposal-class-properties": "^7.18.6",
|
|
"@electron-forge/cli": "^7.8.0",
|
|
"@electron-forge/maker-deb": "^7.8.0",
|
|
"@electron-forge/maker-dmg": "^7.8.1",
|
|
"@electron-forge/maker-rpm": "^7.8.0",
|
|
"@electron-forge/maker-squirrel": "^7.8.0",
|
|
"@electron-forge/maker-zip": "^7.8.0",
|
|
"@electron-forge/plugin-auto-unpack-natives": "^7.8.0",
|
|
"@electron-forge/plugin-fuses": "^7.8.0",
|
|
"@electron-forge/plugin-webpack": "^7.8.0",
|
|
"@electron/fuses": "^1.8.0",
|
|
"@vercel/webpack-asset-relocator-loader": "^1.7.3",
|
|
"css-loader": "^6.11.0",
|
|
"electron": "^39.8.5",
|
|
"node-loader": "^2.1.0",
|
|
"style-loader": "^3.3.4"
|
|
},
|
|
"resolutions": {
|
|
"@electron/packager/@electron/osx-sign": "github:recallai/osx-sign"
|
|
},
|
|
"dependencies": {
|
|
"@anthropic-ai/sdk": "^0.40.1",
|
|
"@recallai/desktop-sdk": "^2.0.0",
|
|
"@timfish/forge-externals-plugin": "^0.2.1",
|
|
"axios": "^1.16.0",
|
|
"codemirror": "^6.0.1",
|
|
"concurrently": "^10.0.0",
|
|
"dotenv": "^16.5.0",
|
|
"easymde": "^2.20.0",
|
|
"electron-squirrel-startup": "^1.0.1",
|
|
"express": "^4.18.2",
|
|
"marked": "^5.0.0",
|
|
"openai": "^4.97.0",
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"react-markdown": "^10.1.0",
|
|
"zod": "^3.25.76"
|
|
}
|
|
}
|