⬆️ mid-month dependency bump (#7506)

* typescript (^5.9.3 -> ^6.0.2)

* eslint-plugin-perfectionist (^5.6.0 → ^5.8.0)

* @types/node (^22.19.15 → ^22.19.17)

* @typescript/native-preview (^7.0.0-dev.20260309.1 → ^7.0.0-dev.20260404.1)

* eslint (^9.39.3 → ^9.39.4)

* lage (^2.14.19 → ^2.15.5)

* lint-staged (^16.3.2 → ^16.4.0)

* minimatch (^10.2.4 → ^10.2.5)

* vitest (^4.1.0 → ^4.1.2)

* better-sqlite3 (^12.6.2 → ^12.8.0)

* commander (^13.0.0 → ^13.1.0)

* cosmiconfig (^9.0.0 → ^9.0.1)

* @chromatic-com/storybook (^5.0.1 → ^5.1.1)

* @storybook/addon-a11y (^10.2.16 → ^10.3.4)

* @storybook/addon-docs (^10.2.16 → ^10.3.4)

* @storybook/react-vite (^10.2.16 → ^10.3.4)

* eslint-plugin-storybook (^10.2.16 → ^10.3.4)

* storybook (^10.2.16 → ^10.3.4)

* @codemirror/language (^6.12.2 → ^6.12.3)

* @react-aria/interactions (^3.27.0 → ^3.27.1)

* @swc/core (^1.15.18 → ^1.15.24)

* @swc/helpers (^0.5.19 → ^0.5.21)

* @tanstack/react-query (^5.90.21 → ^5.96.2)

* @uiw/react-codemirror (^4.25.7 → ^4.25.9)

* @vitejs/plugin-basic-ssl (^2.2.0 → ^2.3.0)

* i18next (^25.8.14 → ^25.10.10)

* lru-cache (^11.2.6 → ^11.2.7)

* react-grid-layout (^2.2.2 → ^2.2.3)

* react-i18next (^16.5.6 → ^16.6.6)

* rolldown (^1.0.0-rc.12 → ^1.0.0-rc.13)

* sass (^1.97.3 → ^1.99.0)

* adm-zip (^0.5.16 → ^0.5.17)

* csv-parse (^6.1.0 → ^6.2.1)

* csv-stringify (^6.6.0 → ^6.7.0)

* jest-diff (^30.2.0 → ^30.3.0)

* express-rate-limit (^8.3.0 → ^8.3.2)

* upgrade yarn to 4.13.0

* react-aria-components (^1.15.1 → ^1.16.0)

* @vitejs/plugin-react (^6.0.0 → ^6.0.1)

* @codemirror/state (^6.5.4 → ^6.6.0), @codemirror/view (^6.38.7 → ^6.41.0)

* react-aria (^3.46.0 → ^3.47.0)

* react-error-boundary (^6.0.3 → ^6.1.1)

* recharts (^3.7.0 → ^3.8.1)

* fast-check (4.5.3 → ^4.6.0)

* rollup-plugin-visualizer (^6.0.11 → ^7.0.1)

* commander (^13.1.0 → ^14.0.3)

* note

* coderabbit feedback, and a test for good measure

* typescript (^5.9.3 -> ^6.0.2)

* @playwright/test (1.58.2 -> 1.59.1)

* yarn dedupe
This commit is contained in:
Matt Fiddaman
2026-04-15 17:05:26 +00:00
committed by GitHub
parent f8d5d38d0a
commit 8c47374b9d
35 changed files with 3025 additions and 3826 deletions
+4 -4
View File
@@ -30,7 +30,7 @@ jobs:
matrix:
shard: [1, 2, 3, 4, 5]
container:
image: mcr.microsoft.com/playwright:v1.58.2-jammy
image: mcr.microsoft.com/playwright:v1.59.1-jammy
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up environment
@@ -53,7 +53,7 @@ jobs:
name: Functional Desktop App
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.58.2-jammy
image: mcr.microsoft.com/playwright:v1.59.1-jammy
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up environment
@@ -87,7 +87,7 @@ jobs:
matrix:
shard: [1, 2, 3, 4, 5]
container:
image: mcr.microsoft.com/playwright:v1.58.2-jammy
image: mcr.microsoft.com/playwright:v1.59.1-jammy
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up environment
@@ -110,7 +110,7 @@ jobs:
runs-on: ubuntu-latest
if: ${{ !cancelled() }}
container:
image: mcr.microsoft.com/playwright:v1.58.2-jammy
image: mcr.microsoft.com/playwright:v1.59.1-jammy
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Set up environment
+1 -1
View File
@@ -44,7 +44,7 @@ jobs:
github.event.issue.pull_request &&
startsWith(github.event.comment.body, '/update-vrt')
container:
image: mcr.microsoft.com/playwright:v1.58.2-jammy
image: mcr.microsoft.com/playwright:v1.59.1-jammy
steps:
- name: Get PR details
id: pr
-942
View File
File diff suppressed because one or more lines are too long
+940
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -6,4 +6,4 @@ enableTransparentWorkspaces: false
nodeLinker: node-modules
yarnPath: .yarn/releases/yarn-4.10.3.cjs
yarnPath: .yarn/releases/yarn-4.13.0.cjs
+1 -1
View File
@@ -28,5 +28,5 @@ echo "Running VRT tests with the following parameters:"
echo "E2E_START_URL: $E2E_START_URL"
echo "VRT_ARGS: $VRT_ARGS"
MSYS_NO_PATHCONV=1 docker run --rm --network host -v "$(pwd)":/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.58.2-jammy /bin/bash \
MSYS_NO_PATHCONV=1 docker run --rm --network host -v "$(pwd)":/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.59.1-jammy /bin/bash \
-c "E2E_START_URL=$E2E_START_URL yarn vrt $VRT_ARGS"
+10 -10
View File
@@ -65,19 +65,19 @@
},
"devDependencies": {
"@octokit/rest": "^22.0.1",
"@types/node": "^22.19.15",
"@types/node": "^22.19.17",
"@types/prompts": "^2.4.9",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"@yarnpkg/types": "^4.0.1",
"cross-env": "^10.1.0",
"eslint": "^9.39.3",
"eslint-plugin-perfectionist": "^5.6.0",
"eslint": "^9.39.4",
"eslint-plugin-perfectionist": "^5.8.0",
"eslint-plugin-typescript-paths": "^0.0.33",
"html-to-image": "^1.11.13",
"husky": "^9.1.7",
"lage": "^2.14.19",
"lint-staged": "^16.3.2",
"minimatch": "^10.2.4",
"lage": "^2.15.5",
"lint-staged": "^16.4.0",
"minimatch": "^10.2.5",
"npm-run-all": "^4.1.5",
"oxfmt": "^0.44.0",
"oxlint": "^1.59.0",
@@ -85,8 +85,8 @@
"p-limit": "^7.3.0",
"prompts": "^2.4.2",
"ts-node": "^10.9.2",
"typescript": "^5.9.3",
"vitest": "^4.1.0"
"typescript": "^6.0.2",
"vitest": "^4.1.2"
},
"resolutions": {
"adm-zip": "patch:adm-zip@npm%3A0.5.16#~/.yarn/patches/adm-zip-npm-0.5.16-4556fea098.patch",
@@ -118,5 +118,5 @@
"node": ">=22",
"yarn": "^4.9.1"
},
"packageManager": "[email protected]0.3"
"packageManager": "[email protected]3.0"
}
+4 -4
View File
@@ -32,17 +32,17 @@
"dependencies": {
"@actual-app/core": "workspace:*",
"@actual-app/crdt": "workspace:*",
"better-sqlite3": "^12.6.2",
"better-sqlite3": "^12.8.0",
"compare-versions": "^6.1.1",
"uuid": "^13.0.0"
},
"devDependencies": {
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"rollup-plugin-visualizer": "^6.0.11",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"rollup-plugin-visualizer": "^7.0.1",
"typescript-strict-plugin": "^2.4.4",
"vite": "^8.0.5",
"vite-plugin-peggy-loader": "^2.0.1",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
},
"engines": {
"node": ">=20"
+8 -1
View File
@@ -19,5 +19,12 @@
},
"references": [{ "path": "../crdt" }, { "path": "../loot-core" }],
"include": ["."],
"exclude": ["**/node_modules/*", "dist", "@types", "*.test.ts", "*.config.ts"]
"exclude": [
"**/node_modules/*",
"dist",
"@types",
"*.test.ts",
"*.config.ts",
"*.config.mts"
]
}
+2 -2
View File
@@ -9,11 +9,11 @@
},
"devDependencies": {
"@octokit/rest": "^22.0.1",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"extensionless": "^2.0.6",
"gray-matter": "^4.0.3",
"listify": "^1.0.3",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
},
"extensionless": {
"lookFor": [
+6 -6
View File
@@ -27,15 +27,15 @@
"dependencies": {
"@actual-app/api": "workspace:*",
"cli-table3": "^0.6.5",
"commander": "^13.0.0",
"cosmiconfig": "^9.0.0"
"commander": "^14.0.3",
"cosmiconfig": "^9.0.1"
},
"devDependencies": {
"@types/node": "^22.19.15",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"rollup-plugin-visualizer": "^6.0.11",
"@types/node": "^22.19.17",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"rollup-plugin-visualizer": "^7.0.1",
"vite": "^8.0.5",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
},
"engines": {
"node": ">=22"
+10 -10
View File
@@ -47,25 +47,25 @@
},
"dependencies": {
"@emotion/css": "^11.13.5",
"react-aria-components": "^1.15.1",
"react-aria-components": "^1.16.0",
"usehooks-ts": "^3.1.1"
},
"devDependencies": {
"@chromatic-com/storybook": "^5.0.1",
"@storybook/addon-a11y": "^10.2.16",
"@storybook/addon-docs": "^10.2.16",
"@storybook/react-vite": "^10.2.16",
"@chromatic-com/storybook": "^5.1.1",
"@storybook/addon-a11y": "^10.3.4",
"@storybook/addon-docs": "^10.3.4",
"@storybook/react-vite": "^10.3.4",
"@svgr/babel-plugin-add-jsx-attribute": "^8.0.0",
"@svgr/cli": "^8.1.0",
"@types/react": "^19.2.14",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@vitejs/plugin-react": "^6.0.0",
"eslint-plugin-storybook": "^10.2.16",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"@vitejs/plugin-react": "^6.0.1",
"eslint-plugin-storybook": "^10.3.4",
"react": "19.2.4",
"react-dom": "19.2.4",
"storybook": "^10.2.16",
"storybook": "^10.3.4",
"vite": "^8.0.5",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
},
"peerDependencies": {
"react": ">=19.2",
+2 -2
View File
@@ -33,9 +33,9 @@
},
"devDependencies": {
"@types/google-protobuf": "3.15.12",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"protoc-gen-js": "3.21.4-4",
"ts-protoc-gen": "0.15.0",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
}
}
+2 -2
View File
@@ -65,10 +65,10 @@ Run manually:
```sh
# Run docker container
docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.58.2-jammy /bin/bash
docker run --rm --network host -v $(pwd):/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.59.1-jammy /bin/bash
# If you receive an error such as "docker: invalid reference format", please instead use the following command:
docker run --rm --network host -v ${pwd}:/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.58.2-jammy /bin/bash
docker run --rm --network host -v ${pwd}:/work/ -w /work/ -it mcr.microsoft.com/playwright:v1.59.1-jammy /bin/bash
# Once inside the docker container, run the VRT tests: important - they MUST be ran against a HTTPS server.
# Use the ip and port noted earlier
+24 -24
View File
@@ -112,22 +112,22 @@
"@babel/core": "^7.29.0",
"@codemirror/autocomplete": "^6.20.1",
"@codemirror/lang-javascript": "^6.2.5",
"@codemirror/language": "^6.12.2",
"@codemirror/state": "^6.5.4",
"@codemirror/view": "^6.38.7",
"@codemirror/language": "^6.12.3",
"@codemirror/state": "^6.6.0",
"@codemirror/view": "^6.41.0",
"@emotion/css": "^11.13.5",
"@fontsource-variable/inter": "^5.2.8",
"@fontsource/redacted-script": "^5.2.8",
"@juggle/resize-observer": "^3.4.0",
"@lezer/highlight": "^1.2.3",
"@playwright/test": "1.58.2",
"@react-aria/interactions": "^3.27.0",
"@playwright/test": "1.59.1",
"@react-aria/interactions": "^3.27.1",
"@reduxjs/toolkit": "^2.11.2",
"@rolldown/plugin-babel": "~0.1.8",
"@rollup/plugin-inject": "^5.0.5",
"@swc/core": "^1.15.18",
"@swc/helpers": "^0.5.19",
"@tanstack/react-query": "^5.90.21",
"@swc/core": "^1.15.24",
"@swc/helpers": "^0.5.21",
"@tanstack/react-query": "^5.96.2",
"@testing-library/dom": "10.4.1",
"@testing-library/jest-dom": "^6.9.1",
"@testing-library/react": "16.3.2",
@@ -138,11 +138,11 @@
"@types/react": "^19.2.14",
"@types/react-dom": "^19.2.3",
"@types/react-modal": "^3.16.3",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@uiw/react-codemirror": "^4.25.7",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"@uiw/react-codemirror": "^4.25.9",
"@use-gesture/react": "^10.3.1",
"@vitejs/plugin-basic-ssl": "^2.2.0",
"@vitejs/plugin-react": "^6.0.0",
"@vitejs/plugin-basic-ssl": "^2.3.0",
"@vitejs/plugin-react": "^6.0.1",
"absurd-sql": "0.0.54",
"auto-text-size": "^0.2.3",
"babel-plugin-react-compiler": "^1.0.0",
@@ -152,27 +152,27 @@
"downshift": "9.3.2",
"html-to-image": "^1.11.13",
"hyperformula": "^3.2.0",
"i18next": "^25.8.14",
"i18next": "^25.10.10",
"i18next-parser": "^9.4.0",
"i18next-resources-to-backend": "^1.2.1",
"jsdom": "^27.4.0",
"lodash": "^4.18.1",
"lru-cache": "^11.2.6",
"lru-cache": "^11.2.7",
"mdast-util-newline-to-break": "^2.0.0",
"memoize-one": "^6.0.0",
"pikaday": "1.8.2",
"promise-retry": "^2.0.1",
"re-resizable": "^6.11.2",
"react": "19.2.4",
"react-aria": "^3.46.0",
"react-aria-components": "^1.15.1",
"react-aria": "^3.47.0",
"react-aria-components": "^1.16.0",
"react-dnd": "^16.0.1",
"react-dnd-html5-backend": "^16.0.1",
"react-dom": "19.2.4",
"react-error-boundary": "^6.0.3",
"react-grid-layout": "^2.2.2",
"react-error-boundary": "^6.1.1",
"react-grid-layout": "^2.2.3",
"react-hotkeys-hook": "^5.2.4",
"react-i18next": "^16.5.6",
"react-i18next": "^16.6.6",
"react-markdown": "^10.1.0",
"react-modal": "3.16.3",
"react-redux": "^9.2.0",
@@ -181,18 +181,18 @@
"react-spring": "^10.0.3",
"react-swipeable": "^7.0.2",
"react-virtualized-auto-sizer": "^2.0.3",
"recharts": "^3.7.0",
"recharts": "^3.8.1",
"rehype-external-links": "^3.0.0",
"remark-gfm": "^4.0.1",
"rolldown": "^1.0.0-rc.12",
"rollup-plugin-visualizer": "^6.0.11",
"sass": "^1.97.3",
"rolldown": "^1.0.0-rc.13",
"rollup-plugin-visualizer": "^7.0.1",
"sass": "^1.99.0",
"typescript-strict-plugin": "^2.4.4",
"usehooks-ts": "^3.1.1",
"uuid": "^13.0.0",
"vite": "^8.0.5",
"vite-plugin-pwa": "^1.2.0",
"vitest": "^4.1.0",
"vitest": "^4.1.2",
"xml2js": "^0.6.2"
}
}
@@ -0,0 +1,65 @@
import { LazyLoadFailedError } from '@actual-app/core/shared/errors';
import { render, screen } from '@testing-library/react';
import { describe, expect, it } from 'vitest';
import { TestProviders } from '#mocks';
import { FatalError } from './FatalError';
describe('FatalError', () => {
it('renders the SharedArrayBuffer message for a non-Error AppError payload', () => {
// matches what browser-server.js posts and what initAll().catch passes
const error = {
type: 'app-init-failure',
SharedArrayBufferMissing: true,
};
render(<FatalError error={error} />, { wrapper: TestProviders });
expect(screen.getAllByText(/SharedArrayBuffer/).length).toBeGreaterThan(0);
});
it('renders the IndexedDB message for a non-Error AppError payload', () => {
const error = {
type: 'app-init-failure',
IDBFailure: true,
};
render(<FatalError error={error} />, { wrapper: TestProviders });
expect(screen.getByText(/IndexedDB/)).toBeInTheDocument();
});
it('renders the generic simple message for an app-init-failure without a specific cause', () => {
const error = {
type: 'app-init-failure',
BackendInitFailure: true,
};
render(<FatalError error={error} />, { wrapper: TestProviders });
expect(
screen.getByText(/problem loading the app in this browser version/i),
).toBeInTheDocument();
});
it('renders the UI error message for a generic Error', () => {
render(<FatalError error={new Error('boom')} />, {
wrapper: TestProviders,
});
expect(
screen.getByText(/unrecoverable error in the UI/i),
).toBeInTheDocument();
});
it('renders the lazy load message for a LazyLoadFailedError', () => {
render(<FatalError error={new LazyLoadFailedError('SomeModule', null)} />, {
wrapper: TestProviders,
});
expect(
screen.getByText(/problem loading one of the chunks/i),
).toBeInTheDocument();
});
});
@@ -24,10 +24,12 @@ type AppError = Error & {
};
type FatalErrorProps = {
error: Error | AppError;
error: unknown;
};
type RenderSimpleProps = FatalErrorProps;
type RenderSimpleProps = {
error: Error | AppError;
};
function RenderSimple({ error }: RenderSimpleProps) {
let msg: ReactNode;
@@ -195,7 +197,7 @@ function SharedArrayBufferOverride() {
);
}
export function FatalError({ error }: FatalErrorProps) {
export function FatalError({ error: rawError }: FatalErrorProps) {
const { t } = useTranslation();
const { modalStack } = useModalState();
@@ -203,6 +205,12 @@ export function FatalError({ error }: FatalErrorProps) {
const [showError, setShowError] = useState(false);
const error: Error | AppError =
rawError instanceof Error
? rawError
: rawError && typeof rawError === 'object'
? Object.assign(new Error(String(rawError)), rawError)
: new Error(String(rawError));
const showSimpleRender = 'type' in error && error.type === 'app-init-failure';
const isLazyLoadError = error instanceof LazyLoadFailedError;
@@ -16,6 +16,8 @@ export function FeatureErrorFallback({
console.error(error);
}, [error]);
const message = error instanceof Error ? error.message : undefined;
return (
<View
style={{
@@ -28,7 +30,7 @@ export function FeatureErrorFallback({
<Text style={{ ...styles.mediumText, color: theme.errorText }}>
<Trans>Something went wrong loading this section.</Trans>
</Text>
{error?.message && (
{message && (
<Text
style={{
...styles.smallText,
@@ -40,7 +42,7 @@ export function FeatureErrorFallback({
userSelect: 'text',
}}
>
{error.message}
{message}
</Text>
)}
<Button onPress={resetErrorBoundary} style={{ marginTop: 15 }}>
@@ -8,6 +8,8 @@ import { theme } from '@actual-app/components/theme';
import type {
balanceTypeOpType,
DataEntity,
GroupedEntity,
IntervalEntity,
RuleConditionEntity,
} from '@actual-app/core/types/models';
import { css } from '@emotion/css';
@@ -250,7 +252,7 @@ export function BarGraph({
data[splitData] && (
<div>
{!compact && <div style={{ marginTop: '15px' }} />}
<BarChart
<BarChart<GroupedEntity | IntervalEntity>
responsive
width={width}
height={height}
@@ -12,7 +12,7 @@ import type {
RuleConditionEntity,
} from '@actual-app/core/types/models';
import { Pie, PieChart, Sector } from 'recharts';
import type { PieSectorShapeProps } from 'recharts';
import type { PieSectorDataItem, PieSectorShapeProps } from 'recharts';
import { FinancialText } from '#components/FinancialText';
import { PrivacyFilter } from '#components/PrivacyFilter';
@@ -31,6 +31,8 @@ const RADIAN = Math.PI / 180;
const canDeviceHover = () => window.matchMedia('(hover: hover)').matches;
type ClickablePieItem = PieSectorDataItem & { id?: string };
// ---------------------------------------------------------------------------
// Dimension helpers
// ---------------------------------------------------------------------------
@@ -487,7 +489,7 @@ export function DonutGraph({
setActiveRing('group');
}
}}
onClick={(item, index) => {
onClick={(item: ClickablePieItem, index) => {
if (!canDeviceHover()) {
setActiveGroupIndex(index);
setActiveRing('group');
@@ -574,7 +576,7 @@ export function DonutGraph({
setPointer('pointer');
}
}}
onClick={(item, index) => {
onClick={(item: ClickablePieItem, index) => {
if (!canDeviceHover()) {
setActiveCategoryIndex(index);
setActiveRing('category');
@@ -667,7 +669,7 @@ export function DonutGraph({
}
}
}}
onClick={(item, index) => {
onClick={(item: ClickablePieItem, index) => {
if (!canDeviceHover()) {
setActiveIndex(index);
}
@@ -41,7 +41,7 @@ type NetWorthDataPoint = {
date: string;
} & Record<string, string | number>;
type TrendTooltipProps = TooltipContentProps<number, string> & {
type TrendTooltipProps = TooltipContentProps & {
style?: CSSProperties;
};
@@ -97,7 +97,7 @@ function TrendTooltip({ active, payload, style }: TrendTooltipProps) {
return null;
}
type StackedTooltipProps = TooltipContentProps<number, string> & {
type StackedTooltipProps = TooltipContentProps & {
sortedAccounts: Array<{ id: string; name: string }>;
accounts: Array<{ id: string; name: string }>;
hoveredAccountId: string | null;
@@ -394,14 +394,14 @@ export function NetWorthGraph({
tickLine={{ stroke: theme.pageText }}
/>
{effectiveShowTooltip && mode === 'trend' && (
<Tooltip<number, string>
<Tooltip
content={props => <TrendTooltip {...props} style={style} />}
formatter={numberFormatterTooltip}
isAnimationActive={false}
/>
)}
{effectiveShowTooltip && mode === 'stacked' && (
<Tooltip<number, string>
<Tooltip
content={props => (
<StackedTooltip
{...props}
@@ -1,4 +1,9 @@
type PotentialNumber = number | string | undefined | null;
type PotentialNumber =
| number
| string
| undefined
| null
| readonly (number | string)[];
export const numberFormatterTooltip = (
value: PotentialNumber,
@@ -14,6 +14,7 @@ import {
import type {
DragPreviewRenderer,
DropPosition,
DropResult,
TextDropItem,
} from 'react-aria';
@@ -290,7 +291,12 @@ export function useDrop<T extends { id: string }>({
id,
onDrop,
onLongHover,
}: UseDropArgs) {
}: UseDropArgs): {
dropRef: RefObject<HTMLDivElement | null>;
dropProps: DropResult['dropProps'];
dropPos: DropPosition | null;
isDropTarget: boolean;
} {
const dropRef = useRef<HTMLDivElement>(null);
const [dropPos, setDropPos] = useState<DropPosition | null>(null);
// Track if cursor is actually within this element's bounds (not just drag preview overlap)
@@ -309,7 +315,7 @@ export function useDrop<T extends { id: string }>({
const acceptedTypes = Array.isArray(types) ? types : [types];
const { dropProps, isDropTarget } = useReactAriaDrop({
const { dropProps, isDropTarget }: DropResult = useReactAriaDrop({
ref: dropRef as RefObject<HTMLDivElement | null>,
getDropOperation(dragTypes) {
// Check if any of our accepted types are in the drag types
+3 -3
View File
@@ -16,7 +16,7 @@
},
"dependencies": {
"@actual-app/sync-server": "workspace:*",
"better-sqlite3": "^12.6.2",
"better-sqlite3": "^12.8.0",
"fs-extra": "^11.3.4",
"promise-retry": "^2.0.1"
},
@@ -25,10 +25,10 @@
"@actual-app/web": "workspace:*",
"@electron/notarize": "3.1.1",
"@electron/rebuild": "^4.0.3",
"@playwright/test": "1.58.2",
"@playwright/test": "1.59.1",
"@types/copyfiles": "^2",
"@types/fs-extra": "^11",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"copyfiles": "^2.4.1",
"cross-env": "^10.1.0",
"electron": "39.8.5",
+1 -1
View File
@@ -9,6 +9,6 @@
},
"devDependencies": {
"eslint-vitest-rule-tester": "^3.1.0",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
}
}
+1 -1
View File
@@ -31,7 +31,7 @@ fi
cp ../../../node_modules/@jlongster/sql.js/dist/sql-wasm.wasm "$PUBLIC_DIR"/sql-wasm.wasm
yarn vite build --config ../vite.config.ts --mode $NODE_ENV $VITE_ARGS
yarn vite build --config ../vite.config.mts --mode $NODE_ENV $VITE_ARGS
if [ $NODE_ENV == 'production' ]; then
# In production, just copy the built files
+16 -16
View File
@@ -150,8 +150,8 @@
"./lib-dist/electron/bundle.desktop.js": "./lib-dist/electron/bundle.desktop.js"
},
"scripts": {
"build:node": "cross-env NODE_ENV=production vite build --config ./vite.desktop.config.ts",
"watch:node": "cross-env NODE_ENV=development vite build --config ./vite.desktop.config.ts --watch",
"build:node": "cross-env NODE_ENV=production vite build --config ./vite.desktop.config.mts",
"watch:node": "cross-env NODE_ENV=development vite build --config ./vite.desktop.config.mts --watch",
"build:browser": "cross-env NODE_ENV=production ./bin/build-browser",
"watch:browser": "cross-env NODE_ENV=development ./bin/build-browser",
"generate:i18n": "i18next",
@@ -168,16 +168,16 @@
"@rschedule/core": "^1.5.0",
"@rschedule/standard-date-adapter": "^1.5.0",
"absurd-sql": "0.0.54",
"adm-zip": "^0.5.16",
"better-sqlite3": "^12.6.2",
"csv-parse": "^6.1.0",
"csv-stringify": "^6.6.0",
"adm-zip": "^0.5.17",
"better-sqlite3": "^12.8.0",
"csv-parse": "^6.2.1",
"csv-stringify": "^6.7.0",
"date-fns": "^4.1.0",
"google-protobuf": "^3.21.4",
"handlebars": "^4.7.9",
"hyperformula": "^3.2.0",
"lodash": "^4.18.1",
"lru-cache": "^11.2.6",
"lru-cache": "^11.2.7",
"memoize-one": "^6.0.0",
"mitt": "^3.0.1",
"promise-retry": "^2.0.1",
@@ -188,28 +188,28 @@
},
"devDependencies": {
"@actual-app/crdt": "workspace:*",
"@swc/core": "^1.15.18",
"@types/adm-zip": "^0.5.7",
"@swc/core": "^1.15.24",
"@types/adm-zip": "^0.5.8",
"@types/better-sqlite3": "^7.6.13",
"@types/emscripten": "^1.41.5",
"@types/jlongster__sql.js": "npm:@types/sql.js@latest",
"@types/node": "^22.19.15",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@types/node": "^22.19.17",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"assert": "^2.1.0",
"browserify-zlib": "^0.2.0",
"buffer": "^6.0.3",
"cross-env": "^10.1.0",
"crypto-browserify": "^3.12.1",
"fake-indexeddb": "^6.2.5",
"fast-check": "4.5.3",
"i18next": "^25.8.14",
"jest-diff": "^30.2.0",
"fast-check": "^4.6.0",
"i18next": "^25.10.10",
"jest-diff": "^30.3.0",
"jsverify": "^0.8.4",
"mockdate": "^3.0.5",
"npm-run-all": "^4.1.5",
"path-browserify": "^1.0.1",
"peggy": "5.1.0",
"rollup-plugin-visualizer": "^6.0.11",
"rollup-plugin-visualizer": "^7.0.1",
"stream-browserify": "^3.0.0",
"timers-browserify": "^2.0.12",
"ts-node": "^10.9.2",
@@ -217,7 +217,7 @@
"vite": "^8.0.5",
"vite-plugin-node-polyfills": "^0.26.0",
"vite-plugin-peggy-loader": "^2.0.1",
"vitest": "^4.1.0",
"vitest": "^4.1.2",
"yargs": "^18.0.0"
}
}
+2 -2
View File
@@ -15,8 +15,8 @@
"workbox-precaching": "^7.4.0"
},
"devDependencies": {
"@types/node": "^22.19.15",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@types/node": "^22.19.17",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"cross-env": "^10.1.0",
"typescript-strict-plugin": "^2.4.4",
"vite": "^8.0.5"
+5 -5
View File
@@ -80,13 +80,13 @@
"@actual-app/crdt": "2.1.0",
"@actual-app/web": "workspace:*",
"bcrypt": "^6.0.0",
"better-sqlite3": "^12.6.2",
"better-sqlite3": "^12.8.0",
"convict": "^6.2.5",
"cors": "^2.8.6",
"date-fns": "^4.1.0",
"debug": "^4.4.3",
"express": "^5.2.1",
"express-rate-limit": "^8.3.0",
"express-rate-limit": "^8.3.2",
"express-winston": "^4.2.0",
"ipaddr.js": "^2.3.0",
"migrate": "^2.1.0",
@@ -105,13 +105,13 @@
"@types/cors": "^2.8.19",
"@types/express": "^5.0.6",
"@types/express-actuator": "^1.8.3",
"@types/node": "^22.19.15",
"@types/node": "^22.19.17",
"@types/supertest": "^7.2.0",
"@typescript/native-preview": "^7.0.0-dev.20260309.1",
"@typescript/native-preview": "^7.0.0-dev.20260404.1",
"http-proxy-middleware": "^3.0.5",
"nodemon": "^3.1.14",
"supertest": "^7.2.2",
"typescript-strict-plugin": "^2.4.4",
"vitest": "^4.1.0"
"vitest": "^4.1.2"
}
}
+6
View File
@@ -0,0 +1,6 @@
---
category: Maintenance
authors: [matt-fidd]
---
Bump various dependencies
+1869 -2771
View File
File diff suppressed because it is too large Load Diff