diff --git a/common/shared/eslint/index.js b/common/shared/eslint/index.js index b9e4d52c52..b4dd88613a 100644 --- a/common/shared/eslint/index.js +++ b/common/shared/eslint/index.js @@ -126,7 +126,6 @@ exports.baseRules = { 'ts/ban-ts-comment': 'off', 'ts/no-duplicate-enum-values': 'off', 'no-cond-assign': 'warn', - 'antfu/consistent-list-newline': 'off', 'ts/no-use-before-define': 'warn', 'intunicorn/number-literal-case': 'off', 'test/no-identical-title': 'warn', diff --git a/common/storybook/package.json b/common/storybook/package.json index 049fb372d1..4846687bb1 100644 --- a/common/storybook/package.json +++ b/common/storybook/package.json @@ -16,28 +16,28 @@ "build:storybook": "storybook build" }, "dependencies": { - "@chromatic-com/storybook": "^3.2.4", - "@storybook/addon-essentials": "^8.5.8", - "@storybook/addon-interactions": "^8.5.8", - "@storybook/addon-links": "^8.5.8", + "@chromatic-com/storybook": "^3.2.5", + "@storybook/addon-essentials": "^8.6.3", + "@storybook/addon-interactions": "^8.6.3", + "@storybook/addon-links": "^8.6.3", "@storybook/addon-styling-webpack": "^1.0.1", "@storybook/addon-webpack5-compiler-swc": "^2.1.0", - "@storybook/blocks": "^8.5.8", + "@storybook/blocks": "^8.6.3", "@storybook/icons": "^1.3.2", - "@storybook/react": "^8.5.8", - "@storybook/react-webpack5": "^8.5.8", - "@storybook/types": "^8.5.8", + "@storybook/react": "^8.6.3", + "@storybook/react-webpack5": "^8.6.3", + "@storybook/types": "^8.6.3", "@univerjs/core": "workspace:*", "@univerjs/design": "workspace:*", "@univerjs/ui": "workspace:*", "css-loader": "^7.1.2", "less-loader": "^12.2.0", "postcss-loader": "^8.1.1", - "storybook": "^8.5.8", + "storybook": "^8.6.3", "storybook-addon-swc": "^1.2.0", "style-loader": "^4.0.0", "tsconfig-paths-webpack-plugin": "^4.2.0", - "typescript": "^5.7.3" + "typescript": "^5.8.2" }, "devDependencies": { "@types/fs-extra": "^11.0.4", diff --git a/e2e/visual-comparison/docs/docs-visual-comparison.spec.ts-snapshots/default-doc-ci-chromium-linux.png b/e2e/visual-comparison/docs/docs-visual-comparison.spec.ts-snapshots/default-doc-ci-chromium-linux.png index 0fedcc2f68..d3e945f768 100644 Binary files a/e2e/visual-comparison/docs/docs-visual-comparison.spec.ts-snapshots/default-doc-ci-chromium-linux.png and b/e2e/visual-comparison/docs/docs-visual-comparison.spec.ts-snapshots/default-doc-ci-chromium-linux.png differ diff --git a/e2e/visual-comparison/sheets/sheets-switching-render-unit.spec.ts-snapshots/switching-render-unit-ci-chromium-linux.png b/e2e/visual-comparison/sheets/sheets-switching-render-unit.spec.ts-snapshots/switching-render-unit-ci-chromium-linux.png index 0cdea085d0..28c3b90d61 100644 Binary files a/e2e/visual-comparison/sheets/sheets-switching-render-unit.spec.ts-snapshots/switching-render-unit-ci-chromium-linux.png and b/e2e/visual-comparison/sheets/sheets-switching-render-unit.spec.ts-snapshots/switching-render-unit-ci-chromium-linux.png differ diff --git a/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/default-sheet-fullpage-ci-chromium-linux.png b/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/default-sheet-fullpage-ci-chromium-linux.png index 0cdea085d0..28c3b90d61 100644 Binary files a/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/default-sheet-fullpage-ci-chromium-linux.png and b/e2e/visual-comparison/sheets/sheets-visual-comparison.spec.ts-snapshots/default-sheet-fullpage-ci-chromium-linux.png differ diff --git a/eslint.config.js b/eslint.config.js index 48ff007692..e991821222 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -29,7 +29,8 @@ export default antfu( ignores: [ 'mockdata/**/*.json', ], - }, { + }, + { files: ['**/*.ts', '**/*.tsx'], ignores: [ 'packages/engine-render/src/components/docs/**/*.ts', @@ -46,7 +47,8 @@ export default antfu( complexity: ['warn', { max: 20 }], 'max-lines-per-function': ['warn', 80], }, - }, { + }, + { files: ['**/*.ts', '**/*.tsx'], ignores: ['**/*.d.ts', '**/vite.config.ts', '**/vitest.config.ts', 'playwright.config.ts'], plugins: { @@ -78,7 +80,8 @@ export default antfu( 2, ], }, - }, { + }, + { // Not penetrating for source files files: ['**/*.ts', '**/*.tsx'], plugins: { @@ -92,7 +95,8 @@ export default antfu( rules: { 'penetrating/no-penetrating-import': 2, }, - }, { + }, + { files: ['**/*/src/index.ts'], rules: { 'perfectionist/sort-exports': 'off', diff --git a/examples/package.json b/examples/package.json index e66c2ab2c1..78e4ea5307 100644 --- a/examples/package.json +++ b/examples/package.json @@ -97,6 +97,6 @@ "postcss": "^8.5.3", "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", - "typescript": "^5.7.3" + "typescript": "^5.8.2" } } diff --git a/examples/src/uni/main.ts b/examples/src/uni/main.ts index 42880fd27f..56266cf4e7 100644 --- a/examples/src/uni/main.ts +++ b/examples/src/uni/main.ts @@ -111,7 +111,8 @@ function registerBasicPlugins(univer: Univer) { [DocUIController, { useFactory: (injector) => { injector.createInstance(UniDocsUIController, {}); - }, deps: [Injector], + }, + deps: [Injector], }], ], }); @@ -132,7 +133,8 @@ function registerSheetPlugins(univer: Univer) { [SheetUIController, { useFactory: (injector) => { injector.createInstance(UniSheetsUIController, {}); - }, deps: [Injector], + }, + deps: [Injector], }], ], }); diff --git a/mockdata/package.json b/mockdata/package.json index 693d3cc3a3..1a845e9cbd 100644 --- a/mockdata/package.json +++ b/mockdata/package.json @@ -42,6 +42,6 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3" + "typescript": "^5.8.2" } } diff --git a/mockdata/src/sheets/demo/default-workbook-data-demo.ts b/mockdata/src/sheets/demo/default-workbook-data-demo.ts index 45727ce8ba..eef67b6f81 100644 --- a/mockdata/src/sheets/demo/default-workbook-data-demo.ts +++ b/mockdata/src/sheets/demo/default-workbook-data-demo.ts @@ -24210,7 +24210,9 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { drawingId: 'sF2ogx', drawingType: 0, imageSourceType: 'BASE64', - source: 'data:image/jpeg;base64,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', sheetTransform: { angle: 45, from: { column: 14, columnOffset: 49.7, row: 3, rowOffset: 9.4 }, to: { column: 18, columnOffset: 49.6, row: 17, rowOffset: 15.5 } }, transform: { flipY: false, flipX: false, angle: 45, skewX: 0, skewY: 0, left: 1117.7, top: 86.4, width: 291.9, height: 215.1 }, + source: 'data:image/jpeg;base64,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', + sheetTransform: { angle: 45, from: { column: 14, columnOffset: 49.7, row: 3, rowOffset: 9.4 }, to: { column: 18, columnOffset: 49.6, row: 17, rowOffset: 15.5 } }, + transform: { flipY: false, flipX: false, angle: 45, skewX: 0, skewY: 0, left: 1117.7, top: 86.4, width: 291.9, height: 215.1 }, }, 'UPBpL-A3RvKoOqPdd8VIq': { unitId: 'workbook-01', diff --git a/package.json b/package.json index 97c1f8f7fa..dc285019fa 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "type": "module", "version": "0.6.2", "private": true, - "packageManager": "pnpm@10.4.1", + "packageManager": "pnpm@10.5.2", "author": "DreamNum Co., Ltd. ", "license": "Apache-2.0", "funding": { @@ -47,7 +47,7 @@ "@antfu/eslint-config": "4.3.0", "@commitlint/cli": "^19.7.1", "@commitlint/config-conventional": "^19.7.1", - "@eslint-react/eslint-plugin": "^1.28.0", + "@eslint-react/eslint-plugin": "^1.29.0", "@playwright/test": "^1.50.1", "@release-it-plugins/workspaces": "^4.2.0", "@release-it/conventional-changelog": "^9.0.4", @@ -65,7 +65,7 @@ "eslint-plugin-no-barrel-import": "^0.0.2", "eslint-plugin-no-penetrating-import": "^0.0.1", "eslint-plugin-react": "^7.37.4", - "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-react-hooks": "5.2.0", "eslint-plugin-react-refresh": "^0.4.19", "husky": "^9.1.7", "lint-staged": "^15.4.3", @@ -76,7 +76,7 @@ "serve": "^14.2.4", "tsx": "^4.19.3", "turbo": "^2.4.4", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vitest": "^3.0.7" }, "pnpm": { diff --git a/packages-experimental/action-recorder/package.json b/packages-experimental/action-recorder/package.json index 574d27d060..6299ec07d9 100644 --- a/packages-experimental/action-recorder/package.json +++ b/packages-experimental/action-recorder/package.json @@ -80,7 +80,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/action-recorder/src/controllers/action-recorder.controller.tsx b/packages-experimental/action-recorder/src/controllers/action-recorder.controller.tsx index 80021a1e9e..3b7f014b25 100644 --- a/packages-experimental/action-recorder/src/controllers/action-recorder.controller.tsx +++ b/packages-experimental/action-recorder/src/controllers/action-recorder.controller.tsx @@ -16,7 +16,8 @@ import { Disposable, ICommandService, Inject, Injector } from '@univerjs/core'; import { RecordSingle } from '@univerjs/icons'; -import { AddWorksheetMergeAllCommand, +import { + AddWorksheetMergeAllCommand, AddWorksheetMergeCommand, AddWorksheetMergeHorizontalCommand, AddWorksheetMergeVerticalCommand, @@ -47,7 +48,10 @@ import { AddWorksheetMergeAllCommand, SetWorksheetActiveOperation, } from '@univerjs/sheets'; import { RemoveSheetFilterCommand, SetSheetFilterRangeCommand, SetSheetsFilterCriteriaCommand } from '@univerjs/sheets-filter'; -import { AutoFillCommand, RefillCommand, SetRangeBoldCommand, +import { + AutoFillCommand, + RefillCommand, + SetRangeBoldCommand, SetRangeFontFamilyCommand, SetRangeFontSizeCommand, SetRangeItalicCommand, diff --git a/packages-experimental/debugger/package.json b/packages-experimental/debugger/package.json index 4e3b0cd0da..9943f0b287 100644 --- a/packages-experimental/debugger/package.json +++ b/packages-experimental/debugger/package.json @@ -83,7 +83,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7", "vue": "^3.5.13" diff --git a/packages-experimental/sheets-source-binding/package.json b/packages-experimental/sheets-source-binding/package.json index 49f858e859..09e98497de 100644 --- a/packages-experimental/sheets-source-binding/package.json +++ b/packages-experimental/sheets-source-binding/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uni-docs-ui/package.json b/packages-experimental/uni-docs-ui/package.json index 88d7e26ada..96d31b0771 100644 --- a/packages-experimental/uni-docs-ui/package.json +++ b/packages-experimental/uni-docs-ui/package.json @@ -72,7 +72,7 @@ "postcss": "^8.5.3", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uni-formula-ui/package.json b/packages-experimental/uni-formula-ui/package.json index 5797cdbeb6..3107e44978 100644 --- a/packages-experimental/uni-formula-ui/package.json +++ b/packages-experimental/uni-formula-ui/package.json @@ -85,7 +85,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uni-formula-ui/src/services/uni-formula.service.ts b/packages-experimental/uni-formula-ui/src/services/uni-formula.service.ts index c1cb18534f..785ffcbf53 100644 --- a/packages-experimental/uni-formula-ui/src/services/uni-formula.service.ts +++ b/packages-experimental/uni-formula-ui/src/services/uni-formula.service.ts @@ -21,8 +21,10 @@ import type { IDisposable, IDocumentBody, Nullable, - SlideDataModel } from '@univerjs/core'; + SlideDataModel, +} from '@univerjs/core'; import type { IDocFormulaCache, ISlideFormulaCache } from '@univerjs/uni-formula'; +import type { IDocPopupPosition, ISlidePopupPosition } from '../commands/operations/operation'; import { BuildTextUtils, CommandType, @@ -45,7 +47,7 @@ import { RegisterOtherFormulaService } from '@univerjs/sheets-formula'; import { CanvasView } from '@univerjs/slides-ui'; import { DumbUniFormulaService, IUniFormulaService } from '@univerjs/uni-formula'; import { take } from 'rxjs'; -import { type IDocPopupPosition, type ISlidePopupPosition, isSlidePosition } from '../commands/operations/operation'; +import { isSlidePosition } from '../commands/operations/operation'; const PSEUDO_SUBUNIT = 'PSEUDO_SUBUNIT'; diff --git a/packages-experimental/uni-formula/package.json b/packages-experimental/uni-formula/package.json index 6f948deaee..357dda0ba6 100644 --- a/packages-experimental/uni-formula/package.json +++ b/packages-experimental/uni-formula/package.json @@ -60,7 +60,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uni-sheets-ui/package.json b/packages-experimental/uni-sheets-ui/package.json index dd7e41dc3b..d7d84a6a25 100644 --- a/packages-experimental/uni-sheets-ui/package.json +++ b/packages-experimental/uni-sheets-ui/package.json @@ -77,7 +77,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uni-slides-ui/package.json b/packages-experimental/uni-slides-ui/package.json index 20a370db40..17a0177489 100644 --- a/packages-experimental/uni-slides-ui/package.json +++ b/packages-experimental/uni-slides-ui/package.json @@ -74,7 +74,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages-experimental/uniui/package.json b/packages-experimental/uniui/package.json index e3965b3416..7ae3c7cadf 100644 --- a/packages-experimental/uniui/package.json +++ b/packages-experimental/uniui/package.json @@ -79,7 +79,7 @@ "react-dom": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/core/package.json b/packages/core/package.json index c28e6d1890..e107f0c902 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -86,7 +86,7 @@ "@types/rbush": "^4.0.0", "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/core/src/common/url.ts b/packages/core/src/common/url.ts index edecac6358..5ed084b2a8 100644 --- a/packages/core/src/common/url.ts +++ b/packages/core/src/common/url.ts @@ -320,7 +320,8 @@ const re_weburl = new RegExp( '(?::\\d{2,5})?' + // resource path (optional) '(?:[/?#]\\S*)?' + - '$', 'i' + '$', + 'i' ); export function isLegalUrl(url: string) { // skip number 0.1 diff --git a/packages/core/src/docs/data-model/text-x/__tests__/apply.spec.ts b/packages/core/src/docs/data-model/text-x/__tests__/apply.spec.ts index 3267ae25da..b84f9f5d5c 100644 --- a/packages/core/src/docs/data-model/text-x/__tests__/apply.spec.ts +++ b/packages/core/src/docs/data-model/text-x/__tests__/apply.spec.ts @@ -14,11 +14,12 @@ * limitations under the License. */ +import type { IDocumentBody } from '../../../../types/interfaces'; import type { TextXAction } from '../action-types'; import { describe, expect, it } from 'vitest'; import { UpdateDocsAttributeType } from '../../../../shared'; import { BooleanNumber, HorizontalAlign } from '../../../../types/enum'; -import { CustomRangeType, type IDocumentBody } from '../../../../types/interfaces'; +import { CustomRangeType } from '../../../../types/interfaces'; import { PresetListType } from '../../preset-list-type'; import { TextXActionType } from '../action-types'; import { TextX } from '../text-x'; @@ -290,7 +291,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, body: { @@ -309,7 +311,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, body: { @@ -349,7 +352,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, coverType: UpdateDocsAttributeType.REPLACE, @@ -369,7 +373,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, coverType: UpdateDocsAttributeType.REPLACE, @@ -410,7 +415,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, coverType: UpdateDocsAttributeType.REPLACE, @@ -435,7 +441,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, coverType: UpdateDocsAttributeType.REPLACE, @@ -481,7 +488,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.RETAIN, len: 1, body: { @@ -539,7 +547,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 1, - }, { + }, + { t: TextXActionType.INSERT, len: 1, body: { @@ -558,7 +567,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 2, - }, { + }, + { t: TextXActionType.INSERT, len: 1, body: { @@ -614,7 +624,8 @@ describe('apply method', () => { { t: TextXActionType.RETAIN, len: 2, - }, { + }, + { t: TextXActionType.INSERT, len: 1, body: { diff --git a/packages/core/src/docs/data-model/text-x/apply-utils/common.ts b/packages/core/src/docs/data-model/text-x/apply-utils/common.ts index 8bddaaaa17..bf29a40102 100644 --- a/packages/core/src/docs/data-model/text-x/apply-utils/common.ts +++ b/packages/core/src/docs/data-model/text-x/apply-utils/common.ts @@ -403,8 +403,7 @@ export function splitCustomRangesByIndex(customRanges: ICustomRange[], currentIn startIndex: matchedCustomRange.startIndex, endIndex: currentIndex - 1, properties: { ...matchedCustomRange.properties }, - }, - { + }, { rangeId: matchedCustomRange.rangeId, rangeType: matchedCustomRange.rangeType, startIndex: currentIndex, @@ -451,8 +450,7 @@ export function splitCustomDecoratesByIndex(customDecorations: ICustomDecoration type: matched.type, startIndex: matched.startIndex, endIndex: currentIndex - 1, - }, - { + }, { id: matched.id, type: matched.type, startIndex: currentIndex, diff --git a/packages/core/src/facade/f-univer.ts b/packages/core/src/facade/f-univer.ts index 246a4cc3e0..cf0b927f97 100644 --- a/packages/core/src/facade/f-univer.ts +++ b/packages/core/src/facade/f-univer.ts @@ -232,13 +232,11 @@ export class FUniver extends Disposable { this.Event.DocDisposed, () => univerInstanceService.unitDisposed$.subscribe((unit) => { if (unit.type === UniverInstanceType.UNIVER_DOC) { - this.fireEvent(this.Event.DocDisposed, - { - unitId: unit.getUnitId(), - unitType: unit.type, - snapshot: unit.getSnapshot() as IDocumentData, - } - ); + this.fireEvent(this.Event.DocDisposed, { + unitId: unit.getUnitId(), + unitType: unit.type, + snapshot: unit.getSnapshot() as IDocumentData, + }); } }) ); @@ -249,14 +247,12 @@ export class FUniver extends Disposable { if (unit.type === UniverInstanceType.UNIVER_DOC) { const doc = unit as DocumentDataModel; const docUnit = injector.createInstance(FDoc, doc); - this.fireEvent(this.Event.DocCreated, - { - unitId: unit.getUnitId(), - type: unit.type, - doc: docUnit, - unit: docUnit, - } - ); + this.fireEvent(this.Event.DocCreated, { + unitId: unit.getUnitId(), + type: unit.type, + doc: docUnit, + unit: docUnit, + }); } }) ); diff --git a/packages/core/src/services/user-manager/user-manager.service.ts b/packages/core/src/services/user-manager/user-manager.service.ts index cb449397cb..ac46370b5c 100644 --- a/packages/core/src/services/user-manager/user-manager.service.ts +++ b/packages/core/src/services/user-manager/user-manager.service.ts @@ -18,7 +18,9 @@ import { BehaviorSubject, Subject } from 'rxjs'; import { createDefaultUser } from './const'; export interface IUser { - userID: string; name: string; avatar?: string; + userID: string; + name: string; + avatar?: string; }; export class UserManagerService { diff --git a/packages/core/src/shared/__tests__/object-matrix.spec.ts b/packages/core/src/shared/__tests__/object-matrix.spec.ts index 05636e4e02..d435b4bb38 100644 --- a/packages/core/src/shared/__tests__/object-matrix.spec.ts +++ b/packages/core/src/shared/__tests__/object-matrix.spec.ts @@ -25,7 +25,9 @@ describe('test ObjectMatrix', () => { }); const getHasNullPrimitiveObj = () => ({ - 1: '111', 2: null, 3: '333', + 1: '111', + 2: null, + 3: '333', }); it('test deleteValue', () => { @@ -79,7 +81,9 @@ describe('test ObjectMatrix', () => { const primitiveObject = getHasNullPrimitiveObj(); moveMatrixArray(2, 1, 0, primitiveObject); expect(primitiveObject).toStrictEqual({ - 0: null, 2: '111', 3: '333', + 0: null, + 2: '111', + 3: '333', }); }); @@ -87,7 +91,9 @@ describe('test ObjectMatrix', () => { const primitiveObject = getHasNullPrimitiveObj(); moveMatrixArray(2, 1, 4, primitiveObject); expect(primitiveObject).toStrictEqual({ - 1: '111', 2: '333', 3: null, + 1: '111', + 2: '333', + 3: null, }); }); it('test spliceMatrix row', () => { diff --git a/packages/data-validation/package.json b/packages/data-validation/package.json index 25fecbb004..2f5d675d9c 100644 --- a/packages/data-validation/package.json +++ b/packages/data-validation/package.json @@ -69,7 +69,7 @@ "@univerjs/protocol": "0.1.43", "@univerjs/sheets": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/data-validation/src/models/data-validation-model.ts b/packages/data-validation/src/models/data-validation-model.ts index dc7ef971e8..a7bd84f090 100644 --- a/packages/data-validation/src/models/data-validation-model.ts +++ b/packages/data-validation/src/models/data-validation-model.ts @@ -35,7 +35,8 @@ export interface IRuleChange { } interface ISubUnitDataValidation { - map: Map; list: IDataValidationRule[]; + map: Map; + list: IDataValidationRule[]; } export class DataValidationModel extends Disposable { diff --git a/packages/design/package.json b/packages/design/package.json index 29486df5c3..479ac9a688 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -99,7 +99,7 @@ "react-dom": "18.3.1", "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/design/src/components/tooltip/Tooltip.tsx b/packages/design/src/components/tooltip/Tooltip.tsx index 1f25e569c3..9f71985118 100644 --- a/packages/design/src/components/tooltip/Tooltip.tsx +++ b/packages/design/src/components/tooltip/Tooltip.tsx @@ -285,10 +285,10 @@ export function Tooltip(props: ITooltipProps) { : (
{children}
diff --git a/packages/docs-drawing-ui/package.json b/packages/docs-drawing-ui/package.json index 8176bb29da..1c7e5b1b4e 100644 --- a/packages/docs-drawing-ui/package.json +++ b/packages/docs-drawing-ui/package.json @@ -84,7 +84,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-drawing-ui/src/commands/commands/utils.ts b/packages/docs-drawing-ui/src/commands/commands/utils.ts index 36ea66ed3c..6b5cebcdbe 100644 --- a/packages/docs-drawing-ui/src/commands/commands/utils.ts +++ b/packages/docs-drawing-ui/src/commands/commands/utils.ts @@ -14,8 +14,9 @@ * limitations under the License. */ +import type { IDrawingParam } from '@univerjs/core'; import type { IDrawingGroupUpdateParam } from '@univerjs/drawing'; -import { DrawingTypeEnum, type IDrawingParam } from '@univerjs/core'; +import { DrawingTypeEnum } from '@univerjs/core'; import { getGroupState, transformObjectOutOfGroup } from '@univerjs/engine-render'; export function ungroupToGroup(ungroupParams: IDrawingGroupUpdateParam[]) { @@ -30,7 +31,9 @@ export function ungroupToGroup(ungroupParams: IDrawingGroupUpdateParam[]) { const transform = drawing.transform || { left: 0, top: 0 }; const { unitId, subUnitId, drawingId } = drawing; return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: { ...transform, left: transform.left! - groupTransform.left, @@ -71,7 +74,9 @@ export function groupToUngroup(groupParams: IDrawingGroupUpdateParam[]) { const { unitId, subUnitId, drawingId } = object; const newTransform = transformObjectOutOfGroup(transform || {}, groupTransform, groupTransform.width || 0, groupTransform.height || 0); return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: newTransform, groupId: undefined, }; diff --git a/packages/docs-drawing-ui/src/controllers/doc-drawing-transformer-update.controller.ts b/packages/docs-drawing-ui/src/controllers/doc-drawing-transformer-update.controller.ts index f39b2893d6..b5bc3016c7 100644 --- a/packages/docs-drawing-ui/src/controllers/doc-drawing-transformer-update.controller.ts +++ b/packages/docs-drawing-ui/src/controllers/doc-drawing-transformer-update.controller.ts @@ -20,8 +20,15 @@ import type { IDrawingDocTransform } from '../commands/commands/update-doc-drawi import { BooleanNumber, COLORS, - Disposable, ICommandService, IUniverInstanceService, ObjectRelativeFromH, ObjectRelativeFromV, - PositionedObjectLayoutType, throttle, toDisposable, Tools, + Disposable, + ICommandService, + IUniverInstanceService, + ObjectRelativeFromH, + ObjectRelativeFromV, + PositionedObjectLayoutType, + throttle, + toDisposable, + Tools, } from '@univerjs/core'; import { DocSkeletonManagerService } from '@univerjs/docs'; import { DocSelectionRenderService, getAnchorBounding, getDocObject, getOneTextSelectionRange, NodePositionConvertToCursor, TEXT_RANGE_LAYER_INDEX } from '@univerjs/docs-ui'; @@ -377,7 +384,8 @@ export class DocDrawingTransformerController extends Disposable { const activeViewport = scene.getViewports()[0]; const { pageLayoutType = PageLayoutType.VERTICAL, - pageMarginLeft, pageMarginTop, + pageMarginLeft, + pageMarginTop, } = documentComponent.getOffsetConfig(); let glyphAnchor: Nullable = null; let isBack = false; @@ -395,14 +403,11 @@ export class DocDrawingTransformerController extends Disposable { return; } - const nodeInfo = skeleton?.findNodeByCoord( - coord, pageLayoutType, pageMarginLeft, pageMarginTop, - { - strict: false, - segmentId: docSelectionRenderService.getSegment(), - segmentPage: docSelectionRenderService.getSegmentPage(), - } - ); + const nodeInfo = skeleton?.findNodeByCoord(coord, pageLayoutType, pageMarginLeft, pageMarginTop, { + strict: false, + segmentId: docSelectionRenderService.getSegment(), + segmentPage: docSelectionRenderService.getSegmentPage(), + }); if (nodeInfo) { const { node, ratioX, segmentPage, segmentId: nodeSegmentId } = nodeInfo; isBack = ratioX < HALF; @@ -835,7 +840,8 @@ export class DocDrawingTransformerController extends Disposable { const { mainComponent, scene } = currentRender; const documentComponent = mainComponent as Documents; const { - docsLeft, docsTop, + docsLeft, + docsTop, } = documentComponent.getOffsetConfig(); const bounding = getAnchorBounding(pointsGroup); const { left: boundingLeft, top: boundingTop, height } = bounding; diff --git a/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-transform-update.controller.ts b/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-transform-update.controller.ts index 6de8b031e2..f4940bd841 100644 --- a/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-transform-update.controller.ts +++ b/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-transform-update.controller.ts @@ -166,7 +166,11 @@ export class DocDrawingTransformUpdateController extends Disposable implements I if (headerPage) { this._calculateDrawingPosition( - unitId, headerPage, docsLeft, docsTop, updateDrawingMap, + unitId, + headerPage, + docsLeft, + docsTop, + updateDrawingMap, headerPage.marginTop, page.marginLeft ); @@ -178,7 +182,11 @@ export class DocDrawingTransformUpdateController extends Disposable implements I if (footerPage) { this._calculateDrawingPosition( - unitId, footerPage, docsLeft, docsTop, updateDrawingMap, + unitId, + footerPage, + docsLeft, + docsTop, + updateDrawingMap, page.pageHeight - page.marginBottom + footerPage.marginTop, page.marginLeft ); diff --git a/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-update.render-controller.ts b/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-update.render-controller.ts index 04bfb417e4..dc762d082e 100644 --- a/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-update.render-controller.ts +++ b/packages/docs-drawing-ui/src/controllers/render-controllers/doc-drawing-update.render-controller.ts @@ -19,19 +19,20 @@ import type { IDocDrawing } from '@univerjs/docs-drawing'; import type { IImageIoServiceParam } from '@univerjs/drawing'; import type { Documents, Image, IRenderContext, IRenderModule } from '@univerjs/engine-render'; import type { IInsertDrawingCommandParams } from '../../commands/commands/interfaces'; +import type { ISetDrawingArrangeCommandParams } from '../../commands/commands/set-drawing-arrange.command'; import { BooleanNumber, Disposable, DrawingTypeEnum, FOCUSING_COMMON_DRAWINGS, ICommandService, IContextService, Inject, LocaleService, ObjectRelativeFromH, ObjectRelativeFromV, PositionedObjectLayoutType, WrapTextType } from '@univerjs/core'; import { MessageType } from '@univerjs/design'; import { DocSelectionManagerService, DocSkeletonManagerService, RichTextEditingMutation } from '@univerjs/docs'; import { IDocDrawingService } from '@univerjs/docs-drawing'; import { docDrawingPositionToTransform, DocSelectionRenderService } from '@univerjs/docs-ui'; import { DRAWING_IMAGE_ALLOW_IMAGE_LIST, DRAWING_IMAGE_ALLOW_SIZE, DRAWING_IMAGE_COUNT_LIMIT, DRAWING_IMAGE_HEIGHT_LIMIT, DRAWING_IMAGE_WIDTH_LIMIT, getDrawingShapeKeyByDrawingSearch, getImageSize, IDrawingManagerService, IImageIoService, ImageUploadStatusType } from '@univerjs/drawing'; -import { DocumentEditArea, IRenderManagerService } from '@univerjs/engine-render'; +import { DocumentEditArea, IRenderManagerService } from '@univerjs/engine-render'; import { ILocalFileService, IMessageService } from '@univerjs/ui'; import { debounceTime } from 'rxjs'; import { GroupDocDrawingCommand } from '../../commands/commands/group-doc-drawing.command'; import { InsertDocDrawingCommand } from '../../commands/commands/insert-doc-drawing.command'; -import { type ISetDrawingArrangeCommandParams, SetDocDrawingArrangeCommand } from '../../commands/commands/set-drawing-arrange.command'; +import { SetDocDrawingArrangeCommand } from '../../commands/commands/set-drawing-arrange.command'; import { UngroupDocDrawingCommand } from '../../commands/commands/ungroup-doc-drawing.command'; import { DocRefreshDrawingsService } from '../../services/doc-refresh-drawings.service'; @@ -188,7 +189,8 @@ export class DocDrawingUpdateRenderController extends Disposable implements IRen } private _getImagePosition( - imageWidth: number, imageHeight: number + imageWidth: number, + imageHeight: number ): Nullable { const activeTextRange = this._docSelectionRenderService.getActiveTextRange(); // TODO: NO need to get the cursor position, because the insert image is inline. diff --git a/packages/docs-drawing-ui/src/views/doc-image-panel/DocDrawingTextWrap.tsx b/packages/docs-drawing-ui/src/views/doc-image-panel/DocDrawingTextWrap.tsx index 7769efda65..15bdda0293 100644 --- a/packages/docs-drawing-ui/src/views/doc-image-panel/DocDrawingTextWrap.tsx +++ b/packages/docs-drawing-ui/src/views/doc-image-panel/DocDrawingTextWrap.tsx @@ -173,7 +173,10 @@ export const DocDrawingTextWrap = (props: IDocDrawingTextWrapProps) => { } const { - distT = 0, distL = 0, distB = 0, distR = 0, + distT = 0, + distL = 0, + distB = 0, + distR = 0, layoutType = PositionedObjectLayoutType.INLINE, behindDoc = BooleanNumber.FALSE, wrapText = WrapTextType.BOTH_SIDES, diff --git a/packages/docs-drawing/package.json b/packages/docs-drawing/package.json index 2df56225fe..6765b3feb2 100644 --- a/packages/docs-drawing/package.json +++ b/packages/docs-drawing/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-hyper-link-ui/package.json b/packages/docs-hyper-link-ui/package.json index 0a9a674c12..fca536044e 100644 --- a/packages/docs-hyper-link-ui/package.json +++ b/packages/docs-hyper-link-ui/package.json @@ -81,7 +81,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-hyper-link/package.json b/packages/docs-hyper-link/package.json index 69eef187dc..e8610c2a83 100644 --- a/packages/docs-hyper-link/package.json +++ b/packages/docs-hyper-link/package.json @@ -60,7 +60,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-mention-ui/package.json b/packages/docs-mention-ui/package.json index 682f063901..9598a3dce0 100644 --- a/packages/docs-mention-ui/package.json +++ b/packages/docs-mention-ui/package.json @@ -75,7 +75,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-thread-comment-ui/package.json b/packages/docs-thread-comment-ui/package.json index 7950e493bc..3f80743b46 100644 --- a/packages/docs-thread-comment-ui/package.json +++ b/packages/docs-thread-comment-ui/package.json @@ -75,7 +75,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-ui/package.json b/packages/docs-ui/package.json index 8a3fe7b35f..68fdaab412 100644 --- a/packages/docs-ui/package.json +++ b/packages/docs-ui/package.json @@ -90,7 +90,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/docs-ui/src/commands/commands/inline-format.command.ts b/packages/docs-ui/src/commands/commands/inline-format.command.ts index 1ba5715896..f1d8e69d52 100644 --- a/packages/docs-ui/src/commands/commands/inline-format.command.ts +++ b/packages/docs-ui/src/commands/commands/inline-format.command.ts @@ -16,19 +16,29 @@ import type { DocumentDataModel, - ICommand, IDocumentBody, IMutationInfo, IStyleBase, ITextDecoration, ITextRun, + ICommand, + IDocumentBody, + IMutationInfo, + IStyleBase, + ITextDecoration, + ITextRun, ITextStyle, Nullable, } from '@univerjs/core'; import type { IRichTextEditingMutationParams } from '@univerjs/docs'; import type { ITextRangeWithStyle } from '@univerjs/engine-render'; import { - BaselineOffset, BooleanNumber, CommandType, + BaselineOffset, + BooleanNumber, + CommandType, DOC_RANGE_TYPE, getBodySlice, - ICommandService, IUniverInstanceService, - JSONX, MemoryCursor, - TextX, TextXActionType, + ICommandService, + IUniverInstanceService, + JSONX, + MemoryCursor, + TextX, + TextXActionType, Tools, UniverInstanceType, } from '@univerjs/core'; diff --git a/packages/docs-ui/src/commands/commands/paragraph-align.command.ts b/packages/docs-ui/src/commands/commands/paragraph-align.command.ts index f033613606..a627f607a0 100644 --- a/packages/docs-ui/src/commands/commands/paragraph-align.command.ts +++ b/packages/docs-ui/src/commands/commands/paragraph-align.command.ts @@ -18,7 +18,8 @@ import type { ICommand, IMutationInfo, IParagraphStyle } from '@univerjs/core'; import type { IRichTextEditingMutationParams } from '@univerjs/docs'; import { - CommandType, HorizontalAlign, + CommandType, + HorizontalAlign, ICommandService, IUniverInstanceService, JSONX, diff --git a/packages/docs-ui/src/controllers/doc-move-cursor.controller.ts b/packages/docs-ui/src/controllers/doc-move-cursor.controller.ts index a908ab2388..f563f2152d 100644 --- a/packages/docs-ui/src/controllers/doc-move-cursor.controller.ts +++ b/packages/docs-ui/src/controllers/doc-move-cursor.controller.ts @@ -112,8 +112,15 @@ export class DocMoveCursorController extends Disposable { } const { - startOffset, endOffset, style, collapsed, direction: rangeDirection, - segmentId, startNodePosition, endNodePosition, segmentPage, + startOffset, + endOffset, + style, + collapsed, + direction: rangeDirection, + segmentId, + startNodePosition, + endNodePosition, + segmentPage, } = activeRange; if (allRanges.length > 1) { diff --git a/packages/docs-ui/src/facade/f-document.ts b/packages/docs-ui/src/facade/f-document.ts index 0ecdbc8988..b8d218cb50 100644 --- a/packages/docs-ui/src/facade/f-document.ts +++ b/packages/docs-ui/src/facade/f-document.ts @@ -15,7 +15,9 @@ */ import type { DocumentDataModel, IDocumentData } from '@univerjs/core'; -import { DOC_RANGE_TYPE, ICommandService, +import { + DOC_RANGE_TYPE, + ICommandService, Inject, Injector, IResourceManagerService, diff --git a/packages/docs-ui/src/services/clipboard/clipboard.service.ts b/packages/docs-ui/src/services/clipboard/clipboard.service.ts index eb1817fc9b..8f08416f18 100644 --- a/packages/docs-ui/src/services/clipboard/clipboard.service.ts +++ b/packages/docs-ui/src/services/clipboard/clipboard.service.ts @@ -141,7 +141,9 @@ export class DocClipboardService extends Disposable implements IDocClipboardServ } async legacyPaste(options: { - html?: string; text?: string; files: File[]; + html?: string; + text?: string; + files: File[]; }): Promise { let { html, text, files } = options; const currentDocInstance = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_DOC); diff --git a/packages/docs-ui/src/services/selection/doc-selection-render.service.ts b/packages/docs-ui/src/services/selection/doc-selection-render.service.ts index 89eabb0a39..2c48ee6b6b 100644 --- a/packages/docs-ui/src/services/selection/doc-selection-render.service.ts +++ b/packages/docs-ui/src/services/selection/doc-selection-render.service.ts @@ -192,7 +192,14 @@ export class DocSelectionRenderService extends RxDisposable implements IRenderMo const generalAddRange = (startOffset: number, endOffset: number) => { const rangeList = getRangeListFromCharIndex( - startOffset, endOffset, scene, document, docSkeleton, style, segmentId, segmentPage + startOffset, + endOffset, + scene, + document, + docSkeleton, + style, + segmentId, + segmentPage ); if (rangeList == null) { @@ -1233,7 +1240,11 @@ export class DocSelectionRenderService extends RxDisposable implements IRenderMo } = document.getOffsetConfig(); const nodeInfo = skeleton.findNodeByCoord( - coord, pageLayoutType, pageMarginLeft, pageMarginTop, restrictions + coord, + pageLayoutType, + pageMarginLeft, + pageMarginTop, + restrictions ); return nodeInfo; diff --git a/packages/docs-ui/src/services/selection/rect-range.ts b/packages/docs-ui/src/services/selection/rect-range.ts index e75e7871c9..e690503632 100644 --- a/packages/docs-ui/src/services/selection/rect-range.ts +++ b/packages/docs-ui/src/services/selection/rect-range.ts @@ -14,9 +14,10 @@ * limitations under the License. */ +import type { Nullable } from '@univerjs/core'; import type { Documents, DocumentSkeleton, INodePosition, IPoint, ITextSelectionStyle, Scene } from '@univerjs/engine-render'; import type { IDocRange } from './range-interface'; -import { COLORS, DOC_RANGE_TYPE, type Nullable, RANGE_DIRECTION, Rectangle, Tools } from '@univerjs/core'; +import { COLORS, DOC_RANGE_TYPE, RANGE_DIRECTION, Rectangle, Tools } from '@univerjs/core'; import { getColor, NORMAL_TEXT_SELECTION_PLUGIN_STYLE, RegularPolygon } from '@univerjs/engine-render'; import { compareNodePositionInTable, NodePositionConvertToRectRange } from './convert-rect-range'; import { TEXT_RANGE_LAYER_INDEX } from './text-range'; @@ -39,7 +40,14 @@ export function convertPositionsToRectRanges( const nodePositionGroup = convertor.getNodePositionGroup(anchorNodePosition, focusNodePosition); return (nodePositionGroup ?? []).map((position) => new RectRange( - scene, document, docSkeleton, position.anchor, position.focus, style, segmentId, segmentPage + scene, + document, + docSkeleton, + position.anchor, + position.focus, + style, + segmentId, + segmentPage )); } diff --git a/packages/docs-ui/src/services/selection/text-range.ts b/packages/docs-ui/src/services/selection/text-range.ts index e90d5ced9d..a60dac067c 100644 --- a/packages/docs-ui/src/services/selection/text-range.ts +++ b/packages/docs-ui/src/services/selection/text-range.ts @@ -48,7 +48,14 @@ export function cursorConvertToTextRange( ? docSkeleton.findNodePositionByCharIndex(endOffset, true, segmentId, segmentPage) : null; const textRange = new TextRange( - scene, document, docSkeleton, anchorNodePosition, focusNodePosition, style, segmentId, segmentPage + scene, + document, + docSkeleton, + anchorNodePosition, + focusNodePosition, + style, + segmentId, + segmentPage ); return textRange; diff --git a/packages/docs-ui/src/views/paragraph-setting/Setting.tsx b/packages/docs-ui/src/views/paragraph-setting/Setting.tsx index b2c0aee9a4..581a151b8d 100644 --- a/packages/docs-ui/src/views/paragraph-setting/Setting.tsx +++ b/packages/docs-ui/src/views/paragraph-setting/Setting.tsx @@ -33,7 +33,12 @@ import { import styles from './index.module.less'; const AutoFocusInputNumber = (props: { - value: number; onChange: (v: number) => Promise; className?: string; min?: number; max?: number; step?: number; + value: number; + onChange: (v: number) => Promise; + className?: string; + min?: number; + max?: number; + step?: number; }) => { const { value, onChange, className = '', min = 0, max = 100, step = 1 } = props; const ref = useRef(null); @@ -65,8 +70,8 @@ export function ParagraphSetting() { { label: localeService.t('toolbar.alignLeft'), value: String(HorizontalAlign.LEFT), icon: }, { label: localeService.t('toolbar.alignCenter'), value: String(HorizontalAlign.CENTER), icon: }, { label: localeService.t('toolbar.alignRight'), value: String(HorizontalAlign.RIGHT), icon: }, - { label: localeService.t('toolbar.alignJustify'), value: String(HorizontalAlign.JUSTIFIED), icon: }], - []); + { label: localeService.t('toolbar.alignJustify'), value: String(HorizontalAlign.JUSTIFIED), icon: }, + ], []); const currentParagraph = useCurrentParagraph(); const [horizontalAlignValue, horizontalAlignSet] = useFirstParagraphHorizontalAlign(currentParagraph, alignmentOptions[0].value); @@ -101,8 +106,7 @@ export function ParagraphSetting() { return ( horizontalAlignSet(item.value)} > diff --git a/packages/docs-ui/src/views/paragraph-setting/hook/utils.ts b/packages/docs-ui/src/views/paragraph-setting/hook/utils.ts index e6ab37f393..ffa9712f56 100644 --- a/packages/docs-ui/src/views/paragraph-setting/hook/utils.ts +++ b/packages/docs-ui/src/views/paragraph-setting/hook/utils.ts @@ -304,7 +304,8 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => { }); return a; }, {} as { spacingRule?: SpacingRule; lineSpacing?: number }); - })).subscribe((v) => { + }) + ).subscribe((v) => { return commandService.executeCommand(DocParagraphSettingCommand.id, { paragraph: { ...v }, } as IDocParagraphSettingCommandParams); diff --git a/packages/docs/package.json b/packages/docs/package.json index c337d2353c..e9d6defee4 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -67,7 +67,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/drawing-ui/package.json b/packages/drawing-ui/package.json index 71fb3d4523..52c8b93eb0 100644 --- a/packages/drawing-ui/package.json +++ b/packages/drawing-ui/package.json @@ -80,7 +80,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/drawing-ui/src/controllers/drawing-update.controller.ts b/packages/drawing-ui/src/controllers/drawing-update.controller.ts index b8cae27ab4..632c4470da 100644 --- a/packages/drawing-ui/src/controllers/drawing-update.controller.ts +++ b/packages/drawing-ui/src/controllers/drawing-update.controller.ts @@ -695,10 +695,15 @@ export class DrawingUpdateController extends Disposable { } const { - left = 0, top = 0, width = 0, height = 0, + left = 0, + top = 0, + width = 0, + height = 0, angle = 0, - flipX = false, flipY = false, - skewX = 0, skewY = 0, + flipX = false, + flipY = false, + skewX = 0, + skewY = 0, } = transform; drawingShape.transformByState({ left, top, width, height, angle, flipX, flipY, skewX, skewY }); diff --git a/packages/drawing-ui/src/controllers/image-cropper.controller.ts b/packages/drawing-ui/src/controllers/image-cropper.controller.ts index 9a682fae4c..3ae6db03cc 100644 --- a/packages/drawing-ui/src/controllers/image-cropper.controller.ts +++ b/packages/drawing-ui/src/controllers/image-cropper.controller.ts @@ -321,7 +321,10 @@ export class ImageCropperController extends Disposable { ...drawingParam, transform: { ...drawingParam.transform, - left, top, height, width, + left, + top, + height, + width, }, srcRect: srcRect.srcRectAngle, }] as IImageData[]); diff --git a/packages/drawing-ui/src/services/drawing-render.service.ts b/packages/drawing-ui/src/services/drawing-render.service.ts index eda069c4e2..26156af2ef 100644 --- a/packages/drawing-ui/src/services/drawing-render.service.ts +++ b/packages/drawing-ui/src/services/drawing-render.service.ts @@ -14,9 +14,10 @@ * limitations under the License. */ +import type { IDrawingSearch } from '@univerjs/core'; import type { IImageData } from '@univerjs/drawing'; import type { IImageProps, Scene } from '@univerjs/engine-render'; -import { DrawingTypeEnum, type IDrawingSearch } from '@univerjs/core'; +import { DrawingTypeEnum } from '@univerjs/core'; import { getDrawingShapeKeyByDrawingSearch, IDrawingManagerService, IImageIoService, ImageSourceType } from '@univerjs/drawing'; import { DRAWING_OBJECT_LAYER_INDEX, Image } from '@univerjs/engine-render'; import { IDialogService } from '@univerjs/ui'; @@ -35,8 +36,18 @@ export class DrawingRenderService { // eslint-disable-next-line max-lines-per-function async renderImages(imageParam: IImageData, scene: Scene) { const { - transform: singleTransform, drawingType, source, imageSourceType, srcRect, - prstGeom, groupId, unitId, subUnitId, drawingId, isMultiTransform, transforms: multiTransforms, + transform: singleTransform, + drawingType, + source, + imageSourceType, + srcRect, + prstGeom, + groupId, + unitId, + subUnitId, + drawingId, + isMultiTransform, + transforms: multiTransforms, } = imageParam; if (drawingType !== DrawingTypeEnum.DRAWING_IMAGE) { return; diff --git a/packages/drawing-ui/src/views/panel/DrawingAlign.tsx b/packages/drawing-ui/src/views/panel/DrawingAlign.tsx index 26e8f9e800..7b6c539dbd 100644 --- a/packages/drawing-ui/src/views/panel/DrawingAlign.tsx +++ b/packages/drawing-ui/src/views/panel/DrawingAlign.tsx @@ -45,10 +45,12 @@ export const DrawingAlign = (props: IDrawingAlignProps) => { { label: localeService.t('image-panel.align.left'), value: AlignType.left, - }, { + }, + { label: localeService.t('image-panel.align.center'), value: AlignType.center, - }, { + }, + { label: localeService.t('image-panel.align.right'), value: AlignType.right, }, @@ -59,20 +61,24 @@ export const DrawingAlign = (props: IDrawingAlignProps) => { { label: localeService.t('image-panel.align.top'), value: AlignType.top, - }, { + }, + { label: localeService.t('image-panel.align.middle'), value: AlignType.middle, - }, { + }, + { label: localeService.t('image-panel.align.bottom'), value: AlignType.bottom, }, ], - }, { + }, + { options: [ { label: localeService.t('image-panel.align.horizon'), value: AlignType.horizon, - }, { + }, + { label: localeService.t('image-panel.align.vertical'), value: AlignType.vertical, }, diff --git a/packages/drawing-ui/src/views/panel/DrawingGroup.tsx b/packages/drawing-ui/src/views/panel/DrawingGroup.tsx index 6a46a2c952..49228b858e 100644 --- a/packages/drawing-ui/src/views/panel/DrawingGroup.tsx +++ b/packages/drawing-ui/src/views/panel/DrawingGroup.tsx @@ -65,7 +65,9 @@ export const DrawingGroup = (props: IDrawingGroupProps) => { const transform = drawing.transform || { left: 0, top: 0 }; const { unitId, subUnitId, drawingId } = drawing; return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: { ...transform, left: transform.left! - groupTransform.left, @@ -103,7 +105,9 @@ export const DrawingGroup = (props: IDrawingGroupProps) => { const { unitId, subUnitId, drawingId } = object; const newTransform = transformObjectOutOfGroup(transform || {}, groupTransform, groupTransform.width || 0, groupTransform.height || 0); return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: { ...transform, ...newTransform, diff --git a/packages/drawing-ui/src/views/panel/ImageCropper.tsx b/packages/drawing-ui/src/views/panel/ImageCropper.tsx index a8f4790b28..e94de6d5c7 100644 --- a/packages/drawing-ui/src/views/panel/ImageCropper.tsx +++ b/packages/drawing-ui/src/views/panel/ImageCropper.tsx @@ -48,31 +48,40 @@ export const ImageCropper = (props: IImageCropperProps) => { { label: localeService.t('image-panel.crop.mode'), value: CropType.FREE, - }, { + }, + { label: '1:1', value: CropType.R1_1, - }, { + }, + { label: '16:9', value: CropType.R16_9, - }, { + }, + { label: '9:16', value: CropType.R9_16, - }, { + }, + { label: '5:4', value: CropType.R5_4, - }, { + }, + { label: '4:5', value: CropType.R4_5, - }, { + }, + { label: '4:3', value: CropType.R4_3, - }, { + }, + { label: '3:4', value: CropType.R3_4, - }, { + }, + { label: '3:2', value: CropType.R3_2, - }, { + }, + { label: '2:3', value: CropType.R2_3, }, diff --git a/packages/drawing/package.json b/packages/drawing/package.json index d946c80a0c..b60a1e7108 100644 --- a/packages/drawing/package.json +++ b/packages/drawing/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/engine-formula/package.json b/packages/engine-formula/package.json index 907e339aec..3881b41a8c 100644 --- a/packages/engine-formula/package.json +++ b/packages/engine-formula/package.json @@ -77,7 +77,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/engine-formula/src/basics/engineering.ts b/packages/engine-formula/src/basics/engineering.ts index 7b92a3476d..6666ac85ff 100644 --- a/packages/engine-formula/src/basics/engineering.ts +++ b/packages/engine-formula/src/basics/engineering.ts @@ -399,17 +399,37 @@ export function erf(x: number): number { return 0; } - // eslint-disable-next-line - const cof = [-1.3026537197817094, 6.4196979235649026e-1, 1.9476473204185836e-2, - -9.561514786808631e-3, -9.46595344482036e-4, 3.66839497852761e-4, - 4.2523324806907e-5, -2.0278578112534e-5, -1.624290004647e-6, - 1.303655835580e-6, 1.5626441722e-8, -8.5238095915e-8, - 6.529054439e-9, 5.059343495e-9, -9.91364156e-10, - -2.27365122e-10, 9.6467911e-11, 2.394038e-12, - -6.886027e-12, 8.94487e-13, 3.13092e-13, - -1.12708e-13, 3.81e-16, 7.106e-15, - -1.523e-15, -9.4e-17, 1.21e-16, - -2.8e-17]; + const cof = [ + -1.3026537197817094, + // eslint-disable-next-line no-loss-of-precision + 6.4196979235649026e-1, + 1.9476473204185836e-2, + -9.561514786808631e-3, + -9.46595344482036e-4, + 3.66839497852761e-4, + 4.2523324806907e-5, + -2.0278578112534e-5, + -1.624290004647e-6, + 1.303655835580e-6, + 1.5626441722e-8, + -8.5238095915e-8, + 6.529054439e-9, + 5.059343495e-9, + -9.91364156e-10, + -2.27365122e-10, + 9.6467911e-11, + 2.394038e-12, + -6.886027e-12, + 8.94487e-13, + 3.13092e-13, + -1.12708e-13, + 3.81e-16, + 7.106e-15, + -1.523e-15, + -9.4e-17, + 1.21e-16, + -2.8e-17, + ]; let _x = x; let isNeg = false; diff --git a/packages/engine-formula/src/basics/statistical.ts b/packages/engine-formula/src/basics/statistical.ts index db8662d7ac..318de2fc7b 100644 --- a/packages/engine-formula/src/basics/statistical.ts +++ b/packages/engine-formula/src/basics/statistical.ts @@ -358,14 +358,26 @@ export function forecastLinear(x: number, knownYs: number[], knownXs: number[]): export function gamma(x: number): number { const p = [ - -1.716185138865495, 24.76565080557592, -379.80425647094563, - 629.3311553128184, 866.9662027904133, -31451.272968848367, - -36144.413418691176, 66456.14382024054, + -1.716185138865495, + 24.76565080557592, + -379.80425647094563, + 629.3311553128184, + 866.9662027904133, + -31451.272968848367, + -36144.413418691176, + 66456.14382024054, ]; const q = [ - -30.8402300119739, 315.35062697960416, -1015.1563674902192, - -3107.771671572311, 22538.118420980151, 4755.8462775278811, // eslint-disable-line - -134659.9598649693, -115132.2596755535, + -30.8402300119739, + 315.35062697960416, + -1015.1563674902192, + -3107.771671572311, + // eslint-disable-next-line no-loss-of-precision + 22538.118420980151, + // eslint-disable-next-line no-loss-of-precision + 4755.8462775278811, + -134659.9598649693, + -115132.2596755535, ]; let fact = 0; @@ -457,7 +469,9 @@ export function gammaINV(probability: number, alpha: number, beta: number): numb export function gammaln(x: number): number { const coefficients = [ 76.18009172947146, -86.50532032941677, 24.01409824083091, // eslint-disable-line - -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5, + -1.231739572450155, + 0.1208650973866179e-2, + -0.5395239384953e-5, ]; let y = x; diff --git a/packages/engine-formula/src/controller/set-dependency.controller.ts b/packages/engine-formula/src/controller/set-dependency.controller.ts index 264d6dbae9..18c4edd54f 100644 --- a/packages/engine-formula/src/controller/set-dependency.controller.ts +++ b/packages/engine-formula/src/controller/set-dependency.controller.ts @@ -19,7 +19,8 @@ import type { ISetDefinedNameMutationParam } from '../commands/mutations/set-def import type { IRemoveFeatureCalculationMutationParam, - ISetFeatureCalculationMutation } from '../commands/mutations/set-feature-calculation.mutation'; + ISetFeatureCalculationMutation, +} from '../commands/mutations/set-feature-calculation.mutation'; import type { ISetFormulaDataMutationParams } from '../commands/mutations/set-formula-data.mutation'; import type { IRemoveOtherFormulaMutationParams, ISetOtherFormulaMutationParams } from '../commands/mutations/set-other-formula.mutation'; import { Disposable, ICommandService, ObjectMatrix } from '@univerjs/core'; @@ -38,7 +39,8 @@ export class SetDependencyController extends Disposable { @ICommandService private readonly _commandService: ICommandService, @IFeatureCalculationManagerService @IDependencyManagerService private readonly _dependencyManagerService: IDependencyManagerService, - @IFeatureCalculationManagerService private readonly _featureCalculationManagerService: IFeatureCalculationManagerService) { + @IFeatureCalculationManagerService private readonly _featureCalculationManagerService: IFeatureCalculationManagerService + ) { super(); this._initialize(); diff --git a/packages/engine-formula/src/engine/ast-node/function-node.ts b/packages/engine-formula/src/engine/ast-node/function-node.ts index a17f64f46d..26001bd20e 100644 --- a/packages/engine-formula/src/engine/ast-node/function-node.ts +++ b/packages/engine-formula/src/engine/ast-node/function-node.ts @@ -22,7 +22,8 @@ import type { AsyncObject, BaseReferenceObject, FunctionVariantType, - NodeValueType } from '../reference-object/base-reference-object'; + NodeValueType, +} from '../reference-object/base-reference-object'; import type { BaseValueObject } from '../value-object/base-value-object'; import type { FormulaFunctionResultValueType } from '../value-object/primitive-object'; import { Inject, Injector } from '@univerjs/core'; diff --git a/packages/engine-formula/src/engine/value-object/__tests__/array-value-atan2.spec.ts b/packages/engine-formula/src/engine/value-object/__tests__/array-value-atan2.spec.ts index 03253a66b9..03285af4e0 100644 --- a/packages/engine-formula/src/engine/value-object/__tests__/array-value-atan2.spec.ts +++ b/packages/engine-formula/src/engine/value-object/__tests__/array-value-atan2.spec.ts @@ -106,10 +106,7 @@ describe('arrayValueObject atan2 method test', () => { expect((atan2ArrayValueObject.atan2(originArrayValueObject) as ArrayValueObject).toValue()).toStrictEqual([ [1.1071487177940904, 0.7853981633974483, 0.5880026035475675, 0.6435011087932844, 0.5404195002705842], [0.3217505543966422, 0.27829965900511133, 0.24497866312686414, 0.3217505543966422, 0.2914567944778671], - [ - 0.17985349979247828, 0.16514867741462683, 0.15264932839526518, 0.21109333322274654, - 0.19739555984988078, - ], + [0.17985349979247828, 0.16514867741462683, 0.15264932839526518, 0.21109333322274654, 0.19739555984988078], ]); }); @@ -126,14 +123,8 @@ describe('arrayValueObject atan2 method test', () => { expect((atan2ArrayValueObject.atan2(originArrayValueObject) as ArrayValueObject).toValue()).toStrictEqual([ [1.2490457723982544, 0.982793723247329, 0.7853981633974483, 0.6435011087932844, 0.5404195002705842], - [ - 0.3217505543966422, 0.27829965900511133, 0.24497866312686414, 0.21866894587394195, - 0.19739555984988078, - ], - [ - 0.09065988720074511, 0.08314123188844122, 0.07677189126977804, 0.07130746478529032, - 0.06656816377582381, - ], + [0.3217505543966422, 0.27829965900511133, 0.24497866312686414, 0.21866894587394195, 0.19739555984988078], + [0.09065988720074511, 0.08314123188844122, 0.07677189126977804, 0.07130746478529032, 0.06656816377582381], ]); }); diff --git a/packages/engine-formula/src/functions/date/datevalue/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/datevalue/__tests__/index.spec.ts index be5b2699ef..264229a690 100644 --- a/packages/engine-formula/src/functions/date/datevalue/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/datevalue/__tests__/index.spec.ts @@ -69,8 +69,7 @@ describe('Test datevalue function', () => { it('Serial number is array', () => { const serialNumber = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, ErrorType.NAME]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, ErrorType.NAME]]), rowCount: 2, columnCount: 6, unitId: '', @@ -79,7 +78,21 @@ describe('Test datevalue function', () => { column: 0, }); const result = testFunction.calculate(serialNumber); - expect(transformToValue(result.getArrayValue())).toStrictEqual([[ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE], [ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.VALUE, ErrorType.NAME]]); + expect(transformToValue(result.getArrayValue())).toStrictEqual([[ + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ], [ + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.VALUE, + ErrorType.NAME, + ]]); }); }); }); diff --git a/packages/engine-formula/src/functions/date/day/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/day/__tests__/index.spec.ts index 305971dbd1..53e9984917 100644 --- a/packages/engine-formula/src/functions/date/day/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/day/__tests__/index.spec.ts @@ -16,12 +16,12 @@ import { describe, expect, it } from 'vitest'; -import { FUNCTION_NAMES_DATE } from '../../function-names'; -import { Day } from '../index'; -import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; +import { ErrorType } from '../../../../basics/error-type'; import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; import { ErrorValueObject } from '../../../../engine/value-object/base-value-object'; -import { ErrorType } from '../../../../basics/error-type'; +import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; +import { FUNCTION_NAMES_DATE } from '../../function-names'; +import { Day } from '../index'; describe('Test day function', () => { const testFunction = new Day(FUNCTION_NAMES_DATE.DAY); @@ -46,8 +46,7 @@ describe('Test day function', () => { it('Serial number is array', () => { const serialNumber = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, 1900]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, 1900]]), rowCount: 2, columnCount: 6, unitId: '', diff --git a/packages/engine-formula/src/functions/date/edate/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/edate/__tests__/index.spec.ts index d20a042c78..6a402ffeaa 100644 --- a/packages/engine-formula/src/functions/date/edate/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/edate/__tests__/index.spec.ts @@ -16,10 +16,10 @@ import { describe, expect, it } from 'vitest'; +import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; +import { NumberValueObject } from '../../../../engine/value-object/primitive-object'; import { FUNCTION_NAMES_DATE } from '../../function-names'; import { Edate } from '../index'; -import { NumberValueObject } from '../../../../engine/value-object/primitive-object'; -import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; describe('Test edate function', () => { const testFunction = new Edate(FUNCTION_NAMES_DATE.EDATE); @@ -83,8 +83,7 @@ describe('Test edate function', () => { it('Months is array with multiple format values', () => { const startDate = NumberValueObject.create(43831); const months = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, 1900]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, 1900]]), rowCount: 2, columnCount: 6, unitId: '', diff --git a/packages/engine-formula/src/functions/date/month/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/month/__tests__/index.spec.ts index 6d4b9aaaf8..5419ac6ce1 100644 --- a/packages/engine-formula/src/functions/date/month/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/month/__tests__/index.spec.ts @@ -16,10 +16,10 @@ import { describe, expect, it } from 'vitest'; +import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; +import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; import { FUNCTION_NAMES_DATE } from '../../function-names'; import { Month } from '../index'; -import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; -import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; describe('Test month function', () => { const testFunction = new Month(FUNCTION_NAMES_DATE.MONTH); @@ -39,8 +39,7 @@ describe('Test month function', () => { it('Serial number is array', () => { const serialNumber = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, 1900]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, 1900]]), rowCount: 2, columnCount: 6, unitId: '', diff --git a/packages/engine-formula/src/functions/date/timevalue/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/timevalue/__tests__/index.spec.ts index 20332c6f9e..93ed6f3c04 100644 --- a/packages/engine-formula/src/functions/date/timevalue/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/timevalue/__tests__/index.spec.ts @@ -16,12 +16,12 @@ import { describe, expect, it } from 'vitest'; -import { FUNCTION_NAMES_DATE } from '../../function-names'; -import { Timevalue } from '../index'; -import { BooleanValueObject, NullValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; +import { ErrorType } from '../../../../basics/error-type'; import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; import { ErrorValueObject } from '../../../../engine/value-object/base-value-object'; -import { ErrorType } from '../../../../basics/error-type'; +import { BooleanValueObject, NullValueObject, NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; +import { FUNCTION_NAMES_DATE } from '../../function-names'; +import { Timevalue } from '../index'; describe('Test timevalue function', () => { const testFunction = new Timevalue(FUNCTION_NAMES_DATE.TIMEVALUE); @@ -65,8 +65,7 @@ describe('Test timevalue function', () => { it('Serial number is array', () => { const serialNumber = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, ErrorType.NAME]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, ErrorType.NAME]]), rowCount: 2, columnCount: 6, unitId: '', diff --git a/packages/engine-formula/src/functions/date/year/__tests__/index.spec.ts b/packages/engine-formula/src/functions/date/year/__tests__/index.spec.ts index 39efa9acfe..f43388ee11 100644 --- a/packages/engine-formula/src/functions/date/year/__tests__/index.spec.ts +++ b/packages/engine-formula/src/functions/date/year/__tests__/index.spec.ts @@ -16,10 +16,10 @@ import { describe, expect, it } from 'vitest'; +import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; +import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; import { FUNCTION_NAMES_DATE } from '../../function-names'; import { Year } from '../index'; -import { NumberValueObject, StringValueObject } from '../../../../engine/value-object/primitive-object'; -import { ArrayValueObject, transformToValue, transformToValueObject } from '../../../../engine/value-object/array-value-object'; describe('Test year function', () => { const testFunction = new Year(FUNCTION_NAMES_DATE.YEAR); @@ -38,8 +38,7 @@ describe('Test year function', () => { it('Serial number is array', () => { const serialNumber = ArrayValueObject.create({ - calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], - [0, '100', '2.34', 'test', -3, 1900]]), + calculateValueList: transformToValueObject([[1, ' ', 1.23, true, false, null], [0, '100', '2.34', 'test', -3, 1900]]), rowCount: 2, columnCount: 6, unitId: '', diff --git a/packages/engine-formula/src/functions/lookup/address/index.ts b/packages/engine-formula/src/functions/lookup/address/index.ts index 13a1bb6bc3..4b48fe45f5 100644 --- a/packages/engine-formula/src/functions/lookup/address/index.ts +++ b/packages/engine-formula/src/functions/lookup/address/index.ts @@ -14,14 +14,16 @@ * limitations under the License. */ -import type { ArrayValueObject } from '../../../engine/value-object/array-value-object'; +import type { IRange } from '@univerjs/core'; -import { AbsoluteRefType, type IRange } from '@univerjs/core'; +import type { ArrayValueObject } from '../../../engine/value-object/array-value-object'; +import type { BaseValueObject } from '../../../engine/value-object/base-value-object'; +import { AbsoluteRefType } from '@univerjs/core'; import { ErrorType } from '../../../basics/error-type'; import { expandArrayValueObject } from '../../../engine/utils/array-object'; import { serializeRangeToR1C1 } from '../../../engine/utils/r1c1-reference'; import { addQuotesBothSides, serializeRange } from '../../../engine/utils/reference'; -import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object'; +import { ErrorValueObject } from '../../../engine/value-object/base-value-object'; import { BooleanValueObject, NumberValueObject, StringValueObject } from '../../../engine/value-object/primitive-object'; import { BaseFunction } from '../../base-function'; @@ -116,11 +118,7 @@ export class Address extends BaseFunction { }); } - private _calculateSingleCell(rowNumber: BaseValueObject, - columnNumber: BaseValueObject, - absNumber: BaseValueObject, - a1: BaseValueObject, - sheetText: BaseValueObject) { + private _calculateSingleCell(rowNumber: BaseValueObject, columnNumber: BaseValueObject, absNumber: BaseValueObject, a1: BaseValueObject, sheetText: BaseValueObject) { const row = Number.parseInt(`${Number(rowNumber.getValue()) - 1}`); const column = Number.parseInt(`${Number(columnNumber.getValue()) - 1}`); const absNumberValue = Number.parseInt(`${Number(absNumber.getValue())}`); diff --git a/packages/engine-formula/src/functions/math/subtotal/index.ts b/packages/engine-formula/src/functions/math/subtotal/index.ts index c8c2bd658a..1b90526d0c 100644 --- a/packages/engine-formula/src/functions/math/subtotal/index.ts +++ b/packages/engine-formula/src/functions/math/subtotal/index.ts @@ -15,14 +15,15 @@ */ import type { IObjectArrayPrimitiveType, IRowData, Nullable } from '@univerjs/core'; +import type { BaseReferenceObject, FunctionVariantType } from '../../../engine/reference-object/base-reference-object'; +import type { ArrayValueObject } from '../../../engine/value-object/array-value-object'; +import type { BaseValueObject } from '../../../engine/value-object/base-value-object'; import { BooleanNumber } from '@univerjs/core'; import { ErrorType } from '../../../basics/error-type'; -import type { BaseReferenceObject, FunctionVariantType } from '../../../engine/reference-object/base-reference-object'; -import { type BaseValueObject, ErrorValueObject } from '../../../engine/value-object/base-value-object'; -import { BaseFunction } from '../../base-function'; import { createNewArray } from '../../../engine/utils/array-object'; +import { ErrorValueObject } from '../../../engine/value-object/base-value-object'; import { NumberValueObject } from '../../../engine/value-object/primitive-object'; -import type { ArrayValueObject } from '../../../engine/value-object/array-value-object'; +import { BaseFunction } from '../../base-function'; enum FunctionNum { AVERAGE = 1, @@ -407,8 +408,7 @@ export class Subtotal extends BaseFunction { return createNewArray(flattenValues, 1, flattenValues[0].length); } - private _isRowHidden(rowData: IObjectArrayPrimitiveType>, rowIndex: number - ) { + private _isRowHidden(rowData: IObjectArrayPrimitiveType>, rowIndex: number) { const row = rowData[rowIndex]; if (!row) { return false; diff --git a/packages/engine-formula/src/services/defined-names.service.ts b/packages/engine-formula/src/services/defined-names.service.ts index a430ab92c7..57576924c9 100644 --- a/packages/engine-formula/src/services/defined-names.service.ts +++ b/packages/engine-formula/src/services/defined-names.service.ts @@ -85,7 +85,9 @@ export class DefinedNamesService extends Disposable implements IDefinedNamesServ readonly update$ = this._update$.asObservable(); private _currentRange: IUnitRange = { - unitId: '', sheetId: '', range: { + unitId: '', + sheetId: '', + range: { startRow: 0, endRow: 0, startColumn: 0, diff --git a/packages/engine-numfmt/package.json b/packages/engine-numfmt/package.json index f1ee20666a..6234d2b0c2 100644 --- a/packages/engine-numfmt/package.json +++ b/packages/engine-numfmt/package.json @@ -59,7 +59,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/engine-render/package.json b/packages/engine-render/package.json index f89069e988..5406165ac7 100644 --- a/packages/engine-render/package.json +++ b/packages/engine-render/package.json @@ -72,7 +72,7 @@ "@types/opentype.js": "^1.3.8", "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" }, diff --git a/packages/engine-render/src/components/docs/layout/block/paragraph/layout-ruler.ts b/packages/engine-render/src/components/docs/layout/block/paragraph/layout-ruler.ts index 09b9f9124e..c793c87f15 100644 --- a/packages/engine-render/src/components/docs/layout/block/paragraph/layout-ruler.ts +++ b/packages/engine-render/src/components/docs/layout/block/paragraph/layout-ruler.ts @@ -398,14 +398,7 @@ function _divideOperator( ); } - _divideOperator(ctx, - glyphGroup, - pages, - sectionBreakConfig, - paragraphConfig, - isParagraphFirstShapedText, - - breakPointType); + _divideOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, isParagraphFirstShapedText, breakPointType); return; } @@ -414,15 +407,7 @@ function _divideOperator( updateDivideInfo(divide, { breakType: breakPointType }); } } else { - _lineOperator(ctx, - glyphGroup, - pages, - sectionBreakConfig, - paragraphConfig, - isParagraphFirstShapedText, - - breakPointType, - defaultSpanLineHeight); + _lineOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, isParagraphFirstShapedText, breakPointType, defaultSpanLineHeight); } } @@ -483,7 +468,12 @@ function _lineOperator( } = paragraphStyle; const { - paragraphLineGapDefault, linePitch, lineSpacing, spacingRule, snapToGrid, gridType, + paragraphLineGapDefault, + linePitch, + lineSpacing, + spacingRule, + snapToGrid, + gridType, } = getLineHeightConfig( sectionBreakConfig, paragraphConfig @@ -761,7 +751,13 @@ function __getWrapTablePosition( const left = getPositionHorizon(positionH, column, page, width, isPageBreak) ?? 0; const top = getPositionVertical( - positionV, page, lineTop, lineHeight, height, drawingAnchorTop, isPageBreak + positionV, + page, + lineTop, + lineHeight, + height, + drawingAnchorTop, + isPageBreak ) ?? 0; return { left, top }; @@ -1038,18 +1034,9 @@ function _columnOperator( const columnIsFull = isColumnFull(lastPage); if (columnIsFull === true) { - _pageOperator(ctx, - glyphGroup, - pages, - sectionBreakConfig, - paragraphConfig, - isParagraphFirstShapedText, - - breakPointType, defaultSpanLineHeight); + _pageOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, isParagraphFirstShapedText, breakPointType, defaultSpanLineHeight); } else { - _lineOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, - isParagraphFirstShapedText, - breakPointType, defaultSpanLineHeight); + _lineOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, isParagraphFirstShapedText, breakPointType, defaultSpanLineHeight); } } @@ -1067,14 +1054,7 @@ function _pageOperator( const { skeHeaders, skeFooters } = paragraphConfig; pages.push(createSkeletonPage(ctx, sectionBreakConfig, { skeHeaders, skeFooters }, curSkeletonPage?.pageNumber + 1)); - _columnOperator(ctx, glyphGroup, - pages, - sectionBreakConfig, - paragraphConfig, - isParagraphFirstShapedText, - - breakPointType, - defaultSpanLineHeight); + _columnOperator(ctx, glyphGroup, pages, sectionBreakConfig, paragraphConfig, isParagraphFirstShapedText, breakPointType, defaultSpanLineHeight); } /** @@ -1301,7 +1281,13 @@ function __getDrawingPosition( drawing.aLeft = getPositionHorizon(positionH, column, page, width, isPageBreak) ?? 0; drawing.aTop = getPositionVertical( - positionV, page, lineTop, lineHeight, height, blockAnchorTop, isPageBreak + positionV, + page, + lineTop, + lineHeight, + height, + blockAnchorTop, + isPageBreak ) ?? 0; drawing.width = width; drawing.height = height; diff --git a/packages/engine-render/src/components/docs/layout/line-breaker/__tests__/linebreak.spec.ts b/packages/engine-render/src/components/docs/layout/line-breaker/__tests__/linebreak.spec.ts index ab3e04f9b0..6a8d1d9e17 100644 --- a/packages/engine-render/src/components/docs/layout/line-breaker/__tests__/linebreak.spec.ts +++ b/packages/engine-render/src/components/docs/layout/line-breaker/__tests__/linebreak.spec.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +/* eslint-disable antfu/consistent-list-newline */ import fs from 'node:fs'; import { resolve } from 'node:path'; import { describe, expect, it } from 'vitest'; diff --git a/packages/engine-render/src/components/docs/layout/line-breaker/line-breaker.ts b/packages/engine-render/src/components/docs/layout/line-breaker/line-breaker.ts index 43f997e6a0..da7192aa28 100644 --- a/packages/engine-render/src/components/docs/layout/line-breaker/line-breaker.ts +++ b/packages/engine-render/src/components/docs/layout/line-breaker/line-breaker.ts @@ -18,10 +18,10 @@ import type { Nullable } from '@univerjs/core'; +import type { ILineBreakRule } from './rule'; import { Break, BreakPointType } from './break'; import { AI, AL, BA, BK, CJ, CR, HL, HY, LF, NL, NS, RI, SA, SG, SP, WJ, XX, ZWJ } from './classes'; import { CI_BRK, CP_BRK, DI_BRK, IN_BRK, pairTable, PR_BRK } from './pairs'; -import type { ILineBreakRule } from './rule'; import { Rule } from './rule'; import data from './trie-data'; import UnicodeTrie from './unicode-trie'; diff --git a/packages/engine-render/src/components/docs/layout/line-breaker/trie-data.ts b/packages/engine-render/src/components/docs/layout/line-breaker/trie-data.ts index fa46b4c5ee..74e26b6cae 100644 --- a/packages/engine-render/src/components/docs/layout/line-breaker/trie-data.ts +++ b/packages/engine-render/src/components/docs/layout/line-breaker/trie-data.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +/* eslint-disable antfu/consistent-list-newline */ export default new Uint8Array([ 0, 8, 14, 0, 0, 0, 0, 0, 176, 232, 0, 0, 1, 181, 15, 74, 240, 237, 157, 11, 140, 93, 69, 25, 199, 231, 178, 187, 183, 123, 31, 187, 237, 46, 108, 193, 194, 22, 104, 41, 200, 242, 48, 128, 104, 16, 129, 152, 162, 64, 42, 10, 193, diff --git a/packages/engine-render/src/components/docs/layout/model/column.ts b/packages/engine-render/src/components/docs/layout/model/column.ts index 35343a6427..ee5b0e9ccf 100644 --- a/packages/engine-render/src/components/docs/layout/model/column.ts +++ b/packages/engine-render/src/components/docs/layout/model/column.ts @@ -15,10 +15,10 @@ */ import type { ISectionColumnProperties } from '@univerjs/core'; -import { ColumnSeparatorType } from '@univerjs/core'; - import type { IDocumentSkeletonColumn } from '../../../../basics/i-document-skeleton-cached'; +import { ColumnSeparatorType } from '@univerjs/core'; + export function createSkeletonColumn( columnIndex: number = 0, columnProperties: ISectionColumnProperties[], diff --git a/packages/engine-render/src/components/docs/layout/model/page.ts b/packages/engine-render/src/components/docs/layout/model/page.ts index deb866e964..920f014c2c 100644 --- a/packages/engine-render/src/components/docs/layout/model/page.ts +++ b/packages/engine-render/src/components/docs/layout/model/page.ts @@ -209,9 +209,16 @@ function _createSkeletonHeaderFooter( count = 0 ): IDocumentSkeletonHeaderFooter { const { - lists, footerTreeMap, headerTreeMap, localeService, pageSize, drawings, - marginLeft = 0, marginRight = 0, - marginHeader = 0, marginFooter = 0, + lists, + footerTreeMap, + headerTreeMap, + localeService, + pageSize, + drawings, + marginLeft = 0, + marginRight = 0, + marginHeader = 0, + marginFooter = 0, } = sectionBreakConfig; const pageWidth = pageSize?.width || Number.POSITIVE_INFINITY; const pageHeight = pageSize?.height || Number.POSITIVE_INFINITY; diff --git a/packages/engine-render/src/components/docs/layout/shaping-engine/font-library.ts b/packages/engine-render/src/components/docs/layout/shaping-engine/font-library.ts index ac8b9477d9..6f198f9a17 100644 --- a/packages/engine-render/src/components/docs/layout/shaping-engine/font-library.ts +++ b/packages/engine-render/src/components/docs/layout/shaping-engine/font-library.ts @@ -14,7 +14,8 @@ * limitations under the License. */ -import { BooleanNumber, type IStyleBase, type Nullable } from '@univerjs/core'; +import type { IStyleBase, Nullable } from '@univerjs/core'; +import { BooleanNumber } from '@univerjs/core'; interface IFontData { readonly family: string; diff --git a/packages/engine-render/src/components/docs/layout/shaping-engine/text-shaping.ts b/packages/engine-render/src/components/docs/layout/shaping-engine/text-shaping.ts index 4a45eaa3a9..29c5e2e9fb 100644 --- a/packages/engine-render/src/components/docs/layout/shaping-engine/text-shaping.ts +++ b/packages/engine-render/src/components/docs/layout/shaping-engine/text-shaping.ts @@ -14,10 +14,11 @@ * limitations under the License. */ -import { BooleanNumber, type IDocumentBody, type IStyleBase, type Nullable } from '@univerjs/core'; +import type { IDocumentBody, IStyleBase, Nullable } from '@univerjs/core'; +import type Opentype from 'opentype.js'; +import { BooleanNumber } from '@univerjs/core'; // @ts-ignore import { parse } from 'opentype.js/dist/opentype.module'; -import type Opentype from 'opentype.js'; import { DEFAULT_FONTFACE_PLANE } from '../../../../basics/const'; import { EMOJI_REG } from '../../../../basics/tools'; import { fontLibrary } from './font-library'; diff --git a/packages/engine-render/src/components/docs/layout/tools.ts b/packages/engine-render/src/components/docs/layout/tools.ts index f347a4e087..1929a3bc55 100644 --- a/packages/engine-render/src/components/docs/layout/tools.ts +++ b/packages/engine-render/src/components/docs/layout/tools.ts @@ -525,7 +525,8 @@ export function lineIterator( column: IDocumentSkeletonColumn, section: IDocumentSkeletonSection, page: IDocumentSkeletonPage - ) => void) { + ) => void +) { for (const pageOrCell of pagesOrCells) { const { sections } = pageOrCell; diff --git a/packages/engine-render/src/components/sheets/sheet.render-skeleton.ts b/packages/engine-render/src/components/sheets/sheet.render-skeleton.ts index fab4634868..2942c2f7f4 100644 --- a/packages/engine-render/src/components/sheets/sheet.render-skeleton.ts +++ b/packages/engine-render/src/components/sheets/sheet.render-skeleton.ts @@ -188,7 +188,8 @@ export class SpreadsheetSkeleton extends SheetSkeleton { this.disposeWithMe( this._scene.onTransformChange$.subscribeEvent((param: ITransformChangeState) => { this.setScale(param.value.scaleX || 1, param.value.scaleY); - })); + }) + ); } override _updateLayout() { diff --git a/packages/engine-render/src/components/sheets/spreadsheet.ts b/packages/engine-render/src/components/sheets/spreadsheet.ts index 4b19e63232..9a8e035d08 100644 --- a/packages/engine-render/src/components/sheets/spreadsheet.ts +++ b/packages/engine-render/src/components/sheets/spreadsheet.ts @@ -278,7 +278,17 @@ export class Spreadsheet extends SheetComponent { // scrolling && no dirty this.addRenderTagToScene('scrolling', true); this.paintNewAreaForScrolling(viewportInfo, { - cacheCanvas, cacheCtx, mainCtx, topOrigin, leftOrigin, bufferEdgeX, bufferEdgeY, scaleX, scaleY, columnHeaderHeight, rowHeaderWidth, + cacheCanvas, + cacheCtx, + mainCtx, + topOrigin, + leftOrigin, + bufferEdgeX, + bufferEdgeY, + scaleX, + scaleY, + columnHeaderHeight, + rowHeaderWidth, }); } // support for browser native zoom (only windows has this problem) diff --git a/packages/engine-render/src/components/slides/slide.ts b/packages/engine-render/src/components/slides/slide.ts index a6d18c5c47..0808e06223 100644 --- a/packages/engine-render/src/components/slides/slide.ts +++ b/packages/engine-render/src/components/slides/slide.ts @@ -15,14 +15,14 @@ */ import type { Nullable } from '@univerjs/core'; -import { COLORS, EventSubject } from '@univerjs/core'; - -import { CURSOR_TYPE } from '../../basics/const'; import type { IMouseEvent, IPointerEvent } from '../../basics/i-events'; -import { attachObjectHover } from '../../basics/quick-event'; -import { getColor } from '../../basics/tools'; + import type { UniverRenderingContext } from '../../context'; import type { Scene } from '../../scene'; +import { COLORS, EventSubject } from '@univerjs/core'; +import { CURSOR_TYPE } from '../../basics/const'; +import { attachObjectHover } from '../../basics/quick-event'; +import { getColor } from '../../basics/tools'; import { SceneViewer } from '../../scene-viewer'; import { Path } from '../../shape/path'; diff --git a/packages/engine-render/src/scene.transformer.ts b/packages/engine-render/src/scene.transformer.ts index b094e6cb44..14eaf57ca7 100644 --- a/packages/engine-render/src/scene.transformer.ts +++ b/packages/engine-render/src/scene.transformer.ts @@ -15,25 +15,28 @@ */ import type { IAbsoluteTransform, IKeyValue, Nullable } from '@univerjs/core'; -import type { IMouseEvent, IPointerEvent } from './basics/i-events'; +import type { Subscription } from 'rxjs'; +import type { BaseObject } from './base-object'; +import type { IMouseEvent, IPointerEvent } from './basics/i-events'; import type { ITransformerConfig } from './basics/transformer-config'; import type { IPoint } from './basics/vector2'; import type { Scene } from './scene'; import type { IRectProps } from './shape/rect'; +import type { IRegularPolygonProps } from './shape/regular-polygon'; import { Disposable, MOVE_BUFFER_VALUE, requestImmediateMacroTask, toDisposable } from '@univerjs/core'; -import { Subject, type Subscription } from 'rxjs'; -import { type BaseObject, ObjectType } from './base-object'; +import { Subject } from 'rxjs'; +import { ObjectType } from './base-object'; import { CURSOR_TYPE } from './basics/const'; -import { offsetRotationAxis } from './basics/offset-rotation-axis'; +import { offsetRotationAxis } from './basics/offset-rotation-axis'; import { getCurrentScrollXY } from './basics/scroll-xy'; import { degToRad, precisionTo, radToDeg } from './basics/tools'; import { Vector2 } from './basics/vector2'; import { Group } from './group'; import { ScrollTimer } from './scroll-timer'; import { Rect } from './shape/rect'; -import { type IRegularPolygonProps, RegularPolygon } from './shape/regular-polygon'; +import { RegularPolygon } from './shape/regular-polygon'; enum TransformerManagerType { RESIZE_LT = '__SpreadsheetTransformerResizeLT__', @@ -284,16 +287,39 @@ export class Transformer extends Disposable implements ITransformerConfig { this._createControl(applyObject); } - // eslint-disable-next-line complexity + // eslint-disable-next-line max-lines-per-function, complexity private _getConfig(applyObject: BaseObject) { const objectTransformerConfig = applyObject.transformerConfig; let { - isCropper, hoverEnabled, hoverEnterFunc, hoverLeaveFunc, resizeEnabled, - rotateEnabled, rotationSnaps, rotationSnapTolerance, rotateAnchorOffset, rotateSize, rotateCornerRadius, - borderEnabled, borderStroke, borderStrokeWidth, borderDash, borderSpacing, - anchorFill, anchorStroke, anchorStrokeWidth, anchorSize, anchorCornerRadius, - keepRatio, centeredScaling, enabledAnchors, flipEnabled, ignoreStroke, - boundBoxFunc, useSingleNodeRotation, shouldOverdrawWholeArea, + isCropper, + hoverEnabled, + hoverEnterFunc, + hoverLeaveFunc, + resizeEnabled, + rotateEnabled, + rotationSnaps, + rotationSnapTolerance, + rotateAnchorOffset, + rotateSize, + rotateCornerRadius, + borderEnabled, + borderStroke, + borderStrokeWidth, + borderDash, + borderSpacing, + anchorFill, + anchorStroke, + anchorStrokeWidth, + anchorSize, + anchorCornerRadius, + keepRatio, + centeredScaling, + enabledAnchors, + flipEnabled, + ignoreStroke, + boundBoxFunc, + useSingleNodeRotation, + shouldOverdrawWholeArea, } = this; if (objectTransformerConfig != null) { isCropper = objectTransformerConfig.isCropper ?? isCropper; @@ -328,12 +354,35 @@ export class Transformer extends Disposable implements ITransformerConfig { } return { - isCropper, hoverEnabled, hoverEnterFunc, hoverLeaveFunc, resizeEnabled, - rotateEnabled, rotationSnaps, rotationSnapTolerance, rotateAnchorOffset, rotateSize, rotateCornerRadius, - borderEnabled, borderStroke, borderStrokeWidth, borderDash, borderSpacing, - anchorFill, anchorStroke, anchorStrokeWidth, anchorSize, anchorCornerRadius, - keepRatio, centeredScaling, enabledAnchors, flipEnabled, ignoreStroke, - boundBoxFunc, useSingleNodeRotation, shouldOverdrawWholeArea, + isCropper, + hoverEnabled, + hoverEnterFunc, + hoverLeaveFunc, + resizeEnabled, + rotateEnabled, + rotationSnaps, + rotationSnapTolerance, + rotateAnchorOffset, + rotateSize, + rotateCornerRadius, + borderEnabled, + borderStroke, + borderStrokeWidth, + borderDash, + borderSpacing, + anchorFill, + anchorStroke, + anchorStrokeWidth, + anchorSize, + anchorCornerRadius, + keepRatio, + centeredScaling, + enabledAnchors, + flipEnabled, + ignoreStroke, + boundBoxFunc, + useSingleNodeRotation, + shouldOverdrawWholeArea, }; } @@ -538,8 +587,13 @@ export class Transformer extends Disposable implements ITransformerConfig { const moveObject = selectedObjects[i]; const boundary = this._checkMoveBoundary( - moveObject, moveLeft, moveTop, ancestorLeft, - ancestorTop, topSceneWidth, topSceneHeight + moveObject, + moveLeft, + moveTop, + ancestorLeft, + ancestorTop, + topSceneWidth, + topSceneHeight ); moveLeft = boundary.moveLeft; @@ -1566,27 +1620,45 @@ export class Transformer extends Disposable implements ITransformerConfig { if (borderEnabled && !isCropper) { const outline = new Rect(`${TransformerManagerType.OUTLINE}_${zIndex}`, { - zIndex: zIndex - 1, evented: false, strokeWidth: borderStrokeWidth, stroke: borderStroke, + zIndex: zIndex - 1, + evented: false, + strokeWidth: borderStrokeWidth, + stroke: borderStroke, ...this._getOutlinePosition(width, height, borderSpacing, borderStrokeWidth), }); groupElements.push(outline); } if (resizeEnabled && !isCropper) { const { left: lineLeft, top: lineTop } = this._getRotateAnchorPosition( - TransformerManagerType.ROTATE_LINE, height, width, applyObject + TransformerManagerType.ROTATE_LINE, + height, + width, + applyObject ); if (rotateEnabled) { const rotateLine = new Rect(`${TransformerManagerType.ROTATE_LINE}_${zIndex}`, { - zIndex: zIndex - 1, evented: false, left: lineLeft, top: lineTop, height: rotateAnchorOffset, width: 1, - strokeWidth: borderStrokeWidth, stroke: borderStroke, + zIndex: zIndex - 1, + evented: false, + left: lineLeft, + top: lineTop, + height: rotateAnchorOffset, + width: 1, + strokeWidth: borderStrokeWidth, + stroke: borderStroke, }); const { left, top } = this._getRotateAnchorPosition(TransformerManagerType.ROTATE, height, width, applyObject); const cursor = this._getRotateAnchorCursor(TransformerManagerType.ROTATE); const rotate = new Rect(`${TransformerManagerType.ROTATE}_${zIndex}`, { - zIndex: zIndex - 1, left, top, height: rotateSize, width: rotateSize, - radius: rotateCornerRadius, strokeWidth: borderStrokeWidth * 2, stroke: borderStroke, + zIndex: zIndex - 1, + left, + top, + height: rotateSize, + width: rotateSize, + radius: rotateCornerRadius, + strokeWidth: borderStrokeWidth * 2, + stroke: borderStroke, }); this._attachEventToRotate(rotate, applyObject); this._attachHover(rotate, cursor, CURSOR_TYPE.DEFAULT); diff --git a/packages/engine-render/src/shape/circle.ts b/packages/engine-render/src/shape/circle.ts index 78b64234fa..2fbdc95707 100644 --- a/packages/engine-render/src/shape/circle.ts +++ b/packages/engine-render/src/shape/circle.ts @@ -16,10 +16,10 @@ import type { IKeyValue } from '@univerjs/core'; -import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import type { UniverRenderingContext } from '../context'; -import { ObjectType } from '../base-object'; import type { IShapeProps } from './shape'; +import { ObjectType } from '../base-object'; +import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import { Shape } from './shape'; export interface ICircleProps extends IShapeProps { diff --git a/packages/engine-render/src/shape/dashedrect.ts b/packages/engine-render/src/shape/dashedrect.ts index a1eb13c7e4..72aea3bc02 100644 --- a/packages/engine-render/src/shape/dashedrect.ts +++ b/packages/engine-render/src/shape/dashedrect.ts @@ -14,10 +14,10 @@ * limitations under the License. */ -import { Rectangle } from '@univerjs/core'; import type { IViewportInfo } from '../basics/vector2'; import type { UniverRenderingContext } from '../context'; import type { IRectProps } from './rect'; +import { Rectangle } from '@univerjs/core'; import { Rect } from './rect'; export class DashedRect extends Rect { diff --git a/packages/engine-render/src/shape/image.ts b/packages/engine-render/src/shape/image.ts index 30d93eb670..baead24309 100644 --- a/packages/engine-render/src/shape/image.ts +++ b/packages/engine-render/src/shape/image.ts @@ -16,13 +16,13 @@ import type { ISrcRect, Nullable, PresetGeometryType } from '@univerjs/core'; -import type { UniverRenderingContext } from '../context'; import type { IObjectFullState, ITransformChangeState, IViewportInfo } from '../basics'; +import type { UniverRenderingContext } from '../context'; +import type { Scene } from '../scene'; +import type { IShapeProps } from './shape'; +import { ObjectType } from '../base-object'; import { RENDER_CLASS_TYPE, Vector2 } from '../basics'; import { offsetRotationAxis } from '../basics/offset-rotation-axis'; -import type { Scene } from '../scene'; -import { ObjectType } from '../base-object'; -import type { IShapeProps } from './shape'; import { Shape } from './shape'; export interface IImageProps extends IShapeProps { diff --git a/packages/engine-render/src/shape/path.ts b/packages/engine-render/src/shape/path.ts index a6f0b8a057..521b07a974 100644 --- a/packages/engine-render/src/shape/path.ts +++ b/packages/engine-render/src/shape/path.ts @@ -17,9 +17,9 @@ import type { IKeyValue, Nullable } from '@univerjs/core'; import type { IObjectFullState } from '../basics/interfaces'; -import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import type { UniverRenderingContext } from '../context'; import type { IShapeProps } from './shape'; +import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import { Shape } from './shape'; interface IPathDataArray { diff --git a/packages/engine-render/src/shape/regular-polygon.ts b/packages/engine-render/src/shape/regular-polygon.ts index 9dfa6b867e..0996c41332 100644 --- a/packages/engine-render/src/shape/regular-polygon.ts +++ b/packages/engine-render/src/shape/regular-polygon.ts @@ -17,10 +17,10 @@ import type { IKeyValue } from '@univerjs/core'; import type { IObjectFullState } from '../basics/interfaces'; -import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import type { IPoint, Vector2 } from '../basics/vector2'; import type { UniverRenderingContext } from '../context'; import type { IShapeProps } from './shape'; +import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; import { Shape } from './shape'; export interface IRegularPolygonProps extends IShapeProps { diff --git a/packages/engine-render/src/shape/rich-text.ts b/packages/engine-render/src/shape/rich-text.ts index 1d7547e80b..cbd1c91a93 100644 --- a/packages/engine-render/src/shape/rich-text.ts +++ b/packages/engine-render/src/shape/rich-text.ts @@ -25,16 +25,16 @@ import type { LocaleService, Nullable, } from '@univerjs/core'; -import { BooleanNumber, DEFAULT_EMPTY_DOCUMENT_VALUE, DocumentDataModel } from '@univerjs/core'; - import type { BASE_OBJECT_ARRAY } from '../base-object'; + +import type { IViewportInfo } from '../basics/vector2'; +import type { UniverRenderingContext } from '../context'; +import { BooleanNumber, DEFAULT_EMPTY_DOCUMENT_VALUE, DocumentDataModel } from '@univerjs/core'; import { BaseObject, ObjectType } from '../base-object'; import { TRANSFORM_CHANGE_OBSERVABLE_TYPE } from '../basics/interfaces'; -import type { IViewportInfo } from '../basics/vector2'; -import { DocumentSkeleton } from '../components/docs/layout/doc-skeleton'; import { Documents } from '../components/docs/document'; +import { DocumentSkeleton } from '../components/docs/layout/doc-skeleton'; import { DocumentViewModel } from '../components/docs/view-model/document-view-model'; -import type { UniverRenderingContext } from '../context'; export interface IRichTextProps extends ITransformState, IStyleBase { text?: string; diff --git a/packages/facade/package.json b/packages/facade/package.json index 70c19d8e43..35b84c3f7f 100644 --- a/packages/facade/package.json +++ b/packages/facade/package.json @@ -89,7 +89,7 @@ "jest-canvas-mock": "^2.5.2", "jsdom": "^24.1.1", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/find-replace/package.json b/packages/find-replace/package.json index 1ce8895149..7a35d3073f 100644 --- a/packages/find-replace/package.json +++ b/packages/find-replace/package.json @@ -81,7 +81,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/find-replace/src/controllers/find-replace.controller.ts b/packages/find-replace/src/controllers/find-replace.controller.ts index e03e3e0a19..ad0df4a3ac 100644 --- a/packages/find-replace/src/controllers/find-replace.controller.ts +++ b/packages/find-replace/src/controllers/find-replace.controller.ts @@ -16,7 +16,8 @@ import type { IDisposable, - Nullable } from '@univerjs/core'; + Nullable, +} from '@univerjs/core'; import { ICommandService, Inject, @@ -27,12 +28,7 @@ import { toDisposable, } from '@univerjs/core'; import { SearchSingle } from '@univerjs/icons'; -import { ComponentManager, - IDialogService, - ILayoutService, - IMenuManagerService, - IShortcutService, -} from '@univerjs/ui'; +import { ComponentManager, IDialogService, ILayoutService, IMenuManagerService, IShortcutService } from '@univerjs/ui'; import { takeUntil } from 'rxjs'; import { ReplaceAllMatchesCommand, ReplaceCurrentMatchCommand } from '../commands/commands/replace.command'; diff --git a/packages/find-replace/src/services/find-replace.service.ts b/packages/find-replace/src/services/find-replace.service.ts index c2c49eaf56..282035feef 100644 --- a/packages/find-replace/src/services/find-replace.service.ts +++ b/packages/find-replace/src/services/find-replace.service.ts @@ -237,7 +237,8 @@ export class FindReplaceModel extends Disposable { this._stopSearching(); } } - })); + }) + ); } override dispose(): void { diff --git a/packages/find-replace/src/views/dialog/FindReplaceDialog.tsx b/packages/find-replace/src/views/dialog/FindReplaceDialog.tsx index 968f8880c4..57e610d958 100644 --- a/packages/find-replace/src/views/dialog/FindReplaceDialog.tsx +++ b/packages/find-replace/src/views/dialog/FindReplaceDialog.tsx @@ -259,10 +259,12 @@ export function FindReplaceDialog() { const focusRef = useRef(null); const setDialogContainerFocus = useCallback( (focused: boolean) => contextService.setContextValue(FIND_REPLACE_DIALOG_FOCUS, focused), - [contextService]); + [contextService] + ); const setDialogInputFocus = useCallback( (focused: boolean) => contextService.setContextValue(FIND_REPLACE_INPUT_FOCUS, focused), - [contextService]); + [contextService] + ); useEffect(() => { const focusSubscription = fromEvent(document, 'focusin').subscribe((event) => { diff --git a/packages/network/package.json b/packages/network/package.json index 5590570c25..bd16fb4db0 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/rpc-node/package.json b/packages/rpc-node/package.json index 9be927c235..a7cf4478c9 100644 --- a/packages/rpc-node/package.json +++ b/packages/rpc-node/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/rpc/package.json b/packages/rpc/package.json index 625bc3c516..365c34f2f9 100644 --- a/packages/rpc/package.json +++ b/packages/rpc/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/rpc/src/plugin.ts b/packages/rpc/src/plugin.ts index 2305a59296..ad3fbeceb2 100644 --- a/packages/rpc/src/plugin.ts +++ b/packages/rpc/src/plugin.ts @@ -23,7 +23,8 @@ import { IConfigService, Inject, Injector, merge, Plugin } from '@univerjs/core' import { defaultPluginMainThreadConfig, defaultPluginWorkerThreadConfig, - PLUGIN_CONFIG_KEY_MAIN_THREAD, PLUGIN_CONFIG_KEY_WORKER_THREAD, + PLUGIN_CONFIG_KEY_MAIN_THREAD, + PLUGIN_CONFIG_KEY_WORKER_THREAD, } from './controllers/config.schema'; import { DataSyncPrimaryController } from './controllers/data-sync/data-sync-primary.controller'; import { DataSyncReplicaController } from './controllers/data-sync/data-sync-replica.controller'; diff --git a/packages/sheets-conditional-formatting-ui/package.json b/packages/sheets-conditional-formatting-ui/package.json index 4e3d68940d..32acbf638d 100644 --- a/packages/sheets-conditional-formatting-ui/package.json +++ b/packages/sheets-conditional-formatting-ui/package.json @@ -90,7 +90,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-average-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-average-cf.command.ts index 5ad656042e..373ecf087f 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-average-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-average-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IAverageHighlightCell, IConditionFormattingRule } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -22,7 +23,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, CFSubRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IAverageHighlightCell, IConditionFormattingRule } from '@univerjs/sheets-conditional-formatting'; interface IAddAverageCfParams { ranges: IRange[]; @@ -49,7 +49,8 @@ export const AddAverageCfCommand: ICommand = { const cfId = conditionalFormattingRuleModel.createCfId(unitId, subUnitId); const rule: IConditionFormattingRule = { ranges, - cfId, stopIfTrue: !!stopIfTrue, + cfId, + stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, subType: CFSubRuleType.average, diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-color-scale-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-color-scale-cf.command.ts index bb9bcec647..217097e1dc 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-color-scale-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-color-scale-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IColorScale, IConditionFormattingRule } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -22,7 +23,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IColorScale, IConditionFormattingRule } from '@univerjs/sheets-conditional-formatting'; interface IAddColorScaleConditionalRuleParams { ranges: IRange[]; @@ -49,7 +49,8 @@ export const AddColorScaleConditionalRuleCommand: ICommand = { return false; } rule = { - ranges, cfId, + ranges, + cfId, stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, @@ -70,7 +71,8 @@ export const AddNumberCfCommand: ICommand = { return false; } rule = { - ranges, cfId, + ranges, + cfId, stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-rank-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-rank-cf.command.ts index 37db5f60a4..20cb58ad93 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-rank-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-rank-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, IRankHighlightCell } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -22,7 +23,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, CFSubRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, IRankHighlightCell } from '@univerjs/sheets-conditional-formatting'; interface IAddRankCfParams { ranges: IRange[]; @@ -51,7 +51,8 @@ export const AddRankCfCommand: ICommand = { const { unitId, subUnitId } = target; const cfId = conditionalFormattingRuleModel.createCfId(unitId, subUnitId); const rule: IConditionFormattingRule = { - ranges, cfId, + ranges, + cfId, stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-text-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-text-cf.command.ts index 285c591c31..373cdd2140 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-text-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-text-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, ITextHighlightCell } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -23,7 +24,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, CFSubRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, ITextHighlightCell } from '@univerjs/sheets-conditional-formatting'; interface IAddAverageCfParams { ranges: IRange[]; @@ -51,7 +51,8 @@ export const AddTextCfCommand: ICommand = { const cfId = conditionalFormattingRuleModel.createCfId(unitId, subUnitId); const rule: IConditionFormattingRule = { - ranges, cfId, + ranges, + cfId, stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-time-period-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-time-period-cf.command.ts index 03dadfbff0..7eac129994 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-time-period-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-time-period-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, ITimePeriodHighlightCell } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -22,7 +23,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, CFSubRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, ITimePeriodHighlightCell } from '@univerjs/sheets-conditional-formatting'; interface IAddTimePeriodCf { ranges: IRange[]; @@ -49,7 +49,8 @@ export const AddTimePeriodCfCommand: ICommand = { const { unitId, subUnitId } = target; const cfId = conditionalFormattingRuleModel.createCfId(unitId, subUnitId); const rule: IConditionFormattingRule = { - ranges, cfId, + ranges, + cfId, stopIfTrue: !!stopIfTrue, rule: { type: CFRuleType.highlightCell, diff --git a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-unique-values-cf.command.ts b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-unique-values-cf.command.ts index b0b8545a96..a7c61ffe05 100644 --- a/packages/sheets-conditional-formatting-ui/src/commands/commands/add-unique-values-cf.command.ts +++ b/packages/sheets-conditional-formatting-ui/src/commands/commands/add-unique-values-cf.command.ts @@ -15,6 +15,7 @@ */ import type { ICommand, IRange } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, IHighlightCell } from '@univerjs/sheets-conditional-formatting'; import { CommandType, ICommandService, @@ -22,7 +23,6 @@ import { } from '@univerjs/core'; import { getSheetCommandTarget } from '@univerjs/sheets'; import { AddConditionalRuleMutation, CFRuleType, CFSubRuleType, ConditionalFormattingRuleModel } from '@univerjs/sheets-conditional-formatting'; -import type { IAddConditionalRuleMutationParams, IConditionFormattingRule, IHighlightCell } from '@univerjs/sheets-conditional-formatting'; interface IAddUniqueValuesConditionalRuleParams { ranges: IRange[]; @@ -47,7 +47,8 @@ export const AddUniqueValuesCfCommand: ICommand { medianColor: string; maxColor: string; }) => { - const { minType, - medianType, - maxType, - minValue, - medianValue, - maxValue, - minColor, - medianColor, - maxColor } = option; + const { minType, medianType, maxType, minValue, medianValue, maxValue, minColor, medianColor, maxColor } = option; const list = []; list.push({ color: minColor, value: { type: minType, value: minValue } }); medianType !== 'none' && list.push({ color: medianColor, value: { type: medianType, value: medianValue } }); diff --git a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/DataBar.tsx b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/DataBar.tsx index fb865bd51d..633b5d47a8 100644 --- a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/DataBar.tsx +++ b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/DataBar.tsx @@ -54,7 +54,8 @@ const InputText = (props: { disabled?: boolean; id: string; className: string; t }; } return { - min: Number.MIN_SAFE_INTEGER, max: Number.MAX_SAFE_INTEGER, + min: Number.MIN_SAFE_INTEGER, + max: Number.MAX_SAFE_INTEGER, }; }, [type]); if (type === CFValueType.formula) { @@ -226,9 +227,10 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
{localeService.t('sheet.cf.panel.styleRule')}
-
@@ -237,11 +239,12 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => { {localeService.t('sheet.cf.panel.fillType')} -
{ {localeService.t('sheet.cf.panel.gradient')} -
{
{localeService.t('sheet.cf.panel.colorSet')}
-
-
-
+
+
{localeService.t('sheet.cf.panel.native')}
@@ -296,14 +303,16 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => { onChange={handleNativeColorChange} />
-
-
+
{localeService.t('sheet.cf.panel.positive')}
@@ -317,10 +326,11 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
{localeService.t('sheet.cf.valueType.min')}
-
{ switch (type) { case CFSubRuleType.text: { - if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, - CFTextOperator.containsText, CFTextOperator.notContainsText, - CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { + if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, CFTextOperator.containsText, CFTextOperator.notContainsText, CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { onChange(inputTextValue); } break; } case CFSubRuleType.number: { - if ([CFNumberOperator.equal, CFNumberOperator.notEqual, - CFNumberOperator.greaterThan, CFNumberOperator.greaterThanOrEqual, - CFNumberOperator.lessThan, CFNumberOperator.lessThanOrEqual, - ].includes(operator as CFNumberOperator)) { + if ([CFNumberOperator.equal, CFNumberOperator.notEqual, CFNumberOperator.greaterThan, CFNumberOperator.greaterThanOrEqual, CFNumberOperator.lessThan, CFNumberOperator.lessThanOrEqual].includes(operator as CFNumberOperator)) { onChange(inputNumberValue); } if ([CFNumberOperator.between, CFNumberOperator.notBetween].includes(operator as CFNumberOperator)) { @@ -96,12 +91,7 @@ const HighlightCellInput = (props: { handler: (v, _c, next) => { switch (type) { case CFSubRuleType.text: { - if ([CFTextOperator.beginsWith, - CFTextOperator.containsText, - CFTextOperator.endsWith, - CFTextOperator.notEqual, - CFTextOperator.notContainsText, - CFTextOperator.equal].includes(operator as any)) { + if ([CFTextOperator.beginsWith, CFTextOperator.containsText, CFTextOperator.endsWith, CFTextOperator.notEqual, CFTextOperator.notContainsText, CFTextOperator.equal].includes(operator as any)) { if (!inputTextValue) { textErrorSet(localeService.t('sheet.cf.errorMessage.notBlank')); return false; @@ -120,17 +110,16 @@ const HighlightCellInput = (props: { switch (type) { case CFSubRuleType.text: { - if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, - CFTextOperator.containsText, CFTextOperator.notContainsText, - CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { + if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, CFTextOperator.containsText, CFTextOperator.notContainsText, CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { const _onChange = (value: string) => { inputTextValueSet(value); onChange(value); }; return ( -
{ inputNumberValueSet(value || 0); onChange(value || 0); numberErrorSet(''); }; return ( -
@@ -182,10 +169,11 @@ const HighlightCellInput = (props: { numberMaxErrorSet(''); }; return ( -
@@ -281,8 +269,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps getOperatorOptions(subType, localeService), [subType]); @@ -308,9 +295,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps (option: { subType?: string; operator?: string; value?: IValue; style?: IHighlightCell['style'] }) => { switch (option.subType || subType) { case CFSubRuleType.text: { - if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, - CFTextOperator.containsText, CFTextOperator.notContainsText, - CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { + if ([CFTextOperator.beginsWith, CFTextOperator.endsWith, CFTextOperator.containsText, CFTextOperator.notContainsText, CFTextOperator.equal, CFTextOperator.notEqual].includes(operator as CFTextOperator)) { return { type: CFRuleType.highlightCell, subType: option.subType ?? subType, @@ -322,10 +307,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps -
{localeService.t('sheet.cf.panel.styleRule')}
@@ -424,9 +407,10 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps )} -
diff --git a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/IconSet.tsx b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/IconSet.tsx index d4b73089fc..befee23bee 100644 --- a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/IconSet.tsx +++ b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/IconSet.tsx @@ -190,8 +190,7 @@ const IconSetRuleEdit = (props: { const { onChange, configList, errorMap = {} } = props; const localeService = useDependency(LocaleService); - const options = [{ label: localeService.t(`sheet.cf.symbol.${CFNumberOperator.greaterThan}`), value: CFNumberOperator.greaterThan }, - { label: localeService.t(`sheet.cf.symbol.${CFNumberOperator.greaterThanOrEqual}`), value: CFNumberOperator.greaterThanOrEqual }]; + const options = [{ label: localeService.t(`sheet.cf.symbol.${CFNumberOperator.greaterThan}`), value: CFNumberOperator.greaterThan }, { label: localeService.t(`sheet.cf.symbol.${CFNumberOperator.greaterThanOrEqual}`), value: CFNumberOperator.greaterThanOrEqual }]; const valueTypeOptions = [ { label: localeService.t(`sheet.cf.valueType.${CFValueType.num}`), value: CFValueType.num }, { label: localeService.t(`sheet.cf.valueType.${CFValueType.percent}`), value: CFValueType.percent }, diff --git a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/Rank.tsx b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/Rank.tsx index 9ff7c47c41..2b97032451 100644 --- a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/Rank.tsx +++ b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/Rank.tsx @@ -31,8 +31,7 @@ export const RankStyleEditor = (props: IStyleEditorProps) => { const localeService = useDependency(LocaleService); const rule = props.rule?.type === CFRuleType.highlightCell ? props.rule : undefined as IRankHighlightCell | IAverageHighlightCell | undefined; - const options = [{ label: localeService.t('sheet.cf.panel.isNotBottom'), value: 'isNotBottom' }, { label: localeService.t('sheet.cf.panel.isBottom'), value: 'isBottom' }, - { label: localeService.t('sheet.cf.panel.greaterThanAverage'), value: 'greaterThanAverage' }, { label: localeService.t('sheet.cf.panel.lessThanAverage'), value: 'lessThanAverage' }]; + const options = [{ label: localeService.t('sheet.cf.panel.isNotBottom'), value: 'isNotBottom' }, { label: localeService.t('sheet.cf.panel.isBottom'), value: 'isBottom' }, { label: localeService.t('sheet.cf.panel.greaterThanAverage'), value: 'greaterThanAverage' }, { label: localeService.t('sheet.cf.panel.lessThanAverage'), value: 'lessThanAverage' }]; const [type, typeSet] = useState(() => { const defaultV = options[0].value; @@ -143,10 +142,11 @@ export const RankStyleEditor = (props: IStyleEditorProps) => { }; return (
-
{localeService.t('sheet.cf.panel.styleRule')}
@@ -163,10 +163,11 @@ export const RankStyleEditor = (props: IStyleEditorProps) => { }} /> {['isNotBottom', 'isBottom'].includes(type) && ( -
{ _onChange({ type, isPercent, value, style }); }} /> -
{
)} -
diff --git a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/index.tsx b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/index.tsx index 88acb456a5..4003f42332 100644 --- a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/index.tsx +++ b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-edit/index.tsx @@ -77,7 +77,8 @@ export const RuleEdit = (props: IRuleEditProps) => { { label: localeService.t('sheet.cf.ruleType.dataBar'), value: '3' }, { label: localeService.t('sheet.cf.ruleType.colorScale'), value: '4' }, { label: localeService.t('sheet.cf.ruleType.formula'), value: '5' }, - { label: localeService.t('sheet.cf.ruleType.iconSet'), value: '6' }]; + { label: localeService.t('sheet.cf.ruleType.iconSet'), value: '6' }, + ]; const [ruleType, ruleTypeSet] = useState(() => { const type = props.rule?.rule.type; diff --git a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-list/index.tsx b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-list/index.tsx index fae7e29faa..afe0257187 100644 --- a/packages/sheets-conditional-formatting-ui/src/components/panel/rule-list/index.tsx +++ b/packages/sheets-conditional-formatting-ui/src/components/panel/rule-list/index.tsx @@ -311,9 +311,7 @@ export const RuleList = (props: IRuleListProps) => {
- {conditionalFormattingI18nController.tWithReactNode('sheet.cf.panel.managerRuleSelect', - { selectValueSet(v); }} />) .map((ele, index) => {ele})}
diff --git a/packages/sheets-conditional-formatting-ui/src/controllers/cf.auto-fill.controller.ts b/packages/sheets-conditional-formatting-ui/src/controllers/cf.auto-fill.controller.ts index ddeaec67db..32f1c46a8e 100644 --- a/packages/sheets-conditional-formatting-ui/src/controllers/cf.auto-fill.controller.ts +++ b/packages/sheets-conditional-formatting-ui/src/controllers/cf.auto-fill.controller.ts @@ -172,13 +172,17 @@ export class ConditionalFormattingAutoFillController extends Disposable { const ranges = findAllRectangle(createTopMatrixFromMatrix(item)); if (ranges.length) { const params: ISetConditionalRuleMutationParams = { - unitId, subUnitId, rule: { ...rule, ranges }, + unitId, + subUnitId, + rule: { ...rule, ranges }, }; redos.push({ id: SetConditionalRuleMutation.id, params }); undos.push(...setConditionalRuleMutationUndoFactory(this._injector, params)); } else { const params: IDeleteConditionalRuleMutationParams = { - unitId, subUnitId, cfId: rule.cfId, + unitId, + subUnitId, + cfId: rule.cfId, }; redos.push({ id: DeleteConditionalRuleMutation.id, params }); undos.push(...DeleteConditionalRuleMutationUndoFactory(this._injector, params)); diff --git a/packages/sheets-conditional-formatting-ui/src/controllers/cf.copy-paste.controller.ts b/packages/sheets-conditional-formatting-ui/src/controllers/cf.copy-paste.controller.ts index 565808c347..71d4b35c06 100644 --- a/packages/sheets-conditional-formatting-ui/src/controllers/cf.copy-paste.controller.ts +++ b/packages/sheets-conditional-formatting-ui/src/controllers/cf.copy-paste.controller.ts @@ -29,7 +29,8 @@ import { UniverInstanceType, } from '@univerjs/core'; import { - createTopMatrixFromMatrix, findAllRectangle, + createTopMatrixFromMatrix, + findAllRectangle, rangeToDiscreteRange, } from '@univerjs/sheets'; import { AddConditionalRuleMutation, AddConditionalRuleMutationUndoFactory, ConditionalFormattingRuleModel, ConditionalFormattingViewModel, DeleteConditionalRuleMutation, DeleteConditionalRuleMutationUndoFactory, SetConditionalRuleMutation, setConditionalRuleMutationUndoFactory, SHEET_CONDITIONAL_FORMATTING_PLUGIN } from '@univerjs/sheets-conditional-formatting'; @@ -137,7 +138,9 @@ export class ConditionalFormattingCopyPasteController extends Disposable { } const specialPastes: IPasteHookValueType[] = [ - PREDEFINED_HOOK_NAME.SPECIAL_PASTE_FORMAT, PREDEFINED_HOOK_NAME.DEFAULT_PASTE, PREDEFINED_HOOK_NAME.SPECIAL_PASTE_BESIDES_BORDER, + PREDEFINED_HOOK_NAME.SPECIAL_PASTE_FORMAT, + PREDEFINED_HOOK_NAME.DEFAULT_PASTE, + PREDEFINED_HOOK_NAME.SPECIAL_PASTE_BESIDES_BORDER, ]; if ( @@ -242,7 +245,9 @@ export class ConditionalFormattingCopyPasteController extends Disposable { const ranges = findAllRectangle(createTopMatrixFromMatrix(matrix)); if (!ranges.length) { const deleteParams: IDeleteConditionalRuleMutationParams = { - unitId, subUnitId, cfId, + unitId, + subUnitId, + cfId, }; redos.push({ id: DeleteConditionalRuleMutation.id, params: deleteParams }); undos.push(...DeleteConditionalRuleMutationUndoFactory(this._injector, deleteParams)); @@ -250,7 +255,9 @@ export class ConditionalFormattingCopyPasteController extends Disposable { if (waitAddRule.some((rule) => rule.cfId === cfId)) { const rule = getCurrentSheetCfRule(cfId); const addParams: IAddConditionalRuleMutationParams = { - unitId, subUnitId, rule: { ...rule, ranges }, + unitId, + subUnitId, + rule: { ...rule, ranges }, }; redos.push({ id: AddConditionalRuleMutation.id, params: addParams }); undos.push(AddConditionalRuleMutationUndoFactory(this._injector, addParams)); @@ -260,7 +267,9 @@ export class ConditionalFormattingCopyPasteController extends Disposable { continue; } const setParams: ISetConditionalRuleMutationParams = { - unitId, subUnitId, rule: { ...rule, ranges }, + unitId, + subUnitId, + rule: { ...rule, ranges }, }; redos.push({ id: SetConditionalRuleMutation.id, params: setParams }); undos.push(...setConditionalRuleMutationUndoFactory(this._injector, setParams)); diff --git a/packages/sheets-conditional-formatting-ui/src/controllers/cf.painter.controller.ts b/packages/sheets-conditional-formatting-ui/src/controllers/cf.painter.controller.ts index d3c206bdd1..dca9d2ee30 100644 --- a/packages/sheets-conditional-formatting-ui/src/controllers/cf.painter.controller.ts +++ b/packages/sheets-conditional-formatting-ui/src/controllers/cf.painter.controller.ts @@ -229,13 +229,17 @@ export class ConditionalFormattingPainterController extends Disposable { const ranges = findAllRectangle(createTopMatrixFromMatrix(item)); if (ranges.length) { const params: ISetConditionalRuleMutationParams = { - unitId: sourceUnitId, subUnitId: sourceSubUnitId, rule: { ...rule, ranges }, + unitId: sourceUnitId, + subUnitId: sourceSubUnitId, + rule: { ...rule, ranges }, }; redos.push({ id: SetConditionalRuleMutation.id, params }); undos.push(...setConditionalRuleMutationUndoFactory(this._injector, params)); } else { const params: IDeleteConditionalRuleMutationParams = { - unitId: sourceUnitId, subUnitId: sourceSubUnitId, cfId: rule.cfId, + unitId: sourceUnitId, + subUnitId: sourceSubUnitId, + cfId: rule.cfId, }; redos.push({ id: DeleteConditionalRuleMutation.id, params }); undos.push(...DeleteConditionalRuleMutationUndoFactory(this._injector, params)); @@ -263,13 +267,17 @@ export class ConditionalFormattingPainterController extends Disposable { } else { if (ranges.length) { const params: ISetConditionalRuleMutationParams = { - unitId: targetUnitId, subUnitId: targetSubUnitId, rule: { ...rule, ranges }, + unitId: targetUnitId, + subUnitId: targetSubUnitId, + rule: { ...rule, ranges }, }; redos.push({ id: SetConditionalRuleMutation.id, params }); undos.push(...setConditionalRuleMutationUndoFactory(this._injector, params)); } else { const params: IDeleteConditionalRuleMutationParams = { - unitId: targetUnitId, subUnitId: targetSubUnitId, cfId: rule.cfId, + unitId: targetUnitId, + subUnitId: targetSubUnitId, + cfId: rule.cfId, }; redos.push({ id: DeleteConditionalRuleMutation.id, params }); undos.push(...DeleteConditionalRuleMutationUndoFactory(this._injector, params)); diff --git a/packages/sheets-conditional-formatting-ui/src/controllers/cf.render.controller.ts b/packages/sheets-conditional-formatting-ui/src/controllers/cf.render.controller.ts index 4073cafedb..be34df7713 100644 --- a/packages/sheets-conditional-formatting-ui/src/controllers/cf.render.controller.ts +++ b/packages/sheets-conditional-formatting-ui/src/controllers/cf.render.controller.ts @@ -30,13 +30,7 @@ export class SheetsCfRenderController extends Disposable { * The solution here is to store all the asynchronous tasks and focus on processing after the last callback */ private _ruleChangeCacheMap: Map boolean }>> = new Map(); - constructor(@Inject(SheetInterceptorService) private _sheetInterceptorService: SheetInterceptorService, - @Inject(ConditionalFormattingService) private _conditionalFormattingService: ConditionalFormattingService, - @Inject(IUniverInstanceService) private _univerInstanceService: IUniverInstanceService, - @Inject(IRenderManagerService) private _renderManagerService: IRenderManagerService, - @Inject(ConditionalFormattingViewModel) private _conditionalFormattingViewModel: ConditionalFormattingViewModel, - @Inject(ConditionalFormattingRuleModel) private _conditionalFormattingRuleModel: ConditionalFormattingRuleModel - ) { + constructor(@Inject(SheetInterceptorService) private _sheetInterceptorService: SheetInterceptorService, @Inject(ConditionalFormattingService) private _conditionalFormattingService: ConditionalFormattingService, @Inject(IUniverInstanceService) private _univerInstanceService: IUniverInstanceService, @Inject(IRenderManagerService) private _renderManagerService: IRenderManagerService, @Inject(ConditionalFormattingViewModel) private _conditionalFormattingViewModel: ConditionalFormattingViewModel, @Inject(ConditionalFormattingRuleModel) private _conditionalFormattingRuleModel: ConditionalFormattingRuleModel) { super(); this._initViewModelInterceptor(); diff --git a/packages/sheets-conditional-formatting-ui/src/controllers/cf.viewport.controller.ts b/packages/sheets-conditional-formatting-ui/src/controllers/cf.viewport.controller.ts index 838e6c62ff..28e2f6b45f 100644 --- a/packages/sheets-conditional-formatting-ui/src/controllers/cf.viewport.controller.ts +++ b/packages/sheets-conditional-formatting-ui/src/controllers/cf.viewport.controller.ts @@ -24,7 +24,8 @@ export class ConditionalFormattingViewportController extends Disposable { constructor( @Inject(ConditionalFormattingViewModel) private _conditionalFormattingViewModel: ConditionalFormattingViewModel, @IUniverInstanceService private _univerInstanceService: IUniverInstanceService, - @IRenderManagerService private _renderManagerService: IRenderManagerService) { + @IRenderManagerService private _renderManagerService: IRenderManagerService + ) { super(); this._init(); } diff --git a/packages/sheets-conditional-formatting-ui/src/menu/manage-rule.ts b/packages/sheets-conditional-formatting-ui/src/menu/manage-rule.ts index d61249e279..a5227879bd 100644 --- a/packages/sheets-conditional-formatting-ui/src/menu/manage-rule.ts +++ b/packages/sheets-conditional-formatting-ui/src/menu/manage-rule.ts @@ -70,7 +70,8 @@ const commonSelections = [ selectable: false, }, value: CF_MENU_OPERATION.dataBar, - }, { + }, + { label: { name: 'sheet.cf.ruleType.iconSet', selectable: false, @@ -83,7 +84,8 @@ const commonSelections = [ selectable: false, }, value: CF_MENU_OPERATION.viewRule, - }, { + }, + { label: { name: 'sheet.cf.menu.createConditionalFormatting', selectable: false, diff --git a/packages/sheets-conditional-formatting/package.json b/packages/sheets-conditional-formatting/package.json index fec34a99a1..07e174795f 100644 --- a/packages/sheets-conditional-formatting/package.json +++ b/packages/sheets-conditional-formatting/package.json @@ -77,7 +77,7 @@ "@univerjs-infra/shared": "workspace:*", "@univerjs/icons-svg": "^0.2.20", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-conditional-formatting/src/commands/commands/clear-range-cf.command.ts b/packages/sheets-conditional-formatting/src/commands/commands/clear-range-cf.command.ts index 964a8c9965..b3a03e42ec 100644 --- a/packages/sheets-conditional-formatting/src/commands/commands/clear-range-cf.command.ts +++ b/packages/sheets-conditional-formatting/src/commands/commands/clear-range-cf.command.ts @@ -14,9 +14,7 @@ * limitations under the License. */ -import type { ICommand, IMutationInfo, - IRange, -} from '@univerjs/core'; +import type { ICommand, IMutationInfo, IRange } from '@univerjs/core'; import type { IConditionFormattingRule } from '../../models/type'; import type { IDeleteConditionalRuleMutationParams } from '../mutations/delete-conditional-rule.mutation'; import type { ISetConditionalRuleMutationParams } from '../mutations/set-conditional-rule.mutation'; diff --git a/packages/sheets-conditional-formatting/src/commands/mutations/delete-conditional-rule.mutation.ts b/packages/sheets-conditional-formatting/src/commands/mutations/delete-conditional-rule.mutation.ts index fba153d121..d291e4fd21 100644 --- a/packages/sheets-conditional-formatting/src/commands/mutations/delete-conditional-rule.mutation.ts +++ b/packages/sheets-conditional-formatting/src/commands/mutations/delete-conditional-rule.mutation.ts @@ -15,12 +15,12 @@ */ import type { IAccessor, IMutation, IMutationInfo } from '@univerjs/core'; +import type { IAddConditionalRuleMutationParams } from './add-conditional-rule.mutation'; +import type { IMoveConditionalRuleMutationParams } from './move-conditional-rule.mutation'; import { CommandType, Tools } from '@univerjs/core'; import { ConditionalFormattingRuleModel } from '../../models/conditional-formatting-rule-model'; import { transformSupportSymmetryAnchor } from '../../utils/anchor'; -import type { IAddConditionalRuleMutationParams } from './add-conditional-rule.mutation'; import { AddConditionalRuleMutation } from './add-conditional-rule.mutation'; -import type { IMoveConditionalRuleMutationParams } from './move-conditional-rule.mutation'; import { MoveConditionalRuleMutation } from './move-conditional-rule.mutation'; export interface IDeleteConditionalRuleMutationParams { @@ -50,7 +50,9 @@ export const DeleteConditionalRuleMutationUndoFactory = (accessor: IAccessor, pa } const [start, end] = transformResult; const params: IMoveConditionalRuleMutationParams = { - unitId, subUnitId, start, + unitId, + subUnitId, + start, end, }; result.push({ id: MoveConditionalRuleMutation.id, params }); diff --git a/packages/sheets-conditional-formatting/src/commands/mutations/move-conditional-rule.mutation.ts b/packages/sheets-conditional-formatting/src/commands/mutations/move-conditional-rule.mutation.ts index 319a29bd94..d58682e8d5 100644 --- a/packages/sheets-conditional-formatting/src/commands/mutations/move-conditional-rule.mutation.ts +++ b/packages/sheets-conditional-formatting/src/commands/mutations/move-conditional-rule.mutation.ts @@ -16,9 +16,9 @@ import type { IMutation } from '@univerjs/core'; +import type { IAnchor } from '../../utils/anchor'; import { CommandType } from '@univerjs/core'; import { ConditionalFormattingRuleModel } from '../../models/conditional-formatting-rule-model'; -import type { IAnchor } from '../../utils/anchor'; import { anchorUndoFactory } from '../../utils/anchor'; export interface IMoveConditionalRuleMutationParams { @@ -50,7 +50,6 @@ export const MoveConditionalRuleMutationUndoFactory = (param: IMoveConditionalRu } const [start, end] = undo; - return [{ id: MoveConditionalRuleMutation.id, - params: { unitId, subUnitId, start, end } as IMoveConditionalRuleMutationParams }, + return [{ id: MoveConditionalRuleMutation.id, params: { unitId, subUnitId, start, end } as IMoveConditionalRuleMutationParams }, ]; }; diff --git a/packages/sheets-conditional-formatting/src/facade/f-conditional-formatting-builder.ts b/packages/sheets-conditional-formatting/src/facade/f-conditional-formatting-builder.ts index d11763cc8f..66568a0139 100644 --- a/packages/sheets-conditional-formatting/src/facade/f-conditional-formatting-builder.ts +++ b/packages/sheets-conditional-formatting/src/facade/f-conditional-formatting-builder.ts @@ -17,7 +17,23 @@ /* eslint-disable ts/explicit-function-return-type */ import type { IRange } from '@univerjs/core'; -import type { CFTimePeriodOperator, IAverageHighlightCell, IColorScale, IConditionalFormattingRuleConfig, IConditionFormattingRule, IDataBar, IDuplicateValuesHighlightCell, IFormulaHighlightCell, IIconSet, INumberHighlightCell, IRankHighlightCell, ITextHighlightCell, ITimePeriodHighlightCell, IUniqueValuesHighlightCell, IValueConfig } from '@univerjs/sheets-conditional-formatting'; +import type { + CFTimePeriodOperator, + IAverageHighlightCell, + IColorScale, + IConditionalFormattingRuleConfig, + IConditionFormattingRule, + IDataBar, + IDuplicateValuesHighlightCell, + IFormulaHighlightCell, + IIconSet, + INumberHighlightCell, + IRankHighlightCell, + ITextHighlightCell, + ITimePeriodHighlightCell, + IUniqueValuesHighlightCell, + IValueConfig, +} from '@univerjs/sheets-conditional-formatting'; import { BooleanNumber, ColorKit, Tools } from '@univerjs/core'; import { CFNumberOperator, CFRuleType, CFSubRuleType, CFTextOperator, CFValueType, createCfId, EMPTY_ICON_TYPE, iconMap } from '@univerjs/sheets-conditional-formatting'; @@ -39,12 +55,14 @@ class ConditionalFormatRuleBaseBuilder { type, config: [ { index: 0, color: new ColorKit('').toRgbString(), value: { type: CFValueType.min } }, - { index: 0, color: new ColorKit('green').toRgbString(), value: { type: CFValueType.max } }], + { index: 0, color: new ColorKit('green').toRgbString(), value: { type: CFValueType.max } }, + ], } as IColorScale; } case CFRuleType.dataBar: { return { - type, isShowValue: true, + type, + isShowValue: true, config: { min: { type: CFValueType.min }, max: { type: CFValueType.max }, positiveColor: new ColorKit('green').toRgbString(), nativeColor: new ColorKit('').toRgbString(), isGradient: false }, } as IDataBar; } @@ -62,16 +80,20 @@ class ConditionalFormatRuleBaseBuilder { type, isShowValue: true, config: [{ - operator: CFNumberOperator.greaterThanOrEqual, value: { type: CFValueType.min }, - iconType: EMPTY_ICON_TYPE, iconId: '', - }, - { - operator: CFNumberOperator.greaterThanOrEqual, value: { type: CFValueType.percentile, value: 0.5 }, - iconType: EMPTY_ICON_TYPE, iconId: '', - }, - { - operator: CFNumberOperator.lessThanOrEqual, value: { type: CFValueType.max }, - iconType: EMPTY_ICON_TYPE, iconId: '', + operator: CFNumberOperator.greaterThanOrEqual, + value: { type: CFValueType.min }, + iconType: EMPTY_ICON_TYPE, + iconId: '', + }, { + operator: CFNumberOperator.greaterThanOrEqual, + value: { type: CFValueType.percentile, value: 0.5 }, + iconType: EMPTY_ICON_TYPE, + iconId: '', + }, { + operator: CFNumberOperator.lessThanOrEqual, + value: { type: CFValueType.max }, + iconType: EMPTY_ICON_TYPE, + iconId: '', }], } as IIconSet; } diff --git a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/base-calculate.spec.ts b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/base-calculate.spec.ts index b8e7b77929..4a471c9a5c 100644 --- a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/base-calculate.spec.ts +++ b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/base-calculate.spec.ts @@ -33,10 +33,7 @@ describe('test-color-scale', () => { stopIfTrue: false, rule: { type: CFRuleType.colorScale, - config: [{ index: 0, value: { type: CFValueType.num, value: 10 }, color: 'red' }, - { index: 1, value: { type: CFValueType.num, value: 20 }, color: 'white' }, - { index: 2, value: { type: CFValueType.num, value: 30 }, color: 'green' }, - ], + config: [{ index: 0, value: { type: CFValueType.num, value: 10 }, color: 'red' }, { index: 1, value: { type: CFValueType.num, value: 20 }, color: 'white' }, { index: 2, value: { type: CFValueType.num, value: 30 }, color: 'green' }], } as IColorScale, }, limit: 1000, diff --git a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/calculate.color.spec.ts b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/calculate.color.spec.ts index 6b357173cf..0982b49eca 100644 --- a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/calculate.color.spec.ts +++ b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/__test__/calculate.color.spec.ts @@ -41,8 +41,7 @@ describe('Test colorScale', () => { value: { type: CFValueType.min, }, - }, - { + }, { index: 1, color: '#2e55ef', value: { @@ -109,24 +108,21 @@ describe('Test colorScale', () => { type: CFValueType.num, value: 1, }, - }, - { + }, { index: 1, color: '#2e55ef', value: { type: CFValueType.num, value: -5, }, - }, - { + }, { index: 2, color: 'rgb(231, 37, 143)', value: { type: CFValueType.num, value: 3, }, - }, - ], + }], }, }; testBed.getConditionalFormattingRuleModel().addRule(testBed.unitId, testBed.subUnitId, params); diff --git a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/color-scale-calculate-unit.ts b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/color-scale-calculate-unit.ts index bbfa630688..cc3a21d1e3 100644 --- a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/color-scale-calculate-unit.ts +++ b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/color-scale-calculate-unit.ts @@ -52,7 +52,8 @@ export class ColorScaleCalculateUnit extends BaseCalculateUnit isObject(item.value) ? item.value.status !== FormulaResultStatus.SUCCESS : false); diff --git a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/utils.ts b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/utils.ts index cc7935fd91..f5cf6a22d9 100644 --- a/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/utils.ts +++ b/packages/sheets-conditional-formatting/src/models/calculate-unit-v2/utils.ts @@ -254,7 +254,10 @@ export const getOppositeOperator = (operator: CFNumberOperator) => { export const getColorScaleFromValue = (colorList: { color: ColorKit; value: number }[], value: number) => { interface IRgbColor { - b: number; g: number; r: number; a?: number; + b: number; + g: number; + r: number; + a?: number; } const prefixRgba = (rgb: IRgbColor): Required => { if (rgb.a !== undefined) { diff --git a/packages/sheets-conditional-formatting/src/models/conditional-formatting-view-model.ts b/packages/sheets-conditional-formatting/src/models/conditional-formatting-view-model.ts index ed15c3319e..4131427df4 100644 --- a/packages/sheets-conditional-formatting/src/models/conditional-formatting-view-model.ts +++ b/packages/sheets-conditional-formatting/src/models/conditional-formatting-view-model.ts @@ -50,7 +50,8 @@ export class ConditionalFormattingViewModel extends Disposable { @Inject(Injector) private _injector: Injector, @Inject(ConditionalFormattingRuleModel) private _conditionalFormattingRuleModel: ConditionalFormattingRuleModel, @Inject(ConditionalFormattingFormulaService) private _conditionalFormattingFormulaService: ConditionalFormattingFormulaService, - @IUniverInstanceService private _univerInstanceService: IUniverInstanceService) { + @IUniverInstanceService private _univerInstanceService: IUniverInstanceService + ) { super(); this._initRuleListener(); this._handleCustomFormulasSeparately(); @@ -65,7 +66,8 @@ export class ConditionalFormattingViewModel extends Disposable { if (isAllFinished) { this._markRuleDirtyAtOnce(unitId, subUnitId, cfId, isAllFinished); } - })); + }) + ); } public getCellCfs(unitId: string, subUnitId: string, row: number, col: number) { @@ -121,7 +123,9 @@ export class ConditionalFormattingViewModel extends Disposable { } this._markDirty$.next({ - unitId, subUnitId, cfId, + unitId, + subUnitId, + cfId, }); }; @@ -169,7 +173,8 @@ export class ConditionalFormattingViewModel extends Disposable { this._conditionalFormattingFormulaService.deleteCache(unitId, subUnitId, oldRule.cfId); } } - })); + }) + ); } private _initRuleListener() { @@ -215,7 +220,8 @@ export class ConditionalFormattingViewModel extends Disposable { } } } - })); + }) + ); } private _ensureCalculateUnitManager(unitId: string, subUnitId: string) { diff --git a/packages/sheets-conditional-formatting/src/models/icon-map.ts b/packages/sheets-conditional-formatting/src/models/icon-map.ts index 0150194edc..9a343c9a22 100644 --- a/packages/sheets-conditional-formatting/src/models/icon-map.ts +++ b/packages/sheets-conditional-formatting/src/models/icon-map.ts @@ -35,17 +35,21 @@ export const iconGroup: { title: string; group: { name: string; list: string[] } title: 'sheet.cf.iconSet.shape', group: [ { - name: '3TrafficLights1', list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['roundness-gold'], ICON_MAP.shape['roundness-red']], + name: '3TrafficLights1', + list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['roundness-gold'], ICON_MAP.shape['roundness-red']], }, { - name: '3Signs', list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['triangle-gold'], ICON_MAP.shape['rhomboid-red']], + name: '3Signs', + list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['triangle-gold'], ICON_MAP.shape['rhomboid-red']], }, { name: '3TrafficLights2', list: [ICON_MAP.shape['indicate-greed'], ICON_MAP.shape['indicate-gold'], ICON_MAP.shape['indicate-red']] }, { - name: '4RedToBlack', list: [ICON_MAP.shape['roundness-red'], ICON_MAP.shape['roundness-pink'], ICON_MAP.shape['roundness-gray'], ICON_MAP.shape['roundness-black']], + name: '4RedToBlack', + list: [ICON_MAP.shape['roundness-red'], ICON_MAP.shape['roundness-pink'], ICON_MAP.shape['roundness-gray'], ICON_MAP.shape['roundness-black']], }, { - name: '4TrafficLights', list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['roundness-gold'], ICON_MAP.shape['roundness-red'], ICON_MAP.shape['roundness-black']], + name: '4TrafficLights', + list: [ICON_MAP.shape['roundness-greed'], ICON_MAP.shape['roundness-gold'], ICON_MAP.shape['roundness-red'], ICON_MAP.shape['roundness-black']], }, ], }, @@ -53,13 +57,16 @@ export const iconGroup: { title: string; group: { name: string; list: string[] } title: 'sheet.cf.iconSet.mark', group: [ { - name: '3Symbols', list: [ICON_MAP.feedback.correct, ICON_MAP.feedback.warn, ICON_MAP.feedback.mistake], + name: '3Symbols', + list: [ICON_MAP.feedback.correct, ICON_MAP.feedback.warn, ICON_MAP.feedback.mistake], }, { - name: '3Symbols2', list: [ICON_MAP.feedback2.correct2, ICON_MAP.feedback2.warn2, ICON_MAP.feedback2.mistake2], + name: '3Symbols2', + list: [ICON_MAP.feedback2.correct2, ICON_MAP.feedback2.warn2, ICON_MAP.feedback2.mistake2], }, { - name: '3Flags', list: [ICON_MAP.flag['flag-green'], ICON_MAP.flag['flag-gold'], ICON_MAP.flag['flag-red']], + name: '3Flags', + list: [ICON_MAP.flag['flag-green'], ICON_MAP.flag['flag-gold'], ICON_MAP.flag['flag-red']], }, ], @@ -68,22 +75,28 @@ export const iconGroup: { title: string; group: { name: string; list: string[] } title: 'sheet.cf.iconSet.rank', group: [ { - name: '4Rating', list: [ICON_MAP.signal.signal25, ICON_MAP.signal.signal50, ICON_MAP.signal.signal75, ICON_MAP.signal.signal100], + name: '4Rating', + list: [ICON_MAP.signal.signal25, ICON_MAP.signal.signal50, ICON_MAP.signal.signal75, ICON_MAP.signal.signal100], }, { - name: '5Rating', list: [ICON_MAP.signal.signal0, ICON_MAP.signal.signal25, ICON_MAP.signal.signal50, ICON_MAP.signal.signal75, ICON_MAP.signal.signal100], + name: '5Rating', + list: [ICON_MAP.signal.signal0, ICON_MAP.signal.signal25, ICON_MAP.signal.signal50, ICON_MAP.signal.signal75, ICON_MAP.signal.signal100], }, { - name: '5Quarters', list: [ICON_MAP.progress.progress100, ICON_MAP.progress.progress75, ICON_MAP.progress.progress50, ICON_MAP.progress.progress25, ICON_MAP.progress.progress0], + name: '5Quarters', + list: [ICON_MAP.progress.progress100, ICON_MAP.progress.progress75, ICON_MAP.progress.progress50, ICON_MAP.progress.progress25, ICON_MAP.progress.progress0], }, { - name: '_5Felling', list: [ICON_MAP.feeling.guffaw, ICON_MAP.feeling.smile, ICON_MAP.feeling.noninductive, ICON_MAP.feeling.dissatisfied, ICON_MAP.feeling.impatient], + name: '_5Felling', + list: [ICON_MAP.feeling.guffaw, ICON_MAP.feeling.smile, ICON_MAP.feeling.noninductive, ICON_MAP.feeling.dissatisfied, ICON_MAP.feeling.impatient], }, { - name: '5Boxes', list: [ICON_MAP.cell['cell-100'], ICON_MAP.cell['cell-75'], ICON_MAP.cell['cell-50'], ICON_MAP.cell['cell-25'], ICON_MAP.cell['cell-0']], + name: '5Boxes', + list: [ICON_MAP.cell['cell-100'], ICON_MAP.cell['cell-75'], ICON_MAP.cell['cell-50'], ICON_MAP.cell['cell-25'], ICON_MAP.cell['cell-0']], }, { - name: '3Stars', list: [ICON_MAP.star.starFull, ICON_MAP.star.starIncomplete, ICON_MAP.star.starEmpty], + name: '3Stars', + list: [ICON_MAP.star.starFull, ICON_MAP.star.starIncomplete, ICON_MAP.star.starEmpty], }, ], }, diff --git a/packages/sheets-conditional-formatting/src/services/conditional-formatting-formula.service.ts b/packages/sheets-conditional-formatting/src/services/conditional-formatting-formula.service.ts index 9df552ac11..a043ca6b0a 100644 --- a/packages/sheets-conditional-formatting/src/services/conditional-formatting-formula.service.ts +++ b/packages/sheets-conditional-formatting/src/services/conditional-formatting-formula.service.ts @@ -145,16 +145,15 @@ export class ConditionalFormattingFormulaService extends Disposable { })); // Register formula with Dirty Logic - this._activeDirtyManagerService.register(ConditionalFormattingFormulaMarkDirty.id, - { - commandId: ConditionalFormattingFormulaMarkDirty.id, - getDirtyData(commandInfo) { - const params = commandInfo.params as IConditionalFormattingFormulaMarkDirtyParams; - return { - dirtyUnitOtherFormulaMap: params, - }; - }, - }); + this._activeDirtyManagerService.register(ConditionalFormattingFormulaMarkDirty.id, { + commandId: ConditionalFormattingFormulaMarkDirty.id, + getDirtyData(commandInfo) { + const params = commandInfo.params as IConditionalFormattingFormulaMarkDirtyParams; + return { + dirtyUnitOtherFormulaMap: params, + }; + }, + }); } private _ensureSubunitFormulaMap(unitId: string, subUnitId: string) { @@ -205,8 +204,7 @@ export class ConditionalFormattingFormulaService extends Disposable { }; this._commandService.executeCommand(SetOtherFormulaMutation.id, params, { onlyLocal: true }).then(() => { - this._commandService.executeCommand(ConditionalFormattingFormulaMarkDirty.id, - { [unitId]: { [subUnitId]: { [formulaId]: true } } }, { onlyLocal: true }); + this._commandService.executeCommand(ConditionalFormattingFormulaMarkDirty.id, { [unitId]: { [subUnitId]: { [formulaId]: true } } }, { onlyLocal: true }); }); } diff --git a/packages/sheets-conditional-formatting/src/services/conditional-formatting.service.ts b/packages/sheets-conditional-formatting/src/services/conditional-formatting.service.ts index 4d0d1ea30b..9348fee1a9 100644 --- a/packages/sheets-conditional-formatting/src/services/conditional-formatting.service.ts +++ b/packages/sheets-conditional-formatting/src/services/conditional-formatting.service.ts @@ -153,11 +153,13 @@ export class ConditionalFormattingService extends Disposable { ruleList.forEach((item) => { const params: IDeleteConditionalRuleMutationParams = { - unitId, subUnitId, + unitId, + subUnitId, cfId: item.cfId, }; redos.push({ - id: DeleteConditionalRuleMutation.id, params, + id: DeleteConditionalRuleMutation.id, + params, }); undos.push(...DeleteConditionalRuleMutationUndoFactory(this._injector, params)); }); @@ -293,7 +295,8 @@ export class ConditionalFormattingService extends Disposable { break; } } - })); + }) + ); } } diff --git a/packages/sheets-crosshair-highlight/package.json b/packages/sheets-crosshair-highlight/package.json index 5b80077d6d..bfd8651d74 100644 --- a/packages/sheets-crosshair-highlight/package.json +++ b/packages/sheets-crosshair-highlight/package.json @@ -87,7 +87,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-data-validation-ui/package.json b/packages/sheets-data-validation-ui/package.json index 8371b0bdb3..1f286bd489 100644 --- a/packages/sheets-data-validation-ui/package.json +++ b/packages/sheets-data-validation-ui/package.json @@ -91,7 +91,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-data-validation-ui/src/controllers/dv-reject-input.controller.ts b/packages/sheets-data-validation-ui/src/controllers/dv-reject-input.controller.ts index ec8ab3e378..061302e607 100644 --- a/packages/sheets-data-validation-ui/src/controllers/dv-reject-input.controller.ts +++ b/packages/sheets-data-validation-ui/src/controllers/dv-reject-input.controller.ts @@ -63,7 +63,8 @@ export class DataValidationRejectInputController extends Disposable { worksheet, workbook, t: cell?.t, - }, rule + }, + rule ); if (success) { diff --git a/packages/sheets-data-validation-ui/src/views/components/detail/index.tsx b/packages/sheets-data-validation-ui/src/views/components/detail/index.tsx index e6c7bb4da2..eea1877965 100644 --- a/packages/sheets-data-validation-ui/src/views/components/detail/index.tsx +++ b/packages/sheets-data-validation-ui/src/views/components/detail/index.tsx @@ -33,9 +33,7 @@ import styles from './index.module.less'; // debounce execute commands, for better redo-undo experience const debounceExecuteFactory = (commandService: ICommandService) => debounce( - async (id: string, params?: any, options?: IExecutionOptions | undefined, - callback?: (success: boolean) => void - ) => { + async (id: string, params?: any, options?: IExecutionOptions | undefined, callback?: (success: boolean) => void) => { const res = await commandService.executeCommand(id, params, options); callback?.(res); }, @@ -124,7 +122,8 @@ export function DataValidationDetail() { return { ...unitRange, sheetId }; } return { - ...unitRange, sheetId: '', + ...unitRange, + sheetId: '', }; }); if (isUnitRangesEqual(unitRanges, localRanges)) { diff --git a/packages/sheets-data-validation/package.json b/packages/sheets-data-validation/package.json index d4194bc340..170d76a6a8 100644 --- a/packages/sheets-data-validation/package.json +++ b/packages/sheets-data-validation/package.json @@ -79,7 +79,7 @@ "@univerjs-infra/shared": "workspace:*", "less": "^4.2.2", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-data-validation/src/facade/f-univer.ts b/packages/sheets-data-validation/src/facade/f-univer.ts index d954c8566a..057f4cb13b 100644 --- a/packages/sheets-data-validation/src/facade/f-univer.ts +++ b/packages/sheets-data-validation/src/facade/f-univer.ts @@ -23,14 +23,7 @@ import type { IUpdateSheetDataValidationRangeCommandParams, IUpdateSheetDataValidationSettingCommandParams, } from '@univerjs/sheets-data-validation'; -import type { IBeforeSheetDataValidationAddEvent, - IBeforeSheetDataValidationCriteriaUpdateEvent, - IBeforeSheetDataValidationDeleteAllEvent, - IBeforeSheetDataValidationDeleteEvent, - IBeforeSheetDataValidationOptionsUpdateEvent, - IBeforeSheetDataValidationRangeUpdateEvent, - -} from './f-event'; +import type { IBeforeSheetDataValidationAddEvent, IBeforeSheetDataValidationCriteriaUpdateEvent, IBeforeSheetDataValidationDeleteAllEvent, IBeforeSheetDataValidationDeleteEvent, IBeforeSheetDataValidationOptionsUpdateEvent, IBeforeSheetDataValidationRangeUpdateEvent } from './f-event'; import { CanceledError, ICommandService } from '@univerjs/core'; import { FUniver } from '@univerjs/core/facade'; import { diff --git a/packages/sheets-data-validation/src/plugin.ts b/packages/sheets-data-validation/src/plugin.ts index decefce7d9..6bfb84bd80 100644 --- a/packages/sheets-data-validation/src/plugin.ts +++ b/packages/sheets-data-validation/src/plugin.ts @@ -22,7 +22,9 @@ import { IConfigService, Inject, Injector, - merge, Plugin, UniverInstanceType, + merge, + Plugin, + UniverInstanceType, } from '@univerjs/core'; import { UniverDataValidationPlugin } from '@univerjs/data-validation'; import { diff --git a/packages/sheets-drawing-ui/package.json b/packages/sheets-drawing-ui/package.json index abb430907d..a8be67b36a 100644 --- a/packages/sheets-drawing-ui/package.json +++ b/packages/sheets-drawing-ui/package.json @@ -92,7 +92,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-drawing-ui/src/basics/transform-position.ts b/packages/sheets-drawing-ui/src/basics/transform-position.ts index 7b38c50299..4163f963a8 100644 --- a/packages/sheets-drawing-ui/src/basics/transform-position.ts +++ b/packages/sheets-drawing-ui/src/basics/transform-position.ts @@ -16,13 +16,15 @@ import type { ITransformState, Nullable } from '@univerjs/core'; import type { ISheetDrawingPosition } from '@univerjs/sheets-drawing'; +import type { ISheetSelectionRenderService, SheetSkeletonManagerService } from '@univerjs/sheets-ui'; import { precisionTo } from '@univerjs/engine-render'; -import { convertPositionSheetOverGridToAbsolute, type ISheetSelectionRenderService, type SheetSkeletonManagerService } from '@univerjs/sheets-ui'; +import { convertPositionSheetOverGridToAbsolute } from '@univerjs/sheets-ui'; export function drawingPositionToTransform( position: ISheetDrawingPosition, selectionRenderService: ISheetSelectionRenderService, - sheetSkeletonManagerService: SheetSkeletonManagerService): Nullable { + sheetSkeletonManagerService: SheetSkeletonManagerService +): Nullable { const { from, to, flipY = false, flipX = false, angle = 0, skewX = 0, skewY = 0 } = position; const skeletonParam = sheetSkeletonManagerService.getCurrent(); if (skeletonParam == null) { @@ -30,7 +32,10 @@ export function drawingPositionToTransform( } const absolutePosition = convertPositionSheetOverGridToAbsolute( - skeletonParam.unitId, skeletonParam.sheetId, { from, to }, sheetSkeletonManagerService + skeletonParam.unitId, + skeletonParam.sheetId, + { from, to }, + sheetSkeletonManagerService ); let { left, top, width, height } = absolutePosition; @@ -88,7 +93,11 @@ export function drawingPositionToTransform( } return { - flipY, flipX, angle, skewX, skewY, + flipY, + flipX, + angle, + skewX, + skewY, left, top, width, @@ -127,7 +136,11 @@ export function transformToDrawingPosition(transform: ITransformState, selection }; return { - flipY, flipX, angle, skewX, skewY, + flipY, + flipX, + angle, + skewX, + skewY, from, to, }; diff --git a/packages/sheets-drawing-ui/src/commands/commands/set-drawing-arrange.command.ts b/packages/sheets-drawing-ui/src/commands/commands/set-drawing-arrange.command.ts index cb5f16a091..8da3d3e6aa 100644 --- a/packages/sheets-drawing-ui/src/commands/commands/set-drawing-arrange.command.ts +++ b/packages/sheets-drawing-ui/src/commands/commands/set-drawing-arrange.command.ts @@ -20,7 +20,8 @@ import { ArrangeTypeEnum, CommandType, ICommandService, - IUndoRedoService } from '@univerjs/core'; + IUndoRedoService, +} from '@univerjs/core'; import { DrawingApplyType, ISheetDrawingService, SetDrawingApplyMutation } from '@univerjs/sheets-drawing'; export interface ISetDrawingArrangeCommandParams extends IDrawingOrderMapParam { diff --git a/packages/sheets-drawing-ui/src/commands/commands/utils.ts b/packages/sheets-drawing-ui/src/commands/commands/utils.ts index 36ea66ed3c..6b5cebcdbe 100644 --- a/packages/sheets-drawing-ui/src/commands/commands/utils.ts +++ b/packages/sheets-drawing-ui/src/commands/commands/utils.ts @@ -14,8 +14,9 @@ * limitations under the License. */ +import type { IDrawingParam } from '@univerjs/core'; import type { IDrawingGroupUpdateParam } from '@univerjs/drawing'; -import { DrawingTypeEnum, type IDrawingParam } from '@univerjs/core'; +import { DrawingTypeEnum } from '@univerjs/core'; import { getGroupState, transformObjectOutOfGroup } from '@univerjs/engine-render'; export function ungroupToGroup(ungroupParams: IDrawingGroupUpdateParam[]) { @@ -30,7 +31,9 @@ export function ungroupToGroup(ungroupParams: IDrawingGroupUpdateParam[]) { const transform = drawing.transform || { left: 0, top: 0 }; const { unitId, subUnitId, drawingId } = drawing; return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: { ...transform, left: transform.left! - groupTransform.left, @@ -71,7 +74,9 @@ export function groupToUngroup(groupParams: IDrawingGroupUpdateParam[]) { const { unitId, subUnitId, drawingId } = object; const newTransform = transformObjectOutOfGroup(transform || {}, groupTransform, groupTransform.width || 0, groupTransform.height || 0); return { - unitId, subUnitId, drawingId, + unitId, + subUnitId, + drawingId, transform: newTransform, groupId: undefined, }; diff --git a/packages/sheets-drawing-ui/src/controllers/sheet-drawing-transform-affected.controller.ts b/packages/sheets-drawing-ui/src/controllers/sheet-drawing-transform-affected.controller.ts index 42e3b7f048..86251406bb 100644 --- a/packages/sheets-drawing-ui/src/controllers/sheet-drawing-transform-affected.controller.ts +++ b/packages/sheets-drawing-ui/src/controllers/sheet-drawing-transform-affected.controller.ts @@ -36,7 +36,10 @@ enum RangeMoveUndoType { } const UPDATE_COMMANDS = [ - InsertRowCommand.id, InsertColCommand.id, RemoveRowCommand.id, RemoveColCommand.id, + InsertRowCommand.id, + InsertColCommand.id, + RemoveRowCommand.id, + RemoveColCommand.id, DeleteRangeMoveLeftCommand.id, DeleteRangeMoveUpCommand.id, @@ -551,8 +554,7 @@ export class SheetDrawingTransformAffectedController extends Disposable implemen } } - const newTransform = drawingPositionToTransform({ ...sheetTransform }, - this._selectionRenderService, this._skeletonManagerService); + const newTransform = drawingPositionToTransform({ ...sheetTransform }, this._selectionRenderService, this._skeletonManagerService); if (newTransform != null) { updateDrawings.push({ ...drawing, @@ -1234,10 +1236,16 @@ export class SheetDrawingTransformAffectedController extends Disposable implemen const { startRow, endRow, startColumn, endColumn } = range; if (Rectangle.intersects( { - startRow, endRow, startColumn, endColumn, + startRow, + endRow, + startColumn, + endColumn, }, { - startRow: fromRow, endRow: toRow, startColumn: fromColumn, endColumn: toColumn, + startRow: fromRow, + endRow: toRow, + startColumn: fromColumn, + endColumn: toColumn, } ) || fromRow > endRow || fromColumn > endColumn) { const isPositionAnchor = anchorType === SheetDrawingAnchorType.Position; diff --git a/packages/sheets-drawing-ui/src/facade/f-over-grid-image.ts b/packages/sheets-drawing-ui/src/facade/f-over-grid-image.ts index 1188bc38dd..3a6d261973 100644 --- a/packages/sheets-drawing-ui/src/facade/f-over-grid-image.ts +++ b/packages/sheets-drawing-ui/src/facade/f-over-grid-image.ts @@ -40,7 +40,10 @@ function convertSheetImageToFOverGridImage(sheetImage: ISheetImage, sheetSkeleto const { column: fromColumn, columnOffset: fromColumnOffset, row: fromRow, rowOffset: fromRowOffset } = from; const absolutePosition = convertPositionSheetOverGridToAbsolute( - sheetImage.unitId, sheetImage.subUnitId, { from, to }, sheetSkeletonManagerService + sheetImage.unitId, + sheetImage.subUnitId, + { from, to }, + sheetSkeletonManagerService ); const { width, height } = absolutePosition; @@ -72,7 +75,13 @@ function convertFOverGridImageToSheetImage(fOverGridImage: IFOverGridImage, sele const { column: fromColumn, columnOffset: fromColumnOffset, row: fromRow, rowOffset: fromRowOffset, flipY = false, flipX = false, angle = 0, skewX = 0, skewY = 0, width, height } = fOverGridImage; const absolutePosition = convertPositionCellToSheetOverGrid( - fOverGridImage.unitId, fOverGridImage.subUnitId, { column: fromColumn, columnOffset: fromColumnOffset, row: fromRow, rowOffset: fromRowOffset }, width, height, selectionRenderService, sheetSkeletonManagerService + fOverGridImage.unitId, + fOverGridImage.subUnitId, + { column: fromColumn, columnOffset: fromColumnOffset, row: fromRow, rowOffset: fromRowOffset }, + width, + height, + selectionRenderService, + sheetSkeletonManagerService ); const { sheetTransform, transform } = absolutePosition; diff --git a/packages/sheets-drawing/package.json b/packages/sheets-drawing/package.json index 38e6f207ea..9da705a515 100644 --- a/packages/sheets-drawing/package.json +++ b/packages/sheets-drawing/package.json @@ -62,7 +62,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "@univerjs/sheets": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-filter-ui/package.json b/packages/sheets-filter-ui/package.json index 25a9b4015f..92a264c8f3 100644 --- a/packages/sheets-filter-ui/package.json +++ b/packages/sheets-filter-ui/package.json @@ -83,7 +83,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-filter-ui/src/controllers/menu.schema.ts b/packages/sheets-filter-ui/src/controllers/menu.schema.ts index ce21d3e6b7..7ac22a26d7 100644 --- a/packages/sheets-filter-ui/src/controllers/menu.schema.ts +++ b/packages/sheets-filter-ui/src/controllers/menu.schema.ts @@ -16,7 +16,8 @@ import type { MenuSchemaType } from '@univerjs/ui'; import { - ClearSheetsFilterCriteriaCommand, ReCalcSheetsFilterCommand, + ClearSheetsFilterCriteriaCommand, + ReCalcSheetsFilterCommand, SmartToggleSheetsFilterCommand, } from '@univerjs/sheets-filter'; import { RibbonStartGroup } from '@univerjs/ui'; diff --git a/packages/sheets-filter-ui/src/controllers/sheets-filter-ui-mobile.controller.ts b/packages/sheets-filter-ui/src/controllers/sheets-filter-ui-mobile.controller.ts index 2543770b82..ed654492be 100644 --- a/packages/sheets-filter-ui/src/controllers/sheets-filter-ui-mobile.controller.ts +++ b/packages/sheets-filter-ui/src/controllers/sheets-filter-ui-mobile.controller.ts @@ -14,9 +14,9 @@ * limitations under the License. */ +import type { Dependency } from '@univerjs/core'; import { Inject, RxDisposable, UniverInstanceType } from '@univerjs/core'; import { IRenderManagerService } from '@univerjs/engine-render'; -import type { Dependency } from '@univerjs/core'; import { ReCalcSheetsFilterMutation, RemoveSheetsFilterMutation, SetSheetsFilterCriteriaMutation, SetSheetsFilterRangeMutation } from '@univerjs/sheets-filter'; import { SheetsRenderService } from '@univerjs/sheets-ui'; import { SheetsFilterRenderController } from '../views/render-modules/sheets-filter.render-controller'; @@ -36,7 +36,8 @@ export class SheetsFilterUIMobileController extends RxDisposable { ].forEach((m) => this.disposeWithMe(this._sheetsRenderService.registerSkeletonChangingMutations(m.id))); this.disposeWithMe(this._renderManagerService.registerRenderModule( - UniverInstanceType.UNIVER_SHEET, [SheetsFilterRenderController] as Dependency + UniverInstanceType.UNIVER_SHEET, + [SheetsFilterRenderController] as Dependency )); } } diff --git a/packages/sheets-filter-ui/src/models/__tests__/conditions.spec.ts b/packages/sheets-filter-ui/src/models/__tests__/conditions.spec.ts index 99c0d8a3f4..4333f17a86 100644 --- a/packages/sheets-filter-ui/src/models/__tests__/conditions.spec.ts +++ b/packages/sheets-filter-ui/src/models/__tests__/conditions.spec.ts @@ -14,9 +14,9 @@ * limitations under the License. */ -import { describe, expect, it } from 'vitest'; import { BooleanNumber } from '@univerjs/core'; import { CustomFilterOperator } from '@univerjs/sheets-filter'; +import { describe, expect, it } from 'vitest'; import { FilterConditionItems } from '../conditions'; import { ExtendCustomFilterOperator } from '../extended-operators'; @@ -97,7 +97,8 @@ describe('test "FilterConditionItems"', () => { .toEqual([FilterConditionItems.TEXT_CONTAINS, { operator1: ExtendCustomFilterOperator.CONTAINS, val1: 'xxx' }]); expect(FilterConditionItems.testMappingFilterColumn({ customFilters: { customFilters: [{ val: '*xxx' }] } })) - .not.toEqual([FilterConditionItems.TEXT_CONTAINS, { operator1: ExtendCustomFilterOperator.CONTAINS, val1: 'xxx' }]); + .not + .toEqual([FilterConditionItems.TEXT_CONTAINS, { operator1: ExtendCustomFilterOperator.CONTAINS, val1: 'xxx' }]); }); it('should support default params with empty string', () => { @@ -399,8 +400,10 @@ describe('test "FilterConditionItems"', () => { }, })).toEqual([FilterConditionItems.BETWEEN, { and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '123', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '456', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '123', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '456', }]); expect(FilterConditionItems.testMappingFilterColumn({ @@ -413,8 +416,10 @@ describe('test "FilterConditionItems"', () => { }, })).toEqual([FilterConditionItems.BETWEEN, { and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '123', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '456', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '123', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '456', }]); expect(FilterConditionItems.testMappingFilterColumn({ @@ -426,16 +431,20 @@ describe('test "FilterConditionItems"', () => { }, })).not.toEqual([FilterConditionItems.BETWEEN, { and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '123', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '456', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '123', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '456', }]); }); it('should support default params with empty string', () => { expect(FilterConditionItems.BETWEEN.getDefaultFormParams()).toEqual({ and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '', }); }); @@ -472,8 +481,10 @@ describe('test "FilterConditionItems"', () => { it('should map to filter column with correct combination of two operators', () => { expect(FilterConditionItems.BETWEEN.mapToFilterColumn({ and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '123', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '456', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '123', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '456', })).toEqual({ customFilters: { and: BooleanNumber.TRUE, @@ -496,15 +507,19 @@ describe('test "FilterConditionItems"', () => { ], }, })).toEqual([FilterConditionItems.NOT_BETWEEN, { - operator1: CustomFilterOperator.LESS_THAN, val1: '123', - operator2: CustomFilterOperator.GREATER_THAN, val2: '456', + operator1: CustomFilterOperator.LESS_THAN, + val1: '123', + operator2: CustomFilterOperator.GREATER_THAN, + val2: '456', }]); }); it('should support default params with empty string', () => { expect(FilterConditionItems.NOT_BETWEEN.getDefaultFormParams()).toEqual({ - operator1: CustomFilterOperator.LESS_THAN, val1: '', - operator2: CustomFilterOperator.GREATER_THAN, val2: '', + operator1: CustomFilterOperator.LESS_THAN, + val1: '', + operator2: CustomFilterOperator.GREATER_THAN, + val2: '', }); }); @@ -535,8 +550,10 @@ describe('test "FilterConditionItems"', () => { it('should map to filter column with correct combination of two operators', () => { expect(FilterConditionItems.NOT_BETWEEN.mapToFilterColumn({ - operator1: CustomFilterOperator.GREATER_THAN, val1: '123', - operator2: CustomFilterOperator.LESS_THAN, val2: '456', + operator1: CustomFilterOperator.GREATER_THAN, + val1: '123', + operator2: CustomFilterOperator.LESS_THAN, + val2: '456', })).toEqual({ customFilters: { customFilters: [ @@ -555,15 +572,19 @@ describe('test "FilterConditionItems"', () => { { val: '123*' }, ] } })).toEqual([FilterConditionItems.CUSTOM, { and: true, - operator1: ExtendCustomFilterOperator.ENDS_WITH, val1: '123', - operator2: ExtendCustomFilterOperator.STARTS_WITH, val2: '123', + operator1: ExtendCustomFilterOperator.ENDS_WITH, + val1: '123', + operator2: ExtendCustomFilterOperator.STARTS_WITH, + val2: '123', }]); }); it('should support default params with empty string', () => { expect(FilterConditionItems.CUSTOM.getDefaultFormParams()).toEqual({ - operator1: ExtendCustomFilterOperator.NONE, val1: '', - operator2: ExtendCustomFilterOperator.NONE, val2: '', + operator1: ExtendCustomFilterOperator.NONE, + val1: '', + operator2: ExtendCustomFilterOperator.NONE, + val2: '', }); }); @@ -574,8 +595,10 @@ describe('test "FilterConditionItems"', () => { it('should map to filter column with empty string', () => { expect(FilterConditionItems.CUSTOM.mapToFilterColumn({ and: true, - operator1: ExtendCustomFilterOperator.ENDS_WITH, val1: '123', - operator2: CustomFilterOperator.GREATER_THAN, val2: '456', + operator1: ExtendCustomFilterOperator.ENDS_WITH, + val1: '123', + operator2: CustomFilterOperator.GREATER_THAN, + val2: '456', })) .toEqual({ customFilters: { and: BooleanNumber.TRUE, diff --git a/packages/sheets-filter-ui/src/models/conditions.ts b/packages/sheets-filter-ui/src/models/conditions.ts index 5650f25e64..2fc417cd7b 100644 --- a/packages/sheets-filter-ui/src/models/conditions.ts +++ b/packages/sheets-filter-ui/src/models/conditions.ts @@ -15,8 +15,8 @@ */ import type { Nullable } from '@univerjs/core'; -import { BooleanNumber } from '@univerjs/core'; import type { ICustomFilters, IFilterColumn } from '@univerjs/sheets-filter'; +import { BooleanNumber } from '@univerjs/core'; import { CustomFilterOperator } from '@univerjs/sheets-filter'; import { ExtendCustomFilterOperator, OperatorOrder } from './extended-operators'; @@ -580,8 +580,10 @@ export namespace FilterConditionItems { numOfParameters: 2, getDefaultFormParams: () => ({ - operator1: CustomFilterOperator.LESS_THAN, val1: '', - operator2: CustomFilterOperator.GREATER_THAN, val2: '', + operator1: CustomFilterOperator.LESS_THAN, + val1: '', + operator2: CustomFilterOperator.GREATER_THAN, + val2: '', }), testMappingParams: (params) => { const { and, operator1, operator2 } = params; diff --git a/packages/sheets-filter-ui/src/services/__tests__/sheets-filter-panel.service.spec.ts b/packages/sheets-filter-ui/src/services/__tests__/sheets-filter-panel.service.spec.ts index a8732e512c..4e5de8c78e 100644 --- a/packages/sheets-filter-ui/src/services/__tests__/sheets-filter-panel.service.spec.ts +++ b/packages/sheets-filter-ui/src/services/__tests__/sheets-filter-panel.service.spec.ts @@ -174,8 +174,10 @@ describe('test "SheetsFilterPanelService"', () => { expect(filterByModel.conditionItem.operator).toBe(FilterConditionItems.BETWEEN.operator); expect(filterByModel.filterConditionFormParams).toEqual({ and: true, - operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, val1: '', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '', + operator1: CustomFilterOperator.GREATER_THAN_OR_EQUAL, + val1: '', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '', } as IFilterConditionFormParams); filterByModel.onPrimaryConditionChange(ExtendCustomFilterOperator.ENDS_WITH); @@ -211,8 +213,10 @@ describe('test "SheetsFilterPanelService"', () => { expect(filterByModel.conditionItem.operator).toBe(FilterConditionItems.CUSTOM.operator); expect(filterByModel.filterConditionFormParams).toEqual({ and: true, - operator1: ExtendCustomFilterOperator.ENDS_WITH, val1: '', - operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, val2: '', + operator1: ExtendCustomFilterOperator.ENDS_WITH, + val1: '', + operator2: CustomFilterOperator.LESS_THAN_OR_EQUAL, + val2: '', } as IFilterConditionFormParams); }); }); diff --git a/packages/sheets-filter-ui/src/views/components/SheetsFilterPanel.tsx b/packages/sheets-filter-ui/src/views/components/SheetsFilterPanel.tsx index 872ad8e5cd..4239133b60 100644 --- a/packages/sheets-filter-ui/src/views/components/SheetsFilterPanel.tsx +++ b/packages/sheets-filter-ui/src/views/components/SheetsFilterPanel.tsx @@ -110,6 +110,5 @@ function useFilterByOptions(localeService: LocaleService) { return useMemo(() => [ { label: localeService.t('sheets-filter.panel.by-values'), value: FilterBy.VALUES }, { label: localeService.t('sheets-filter.panel.by-conditions'), value: FilterBy.CONDITIONS }, - ], - [locale, localeService]); + ], [locale, localeService]); } diff --git a/packages/sheets-filter-ui/src/views/render-modules/sheets-filter.render-controller.ts b/packages/sheets-filter-ui/src/views/render-modules/sheets-filter.render-controller.ts index dd3eace34b..bad954a418 100644 --- a/packages/sheets-filter-ui/src/views/render-modules/sheets-filter.render-controller.ts +++ b/packages/sheets-filter-ui/src/views/render-modules/sheets-filter.render-controller.ts @@ -111,12 +111,16 @@ export class SheetsFilterRenderController extends RxDisposable implements IRende const { scene } = this._context; const { rowHeaderWidth, columnHeaderHeight } = skeleton; const filterRangeShape = this._filterRangeShape = new SelectionControl( - scene, DEFAULT_Z_INDEX, this._themeService, { + scene, + DEFAULT_Z_INDEX, + this._themeService, + { rowHeaderWidth, columnHeaderHeight, enableAutoFill: false, highlightHeader: false, - }); + } + ); const selectionWithStyle = { range, primary: null, diff --git a/packages/sheets-filter/package.json b/packages/sheets-filter/package.json index bd1e6ff705..1e3ab91852 100644 --- a/packages/sheets-filter/package.json +++ b/packages/sheets-filter/package.json @@ -71,7 +71,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-filter/src/commands/mutations/__tests__/sheets-filter.mutation.spec.ts b/packages/sheets-filter/src/commands/mutations/__tests__/sheets-filter.mutation.spec.ts index bd3e5975b5..07dd6ba15b 100644 --- a/packages/sheets-filter/src/commands/mutations/__tests__/sheets-filter.mutation.spec.ts +++ b/packages/sheets-filter/src/commands/mutations/__tests__/sheets-filter.mutation.spec.ts @@ -15,10 +15,10 @@ */ import type { IWorkbookData } from '@univerjs/core'; +import type { ISetSheetsFilterCriteriaMutationParams, ISetSheetsFilterRangeMutationParams } from '../sheets-filter.mutation'; import { ICommandService, Inject, Injector, LocaleType, Plugin, Univer, UniverInstanceType } from '@univerjs/core'; import { afterEach, describe, expect, it } from 'vitest'; import { SHEET_FILTER_SNAPSHOT_ID, SheetsFilterService } from '../../../services/sheet-filter.service'; -import type { ISetSheetsFilterCriteriaMutationParams, ISetSheetsFilterRangeMutationParams } from '../sheets-filter.mutation'; import { ReCalcSheetsFilterMutation, RemoveSheetsFilterMutation, SetSheetsFilterCriteriaMutation, SetSheetsFilterRangeMutation } from '../sheets-filter.mutation'; function testWorkbookDataFactory(): IWorkbookData { @@ -124,7 +124,8 @@ function createFilterMutationTestBed(workbookData?: IWorkbookData) { SetSheetsFilterRangeMutation, SetSheetsFilterCriteriaMutation, RemoveSheetsFilterMutation, - ReCalcSheetsFilterMutation] + ReCalcSheetsFilterMutation, + ] ).forEach((command) => commandService.registerCommand(command)); return { diff --git a/packages/sheets-filter/src/controllers/sheets-filter.controller.ts b/packages/sheets-filter/src/controllers/sheets-filter.controller.ts index 5a7ee7c245..e9e1df33ca 100644 --- a/packages/sheets-filter/src/controllers/sheets-filter.controller.ts +++ b/packages/sheets-filter/src/controllers/sheets-filter.controller.ts @@ -242,7 +242,8 @@ export class SheetsFilterController extends Disposable { redos.push({ id: SetSheetsFilterRangeMutation.id, params: setFilterRangeParams }); undos.push({ id: SetSheetsFilterRangeMutation.id, params: undoSetFilterRangeMutationParams }); return { - redos: mergeSetFilterCriteria(redos), undos: mergeSetFilterCriteria(undos), + redos: mergeSetFilterCriteria(redos), + undos: mergeSetFilterCriteria(undos), }; } @@ -336,13 +337,15 @@ export class SheetsFilterController extends Disposable { return { undos: [{ id: SetSheetsFilterRangeMutation.id, params: { range: filterRange, unitId, subUnitId } }], redos: [{ - id: SetSheetsFilterRangeMutation.id, params: { + id: SetSheetsFilterRangeMutation.id, + params: { range: { ...filterRange, startRow: startRow - (removeEndRow - removeStartRow + 1), endRow: endRow - (removeEndRow - removeStartRow + 1), }, - unitId, subUnitId, + unitId, + subUnitId, }, }], }; @@ -691,7 +694,9 @@ export class SheetsFilterController extends Disposable { handler: (filtered, rowLocation) => { if (filtered) return true; return this._sheetsFilterService.getFilterModel( - rowLocation.unitId, rowLocation.subUnitId)?.isRowFiltered(rowLocation.row) ?? false; + rowLocation.unitId, + rowLocation.subUnitId + )?.isRowFiltered(rowLocation.row) ?? false; }, })); } diff --git a/packages/sheets-filter/src/models/__tests__/filter-interceptor.spec.ts b/packages/sheets-filter/src/models/__tests__/filter-interceptor.spec.ts index 687d1c8b4f..7f8886a588 100644 --- a/packages/sheets-filter/src/models/__tests__/filter-interceptor.spec.ts +++ b/packages/sheets-filter/src/models/__tests__/filter-interceptor.spec.ts @@ -43,9 +43,16 @@ describe('Test "Filter Interceptor"', () => { describe('Test "insert Command"', () => { it('insert col command, in filter range', async () => { const insertColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 2, endColumn: 2, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 2, + endColumn: 2, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + direction: Direction.RIGHT, } as IInsertColCommandParams; await commandService.executeCommand(InsertColCommand.id, insertColCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 1, endColumn: 3, startRow: 1, endRow: 2 }); @@ -54,9 +61,16 @@ describe('Test "Filter Interceptor"', () => { it('insert col command, before filter range', async () => { const insertColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 0, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 0, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + direction: Direction.RIGHT, } as IInsertColCommandParams; await commandService.executeCommand(InsertColCommand.id, insertColCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 2, endColumn: 3, startRow: 1, endRow: 2 }); @@ -65,9 +79,16 @@ describe('Test "Filter Interceptor"', () => { it('insert row command, in filter range', async () => { const insertRowCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 3, startRow: 2, endRow: 2, type: RANGE_TYPE.ROW, - }, direction: Direction.DOWN, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 3, + startRow: 2, + endRow: 2, + type: RANGE_TYPE.ROW, + }, + direction: Direction.DOWN, } as IInsertRowCommandParams; await commandService.executeCommand(InsertRowCommand.id, insertRowCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 1, endColumn: 2, startRow: 1, endRow: 3 }); @@ -76,9 +97,16 @@ describe('Test "Filter Interceptor"', () => { it('insert row command, before filter range', async () => { const insertRowCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 3, startRow: 0, endRow: 0, type: RANGE_TYPE.ROW, - }, direction: Direction.DOWN, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 3, + startRow: 0, + endRow: 0, + type: RANGE_TYPE.ROW, + }, + direction: Direction.DOWN, } as IInsertRowCommandParams; await commandService.executeCommand(InsertRowCommand.id, insertRowCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 1, endColumn: 2, startRow: 2, endRow: 3 }); @@ -89,9 +117,16 @@ describe('Test "Filter Interceptor"', () => { describe('Test "remove Command"', () => { it('remove col command, in filter range', async () => { const removeColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 1, endColumn: 1, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 1, + endColumn: 1, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + direction: Direction.RIGHT, } as IRemoveRowColCommandParams; await commandService.executeCommand(RemoveColCommand.id, removeColCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 1, endColumn: 1, startRow: 1, endRow: 2 }); @@ -99,9 +134,16 @@ describe('Test "Filter Interceptor"', () => { }); it('remove col command, before filter range', async () => { const removeColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 0, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 0, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + direction: Direction.RIGHT, } as IRemoveRowColCommandParams; await commandService.executeCommand(RemoveColCommand.id, removeColCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 0, endColumn: 1, startRow: 1, endRow: 2 }); @@ -110,9 +152,16 @@ describe('Test "Filter Interceptor"', () => { it('remove row command, in filter range', async () => { const removeRowCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 3, startRow: 1, endRow: 1, type: RANGE_TYPE.ROW, - }, direction: Direction.DOWN, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 3, + startRow: 1, + endRow: 1, + type: RANGE_TYPE.ROW, + }, + direction: Direction.DOWN, } as IRemoveRowColCommandParams; await commandService.executeCommand(RemoveRowCommand.id, removeRowCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')).toBe(null); @@ -120,9 +169,16 @@ describe('Test "Filter Interceptor"', () => { it('remove row command, before filter range', async () => { const removeRowCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', range: { - startColumn: 0, endColumn: 3, startRow: 0, endRow: 0, type: RANGE_TYPE.ROW, - }, direction: Direction.DOWN, + unitId: 'workbookId', + subUnitId: 'worksheetId', + range: { + startColumn: 0, + endColumn: 3, + startRow: 0, + endRow: 0, + type: RANGE_TYPE.ROW, + }, + direction: Direction.DOWN, } as IRemoveRowColCommandParams; await commandService.executeCommand(RemoveRowCommand.id, removeRowCommandParams); expect(sheetsFilterService.getFilterModel('workbookId', 'worksheetId')!.getRange()).toStrictEqual({ startColumn: 1, endColumn: 2, startRow: 0, endRow: 1 }); @@ -133,9 +189,17 @@ describe('Test "Filter Interceptor"', () => { describe('Test "move Command"', () => { it('move col command, filter column move to left', async () => { const moveColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', fromRange: { - startColumn: 1, endColumn: 1, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, toRange: { startColumn: 3, endColumn: 3, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + fromRange: { + startColumn: 1, + endColumn: 1, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + toRange: { startColumn: 3, endColumn: 3, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN }, + direction: Direction.RIGHT, } as IMoveColsCommandParams; await commandService.executeCommand(SetSelectionsOperation.id, { unitId: 'workbookId', subUnitId: 'worksheetId', selections: [{ style: null, range: { startColumn: 1, endColumn: 1, startRow: 0, endRow: 4, rangeType: RANGE_TYPE.COLUMN }, primary: {} }] } as ISetSelectionsOperationParams); await commandService.executeCommand(MoveColsCommand.id, moveColCommandParams); @@ -144,9 +208,17 @@ describe('Test "Filter Interceptor"', () => { }); it('move col command, filter column move to right', async () => { const moveColCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', fromRange: { - startColumn: 2, endColumn: 2, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN, - }, toRange: { startColumn: 4, endColumn: 4, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + fromRange: { + startColumn: 2, + endColumn: 2, + startRow: 0, + endRow: 4, + type: RANGE_TYPE.COLUMN, + }, + toRange: { startColumn: 4, endColumn: 4, startRow: 0, endRow: 4, type: RANGE_TYPE.COLUMN }, + direction: Direction.RIGHT, } as IMoveColsCommandParams; await commandService.executeCommand(SetSelectionsOperation.id, { unitId: 'workbookId', subUnitId: 'worksheetId', selections: [{ style: null, range: { startColumn: 2, endColumn: 2, startRow: 0, endRow: 4, rangeType: RANGE_TYPE.COLUMN }, primary: {} }] } as ISetSelectionsOperationParams); await commandService.executeCommand(MoveColsCommand.id, moveColCommandParams); @@ -156,9 +228,17 @@ describe('Test "Filter Interceptor"', () => { it('move row command', async () => { const moveRowCommandParams = { - unitId: 'workbookId', subUnitId: 'worksheetId', fromRange: { - startColumn: 0, endColumn: 3, startRow: 2, endRow: 2, type: RANGE_TYPE.ROW, - }, toRange: { startColumn: 0, endColumn: 3, startRow: 4, endRow: 4, type: RANGE_TYPE.ROW }, direction: Direction.RIGHT, + unitId: 'workbookId', + subUnitId: 'worksheetId', + fromRange: { + startColumn: 0, + endColumn: 3, + startRow: 2, + endRow: 2, + type: RANGE_TYPE.ROW, + }, + toRange: { startColumn: 0, endColumn: 3, startRow: 4, endRow: 4, type: RANGE_TYPE.ROW }, + direction: Direction.RIGHT, } as IMoveRowsCommandParams; await commandService.executeCommand(SetSelectionsOperation.id, { unitId: 'workbookId', subUnitId: 'worksheetId', selections: [{ style: null, range: { startColumn: 0, endColumn: 3, startRow: 2, endRow: 2, rangeType: RANGE_TYPE.ROW }, primary: {} }] } as ISetSelectionsOperationParams); await commandService.executeCommand(MoveRowsCommand.id, moveRowCommandParams); @@ -176,8 +256,7 @@ describe('Test "Filter Interceptor"', () => { }); }); -function createFilterTestUniver(dependencies?: Dependency[], workbookData?: IWorkbookData -) { +function createFilterTestUniver(dependencies?: Dependency[], workbookData?: IWorkbookData) { const univer = new Univer(); const injector = univer.__getInjector(); const get = injector.get.bind(injector); diff --git a/packages/sheets-filter/src/models/__tests__/filter-model.spec.ts b/packages/sheets-filter/src/models/__tests__/filter-model.spec.ts index 41cba61d5c..352536be58 100644 --- a/packages/sheets-filter/src/models/__tests__/filter-model.spec.ts +++ b/packages/sheets-filter/src/models/__tests__/filter-model.spec.ts @@ -14,9 +14,9 @@ * limitations under the License. */ -import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import type { Injector, IWorkbookData, Workbook } from '@univerjs/core'; import { ILogService, IUniverInstanceService, LocaleType, LogLevel, Univer, UniverInstanceType } from '@univerjs/core'; +import { afterEach, beforeEach, describe, expect, it } from 'vitest'; import { FilterColumn, generateFilterFn } from '../filter-model'; import { CustomFilterOperator } from '../types'; @@ -26,7 +26,8 @@ describe('Test filter model and related utils', () => { it('should AND work', () => { // equivalent to "between" const fn = generateFilterFn({ - colId: 0, customFilters: { + colId: 0, + customFilters: { and: 1, customFilters: [ { operator: CustomFilterOperator.LESS_THAN_OR_EQUAL, val: 456 }, @@ -45,7 +46,8 @@ describe('Test filter model and related utils', () => { it('should OR work', () => { // equivalent to "notBetween" const fn = generateFilterFn({ - colId: 0, customFilters: { + colId: 0, + customFilters: { customFilters: [ { operator: CustomFilterOperator.LESS_THAN, val: 123 }, { operator: CustomFilterOperator.GREATER_THAN, val: 456 }, diff --git a/packages/sheets-filter/src/services/sheet-filter.service.ts b/packages/sheets-filter/src/services/sheet-filter.service.ts index dd5e2cc332..7f1008db8f 100644 --- a/packages/sheets-filter/src/services/sheet-filter.service.ts +++ b/packages/sheets-filter/src/services/sheet-filter.service.ts @@ -17,7 +17,8 @@ import type { Nullable, Workbook } from '@univerjs/core'; import type { IAutoFilter } from '../models/types'; import { - CommandType, Disposable, + CommandType, + Disposable, fromCallback, ICommandService, IResourceManagerService, @@ -145,7 +146,8 @@ export class SheetsFilterService extends Disposable { // source2: activate sheet changes this._univerInstanceService.getCurrentTypeOfUnit$(UniverInstanceType.UNIVER_SHEET) .pipe(switchMap((workbook) => workbook?.activeSheet$ ?? of(null))) - ).subscribe(() => this._updateActiveFilterModel())); + ).subscribe(() => this._updateActiveFilterModel()) + ); } private _serializeAutoFiltersForUnit(unitId: string): string { diff --git a/packages/sheets-find-replace/package.json b/packages/sheets-find-replace/package.json index f951375f38..f974b97833 100644 --- a/packages/sheets-find-replace/package.json +++ b/packages/sheets-find-replace/package.json @@ -82,7 +82,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-find-replace/src/controllers/sheet-find-replace.controller.ts b/packages/sheets-find-replace/src/controllers/sheet-find-replace.controller.ts index aa43524167..4f22538ac3 100644 --- a/packages/sheets-find-replace/src/controllers/sheet-find-replace.controller.ts +++ b/packages/sheets-find-replace/src/controllers/sheet-find-replace.controller.ts @@ -430,13 +430,12 @@ export class SheetFindModel extends FindModel { const sortFn = findDirection === FindDirection.ROW ? isBehindPositionWithRowPriority : isBehindPositionWithColumnPriority; const dedupeSet = new Set(); const finds = selections - .map((selection) => this._findInRange(worksheet, query, selection.range, unitId, - (row, col) => { - const key = `${row}-${col}`; - if (dedupeSet.has(key)) return true; - dedupeSet.add(key); - return false; - }).results) + .map((selection) => this._findInRange(worksheet, query, selection.range, unitId, (row, col) => { + const key = `${row}-${col}`; + if (dedupeSet.has(key)) return true; + dedupeSet.add(key); + return false; + }).results) .flat() .sort((a, b) => sortFn(a.range.range, b.range.range) ? -1 : 1); @@ -547,10 +546,7 @@ export class SheetFindModel extends FindModel { private _focusMatch(match: ISheetCellMatch): void { const subUnitId = match.range.subUnitId; if (subUnitId !== this._workbook.getActiveSheet()?.getSheetId()) { - this._commandService.executeCommand(SetWorksheetActivateCommand.id, - { unitId: this._workbook.getUnitId(), subUnitId } as ISetWorksheetActivateCommandParams, - { fromFindReplace: true } - ); + this._commandService.executeCommand(SetWorksheetActivateCommand.id, { unitId: this._workbook.getUnitId(), subUnitId } as ISetWorksheetActivateCommandParams, { fromFindReplace: true }); } this._commandService.executeCommand( diff --git a/packages/sheets-formula-ui/package.json b/packages/sheets-formula-ui/package.json index ec4c314daf..d276cff047 100644 --- a/packages/sheets-formula-ui/package.json +++ b/packages/sheets-formula-ui/package.json @@ -92,7 +92,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-formula-ui/src/controllers/__tests__/formula-auto-fill.controller.spec.ts b/packages/sheets-formula-ui/src/controllers/__tests__/formula-auto-fill.controller.spec.ts index f720aea209..caaee676a8 100644 --- a/packages/sheets-formula-ui/src/controllers/__tests__/formula-auto-fill.controller.spec.ts +++ b/packages/sheets-formula-ui/src/controllers/__tests__/formula-auto-fill.controller.spec.ts @@ -176,22 +176,20 @@ describe('Test auto fill with formula', () => { expect(B2?.f).toStrictEqual('=SUM(A2)'); expect(B2?.si).toEqual(B3?.si); - commandService.executeCommand(AutoFillCommand.id, - { - sourceRange: { - startColumn: 1, - endColumn: 1, - startRow: 0, - endRow: 2, - }, - targetRange: { - startColumn: 1, - endColumn: 3, - startRow: 0, - endRow: 2, - }, - } - ); + commandService.executeCommand(AutoFillCommand.id, { + sourceRange: { + startColumn: 1, + endColumn: 1, + startRow: 0, + endRow: 2, + }, + targetRange: { + startColumn: 1, + endColumn: 3, + startRow: 0, + endRow: 2, + }, + }); // B1:D3 values will be in the following format // [ @@ -302,22 +300,20 @@ describe('Test auto fill with formula', () => { }, ]); - commandService.executeCommand(AutoFillCommand.id, - { - sourceRange: { - startColumn: 0, - endColumn: 0, - startRow: 9, - endRow: 9, - }, - targetRange: { - startColumn: 0, - endColumn: 0, - startRow: 6, - endRow: 9, - }, - } - ); + commandService.executeCommand(AutoFillCommand.id, { + sourceRange: { + startColumn: 0, + endColumn: 0, + startRow: 9, + endRow: 9, + }, + targetRange: { + startColumn: 0, + endColumn: 0, + startRow: 6, + endRow: 9, + }, + }); // B1:B3 values will be in the following format // [ @@ -370,22 +366,20 @@ describe('Test auto fill with formula', () => { }, ]); - commandService.executeCommand(AutoFillCommand.id, - { - sourceRange: { - startColumn: 0, - endColumn: 0, - startRow: 19, - endRow: 20, - }, - targetRange: { - startColumn: 0, - endColumn: 0, - startRow: 15, - endRow: 20, - }, - } - ); + commandService.executeCommand(AutoFillCommand.id, { + sourceRange: { + startColumn: 0, + endColumn: 0, + startRow: 19, + endRow: 20, + }, + targetRange: { + startColumn: 0, + endColumn: 0, + startRow: 15, + endRow: 20, + }, + }); // B1:B3 values will be in the following format // [ diff --git a/packages/sheets-formula-ui/src/controllers/formula-editor-show.controller.ts b/packages/sheets-formula-ui/src/controllers/formula-editor-show.controller.ts index 0f40268079..539a40c0a6 100644 --- a/packages/sheets-formula-ui/src/controllers/formula-editor-show.controller.ts +++ b/packages/sheets-formula-ui/src/controllers/formula-editor-show.controller.ts @@ -18,7 +18,8 @@ import type { ICellDataForSheetInterceptor, ICommandInfo, IObjectMatrixPrimitive import type { IRenderContext, IRenderModule, SpreadsheetSkeleton } from '@univerjs/engine-render'; import type { ISelectionWithStyle, ISetWorksheetRowAutoHeightMutationParams } from '@univerjs/sheets'; import { - ColorKit, Disposable, + ColorKit, + Disposable, ICommandService, ILogService, Inject, @@ -95,60 +96,58 @@ export class FormulaEditorShowController extends Disposable implements IRenderMo private _initInterceptorEditorStart(): void { this.disposeWithMe( toDisposable( - this._sheetInterceptorService.writeCellInterceptor.intercept(BEFORE_CELL_EDIT, - { - handler: (value, context, next) => { - const { row, col, unitId, subUnitId, worksheet } = context; - const arrayFormulaMatrixRange = this._formulaDataModel.getArrayFormulaRange(); + this._sheetInterceptorService.writeCellInterceptor.intercept(BEFORE_CELL_EDIT, { + handler: (value, context, next) => { + const { row, col, unitId, subUnitId, worksheet } = context; + const arrayFormulaMatrixRange = this._formulaDataModel.getArrayFormulaRange(); - const arrayFormulaMatrixCell = this._formulaDataModel.getArrayFormulaCellData(); + const arrayFormulaMatrixCell = this._formulaDataModel.getArrayFormulaCellData(); - this._removeArrayFormulaRangeShape(); + this._removeArrayFormulaRangeShape(); - if (value == null) { - return next(value); - } + if (value == null) { + return next(value); + } - let cellInfo: Nullable = null; + let cellInfo: Nullable = null; - const formulaString = this._formulaDataModel.getFormulaStringByCell(row, col, subUnitId, unitId); + const formulaString = this._formulaDataModel.getFormulaStringByCell(row, col, subUnitId, unitId); - if (formulaString !== null) { - cellInfo = { f: formulaString }; - } + if (formulaString !== null) { + cellInfo = { f: formulaString }; + } /** * If the display conditions for the array formula are not met, return the range directly. */ - if ( - value.v != null && + if ( + value.v != null && value.v !== '' && arrayFormulaMatrixCell[unitId]?.[subUnitId]?.[row]?.[col] == null - ) { - if (cellInfo) { - return { ...value, ...cellInfo }; - } - - return next(value); - } - - /** - * Mark the array formula for special display in subsequent processing - */ - const matrixRange = arrayFormulaMatrixRange?.[unitId]?.[subUnitId]; - if (matrixRange != null) { - // For cells other than the upper left corner, the cellInfo information will be updated - cellInfo = this._displayArrayFormulaRangeShape(matrixRange, row, col, unitId, subUnitId, worksheet, cellInfo); - } - + ) { if (cellInfo) { return { ...value, ...cellInfo }; } return next(value); - }, - } - ) + } + + /** + * Mark the array formula for special display in subsequent processing + */ + const matrixRange = arrayFormulaMatrixRange?.[unitId]?.[subUnitId]; + if (matrixRange != null) { + // For cells other than the upper left corner, the cellInfo information will be updated + cellInfo = this._displayArrayFormulaRangeShape(matrixRange, row, col, unitId, subUnitId, worksheet, cellInfo); + } + + if (cellInfo) { + return { ...value, ...cellInfo }; + } + + return next(value); + }, + }) ) ); } diff --git a/packages/sheets-formula-ui/src/locale/function-list/date/zh-TW.ts b/packages/sheets-formula-ui/src/locale/function-list/date/zh-TW.ts index 78c426e02d..79bfee2904 100644 --- a/packages/sheets-formula-ui/src/locale/function-list/date/zh-TW.ts +++ b/packages/sheets-formula-ui/src/locale/function-list/date/zh-TW.ts @@ -305,7 +305,8 @@ export default { }, WEEKDAY: { description: '將序號轉換為星期日期', - abstract: '將序號轉換為星期日期', links: [ + abstract: '將序號轉換為星期日期', + links: [ { title: '教導', url: 'https://support.microsoft.com/zh-tw/office/weekday-%E5%87%BD%E6%95%B0-60e44483-2ed1-439f-8bd0-e404c190949a', diff --git a/packages/sheets-formula-ui/src/locale/function-list/information/zh-TW.ts b/packages/sheets-formula-ui/src/locale/function-list/information/zh-TW.ts index 1e20e64d08..76c33d1463 100644 --- a/packages/sheets-formula-ui/src/locale/function-list/information/zh-TW.ts +++ b/packages/sheets-formula-ui/src/locale/function-list/information/zh-TW.ts @@ -197,7 +197,8 @@ export default { { title: '教導', url: 'https://support.microsoft.com/zh-tw/office/is-%E5%87%BD%E6%95%B0-0f2d7971-6019-40a0-a171-f2d869135665', - }], + }, + ], functionParameter: { value: { name: '值', detail: '指的是要測試的值。參數值可以是空白(空白儲存格)、錯誤值、邏輯值、文字、數字、參考值,或引用要測試的以上任意值的名稱。' }, }, diff --git a/packages/sheets-formula-ui/src/locale/function-list/statistical/zh-TW.ts b/packages/sheets-formula-ui/src/locale/function-list/statistical/zh-TW.ts index 12fec11d77..4fb54bd077 100644 --- a/packages/sheets-formula-ui/src/locale/function-list/statistical/zh-TW.ts +++ b/packages/sheets-formula-ui/src/locale/function-list/statistical/zh-TW.ts @@ -327,7 +327,8 @@ export default { value1: { name: '值 1', detail: '要計算其中數字的數量的第一項、單元格引用或區域。 ', - }, value2: { + }, + value2: { name: '值 2', detail: '要計算其中數字的個數的其他項目、儲存格參考或區域,最多可包含 255 個。 ', }, diff --git a/packages/sheets-formula-ui/src/locale/function-list/text/zh-TW.ts b/packages/sheets-formula-ui/src/locale/function-list/text/zh-TW.ts index 469a1ef875..4de112f76c 100644 --- a/packages/sheets-formula-ui/src/locale/function-list/text/zh-TW.ts +++ b/packages/sheets-formula-ui/src/locale/function-list/text/zh-TW.ts @@ -297,7 +297,8 @@ export default { { title: '教導', url: 'https://support.microsoft.com/zh-tw/office/mid-midb-%E5%87%BD%E6%95%B0-d5f9e25c-d7d6-472e-b568-4ecb12433028', - }], + }, + ], functionParameter: { text: { name: '文字', detail: '包含想擷取之字元的文字字串。' }, startNum: { name: '開始位置', detail: '要在文字中擷取之第一個字元的位置。' }, diff --git a/packages/sheets-formula/package.json b/packages/sheets-formula/package.json index 9d0461d865..d2986bb126 100644 --- a/packages/sheets-formula/package.json +++ b/packages/sheets-formula/package.json @@ -81,7 +81,7 @@ "@univerjs-infra/shared": "workspace:*", "@univerjs/docs": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-formula/src/controllers/update-formula.controller.ts b/packages/sheets-formula/src/controllers/update-formula.controller.ts index b79a115cc6..dfe782f2e1 100644 --- a/packages/sheets-formula/src/controllers/update-formula.controller.ts +++ b/packages/sheets-formula/src/controllers/update-formula.controller.ts @@ -44,19 +44,7 @@ import { UniverInstanceType, } from '@univerjs/core'; -import { deserializeRangeWithSheetWithCache, - ErrorType, - FormulaDataModel, - generateStringWithSequence, - IDefinedNamesService, - initSheetFormulaData, - LexerTreeBuilder, - sequenceNodeType, - serializeRangeToRefString, - SetArrayFormulaDataMutation, - SetFormulaCalculationStartMutation, - SetFormulaDataMutation, -} from '@univerjs/engine-formula'; +import { deserializeRangeWithSheetWithCache, ErrorType, FormulaDataModel, generateStringWithSequence, IDefinedNamesService, initSheetFormulaData, LexerTreeBuilder, sequenceNodeType, serializeRangeToRefString, SetArrayFormulaDataMutation, SetFormulaCalculationStartMutation, SetFormulaDataMutation } from '@univerjs/engine-formula'; import { ClearSelectionFormatCommand, InsertSheetMutation, diff --git a/packages/sheets-formula/src/controllers/utils/ref-range-formula.ts b/packages/sheets-formula/src/controllers/utils/ref-range-formula.ts index 7105696056..9dfde64493 100644 --- a/packages/sheets-formula/src/controllers/utils/ref-range-formula.ts +++ b/packages/sheets-formula/src/controllers/utils/ref-range-formula.ts @@ -15,9 +15,10 @@ */ import type { ICellData, IMutationInfo, IObjectMatrixPrimitiveType, IRange, Nullable } from '@univerjs/core'; +import type { IFormulaData, IFormulaDataItem, IRangeChange, ISequenceNode } from '@univerjs/engine-formula'; import type { ISetRangeValuesMutationParams } from '@univerjs/sheets'; import { cellToRange, Direction, isFormulaId, isFormulaString, ObjectMatrix, Rectangle, Tools } from '@univerjs/core'; -import { deserializeRangeWithSheetWithCache, type IFormulaData, type IFormulaDataItem, type IRangeChange, type ISequenceNode, sequenceNodeType, serializeRangeToRefString } from '@univerjs/engine-formula'; +import { deserializeRangeWithSheetWithCache, sequenceNodeType, serializeRangeToRefString } from '@univerjs/engine-formula'; import { EffectRefRangId, handleDeleteRangeMoveLeft, handleDeleteRangeMoveUp, handleInsertCol, handleInsertRangeMoveDown, handleInsertRangeMoveRight, handleInsertRow, handleIRemoveCol, handleIRemoveRow, handleMoveCols, handleMoveRange, handleMoveRows, runRefRangeMutations, SetRangeValuesMutation } from '@univerjs/sheets'; import { checkFormulaDataNull } from './offset-formula-data'; @@ -58,9 +59,7 @@ const formulaReferenceSheetList = [ FormulaReferenceMoveType.RemoveDefinedName, ]; -export function getFormulaReferenceMoveUndoRedo(oldFormulaData: IFormulaData, - newFormulaData: IFormulaData, - formulaReferenceMoveParam: IFormulaReferenceMoveParam) { +export function getFormulaReferenceMoveUndoRedo(oldFormulaData: IFormulaData, newFormulaData: IFormulaData, formulaReferenceMoveParam: IFormulaReferenceMoveParam) { const { type } = formulaReferenceMoveParam; if (formulaReferenceSheetList.includes(type)) { @@ -70,8 +69,7 @@ export function getFormulaReferenceMoveUndoRedo(oldFormulaData: IFormulaData, } } -export function getFormulaReferenceSheet(oldFormulaData: IFormulaData, - newFormulaData: IFormulaData) { +export function getFormulaReferenceSheet(oldFormulaData: IFormulaData, newFormulaData: IFormulaData) { const undos: IMutationInfo[] = []; const redos: IMutationInfo[] = []; @@ -145,9 +143,7 @@ export function getFormulaReferenceSheet(oldFormulaData: IFormulaData, }; } -export function getFormulaReferenceRange(oldFormulaData: IFormulaData, - newFormulaData: IFormulaData, - formulaReferenceMoveParam: IFormulaReferenceMoveParam) { +export function getFormulaReferenceRange(oldFormulaData: IFormulaData, newFormulaData: IFormulaData, formulaReferenceMoveParam: IFormulaReferenceMoveParam) { const { redoFormulaData, undoFormulaData } = refRangeFormula(oldFormulaData, newFormulaData, formulaReferenceMoveParam); // If the formula data is the same, no operation is required @@ -208,9 +204,7 @@ export function getFormulaReferenceRange(oldFormulaData: IFormulaData, * @param formulaReferenceMoveParam * @returns */ -export function refRangeFormula(oldFormulaData: IFormulaData, - newFormulaData: IFormulaData, - formulaReferenceMoveParam: IFormulaReferenceMoveParam) { +export function refRangeFormula(oldFormulaData: IFormulaData, newFormulaData: IFormulaData, formulaReferenceMoveParam: IFormulaReferenceMoveParam) { const redoFormulaData: Record>>> = {}; const undoFormulaData: Record>>> = {}; diff --git a/packages/sheets-formula/src/services/register-other-formula.service.ts b/packages/sheets-formula/src/services/register-other-formula.service.ts index 00adaf6b12..443ae3c0bd 100644 --- a/packages/sheets-formula/src/services/register-other-formula.service.ts +++ b/packages/sheets-formula/src/services/register-other-formula.service.ts @@ -113,7 +113,8 @@ export class RegisterOtherFormulaService extends Disposable { this._commandService.executeCommand(SetOtherFormulaMutation.id, params).then(() => { this._commandService.executeCommand( OtherFormulaMarkDirty.id, - { [unitId]: { [subUnitId]: { [formulaId]: true } } }); + { [unitId]: { [subUnitId]: { [formulaId]: true } } } + ); }); }; diff --git a/packages/sheets-graphics/package.json b/packages/sheets-graphics/package.json index 51952a73ba..99b8e97bd3 100644 --- a/packages/sheets-graphics/package.json +++ b/packages/sheets-graphics/package.json @@ -61,7 +61,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-hyper-link-ui/package.json b/packages/sheets-hyper-link-ui/package.json index d82e84aafd..d0691947ad 100644 --- a/packages/sheets-hyper-link-ui/package.json +++ b/packages/sheets-hyper-link-ui/package.json @@ -94,7 +94,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-hyper-link/package.json b/packages/sheets-hyper-link/package.json index 4da25c1da4..7b50f74848 100644 --- a/packages/sheets-hyper-link/package.json +++ b/packages/sheets-hyper-link/package.json @@ -74,7 +74,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-hyper-link/src/controllers/ref-range.controller.ts b/packages/sheets-hyper-link/src/controllers/ref-range.controller.ts index e8993290ba..e1d81c09f1 100644 --- a/packages/sheets-hyper-link/src/controllers/ref-range.controller.ts +++ b/packages/sheets-hyper-link/src/controllers/ref-range.controller.ts @@ -133,12 +133,10 @@ export class SheetsHyperLinkRefRangeController extends Disposable { startRow: link.row, endRow: link.row, }; - this._watchDisposableMap.set(id, - this._refRangeService.watchRange(unitId, subUnitId, oldRange, (before, after) => { - const { redos } = this._handlePositionChange(unitId, subUnitId, link, after, true); - sequenceExecuteAsync(redos, this._commandService, { onlyLocal: true }); - }, true) - ); + this._watchDisposableMap.set(id, this._refRangeService.watchRange(unitId, subUnitId, oldRange, (before, after) => { + const { redos } = this._handlePositionChange(unitId, subUnitId, link, after, true); + sequenceExecuteAsync(redos, this._commandService, { onlyLocal: true }); + }, true)); } private _unregisterPosition(id: string) { diff --git a/packages/sheets-hyper-link/src/controllers/rich-text-ref-range.controller.ts b/packages/sheets-hyper-link/src/controllers/rich-text-ref-range.controller.ts index 343f996222..7573609935 100644 --- a/packages/sheets-hyper-link/src/controllers/rich-text-ref-range.controller.ts +++ b/packages/sheets-hyper-link/src/controllers/rich-text-ref-range.controller.ts @@ -139,7 +139,8 @@ export class SheetsHyperLinkRichTextRefRangeController extends Disposable { }, worksheet.getUnitId(), worksheet.getSheetId() - )); + ) + ); } } }); diff --git a/packages/sheets-numfmt-ui/package.json b/packages/sheets-numfmt-ui/package.json index 35015873e0..29ff9f9cbf 100644 --- a/packages/sheets-numfmt-ui/package.json +++ b/packages/sheets-numfmt-ui/package.json @@ -86,7 +86,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-numfmt-ui/src/controllers/numfmt.editor.controller.ts b/packages/sheets-numfmt-ui/src/controllers/numfmt.editor.controller.ts index 032b0a0256..083e679beb 100644 --- a/packages/sheets-numfmt-ui/src/controllers/numfmt.editor.controller.ts +++ b/packages/sheets-numfmt-ui/src/controllers/numfmt.editor.controller.ts @@ -95,40 +95,38 @@ export class NumfmtEditorController extends Disposable { this.disposeWithMe( toDisposable( - this._sheetInterceptorService.writeCellInterceptor.intercept(BEFORE_CELL_EDIT, - { - handler: (value, context, next) => { - const row = context.row; - const col = context.col; - const numfmtCell = this._numfmtService.getValue( - context.unitId, - context.subUnitId, - row, - col - ); - if (numfmtCell) { - const type = getPatternType(numfmtCell.pattern); - switch (type) { - case 'scientific': - case 'currency': - case 'grouped': - case 'number': { - const cell = context.worksheet.getCellRaw(row, col); - return next && next(cell); - } - case 'percent': - case 'date': - case 'time': - case 'datetime': - default: { - return next && next(value); - } + this._sheetInterceptorService.writeCellInterceptor.intercept(BEFORE_CELL_EDIT, { + handler: (value, context, next) => { + const row = context.row; + const col = context.col; + const numfmtCell = this._numfmtService.getValue( + context.unitId, + context.subUnitId, + row, + col + ); + if (numfmtCell) { + const type = getPatternType(numfmtCell.pattern); + switch (type) { + case 'scientific': + case 'currency': + case 'grouped': + case 'number': { + const cell = context.worksheet.getCellRaw(row, col); + return next && next(cell); + } + case 'percent': + case 'date': + case 'time': + case 'datetime': + default: { + return next && next(value); } } - return next(value); - }, - } - ) + } + return next(value); + }, + }) ) ); } @@ -142,21 +140,20 @@ export class NumfmtEditorController extends Disposable { private _initInterceptorEditorEnd() { this.disposeWithMe( toDisposable( - this._sheetInterceptorService.writeCellInterceptor.intercept(AFTER_CELL_EDIT, - { + this._sheetInterceptorService.writeCellInterceptor.intercept(AFTER_CELL_EDIT, { // eslint-disable-next-line complexity - handler: (value, context, next) => { + handler: (value, context, next) => { // clear the effect - this._collectEffectMutation.clean(); - const currentNumfmtValue = this._numfmtService.getValue( - context.unitId, - context.subUnitId, - context.row, - context.col - ); - const currentNumfmtType = (currentNumfmtValue && getPatternType(currentNumfmtValue.pattern)) ?? ''; - const clean = () => { - currentNumfmtValue && + this._collectEffectMutation.clean(); + const currentNumfmtValue = this._numfmtService.getValue( + context.unitId, + context.subUnitId, + context.row, + context.col + ); + const currentNumfmtType = (currentNumfmtValue && getPatternType(currentNumfmtValue.pattern)) ?? ''; + const clean = () => { + currentNumfmtValue && this._collectEffectMutation.add( context.unitId, context.subUnitId, @@ -164,54 +161,53 @@ export class NumfmtEditorController extends Disposable { context.col, null ); - }; - if (!value?.v && !value?.p) { - return next(value); - } + }; + if (!value?.v && !value?.p) { + return next(value); + } // if the cell is text format or force string, do not convert the value - if (isTextFormat(currentNumfmtValue?.pattern) || value.t === CellValueType.FORCE_STRING) { - return next(value); - } - - const body = value.p?.body; - const content = value?.p?.body?.dataStream ? value.p.body.dataStream.replace(/\r\n$/, '') : String(value.v); - const numfmtInfo = numfmt.parseDate(content) || numfmt.parseTime(content) || numfmt.parseNumber(content); - - if (body) { - if (!canConvertRichTextToNumfmt(body)) { - return next(value); - } else { - const { dataStream } = body; - const dataStreamWithoutEnd = dataStream.replace(/\r\n$/, ''); - const num = Number(dataStreamWithoutEnd); - if (Number.isNaN(num) && !numfmtInfo) { - return next(value); - } - } - } - - if (numfmtInfo) { - if (numfmtInfo.z) { - this._collectEffectMutation.add( - context.unitId, - context.subUnitId, - context.row, - context.col, - { - pattern: numfmtInfo.z, - } - ); - } - const v = Number(numfmtInfo.v); - return next({ ...value, p: undefined, v, t: CellValueType.NUMBER }); - } else if (['date', 'time', 'datetime', 'percent'].includes(currentNumfmtType) || !isNumeric(content)) { - clean(); - } + if (isTextFormat(currentNumfmtValue?.pattern) || value.t === CellValueType.FORCE_STRING) { return next(value); - }, - } - ) + } + + const body = value.p?.body; + const content = value?.p?.body?.dataStream ? value.p.body.dataStream.replace(/\r\n$/, '') : String(value.v); + const numfmtInfo = numfmt.parseDate(content) || numfmt.parseTime(content) || numfmt.parseNumber(content); + + if (body) { + if (!canConvertRichTextToNumfmt(body)) { + return next(value); + } else { + const { dataStream } = body; + const dataStreamWithoutEnd = dataStream.replace(/\r\n$/, ''); + const num = Number(dataStreamWithoutEnd); + if (Number.isNaN(num) && !numfmtInfo) { + return next(value); + } + } + } + + if (numfmtInfo) { + if (numfmtInfo.z) { + this._collectEffectMutation.add( + context.unitId, + context.subUnitId, + context.row, + context.col, + { + pattern: numfmtInfo.z, + } + ); + } + const v = Number(numfmtInfo.v); + return next({ ...value, p: undefined, v, t: CellValueType.NUMBER }); + } else if (['date', 'time', 'datetime', 'percent'].includes(currentNumfmtType) || !isNumeric(content)) { + clean(); + } + return next(value); + }, + }) ) ); } diff --git a/packages/sheets-numfmt/package.json b/packages/sheets-numfmt/package.json index 368f714f9f..c4b22a99bf 100644 --- a/packages/sheets-numfmt/package.json +++ b/packages/sheets-numfmt/package.json @@ -75,7 +75,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-numfmt/src/base/const/currency-symbols.ts b/packages/sheets-numfmt/src/base/const/currency-symbols.ts index 50b8ed70ea..7d9cb516f9 100644 --- a/packages/sheets-numfmt/src/base/const/currency-symbols.ts +++ b/packages/sheets-numfmt/src/base/const/currency-symbols.ts @@ -55,8 +55,24 @@ export const countryCurrencyMap = { KR: '₩', // South Korean Won RU: '₽', // Russian Ruble // Euro countries - AT: '€', BE: '€', CY: '€', EE: '€', FI: '€', FR: '€', - DE: '€', GR: '€', IE: '€', IT: '€', LV: '€', LT: '€', - LU: '€', MT: '€', NL: '€', PT: '€', SK: '€', SI: '€', ES: '€', + AT: '€', + BE: '€', + CY: '€', + EE: '€', + FI: '€', + FR: '€', + DE: '€', + GR: '€', + IE: '€', + IT: '€', + LV: '€', + LT: '€', + LU: '€', + MT: '€', + NL: '€', + PT: '€', + SK: '€', + SI: '€', + ES: '€', // Add more mappings as needed }; diff --git a/packages/sheets-numfmt/src/commands/commands/set-numfmt.command.ts b/packages/sheets-numfmt/src/commands/commands/set-numfmt.command.ts index f473ca721b..e55ad077db 100644 --- a/packages/sheets-numfmt/src/commands/commands/set-numfmt.command.ts +++ b/packages/sheets-numfmt/src/commands/commands/set-numfmt.command.ts @@ -22,13 +22,7 @@ import type { ISetNumfmtMutationParams, ISetRangeValuesMutationParams, } from '@univerjs/sheets'; -import { CellValueType, - CommandType, - ICommandService, - IUndoRedoService, - IUniverInstanceService, - ObjectMatrix, - sequenceExecute } from '@univerjs/core'; +import { CellValueType, CommandType, ICommandService, IUndoRedoService, IUniverInstanceService, ObjectMatrix, sequenceExecute } from '@univerjs/core'; import { isTextFormat } from '@univerjs/engine-numfmt'; import { checkCellValueType, diff --git a/packages/sheets-sort-ui/package.json b/packages/sheets-sort-ui/package.json index 33cfa56159..f7ee5bda8c 100644 --- a/packages/sheets-sort-ui/package.json +++ b/packages/sheets-sort-ui/package.json @@ -82,7 +82,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-sort-ui/src/controllers/menu.schema.ts b/packages/sheets-sort-ui/src/controllers/menu.schema.ts index 309637c3da..63e4ec2ab7 100644 --- a/packages/sheets-sort-ui/src/controllers/menu.schema.ts +++ b/packages/sheets-sort-ui/src/controllers/menu.schema.ts @@ -35,9 +35,11 @@ import { sortRangeAscExtCtxMenuFactory, sortRangeAscExtMenuFactory, sortRangeAscMenuFactory, - sortRangeCtxMenuFactory, sortRangeCustomCtxMenuFactory, + sortRangeCtxMenuFactory, + sortRangeCustomCtxMenuFactory, sortRangeCustomMenuFactory, - sortRangeDescCtxMenuFactory, sortRangeDescExtCtxMenuFactory, + sortRangeDescCtxMenuFactory, + sortRangeDescExtCtxMenuFactory, sortRangeDescExtMenuFactory, sortRangeDescMenuFactory, sortRangeMenuFactory, diff --git a/packages/sheets-sort-ui/src/services/sheets-sort-ui.service.tsx b/packages/sheets-sort-ui/src/services/sheets-sort-ui.service.tsx index 416661e3c0..916d47b735 100644 --- a/packages/sheets-sort-ui/src/services/sheets-sort-ui.service.tsx +++ b/packages/sheets-sort-ui/src/services/sheets-sort-ui.service.tsx @@ -68,7 +68,8 @@ export class SheetsSortUIService extends Disposable { @Inject(SheetsSelectionsService) private readonly _selectionManagerService: SheetsSelectionsService, @Inject(SheetsSortService) private readonly _sheetsSortService: SheetsSortService, @Inject(LocaleService) private readonly _localeService: LocaleService, - @ICommandService private readonly _commandService: ICommandService) { + @ICommandService private readonly _commandService: ICommandService + ) { super(); } @@ -128,16 +129,15 @@ export class SheetsSortUIService extends Disposable { const colTranslator = colIndexTranslator(this._localeService); - return Array.from({ length: range.endColumn - range.startColumn + 1 }, - (_, i) => { - const cellValue = worksheet.getCell(range.startRow, i + range.startColumn)?.v; - return { - index: i + range.startColumn, - label: hasTitle ? - `${cellValue ?? colTranslator(i + range.startColumn)}` : - colTranslator(i + range.startColumn), - }; - }); + return Array.from({ length: range.endColumn - range.startColumn + 1 }, (_, i) => { + const cellValue = worksheet.getCell(range.startRow, i + range.startColumn)?.v; + return { + index: i + range.startColumn, + label: hasTitle ? + `${cellValue ?? colTranslator(i + range.startColumn)}` : + colTranslator(i + range.startColumn), + }; + }); } setSelection(unitId: string, subUnitId: string, range: IRange) { diff --git a/packages/sheets-sort-ui/src/views/CustomSortPanel.tsx b/packages/sheets-sort-ui/src/views/CustomSortPanel.tsx index 41ad5d4c8f..653a47195f 100644 --- a/packages/sheets-sort-ui/src/views/CustomSortPanel.tsx +++ b/packages/sheets-sort-ui/src/views/CustomSortPanel.tsx @@ -71,7 +71,9 @@ export function CustomSortPanel() { newList.push({ type: SortType.ASC, colIndex: nextColIndex }); setList(newList); } - }, 200), [list, range]); + }, 200), + [list, range] + ); const apply = useCallback((orderRules: IOrderRule[], hasTitle: boolean) => { sheetsSortService.applySort({ range, orderRules, hasTitle }); diff --git a/packages/sheets-sort/package.json b/packages/sheets-sort/package.json index 2556379584..c42a57c3d8 100644 --- a/packages/sheets-sort/package.json +++ b/packages/sheets-sort/package.json @@ -74,7 +74,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-thread-comment-ui/package.json b/packages/sheets-thread-comment-ui/package.json index 0ac8d16cdc..aae006fb9b 100644 --- a/packages/sheets-thread-comment-ui/package.json +++ b/packages/sheets-thread-comment-ui/package.json @@ -83,7 +83,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-thread-comment/package.json b/packages/sheets-thread-comment/package.json index a1b031054a..419bf35ff2 100644 --- a/packages/sheets-thread-comment/package.json +++ b/packages/sheets-thread-comment/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-ui/package.json b/packages/sheets-ui/package.json index 3e618084f4..24445b172c 100644 --- a/packages/sheets-ui/package.json +++ b/packages/sheets-ui/package.json @@ -94,7 +94,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-ui/src/commands/commands/__tests__/create-command-test-bed.ts b/packages/sheets-ui/src/commands/commands/__tests__/create-command-test-bed.ts index 62ebad91c2..1ebcb2f066 100644 --- a/packages/sheets-ui/src/commands/commands/__tests__/create-command-test-bed.ts +++ b/packages/sheets-ui/src/commands/commands/__tests__/create-command-test-bed.ts @@ -39,7 +39,11 @@ import { RangeProtectionRuleModel, SheetInterceptorService, - SheetsSelectionsService, WorkbookPermissionService, WorksheetPermissionService, WorksheetProtectionPointModel, WorksheetProtectionRuleModel, + SheetsSelectionsService, + WorkbookPermissionService, + WorksheetPermissionService, + WorksheetProtectionPointModel, + WorksheetProtectionRuleModel, } from '@univerjs/sheets'; import { BehaviorSubject } from 'rxjs'; import enUS from '../../../locale/en-US'; diff --git a/packages/sheets-ui/src/commands/commands/add-worksheet-merge.command.ts b/packages/sheets-ui/src/commands/commands/add-worksheet-merge.command.ts index eed7f95381..992d332cc6 100644 --- a/packages/sheets-ui/src/commands/commands/add-worksheet-merge.command.ts +++ b/packages/sheets-ui/src/commands/commands/add-worksheet-merge.command.ts @@ -36,7 +36,9 @@ import { AddWorksheetMergeMutation, getAddMergeMutationRangeByType, RemoveMergeUndoMutationFactory, - RemoveWorksheetMergeMutation, SheetInterceptorService, SheetsSelectionsService, + RemoveWorksheetMergeMutation, + SheetInterceptorService, + SheetsSelectionsService, } from '@univerjs/sheets'; import { IConfirmService } from '@univerjs/ui'; diff --git a/packages/sheets-ui/src/controllers/clipboard/clipboard.controller.ts b/packages/sheets-ui/src/controllers/clipboard/clipboard.controller.ts index bf246840cf..744f87e450 100644 --- a/packages/sheets-ui/src/controllers/clipboard/clipboard.controller.ts +++ b/packages/sheets-ui/src/controllers/clipboard/clipboard.controller.ts @@ -443,8 +443,10 @@ export class SheetClipboardController extends RxDisposable { unitId: unitId!, subUnitId: subUnitId!, ranges: [{ - startRow: range.rows[0], endRow: Math.min(range.rows[range.rows.length - 1], maxRow), - startColumn: range.cols[0], endColumn: range.cols[range.cols.length - 1], + startRow: range.rows[0], + endRow: Math.min(range.rows[range.rows.length - 1], maxRow), + startColumn: range.cols[0], + endColumn: range.cols[range.cols.length - 1], }], rowHeight, }; diff --git a/packages/sheets-ui/src/controllers/editor/editing.render-controller.ts b/packages/sheets-ui/src/controllers/editor/editing.render-controller.ts index 2f0527299f..1190c51828 100644 --- a/packages/sheets-ui/src/controllers/editor/editing.render-controller.ts +++ b/packages/sheets-ui/src/controllers/editor/editing.render-controller.ts @@ -23,7 +23,14 @@ import type { MutationsAffectRange, WorkbookSelectionModel } from '@univerjs/she import type { IEditorBridgeServiceVisibleParam } from '../../services/editor-bridge.service'; import { - CellValueType, DEFAULT_EMPTY_DOCUMENT_VALUE, Direction, Disposable, DisposableCollection, DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY, DOCS_NORMAL_EDITOR_UNIT_ID_KEY, EDITOR_ACTIVATED, + CellValueType, + DEFAULT_EMPTY_DOCUMENT_VALUE, + Direction, + Disposable, + DisposableCollection, + DOCS_FORMULA_BAR_EDITOR_UNIT_ID_KEY, + DOCS_NORMAL_EDITOR_UNIT_ID_KEY, + EDITOR_ACTIVATED, FOCUSING_EDITOR_BUT_HIDDEN, FOCUSING_EDITOR_INPUT_FORMULA, FOCUSING_EDITOR_STANDALONE, diff --git a/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts b/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts index 1021f70051..ce5d2a0e4b 100644 --- a/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts +++ b/packages/sheets-ui/src/controllers/format-painter/format-painter.controller.ts @@ -16,7 +16,6 @@ import type { ICellData, IMutationInfo, IRange, IStyleData, Workbook } from '@univerjs/core'; import type { IAddWorksheetMergeMutationParams, IRemoveWorksheetMergeMutationParams, ISetRangeValuesMutationParams } from '@univerjs/sheets'; - import type { IFormatPainterHook, ISelectionFormatInfo } from '../../services/format-painter/format-painter.service'; import { Disposable, @@ -29,8 +28,18 @@ import { UniverInstanceType, } from '@univerjs/core'; import { IRenderManagerService } from '@univerjs/engine-render'; -import { AddMergeUndoMutationFactory, AddWorksheetMergeMutation, getAddMergeMutationRangeByType, RemoveMergeUndoMutationFactory, RemoveWorksheetMergeMutation, SetRangeValuesCommand, SetRangeValuesMutation, SetRangeValuesUndoMutationFactory, SheetInterceptorService, SheetsSelectionsService } from '@univerjs/sheets'; - +import { + AddMergeUndoMutationFactory, + AddWorksheetMergeMutation, + getAddMergeMutationRangeByType, + RemoveMergeUndoMutationFactory, + RemoveWorksheetMergeMutation, + SetRangeValuesCommand, + SetRangeValuesMutation, + SetRangeValuesUndoMutationFactory, + SheetInterceptorService, + SheetsSelectionsService, +} from '@univerjs/sheets'; import { checkCellContentInRanges, getClearContentMutationParamsForRanges } from '../../common/utils'; import { FormatPainterStatus, IFormatPainterService } from '../../services/format-painter/format-painter.service'; @@ -126,8 +135,7 @@ export class FormatPainterController extends Disposable { } : originRange; const styleValues: ICellData[][] = Array.from({ length: range.endRow - range.startRow + 1 }, () => - Array.from({ length: range.endColumn - range.startColumn + 1 }, () => ({})) - ); + Array.from({ length: range.endColumn - range.startColumn + 1 }, () => ({}))); const mergeRanges: IRange[] = []; styleValues.forEach((row, rowIndex) => { diff --git a/packages/sheets-ui/src/controllers/menu.schema.ts b/packages/sheets-ui/src/controllers/menu.schema.ts index 1fda1aff56..6a2c404364 100644 --- a/packages/sheets-ui/src/controllers/menu.schema.ts +++ b/packages/sheets-ui/src/controllers/menu.schema.ts @@ -23,7 +23,8 @@ import { CancelFrozenCommand, ClearSelectionAllCommand, ClearSelectionContentCommand, - ClearSelectionFormatCommand, CopySheetCommand, + ClearSelectionFormatCommand, + CopySheetCommand, InsertColAfterCommand, InsertColBeforeCommand, InsertRowAfterCommand, @@ -37,10 +38,12 @@ import { SetHorizontalTextAlignCommand, SetRowHeightCommand, SetSelectedColsVisibleCommand, - SetSelectedRowsVisibleCommand, SetTabColorCommand, + SetSelectedRowsVisibleCommand, + SetTabColorCommand, SetTextRotationCommand, SetTextWrapCommand, - SetVerticalTextAlignCommand, SetWorksheetHideCommand, + SetVerticalTextAlignCommand, + SetWorksheetHideCommand, SetWorksheetRowIsAutoHeightCommand, ToggleGridlinesCommand, } from '@univerjs/sheets'; @@ -103,7 +106,8 @@ import { InsertRangeMoveRightMenuItemFactory, InsertRowAfterMenuItemFactory, InsertRowBeforeMenuItemFactory, - ROW_INSERT_MENU_ID, RowInsertMenuItemFactory, + ROW_INSERT_MENU_ID, + RowInsertMenuItemFactory, } from './menu/insert.menu'; import { BackgroundColorSelectorMenuItemFactory, diff --git a/packages/sheets-ui/src/controllers/menu/__tests__/create-menu-test-bed.ts b/packages/sheets-ui/src/controllers/menu/__tests__/create-menu-test-bed.ts index 7f591c61c1..859cb2623e 100644 --- a/packages/sheets-ui/src/controllers/menu/__tests__/create-menu-test-bed.ts +++ b/packages/sheets-ui/src/controllers/menu/__tests__/create-menu-test-bed.ts @@ -17,13 +17,7 @@ import type { IWorkbookData } from '@univerjs/core'; import { Inject, Injector, LocaleType, Plugin, Univer, UniverInstanceType } from '@univerjs/core'; import { IRenderManagerService, RenderManagerService } from '@univerjs/engine-render'; -import { RangeProtectionCache, RangeProtectionRefRangeService, RangeProtectionRenderModel, RangeProtectionRuleModel, RangeProtectionService, RefRangeService, SheetInterceptorService, - SheetsSelectionsService, - WorkbookPermissionService, - WorksheetPermissionService, - WorksheetProtectionPointModel, - WorksheetProtectionRuleModel, -} from '@univerjs/sheets'; +import { RangeProtectionCache, RangeProtectionRefRangeService, RangeProtectionRenderModel, RangeProtectionRuleModel, RangeProtectionService, RefRangeService, SheetInterceptorService, SheetsSelectionsService, WorkbookPermissionService, WorksheetPermissionService, WorksheetProtectionPointModel, WorksheetProtectionRuleModel } from '@univerjs/sheets'; import { IMenuManagerService, IPlatformService, IShortcutService, MenuManagerService, PlatformService, ShortcutService } from '@univerjs/ui'; const TEST_WORKBOOK_DATA_DEMO: IWorkbookData = { diff --git a/packages/sheets-ui/src/controllers/menu/__tests__/menu.spec.ts b/packages/sheets-ui/src/controllers/menu/__tests__/menu.spec.ts index 292cfe4f8d..984cac5668 100644 --- a/packages/sheets-ui/src/controllers/menu/__tests__/menu.spec.ts +++ b/packages/sheets-ui/src/controllers/menu/__tests__/menu.spec.ts @@ -19,7 +19,8 @@ import { DisposableCollection, ICommandService, Injector, - RANGE_TYPE } from '@univerjs/core'; + RANGE_TYPE, +} from '@univerjs/core'; import { SetBoldCommand, SetRangeValuesMutation, diff --git a/packages/sheets-ui/src/controllers/menu/sheet.menu.ts b/packages/sheets-ui/src/controllers/menu/sheet.menu.ts index 322bb151e6..9c555521aa 100644 --- a/packages/sheets-ui/src/controllers/menu/sheet.menu.ts +++ b/packages/sheets-ui/src/controllers/menu/sheet.menu.ts @@ -225,7 +225,8 @@ export function ShowMenuItemFactory(accessor: IAccessor): IMenuButtonItem { return disposable.dispose; }).pipe( combineLatestWith(getWorkbookPermissionDisable$(accessor, [WorkbookEditablePermission, WorkbookHideSheetPermission])), - map(([defaultDisabled, permissionDisabled]) => defaultDisabled || permissionDisabled)), + map(([defaultDisabled, permissionDisabled]) => defaultDisabled || permissionDisabled) + ), hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_SHEET), }; } diff --git a/packages/sheets-ui/src/controllers/render-controllers/format-painter.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/format-painter.render-controller.ts index 2628a736fd..458a997ac6 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/format-painter.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/format-painter.render-controller.ts @@ -78,6 +78,7 @@ export class FormatPainterRenderController extends Disposable implements IRender } else { scene.setDefaultCursor(CURSOR_TYPE.DEFAULT); } - }))); + })) + ); } } diff --git a/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts index fadb5ced37..6496fb10dd 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/freeze.render-controller.ts @@ -237,8 +237,10 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderM const FREEZE_OFFSET = FREEZE_SIZE; this._rowFreezeHeaderRect = new Rect(FREEZE_ROW_HEADER_NAME, { - fill: this._freezeNormalHeaderColor, width: rowHeaderWidthAndMarginLeft, - height: FREEZE_SIZE, left: 0, + fill: this._freezeNormalHeaderColor, + width: rowHeaderWidthAndMarginLeft, + height: FREEZE_SIZE, + left: 0, top: startY - FREEZE_OFFSET, zIndex: 3, }); @@ -266,8 +268,12 @@ export class HeaderFreezeRenderController extends Disposable implements IRenderM const FREEZE_OFFSET = FREEZE_SIZE; this._columnFreezeHeaderRect = new Rect(FREEZE_COLUMN_HEADER_NAME, { - fill: this._freezeNormalHeaderColor, width: FREEZE_SIZE, height: columnHeaderHeightAndMarginTop, - left: startX - FREEZE_OFFSET, top: 0, zIndex: 3, + fill: this._freezeNormalHeaderColor, + width: FREEZE_SIZE, + height: columnHeaderHeightAndMarginTop, + left: startX - FREEZE_OFFSET, + top: 0, + zIndex: 3, }); let fill = this._freezeNormalHeaderColor; diff --git a/packages/sheets-ui/src/controllers/render-controllers/header-move.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/header-move.render-controller.ts index 88a9084889..b366565f9a 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/header-move.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/header-move.render-controller.ts @@ -23,10 +23,13 @@ import type { import type { IMouseEvent, IPointerEvent, IRenderContext, IRenderModule, SpreadsheetColumnHeader, SpreadsheetHeader } from '@univerjs/engine-render'; import type { IMoveColsCommandParams, IMoveRowsCommandParams, ISelectionWithStyle, WorkbookSelectionModel } from '@univerjs/sheets'; import { - createInterceptorKey, Disposable, ICommandService, + createInterceptorKey, + Disposable, + ICommandService, Inject, InterceptorManager, - RANGE_TYPE } from '@univerjs/core'; + RANGE_TYPE, +} from '@univerjs/core'; import { CURSOR_TYPE, Rect, diff --git a/packages/sheets-ui/src/controllers/render-controllers/header-resize.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/header-resize.render-controller.ts index fcd03d6ca6..e82cf09d00 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/header-resize.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/header-resize.render-controller.ts @@ -37,7 +37,9 @@ import { CURSOR_TYPE, Rect, SHEET_VIEWPORT_KEY, Vector2 } from '@univerjs/engine import { DeltaColumnWidthCommand, - DeltaRowHeightCommand, SetWorksheetRowIsAutoHeightCommand, SheetsSelectionsService, + DeltaRowHeightCommand, + SetWorksheetRowIsAutoHeightCommand, + SheetsSelectionsService, } from '@univerjs/sheets'; import { Subscription } from 'rxjs'; import { SetWorksheetColAutoWidthCommand } from '../../commands/commands/set-worksheet-auto-col-width.command'; @@ -517,7 +519,8 @@ export class HeaderResizeRenderController extends Disposable implements IRenderM } this._commandService.executeCommand( - SetWorksheetColAutoWidthCommand.id, { ranges } + SetWorksheetColAutoWidthCommand.id, + { ranges } ); this._columnResizeRect?.hide(); break; diff --git a/packages/sheets-ui/src/controllers/render-controllers/mobile/mobile-scroll.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/mobile/mobile-scroll.render-controller.ts index 38025a5ddb..5d172cd696 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/mobile/mobile-scroll.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/mobile/mobile-scroll.render-controller.ts @@ -229,7 +229,8 @@ export class MobileSheetsScrollRenderController extends Disposable implements IR offsetY: rowOffset, viewportScrollX, viewportScrollY, - scrollX, scrollY, + scrollX, + scrollY, }; // lastestScrollInfo derived from viewportScrollX, viewportScrollY from onScrollAfter$ this._scrollManagerService.setValidScrollStateToCurrSheet(scrollInfo); @@ -302,7 +303,8 @@ export class MobileSheetsScrollRenderController extends Disposable implements IR } this._updateSceneSize(param as unknown as ISheetSkeletonManagerParam); } - }))); + }) + )); } /** diff --git a/packages/sheets-ui/src/controllers/render-controllers/scroll.render-controller.ts b/packages/sheets-ui/src/controllers/render-controllers/scroll.render-controller.ts index 45210472d4..a0f3b03c59 100644 --- a/packages/sheets-ui/src/controllers/render-controllers/scroll.render-controller.ts +++ b/packages/sheets-ui/src/controllers/render-controllers/scroll.render-controller.ts @@ -30,7 +30,8 @@ import { IContextService, Inject, Injector, - RANGE_TYPE, toDisposable, + RANGE_TYPE, + toDisposable, Tools, } from '@univerjs/core'; import { IRenderManagerService, RENDER_CLASS_TYPE, SHEET_VIEWPORT_KEY } from '@univerjs/engine-render'; @@ -257,7 +258,8 @@ export class SheetsScrollRenderController extends Disposable implements IRenderM if (currScrollInfo) { this._updateViewportScroll(viewportScrollX, viewportScrollY); } - }))); + }) + )); } _updateViewportScroll(viewportScrollX: number = 0, viewportScrollY: number = 0) { diff --git a/packages/sheets-ui/src/controllers/utils/char-tools.ts b/packages/sheets-ui/src/controllers/utils/char-tools.ts index 0a38937778..69fa951f96 100644 --- a/packages/sheets-ui/src/controllers/utils/char-tools.ts +++ b/packages/sheets-ui/src/controllers/utils/char-tools.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +/* eslint-disable antfu/consistent-list-newline */ import type { IFunctionService, ISequenceNode, LexerTreeBuilder } from '@univerjs/engine-formula'; import { LocaleType, numfmt } from '@univerjs/core'; import { matchToken, sequenceNodeType } from '@univerjs/engine-formula'; diff --git a/packages/sheets-ui/src/facade/__tests__/create-test-bed.ts b/packages/sheets-ui/src/facade/__tests__/create-test-bed.ts index f591207b94..edec761089 100644 --- a/packages/sheets-ui/src/facade/__tests__/create-test-bed.ts +++ b/packages/sheets-ui/src/facade/__tests__/create-test-bed.ts @@ -26,7 +26,8 @@ import { Plugin, ThemeService, Univer, - UniverInstanceType } from '@univerjs/core'; + UniverInstanceType, +} from '@univerjs/core'; import { FUniver } from '@univerjs/core/facade'; import { LexerTreeBuilder } from '@univerjs/engine-formula'; import { Engine, IRenderingEngine, IRenderManagerService, RenderManagerService } from '@univerjs/engine-render'; diff --git a/packages/sheets-ui/src/index.ts b/packages/sheets-ui/src/index.ts index 0f268f5707..34cc9c262f 100644 --- a/packages/sheets-ui/src/index.ts +++ b/packages/sheets-ui/src/index.ts @@ -109,7 +109,8 @@ export { SheetPasteColWidthCommand, SheetPasteCommand, SheetPasteFormatCommand, - SheetPasteShortKeyCommand, SheetPasteValueCommand, + SheetPasteShortKeyCommand, + SheetPasteValueCommand, } from './commands/commands/clipboard.command'; export { DeleteRangeMoveLeftConfirmCommand } from './commands/commands/delete-range-move-left-confirm.command'; export { DeleteRangeMoveUpConfirmCommand } from './commands/commands/delete-range-move-up-confirm.command'; @@ -146,7 +147,8 @@ export { type IScrollCommandParams, type IScrollToCellCommandParams, type ISetScrollRelativeCommandParams, - ResetScrollCommand, ScrollCommand, + ResetScrollCommand, + ScrollCommand, ScrollToCellCommand, SetScrollRelativeCommand, } from './commands/commands/set-scroll.command'; diff --git a/packages/sheets-ui/src/locale/vi-VN.ts b/packages/sheets-ui/src/locale/vi-VN.ts index 002edbd150..bb8b7a99fb 100644 --- a/packages/sheets-ui/src/locale/vi-VN.ts +++ b/packages/sheets-ui/src/locale/vi-VN.ts @@ -451,7 +451,8 @@ const locale: typeof zhCN = { copyErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền sao chép. Nếu cần sao chép, vui lòng liên hệ với người tạo.', workbookCopyErr: 'Sổ làm việc này đã được bảo vệ, hiện không có quyền sao chép. Nếu cần sao chép, vui lòng liên hệ với người tạo.', setRowColStyleErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền thiết lập kiểu hàng cột. Nếu cần thiết lập kiểu hàng cột, vui lòng liên hệ với người tạo.', - moveRowColErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền di chuyển hàng cột. Nếu cần di chuyển hàng cột, vui lòng liên hệ với người tạo.', moveRangeErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền di chuyển vùng chọn. Nếu cần di chuyển vùng chọn, vui lòng liên hệ với người tạo.', + moveRowColErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền di chuyển hàng cột. Nếu cần di chuyển hàng cột, vui lòng liên hệ với người tạo.', + moveRangeErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền di chuyển vùng chọn. Nếu cần di chuyển vùng chọn, vui lòng liên hệ với người tạo.', autoFillErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền tự động điền. Nếu cần tự động điền, vui lòng liên hệ với người tạo.', filterErr: 'Phạm vi này đã được bảo vệ, hiện không có quyền lọc. Nếu cần lọc, vui lòng liên hệ với người tạo.', operatorSheetErr: 'Trang bảng này đã được bảo vệ, hiện không có quyền thao tác trên trang bảng. Nếu cần thao tác trên trang bảng, vui lòng liên hệ với người tạo.', diff --git a/packages/sheets-ui/src/services/auto-fill/auto-fill.service.ts b/packages/sheets-ui/src/services/auto-fill/auto-fill.service.ts index 5aae32e85a..2e2f71636f 100644 --- a/packages/sheets-ui/src/services/auto-fill/auto-fill.service.ts +++ b/packages/sheets-ui/src/services/auto-fill/auto-fill.service.ts @@ -19,19 +19,7 @@ import type { RenderManagerService } from '@univerjs/engine-render'; import type { ISetRangeValuesMutationParams, ISetWorksheetRowAutoHeightMutationParams } from '@univerjs/sheets'; import type { Observable } from 'rxjs'; import type { IAutoFillLocation, IAutoFillRule, ISheetAutoFillHook } from './type'; -import { createIdentifier, Direction, - Disposable, - ICommandService, - Inject, - Injector, - IUndoRedoService, - IUniverInstanceService, - ObjectMatrix, - RANGE_TYPE, - Rectangle, - toDisposable, - UniverInstanceType, -} from '@univerjs/core'; +import { createIdentifier, Direction, Disposable, ICommandService, Inject, Injector, IUndoRedoService, IUniverInstanceService, ObjectMatrix, RANGE_TYPE, Rectangle, toDisposable, UniverInstanceType } from '@univerjs/core'; import { IRenderManagerService } from '@univerjs/engine-render'; import { rangeToDiscreteRange, SetRangeValuesMutation, SetSelectionsOperation, SetWorksheetRowAutoHeightMutation, SetWorksheetRowAutoHeightMutationFactory, SheetsSelectionsService } from '@univerjs/sheets'; @@ -391,10 +379,7 @@ export class AutoFillService extends Disposable implements IAutoFillService { // eslint-disable-next-line max-lines-per-function fillData(applyType: APPLY_TYPE) { this.applyType = applyType; - const { source, target, - unitId = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getUnitId(), - subUnitId = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getActiveSheet()?.getSheetId(), - } = this.autoFillLocation || {}; + const { source, target, unitId = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getUnitId(), subUnitId = this._univerInstanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getActiveSheet()?.getSheetId() } = this.autoFillLocation || {}; if (!source || !target || !unitId || !subUnitId) { return false; diff --git a/packages/sheets-ui/src/services/canvas-pop-manager.service.ts b/packages/sheets-ui/src/services/canvas-pop-manager.service.ts index 4da29ffe0c..135c040d19 100644 --- a/packages/sheets-ui/src/services/canvas-pop-manager.service.ts +++ b/packages/sheets-ui/src/services/canvas-pop-manager.service.ts @@ -527,10 +527,7 @@ export class SheetCanvasPopManagerService extends Disposable { return null; } - const { position, position$, disposable: positionObserverDisposable, updateRowCol, - topLeftPos$, - rightBottomPos$, - } = this._createRangePositionObserver(range, currentRender, skeleton, activeViewport); + const { position, position$, disposable: positionObserverDisposable, updateRowCol, topLeftPos$, rightBottomPos$ } = this._createRangePositionObserver(range, currentRender, skeleton, activeViewport); const { rects$, disposable: rectsObserverDisposable } = this._createHiddenRectObserver({ row: range.startRow, diff --git a/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-form-excel.spec.ts b/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-form-excel.spec.ts index ec417b864f..48e9ae9181 100644 --- a/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-form-excel.spec.ts +++ b/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-form-excel.spec.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import type { ICellData, Injector, IStyleData, Nullable, Univer } from '@univerjs/core'; import { ICommandService, IUniverInstanceService, LocaleType, RANGE_TYPE } from '@univerjs/core'; import { AddWorksheetMergeMutation, @@ -26,7 +27,6 @@ import { SheetsSelectionsService, } from '@univerjs/sheets'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import type { ICellData, Injector, IStyleData, Nullable, Univer } from '@univerjs/core'; import { SheetSkeletonManagerService } from '../../sheet-skeleton-manager.service'; import { ISheetClipboardService } from '../clipboard.service'; @@ -205,14 +205,21 @@ describe('Test clipboard', () => { expect(richTextStyle?.body?.paragraphs).toStrictEqual([{ startIndex: 6 }]); expect(richTextStyle?.body?.textRuns).toStrictEqual([ { - st: 1, ed: 4, ts: { + st: 1, + ed: 4, + ts: { cl: { rgb: 'rgb(218,233,248)' }, - ff: '等线', fs: 28, it: 1, bl: 1, + ff: '等线', + fs: 28, + it: 1, + bl: 1, }, }, { - ed: 6, st: 4, ts: { fs: 12, ff: '等线', cl: { rgb: 'rgb(0,0,0)' } }, + ed: 6, + st: 4, + ts: { fs: 12, ff: '等线', cl: { rgb: 'rgb(0,0,0)' } }, }, ]); }); diff --git a/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-from-google.spec.ts b/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-from-google.spec.ts index b4d1abea26..f55744f66f 100644 --- a/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-from-google.spec.ts +++ b/packages/sheets-ui/src/services/clipboard/__tests__/clipboard-paste-from-google.spec.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +import type { ICellData, Injector, IStyleData, Nullable, Univer } from '@univerjs/core'; import { ICommandService, IUniverInstanceService, LocaleType, RANGE_TYPE } from '@univerjs/core'; import { AddWorksheetMergeMutation, @@ -26,7 +27,6 @@ import { SheetsSelectionsService, } from '@univerjs/sheets'; import { afterEach, beforeEach, describe, expect, it } from 'vitest'; -import type { ICellData, Injector, IStyleData, Nullable, Univer } from '@univerjs/core'; import { SheetSkeletonManagerService } from '../../sheet-skeleton-manager.service'; @@ -207,15 +207,21 @@ describe('Test clipboard', () => { expect(richTextStyle?.body?.textRuns).toStrictEqual([ { ed: 1, st: 0, ts: { fs: 10, ff: 'Arial' } }, { - st: 1, ed: 4, ts: { + st: 1, + ed: 4, + ts: { bl: 1, cl: { rgb: 'rgb(217,210,233)' }, - ff: 'Arial', fs: 18, it: 1, + ff: 'Arial', + fs: 18, + it: 1, }, }, { - ed: 6, st: 4, ts: { fs: 10, ff: 'Arial' }, + ed: 6, + st: 4, + ts: { fs: 10, ff: 'Arial' }, }, ]); }); diff --git a/packages/sheets-ui/src/services/clipboard/__tests__/utils.spec.ts b/packages/sheets-ui/src/services/clipboard/__tests__/utils.spec.ts index bce7995452..7454037979 100644 --- a/packages/sheets-ui/src/services/clipboard/__tests__/utils.spec.ts +++ b/packages/sheets-ui/src/services/clipboard/__tests__/utils.spec.ts @@ -153,12 +153,14 @@ describe('test "mergeSetRangeValues"', () => { { id: 'whatever', params: {} }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '2', cellValue: { 1: { 2: { v: 'value' } } } } }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '3', cellValue: { 1: { 2: { v: 'value' } } } } }, - { id: 'whatever', params: {} }]; + { id: 'whatever', params: {} }, + ]; expect(mergeSetRangeValues(mutations)).toStrictEqual([ { id: 'whatever', params: {} }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '2', cellValue: { 1: { 2: { v: 'value' } } } } }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '3', cellValue: { 1: { 2: { v: 'value' } } } } }, - { id: 'whatever', params: {} }]); + { id: 'whatever', params: {} }, + ]); }); it('part of setRangeValues mutations are applied in same worksheet, will merge these part', () => { const mutations: IMutationInfo[] = [ @@ -166,12 +168,14 @@ describe('test "mergeSetRangeValues"', () => { { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '2', cellValue: { 1: { 2: { v: 'value' } } } } }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '2', cellValue: { 1: { 3: { v: 'value' } } } } }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '3', cellValue: { 1: { 2: { v: 'value' } } } } }, - { id: 'whatever', params: {} }]; + { id: 'whatever', params: {} }, + ]; expect(mergeSetRangeValues(mutations as IMutationInfo[])).toStrictEqual([ { id: 'whatever', params: {} }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '2', cellValue: { 1: { 2: { v: 'value' }, 3: { v: 'value' } } } } }, { id: SetRangeValuesMutation.id, params: { unitId: '1', subUnitId: '3', cellValue: { 1: { 2: { v: 'value' } } } } }, - { id: 'whatever', params: {} }]); + { id: 'whatever', params: {} }, + ]); }); it('If some setRangeValues appear discontinuously, they will be merged separately.', () => { diff --git a/packages/sheets-ui/src/services/clipboard/clipboard.service.ts b/packages/sheets-ui/src/services/clipboard/clipboard.service.ts index d7a5b48507..3bed741851 100644 --- a/packages/sheets-ui/src/services/clipboard/clipboard.service.ts +++ b/packages/sheets-ui/src/services/clipboard/clipboard.service.ts @@ -16,10 +16,13 @@ import type { ICellData, - ICellDataWithSpanAndDisplay, IDisposable, + ICellDataWithSpanAndDisplay, + IDisposable, IMutationInfo, IRange, - Nullable, Workbook, Worksheet, + Nullable, + Workbook, + Worksheet, } from '@univerjs/core'; import type { ISetSelectionsOperationParams } from '@univerjs/sheets'; import type { Observable } from 'rxjs'; @@ -37,7 +40,11 @@ import type { } from './type'; import { CellModeEnum, - createIdentifier, Disposable, ErrorService, extractPureTextFromCell, ICommandService, + createIdentifier, + Disposable, + ErrorService, + extractPureTextFromCell, + ICommandService, ILogService, Inject, Injector, @@ -182,7 +189,8 @@ export class SheetClipboardService extends Disposable implements ISheetClipboard UniverInstanceType.UNIVER_SHEET, SheetSkeletonManagerService, this._univerInstanceService, - this._renderManagerService)?.getCurrentParam(), + this._renderManagerService + )?.getCurrentParam(), }); this._usmToHtml = new USMToHtmlService(); @@ -304,7 +312,8 @@ export class SheetClipboardService extends Disposable implements ISheetClipboard const file = new File( [imageBlob], `clipboard-image.${imageExtension}`, - { type: imageMimeType }); + { type: imageMimeType } + ); return this._pasteFiles([file], pasteType); } @@ -477,10 +486,7 @@ export class SheetClipboardService extends Disposable implements ISheetClipboard unitId: string; subUnitId: string; range: IDiscreteRange; - }) => undefined | ({ - undos: IMutationInfo[]; - redos: IMutationInfo[]; - })): Promise { + }) => undefined | ({ undos: IMutationInfo[]; redos: IMutationInfo[] })): Promise { const target = this._getPastingTarget(); if (!target.subUnitId || !target.selection) { return false; @@ -913,7 +919,9 @@ export class SheetClipboardService extends Disposable implements ISheetClipboard endRow, startColumn, endColumn, - }, primary, style: null, + }, + primary, + style: null, }], }; return { diff --git a/packages/sheets-ui/src/services/clipboard/html-to-usm/converter.ts b/packages/sheets-ui/src/services/clipboard/html-to-usm/converter.ts index 59e1f90fd0..bd5c007211 100644 --- a/packages/sheets-ui/src/services/clipboard/html-to-usm/converter.ts +++ b/packages/sheets-ui/src/services/clipboard/html-to-usm/converter.ts @@ -481,7 +481,8 @@ export class HtmlToUSMService { const p = documentModel?.getSnapshot(); const singleDataStream = `${newDocBody.dataStream}\r\n`; const documentData = { - ...p, ...{ + ...p, + ...{ body: { dataStream: singleDataStream, textRuns: newDocBody.textRuns, @@ -774,7 +775,8 @@ function setMergedCellStyle( rowIndex: number; colIndex: number; colSetValueIndex: number; - }) { + } +) { const { rowSpan, colSpan, rowIndex, colSetValueIndex } = indexParams; for (let i = rowIndex; i < rowIndex + rowSpan; i++) { diff --git a/packages/sheets-ui/src/services/editor-bridge.service.ts b/packages/sheets-ui/src/services/editor-bridge.service.ts index 6604909b66..f75eeda31e 100644 --- a/packages/sheets-ui/src/services/editor-bridge.service.ts +++ b/packages/sheets-ui/src/services/editor-bridge.service.ts @@ -372,7 +372,12 @@ export class EditorBridgeService extends Disposable implements IEditorBridgeServ const { centerAngle, vertexAngle } = convertTextRotation(textRotation); blankModel.documentModel!.documentStyle.renderConfig = { ...renderConfig, - verticalAlign, horizontalAlign, wrapStrategy, background: { rgb: fill }, centerAngle, vertexAngle, + verticalAlign, + horizontalAlign, + wrapStrategy, + background: { rgb: fill }, + centerAngle, + vertexAngle, }; } documentLayoutObject = blankModel; diff --git a/packages/sheets-ui/src/services/hover-manager.service.ts b/packages/sheets-ui/src/services/hover-manager.service.ts index 18769c36f2..21f18e10b2 100644 --- a/packages/sheets-ui/src/services/hover-manager.service.ts +++ b/packages/sheets-ui/src/services/hover-manager.service.ts @@ -352,7 +352,10 @@ export class HoverManagerService extends Disposable { if (activeCell && activeCell.location) { const { unitId, subUnitId, row, col } = getLocationBase(activeCell.location); this._currentPointerDownCell$.next({ - unitId, subUnitId, row, col, + unitId, + subUnitId, + row, + col, event, }); } diff --git a/packages/sheets-ui/src/services/selection/base-selection-render.service.ts b/packages/sheets-ui/src/services/selection/base-selection-render.service.ts index ad07dd91b6..6c529aa794 100644 --- a/packages/sheets-ui/src/services/selection/base-selection-render.service.ts +++ b/packages/sheets-ui/src/services/selection/base-selection-render.service.ts @@ -33,7 +33,12 @@ import type { IShortcutService } from '@univerjs/ui'; import type { Observable, Subscription } from 'rxjs'; import type { SheetSkeletonManagerService } from '../sheet-skeleton-manager.service'; import { - convertCellToRange, createIdentifier, Disposable, InterceptorManager, RANGE_TYPE, ThemeService, + convertCellToRange, + createIdentifier, + Disposable, + InterceptorManager, + RANGE_TYPE, + ThemeService, } from '@univerjs/core'; import { ScrollTimer, ScrollTimerType, SHEET_VIEWPORT_KEY, Vector2 } from '@univerjs/engine-render'; @@ -520,10 +525,7 @@ export class BaseSelectionRenderService extends Disposable implements ISheetSele if (!startViewport || !endViewport || !viewportMain) { return false; } - const crossableViewports = [SHEET_VIEWPORT_KEY.VIEW_MAIN, - SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT_TOP, - SHEET_VIEWPORT_KEY.VIEW_MAIN_TOP, - SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT] as string[]; + const crossableViewports = [SHEET_VIEWPORT_KEY.VIEW_MAIN, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_TOP, SHEET_VIEWPORT_KEY.VIEW_MAIN_LEFT] as string[]; return crossableViewports.includes(startViewport.viewportKey) && crossableViewports.includes(endViewport.viewportKey); }; if (isCrossableViewports()) { diff --git a/packages/sheets-ui/src/services/selection/mobile-selection-shape.ts b/packages/sheets-ui/src/services/selection/mobile-selection-shape.ts index beda1d2f69..529e9cad8c 100644 --- a/packages/sheets-ui/src/services/selection/mobile-selection-shape.ts +++ b/packages/sheets-ui/src/services/selection/mobile-selection-shape.ts @@ -91,7 +91,8 @@ export class MobileSelectionControl extends SelectionControl { // put into scene const objs = [ - this._fillControlTopLeft, this._fillControlBottomRight, + this._fillControlTopLeft, + this._fillControlBottomRight, ] as BaseObject[]; // do not use this.model.rangeType, model has not been initialized yet diff --git a/packages/sheets-ui/src/services/selection/selection-control.ts b/packages/sheets-ui/src/services/selection/selection-control.ts index d7ccf6b86b..fa8b4e5ff6 100644 --- a/packages/sheets-ui/src/services/selection/selection-control.ts +++ b/packages/sheets-ui/src/services/selection/selection-control.ts @@ -230,9 +230,14 @@ export class SelectionControl extends Disposable { const shapes = [ this._autoFillControl, - this._leftBorder, this._rightBorder, this._topBorder, this._bottomBorder, - this._backgroundControlTop, this._backgroundControlMiddleLeft, - this._backgroundControlMiddleRight, this._backgroundControlBottom, + this._leftBorder, + this._rightBorder, + this._topBorder, + this._bottomBorder, + this._backgroundControlTop, + this._backgroundControlMiddleLeft, + this._backgroundControlMiddleRight, + this._backgroundControlBottom, this._dashedRect, ]; @@ -852,8 +857,11 @@ export class SelectionControl extends Disposable { const scale = this._getScale(); const { - stroke, rowHeaderFill = defaultStyle.rowHeaderFill!, rowHeaderStroke = defaultStyle.rowHeaderStroke!, - columnHeaderFill = defaultStyle.columnHeaderFill!, columnHeaderStroke = defaultStyle.columnHeaderStroke!, + stroke, + rowHeaderFill = defaultStyle.rowHeaderFill!, + rowHeaderStroke = defaultStyle.rowHeaderStroke!, + columnHeaderFill = defaultStyle.columnHeaderFill!, + columnHeaderStroke = defaultStyle.columnHeaderStroke!, } = style; let { diff --git a/packages/sheets-ui/src/views/auto-fill-popup-menu/AutoFillPopupMenu.tsx b/packages/sheets-ui/src/views/auto-fill-popup-menu/AutoFillPopupMenu.tsx index 700c06e8f7..20afb9a92f 100644 --- a/packages/sheets-ui/src/views/auto-fill-popup-menu/AutoFillPopupMenu.tsx +++ b/packages/sheets-ui/src/views/auto-fill-popup-menu/AutoFillPopupMenu.tsx @@ -95,7 +95,8 @@ export const AutoFillPopupMenu: React.FC<{}> = () => { if (skeleton) { forceUpdate(); } - })); + }) + ); return disposable?.dispose; }, [sheetSkeletonManagerService, forceUpdate]); diff --git a/packages/sheets-ui/src/views/defined-name/DefinedName.tsx b/packages/sheets-ui/src/views/defined-name/DefinedName.tsx index 7aca46941b..8320942c49 100644 --- a/packages/sheets-ui/src/views/defined-name/DefinedName.tsx +++ b/packages/sheets-ui/src/views/defined-name/DefinedName.tsx @@ -73,8 +73,7 @@ export function DefinedName({ disable }: { disable: boolean }) { univer-absolute univer-right-0 univer-top-0 univer-flex univer-h-full univer-cursor-pointer univer-items-center univer-justify-center univer-px-1 univer-transition-colors univer-duration-200 hover:univer-bg-gray-100 - `, - { + `, { 'univer-cursor-not-allowed univer-text-gray-300 hover:univer-bg-transparent': disable, })} > diff --git a/packages/sheets-ui/src/views/status-bar/StatusBar.tsx b/packages/sheets-ui/src/views/status-bar/StatusBar.tsx index 8a622d48bf..5e8781a650 100644 --- a/packages/sheets-ui/src/views/status-bar/StatusBar.tsx +++ b/packages/sheets-ui/src/views/status-bar/StatusBar.tsx @@ -56,19 +56,13 @@ export const StatusBar = () => { const [show, setShow] = useState(true); const filteredStatistics = useMemo(() => - statistics.filter((item) => item.show && !item.disable), - [statistics] - ); + statistics.filter((item) => item.show && !item.disable), [statistics]); const firstItem = useMemo(() => - filteredStatistics.find((item) => item.show && !item.disable), - [filteredStatistics] - ); + filteredStatistics.find((item) => item.show && !item.disable), [filteredStatistics]); const showList = useMemo(() => - isSingle && firstItem ? [firstItem] : filteredStatistics, - [isSingle, firstItem, filteredStatistics] - ); + isSingle && firstItem ? [firstItem] : filteredStatistics, [isSingle, firstItem, filteredStatistics]); const updateStatistics = useCallback((state: Nullable) => { const items = state?.values; @@ -179,9 +173,7 @@ export const StatusBar = () => { return renderContent; }; - const renderContent = useStatisticLayout(showList, - ROW_COUNT_THRESHOLD, - CopyableStatisticItem); + const renderContent = useStatisticLayout(showList, ROW_COUNT_THRESHOLD, CopyableStatisticItem); return ( show && ( diff --git a/packages/sheets-zen-editor/package.json b/packages/sheets-zen-editor/package.json index 15f2409624..3c263c7b57 100644 --- a/packages/sheets-zen-editor/package.json +++ b/packages/sheets-zen-editor/package.json @@ -91,7 +91,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets-zen-editor/src/views/zen-editor/ZenEditor.tsx b/packages/sheets-zen-editor/src/views/zen-editor/ZenEditor.tsx index 6e6d9f1752..9d5a07588d 100644 --- a/packages/sheets-zen-editor/src/views/zen-editor/ZenEditor.tsx +++ b/packages/sheets-zen-editor/src/views/zen-editor/ZenEditor.tsx @@ -84,8 +84,7 @@ export function ZenEditor() { initialSnapshot: INITIAL_SNAPSHOT, scrollBar: true, backScrollOffset: 100, - }, - editorDom); + }, editorDom); const resizeObserver = new ResizeObserver(() => { zenEditorService.setPosition(editorDom.getBoundingClientRect()); diff --git a/packages/sheets/package.json b/packages/sheets/package.json index df126873bb..668db3585a 100644 --- a/packages/sheets/package.json +++ b/packages/sheets/package.json @@ -82,7 +82,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/sheets/src/basics/__tests__/utils.spec.ts b/packages/sheets/src/basics/__tests__/utils.spec.ts index ee29222c2b..2f092ec3e5 100644 --- a/packages/sheets/src/basics/__tests__/utils.spec.ts +++ b/packages/sheets/src/basics/__tests__/utils.spec.ts @@ -14,7 +14,8 @@ * limitations under the License. */ -import { cellToRange, type IRange } from '@univerjs/core'; +import type { IRange } from '@univerjs/core'; +import { cellToRange } from '@univerjs/core'; import { describe, expect, it } from 'vitest'; import { generateNullCell, generateNullCellStyle, generateNullCellValue } from '../utils'; @@ -47,12 +48,7 @@ describe('Test utils', () => { }, }, 1: { - 1: { v: null, - p: null, - f: null, - si: null, - custom: null, - }, + 1: { v: null, p: null, f: null, si: null, custom: null }, }, }); }); diff --git a/packages/sheets/src/commands/commands/__tests__/add-merge-command.spec.ts b/packages/sheets/src/commands/commands/__tests__/add-merge-command.spec.ts index cd3c00acfc..cb47e573c3 100644 --- a/packages/sheets/src/commands/commands/__tests__/add-merge-command.spec.ts +++ b/packages/sheets/src/commands/commands/__tests__/add-merge-command.spec.ts @@ -14,9 +14,9 @@ * limitations under the License. */ +import type { Injector, IWorkbookData } from '@univerjs/core'; import { ICommandService, IUniverInstanceService, LocaleService, LocaleType } from '@univerjs/core'; import { beforeEach, describe, expect, it } from 'vitest'; -import type { Injector, IWorkbookData } from '@univerjs/core'; import enUS from '../../../locale/en-US'; import zhCN from '../../../locale/zh-CN'; import { AddWorksheetMergeMutation } from '../../mutations/add-worksheet-merge.mutation'; @@ -152,7 +152,10 @@ describe('add-merge-command', () => { const mergeData = worksheet?.getConfig().mergeData; const { startRow, startColumn, endColumn, endRow } = mergeData![0]; expect({ - startRow, startColumn, endColumn, endRow, + startRow, + startColumn, + endColumn, + endRow, }).toEqual({ startRow: 0, startColumn: 0, diff --git a/packages/sheets/src/commands/commands/__tests__/set-range-values.command.spec.ts b/packages/sheets/src/commands/commands/__tests__/set-range-values.command.spec.ts index bd160ff140..d000ccf94b 100644 --- a/packages/sheets/src/commands/commands/__tests__/set-range-values.command.spec.ts +++ b/packages/sheets/src/commands/commands/__tests__/set-range-values.command.spec.ts @@ -142,10 +142,7 @@ describe('Test set range values commands', () => { endColumn: number ) => Nullable>>>; let getStyle: () => any; - let getStyles: (startRow: number, - startColumn: number, - endRow: number, - endColumn: number) => Nullable[][]>; + let getStyles: (startRow: number, startColumn: number, endRow: number, endColumn: number) => Nullable[][]>; beforeEach(() => { const testBed = createCommandTestBed(getTestWorkbookDataDemo()); @@ -192,10 +189,7 @@ describe('Test set range values commands', () => { } }; - getStyles = (startRow: number, - startColumn: number, - endRow: number, - endColumn: number): Nullable[][]> => { + getStyles = (startRow: number, startColumn: number, endRow: number, endColumn: number): Nullable[][]> => { const values = getValues(startRow, startColumn, endRow, endColumn); const styles = get(IUniverInstanceService).getUniverSheetInstance('test')?.getStyles(); diff --git a/packages/sheets/src/commands/commands/remove-row-col.command.ts b/packages/sheets/src/commands/commands/remove-row-col.command.ts index f113c2c4f8..1b2b211cfc 100644 --- a/packages/sheets/src/commands/commands/remove-row-col.command.ts +++ b/packages/sheets/src/commands/commands/remove-row-col.command.ts @@ -239,11 +239,13 @@ export const RemoveColByRangeCommand: ICommand = ...(intercepted.preUndos ?? []), { id: InsertColMutation.id, params: undoRemoveColParams }, { id: SetRangeValuesMutation.id, params: undoSetRangeValuesParams }, - ...intercepted.undos], + ...intercepted.undos, + ], redoMutations: [ ...(intercepted.preRedos ?? []), { id: RemoveColMutation.id, params: removeColParams }, - ...intercepted.redos], + ...intercepted.redos, + ], }); return true; diff --git a/packages/sheets/src/commands/commands/set-border-command.ts b/packages/sheets/src/commands/commands/set-border-command.ts index 1014b3a17c..2ba1aafcd7 100644 --- a/packages/sheets/src/commands/commands/set-border-command.ts +++ b/packages/sheets/src/commands/commands/set-border-command.ts @@ -223,8 +223,12 @@ function getBorderContext(borderStyleManagerService: BorderStyleManagerService, }, }; return { - worksheet, unitId, subUnitId, - style, color, type, + worksheet, + unitId, + subUnitId, + style, + color, + type, top, left, right, diff --git a/packages/sheets/src/commands/commands/set-col-visible.command.ts b/packages/sheets/src/commands/commands/set-col-visible.command.ts index 7e4074cfaa..992ca567ff 100644 --- a/packages/sheets/src/commands/commands/set-col-visible.command.ts +++ b/packages/sheets/src/commands/commands/set-col-visible.command.ts @@ -169,7 +169,8 @@ export const SetColHiddenCommand: ICommand = { const redoMutationParams: ISetColHiddenMutationParams = { unitId, subUnitId, ranges }; const setSelectionOperationParams: ISetSelectionsOperationParams = { - unitId, subUnitId, + unitId, + subUnitId, selections: getSelectionsAfterHiding(ranges).map((range) => ({ range, primary: getPrimaryForRange(range, worksheet), @@ -179,7 +180,8 @@ export const SetColHiddenCommand: ICommand = { const undoMutationParams = SetColHiddenUndoMutationFactory(accessor, redoMutationParams); const undoSetSelectionsOperationParams: ISetSelectionsOperationParams = { - unitId, subUnitId, + unitId, + subUnitId, reveal: true, selections: ranges.map((range) => ({ range, diff --git a/packages/sheets/src/commands/commands/set-row-visible.command.ts b/packages/sheets/src/commands/commands/set-row-visible.command.ts index 67baad29fd..0a90108df9 100644 --- a/packages/sheets/src/commands/commands/set-row-visible.command.ts +++ b/packages/sheets/src/commands/commands/set-row-visible.command.ts @@ -84,7 +84,9 @@ export const SetSpecificRowsVisibleCommand: ICommand = { id: SetRangeProtectionMutation.id, params: { - ...param, rule: oldRule, + ...param, + rule: oldRule, }, }; return result; diff --git a/packages/sheets/src/controllers/merge-cell.controller.ts b/packages/sheets/src/controllers/merge-cell.controller.ts index 31ad188dc7..0603d8d001 100644 --- a/packages/sheets/src/controllers/merge-cell.controller.ts +++ b/packages/sheets/src/controllers/merge-cell.controller.ts @@ -17,7 +17,10 @@ /* eslint-disable max-lines-per-function */ import type { - ICommandInfo, IMutationInfo, IRange, Workbook, + ICommandInfo, + IMutationInfo, + IRange, + Workbook, } from '@univerjs/core'; import type { IAddWorksheetMergeMutationParams, diff --git a/packages/sheets/src/controllers/number-cell.controller.ts b/packages/sheets/src/controllers/number-cell.controller.ts index a40fecfa97..1917113078 100644 --- a/packages/sheets/src/controllers/number-cell.controller.ts +++ b/packages/sheets/src/controllers/number-cell.controller.ts @@ -21,7 +21,8 @@ import { SheetInterceptorService } from '../services/sheet-interceptor/sheet-int export class NumberCellDisplayController extends Disposable { constructor( - @Inject(SheetInterceptorService) private _sheetInterceptorService: SheetInterceptorService) { + @Inject(SheetInterceptorService) private _sheetInterceptorService: SheetInterceptorService + ) { super(); this._initialize(); diff --git a/packages/sheets/src/controllers/permission/sheet-permission-view-model.controller.ts b/packages/sheets/src/controllers/permission/sheet-permission-view-model.controller.ts index e928d93fe4..5d78f92dda 100644 --- a/packages/sheets/src/controllers/permission/sheet-permission-view-model.controller.ts +++ b/packages/sheets/src/controllers/permission/sheet-permission-view-model.controller.ts @@ -59,8 +59,7 @@ export class SheetPermissionViewModelController extends Disposable { return next(cell); }, - } - )); + })); } private _initViewModelBySheetInterceptor() { @@ -88,7 +87,6 @@ export class SheetPermissionViewModelController extends Disposable { } return next(cell); }, - } - )); + })); } } diff --git a/packages/sheets/src/facade/f-permission.ts b/packages/sheets/src/facade/f-permission.ts index 2e60af3dd7..9ef7245684 100644 --- a/packages/sheets/src/facade/f-permission.ts +++ b/packages/sheets/src/facade/f-permission.ts @@ -124,7 +124,8 @@ export class FPermission extends FBase { throw new Error('sheet protection cannot intersect with range protection'); } const permissionId = await this._authzIoService.create({ - objectType: UnitObject.Worksheet, worksheetObject: { + objectType: UnitObject.Worksheet, + worksheetObject: { collaborators: [], unitID: unitId, strategies: [], @@ -215,7 +216,8 @@ export class FPermission extends FBase { const rule = this._worksheetProtectionPointRuleModel.getRule(unitId, subUnitId); if (!rule) { permissionId = await this._authzIoService.create({ - objectType: UnitObject.Worksheet, worksheetObject: { + objectType: UnitObject.Worksheet, + worksheetObject: { collaborators: [], unitID: unitId, strategies: [], @@ -271,7 +273,8 @@ export class FPermission extends FBase { } | undefined> { // The permission ID generation here only provides the most basic permission type. If need collaborators later, need to expand this const permissionId = await this._authzIoService.create({ - objectType: UnitObject.SelectRange, selectRangeObject: { + objectType: UnitObject.SelectRange, + selectRangeObject: { collaborators: [], unitID: unitId, name: '', diff --git a/packages/sheets/src/facade/f-univer.ts b/packages/sheets/src/facade/f-univer.ts index d37d9eb58a..978dd2b9cd 100644 --- a/packages/sheets/src/facade/f-univer.ts +++ b/packages/sheets/src/facade/f-univer.ts @@ -201,13 +201,11 @@ export class FUniverSheetsMixin extends FUniver implements IFUniverSheetsMixin { this.Event.WorkbookDisposed, () => univerInstanceService.unitDisposed$.subscribe((unit) => { if (unit.type === UniverInstanceType.UNIVER_SHEET) { - this.fireEvent(this.Event.WorkbookDisposed, - { - unitId: unit.getUnitId(), - unitType: unit.type, - snapshot: unit.getSnapshot() as IWorkbookData, - } - ); + this.fireEvent(this.Event.WorkbookDisposed, { + unitId: unit.getUnitId(), + unitType: unit.type, + snapshot: unit.getSnapshot() as IWorkbookData, + }); } }) ); @@ -219,14 +217,12 @@ export class FUniverSheetsMixin extends FUniver implements IFUniverSheetsMixin { if (unit.type === UniverInstanceType.UNIVER_SHEET) { const workbook = unit as Workbook; const workbookUnit = injector.createInstance(FWorkbook, workbook); - this.fireEvent(this.Event.WorkbookCreated, - { - unitId: unit.getUnitId(), - type: unit.type, - workbook: workbookUnit, - unit: workbookUnit, - } - ); + this.fireEvent(this.Event.WorkbookCreated, { + unitId: unit.getUnitId(), + type: unit.type, + workbook: workbookUnit, + unit: workbookUnit, + }); } }) ); diff --git a/packages/sheets/src/facade/f-worksheet.ts b/packages/sheets/src/facade/f-worksheet.ts index e43013a30f..c6f702cf5e 100644 --- a/packages/sheets/src/facade/f-worksheet.ts +++ b/packages/sheets/src/facade/f-worksheet.ts @@ -829,13 +829,12 @@ export class FWorksheet extends FBaseInitialable { range: ranges[0], value: WrapStrategy.WRAP, } as ISetTextWrapCommandParams); - this._commandService.syncExecuteCommand(SetWorksheetRowIsAutoHeightMutation.id, - { - unitId, - subUnitId, - ranges, - autoHeightInfo: auto, - }); + this._commandService.syncExecuteCommand(SetWorksheetRowIsAutoHeightMutation.id, { + unitId, + subUnitId, + ranges, + autoHeightInfo: auto, + }); return this; } diff --git a/packages/sheets/src/services/permission/range-permission/range-protection.service.ts b/packages/sheets/src/services/permission/range-permission/range-protection.service.ts index 1381490acf..04deb35996 100644 --- a/packages/sheets/src/services/permission/range-permission/range-protection.service.ts +++ b/packages/sheets/src/services/permission/range-permission/range-protection.service.ts @@ -70,7 +70,8 @@ export class RangeProtectionService extends Disposable { break; } } - })); + }) + ); } private _initSnapshot() { @@ -91,7 +92,8 @@ export class RangeProtectionService extends Disposable { }; this.disposeWithMe( this._resourceManagerService.registerPluginResource({ - toJson, parseJson, + toJson, + parseJson, pluginName: PLUGIN_NAME, businesses: [UniverType.UNIVER_SHEET], onLoad: (unitId, resources) => { diff --git a/packages/sheets/src/services/permission/worksheet-permission/worksheet-permission.service.ts b/packages/sheets/src/services/permission/worksheet-permission/worksheet-permission.service.ts index 6ba42694ec..189fe39e5c 100644 --- a/packages/sheets/src/services/permission/worksheet-permission/worksheet-permission.service.ts +++ b/packages/sheets/src/services/permission/worksheet-permission/worksheet-permission.service.ts @@ -123,7 +123,8 @@ export class WorksheetPermissionService extends RxDisposable { break; } } - })); + }) + ); } private _initRuleSnapshot() { @@ -143,7 +144,8 @@ export class WorksheetPermissionService extends RxDisposable { }; this.disposeWithMe( this._resourceManagerService.registerPluginResource({ - toJson, parseJson, + toJson, + parseJson, pluginName: RULE_MODEL_PLUGIN_NAME, businesses: [UniverType.UNIVER_SHEET], onLoad: (unitId, resources) => { @@ -197,7 +199,8 @@ export class WorksheetPermissionService extends RxDisposable { }; this.disposeWithMe( this._resourceManagerService.registerPluginResource({ - toJson, parseJson, + toJson, + parseJson, pluginName: POINT_MODEL_PLUGIN_NAME, businesses: [UniverType.UNIVER_SHEET], onLoad: (unitId, resources) => { diff --git a/packages/sheets/src/services/ref-range/__tests__/utils.spec.ts b/packages/sheets/src/services/ref-range/__tests__/utils.spec.ts index cef447e9a8..75df1c31b3 100644 --- a/packages/sheets/src/services/ref-range/__tests__/utils.spec.ts +++ b/packages/sheets/src/services/ref-range/__tests__/utils.spec.ts @@ -15,8 +15,12 @@ */ import type { IMutationInfo, IRange } from '@univerjs/core'; -import { beforeEach, describe, expect, it } from 'vitest'; +import type { IRemoveSheetMutationParams } from '../../../basics'; +import type { IMoveRowsMutationParams } from '../../../commands/mutations/move-rows-cols.mutation'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { MoveRowsMutation } from '../../../commands/mutations/move-rows-cols.mutation'; +import { RemoveSheetMutation } from '../../../commands/mutations/remove-sheet.mutation'; import { EffectRefRangId } from '../type'; import { adjustRangeOnMutation, @@ -39,10 +43,6 @@ import { handleRemoveRowCommon, runRefRangeMutations, } from '../util'; -import { RemoveSheetMutation } from '../../../commands/mutations/remove-sheet.mutation'; -import type { IRemoveSheetMutationParams } from '../../../basics'; -import type { IMoveRowsMutationParams } from '../../../commands/mutations/move-rows-cols.mutation'; -import { MoveRowsMutation } from '../../../commands/mutations/move-rows-cols.mutation'; const countRange = ([a, b, c, d]: readonly [number, number, number, number]) => (a * 1000 + b * 100 + c * 10 + d); @@ -1228,8 +1228,7 @@ describe('test ref-range move', () => { endRow: 10, startColumn: 8, startRow: 6, - }, - { + }, { endColumn: 7, endRow: 10, startColumn: 6, diff --git a/packages/sheets/src/services/ref-range/__tests__/watch-range.spec.ts b/packages/sheets/src/services/ref-range/__tests__/watch-range.spec.ts index a2b586dc81..ee919c5123 100644 --- a/packages/sheets/src/services/ref-range/__tests__/watch-range.spec.ts +++ b/packages/sheets/src/services/ref-range/__tests__/watch-range.spec.ts @@ -15,18 +15,18 @@ */ import type { IMutationInfo, IRange } from '@univerjs/core'; -import { beforeEach, describe, expect, it } from 'vitest'; +import type { IRemoveColMutationParams, IRemoveRowsMutationParams } from '../../../basics'; +import type { IMoveRowsMutationParams } from '../../../commands/mutations/move-rows-cols.mutation'; +import { beforeEach, describe, expect, it } from 'vitest'; +import { MoveRowsMutation } from '../../../commands/mutations/move-rows-cols.mutation'; +import { RemoveColMutation, RemoveRowMutation } from '../../../commands/mutations/remove-row-col.mutation'; import { EffectRefRangId } from '../type'; import { adjustRangeOnMutation, handleIRemoveRow, runRefRangeMutations, } from '../util'; -import type { IRemoveColMutationParams, IRemoveRowsMutationParams } from '../../../basics'; -import type { IMoveRowsMutationParams } from '../../../commands/mutations/move-rows-cols.mutation'; -import { MoveRowsMutation } from '../../../commands/mutations/move-rows-cols.mutation'; -import { RemoveColMutation, RemoveRowMutation } from '../../../commands/mutations/remove-row-col.mutation'; describe('test ref-range move', () => { describe('handleMoveRows', () => { @@ -48,7 +48,8 @@ describe('test ref-range move', () => { targetRange: moveTargetRange, unitId: '', subUnitId: '', - }, id: MoveRowsMutation.id, + }, + id: MoveRowsMutation.id, }; }; }); @@ -193,7 +194,8 @@ describe('test ref-range move', () => { targetRange: moveTargetRange, unitId: '', subUnitId: '', - }, id: MoveRowsMutation.id, + }, + id: MoveRowsMutation.id, }; }; }); diff --git a/packages/sheets/src/services/sheet-interceptor/sheet-interceptor.service.ts b/packages/sheets/src/services/sheet-interceptor/sheet-interceptor.service.ts index bf4f8ac771..5d19d1f466 100644 --- a/packages/sheets/src/services/sheet-interceptor/sheet-interceptor.service.ts +++ b/packages/sheets/src/services/sheet-interceptor/sheet-interceptor.service.ts @@ -387,7 +387,8 @@ export class SheetInterceptorService extends Disposable { worksheet, workbook, rawData, - }); + } + ); }, })); diff --git a/packages/slides-ui/package.json b/packages/slides-ui/package.json index 45b7aed081..c68bed2caf 100644 --- a/packages/slides-ui/package.json +++ b/packages/slides-ui/package.json @@ -85,7 +85,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/slides-ui/src/controllers/slide-editing.render-controller.ts b/packages/slides-ui/src/controllers/slide-editing.render-controller.ts index 073d533244..3ad1c3285f 100644 --- a/packages/slides-ui/src/controllers/slide-editing.render-controller.ts +++ b/packages/slides-ui/src/controllers/slide-editing.render-controller.ts @@ -21,7 +21,8 @@ import type { IPosition, Nullable, SlideDataModel, - UnitModel } from '@univerjs/core'; + UnitModel, +} from '@univerjs/core'; import type { IDocObjectParam, IEditorInputConfig } from '@univerjs/docs-ui'; import type { DocBackground, diff --git a/packages/slides-ui/src/services/slide-popup-manager.service.ts b/packages/slides-ui/src/services/slide-popup-manager.service.ts index 261896b5a1..1584762abb 100644 --- a/packages/slides-ui/src/services/slide-popup-manager.service.ts +++ b/packages/slides-ui/src/services/slide-popup-manager.service.ts @@ -14,18 +14,16 @@ * limitations under the License. */ +import type { IDisposable } from '@univerjs/core'; +import type { BaseObject, IBoundRectNoAngle, IRender, Scene } from '@univerjs/engine-render'; +import type { IPopup } from '@univerjs/ui'; import { Disposable, DisposableCollection, ICommandService, Inject, IUniverInstanceService, UniverInstanceType } from '@univerjs/core'; import { IRenderManagerService, pxToNum } from '@univerjs/engine-render'; import { SLIDE_KEY } from '@univerjs/slides'; import { ICanvasPopupService } from '@univerjs/ui'; import { BehaviorSubject } from 'rxjs'; -import type { IDisposable } from '@univerjs/core'; -import type { BaseObject, IBoundRectNoAngle, IRender, Scene } from '@univerjs/engine-render'; -import type { IPopup } from '@univerjs/ui'; -export interface ISlideCanvasPopup extends Pick { +export interface ISlideCanvasPopup extends Pick { mask?: boolean; extraProps?: Record; } diff --git a/packages/slides/package.json b/packages/slides/package.json index 3000065878..89ff91daea 100644 --- a/packages/slides/package.json +++ b/packages/slides/package.json @@ -63,7 +63,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index ec23bf6764..997770f8d8 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -59,7 +59,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/thread-comment-ui/package.json b/packages/thread-comment-ui/package.json index 90980eb7a8..dfc2609c95 100644 --- a/packages/thread-comment-ui/package.json +++ b/packages/thread-comment-ui/package.json @@ -80,7 +80,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/thread-comment-ui/src/views/thread-comment-panel/index.tsx b/packages/thread-comment-ui/src/views/thread-comment-panel/index.tsx index 45351fab83..2dbac35234 100644 --- a/packages/thread-comment-ui/src/views/thread-comment-panel/index.tsx +++ b/packages/thread-comment-ui/src/views/thread-comment-panel/index.tsx @@ -208,7 +208,8 @@ export const ThreadCommentPanel = (props: IThreadCommentPanelProps) => { { value: 'current', label: localeService.t('threadCommentUI.filter.sheet.current'), - }, { + }, + { value: 'all', label: localeService.t('threadCommentUI.filter.sheet.all'), }, @@ -224,7 +225,8 @@ export const ThreadCommentPanel = (props: IThreadCommentPanelProps) => { { value: 'all', label: localeService.t('threadCommentUI.filter.status.all'), - }, { + }, + { value: 'resolved', label: localeService.t('threadCommentUI.filter.status.resolved'), }, diff --git a/packages/thread-comment/package.json b/packages/thread-comment/package.json index 478941f54a..b089e15375 100644 --- a/packages/thread-comment/package.json +++ b/packages/thread-comment/package.json @@ -65,7 +65,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/ui/package.json b/packages/ui/package.json index cad8dc7df8..b015ded6f8 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -96,7 +96,7 @@ "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", "tailwindcss-animate": "^1.0.7", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7", "vue": "^3.5.13" diff --git a/packages/ui/src/components/font-size/index.module.less b/packages/ui/src/components/font-size/index.module.less index 2ca685c9d4..1df30b854f 100644 --- a/packages/ui/src/components/font-size/index.module.less +++ b/packages/ui/src/components/font-size/index.module.less @@ -8,6 +8,7 @@ line-height: 24px; background-color: transparent; border: none; + display: block; input { font-size: var(--font-size-xs); diff --git a/packages/ui/src/components/menu/desktop/Menu.tsx b/packages/ui/src/components/menu/desktop/Menu.tsx index e7016dc72f..36c289694c 100644 --- a/packages/ui/src/components/menu/desktop/Menu.tsx +++ b/packages/ui/src/components/menu/desktop/Menu.tsx @@ -28,7 +28,8 @@ import { clsx, Menu as DesignMenu, MenuItem as DesignMenuItem, - MenuItemGroup as DesignMenuItemGroup, SubMenu as DesignSubMenu, + MenuItemGroup as DesignMenuItemGroup, + SubMenu as DesignSubMenu, } from '@univerjs/design'; import { CheckMarkSingle, MoreSingle } from '@univerjs/icons'; import { useEffect, useMemo, useState } from 'react'; diff --git a/packages/ui/src/mobile-ui-plugin.ts b/packages/ui/src/mobile-ui-plugin.ts index b8bd07ecba..1f51b704b3 100644 --- a/packages/ui/src/mobile-ui-plugin.ts +++ b/packages/ui/src/mobile-ui-plugin.ts @@ -95,7 +95,8 @@ export class UniverMobileUIPlugin extends Plugin { // controllers [ - IUIController, { + IUIController, + { useFactory: (injector: Injector) => injector.createInstance(MobileUIController, this._config), deps: [Injector], }, diff --git a/packages/ui/src/views/components/global-zone/GlobalZone.tsx b/packages/ui/src/views/components/global-zone/GlobalZone.tsx index 2b079feeec..b9f1cecd50 100644 --- a/packages/ui/src/views/components/global-zone/GlobalZone.tsx +++ b/packages/ui/src/views/components/global-zone/GlobalZone.tsx @@ -19,7 +19,6 @@ import { useEffect, useMemo, useState } from 'react'; import { ComponentManager } from '../../../common/component-manager'; import { IGlobalZoneService } from '../../../services/global-zone/global-zone.service'; import { useDependency, useObservable } from '../../../utils/di'; -import styles from './index.module.less'; export function GlobalZone() { const globalZoneService = useDependency(IGlobalZoneService); @@ -27,8 +26,6 @@ export function GlobalZone() { const componentKey = useObservable(globalZoneService.componentKey$, globalZoneService.componentKey); const componentManager = useDependency(ComponentManager); - const _className = clsx(styles.globalZone, styles.globalZoneOpen); - const Component = useMemo(() => { const Component = componentManager.get(componentKey ?? ''); if (Component) { @@ -50,5 +47,17 @@ export function GlobalZone() { return null; } - return
{Component && }
; + return ( +
+ {Component && } +
+ ); } diff --git a/packages/ui/src/views/components/global-zone/index.module.less b/packages/ui/src/views/components/global-zone/index.module.less deleted file mode 100644 index 9e769d18ac..0000000000 --- a/packages/ui/src/views/components/global-zone/index.module.less +++ /dev/null @@ -1,21 +0,0 @@ -.global-zone { - position: absolute; - display: none; - - &-open { - z-index: 100; - top: 0; - left: 0; - - display: block; - - width: 100%; - height: 100%; - - background: rgb(var(--bg-color)); - } - - &-close { - display: none; - } -} diff --git a/packages/ui/src/views/components/popup/RectPopup.tsx b/packages/ui/src/views/components/popup/RectPopup.tsx index 7f306199d9..cfdf66a7d2 100644 --- a/packages/ui/src/views/components/popup/RectPopup.tsx +++ b/packages/ui/src/views/components/popup/RectPopup.tsx @@ -147,10 +147,7 @@ function RectPopup(props: IRectPopupProps) { }); return () => anchorRectSub.unsubscribe(); - }, - - [anchorRect$, direction] - ); + }, [anchorRect$, direction]); useEffect(() => { const handleClickOther = (e: MouseEvent) => { diff --git a/packages/ui/src/views/components/popup/single-canvas-popup.tsx b/packages/ui/src/views/components/popup/single-canvas-popup.tsx deleted file mode 100644 index efb09d74b3..0000000000 --- a/packages/ui/src/views/components/popup/single-canvas-popup.tsx +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright 2023-present DreamNum Co., Ltd. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import type { IPopup } from '../../../services/popup/canvas-popup.service'; -import React, { useEffect, useMemo, useState } from 'react'; -import { animationFrameScheduler, combineLatest, map, of, throttleTime } from 'rxjs'; -import { useObservableRef } from '../../../utils/di'; -import { RectPopup } from './RectPopup'; - -interface ISingleCanvasPopupProps { - popup: IPopup; - children?: React.ReactNode; -} - -const SingleCanvasPopup = ({ popup, children }: ISingleCanvasPopupProps) => { - const [hidden, setHidden] = useState(false); - const anchorRect$ = useMemo(() => popup.anchorRect$.pipe( - throttleTime(0, animationFrameScheduler), - map((anchorRect) => { - const { bottom, left, right, top } = anchorRect; - const [x = 0, y = 0] = popup.offset ?? []; - return { - left: left - x, - right: right + x, - top: top - y, - bottom: bottom + y, - }; - }) - ), [popup.anchorRect$, popup.offset]); - const hiddenRects$ = useMemo(() => popup.hiddenRects$?.pipe(throttleTime(0, animationFrameScheduler)) ?? of([]), [popup.hiddenRects$]); - const excludeRects$ = useMemo(() => popup.excludeRects$?.pipe(throttleTime(0, animationFrameScheduler)), [popup.excludeRects$]); - const excludeRectsRef = useObservableRef(excludeRects$, popup.excludeRects); - const { canvasElement, hideOnInvisible = true, hiddenType = 'destroy' } = popup; - - useEffect(() => { - if (!hideOnInvisible) { - return; - } - - const anchorRectSub = combineLatest([anchorRect$, hiddenRects$]).subscribe(([rectWithOffset, hiddenRects]) => { - const rect = canvasElement.getBoundingClientRect(); - const { top, left, bottom, right } = rect; - const rectHeight = rectWithOffset.bottom - rectWithOffset.top; - const rectWidth = rectWithOffset.right - rectWithOffset.left; - - const isInHiddenRect = hiddenRects.some((hiddenRect) => { - return rectWithOffset.top >= (hiddenRect.top - (0.5 * rectHeight)) && - rectWithOffset.bottom <= (hiddenRect.bottom + (0.5 * rectHeight)) && - rectWithOffset.left >= (hiddenRect.left - (0.5 * rectWidth)) && - rectWithOffset.right <= (hiddenRect.right + (0.5 * rectWidth)); - }); - - if (rectWithOffset.bottom < top || rectWithOffset.top > bottom || rectWithOffset.right < left || rectWithOffset.left > right || isInHiddenRect) { - setHidden(true); - } else { - setHidden(false); - } - }); - - return () => anchorRectSub.unsubscribe(); - }, [canvasElement, hideOnInvisible, anchorRect$, hiddenRects$]); - if ((hidden && hiddenType === 'destroy')) { - return null; - } - - return ( - - ); -}; - -export type { ISingleCanvasPopupProps }; -export { SingleCanvasPopup }; diff --git a/packages/ui/src/views/components/ribbon/Button/ToolbarButton.tsx b/packages/ui/src/views/components/ribbon/Button/ToolbarButton.tsx index 1a7f2c3786..927381ba08 100644 --- a/packages/ui/src/views/components/ribbon/Button/ToolbarButton.tsx +++ b/packages/ui/src/views/components/ribbon/Button/ToolbarButton.tsx @@ -89,7 +89,7 @@ export function ToolbarButton(props: IBaseToolbarButtonProps) { className={clsx(` univer-flex univer-h-6 univer-min-w-6 univer-cursor-pointer univer-items-center univer-justify-center univer-rounded univer-border-none univer-bg-transparent univer-p-0 univer-text-base univer-text-gray-900 - univer-outline-none + univer-outline-none univer-transition-colors [&:disabled]:univer-cursor-not-allowed [&:disabled]:univer-text-gray-200 [&:disabled]:hover:univer-bg-transparent hover:univer-bg-gray-100 diff --git a/packages/ui/src/views/components/ribbon/Ribbon.tsx b/packages/ui/src/views/components/ribbon/Ribbon.tsx index aa5d69be0b..68d4545c02 100644 --- a/packages/ui/src/views/components/ribbon/Ribbon.tsx +++ b/packages/ui/src/views/components/ribbon/Ribbon.tsx @@ -17,15 +17,14 @@ import type { ComponentType } from 'react'; import type { IMenuSchema } from '../../../services/menu/menu-manager.service'; import { LocaleService } from '@univerjs/core'; -import { clsx } from '@univerjs/design'; +import { clsx, Separator } from '@univerjs/design'; import { MoreFunctionSingle } from '@univerjs/icons'; -import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; +import { Fragment, useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { IMenuManagerService } from '../../../services/menu/menu-manager.service'; import { MenuManagerPosition, RibbonPosition } from '../../../services/menu/types'; import { useDependency } from '../../../utils/di'; import { ComponentContainer } from '../ComponentContainer'; import { ToolbarButton } from '../ribbon/Button/ToolbarButton'; -import styles from './index.module.less'; import { ToolbarItem } from './ToolbarItem'; import { DropdownWrapper, TooltipWrapper } from './TooltipButtonWrapper'; @@ -33,6 +32,10 @@ interface IRibbonProps { headerMenuComponents?: Set; } +function Divider() { + return ; +} + export function Ribbon(props: IRibbonProps) { const { headerMenuComponents } = props; @@ -108,7 +111,9 @@ export function Ribbon(props: IRibbonProps) { for (const item of allGroups) { if (item.children) { const visibleChildren = item.children.filter((child) => !collapsedIds.includes(child.key)); - visibleGroups.push({ ...item, children: visibleChildren }); + if (visibleChildren.length > 0) { + visibleGroups.push({ ...item, children: visibleChildren }); + } if (visibleChildren.length < item.children.length) { hiddenGroups.push({ ...item, children: item.children.filter((child) => collapsedIds.includes(child.key)) }); @@ -125,24 +130,27 @@ export function Ribbon(props: IRibbonProps) { const fakeToolbarContent = useMemo(() => ( activeGroup.allGroups.map((groupItem) => ( -
- {groupItem.children?.map((child) => ( - child.item && ( - { - if (ref?.el) { - toolbarItemRefs.current[child.key] = { - el: ref.el, - key: child.key, - }; - } - }} - /> - ) - ))} -
+ +
+ {groupItem.children?.map((child) => ( + child.item && ( + { + if (ref?.el) { + toolbarItemRefs.current[child.key] = { + el: ref.el, + key: child.key, + }; + } + }} + /> + ) + ))} +
+ +
)) ), [activeGroup.allGroups]); @@ -190,50 +198,75 @@ export function Ribbon(props: IRibbonProps) { )} -
+
- {activeGroup.visibleGroups.map((groupItem) => (groupItem.children?.length || groupItem.item) && ( -
- {groupItem.children - ? groupItem.children?.map((child) => ( - child.item && - )) - : ( - groupItem.item && - )} -
+ {activeGroup.visibleGroups.map((groupItem, index) => (groupItem.children?.length || groupItem.item) && ( + +
+ {groupItem.children + ? groupItem.children?.map((child) => ( + child.item && + )) + : ( + groupItem.item && + )} +
+ {index < activeGroup.visibleGroups.length - 1 && activeGroup.visibleGroups.some((groupItem) => groupItem.children?.length || !!groupItem.item) && } +
))} {/* overflow menu items */} {collapsedIds.length > 0 && ( - - - {activeGroup.hiddenGroups.map((groupItem) => ( -
- {groupItem.children - ? groupItem.children?.map((child) => ( - child.item && - )) - : ( - groupItem.item && - )} -
- ))} -
- )} - > - - - - - + <> + + + + {activeGroup.hiddenGroups.map((groupItem) => ( +
+
+ {groupItem.children + ? groupItem.children?.map((child) => ( + child.item && + )) + : ( + groupItem.item && + )} +
+
+ ))} +
+ )} + > + + + + + + )}
diff --git a/packages/ui/src/views/components/ribbon/ToolbarItem.tsx b/packages/ui/src/views/components/ribbon/ToolbarItem.tsx index 385cbc6f82..12024655e7 100644 --- a/packages/ui/src/views/components/ribbon/ToolbarItem.tsx +++ b/packages/ui/src/views/components/ribbon/ToolbarItem.tsx @@ -28,7 +28,6 @@ import { MenuItemType } from '../../../services/menu/menu'; import { useDependency, useObservable } from '../../../utils/di'; import { ToolbarButton } from './Button/ToolbarButton'; import { useToolbarItemStatus } from './hook'; -import styles from './index.module.less'; import { DropdownMenuWrapper, TooltipWrapper } from './TooltipButtonWrapper'; export const ToolbarItem = forwardRef>((props, ref) => { @@ -105,17 +104,21 @@ export const ToolbarItem = forwardRef
- +
@@ -168,9 +172,15 @@ export const ToolbarItem = forwardRef
- +
diff --git a/packages/ui/src/views/components/ribbon/TooltipButtonWrapper.tsx b/packages/ui/src/views/components/ribbon/TooltipButtonWrapper.tsx index 5002b43eb9..163c348336 100644 --- a/packages/ui/src/views/components/ribbon/TooltipButtonWrapper.tsx +++ b/packages/ui/src/views/components/ribbon/TooltipButtonWrapper.tsx @@ -79,7 +79,8 @@ export const TooltipWrapper = forwardRef((pro ); }); -export function DropdownWrapper({ children, overlay, disabled }: { children: ReactNode; overlay: ReactNode; disabled?: boolean }) { +export function DropdownWrapper(props: Omit, 'overlay'> & { overlay: ReactNode; align?: 'start' | 'end' | 'center' }) { + const { children, overlay, disabled, align = 'start' } = props; const { setDropdownVisible } = useContext(TooltipWrapperContext); function handleVisibleChange(visible: boolean) { @@ -88,7 +89,7 @@ export function DropdownWrapper({ children, overlay, disabled }: { children: Rea return ( {overlay} diff --git a/packages/ui/src/views/components/ribbon/index.module.less b/packages/ui/src/views/components/ribbon/index.module.less deleted file mode 100644 index 7eff69d670..0000000000 --- a/packages/ui/src/views/components/ribbon/index.module.less +++ /dev/null @@ -1,167 +0,0 @@ -@toolbar-btn-size: 24px; - -.toolbar { - user-select: none; - - position: relative; - - display: flex; - align-items: center; - - box-sizing: border-box; - height: 32px; - - font-size: var(--font-size-base); - color: rgb(var(--text-color)); - - background-color: rgb(var(--bg-color-secondary)); - border-bottom: 1px solid rgb(var(--border-color)); - - &-more { - max-width: 80%; - - &-container { - display: grid; - - box-sizing: border-box; - padding: var(--padding-sm); - - background-color: rgb(var(--bg-color-secondary)); - border-radius: var(--border-radius-base); - box-shadow: var(--box-shadow-base); - - .toolbar-group { - flex-wrap: wrap; - - &:not(:last-child) { - &::after { - content: initial; - } - - > * { - margin-bottom: var(--margin-xs); - } - } - } - } - } - - &-group { - display: flex; - gap: var(--margin-xs); - align-items: center; - flex-shrink: 0; - - > * { - flex-shrink: 0; - } - - &:not(:last-child, :empty) { - &::after { - content: ''; - - display: block; - - width: 1px; - height: 20px; - - background-color: rgb(var(--border-color)); - flex-shrink: 0; - } - } - } - - &-item { - &-select-button { - cursor: pointer; - - position: relative; - - overflow: hidden; - display: flex; - align-items: center; - - font-size: var(--font-size-lg); - - border-radius: var(--border-radius-base); - - &-disabled { - cursor: not-allowed; - color: rgb(var(--grey-200)); - &.toolbar-item-select-button-activated { - color: rgba(var(--text-color), 0.25); - .toolbar-item-select-button { - &-label, - &-arrow { - &:hover { - background-color: rgb(var(--grey-100)) !important; - } - } - } - } - } - - &-activated { - background-color: rgb(var(--grey-100)); - } - - &-label { - position: relative; - z-index: 1; - - display: flex; - align-items: center; - - height: 100%; - padding: 0 var(--padding-xs); - } - } - - &-select { - cursor: pointer; - - position: relative; - - display: flex; - gap: var(--margin-xs); - align-items: center; - - height: @toolbar-btn-size; - padding: 0 var(--padding-xs); - - font-size: var(--font-size-lg); - - border-radius: var(--border-radius-base); - - &-disabled { - cursor: not-allowed; - color: rgb(var(--grey-200)); - } - - &:hover { - background-color: rgb(var(--grey-100)); - border-radius: var(--border-radius-base); - } - - &-arrow { - display: flex; - align-items: center; - - height: 100%; - - color: rgb(var(--grey-400)); - - &-disabled { - cursor: not-allowed; - color: rgb(var(--grey-200)); - &.toolbar-item-select-arrow-activated { - color: rgba(var(--text-color), 0.25); - &:hover { - background-color: rgb(var(--grey-100)); - } - } - } - } - } - } -} diff --git a/packages/ui/src/views/components/shortcut-panel/ShortcutPanel.tsx b/packages/ui/src/views/components/shortcut-panel/ShortcutPanel.tsx index 7fa4363ee6..9bd2e5c223 100644 --- a/packages/ui/src/views/components/shortcut-panel/ShortcutPanel.tsx +++ b/packages/ui/src/views/components/shortcut-panel/ShortcutPanel.tsx @@ -19,7 +19,6 @@ import React, { useCallback, useEffect } from 'react'; import { IShortcutService } from '../../../services/shortcut/shortcut.service'; import { useDependency, useObservable } from '../../../utils/di'; -import styles from './index.module.less'; interface IRenderShortcutItem { title: string; @@ -86,18 +85,35 @@ export function ShortcutPanel() { }, [shortcutService, updateShortcuts]); return ( -
+
    {shortcutItems.map((group) => ( -
    -
    {group.name}
    - {group.items.map((item, index) => ( -
    - {item.title} - {item.shortcut} -
    - ))} -
    +
  • +
    + {group.name} +
    + +
      li:last]:univer-border-b-0 + [&>li]:univer-border-0 [&>li]:univer-border-b [&>li]:univer-border-solid + [&>li]:univer-border-b-gray-200 + `} + > + {group.items.map((item) => ( +
    • + {item.title} + {item.shortcut} +
    • + ))} +
    +
  • ))} -
+ ); } diff --git a/packages/ui/src/views/components/shortcut-panel/index.module.less b/packages/ui/src/views/components/shortcut-panel/index.module.less deleted file mode 100644 index bb09c08948..0000000000 --- a/packages/ui/src/views/components/shortcut-panel/index.module.less +++ /dev/null @@ -1,38 +0,0 @@ -.shortcut-panel { - &-group-title { - height: 40px; - font-size: 13px; - font-weight: 700; - line-height: 40px; - } - - &-item { - display: flex; - justify-content: space-between; - - height: 40px; - - font-size: 13px; - line-height: 40px; - - &-title { - overflow: hidden; - flex-grow: 1; - flex-shrink: 1; - - max-width: 200px; - - text-overflow: ellipsis; - text-wrap: nowrap; - } - - &-shortcut { - flex-grow: 0; - flex-shrink: 0; - } - - &:not(:last-of-type) { - border-bottom: 1px solid rgb(var(--grey-200)); - } - } -} diff --git a/packages/uniscript/package.json b/packages/uniscript/package.json index 1f8c020552..a6486a5ed3 100644 --- a/packages/uniscript/package.json +++ b/packages/uniscript/package.json @@ -82,7 +82,7 @@ "react": "18.3.1", "rxjs": "^7.8.1", "tailwindcss": "^3.4.17", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/packages/watermark/package.json b/packages/watermark/package.json index a47992f795..ef67714fbc 100644 --- a/packages/watermark/package.json +++ b/packages/watermark/package.json @@ -73,7 +73,7 @@ "devDependencies": { "@univerjs-infra/shared": "workspace:*", "rxjs": "^7.8.1", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vite": "^6.2.0", "vitest": "^3.0.7" } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b27e53aeb2..4e1067fcdd 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,28 +16,28 @@ importers: devDependencies: '@antfu/eslint-config': specifier: 4.3.0 - version: 4.3.0(@eslint-react/eslint-plugin@1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3))(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.4.38)(eslint-plugin-format@1.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + version: 4.3.0(@eslint-react/eslint-plugin@1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2))(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(@vue/compiler-sfc@3.4.38)(eslint-plugin-format@1.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) '@commitlint/cli': specifier: ^19.7.1 - version: 19.7.1(@types/node@22.13.5)(typescript@5.7.3) + version: 19.7.1(@types/node@22.13.5)(typescript@5.8.2) '@commitlint/config-conventional': specifier: ^19.7.1 version: 19.7.1 '@eslint-react/eslint-plugin': - specifier: ^1.28.0 - version: 1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3) + specifier: ^1.29.0 + version: 1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2) '@playwright/test': specifier: ^1.50.1 version: 1.50.1 '@release-it-plugins/workspaces': specifier: ^4.2.0 - version: 4.2.0(release-it@17.11.0(typescript@5.7.3)) + version: 4.2.0(release-it@17.11.0(typescript@5.8.2)) '@release-it/conventional-changelog': specifier: ^9.0.4 - version: 9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.11.0(typescript@5.7.3)) + version: 9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.11.0(typescript@5.8.2)) '@storybook/react': specifier: 8.6.0 - version: 8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) + version: 8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) '@types/node': specifier: ^22.13.5 version: 22.13.5 @@ -78,8 +78,8 @@ importers: specifier: ^7.37.4 version: 7.37.4(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-hooks: - specifier: 5.1.0 - version: 5.1.0(eslint@9.21.0(jiti@2.4.2)) + specifier: 5.2.0 + version: 5.2.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-refresh: specifier: ^0.4.19 version: 0.4.19(eslint@9.21.0(jiti@2.4.2)) @@ -100,7 +100,7 @@ importers: version: 19.0.0(react@19.0.0) release-it: specifier: ^17.11.0 - version: 17.11.0(typescript@5.7.3) + version: 17.11.0(typescript@5.8.2) serve: specifier: ^14.2.4 version: 14.2.4 @@ -111,8 +111,8 @@ importers: specifier: ^2.4.4 version: 2.4.4 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vitest: specifier: ^3.0.7 version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) @@ -121,16 +121,16 @@ importers: dependencies: '@typescript-eslint/parser': specifier: ^8.24.1 - version: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + version: 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@vitejs/plugin-react': specifier: ^4.3.4 - version: 4.3.4(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + version: 4.3.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.4.38(typescript@5.7.3)) + version: 5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.4.38(typescript@5.8.2)) '@vitest/coverage-istanbul': specifier: ^3.0.7 - version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + version: 3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) autoprefixer: specifier: ^10.4.20 version: 10.4.20(postcss@8.4.49) @@ -160,16 +160,16 @@ importers: version: 3.4.17 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vite-plugin-dts: specifier: ^4.5.0 - version: 4.5.0(@types/node@22.13.5)(rollup@4.34.8)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + version: 4.5.0(@types/node@22.13.8)(rollup@4.34.8)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) vite-plugin-external: specifier: ^6.0.1 version: 6.0.1 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -187,17 +187,17 @@ importers: common/storybook: dependencies: '@chromatic-com/storybook': - specifier: ^3.2.4 - version: 3.2.4(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) + specifier: ^3.2.5 + version: 3.2.5(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) '@storybook/addon-essentials': - specifier: ^8.5.8 - version: 8.5.8(@types/react@19.0.8)(storybook@8.5.8(prettier@3.4.2)) + specifier: ^8.6.3 + version: 8.6.3(@types/react@19.0.8)(storybook@8.6.3(prettier@3.4.2)) '@storybook/addon-interactions': - specifier: ^8.5.8 - version: 8.5.8(storybook@8.5.8(prettier@3.4.2)) + specifier: ^8.6.3 + version: 8.6.3(storybook@8.6.3(prettier@3.4.2)) '@storybook/addon-links': - specifier: ^8.5.8 - version: 8.5.8(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) + specifier: ^8.6.3 + version: 8.6.3(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) '@storybook/addon-styling-webpack': specifier: ^1.0.1 version: 1.0.1(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) @@ -205,20 +205,20 @@ importers: specifier: ^2.1.0 version: 2.1.0(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) '@storybook/blocks': - specifier: ^8.5.8 - version: 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) + specifier: ^8.6.3 + version: 8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) '@storybook/icons': specifier: ^1.3.2 version: 1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) '@storybook/react': - specifier: ^8.5.8 - version: 8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) + specifier: ^8.6.3 + version: 8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) '@storybook/react-webpack5': - specifier: ^8.5.8 - version: 8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) + specifier: ^8.6.3 + version: 8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) '@storybook/types': - specifier: ^8.5.8 - version: 8.5.8(storybook@8.5.8(prettier@3.4.2)) + specifier: ^8.6.3 + version: 8.6.3(storybook@8.6.3(prettier@3.4.2)) '@univerjs/core': specifier: workspace:* version: link:../../packages/core @@ -236,10 +236,10 @@ importers: version: 12.2.0(less@4.2.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) postcss-loader: specifier: ^8.1.1 - version: 8.1.1(postcss@8.5.3)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) + version: 8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) storybook: - specifier: ^8.5.8 - version: 8.5.8(prettier@3.4.2) + specifier: ^8.6.3 + version: 8.6.3(prettier@3.4.2) storybook-addon-swc: specifier: ^1.2.0 version: 1.2.0(@swc/core@1.10.18)(terser-webpack-plugin@5.3.11(@swc/core@1.10.18)(esbuild@0.25.0)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)))(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) @@ -250,8 +250,8 @@ importers: specifier: ^4.2.0 version: 4.2.0 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -459,7 +459,7 @@ importers: version: 19.0.0(react@19.0.0) react-mosaic-component: specifier: ^6.1.1 - version: 6.1.1(@types/node@22.13.5)(@types/react@19.0.8)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + version: 6.1.1(@types/node@22.13.8)(@types/react@19.0.8)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) devDependencies: '@types/fs-extra': specifier: ^11.0.4 @@ -484,7 +484,7 @@ importers: version: 2.1.1(esbuild@0.25.0) esbuild-plugin-vue3: specifier: ^0.4.2 - version: 0.4.2(sass@1.77.5)(vue@3.4.38(typescript@5.7.3)) + version: 0.4.2(sass@1.77.5)(vue@3.4.38(typescript@5.8.2)) esbuild-style-plugin: specifier: ^1.6.3 version: 1.6.3 @@ -510,8 +510,8 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.17) typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 mockdata: dependencies: @@ -568,8 +568,8 @@ importers: specifier: workspace:* version: link:../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 packages-experimental/action-recorder: dependencies: @@ -611,14 +611,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/debugger: dependencies: @@ -669,18 +669,18 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) optionalDependencies: vue: specifier: '>=3.0.0' - version: 3.4.38(typescript@5.7.3) + version: 3.4.38(typescript@5.8.2) packages-experimental/sheets-source-binding: dependencies: @@ -698,14 +698,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uni-docs-ui: dependencies: @@ -744,14 +744,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uni-formula: dependencies: @@ -763,14 +763,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uni-formula-ui: dependencies: @@ -827,14 +827,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uni-sheets-ui: dependencies: @@ -885,14 +885,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uni-slides-ui: dependencies: @@ -937,14 +937,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages-experimental/uniui: dependencies: @@ -998,14 +998,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/core: dependencies: @@ -1059,14 +1059,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/data-validation: dependencies: @@ -1087,14 +1087,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/design: dependencies: @@ -1187,14 +1187,14 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.17) typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs: dependencies: @@ -1212,14 +1212,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-drawing: dependencies: @@ -1234,14 +1234,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-drawing-ui: dependencies: @@ -1295,14 +1295,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-hyper-link: dependencies: @@ -1314,14 +1314,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-hyper-link-ui: dependencies: @@ -1366,14 +1366,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-mention-ui: dependencies: @@ -1412,14 +1412,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-thread-comment-ui: dependencies: @@ -1464,14 +1464,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/docs-ui: dependencies: @@ -1519,14 +1519,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/drawing: dependencies: @@ -1544,14 +1544,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/drawing-ui: dependencies: @@ -1593,14 +1593,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/engine-formula: dependencies: @@ -1630,14 +1630,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/engine-numfmt: devDependencies: @@ -1645,14 +1645,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/engine-render: dependencies: @@ -1685,14 +1685,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/facade: dependencies: @@ -1773,14 +1773,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/find-replace: dependencies: @@ -1819,14 +1819,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/network: dependencies: @@ -1841,14 +1841,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/rpc: dependencies: @@ -1863,14 +1863,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/rpc-node: dependencies: @@ -1888,14 +1888,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets: dependencies: @@ -1922,14 +1922,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-conditional-formatting: dependencies: @@ -1956,14 +1956,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-conditional-formatting-ui: dependencies: @@ -2029,14 +2029,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-crosshair-highlight: dependencies: @@ -2081,14 +2081,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-data-validation: dependencies: @@ -2121,14 +2121,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-data-validation-ui: dependencies: @@ -2194,14 +2194,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-drawing: dependencies: @@ -2219,14 +2219,14 @@ importers: specifier: workspace:* version: link:../sheets typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-drawing-ui: dependencies: @@ -2286,14 +2286,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-filter: dependencies: @@ -2311,14 +2311,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-filter-ui: dependencies: @@ -2369,14 +2369,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-find-replace: dependencies: @@ -2403,14 +2403,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-formula: dependencies: @@ -2437,14 +2437,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-formula-ui: dependencies: @@ -2501,14 +2501,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-graphics: dependencies: @@ -2523,14 +2523,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-hyper-link: dependencies: @@ -2557,14 +2557,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-hyper-link-ui: dependencies: @@ -2624,14 +2624,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-numfmt: dependencies: @@ -2655,14 +2655,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-numfmt-ui: dependencies: @@ -2716,14 +2716,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-sort: dependencies: @@ -2741,14 +2741,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-sort-ui: dependencies: @@ -2796,14 +2796,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-thread-comment: dependencies: @@ -2827,14 +2827,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-thread-comment-ui: dependencies: @@ -2885,14 +2885,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-ui: dependencies: @@ -2952,14 +2952,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/sheets-zen-editor: dependencies: @@ -3010,14 +3010,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/slides: dependencies: @@ -3032,14 +3032,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/slides-ui: dependencies: @@ -3090,14 +3090,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/telemetry: dependencies: @@ -3109,14 +3109,14 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/thread-comment: dependencies: @@ -3134,14 +3134,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/thread-comment-ui: dependencies: @@ -3183,14 +3183,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/ui: dependencies: @@ -3244,18 +3244,18 @@ importers: specifier: ^1.0.7 version: 1.0.7(tailwindcss@3.4.17) typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) optionalDependencies: vue: specifier: '>=3.0.0' - version: 3.4.38(typescript@5.7.3) + version: 3.4.38(typescript@5.8.2) packages/uniscript: dependencies: @@ -3297,14 +3297,14 @@ importers: specifier: ^3.4.17 version: 3.4.17 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages/watermark: dependencies: @@ -3322,14 +3322,14 @@ importers: specifier: ^7.8.1 version: 7.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) tests/formula-integration: dependencies: @@ -3374,11 +3374,11 @@ importers: specifier: workspace:* version: link:../../common/shared typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.2 + version: 5.8.2 vitest: specifier: ^3.0.7 - version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + version: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) packages: @@ -3620,8 +3620,8 @@ packages: resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} engines: {node: '>=6.9.0'} - '@chromatic-com/storybook@3.2.4': - resolution: {integrity: sha512-5/bOOYxfwZ2BktXeqcCpOVAoR6UCoeART5t9FVy22hoo8F291zOuX4y3SDgm10B1GVU/ZTtJWPT2X9wZFlxYLg==} + '@chromatic-com/storybook@3.2.5': + resolution: {integrity: sha512-Y388ft6po5FmGKdkcqz3r2sW6aMF5DSBaatC0jvT5bI/Dh27RJw3gPTmXJcZVNjteNl6tpiP3qxZ9MswAk5luw==} engines: {node: '>=16.0.0', yarn: '>=1.22.18'} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -4154,20 +4154,20 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint-react/ast@1.28.0': - resolution: {integrity: sha512-KZ0roDM5MZW8h1OH7rr8ePCmsEchg4V4X425mlosAGQivMt0/p+hDq47wJduLi7A0xZ731H7OG7blJvBpBO52A==} + '@eslint-react/ast@1.29.0': + resolution: {integrity: sha512-PuPkv17+xk4SSaR6KU51lU0qALN1Aw2DGhgjx1tvqkJbEadNoVeXCFrOhwx8tfLlNnQSPocGNrLKi7RpW4cXQw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/core@1.28.0': - resolution: {integrity: sha512-V0bjUHReS+/P7ssWUCVmNj0/1yInEuKMCxp5tGWHHFI6OZhszWbbydoe6KVZtMWsbPtuP9Xyl9ZHwMK5Zp4Z4g==} + '@eslint-react/core@1.29.0': + resolution: {integrity: sha512-mi4PhWiqHxVSS6vr34Y3IOLVxZS7qnhI7jBXCkfiTyqVg54OEG5JIvZRejF7ls+92FYFz8+eVfF1rKGjLqCC4Q==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/eff@1.28.0': - resolution: {integrity: sha512-fFHsXs+DHhQMnMrVOUJB/aRJvVouHWF/Zn+wPYr2SXuH2ZTASiDAwJAUWPOgOPy556TwW+SaNpqkaJVDKXcSTg==} + '@eslint-react/eff@1.29.0': + resolution: {integrity: sha512-mTBN6tsydNL5QVp+jb2T2MC9TsO7yazzARSrDMkrCsWBBN01iAQCVA6DSdmTNF5w0SzV25iRyNmw9l6qxZLUQg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/eslint-plugin@1.28.0': - resolution: {integrity: sha512-3tWXx1ekjQ57IE/YgcaQKDHvYWafqquR+kR1ukJMyiRs7/W7d3l5gzjVHPEHmduQ0d5g87oH0Xsbt4ykKdLLaQ==} + '@eslint-react/eslint-plugin@1.29.0': + resolution: {integrity: sha512-owDJEyB8ciGt2jyuCY9CrmDJloTemsE8XRCZOf3T0/pUKlM05MxhOXvvOGhLy99kR0SnPzGhY+yeJXC8Cv9Pzw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -4176,16 +4176,16 @@ packages: typescript: optional: true - '@eslint-react/jsx@1.28.0': - resolution: {integrity: sha512-IUeb13IJnJrhrhjXL7g53/FjQstdw0SYAPFq5BOM8kVQn6bqQhkY17pZt/oaBd0cMzT9rN4UOZPUdTQmcdkj0g==} + '@eslint-react/jsx@1.29.0': + resolution: {integrity: sha512-LJHlS4NT174RuAXc2fDz75nUwmSAJspAPsOJIz4DUWo4uTl6Fs9d0SQ/ddNelqsWlnIYnaHkaWz02Y9bng5nJg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/shared@1.28.0': - resolution: {integrity: sha512-SennAGq/D6TvkUgg4Rn6Qu2xGNF1KFx+sDEbr7A5xCV+PDlZbR+kaPx3Wyt3Rc6i4QyjBfraPoVw5GdinPBZ2g==} + '@eslint-react/shared@1.29.0': + resolution: {integrity: sha512-aRIJzmZQedjfHradfKbL5fst/d2QNZDOxRUR7jvGf24RTAKnt+WUF5LzpmDiReMUqroav/L68TTsTbnjdOqzKg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} - '@eslint-react/var@1.28.0': - resolution: {integrity: sha512-PxcVbuYupbhvlzH1vaXtQMpbU3WJWSHwOlzlJK3d6DddTi6ryH0aPT+nCI8wH0zPgPYBUzkZIa9PLIknV4+DJw==} + '@eslint-react/var@1.29.0': + resolution: {integrity: sha512-9I/0zpBBsWaDDnEL2uQ3JGEYWyWR3AaH0Wob2F0tIDa9gUUOjylmQL2wstImpuTwr04G1iVT7OGMgiJMelgKoQ==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} '@eslint/compat@1.2.6': @@ -4929,130 +4929,127 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@storybook/addon-actions@8.5.8': - resolution: {integrity: sha512-7J0NAz+WDw1NmvmKIh0Qr5cxgVRDPFC5fmngbDNxedk147TkwrgmqOypgEi/SAksHbTWxJclbimoqdcsNtWffA==} + '@storybook/addon-actions@8.6.3': + resolution: {integrity: sha512-0UrVqRoZFRFCqjtR8ODacpJNqi47qDUnsnB5F7e93U9ihSrH2edOBBX6frl11XKYA23rzq7jtnviFTVOpWpG7Q==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-backgrounds@8.5.8': - resolution: {integrity: sha512-TsQFagQ95+d7H3/+qUZKI2B0SEK8iu6CV13cyry9Dm59nn2bBylFrwx4I3xDQUOWMiSF6QIRjCYzxKQ/jJ5OEg==} + '@storybook/addon-backgrounds@8.6.3': + resolution: {integrity: sha512-2mmMpMyUsS8rti2guMR4rk4h5YBLNHidxUqTm+U4nITZFfCXNP76To9hfTczpLTvUEpPxSbPG0sCIeHFaw4NRQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-controls@8.5.8': - resolution: {integrity: sha512-3iifI8mBGPsiPmV9eAYk+tK9i+xuWhVsa+sXz01xTZ/0yoOREpp972hka86mtCqdDTOJIpzh1LmxvB218OssvQ==} + '@storybook/addon-controls@8.6.3': + resolution: {integrity: sha512-j4Oof3nwjyiO6oNP1bJ98Sz1iZlYhdcgHX284yd0wBO91Q5B2GoCeqyCE+yRCh752ZnnYG1gazJrHmiG6gKxVg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-docs@8.5.8': - resolution: {integrity: sha512-zKVUqE0UGiq1gZtY2TX57SYB4RIsdlbTDxKW2JZ9HhZGLvZ5Qb7AvdiKTZxfOepGhuw3UcNXH/zCFkFCTJifMw==} + '@storybook/addon-docs@8.6.3': + resolution: {integrity: sha512-FRABH+r2huMpAK8iUQiFlYZtYenbqtudX3fNKFK9b38eV1R14kWggVG02lsa6upXbzxWVbMLUdOqaZJHxNbO/A==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-essentials@8.5.8': - resolution: {integrity: sha512-sCNvMZqL6dywnyHuZBrWl4f6QXsvpJHOioL3wJJKaaRMZmctbFmS0u6J8TQjmgZhQfyRzuJuhr1gJg9oeqp6AA==} + '@storybook/addon-essentials@8.6.3': + resolution: {integrity: sha512-tH+MwkZ6UwRWyhGdq8izVZAZHGWdeiBY1wpIwdceP1Rl2j9s11Gbddb/JlmiXrC+f/Oiylxghaf7EIksVVqLQQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-highlight@8.5.8': - resolution: {integrity: sha512-kkldtFrY0oQJY/vfNLkV66hVgtp66OO8T68KoZFsmUz4a3iYgzDS8WF+Av2/9jthktFvMchjFr8NKOno9YBGIg==} + '@storybook/addon-highlight@8.6.3': + resolution: {integrity: sha512-LYZsgZt5q3EZBkZjUEELh/5+TDnUP0njuQ5g6skyKil6vj9+2RI4/Vjodp+ni5+xct5aDhXavRyUnPRfclX/Cg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-interactions@8.5.8': - resolution: {integrity: sha512-SDyIV3M+c41QemXgg1OchsFBO6YGZkZcmVeUF8C7aWm5SnzLh6B2OiggiKvRk0v3Eh3rDLXdkx3XdR2F/rG+0Q==} + '@storybook/addon-interactions@8.6.3': + resolution: {integrity: sha512-cDvxuMcjoQdtimNrT4BM9AK0qZJhA0Ep/CWPcVK1bAFzqlzBbe//UZa5It/AeC4EMYAr5rFY+LWEli3YPeOnjQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-links@8.5.8': - resolution: {integrity: sha512-nLfcWhqDCTaEB/zPjzdN+FtsJ3WnvrRE7Uq+UZHF/HDqt7EXicUYCnbzHIF6ReyNBFklr48O/RhotDu9cyUDlw==} + '@storybook/addon-links@8.6.3': + resolution: {integrity: sha512-3wGiMZxWbgdjEgymUrCVG5PwU0vAYF9EiSHsGxiSxje69l08GLD6s7FTLx0HwvuyiNFcigLcuF45XZnB252RtA==} peerDependencies: react: 19.0.0 - storybook: ^8.5.8 + storybook: ^8.6.3 peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.5.8': - resolution: {integrity: sha512-xf84ByTRkFPoNSck6Z5OJ0kXTYAYgmg/0Ke0eCY/CNgwh7lfjYQBrcjuKiYZ6jyRUMLdysXzIfF9/2MeFqLfIg==} + '@storybook/addon-measure@8.6.3': + resolution: {integrity: sha512-FC/3pqM2adSnwyPOd9AxEoZD5XWCMKAk16urQFQ0M4+IzRUdf2OV8cc7aM/oZiBX36+q/UCcUWm2SbQ5nzNJpg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-outline@8.5.8': - resolution: {integrity: sha512-NAC9VWZFg2gwvduzJRVAtxPeQfJjB8xfDDgcGjgLOCSQkZDDOmGVdLXf78pykMQKyuu/0YZ989KufAac6kRG5g==} + '@storybook/addon-outline@8.6.3': + resolution: {integrity: sha512-YklKHRkoDLSWawIIBrEI69RAWEdvhkYCOv+fMLu9zBeVPnkwbtIjXN/I+UJwPCm6jlxeEwEUAvbPWZMMf+BkPQ==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 '@storybook/addon-styling-webpack@1.0.1': resolution: {integrity: sha512-5n+SXPfMTc4m7sWaJWPWjoHYWc6/B111M2Ia55toQ3GV4ON4vVlTgH9FX+EgCkDticElj99HLTMDJkHRj2yvkg==} peerDependencies: webpack: ^5.0.0 - '@storybook/addon-toolbars@8.5.8': - resolution: {integrity: sha512-AfGdMNBp+vOjyiFKlOyUFLIU0kN1QF4PhVBqd0vYkWAk2w9n6a/ZlG0TcJGe7K5+bcvmZDAerYMKbDMSeg9bAw==} + '@storybook/addon-toolbars@8.6.3': + resolution: {integrity: sha512-GTC1GPrFNfWvvBaQQnGuL7ZfGK5Q+3ZovwQA9tnPu7QZEwea/4CXvUyQh1u0NwqrFZkrabOad1XvYfpRuCPGSA==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 - '@storybook/addon-viewport@8.5.8': - resolution: {integrity: sha512-SdoRb4bH99Knj2R+rTcMQQxHrtcIO1GLzTFitAefxBE1OUkq8FNLHMHd0Ip/sCQGLW/5F03U70R2uh7SkhBBYA==} + '@storybook/addon-viewport@8.6.3': + resolution: {integrity: sha512-AixZKiQdBVs7ePj5iV0U1IY2jvH0G7wQJwBRTOq4qC1FKiOsZEYmrwc3wLUBUlVqyenXFKN+H40r4VhPzzSfLw==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 '@storybook/addon-webpack5-compiler-swc@2.1.0': resolution: {integrity: sha512-mCzNtuqY8LJqj/2vW12o3S/UujRSBFstxRqhOUErrbbOBRyM6RgcPuvytDdRv1npFi8OaKOIz3SoJBT/EtAN3A==} engines: {node: '>=18'} - '@storybook/blocks@8.5.8': - resolution: {integrity: sha512-O6tJDJM83fDm3ZP1+lTf24l7HOTzSRXkkMDD7zB/JHixzlj9p6wI4UQc2lplLadDCa5ya1IwyE7zUDN/0UfC5Q==} + '@storybook/blocks@8.6.3': + resolution: {integrity: sha512-Ieu6kwqdeAcrLzcX2QIqnCd0XWZi46i4eem8W54JRiOMQMYUpZ7onbciRAP58qxEWrZWqgxPS+tiCTaJe48VVQ==} peerDependencies: react: 19.0.0 react-dom: 19.0.0 - storybook: ^8.5.8 + storybook: ^8.6.3 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@storybook/builder-webpack5@8.5.8': - resolution: {integrity: sha512-QaBIMyqWX/eQs4laQBXvAW9M/ylk73WljJySPlTl+8PNVuDtHli24oBJXwx5aV1NT53BLsaKAn/vb2QNL4+G1Q==} + '@storybook/builder-webpack5@8.6.3': + resolution: {integrity: sha512-+Er6wFbi6O1xAqSsCZwqMcOfKM90n2jYDgSixYTsgqhjEcKLvCX9sn5akyRB1pPl5cGq4zBDIG4l9aLzZLLC3Q==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.6.3 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@storybook/components@8.5.8': - resolution: {integrity: sha512-PPEMqWPXn7rX+qISaOOv9CDSuuvG538f0+4M5Ppq2LwpjXecgOG5ktqJF0ZqxmTytT+RpEaJmgjGW0dMAKZswA==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/components@8.6.0': resolution: {integrity: sha512-k5MQAuLPt5KOaa5J4QvX/WKucaiFTMJiEX5lsSaY6qON6Sx8PtnLQxVwWF7BIMW/jLpd94BUxrVjVrQKlwoLKQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core-webpack@8.5.8': - resolution: {integrity: sha512-M2LNQdYp0br8fgKMVtBh7YIo8mQsgALLc4i9PEXRS7wrp+bhvVnA9qhd5xDPzb0Rl4CHYbs4Yvkzo7ZQMibeIQ==} + '@storybook/components@8.6.3': + resolution: {integrity: sha512-q5DQkV+E/j0KfF818RywgqEHjaZTg71q5YY4z0UO8CRSzDQ/VYF6L76oc69corbkJtYAk/GqaYJllzrWykS4sg==} peerDependencies: - storybook: ^8.5.8 + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/core@8.5.8': - resolution: {integrity: sha512-OT02DQhkGpBgn5P+nZOZmbzxqubC4liVqbhpjp/HOGi5cOA3+fCJzDJeSDTu+pPh7dZnopC4XnR+5dWjtOJHdA==} + '@storybook/core-webpack@8.6.3': + resolution: {integrity: sha512-JYrHPwgyiXa4BgfkrUIDyl5Dp1I7xZG+GV7z0m/2wCn1PcDrDJ8iRl2HHbVbHZXYRK3zSp84iRjdBK4DF94HGQ==} + peerDependencies: + storybook: ^8.6.3 + + '@storybook/core@8.6.3': + resolution: {integrity: sha512-0iMTfmo3UFCa1hFJLtThnRIppkIpGPyTL3MElhORP1t5l9lCUq5am0ymbi/TeCbsJPjE86FjeO0NinokL9iQiw==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/csf-plugin@8.5.8': - resolution: {integrity: sha512-9p+TFutbvtPYEmg14UsvqBDWKP/p/+OkIdi+gkwCMw0yiJF/+7ErMHDB0vr5SpJpU7SFQmfpY2c/LaglEtaniw==} + '@storybook/csf-plugin@8.6.3': + resolution: {integrity: sha512-0QDLBcMOxSEt1yH28cvIsoiaIokIxDDShMnxVJHWk/7+KZ3xe4lZBfKCWZspZoJmrxgz10gLRifj1b3ysIFlyA==} peerDependencies: - storybook: ^8.5.8 - - '@storybook/csf@0.1.12': - resolution: {integrity: sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==} + storybook: ^8.6.3 '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -5064,43 +5061,43 @@ packages: react: 19.0.0 react-dom: 19.0.0 - '@storybook/instrumenter@8.5.8': - resolution: {integrity: sha512-+d5bbnwqcSQlj0wkZo6/1b+8rge70EU2wTq14DO22/VSXa9nm3bwPJlEyqBT7laWmC4DJQWHVJwF/790KjT9yg==} + '@storybook/instrumenter@8.6.3': + resolution: {integrity: sha512-Y5n6JWCWdOqok08Hgklsc98TBoqROhAhBRSzNWuIaLsRhz8EziXQtuEkWqmVbyYOys25iTZiK3S8+QQkOzGrBw==} peerDependencies: - storybook: ^8.5.8 - - '@storybook/manager-api@8.5.8': - resolution: {integrity: sha512-ik3yikvYxAJMDFg0s3Pm7hZWucAlkFaaO7e2RlfOctaJFdaEi3evR4RS7GdmS38uKBEk31RC7x+nnIJkqEC59A==} - peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + storybook: ^8.6.3 '@storybook/manager-api@8.6.0': resolution: {integrity: sha512-ddBibYrO3yQCdtZBqQYqfABjR9eS+llvt2NFDajfyQw+zmuNIZfw4BDGKH1WHE4wm/kXmlFFhPHXaHgAPTRPfQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/manager-api@8.6.3': + resolution: {integrity: sha512-7m9MQELc6XpuKIuliqMiQWzl8yVWpUDwTcpr+rTT7l3OfRzw7Y00UFct2tI03YG6EXsxsykw8EmueMQhe0lG5Q==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + '@storybook/node-logger@8.1.6': resolution: {integrity: sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==} - '@storybook/preset-react-webpack@8.5.8': - resolution: {integrity: sha512-8x64BAMQWe66EEBWbhS4EUh3q+0/WynHm5MyGVGU+5zy8WEpSLK5et0xbU2xXJCCJfVEB8Q3Mc/giF3iUoAyZw==} + '@storybook/preset-react-webpack@8.6.3': + resolution: {integrity: sha512-ROZdvtRm0jtApA21DQa4q5FkG3EPiHdYEWp01DxtGQrenl8YV4JBF3va9sYcPFki2gW+lx/iVpAcHfIAR7PS2Q==} engines: {node: '>=18.0.0'} peerDependencies: react: 19.0.0 react-dom: 19.0.0 - storybook: ^8.5.8 + storybook: ^8.6.3 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@storybook/preview-api@8.5.8': - resolution: {integrity: sha512-HJoz2o28VVprnU5OG6JO6CHrD3ah6qVPWixbnmyUKd0hOYF5dayK5ptmeLyUpYX56Eb2KoYcuVaeQqAby4RkNw==} + '@storybook/preview-api@8.6.0': + resolution: {integrity: sha512-c/sZj4Tb+DtdCndcjoFUneUwl2XUdQckqN4nf1SuIJ/BXRbAexlD04fvPJ4wzmwUNg8EQF7BhTWVNDa1RvJz2w==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/preview-api@8.6.0': - resolution: {integrity: sha512-c/sZj4Tb+DtdCndcjoFUneUwl2XUdQckqN4nf1SuIJ/BXRbAexlD04fvPJ4wzmwUNg8EQF7BhTWVNDa1RvJz2w==} + '@storybook/preview-api@8.6.3': + resolution: {integrity: sha512-y2Ic6eHBQD/AwaCHctKOJ4tOM1r7/mPXfhGh0I+Qf8kZPlDTgQcJ6Z7/Ruma1L+ijXPBWouDaPw51gipcX+t9Q==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -5110,13 +5107,6 @@ packages: typescript: '>= 4.x' webpack: '>= 4' - '@storybook/react-dom-shim@8.5.8': - resolution: {integrity: sha512-UT/kGJHPW+HLNCTmI1rV1to+dUZuXKUTaRv2wZ2BUq2/gjIuePyqQZYVQeb0LkZbuH2uviLrPfXpS5d3/RSUJw==} - peerDependencies: - react: 19.0.0 - react-dom: 19.0.0 - storybook: ^8.5.8 - '@storybook/react-dom-shim@8.6.0': resolution: {integrity: sha512-5Y+vMHhcx0xnaNsLQMbkmjc3zkDn/fGBNsiLH2e4POvW3ZQvOxjoyxAsEQaKwLtFgsdCFSd2tR89F6ItYrA2JQ==} peerDependencies: @@ -5124,30 +5114,22 @@ packages: react-dom: 19.0.0 storybook: ^8.6.0 - '@storybook/react-webpack5@8.5.8': - resolution: {integrity: sha512-ZgYrJF7IptRIc0q7aYlrW2oq3EZpLIGWQca3V75jebyOgfiWJ9bOmhTqlItAwg9Jx08VzcmGczcLSWCMzfyAMA==} - engines: {node: '>=18.0.0'} + '@storybook/react-dom-shim@8.6.3': + resolution: {integrity: sha512-vE3LA2TxbzDF1Fso2IgvUtoHc+8a6laKhuJdx8frP5A8M1KGOBfuEPFCCcE49Q90HUlDgwb/zQl1GNq/QjLgWQ==} peerDependencies: react: 19.0.0 react-dom: 19.0.0 - storybook: ^8.5.8 - typescript: '>= 4.2.x' - peerDependenciesMeta: - typescript: - optional: true + storybook: ^8.6.3 - '@storybook/react@8.5.8': - resolution: {integrity: sha512-QYgKpInR2FLiJHsRoGKCzNhKTRNjOssbLZVd3B0ZABUee+AjkwE0Pey7x2XaNAcp9PxSjQXEPGu+DlaP4BWw2Q==} + '@storybook/react-webpack5@8.6.3': + resolution: {integrity: sha512-T4dpvXUMiG7zMLZcFuJNshMr9rUulowl2AyqLd2LjQtN32COAzhn6uKJkFycTHkOMM8qC03WNefc55MNJVtr/w==} engines: {node: '>=18.0.0'} peerDependencies: - '@storybook/test': 8.5.8 react: 19.0.0 react-dom: 19.0.0 - storybook: ^8.5.8 + storybook: ^8.6.3 typescript: '>= 4.2.x' peerDependenciesMeta: - '@storybook/test': - optional: true typescript: optional: true @@ -5166,23 +5148,38 @@ packages: typescript: optional: true - '@storybook/test@8.5.8': - resolution: {integrity: sha512-cpdl9Vk4msRnkINwwSNLklyWXOwAsLAA7JsHMICNPR2GFVc8T+TwZHATcRToCHXhFJTZBMMBYrnqCdD5C2Kr3g==} + '@storybook/react@8.6.3': + resolution: {integrity: sha512-B4WYRWU2Y71UWl4CG3+mcB7duNln9finJyDB8Y1o2CYWUxgEo+3Bnp3k7NUr++tYVkZI1H+28UWeX0rpCkvReQ==} + engines: {node: '>=18.0.0'} peerDependencies: - storybook: ^8.5.8 + '@storybook/test': 8.6.3 + react: 19.0.0 + react-dom: 19.0.0 + storybook: ^8.6.3 + typescript: '>= 4.2.x' + peerDependenciesMeta: + '@storybook/test': + optional: true + typescript: + optional: true - '@storybook/theming@8.5.8': - resolution: {integrity: sha512-/Rm6BV778sCT+3Ok861VYmw9BlEV5zcCq2zg5TOVuk8HqZw7H7VHtubVsjukEuhveYCs+oF+i2tv/II6jh6jdg==} + '@storybook/test@8.6.3': + resolution: {integrity: sha512-UimvhV/PmYoXCwIbGpkyqQfMhjdH2GaHJbV6BWr7M7BHA3kUS6zYJAm2V2CC5SYcmyj7FejLB4tgL7FmLXB6hA==} peerDependencies: - storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + storybook: ^8.6.3 '@storybook/theming@8.6.0': resolution: {integrity: sha512-te7dl0ZXnEyKS4LW+QHc3MP7nurWhWhmClY7G2WKNW9eHenb9zvXkcAQt6c4OWhrJi01CAYoXmZNJP0jEzxRRQ==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 - '@storybook/types@8.5.8': - resolution: {integrity: sha512-XAXi5w+mG8v8m8FFNPE0uDJb5ms39oU+HDOb6hYOYVOt4ezQkKI3g45T9qlqKfdR9rK22zB9JGUYpDir+O7zeA==} + '@storybook/theming@8.6.3': + resolution: {integrity: sha512-sDcWnnko73KOCIc9stQyec9KvTmGOuMswqeKtWh0ha/wsgYB6G2/2j1xOheFmWKPitOsbwgvqtjCP7bRE68uIA==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/types@8.6.3': + resolution: {integrity: sha512-lU2PO4SBhgtDru7TH/18jFNY7I5aFPdmd7BpZk1dkHuOgklOKUU2yC6VtRoRu8cJUmhzuUXET/K/FHOx95c4dw==} peerDependencies: storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 @@ -5392,6 +5389,9 @@ packages: '@types/node@22.13.5': resolution: {integrity: sha512-+lTU0PxZXn0Dr1NBtC7Y8cR21AJr87dLLU953CWA6pMxxv/UDc7jYAY90upcrie1nRcD6XNG5HOYEDtgW5TxAg==} + '@types/node@22.13.8': + resolution: {integrity: sha512-G3EfaZS+iOGYWLLRCEAXdWK9my08oHNZ+FHluRiggIYJPOXzhOiDgpVCUHaUvyIC5/fj7C/p637jdzC666AOKQ==} + '@types/node@22.8.7': resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} @@ -7215,8 +7215,8 @@ packages: peerDependencies: eslint: '>=8.0.0' - eslint-plugin-react-debug@1.28.0: - resolution: {integrity: sha512-GsypuqEV/kzIgKUXRGMUf5+9s/lAC8QTs9IkTzranUnKA2kEKtiHypZ6xPwA4gMvZa8KX6pRjTWylbbsP+Lkzw==} + eslint-plugin-react-debug@1.29.0: + resolution: {integrity: sha512-b+WKuaa0wKOXtCj1DGaxEQQhqUOH/BVOz3fwydeEx3xl9n8+LBHvAy4gzozTZu7MYZRhBzSP5WCysG6hmirQ+A==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7225,8 +7225,8 @@ packages: typescript: optional: true - eslint-plugin-react-dom@1.28.0: - resolution: {integrity: sha512-KjVJL4oSCSDEx1jmQ1ikZ875BkMPN3TcrrjlvqiaOojNXlbGBgo4w4ADndgRWwGOAmv71DDXtTyvb8LaAsAzjA==} + eslint-plugin-react-dom@1.29.0: + resolution: {integrity: sha512-FjnFyN7TPLCCo2g0Nd8SoNKPyEnsMpZ7OyPsJrCUOPzmL6nI+/6JEO9GabU93THZ0bXh7acuh/d0zLmqAhXmSw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7235,8 +7235,8 @@ packages: typescript: optional: true - eslint-plugin-react-hooks-extra@1.28.0: - resolution: {integrity: sha512-aqvRPBr1is5clBMzlUeTJC6TcaIyRDA1lUSUaO5QaCoJ9cc3WpyhhEO4VffX2g028YlwsRVObQz+roRPkCo2dg==} + eslint-plugin-react-hooks-extra@1.29.0: + resolution: {integrity: sha512-0ELoqiCRPlVGwyRT+KW4arYySs67qO393dbLbz6SEYw8RMDjuRER5MhB6O30X+vLKr1xjfoC6fFxz+zk2UFQTw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7245,14 +7245,14 @@ packages: typescript: optional: true - eslint-plugin-react-hooks@5.1.0: - resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + eslint-plugin-react-hooks@5.2.0: + resolution: {integrity: sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-react-naming-convention@1.28.0: - resolution: {integrity: sha512-5EDlIWRWg7nSL15z0j1zpdb8vHbB7DGEMlW3koKsYo65sryicPxWXBybkxg38oXoKrNvwgvjZhXNvftKZle01Q==} + eslint-plugin-react-naming-convention@1.29.0: + resolution: {integrity: sha512-KOoGkwCbORjaQl+vE+l1qtLJVmAweczp2tHew70yQDVUOsCGKUvuE/hVW7JnU7jOH+OEJyDsrv/ENFCXZNE2Rg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7266,8 +7266,8 @@ packages: peerDependencies: eslint: '>=8.40' - eslint-plugin-react-web-api@1.28.0: - resolution: {integrity: sha512-uECq1oF2oiLaETZoxh8e9MVwae2QOLDmZTJhVcOmb3giWgx3UKI/b/sNl7/u/UtUS1dZHvSTRRvE75dTBl3PNw==} + eslint-plugin-react-web-api@1.29.0: + resolution: {integrity: sha512-4JC6nmGGBcB2PTg8nmqpMXeip9Jdlyg0OYzi2GLBIVd6XvZnptTC4IB77PtZ4NoeJA+6rJ5mz9ExH9+w3NliFw==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -7276,8 +7276,8 @@ packages: typescript: optional: true - eslint-plugin-react-x@1.28.0: - resolution: {integrity: sha512-LbDX+3WVAetM1fFX83vXnlO4Eu1NX3+bcsCUS6rEIF+egDYAVQC87Su4ZmXZOdVQI5HTBidJs9Ji7ZwjgCUglw==} + eslint-plugin-react-x@1.29.0: + resolution: {integrity: sha512-SdmIFVcSd9JIIM+bQpH/yuxvtiXiWaoSL5gzPpmAJcSuF0Qy1LDpzhyv3GkkEzGolJwiFXkDvVx3DPpuSz3Xrg==} engines: {bun: '>=1.0.15', node: '>=18.18.0'} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -10262,8 +10262,8 @@ packages: webpack: optional: true - storybook@8.5.8: - resolution: {integrity: sha512-k3QDa7z4a656oO3Mx929KNm+xIdEI2nIDCKatVl1mA6vt+ge+uwoiG+ro182J9LOEppR5XXD2mQQi4u1xNsy6A==} + storybook@8.6.3: + resolution: {integrity: sha512-Vbmd8/FXp6X0AOMak6arcg3WdkHj+2AYJTNHbCPVHsCEbnREyRZIG+Eq5/Ffmy6byiz+4OAX5HwsHGSMR6Xmow==} hasBin: true peerDependencies: prettier: ^2 || ^3 @@ -10666,8 +10666,8 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.2: + resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} hasBin: true @@ -11164,16 +11164,16 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@4.3.0(@eslint-react/eslint-plugin@1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3))(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(@vue/compiler-sfc@3.4.38)(eslint-plugin-format@1.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': + '@antfu/eslint-config@4.3.0(@eslint-react/eslint-plugin@1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2))(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(@vue/compiler-sfc@3.4.38)(eslint-plugin-format@1.0.1(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.21.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.19(eslint@9.21.0(jiti@2.4.2)))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@antfu/install-pkg': 1.0.0 '@clack/prompts': 0.10.0 '@eslint-community/eslint-plugin-eslint-comments': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@eslint/markdown': 6.2.2 - '@stylistic/eslint-plugin': 4.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@vitest/eslint-plugin': 1.1.31(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + '@stylistic/eslint-plugin': 4.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@vitest/eslint-plugin': 1.1.31(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) ansis: 3.15.0 cac: 6.7.14 eslint: 9.21.0(jiti@2.4.2) @@ -11182,16 +11182,16 @@ snapshots: eslint-merge-processors: 2.0.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-antfu: 3.1.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-command: 3.1.0(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-import-x: 4.6.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-import-x: 4.6.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint-plugin-jsdoc: 50.6.3(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-jsonc: 2.19.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-n: 17.15.1(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-perfectionist: 4.9.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + eslint-plugin-perfectionist: 4.9.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint-plugin-regexp: 2.7.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-toml: 0.12.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-unicorn: 57.0.0(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-unused-imports: 4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-vue: 9.32.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-yml: 1.17.0(eslint@9.21.0(jiti@2.4.2)) eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.4.38)(eslint@9.21.0(jiti@2.4.2)) @@ -11203,9 +11203,9 @@ snapshots: vue-eslint-parser: 9.4.3(eslint@9.21.0(jiti@2.4.2)) yaml-eslint-parser: 1.2.3 optionalDependencies: - '@eslint-react/eslint-plugin': 1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3) + '@eslint-react/eslint-plugin': 1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2) eslint-plugin-format: 1.0.1(eslint@9.21.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.1.0(eslint@9.21.0(jiti@2.4.2)) + eslint-plugin-react-hooks: 5.2.0(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-react-refresh: 0.4.19(eslint@9.21.0(jiti@2.4.2)) transitivePeerDependencies: - '@eslint/json' @@ -11474,13 +11474,13 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@chromatic-com/storybook@3.2.4(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))': + '@chromatic-com/storybook@3.2.5(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))': dependencies: chromatic: 11.20.2 filesize: 10.1.6 jsonfile: 6.1.0 react-confetti: 6.2.2(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) strip-ansi: 7.1.0 transitivePeerDependencies: - '@chromatic-com/cypress' @@ -11498,11 +11498,11 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@commitlint/cli@19.7.1(@types/node@22.13.5)(typescript@5.7.3)': + '@commitlint/cli@19.7.1(@types/node@22.13.5)(typescript@5.8.2)': dependencies: '@commitlint/format': 19.5.0 '@commitlint/lint': 19.7.1 - '@commitlint/load': 19.6.1(@types/node@22.13.5)(typescript@5.7.3) + '@commitlint/load': 19.6.1(@types/node@22.13.5)(typescript@5.8.2) '@commitlint/read': 19.5.0 '@commitlint/types': 19.5.0 tinyexec: 0.3.2 @@ -11549,15 +11549,15 @@ snapshots: '@commitlint/rules': 19.6.0 '@commitlint/types': 19.5.0 - '@commitlint/load@19.6.1(@types/node@22.13.5)(typescript@5.7.3)': + '@commitlint/load@19.6.1(@types/node@22.13.5)(typescript@5.8.2)': dependencies: '@commitlint/config-validator': 19.5.0 '@commitlint/execute-rule': 19.5.0 '@commitlint/resolve-extends': 19.5.0 '@commitlint/types': 19.5.0 chalk: 5.4.1 - cosmiconfig: 9.0.0(typescript@5.7.3) - cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) + cosmiconfig-typescript-loader: 6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 @@ -11980,12 +11980,12 @@ snapshots: '@eslint-community/regexpp@4.12.1': {} - '@eslint-react/ast@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@eslint-react/ast@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-react/eff': 1.28.0 + '@eslint-react/eff': 1.29.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) string-ts: 2.2.1 ts-pattern: 5.6.2 transitivePeerDependencies: @@ -11993,17 +11993,17 @@ snapshots: - supports-color - typescript - '@eslint-react/core@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@eslint-react/core@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) birecord: 0.1.1 ts-pattern: 5.6.2 transitivePeerDependencies: @@ -12011,47 +12011,47 @@ snapshots: - supports-color - typescript - '@eslint-react/eff@1.28.0': {} + '@eslint-react/eff@1.29.0': {} - '@eslint-react/eslint-plugin@1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3)': + '@eslint-react/eslint-plugin@1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2)': dependencies: - '@eslint-react/eff': 1.28.0 - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/eff': 1.29.0 + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-react-debug: 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-dom: 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-hooks-extra: 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-naming-convention: 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-web-api: 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - eslint-plugin-react-x: 1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3) + eslint-plugin-react-debug: 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-react-dom: 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-react-hooks-extra: 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-react-naming-convention: 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-react-web-api: 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + eslint-plugin-react-x: 1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - ts-api-utils - '@eslint-react/jsx@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@eslint-react/jsx@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) ts-pattern: 5.6.2 transitivePeerDependencies: - eslint - supports-color - typescript - '@eslint-react/shared@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@eslint-react/shared@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-react/eff': 1.28.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/eff': 1.29.0 + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) picomatch: 4.0.2 ts-pattern: 5.6.2 transitivePeerDependencies: @@ -12059,13 +12059,13 @@ snapshots: - supports-color - typescript - '@eslint-react/var@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@eslint-react/var@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) string-ts: 2.2.1 ts-pattern: 5.6.2 transitivePeerDependencies: @@ -12243,23 +12243,23 @@ snapshots: '@types/react': 19.0.8 react: 19.0.0 - '@microsoft/api-extractor-model@7.30.2(@types/node@22.13.5)': + '@microsoft/api-extractor-model@7.30.2(@types/node@22.13.8)': dependencies: '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.2(@types/node@22.13.5) + '@rushstack/node-core-library': 5.10.2(@types/node@22.13.8) transitivePeerDependencies: - '@types/node' - '@microsoft/api-extractor@7.49.1(@types/node@22.13.5)': + '@microsoft/api-extractor@7.49.1(@types/node@22.13.8)': dependencies: - '@microsoft/api-extractor-model': 7.30.2(@types/node@22.13.5) + '@microsoft/api-extractor-model': 7.30.2(@types/node@22.13.8) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.10.2(@types/node@22.13.5) + '@rushstack/node-core-library': 5.10.2(@types/node@22.13.8) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.14.5(@types/node@22.13.5) - '@rushstack/ts-command-line': 4.23.3(@types/node@22.13.5) + '@rushstack/terminal': 0.14.5(@types/node@22.13.8) + '@rushstack/ts-command-line': 4.23.3(@types/node@22.13.8) lodash: 4.17.21 minimatch: 3.0.8 resolve: 1.22.10 @@ -12690,24 +12690,24 @@ snapshots: '@react-dnd/shallowequal@4.0.2': {} - '@release-it-plugins/workspaces@4.2.0(release-it@17.11.0(typescript@5.7.3))': + '@release-it-plugins/workspaces@4.2.0(release-it@17.11.0(typescript@5.8.2))': dependencies: detect-indent: 6.1.0 detect-newline: 3.1.0 - release-it: 17.11.0(typescript@5.7.3) + release-it: 17.11.0(typescript@5.8.2) semver: 7.6.2 url-join: 4.0.1 validate-peer-dependencies: 1.2.0 walk-sync: 2.2.0 yaml: 2.4.5 - '@release-it/conventional-changelog@9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.11.0(typescript@5.7.3))': + '@release-it/conventional-changelog@9.0.4(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0)(release-it@17.11.0(typescript@5.8.2))': dependencies: concat-stream: 2.0.0 conventional-changelog: 6.0.0(conventional-commits-filter@5.0.0) conventional-recommended-bump: 10.0.0 git-semver-tags: 8.0.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.0.0) - release-it: 17.11.0(typescript@5.7.3) + release-it: 17.11.0(typescript@5.8.2) semver: 7.6.3 transitivePeerDependencies: - conventional-commits-filter @@ -12778,7 +12778,7 @@ snapshots: '@rollup/rollup-win32-x64-msvc@4.34.8': optional: true - '@rushstack/node-core-library@5.10.2(@types/node@22.13.5)': + '@rushstack/node-core-library@5.10.2(@types/node@22.13.8)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -12789,23 +12789,23 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.8 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.14.5(@types/node@22.13.5)': + '@rushstack/terminal@0.14.5(@types/node@22.13.8)': dependencies: - '@rushstack/node-core-library': 5.10.2(@types/node@22.13.5) + '@rushstack/node-core-library': 5.10.2(@types/node@22.13.8) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.8 - '@rushstack/ts-command-line@4.23.3(@types/node@22.13.5)': + '@rushstack/ts-command-line@4.23.3(@types/node@22.13.8)': dependencies: - '@rushstack/terminal': 0.14.5(@types/node@22.13.5) + '@rushstack/terminal': 0.14.5(@types/node@22.13.8) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 @@ -12814,91 +12814,90 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@storybook/addon-actions@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-actions@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) uuid: 9.0.1 - '@storybook/addon-backgrounds@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-backgrounds@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-controls@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-controls@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 dequal: 2.0.3 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-docs@8.5.8(@types/react@19.0.8)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-docs@8.6.3(@types/react@19.0.8)(storybook@8.6.3(prettier@3.4.2))': dependencies: '@mdx-js/react': 3.1.0(@types/react@19.0.8)(react@19.0.0) - '@storybook/blocks': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) - '@storybook/csf-plugin': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) + '@storybook/blocks': 8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) + '@storybook/csf-plugin': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-essentials@8.5.8(@types/react@19.0.8)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-essentials@8.6.3(@types/react@19.0.8)(storybook@8.6.3(prettier@3.4.2))': dependencies: - '@storybook/addon-actions': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-backgrounds': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-controls': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-docs': 8.5.8(@types/react@19.0.8)(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-highlight': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-measure': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-outline': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-toolbars': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/addon-viewport': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - storybook: 8.5.8(prettier@3.4.2) + '@storybook/addon-actions': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-backgrounds': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-controls': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-docs': 8.6.3(@types/react@19.0.8)(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-highlight': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-measure': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-outline': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-toolbars': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/addon-viewport': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - '@storybook/addon-highlight@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-highlight@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/addon-interactions@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-interactions@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/test': 8.5.8(storybook@8.5.8(prettier@3.4.2)) + '@storybook/instrumenter': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/test': 8.6.3(storybook@8.6.3(prettier@3.4.2)) polished: 4.3.1 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/addon-links@8.5.8(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-links@8.6.3(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 19.0.0 - '@storybook/addon-measure@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-measure@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-outline@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 '@storybook/addon-styling-webpack@1.0.1(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0))': @@ -12906,14 +12905,14 @@ snapshots: '@storybook/node-logger': 8.1.6 webpack: 5.98.0(@swc/core@1.10.18)(esbuild@0.25.0) - '@storybook/addon-toolbars@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-toolbars@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/addon-viewport@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/addon-viewport@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: memoizerific: 1.11.3 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) '@storybook/addon-webpack5-compiler-swc@2.1.0(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0))': dependencies: @@ -12923,19 +12922,18 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/blocks@8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.12 '@storybook/icons': 1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 optionalDependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@storybook/builder-webpack5@8.5.8(@swc/core@1.10.18)(esbuild@0.25.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3)': + '@storybook/builder-webpack5@8.6.3(@swc/core@1.10.18)(esbuild@0.25.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2)': dependencies: - '@storybook/core-webpack': 8.5.8(storybook@8.5.8(prettier@3.4.2)) + '@storybook/core-webpack': 8.6.3(storybook@8.6.3(prettier@3.4.2)) '@types/semver': 7.5.8 browser-assert: 1.2.1 case-sensitive-paths-webpack-plugin: 2.4.0 @@ -12943,13 +12941,13 @@ snapshots: constants-browserify: 1.0.0 css-loader: 6.11.0(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) es-module-lexer: 1.6.0 - fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) + fork-ts-checker-webpack-plugin: 8.0.0(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) html-webpack-plugin: 5.6.3(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) magic-string: 0.30.17 path-browserify: 1.0.1 process: 0.11.10 semver: 7.7.1 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) style-loader: 3.3.4(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) terser-webpack-plugin: 5.3.11(@swc/core@1.10.18)(esbuild@0.25.0)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) ts-dedent: 2.2.0 @@ -12961,7 +12959,7 @@ snapshots: webpack-hot-middleware: 2.26.1 webpack-virtual-modules: 0.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - '@rspack/core' - '@swc/core' @@ -12969,22 +12967,22 @@ snapshots: - uglify-js - webpack-cli - '@storybook/components@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/components@8.6.0(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/components@8.6.0(storybook@8.5.8(prettier@3.4.2))': + '@storybook/components@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/core-webpack@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/core-webpack@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) ts-dedent: 2.2.0 - '@storybook/core@8.5.8(prettier@3.4.2)': + '@storybook/core@8.6.3(prettier@3.4.2)(storybook@8.6.3(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.12 + '@storybook/theming': 8.6.3(storybook@8.6.3(prettier@3.4.2)) better-opn: 3.0.2 browser-assert: 1.2.1 esbuild: 0.25.0 @@ -12999,18 +12997,15 @@ snapshots: prettier: 3.4.2 transitivePeerDependencies: - bufferutil + - storybook - supports-color - utf-8-validate - '@storybook/csf-plugin@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/csf-plugin@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) unplugin: 1.16.1 - '@storybook/csf@0.1.12': - dependencies: - type-fest: 2.19.0 - '@storybook/global@5.0.0': {} '@storybook/icons@1.3.2(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': @@ -13018,27 +13013,27 @@ snapshots: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - '@storybook/instrumenter@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/instrumenter@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: '@storybook/global': 5.0.0 '@vitest/utils': 2.1.9 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/manager-api@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/manager-api@8.6.0(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/manager-api@8.6.0(storybook@8.5.8(prettier@3.4.2))': + '@storybook/manager-api@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) '@storybook/node-logger@8.1.6': {} - '@storybook/preset-react-webpack@8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3)': + '@storybook/preset-react-webpack@8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2)': dependencies: - '@storybook/core-webpack': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/react': 8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) - '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) + '@storybook/core-webpack': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/react': 8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) + '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) '@types/semver': 7.5.8 find-up: 5.0.0 magic-string: 0.30.17 @@ -13047,11 +13042,11 @@ snapshots: react-dom: 19.0.0(react@19.0.0) resolve: 1.22.10 semver: 7.7.1 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) tsconfig-paths: 4.2.0 webpack: 5.98.0(@swc/core@1.10.18)(esbuild@0.25.0) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - '@storybook/test' - '@swc/core' @@ -13060,50 +13055,50 @@ snapshots: - uglify-js - webpack-cli - '@storybook/preview-api@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/preview-api@8.6.0(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/preview-api@8.6.0(storybook@8.5.8(prettier@3.4.2))': + '@storybook/preview-api@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0))': + '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0))': dependencies: debug: 4.4.0 endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 micromatch: 4.0.8 - react-docgen-typescript: 2.2.2(typescript@5.7.3) + react-docgen-typescript: 2.2.2(typescript@5.8.2) tslib: 2.8.1 - typescript: 5.7.3 + typescript: 5.8.2 webpack: 5.98.0(@swc/core@1.10.18)(esbuild@0.25.0) transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/react-dom-shim@8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))': dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/react-dom-shim@8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))': + '@storybook/react-dom-shim@8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))': dependencies: react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/react-webpack5@8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3)': + '@storybook/react-webpack5@8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2)': dependencies: - '@storybook/builder-webpack5': 8.5.8(@swc/core@1.10.18)(esbuild@0.25.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) - '@storybook/preset-react-webpack': 8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) - '@storybook/react': 8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3) + '@storybook/builder-webpack5': 8.6.3(@swc/core@1.10.18)(esbuild@0.25.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) + '@storybook/preset-react-webpack': 8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(@swc/core@1.10.18)(esbuild@0.25.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) + '@storybook/react': 8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - '@rspack/core' - '@storybook/test' @@ -13113,62 +13108,61 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.5.8(@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3)': + '@storybook/react@8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2)': dependencies: - '@storybook/components': 8.5.8(storybook@8.5.8(prettier@3.4.2)) + '@storybook/components': 8.6.0(storybook@8.6.3(prettier@3.4.2)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/preview-api': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.5.8(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) - '@storybook/theming': 8.5.8(storybook@8.5.8(prettier@3.4.2)) + '@storybook/manager-api': 8.6.0(storybook@8.6.3(prettier@3.4.2)) + '@storybook/preview-api': 8.6.0(storybook@8.6.3(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) + '@storybook/theming': 8.6.0(storybook@8.6.3(prettier@3.4.2)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) optionalDependencies: - '@storybook/test': 8.5.8(storybook@8.5.8(prettier@3.4.2)) - typescript: 5.7.3 + typescript: 5.8.2 - '@storybook/react@8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2))(typescript@5.7.3)': + '@storybook/react@8.6.3(@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2)))(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2))(typescript@5.8.2)': dependencies: - '@storybook/components': 8.6.0(storybook@8.5.8(prettier@3.4.2)) + '@storybook/components': 8.6.3(storybook@8.6.3(prettier@3.4.2)) '@storybook/global': 5.0.0 - '@storybook/manager-api': 8.6.0(storybook@8.5.8(prettier@3.4.2)) - '@storybook/preview-api': 8.6.0(storybook@8.5.8(prettier@3.4.2)) - '@storybook/react-dom-shim': 8.6.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.5.8(prettier@3.4.2)) - '@storybook/theming': 8.6.0(storybook@8.5.8(prettier@3.4.2)) + '@storybook/manager-api': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/preview-api': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + '@storybook/react-dom-shim': 8.6.3(react-dom@19.0.0(react@19.0.0))(react@19.0.0)(storybook@8.6.3(prettier@3.4.2)) + '@storybook/theming': 8.6.3(storybook@8.6.3(prettier@3.4.2)) react: 19.0.0 react-dom: 19.0.0(react@19.0.0) - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) optionalDependencies: - typescript: 5.7.3 + '@storybook/test': 8.6.3(storybook@8.6.3(prettier@3.4.2)) + typescript: 5.8.2 - '@storybook/test@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/test@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - '@storybook/csf': 0.1.12 '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.5.8(storybook@8.5.8(prettier@3.4.2)) + '@storybook/instrumenter': 8.6.3(storybook@8.6.3(prettier@3.4.2)) '@testing-library/dom': 10.4.0 '@testing-library/jest-dom': 6.5.0 '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) '@vitest/expect': 2.0.5 '@vitest/spy': 2.0.5 - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/theming@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/theming@8.6.0(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/theming@8.6.0(storybook@8.5.8(prettier@3.4.2))': + '@storybook/theming@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@storybook/types@8.5.8(storybook@8.5.8(prettier@3.4.2))': + '@storybook/types@8.6.3(storybook@8.6.3(prettier@3.4.2))': dependencies: - storybook: 8.5.8(prettier@3.4.2) + storybook: 8.6.3(prettier@3.4.2) - '@stylistic/eslint-plugin@4.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@stylistic/eslint-plugin@4.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 4.2.0 espree: 10.3.0 @@ -13372,6 +13366,10 @@ snapshots: dependencies: undici-types: 6.20.0 + '@types/node@22.13.8': + dependencies: + undici-types: 6.20.0 + '@types/node@22.8.7': dependencies: undici-types: 6.19.8 @@ -13420,32 +13418,32 @@ snapshots: '@types/validator@13.12.0': {} - '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.24.1 eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@typescript-eslint/scope-manager': 8.24.1 '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) '@typescript-eslint/visitor-keys': 8.24.1 debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -13459,25 +13457,25 @@ snapshots: '@typescript-eslint/types': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0 - '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: - '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.2) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -13485,7 +13483,7 @@ snapshots: '@typescript-eslint/types@8.25.0': {} - '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.24.1(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 8.24.1 '@typescript-eslint/visitor-keys': 8.24.1 @@ -13494,12 +13492,12 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.25.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.25.0(typescript@5.8.2)': dependencies: '@typescript-eslint/types': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0 @@ -13508,30 +13506,30 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.24.1 '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': + '@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)': dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) + '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -13573,12 +13571,23 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.4.38(typescript@5.7.3))': + '@vitejs/plugin-react@4.3.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': dependencies: - vite: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) - vue: 3.4.38(typescript@5.7.3) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx-self': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-source': 7.25.9(@babel/core@7.26.0) + '@types/babel__core': 7.20.5 + react-refresh: 0.14.2 + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - supports-color - '@vitest/coverage-istanbul@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.4.38(typescript@5.8.2))': + dependencies: + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + vue: 3.4.38(typescript@5.8.2) + + '@vitest/coverage-istanbul@3.0.7(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': dependencies: '@istanbuljs/schema': 0.1.3 debug: 4.4.0 @@ -13590,16 +13599,16 @@ snapshots: magicast: 0.3.5 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - supports-color - '@vitest/eslint-plugin@1.1.31(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': + '@vitest/eslint-plugin@1.1.31(@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2)(vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': dependencies: - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 vitest: 3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) '@vitest/expect@2.0.5': @@ -13624,6 +13633,14 @@ snapshots: optionalDependencies: vite: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + '@vitest/mocker@3.0.7(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))': + dependencies: + '@vitest/spy': 3.0.7 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + '@vitest/pretty-format@2.0.5': dependencies: tinyrainbow: 1.2.0 @@ -13734,7 +13751,7 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/language-core@2.2.0(typescript@5.7.3)': + '@vue/language-core@2.2.0(typescript@5.8.2)': dependencies: '@volar/language-core': 2.4.11 '@vue/compiler-dom': 3.5.13 @@ -13745,7 +13762,7 @@ snapshots: muggle-string: 0.4.1 path-browserify: 1.0.1 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 '@vue/reactivity@3.4.38': dependencies: @@ -13763,11 +13780,11 @@ snapshots: '@vue/shared': 3.4.38 csstype: 3.1.3 - '@vue/server-renderer@3.4.38(vue@3.4.38(typescript@5.7.3))': + '@vue/server-renderer@3.4.38(vue@3.4.38(typescript@5.8.2))': dependencies: '@vue/compiler-ssr': 3.4.38 '@vue/shared': 3.4.38 - vue: 3.4.38(typescript@5.7.3) + vue: 3.4.38(typescript@5.8.2) '@vue/shared@3.4.38': {} @@ -14586,12 +14603,12 @@ snapshots: dependencies: browserslist: 4.24.4 - cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.7.3))(typescript@5.7.3): + cosmiconfig-typescript-loader@6.1.0(@types/node@22.13.5)(cosmiconfig@9.0.0(typescript@5.8.2))(typescript@5.8.2): dependencies: '@types/node': 22.13.5 - cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 2.4.2 - typescript: 5.7.3 + typescript: 5.8.2 cosmiconfig@7.1.0: dependencies: @@ -14601,14 +14618,14 @@ snapshots: path-type: 4.0.0 yaml: 1.10.2 - cosmiconfig@9.0.0(typescript@5.7.3): + cosmiconfig@9.0.0(typescript@5.8.2): dependencies: env-paths: 2.2.1 import-fresh: 3.3.0 js-yaml: 4.1.0 parse-json: 5.2.0 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 cross-env@7.0.3: dependencies: @@ -15146,11 +15163,11 @@ snapshots: fs-extra: 10.1.0 globby: 11.1.0 - esbuild-plugin-vue3@0.4.2(sass@1.77.5)(vue@3.4.38(typescript@5.7.3)): + esbuild-plugin-vue3@0.4.2(sass@1.77.5)(vue@3.4.38(typescript@5.8.2)): dependencies: esbuild: 0.14.54 typescript: 4.9.5 - vue: 3.4.38(typescript@5.7.3) + vue: 3.4.38(typescript@5.8.2) optionalDependencies: sass: 1.77.5 @@ -15327,11 +15344,11 @@ snapshots: dependencies: eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-import-x@4.6.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-import-x@4.6.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: '@types/doctrine': 0.0.9 '@typescript-eslint/scope-manager': 8.24.1 - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) debug: 4.4.0 doctrine: 3.0.0 enhanced-resolve: 5.18.1 @@ -15402,96 +15419,97 @@ snapshots: eslint: 9.21.0(jiti@2.4.2) requireindex: 1.2.0 - eslint-plugin-perfectionist@4.9.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-perfectionist@4.9.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: '@typescript-eslint/types': 8.24.1 - '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react-debug@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-react-debug@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-react-dom@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) compare-versions: 6.1.1 eslint: 9.21.0(jiti@2.4.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-react-hooks-extra@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks@5.1.0(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-react-hooks@5.2.0(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-react-naming-convention@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-react-naming-convention@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -15499,45 +15517,45 @@ snapshots: dependencies: eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-react-web-api@1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + eslint-plugin-react-web-api@1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 transitivePeerDependencies: - supports-color - eslint-plugin-react-x@1.28.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.7.3))(typescript@5.7.3): + eslint-plugin-react-x@1.29.0(eslint@9.21.0(jiti@2.4.2))(ts-api-utils@2.0.1(typescript@5.8.2))(typescript@5.8.2): dependencies: - '@eslint-react/ast': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/core': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/eff': 1.28.0 - '@eslint-react/jsx': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/shared': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) - '@eslint-react/var': 1.28.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@eslint-react/ast': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/core': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/eff': 1.29.0 + '@eslint-react/jsx': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/shared': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) + '@eslint-react/var': 1.29.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) '@typescript-eslint/types': 8.25.0 - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) compare-versions: 6.1.1 eslint: 9.21.0(jiti@2.4.2) - is-immutable-type: 5.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + is-immutable-type: 5.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) string-ts: 2.2.1 ts-pattern: 5.6.2 optionalDependencies: - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -15609,11 +15627,11 @@ snapshots: semver: 7.7.1 strip-indent: 4.0.0 - eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2)): + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2)): dependencies: eslint: 9.21.0(jiti@2.4.2) optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2))(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint-plugin-vue@9.32.0(eslint@9.21.0(jiti@2.4.2)): dependencies: @@ -15891,7 +15909,7 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@8.0.0(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)): + fork-ts-checker-webpack-plugin@8.0.0(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)): dependencies: '@babel/code-frame': 7.26.2 chalk: 4.1.2 @@ -15905,7 +15923,7 @@ snapshots: schema-utils: 3.3.0 semver: 7.7.1 tapable: 2.2.1 - typescript: 5.7.3 + typescript: 5.8.2 webpack: 5.98.0(@swc/core@1.10.18)(esbuild@0.25.0) form-data@4.0.0: @@ -16439,13 +16457,13 @@ snapshots: dependencies: is-extglob: 2.1.1 - is-immutable-type@5.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): + is-immutable-type@5.0.1(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2): dependencies: - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.8.2) eslint: 9.21.0(jiti@2.4.2) - ts-api-utils: 2.0.1(typescript@5.7.3) - ts-declaration-location: 1.0.5(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.0.1(typescript@5.8.2) + ts-declaration-location: 1.0.5(typescript@5.8.2) + typescript: 5.8.2 transitivePeerDependencies: - supports-color @@ -16662,7 +16680,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.8 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -17907,9 +17925,9 @@ snapshots: optionalDependencies: postcss: 8.4.49 - postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.7.3)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)): + postcss-loader@8.1.1(postcss@8.5.3)(typescript@5.8.2)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)): dependencies: - cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) jiti: 1.21.6 postcss: 8.5.3 semver: 7.6.3 @@ -18157,7 +18175,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 22.13.5 + '@types/node': 22.13.8 long: 5.3.1 protocols@2.0.1: {} @@ -18375,26 +18393,26 @@ snapshots: dependencies: dnd-core: 16.0.1 - react-dnd-multi-backend@8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-dnd-multi-backend@8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: dnd-core: 16.0.1 dnd-multi-backend: 8.1.2(dnd-core@16.0.1) react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0) - react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0))(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0) + react-dnd-preview: 8.1.2(react-dnd@16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0))(react@19.0.0) react-dom: 19.0.0(react@19.0.0) - react-dnd-preview@8.1.2(react-dnd@16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0))(react@19.0.0): + react-dnd-preview@8.1.2(react-dnd@16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0))(react@19.0.0): dependencies: react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0) react-dnd-touch-backend@16.0.1: dependencies: '@react-dnd/invariant': 4.0.2 dnd-core: 16.0.1 - react-dnd@16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0): + react-dnd@16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0): dependencies: '@react-dnd/invariant': 4.0.2 '@react-dnd/shallowequal': 4.0.2 @@ -18403,12 +18421,12 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 19.0.0 optionalDependencies: - '@types/node': 22.13.5 + '@types/node': 22.13.8 '@types/react': 19.0.8 - react-docgen-typescript@2.2.2(typescript@5.7.3): + react-docgen-typescript@2.2.2(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 react-docgen@7.1.1: dependencies: @@ -18465,7 +18483,7 @@ snapshots: react-is@18.3.1: {} - react-mosaic-component@6.1.1(@types/node@22.13.5)(@types/react@19.0.8)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): + react-mosaic-component@6.1.1(@types/node@22.13.8)(@types/react@19.0.8)(dnd-core@16.0.1)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): dependencies: classnames: 2.5.1 immutability-helper: 3.1.1 @@ -18473,9 +18491,9 @@ snapshots: prop-types: 15.8.1 rdndmb-html5-to-touch: 8.1.2(dnd-core@16.0.1) react: 19.0.0 - react-dnd: 16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0) + react-dnd: 16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0) react-dnd-html5-backend: 16.0.1 - react-dnd-multi-backend: 8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.13.5)(@types/react@19.0.8)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) + react-dnd-multi-backend: 8.1.2(dnd-core@16.0.1)(react-dnd@16.0.1(@types/node@22.13.8)(@types/react@19.0.8)(react@19.0.0))(react-dom@19.0.0(react@19.0.0))(react@19.0.0) react-dnd-touch-backend: 16.0.1 uuid: 9.0.1 transitivePeerDependencies: @@ -18644,14 +18662,14 @@ snapshots: relateurl@0.2.7: {} - release-it@17.11.0(typescript@5.7.3): + release-it@17.11.0(typescript@5.8.2): dependencies: '@iarna/toml': 2.2.5 '@octokit/rest': 20.1.1 async-retry: 1.3.3 chalk: 5.4.1 ci-info: 4.1.0 - cosmiconfig: 9.0.0(typescript@5.7.3) + cosmiconfig: 9.0.0(typescript@5.8.2) execa: 8.0.0 git-url-parse: 14.0.0 globby: 14.0.2 @@ -19043,9 +19061,9 @@ snapshots: terser-webpack-plugin: 5.3.11(@swc/core@1.10.18)(esbuild@0.25.0)(webpack@5.98.0(@swc/core@1.10.18)(esbuild@0.25.0)) webpack: 5.98.0(@swc/core@1.10.18)(esbuild@0.25.0) - storybook@8.5.8(prettier@3.4.2): + storybook@8.6.3(prettier@3.4.2): dependencies: - '@storybook/core': 8.5.8(prettier@3.4.2) + '@storybook/core': 8.6.3(prettier@3.4.2)(storybook@8.6.3(prettier@3.4.2)) optionalDependencies: prettier: 3.4.2 transitivePeerDependencies: @@ -19337,14 +19355,14 @@ snapshots: collapse-white-space: 2.1.0 n-gram: 2.0.2 - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.0.1(typescript@5.8.2): dependencies: - typescript: 5.7.3 + typescript: 5.8.2 - ts-declaration-location@1.0.5(typescript@5.7.3): + ts-declaration-location@1.0.5(typescript@5.8.2): dependencies: minimatch: 10.0.1 - typescript: 5.7.3 + typescript: 5.8.2 ts-dedent@2.2.0: {} @@ -19460,7 +19478,7 @@ snapshots: typescript@5.7.2: {} - typescript@5.7.3: {} + typescript@5.8.2: {} ufo@1.5.4: {} @@ -19634,20 +19652,41 @@ snapshots: - tsx - yaml - vite-plugin-dts@4.5.0(@types/node@22.13.5)(rollup@4.34.8)(typescript@5.7.3)(vite@6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)): + vite-node@3.0.7(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): dependencies: - '@microsoft/api-extractor': 7.49.1(@types/node@22.13.5) + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.3 + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-dts@4.5.0(@types/node@22.13.8)(rollup@4.34.8)(typescript@5.8.2)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)): + dependencies: + '@microsoft/api-extractor': 7.49.1(@types/node@22.13.8) '@rollup/pluginutils': 5.1.4(rollup@4.34.8) '@volar/typescript': 2.4.11 - '@vue/language-core': 2.2.0(typescript@5.7.3) + '@vue/language-core': 2.2.0(typescript@5.8.2) compare-versions: 6.1.1 debug: 4.4.0 kolorist: 1.8.0 local-pkg: 0.5.1 magic-string: 0.30.17 - typescript: 5.7.3 + typescript: 5.8.2 optionalDependencies: - vite: 6.2.0(@types/node@22.13.5)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) transitivePeerDependencies: - '@types/node' - rollup @@ -19674,6 +19713,21 @@ snapshots: tsx: 4.19.3 yaml: 2.7.0 + vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + esbuild: 0.25.0 + postcss: 8.5.3 + rollup: 4.34.8 + optionalDependencies: + '@types/node': 22.13.8 + fsevents: 2.3.3 + jiti: 2.4.2 + less: 4.2.2 + sass: 1.77.5 + terser: 5.39.0 + tsx: 4.19.3 + yaml: 2.7.0 + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.5)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): dependencies: '@vitest/expect': 3.0.7 @@ -19715,6 +19769,47 @@ snapshots: - tsx - yaml + vitest@3.0.7(@types/debug@4.1.12)(@types/node@22.13.8)(happy-dom@15.0.0)(jiti@2.4.2)(jsdom@24.1.1)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0): + dependencies: + '@vitest/expect': 3.0.7 + '@vitest/mocker': 3.0.7(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)) + '@vitest/pretty-format': 3.0.7 + '@vitest/runner': 3.0.7 + '@vitest/snapshot': 3.0.7 + '@vitest/spy': 3.0.7 + '@vitest/utils': 3.0.7 + chai: 5.2.0 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + vite-node: 3.0.7(@types/node@22.13.8)(jiti@2.4.2)(less@4.2.2)(sass@1.77.5)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 22.13.8 + happy-dom: 15.0.0 + jsdom: 24.1.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + vscode-uri@3.0.8: {} vue-eslint-parser@9.4.3(eslint@9.21.0(jiti@2.4.2)): @@ -19730,15 +19825,15 @@ snapshots: transitivePeerDependencies: - supports-color - vue@3.4.38(typescript@5.7.3): + vue@3.4.38(typescript@5.8.2): dependencies: '@vue/compiler-dom': 3.4.38 '@vue/compiler-sfc': 3.4.38 '@vue/runtime-dom': 3.4.38 - '@vue/server-renderer': 3.4.38(vue@3.4.38(typescript@5.7.3)) + '@vue/server-renderer': 3.4.38(vue@3.4.38(typescript@5.8.2)) '@vue/shared': 3.4.38 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.2 w3c-xmlserializer@5.0.0: dependencies: diff --git a/tests/formula-integration/package.json b/tests/formula-integration/package.json index 2b39764885..2c018378f5 100644 --- a/tests/formula-integration/package.json +++ b/tests/formula-integration/package.json @@ -25,7 +25,7 @@ }, "devDependencies": { "@univerjs-infra/shared": "workspace:*", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "vitest": "^3.0.7" } }