diff --git a/CHANGELOG.md b/CHANGELOG.md index 5ebd0a231b1..d57b6d2596b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,46 @@ +## [0.1.14](https://github.com/dream-num/univer/compare/v0.1.13...v0.1.14) (2024-06-07) + + +### Bug Fixes + +* build error ([#2436](https://github.com/dream-num/univer/issues/2436)) ([d497b03](https://github.com/dream-num/univer/commit/d497b03a5b8894589401034da340fce3c8f105c3)) +* **drawing:** plugin name ([#2402](https://github.com/dream-num/univer/issues/2402)) ([296f399](https://github.com/dream-num/univer/commit/296f399408e3d6d4293c43e5acf064d5717f7de9)) +* fix findDOMNode deprecation issue under React 18.3.1 ([#2403](https://github.com/dream-num/univer/issues/2403)) ([41d21c3](https://github.com/dream-num/univer/commit/41d21c31ebe133a436e811ba42787b438a29f319)) +* fix layer ([#2421](https://github.com/dream-num/univer/issues/2421)) ([ad7b3b5](https://github.com/dream-num/univer/commit/ad7b3b5bc15e307f9ab70bbab89b6522b655660d)) +* fix list lint ([#2406](https://github.com/dream-num/univer/issues/2406)) ([eb8737c](https://github.com/dream-num/univer/commit/eb8737c972d80d9613f8b6a6af8f2dea6a95fe72)) +* fix menu status is incorrect because focusedOnDrawing$ have not initial value ([#2431](https://github.com/dream-num/univer/issues/2431)) ([5b7bc17](https://github.com/dream-num/univer/commit/5b7bc17b89abf81d39a07f5873af3261a436f81e)) +* fix permissions wrong reference render-engine in sheets package ([#2396](https://github.com/dream-num/univer/issues/2396)) ([10387e4](https://github.com/dream-num/univer/commit/10387e48b92ad0134f0bf17e82dd28e938b4465d)) +* **formula:** export AsyncObject ([#2438](https://github.com/dream-num/univer/issues/2438)) ([08df397](https://github.com/dream-num/univer/commit/08df397e136754a89525bf2d3bb3926f300d7d2f)) +* **formula:** js precision problem ([#2371](https://github.com/dream-num/univer/issues/2371)) ([d2c9eeb](https://github.com/dream-num/univer/commit/d2c9eebc19f233e8ce422c8467a66b394c5f7b2d)) +* **meesage:** fix in node env, the document not exist ([#2415](https://github.com/dream-num/univer/issues/2415)) ([8657cc4](https://github.com/dream-num/univer/commit/8657cc40841c80b66ce4a9880abc6db992c40b52)) +* message node env ([#2417](https://github.com/dream-num/univer/issues/2417)) ([3dd2d6a](https://github.com/dream-num/univer/commit/3dd2d6a1b6e3f1730514057c6a5e3c75a82f31ec)) +* not escape when copy content ([#2354](https://github.com/dream-num/univer/issues/2354)) ([c10e4d9](https://github.com/dream-num/univer/commit/c10e4d93e3995cb799ca796856f5d09b8801364b)) +* sync actions between formula editor and cell editor ([#2380](https://github.com/dream-num/univer/issues/2380)) ([bdf033c](https://github.com/dream-num/univer/commit/bdf033c2ed5bb40cb5dc3a2aac8f7d8cd7332317)) +* **ui:** fix findDOMNode is deprecated warning when collapsing the toolbar ([#2413](https://github.com/dream-num/univer/issues/2413)) ([754fad2](https://github.com/dream-num/univer/commit/754fad23005fae3df58682f1a9fc81aab8181bc0)) +* **ui:** fix flickering on register ui parts ([#2430](https://github.com/dream-num/univer/issues/2430)) ([2d036a3](https://github.com/dream-num/univer/commit/2d036a3bd50134906195fdd40df48e97a5bb7501)) +* **ui:** fix ineffective `hidden` property in menu configurations ([#2420](https://github.com/dream-num/univer/issues/2420)) ([c2b0019](https://github.com/dream-num/univer/commit/c2b0019ef394389d103adcd5645445da38c80723)) +* **ui:** fix possible race conditions for ComponentContainer ([29af7c2](https://github.com/dream-num/univer/commit/29af7c2abc3d247f422aa3d071e0ccc02615ff5e)) + + +### Features + +* add scrollLeftTop for sheet snapshot ([#2348](https://github.com/dream-num/univer/issues/2348)) ([38d8003](https://github.com/dream-num/univer/commit/38d8003af71c13c319a54dc3e7fe948984375218)) +* add Tools.set method ([#2399](https://github.com/dream-num/univer/issues/2399)) ([ea8f50c](https://github.com/dream-num/univer/commit/ea8f50cb63193fd6f90e8a4e68500b809c075800)) +* add workbook permission ([#2391](https://github.com/dream-num/univer/issues/2391)) ([0a9a980](https://github.com/dream-num/univer/commit/0a9a980c091060596678130b6a3039c17a08a194)) +* **InsertSheetCommand:** allow using partial sheet from params as sheetconfig ([#2429](https://github.com/dream-num/univer/issues/2429)) ([ce85854](https://github.com/dream-num/univer/commit/ce858541eec01cadd18b16f395a4d5195be18e86)) +* **network:** add http auth interceptor ([#2424](https://github.com/dream-num/univer/issues/2424)) ([066941a](https://github.com/dream-num/univer/commit/066941a50d9e545a7271118bc0b815c9a141626a)) +* **permission-share:** support permission share ([#2416](https://github.com/dream-num/univer/issues/2416)) ([0332000](https://github.com/dream-num/univer/commit/0332000ecb5b89ee5a53c1af92530d63341b2942)) +* **sheets-data-validation:** add validator service allowing developer to get status of data-validation ([#2412](https://github.com/dream-num/univer/issues/2412)) ([12d531d](https://github.com/dream-num/univer/commit/12d531dc16a64918e2e91b7ee364924ddfd978a9)) +* **sheets-ui:** support drawing print ([#2418](https://github.com/dream-num/univer/issues/2418)) ([f24cace](https://github.com/dream-num/univer/commit/f24cacef51e6c49d54267a5a16df355bf05676f8)) +* **ui:** enhance component container ([#2395](https://github.com/dream-num/univer/issues/2395)) ([54460f9](https://github.com/dream-num/univer/commit/54460f9a8b0f20c5be357476ae490d6367747681)) + + +### Reverts + +* Revert "feat: add scrollLeftTop for sheet snapshot (#2348)" (#2398) ([1e5c40c](https://github.com/dream-num/univer/commit/1e5c40c974246e93c06c794a104aa0f6716138e3)), closes [#2348](https://github.com/dream-num/univer/issues/2348) [#2398](https://github.com/dream-num/univer/issues/2398) + ## [0.1.13](https://github.com/dream-num/univer/compare/v0.1.12...v0.1.13) (2024-06-03) diff --git a/common/shared/package.json b/common/shared/package.json index be9ceb8b71d..bfb0b8ccb8a 100644 --- a/common/shared/package.json +++ b/common/shared/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/shared", - "version": "0.1.13", + "version": "0.1.14", "private": true, "description": "Some infrastructures for univerjs", "author": "DreamNum ", @@ -17,7 +17,7 @@ "./vite": "./vite/index.js" }, "dependencies": { - "@typescript-eslint/parser": "^7.11.0", + "@typescript-eslint/parser": "^7.12.0", "@vitejs/plugin-react": "^4.3.0", "@vitest/coverage-istanbul": "^1.6.0", "happy-dom": "13.3.8", diff --git a/common/storybook/package.json b/common/storybook/package.json index 37f5a4ea65b..b70a9d50d6c 100644 --- a/common/storybook/package.json +++ b/common/storybook/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/storybook", - "version": "0.1.13", + "version": "0.1.14", "private": true, "description": "Some infrastructures for univerjs", "author": "DreamNum ", @@ -17,23 +17,23 @@ }, "dependencies": { "@chromatic-com/storybook": "^1.5.0", - "@storybook/addon-essentials": "8.1.5", - "@storybook/addon-interactions": "8.1.5", - "@storybook/addon-links": "8.1.5", + "@storybook/addon-essentials": "8.1.6", + "@storybook/addon-interactions": "8.1.6", + "@storybook/addon-links": "8.1.6", "@storybook/addon-styling-webpack": "^1.0.0", "@storybook/addon-webpack5-compiler-swc": "^1.0.3", - "@storybook/blocks": "8.1.5", + "@storybook/blocks": "8.1.6", "@storybook/icons": "^1.2.9", - "@storybook/react": "8.1.5", - "@storybook/react-webpack5": "8.1.5", - "@storybook/types": "8.1.5", + "@storybook/react": "8.1.6", + "@storybook/react-webpack5": "8.1.6", + "@storybook/types": "8.1.6", "@univerjs/core": "workspace:*", "@univerjs/design": "workspace:*", "@univerjs/ui": "workspace:*", "@wendellhu/redi": "0.15.2", "css-loader": "^6.10.0", "less-loader": "^12.2.0", - "storybook": "8.1.5", + "storybook": "8.1.6", "storybook-addon-swc": "^1.2.0", "style-loader": "^3.3.4", "tsconfig-paths-webpack-plugin": "^4.1.0", diff --git a/examples/src/data/sheets/demo/default-workbook-data-demo.ts b/examples/src/data/sheets/demo/default-workbook-data-demo.ts index 2ccb9f0dd49..33dfd5226fe 100644 --- a/examples/src/data/sheets/demo/default-workbook-data-demo.ts +++ b/examples/src/data/sheets/demo/default-workbook-data-demo.ts @@ -175,13 +175,35 @@ const dataValidation = [ }, ]; -const hyperLink = [{ - row: 20, - column: 12, - id: '123', - display: 'linkTest哈哈哈哈', - payload: '#gid=sheet-0011&range=1:1', -}] as ICellHyperLink[]; +const dv2 = [ + { + uid: 'xxx-2', + type: DataValidationType.CHECKBOX, + ranges: [{ + startRow: 1, + endRow: 2, + startColumn: 1, + endColumn: 2, + }], + }, +]; + +const hyperLink = [ + { + row: 20, + column: 8, + id: '321', + display: 'linkTest', + payload: '#gid=sheet-0011&range=1:1', + }, + { + row: 20, + column: 12, + id: '123', + display: 'linkTest哈哈哈哈', + payload: '#gid=sheet-0011&range=1:1', + }, +] as ICellHyperLink[]; export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { id: 'workbook-01', @@ -189,6 +211,7 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { name: 'UniverSheet Demo', sheetOrder: [ 'sheet-0011', + 'dv-test', 'sheet-0001', 'sheet-0002', 'sheet-0003', @@ -14082,6 +14105,10 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { v: 345, t: 2, }, + 8: { + v: 'linkTest', + t: 1, + }, 12: { v: 'linkTest哈哈哈哈', t: 1, @@ -14202,6 +14229,45 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { ], rightToLeft: 0, }, + 'dv-test': { + name: 'dv-test', + id: 'dv-test', + tabColor: '', + hidden: 0, + rowCount: 1000, + columnCount: 20, + zoomRatio: 1, + cellData: { + 5: { + 1: { + v: '1', + t: 2, + }, + 2: { + v: '12', + t: 2, + }, + }, + 6: { + 1: { + v: '2', + t: 2, + }, + }, + 7: { + 1: { + v: '3', + t: 2, + }, + }, + 8: { + 1: { + v: '4', + t: 2, + }, + }, + }, + }, 'sheet-0010': { name: 'sheet-0010', id: 'sheet-0010', @@ -23564,6 +23630,7 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { name: DATA_VALIDATION_PLUGIN_NAME, data: JSON.stringify({ 'sheet-0011': dataValidation, + 'dv-test': dv2, }), }, { @@ -23581,7 +23648,86 @@ export const DEFAULT_WORKBOOK_DATA_DEMO: IWorkbookData = { }, { name: 'SHEET_THREAD_COMMENT_PLUGIN', - data: '{"sheet-0011":[{"text":{"textRuns":[],"paragraphs":[{"startIndex":3,"paragraphStyle":{}}],"sectionBreaks":[{"startIndex":4}],"dataStream":"123\\n\\r","customRanges":[]},"dT":"2024/05/17 21:16","id":"jwV0QtHwUbhG3o--iy1qa","ref":"H9","personId":"mockId","unitId":"workbook-01","subUnitId":"sheet-0011"}]}', + data: JSON.stringify({ + 'sheet-0011': [{ text: { textRuns: [], paragraphs: [{ startIndex: 3, paragraphStyle: {} }], sectionBreaks: [{ startIndex: 4 }], dataStream: '123\\n\\r', customRanges: [] }, dT: '2024/05/17 21:16', id: 'jwV0QtHwUbhG3o--iy1qa', ref: 'H9', personId: 'mockId', unitId: 'workbook-01', subUnitId: 'sheet-0011' }], + 'dv-test': [ + { + text: { + textRuns: [], + paragraphs: [{ startIndex: 3, paragraphStyle: {} }], + sectionBreaks: [{ startIndex: 4 }], + dataStream: '1\\n\\r', + customRanges: [], + }, + dT: '2024/05/17 21:16', + id: '12', + ref: 'C6', + personId: 'mockId', + unitId: 'workbook-01', + subUnitId: 'sheet-0011', + }, + { + text: { + textRuns: [], + paragraphs: [{ startIndex: 3, paragraphStyle: {} }], + sectionBreaks: [{ startIndex: 4 }], + dataStream: '1\\n\\r', + customRanges: [], + }, + dT: '2024/05/17 21:16', + id: '1', + ref: 'B6', + personId: 'mockId', + unitId: 'workbook-01', + subUnitId: 'sheet-0011', + }, + { + text: { + textRuns: [], + paragraphs: [{ startIndex: 3, paragraphStyle: {} }], + sectionBreaks: [{ startIndex: 4 }], + dataStream: '2\\n\\r', + customRanges: [], + }, + dT: '2024/05/17 21:16', + id: '2', + ref: 'B7', + personId: 'mockId', + unitId: 'workbook-01', + subUnitId: 'sheet-0011', + }, + { + text: { + textRuns: [], + paragraphs: [{ startIndex: 3, paragraphStyle: {} }], + sectionBreaks: [{ startIndex: 4 }], + dataStream: '3\\n\\r', + customRanges: [], + }, + dT: '2024/05/17 21:16', + id: '3', + ref: 'B8', + personId: 'mockId', + unitId: 'workbook-01', + subUnitId: 'sheet-0011', + }, + { + text: { + textRuns: [], + paragraphs: [{ startIndex: 3, paragraphStyle: {} }], + sectionBreaks: [{ startIndex: 4 }], + dataStream: '4\\n\\r', + customRanges: [], + }, + dT: '2024/05/17 21:16', + id: '4', + ref: 'B9', + personId: 'mockId', + unitId: 'workbook-01', + subUnitId: 'sheet-0011', + }, + ], + }), }, { name: 'SHEET_DRAWING_PLUGIN', diff --git a/package.json b/package.json index 49db877f61b..33fd40b4cf2 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "univer", "type": "module", - "version": "0.1.13", + "version": "0.1.14", "private": true, "packageManager": "pnpm@9.0.5", "author": "DreamNum Inc. ", @@ -45,14 +45,14 @@ "release:rc": "release-it prerelease --preRelease=rc" }, "devDependencies": { - "@antfu/eslint-config": "^2.19.1", + "@antfu/eslint-config": "^2.20.0", "@commitlint/cli": "^19.3.0", "@commitlint/config-conventional": "^19.2.2", "@eslint-react/eslint-plugin": "^1.5.14", "@playwright/test": "^1.44.1", "@release-it-plugins/workspaces": "^4.2.0", "@release-it/conventional-changelog": "^8.0.1", - "@storybook/react": "8.1.5", + "@storybook/react": "8.1.6", "@types/node": "^20.12.12", "@types/react": "^18.3.3", "@univerjs/design": "workspace:*", @@ -72,7 +72,7 @@ "react-dom": "18.3.1", "release-it": "^17.3.0", "serve": "^14.2.3", - "turbo": "^1.13.3", + "turbo": "^2.0.2", "typescript": "^5.4.5", "vitest": "^1.6.0" }, diff --git a/packages/core/package.json b/packages/core/package.json index fd7f072dad7..197624af433 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/core", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Core library for Univer.", "author": "DreamNum ", diff --git a/packages/core/src/shared/common.ts b/packages/core/src/shared/common.ts index 53312cfd62f..fd140dad855 100644 --- a/packages/core/src/shared/common.ts +++ b/packages/core/src/shared/common.ts @@ -550,6 +550,18 @@ export function isValidRange(range: IRange): boolean { return false; } + if ( + rangeType !== RANGE_TYPE.ROW && + rangeType !== RANGE_TYPE.COLUMN && ( + Number.isNaN(startColumn) || + Number.isNaN(startRow) || + Number.isNaN(endColumn) || + Number.isNaN(endRow) + ) + ) { + return false; + } + return true; } diff --git a/packages/core/src/sheets/range.ts b/packages/core/src/sheets/range.ts index 889423f045a..5e6b66dac70 100644 --- a/packages/core/src/sheets/range.ts +++ b/packages/core/src/sheets/range.ts @@ -19,16 +19,17 @@ import { ObjectMatrix, Tools } from '../shared'; import { DEFAULT_STYLES } from '../types/const'; import type { HorizontalAlign, VerticalAlign, WrapStrategy } from '../types/enum'; import { BooleanNumber, FontItalic, FontWeight } from '../types/enum'; -import type { - IBorderData, - ICellData, - IDocumentBody, - IDocumentData, - IRange, - IStyleBase, - IStyleData, - ITextDecoration, - ITextRotation, +import { + type IBorderData, + type ICellData, + type IDocumentBody, + type IDocumentData, + type IRange, + type IStyleBase, + type IStyleData, + type ITextDecoration, + type ITextRotation, + RANGE_TYPE, } from '../types/interfaces'; import type { Styles } from './styles'; import type { Worksheet } from './worksheet'; @@ -122,6 +123,37 @@ export class Range { } } + static transformRange = (range: IRange, worksheet: Worksheet): IRange => { + if (range.rangeType === RANGE_TYPE.ALL) { + return { + startColumn: 0, + startRow: 0, + endColumn: worksheet.getMaxColumns() - 1, + endRow: worksheet.getMaxRows() - 1, + }; + } + + if (range.rangeType === RANGE_TYPE.COLUMN) { + return { + startRow: 0, + endRow: worksheet.getMaxRows() - 1, + startColumn: range.startColumn, + endColumn: range.endColumn, + }; + } + + if (range.rangeType === RANGE_TYPE.ROW) { + return { + startColumn: 0, + endColumn: worksheet.getMaxColumns() - 1, + startRow: range.startRow, + endRow: range.endRow, + }; + } + + return range; + }; + /** * get current range data * diff --git a/packages/core/src/types/interfaces/i-cell-custom-render.ts b/packages/core/src/types/interfaces/i-cell-custom-render.ts index 7ff17e7cadf..62f0a9830e5 100644 --- a/packages/core/src/types/interfaces/i-cell-custom-render.ts +++ b/packages/core/src/types/interfaces/i-cell-custom-render.ts @@ -17,6 +17,8 @@ /* eslint-disable ts/no-explicit-any */ import type { Nullable } from '../../shared'; +import type { Worksheet } from '../../sheets/worksheet'; +import type { Workbook } from '../../sheets/workbook'; import type { ISelectionCellWithCoord } from './i-selection-data'; import type { IStyleData } from './i-style-data'; import type { ICellDataForSheetInterceptor } from './i-cell-data'; @@ -29,6 +31,8 @@ export interface ICellRenderContext { subUnitId: string; row: number; col: number; + worksheet: Worksheet; + workbook?: Workbook; } /** diff --git a/packages/data-validation/package.json b/packages/data-validation/package.json index 3d6db47eb53..f0eb52f3773 100644 --- a/packages/data-validation/package.json +++ b/packages/data-validation/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/data-validation", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Data validation library for Univer", "author": "DreamNum ", diff --git a/packages/data-validation/src/commands/commands/data-validation.command.ts b/packages/data-validation/src/commands/commands/data-validation.command.ts index 170df816fc5..b4747d5ac48 100644 --- a/packages/data-validation/src/commands/commands/data-validation.command.ts +++ b/packages/data-validation/src/commands/commands/data-validation.command.ts @@ -231,13 +231,12 @@ export const UpdateDataValidationSettingCommand: ICommand extends Dispos return this._dataValidations; } - validator(_content: Nullable, _rule: IDataValidationRule, _pos: any, _onCompele: (status: DataValidationStatus) => void) { + validator(_content: Nullable, _rule: IDataValidationRule, _pos: any, _onComplete: (status: DataValidationStatus, changed: boolean) => void) { return DataValidationStatus.VALID; } } diff --git a/packages/data-validation/src/models/data-validation-model.ts b/packages/data-validation/src/models/data-validation-model.ts index 5e728a28832..71cbde9a496 100644 --- a/packages/data-validation/src/models/data-validation-model.ts +++ b/packages/data-validation/src/models/data-validation-model.ts @@ -158,13 +158,15 @@ export class DataValidationModel, rule: T, pos: any) { const { unitId, subUnitId } = pos; const manager = this.ensureManager(unitId, subUnitId); - return manager.validator(content, rule, pos, (status: DataValidationStatus) => { - this._validStatusChange$.next({ - unitId, - subUnitId, - ruleId: rule.uid, - status, - }); + return manager.validator(content, rule, pos, (status, changed) => { + if (changed) { + this._validStatusChange$.next({ + unitId, + subUnitId, + ruleId: rule.uid, + status, + }); + } }); } @@ -185,4 +187,8 @@ export class DataValidationModel { abstract parseFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): Promise; - abstract validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult; + abstract validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult; async isValidType(cellInfo: IValidatorCellInfo, formula: IFormulaResult, rule: IDataValidationRule): Promise { return true; diff --git a/packages/debugger/package.json b/packages/debugger/package.json index ea32bb6f9b1..f217ced110b 100644 --- a/packages/debugger/package.json +++ b/packages/debugger/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/debugger", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/design/package.json b/packages/design/package.json index 4f78a8bde95..0cbdd2dabce 100644 --- a/packages/design/package.json +++ b/packages/design/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/design", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UI component library for building exceptional Univer.", "author": "DreamNum ", @@ -74,7 +74,7 @@ "@rc-component/trigger": "^2.2.0", "@types/react-mentions": "^4.1.13", "@univerjs/icons": "^0.1.56", - "rc-dialog": "^9.5.1", + "rc-dialog": "^9.5.2", "rc-dropdown": "^4.2.0", "rc-input": "^1.5.1", "rc-input-number": "^9.1.0", diff --git a/packages/docs-drawing-ui/package.json b/packages/docs-drawing-ui/package.json index 279f7cf3aad..96acc40da8a 100644 --- a/packages/docs-drawing-ui/package.json +++ b/packages/docs-drawing-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/docs-drawing-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/docs-drawing/package.json b/packages/docs-drawing/package.json index 3369ace9af0..4d6e799a2f6 100644 --- a/packages/docs-drawing/package.json +++ b/packages/docs-drawing/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/docs-drawing", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/docs-ui/package.json b/packages/docs-ui/package.json index dc5bc3ae2c1..cff859f0ae8 100644 --- a/packages/docs-ui/package.json +++ b/packages/docs-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/docs-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Univer normal ui-plugin-docs", "author": "DreamNum ", diff --git a/packages/docs/package.json b/packages/docs/package.json index d57a19f4e02..c2df442ed95 100644 --- a/packages/docs/package.json +++ b/packages/docs/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/docs", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal base-docs", "author": "DreamNum ", diff --git a/packages/drawing-ui/package.json b/packages/drawing-ui/package.json index b8c633e6351..1f7ce726459 100644 --- a/packages/drawing-ui/package.json +++ b/packages/drawing-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/drawing-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/drawing/package.json b/packages/drawing/package.json index 38841e3968c..4dc13e5354c 100644 --- a/packages/drawing/package.json +++ b/packages/drawing/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/drawing", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/engine-formula/package.json b/packages/engine-formula/package.json index 5bb0c91bdcc..1387f71ac90 100644 --- a/packages/engine-formula/package.json +++ b/packages/engine-formula/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/engine-formula", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal base-formula-engine", "author": "DreamNum ", diff --git a/packages/engine-formula/src/index.ts b/packages/engine-formula/src/index.ts index 6c5cdba4380..20ce4e5d06b 100644 --- a/packages/engine-formula/src/index.ts +++ b/packages/engine-formula/src/index.ts @@ -152,3 +152,4 @@ export type { IRangeChange } from './models/formula-data.model'; export { handleNumfmtInCell } from './engine/utils/numfmt-kit'; export { AsyncArrayObject } from './engine/reference-object/base-reference-object'; export { strip, stripErrorMargin } from './engine/utils/math-kit'; +export { AsyncObject } from './engine/reference-object/base-reference-object'; diff --git a/packages/engine-numfmt/package.json b/packages/engine-numfmt/package.json index 57d055b30ca..907578e865b 100644 --- a/packages/engine-numfmt/package.json +++ b/packages/engine-numfmt/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/engine-numfmt", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal plugin UI manager", "author": "DreamNum ", diff --git a/packages/engine-render/package.json b/packages/engine-render/package.json index e0b1fab9f65..35383af56e9 100644 --- a/packages/engine-render/package.json +++ b/packages/engine-render/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/engine-render", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal base-render", "author": "DreamNum ", diff --git a/packages/engine-render/src/components/sheets/extensions/custom.ts b/packages/engine-render/src/components/sheets/extensions/custom.ts index d239da7634c..5c8a29d6a4b 100644 --- a/packages/engine-render/src/components/sheets/extensions/custom.ts +++ b/packages/engine-render/src/components/sheets/extensions/custom.ts @@ -85,6 +85,7 @@ export class Custom extends SheetExtension { subUnitId, row, col, + worksheet, }; // current cell is hidden diff --git a/packages/facade/package.json b/packages/facade/package.json index 76ee85ca378..06e2b72a48c 100644 --- a/packages/facade/package.json +++ b/packages/facade/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/facade", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/find-replace/package.json b/packages/find-replace/package.json index 0a5bffc5acd..30eb825e810 100644 --- a/packages/find-replace/package.json +++ b/packages/find-replace/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/find-replace", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/network/package.json b/packages/network/package.json index 72266435013..5654b83f0d6 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/network", - "version": "0.1.13", + "version": "0.1.14", "private": false, "author": "DreamNum ", "license": "Apache-2.0", diff --git a/packages/rpc/package.json b/packages/rpc/package.json index 29b2819acc0..7b5f5c05945 100644 --- a/packages/rpc/package.json +++ b/packages/rpc/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/rpc", - "version": "0.1.13", + "version": "0.1.14", "private": false, "author": "DreamNum ", "license": "Apache-2.0", diff --git a/packages/sheets-conditional-formatting-ui/package.json b/packages/sheets-conditional-formatting-ui/package.json index e73ac3ae7fd..2f05561da9f 100644 --- a/packages/sheets-conditional-formatting-ui/package.json +++ b/packages/sheets-conditional-formatting-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-conditional-formatting-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Conditional formatting plugin for Univer Sheets", "author": "DreamNum ", diff --git a/packages/sheets-conditional-formatting/package.json b/packages/sheets-conditional-formatting/package.json index 1674bd517d1..07489184619 100644 --- a/packages/sheets-conditional-formatting/package.json +++ b/packages/sheets-conditional-formatting/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-conditional-formatting", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Conditional formatting plugin for Univer Sheets", "author": "DreamNum ", diff --git a/packages/sheets-data-validation/package.json b/packages/sheets-data-validation/package.json index 35643ff9262..8d20d859cb0 100644 --- a/packages/sheets-data-validation/package.json +++ b/packages/sheets-data-validation/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-data-validation", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Data validation for Univer Sheets", "author": "DreamNum ", diff --git a/packages/sheets-data-validation/src/commands/commands/data-validation.command.ts b/packages/sheets-data-validation/src/commands/commands/data-validation.command.ts index fb72a6d72c7..a6fb377a458 100644 --- a/packages/sheets-data-validation/src/commands/commands/data-validation.command.ts +++ b/packages/sheets-data-validation/src/commands/commands/data-validation.command.ts @@ -30,6 +30,7 @@ export interface IUpdateSheetDataValidationRangeCommandParams { ranges: IRange[]; } +// eslint-disable-next-line max-lines-per-function export function getDataValidationDiffMutations(unitId: string, subUnitId: string, diffs: RangeMutation[]) { const redoMutations: IMutationInfo[] = []; diff --git a/packages/sheets-data-validation/src/controllers/dv-render.controller.ts b/packages/sheets-data-validation/src/controllers/dv-render.controller.ts index c02a86526cb..4886c472569 100644 --- a/packages/sheets-data-validation/src/controllers/dv-render.controller.ts +++ b/packages/sheets-data-validation/src/controllers/dv-render.controller.ts @@ -211,7 +211,7 @@ export class SheetsDataValidationRenderController extends RxDisposable { priority: 200, // eslint-disable-next-line max-lines-per-function handler: (cell, pos, next) => { - const { row, col, unitId, subUnitId } = pos; + const { row, col, unitId, subUnitId, workbook, worksheet } = pos; const manager = this._dataValidationModel.ensureManager(unitId, subUnitId) as SheetDataValidationManager; if (!manager) { return next(cell); @@ -235,7 +235,7 @@ export class SheetsDataValidationRenderController extends RxDisposable { if (!rule) { return next(cell); } - const cellRaw = pos.worksheet.getCellRaw(pos.row, pos.col); + const cellRaw = worksheet.getCellRaw(pos.row, pos.col); const validStatus = this._dataValidationModel.validator(getCellValueOrigin(cellRaw), rule, pos); const validator = this._dataValidatorRegistryService.getValidatorItem(rule.type); const cellValue = getCellValueOrigin(cell); @@ -331,6 +331,8 @@ export class SheetsDataValidationRenderController extends RxDisposable { subUnitId, row, col, + workbook, + worksheet, }; return validator?.canvasRender?.calcCellAutoHeight?.(info); }, diff --git a/packages/sheets-data-validation/src/index.ts b/packages/sheets-data-validation/src/index.ts index c26a2a6c587..0cf15e03fd2 100644 --- a/packages/sheets-data-validation/src/index.ts +++ b/packages/sheets-data-validation/src/index.ts @@ -32,3 +32,4 @@ export { DataValidationCopyPasteController } from './controllers/dv-copy-paste.c export { HideDataValidationDropdown, ShowDataValidationDropdown } from './commands/operations/data-validation.operation'; export { DataValidationRejectInputController } from './controllers/dv-reject-input.controller'; export { DataValidationFormulaController } from './controllers/dv-formula.controller'; +export { SheetsDataValidationValidatorService } from './services/dv-validator-service'; diff --git a/packages/sheets-data-validation/src/locale/en-US.ts b/packages/sheets-data-validation/src/locale/en-US.ts index 7d858085c7e..8115717f287 100644 --- a/packages/sheets-data-validation/src/locale/en-US.ts +++ b/packages/sheets-data-validation/src/locale/en-US.ts @@ -29,6 +29,7 @@ const locale: typeof zhCN = { listInvalid: 'The list source must be a delimited list or a reference to a single row or column', checkboxEqual: 'Enter different values for ticked and unticked cell contents.', formulaError: 'The reference range contains invisible data, please readjust the range', + listIntersects: 'The selected range cannot intersect with the scope of the rules', }, panel: { title: 'Data validation management', diff --git a/packages/sheets-data-validation/src/locale/ru-RU.ts b/packages/sheets-data-validation/src/locale/ru-RU.ts index c9e4fe4cd88..a0fe9f8ac36 100644 --- a/packages/sheets-data-validation/src/locale/ru-RU.ts +++ b/packages/sheets-data-validation/src/locale/ru-RU.ts @@ -29,6 +29,7 @@ const locale: typeof zhCN = { listInvalid: 'Источник списка должен быть разделенным списком или ссылкой на одну строку или столбец', checkboxEqual: 'Для выбранных и не выбранных ячеек введите разные значения', formulaError: 'Диапазон ссылок содержит невидимые данные, пожалуйста, пересмотрите диапазон', + listIntersects: 'Выбранный диапазон не может пересекаться с диапазоном правила.', }, panel: { title: 'Управление проверкой данных', diff --git a/packages/sheets-data-validation/src/locale/zh-CN.ts b/packages/sheets-data-validation/src/locale/zh-CN.ts index d36678c9588..9fab9fee0a4 100644 --- a/packages/sheets-data-validation/src/locale/zh-CN.ts +++ b/packages/sheets-data-validation/src/locale/zh-CN.ts @@ -27,6 +27,7 @@ const locale = { listInvalid: '列表源必须是分隔列表或对单行或列的引用。', checkboxEqual: '为勾选和未勾选的单元格内容输入不同的值。', formulaError: '引用范围内包含不可见的数据,请重新调整范围', + listIntersects: '所选范围不能和规则范围相交', }, panel: { title: '管理数据验证', diff --git a/packages/sheets-data-validation/src/models/rule-matrix.ts b/packages/sheets-data-validation/src/models/rule-matrix.ts index dfb82b5158e..7766df6e4a1 100644 --- a/packages/sheets-data-validation/src/models/rule-matrix.ts +++ b/packages/sheets-data-validation/src/models/rule-matrix.ts @@ -14,8 +14,8 @@ * limitations under the License. */ -import { type IRange, type ISheetDataValidationRule, ObjectMatrix, Range, Rectangle } from '@univerjs/core'; -import { queryObjectMatrix } from '@univerjs/core'; +import type { IRange, ISheetDataValidationRule, Worksheet } from '@univerjs/core'; +import { ObjectMatrix, queryObjectMatrix, Range, Rectangle } from '@univerjs/core'; export type RangeMutation = { type: 'update'; @@ -34,22 +34,28 @@ export type RangeMutation = { export class RuleMatrix { readonly value: ObjectMatrix; - constructor(value: ObjectMatrix) { + constructor( + value: ObjectMatrix, + private _worksheet: Worksheet + ) { this.value = value; } addRule(rule: ISheetDataValidationRule) { const ruleId = rule.uid; rule.ranges.forEach((range) => { - Range.foreach(range, (row, col) => { - this.value.setValue(row, col, ruleId); - }); + Range.foreach( + Range.transformRange(range, this._worksheet), + (row, col) => { + this.value.setValue(row, col, ruleId); + } + ); }); } removeRange(ranges: IRange[]) { ranges.forEach((range) => { - Range.foreach(range, (row, col) => { + Range.foreach(Range.transformRange(range, this._worksheet), (row, col) => { this.value.realDeleteValue(row, col); }); }); @@ -57,14 +63,17 @@ export class RuleMatrix { removeRule(rule: ISheetDataValidationRule) { rule.ranges.forEach((range) => { - Range.foreach(range, (row, col) => { + Range.foreach(Range.transformRange(range, this._worksheet), (row, col) => { this.value.setValue(row, col, ''); }); }); } - updateRange(ruleId: string, oldRanges: IRange[], newRanges: IRange[]) { + updateRange(ruleId: string, _oldRanges: IRange[], _newRanges: IRange[]) { const tempRuleId = `${ruleId}$`; + const oldRanges = _oldRanges.map((range) => Range.transformRange(range, this._worksheet)); + const newRanges = _newRanges.map((range) => Range.transformRange(range, this._worksheet)); + oldRanges.forEach((range) => { Range.foreach(range, (row, col) => { if (this.value.getValue(row, col) === ruleId) { @@ -159,7 +168,7 @@ export class RuleMatrix { } clone() { - return new RuleMatrix(new ObjectMatrix(this.value.clone())); + return new RuleMatrix(new ObjectMatrix(this.value.clone()), this._worksheet); } getValue(row: number, col: number) { diff --git a/packages/sheets-data-validation/src/models/sheet-data-validation-manager.ts b/packages/sheets-data-validation/src/models/sheet-data-validation-manager.ts index 337d32c9b77..d50e24bd9b2 100644 --- a/packages/sheets-data-validation/src/models/sheet-data-validation-manager.ts +++ b/packages/sheets-data-validation/src/models/sheet-data-validation-manager.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import type { CellValue, ISheetDataValidationRule, Nullable } from '@univerjs/core'; +import type { CellValue, ISheetDataValidationRule, Nullable, Workbook } from '@univerjs/core'; import { DataValidationManager, DataValidatorRegistryService, UpdateRuleType } from '@univerjs/data-validation'; -import { DataValidationStatus, DataValidationType, ObjectMatrix, Range } from '@univerjs/core'; +import { DataValidationStatus, DataValidationType, IUniverInstanceService, ObjectMatrix, Range, UniverInstanceType } from '@univerjs/core'; import type { IUpdateRulePayload } from '@univerjs/data-validation'; -import type { ISheetLocation } from '@univerjs/sheets'; +import type { ISheetLocationBase } from '@univerjs/sheets'; import type { Injector } from '@wendellhu/redi'; import { isReferenceString } from '@univerjs/engine-formula'; import type { IDataValidationResCache } from '../services/dv-cache.service'; @@ -53,7 +53,8 @@ export class SheetDataValidationManager extends DataValidationManager(unitId, UniverInstanceType.UNIVER_SHEET)!.getSheetBySheetId(subUnitId)!; const matrix = new ObjectMatrix(); rules?.forEach((rule) => { const ruleId = rule.uid; @@ -67,7 +68,7 @@ export class SheetDataValidationManager extends DataValidationManager { this._dataValidationRefRangeController.register(unitId, subUnitId, rule); }); - this._ruleMatrix = new RuleMatrix(matrix); + this._ruleMatrix = new RuleMatrix(matrix, worksheet); } private _addRuleSideEffect(rule: ISheetDataValidationRule) { @@ -138,7 +139,7 @@ export class SheetDataValidationManager extends DataValidationManager, rule: ISheetDataValidationRule, pos: ISheetLocation, onCompete: (status: DataValidationStatus) => void): DataValidationStatus { + override validator(cellValue: Nullable, rule: ISheetDataValidationRule, pos: ISheetLocationBase, onCompete: (status: DataValidationStatus, changed: boolean) => void): DataValidationStatus { const { col, row, unitId, subUnitId } = pos; const ruleId = rule.uid; const validator = this._dataValidatorRegistryService.getValidatorItem(rule.type); @@ -157,12 +158,14 @@ export class SheetDataValidationManager extends DataValidationManager(unitId, UniverInstanceType.UNIVER_SHEET); + if (!workbook) { + throw new Error(`cannot find current workbook, unitId: ${unitId}`); + } + + const worksheet = workbook.getSheetBySheetId(subUnitId); + if (!worksheet) { + throw new Error(`cannot find current worksheet, sheetId: ${subUnitId}`); + } + + const cellRaw = worksheet.getCellRaw(row, col); + const manager = this._dataValidationModel.ensureManager(unitId, subUnitId) as SheetDataValidationManager; + const rule = manager.getRuleByLocation(row, col); + if (!rule) { + return DataValidationStatus.VALID; + } + + return new Promise((resolve) => { + manager.validator(getCellValueOrigin(cellRaw), rule, { unitId, subUnitId, row, col }, resolve); + }); + } + + async validatorWorksheet(unitId: string, subUnitId: string) { + const manager = this._dataValidationModel.ensureManager(unitId, subUnitId) as SheetDataValidationManager; + const rules = manager.getDataValidations(); + await Promise.all(rules.map((rule) => { + return Promise.all(rule.ranges.map((range) => { + const promises: Promise[] = []; + Range.foreach(range, (row, col) => { + promises.push(this.validatorCell(unitId, subUnitId, row, col)); + }); + return promises; + })); + })); + + return this._dataValidationCacheService.ensureCache(unitId, subUnitId); + } + + async validatorWorkbook(unitId: string) { + const sheetIds = this._dataValidationModel.getSubUnitIds(unitId); + const results = await Promise.all(sheetIds.map((id) => this.validatorWorksheet(unitId, id))); + + const map: Record>> = {}; + + results.forEach((result, i) => { + map[sheetIds[i]] = result; + }); + + return map; + } +} diff --git a/packages/sheets-data-validation/src/validators/checkbox-validator.ts b/packages/sheets-data-validation/src/validators/checkbox-validator.ts index 795fc59c146..f05adc825fc 100644 --- a/packages/sheets-data-validation/src/validators/checkbox-validator.ts +++ b/packages/sheets-data-validation/src/validators/checkbox-validator.ts @@ -45,7 +45,7 @@ export class CheckboxValidator extends BaseDataValidator { return !valueStr || (valueStr === (`${formula1}`) || valueStr === `${formula2}`); } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const { formula1, formula2 } = rule; const formula1Success = !Tools.isBlank(formula1); const formula2Success = !Tools.isBlank(formula2); diff --git a/packages/sheets-data-validation/src/validators/custom-validator.ts b/packages/sheets-data-validation/src/validators/custom-validator.ts index 2b9ef7e8430..714f3fdba6b 100644 --- a/packages/sheets-data-validation/src/validators/custom-validator.ts +++ b/packages/sheets-data-validation/src/validators/custom-validator.ts @@ -31,7 +31,7 @@ export class CustomFormulaValidator extends BaseDataValidator { private _customFormulaService = this.injector.get(DataValidationCustomFormulaService); - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const success = isFormulaString(rule.formula1); return { success, diff --git a/packages/sheets-data-validation/src/validators/date-validator.ts b/packages/sheets-data-validation/src/validators/date-validator.ts index 528d9ee2d56..6a04d27a65f 100644 --- a/packages/sheets-data-validation/src/validators/date-validator.ts +++ b/packages/sheets-data-validation/src/validators/date-validator.ts @@ -96,7 +96,7 @@ export class DateValidator extends BaseDataValidator { return !Tools.isBlank(formula) && (isFormulaString(formula) || !Number.isNaN(+formula!) || (Boolean(formula) && dayjs(formula).isValid())); } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const operator = rule.operator; if (!operator) { return { @@ -217,7 +217,7 @@ export class DateValidator extends BaseDataValidator { return cellValue.isBefore(formula1) || cellValue.isSame(formula1); } - validatorFormulaValue(rule: IDataValidationRuleBase): string | undefined { + validatorFormulaValue(rule: IDataValidationRule): string | undefined { if (!Tools.isDefine(rule.operator)) { return undefined; } diff --git a/packages/sheets-data-validation/src/validators/decimal-validator.ts b/packages/sheets-data-validation/src/validators/decimal-validator.ts index 9bbfb69bea8..c0bf79499a2 100644 --- a/packages/sheets-data-validation/src/validators/decimal-validator.ts +++ b/packages/sheets-data-validation/src/validators/decimal-validator.ts @@ -15,7 +15,7 @@ */ import { DataValidationOperator, DataValidationType, isFormulaString, Tools } from '@univerjs/core'; -import type { CellValue, IDataValidationRule, IDataValidationRuleBase, Nullable } from '@univerjs/core'; +import type { CellValue, IDataValidationRule, Nullable } from '@univerjs/core'; import type { IFormulaResult, IFormulaValidResult, IValidatorCellInfo } from '@univerjs/data-validation'; import { BaseDataValidator } from '@univerjs/data-validation'; import { BASE_FORMULA_INPUT_NAME } from '../views/formula-input'; @@ -95,7 +95,7 @@ export class DecimalValidator extends BaseDataValidator { return info; } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const operator = rule.operator; if (!operator) { return { diff --git a/packages/sheets-data-validation/src/validators/list-validator.ts b/packages/sheets-data-validation/src/validators/list-validator.ts index 69f593875b5..ddb9a0b7ede 100644 --- a/packages/sheets-data-validation/src/validators/list-validator.ts +++ b/packages/sheets-data-validation/src/validators/list-validator.ts @@ -14,11 +14,11 @@ * limitations under the License. */ -import { DataValidationRenderMode, DataValidationType, isFormulaString, IUniverInstanceService, Tools, UniverInstanceType } from '@univerjs/core'; -import type { CellValue, DataValidationOperator, ICellData, IDataValidationRule, IDataValidationRuleBase, ISheetDataValidationRule, Nullable, Workbook } from '@univerjs/core'; +import { DataValidationRenderMode, DataValidationType, isFormulaString, IUniverInstanceService, Rectangle, Tools, UniverInstanceType } from '@univerjs/core'; +import type { CellValue, DataValidationOperator, ICellData, IDataValidationRule, IRange, ISheetDataValidationRule, Nullable, Workbook } from '@univerjs/core'; import type { IBaseDataValidationWidget, IFormulaResult, IFormulaValidResult, IValidatorCellInfo } from '@univerjs/data-validation'; import { BaseDataValidator } from '@univerjs/data-validation'; -import { isReferenceString, LexerTreeBuilder, sequenceNodeType } from '@univerjs/engine-formula'; +import { deserializeRangeWithSheet, isReferenceString, LexerTreeBuilder, sequenceNodeType } from '@univerjs/engine-formula'; import { LIST_FORMULA_INPUT_NAME } from '../views/formula-input'; import { LIST_DROPDOWN_KEY } from '../views'; import { DropdownWidget } from '../widgets/dropdown-widget'; @@ -70,9 +70,24 @@ export function isValidListFormula(formula: string, lexer: LexerTreeBuilder) { return (nodes) && nodes.some((node) => typeof node === 'object' && node.nodeType === sequenceNodeType.FUNCTION && supportedFormula.indexOf(node.token.toLowerCase()) > -1); } +function isRuleIntersects(rule: IDataValidationRule, sheetName: string) { + const { formula1 = '', ranges } = rule; + const isRefString = isReferenceString(formula1.slice(1)); + + if (isRefString) { + const refRange = deserializeRangeWithSheet(formula1.slice(1)); + if ((!refRange.sheetName || refRange.sheetName === sheetName) && ranges.some((range: IRange) => Rectangle.intersects(range, refRange.range))) { + return true; + } + } + + return false; +} + export class ListValidator extends BaseDataValidator { protected formulaService = this.injector.get(DataValidationFormulaService); private _lexer = this.injector.get(LexerTreeBuilder); + private _univerInstanceService = this.injector.get(IUniverInstanceService); id: string = DataValidationType.LIST; title: string = 'dataValidation.list.title'; @@ -90,15 +105,19 @@ export class ListValidator extends BaseDataValidator { return rule.renderMode !== DataValidationRenderMode.TEXT; } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const success = !Tools.isBlank(rule.formula1); const valid = isValidListFormula(rule.formula1 ?? '', this._lexer); + const sheetName = this._univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_SHEET)?.getSheetBySheetId(subUnitId)?.getName(); + const isIntersects = isRuleIntersects(rule, sheetName ?? ''); return { - success: Boolean(success && valid), + success: Boolean(success && valid && !isIntersects), formula1: success - ? valid ? - undefined : + ? valid + ? !isIntersects ? + undefined : + this.localeService.t('dataValidation.validFail.listIntersects') : this.localeService.t('dataValidation.validFail.listInvalid') : this.localeService.t('dataValidation.validFail.list'), }; diff --git a/packages/sheets-data-validation/src/validators/text-length-validator.ts b/packages/sheets-data-validation/src/validators/text-length-validator.ts index 238a912a9bf..1b45f1d48df 100644 --- a/packages/sheets-data-validation/src/validators/text-length-validator.ts +++ b/packages/sheets-data-validation/src/validators/text-length-validator.ts @@ -49,7 +49,7 @@ export class TextLengthValidator extends BaseDataValidator { return !Tools.isBlank(formula) && (isFormulaString(formula) || (!Number.isNaN(+formula) && Number.isInteger(+formula))); } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRule, unitId: string, subUnitId: string): IFormulaValidResult { const operator = rule.operator; if (!operator) { return { diff --git a/packages/sheets-data-validation/src/validators/whole-validator.ts b/packages/sheets-data-validation/src/validators/whole-validator.ts index a085baa7483..48c2cc554f4 100644 --- a/packages/sheets-data-validation/src/validators/whole-validator.ts +++ b/packages/sheets-data-validation/src/validators/whole-validator.ts @@ -82,7 +82,7 @@ export class WholeValidator extends BaseDataValidator { return info; } - override validatorFormula(rule: IDataValidationRuleBase): IFormulaValidResult { + override validatorFormula(rule: IDataValidationRuleBase, unitId: string, subUnitId: string): IFormulaValidResult { const operator = rule.operator; if (!operator) { return { diff --git a/packages/sheets-data-validation/src/views/detail/index.tsx b/packages/sheets-data-validation/src/views/detail/index.tsx index d0a1a40357d..188e3a40acf 100644 --- a/packages/sheets-data-validation/src/views/detail/index.tsx +++ b/packages/sheets-data-validation/src/views/detail/index.tsx @@ -83,7 +83,7 @@ export function DataValidationDetail() { const isTwoFormula = localRule.operator ? TWO_FORMULA_OPERATOR_COUNT.includes(localRule.operator) : false; const handleOk = () => { - if (validator.validatorFormula(localRule).success) { + if (validator.validatorFormula(localRule, unitId, subUnitId).success) { dataValidationPanelService.setActiveRule(null); } else { setShowError(true); @@ -96,7 +96,6 @@ export function DataValidationDetail() { } setLocalRanges(unitRanges); const ranges = unitRanges.filter((i) => (!i.unitId || i.unitId === unitId) && (!i.sheetId || i.sheetId === subUnitId)).map((i) => i.range); - setLocalRule({ ...localRule, ranges, @@ -186,7 +185,7 @@ export function DataValidationDetail() { }; const FormulaInput = componentManager.get(validator.formulaInput); - const rangeStr = localRanges.map((i) => serializeRange(i.range)).join(','); + const rangeStr = useMemo(() => localRanges.map((i) => serializeRange(i.range)).join(','), []); const options: IDataValidationRuleOptions = getRuleOptions(localRule); @@ -276,7 +275,7 @@ export function DataValidationDetail() { }); }} showError={showError} - validResult={validator.validatorFormula(localRule)} + validResult={validator.validatorFormula(localRule, unitId, subUnitId)} unitId={unitId} subUnitId={subUnitId} ruleId={ruleId} diff --git a/packages/sheets-data-validation/src/views/formula-input/list-formula-input.tsx b/packages/sheets-data-validation/src/views/formula-input/list-formula-input.tsx index c2f85e26c82..7c3e4905677 100644 --- a/packages/sheets-data-validation/src/views/formula-input/list-formula-input.tsx +++ b/packages/sheets-data-validation/src/views/formula-input/list-formula-input.tsx @@ -80,7 +80,12 @@ const ColorSelect = (props: IColorSelectProps) => { className={styles.dataValidationFormulaColorSelect} value={value} onChange={onChange} - labelRender={(item) =>
} + labelRender={(item) => ( +
+ )} dropdownRender={() => { return (
diff --git a/packages/sheets-data-validation/src/widgets/checkbox-widget.ts b/packages/sheets-data-validation/src/widgets/checkbox-widget.ts index c406e3a3eeb..9d33608a421 100644 --- a/packages/sheets-data-validation/src/widgets/checkbox-widget.ts +++ b/packages/sheets-data-validation/src/widgets/checkbox-widget.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import type { IMouseEvent, IPointerEvent, UniverRenderingContext2D } from '@univerjs/engine-render'; +import type { IMouseEvent, IPointerEvent, UniverRenderingContext, UniverRenderingContext2D } from '@univerjs/engine-render'; import { Checkbox, fixLineWidthByScale, Transform } from '@univerjs/engine-render'; import { HorizontalAlign, ICommandService, isFormulaString, ThemeService, VerticalAlign } from '@univerjs/core'; import type { ICellRenderContext, IDataValidationRule, IStyleData, Nullable } from '@univerjs/core'; @@ -141,7 +141,7 @@ export class CheckboxRender implements IBaseDataValidationWidget { const checked = String(value) === String(formula1); const defaultColor = colors.hyacinth500; - Checkbox.drawWith(ctx, { + Checkbox.drawWith(ctx as UniverRenderingContext, { checked, width: size, height: size, diff --git a/packages/sheets-data-validation/src/widgets/dropdown-multiple-widget.ts b/packages/sheets-data-validation/src/widgets/dropdown-multiple-widget.ts index 452b9f13ee4..bab5ff3dc76 100644 --- a/packages/sheets-data-validation/src/widgets/dropdown-multiple-widget.ts +++ b/packages/sheets-data-validation/src/widgets/dropdown-multiple-widget.ts @@ -17,7 +17,7 @@ import { HorizontalAlign, ICommandService, VerticalAlign } from '@univerjs/core'; import type { ICellRenderContext } from '@univerjs/core'; import { getFontStyleString } from '@univerjs/engine-render'; -import type { IMouseEvent, IPointerEvent, Spreadsheet, SpreadsheetSkeleton, UniverRenderingContext2D } from '@univerjs/engine-render'; +import type { IMouseEvent, IPointerEvent, Spreadsheet, SpreadsheetSkeleton, UniverRenderingContext, UniverRenderingContext2D } from '@univerjs/engine-render'; import type { IBaseDataValidationWidget } from '@univerjs/data-validation'; import type { ListMultipleValidator } from '../validators/list-multiple-validator'; import { getCellValueOrigin } from '../utils/get-cell-data-origin'; @@ -147,7 +147,7 @@ export class DropdownMultipleWidget implements IBaseDataValidationWidget { items.forEach((item) => { ctx.save(); ctx.translateWithPrecision(item.left, 0); - Dropdown.drawWith(ctx, { + Dropdown.drawWith(ctx as UniverRenderingContext, { ...fontStyle, info: item, color, diff --git a/packages/sheets-data-validation/src/widgets/dropdown-widget.ts b/packages/sheets-data-validation/src/widgets/dropdown-widget.ts index 4b50f56e22d..5fe3d680b95 100644 --- a/packages/sheets-data-validation/src/widgets/dropdown-widget.ts +++ b/packages/sheets-data-validation/src/widgets/dropdown-widget.ts @@ -111,6 +111,40 @@ function createDocuments(text: string, localeService: LocaleService, style?: Nul }; } +function calcPadding(cellWidth: number, cellHeight: number, fontWidth: number, fontHeight: number, vt: VerticalAlign, ht: HorizontalAlign) { + let paddingTop = 0; + switch (vt) { + case VerticalAlign.BOTTOM: + paddingTop = (cellHeight - (MARGIN_V * 2) - fontHeight) + MARGIN_V; + break; + case VerticalAlign.MIDDLE: + paddingTop = ((cellHeight - (MARGIN_V * 2) - fontHeight) / 2) + MARGIN_V; + break; + + default: + paddingTop = MARGIN_V; + break; + } + + let paddingLeft = 0; + switch (ht) { + case HorizontalAlign.CENTER: + paddingLeft = (cellWidth - fontWidth) / 2; + break; + case HorizontalAlign.RIGHT: + paddingLeft = (cellWidth - fontWidth); + break; + + default: + break; + } + + return { + paddingLeft, + paddingTop, + }; +} + export interface IDropdownInfo { top: number; left: number; @@ -175,7 +209,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { ctx.restore(); } - // eslint-disable-next-line max-lines-per-function, complexity + // eslint-disable-next-line max-lines-per-function drawWith(ctx: UniverRenderingContext2D, info: ICellRenderContext, skeleton: SpreadsheetSkeleton): void { const { primaryWithCoord, row, col, style, data, subUnitId } = info; const _cellBounding = primaryWithCoord.isMergedMainCell ? primaryWithCoord.mergeInfo : primaryWithCoord; @@ -210,9 +244,8 @@ export class DropdownWidget implements IBaseDataValidationWidget { const valueStr = `${value ?? ''}`; const activeItem = list.find((i) => i.label === valueStr); let { tb, vt, ht } = style || {}; - tb = tb ?? WrapStrategy.WRAP; - vt = vt ?? VerticalAlign.TOP; + vt = vt ?? VerticalAlign.BOTTOM; ht = ht ?? HorizontalAlign.LEFT; if (rule.renderMode === DataValidationRenderMode.ARROW) { this._drawDownIcon(ctx, cellBounding, cellWidth, cellHeight, vt); @@ -236,33 +269,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { const textLayout = getDocsSkeletonPageSize(documentSkeleton)!; const { height: fontHeight, width: fontWidth } = textLayout; - - let paddingTop = 0; - switch (vt) { - case VerticalAlign.BOTTOM: - paddingTop = (cellHeight - MARGIN_V - fontHeight); - break; - case VerticalAlign.MIDDLE: - paddingTop = (cellHeight - MARGIN_V - fontHeight) / 2; - break; - - default: - paddingTop = MARGIN_V; - break; - } - - let paddingLeft = 0; - switch (ht) { - case HorizontalAlign.CENTER: - paddingLeft = (realWidth - fontWidth) / 2; - break; - case HorizontalAlign.RIGHT: - paddingLeft = (realWidth - fontWidth); - break; - - default: - break; - } + const { paddingTop, paddingLeft } = calcPadding(realWidth, cellHeight, fontWidth, fontHeight, vt, ht); ctx.translate(0, paddingTop); ctx.save(); @@ -296,36 +303,10 @@ export class DropdownWidget implements IBaseDataValidationWidget { ) { docModel.updateDocumentDataPageSize(Math.max(realWidth, 1)); } - documentSkeleton.calculate(); const textLayout = getDocsSkeletonPageSize(documentSkeleton)!; - const { height: fontHeight, width: fontWidth } = textLayout; - let paddingTop = 0; - switch (vt) { - case VerticalAlign.BOTTOM: - paddingTop = (cellHeight - MARGIN_V - fontHeight); - break; - case VerticalAlign.MIDDLE: - paddingTop = (cellHeight - MARGIN_V - fontHeight) / 2; - break; - - default: - paddingTop = MARGIN_V; - break; - } - let paddingLeft = 0; - switch (ht) { - case HorizontalAlign.CENTER: - paddingLeft = (realWidth - fontWidth) / 2; - break; - case HorizontalAlign.RIGHT: - paddingLeft = (realWidth - fontWidth); - break; - - default: - break; - } + const { paddingTop, paddingLeft } = calcPadding(realWidth, cellHeight, fontWidth, fontHeight, vt, ht); ctx.translate(MARGIN_H, paddingTop); const rectWidth = Math.max(cellWidth - MARGIN_H * 2, 1); @@ -393,7 +374,7 @@ export class DropdownWidget implements IBaseDataValidationWidget { if (rule.renderMode === DataValidationRenderMode.ARROW) { const realWidth = cellWidth - ICON_PLACE; - const { documentSkeleton, docModel } = createDocSkeleton(valueStr, this._localeService, style); + const { documentSkeleton, docModel } = createDocuments(valueStr, this._localeService, style); if ( tb === WrapStrategy.WRAP ) { diff --git a/packages/sheets-drawing-ui/package.json b/packages/sheets-drawing-ui/package.json index e7eec52fc8e..1933bedbd79 100644 --- a/packages/sheets-drawing-ui/package.json +++ b/packages/sheets-drawing-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-drawing-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/sheets-drawing/package.json b/packages/sheets-drawing/package.json index 286145bbcda..ad5348c8b3b 100644 --- a/packages/sheets-drawing/package.json +++ b/packages/sheets-drawing/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-drawing", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/sheets-filter-ui/package.json b/packages/sheets-filter-ui/package.json index 414bd403abc..22c3459e9b6 100644 --- a/packages/sheets-filter-ui/package.json +++ b/packages/sheets-filter-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-filter-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Univer Sheets Filter UI", "author": "DreamNum ", diff --git a/packages/sheets-filter/package.json b/packages/sheets-filter/package.json index a78b177e524..ebdaaa124a3 100644 --- a/packages/sheets-filter/package.json +++ b/packages/sheets-filter/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-filter", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "A library for filtering data in Univer Sheet", "author": "DreamNum ", diff --git a/packages/sheets-find-replace/package.json b/packages/sheets-find-replace/package.json index 45484b7454b..0f15fdb865e 100644 --- a/packages/sheets-find-replace/package.json +++ b/packages/sheets-find-replace/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-find-replace", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet find replace plugin", "author": "DreamNum ", diff --git a/packages/sheets-formula/package.json b/packages/sheets-formula/package.json index 46bdddea87c..564bd8467e9 100644 --- a/packages/sheets-formula/package.json +++ b/packages/sheets-formula/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-formula", - "version": "0.1.13", + "version": "0.1.14", "private": false, "author": "DreamNum ", "license": "Apache-2.0", diff --git a/packages/sheets-hyper-link-ui/package.json b/packages/sheets-hyper-link-ui/package.json index 985837b3212..edb7107040a 100644 --- a/packages/sheets-hyper-link-ui/package.json +++ b/packages/sheets-hyper-link-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-hyper-link-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/sheets-hyper-link-ui/src/commands/operations/sidebar.operations.ts b/packages/sheets-hyper-link-ui/src/commands/operations/sidebar.operations.ts index 1a861090967..1056edd362e 100644 --- a/packages/sheets-hyper-link-ui/src/commands/operations/sidebar.operations.ts +++ b/packages/sheets-hyper-link-ui/src/commands/operations/sidebar.operations.ts @@ -82,8 +82,8 @@ export const InsertHyperLinkOperation: ICommand = { if (!selection?.primary) { return false; } - const row = selection.primary.actualRow; - const column = selection.primary.actualColumn; + const row = selection.primary.startRow; + const column = selection.primary.startColumn; return commandService.executeCommand(OpenHyperLinkSidebarOperation.id, { unitId: target.unitId, subUnitId: target.subUnitId, diff --git a/packages/sheets-hyper-link-ui/src/common/util.ts b/packages/sheets-hyper-link-ui/src/common/util.ts index 8f6af8b1842..4b38c566115 100644 --- a/packages/sheets-hyper-link-ui/src/common/util.ts +++ b/packages/sheets-hyper-link-ui/src/common/util.ts @@ -14,10 +14,17 @@ * limitations under the License. */ +import type { ICellData, Nullable } from '@univerjs/core'; +import { DEFAULT_EMPTY_DOCUMENT_VALUE } from '@univerjs/core'; + const expression = /[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/gi; const regex = new RegExp(expression); export function isLegalLink(link: string) { + if (!Number.isNaN(+link)) { + return false; + } + if (link.startsWith('http://localhost:3002') || link.startsWith('localhost:3002')) { return true; } @@ -34,10 +41,44 @@ export function isEmail(url: string) { return pattern.test(url); } -export function serializeUrl(url: string) { - if (isLegalLink(url)) { - return hasProtocol(url) ? url : isEmail(url) ? `mailto://${url}` : `http://${url}`; +export function serializeUrl(urlStr: string) { + if (isLegalLink(urlStr)) { + const transformedUrl = hasProtocol(urlStr) ? urlStr : isEmail(urlStr) ? `mailto://${urlStr}` : `http://${urlStr}`; + + const url = new URL(transformedUrl); + if ( + url.hostname === location.hostname && + url.port === location.port && + url.protocol === location.protocol && + url.pathname === location.pathname && + url.hash && + !url.search + ) { + return url.hash; + } + } + + return urlStr; +} + +export function getCellValueOrigin(cell: Nullable) { + if (cell === null) { + return ''; + } + + if (cell?.p) { + const body = cell?.p.body; + + if (body == null) { + return ''; + } + + const data = body.dataStream; + const lastString = data.substring(data.length - 2, data.length); + const newDataStream = lastString === DEFAULT_EMPTY_DOCUMENT_VALUE ? data.substring(0, data.length - 2) : data; + + return newDataStream; } - return url; + return cell?.v; } diff --git a/packages/sheets-hyper-link-ui/src/controllers/auto-fill.controller.ts b/packages/sheets-hyper-link-ui/src/controllers/auto-fill.controller.ts index b3b69ff5854..71ee08284f1 100644 --- a/packages/sheets-hyper-link-ui/src/controllers/auto-fill.controller.ts +++ b/packages/sheets-hyper-link-ui/src/controllers/auto-fill.controller.ts @@ -102,7 +102,7 @@ export class SheetsHyperLinkAutoFillController extends Disposable { }, }); } - if (APPLY_TYPE.COPY === applyType) { + if (APPLY_TYPE.COPY === applyType || APPLY_TYPE.SERIES === applyType) { redos.push({ id: AddHyperLinkMutation.id, params: { @@ -138,7 +138,6 @@ export class SheetsHyperLinkAutoFillController extends Disposable { } }); }); - return { undos, redos, diff --git a/packages/sheets-hyper-link-ui/src/controllers/copy-paste.controller.ts b/packages/sheets-hyper-link-ui/src/controllers/copy-paste.controller.ts index d2384173482..6ba24cb1e0e 100644 --- a/packages/sheets-hyper-link-ui/src/controllers/copy-paste.controller.ts +++ b/packages/sheets-hyper-link-ui/src/controllers/copy-paste.controller.ts @@ -43,7 +43,6 @@ export class SheetsHyperLinkCopyPasteController extends Disposable { this._initCopyPaste(); } - // eslint-disable-next-line max-lines-per-function private _initCopyPaste() { this._sheetClipboardService.addClipboardHook({ id: SHEET_HYPER_LINK_UI_PLUGIN, @@ -56,20 +55,7 @@ export class SheetsHyperLinkCopyPasteController extends Disposable { }, onPastePlainText: (pasteTo: ISheetDiscreteRangeLocation, clipText: string) => { if (isLegalLink(clipText)) { - let text = serializeUrl(clipText); - const url = new URL(text); - const name = clipText; - if ( - url.hostname === location.hostname && - url.port === location.port && - url.protocol === location.protocol && - url.pathname === location.pathname && - url.hash - ) { - text = url.hash; - // const urlInfo = this._resolverService.parseHyperLink(text); - // name = urlInfo.name || clipText; - } + const text = serializeUrl(clipText); const { range, unitId, subUnitId } = pasteTo; const { ranges: [pasteToRange], mapFunc } = virtualizeDiscreteRanges([range]); @@ -98,7 +84,6 @@ export class SheetsHyperLinkCopyPasteController extends Disposable { id: newId, row, column, - display: name, payload: text, }, }, diff --git a/packages/sheets-hyper-link-ui/src/controllers/menu.ts b/packages/sheets-hyper-link-ui/src/controllers/menu.ts index 3385f09eb0c..01e33df1c52 100644 --- a/packages/sheets-hyper-link-ui/src/controllers/menu.ts +++ b/packages/sheets-hyper-link-ui/src/controllers/menu.ts @@ -49,7 +49,7 @@ export const insertLinkMenuToolbarFactory = (accessor: IAccessor) => { }; export const InsertLinkShortcut: IShortcutItem = { - id: InsertHyperLinkOperation.id, + id: InsertHyperLinkToolbarOperation.id, binding: KeyCode.K | MetaKeys.CTRL_COMMAND, preconditions: whenSheetEditorFocused, }; diff --git a/packages/sheets-hyper-link-ui/src/controllers/popup.controller.ts b/packages/sheets-hyper-link-ui/src/controllers/popup.controller.ts index 4885c13ab46..7458a53f6fa 100644 --- a/packages/sheets-hyper-link-ui/src/controllers/popup.controller.ts +++ b/packages/sheets-hyper-link-ui/src/controllers/popup.controller.ts @@ -14,17 +14,19 @@ * limitations under the License. */ -import { Disposable, LifecycleStages, OnLifecycle } from '@univerjs/core'; -import { HoverManagerService } from '@univerjs/sheets-ui'; +import { Disposable, LifecycleStages, OnLifecycle, Rectangle } from '@univerjs/core'; +import { HoverManagerService, SheetSkeletonManagerService } from '@univerjs/sheets-ui'; import { Inject } from '@wendellhu/redi'; import { debounceTime } from 'rxjs'; +import { IRenderManagerService } from '@univerjs/engine-render'; import { SheetsHyperLinkPopupService } from '../services/popup.service'; @OnLifecycle(LifecycleStages.Rendered, SheetsHyperLinkPopupController) export class SheetsHyperLinkPopupController extends Disposable { constructor( @Inject(HoverManagerService) private readonly _hoverManagerService: HoverManagerService, - @Inject(SheetsHyperLinkPopupService) private readonly _sheetsHyperLinkPopupService: SheetsHyperLinkPopupService + @Inject(SheetsHyperLinkPopupService) private readonly _sheetsHyperLinkPopupService: SheetsHyperLinkPopupService, + @Inject(IRenderManagerService) private readonly _renderManagerService: IRenderManagerService ) { super(); @@ -39,7 +41,30 @@ export class SheetsHyperLinkPopupController extends Disposable { return; } - this._sheetsHyperLinkPopupService.showPopup(currentCell.location); + const skeleton = this._renderManagerService.getRenderById(currentCell.location.unitId) + ?.with(SheetSkeletonManagerService) + .getUnitSkeleton(currentCell.location.unitId, currentCell.location.subUnitId) + ?.skeleton; + + const currentCol = currentCell.location.col; + const currentRow = currentCell.location.row; + let targetRow = currentRow; + let targetCol = currentCol; + + if (skeleton) { + skeleton.overflowCache.forValue((row, col, value) => { + if (Rectangle.contains(value, { startColumn: currentCol, endColumn: currentCol, startRow: currentRow, endRow: currentRow })) { + targetRow = row; + targetCol = col; + } + }); + } + + this._sheetsHyperLinkPopupService.showPopup({ + ...currentCell.location, + row: targetRow, + col: targetCol, + }); }) ); } diff --git a/packages/sheets-hyper-link-ui/src/controllers/ref-range.controller.ts b/packages/sheets-hyper-link-ui/src/controllers/ref-range.controller.ts deleted file mode 100644 index e4cbb482402..00000000000 --- a/packages/sheets-hyper-link-ui/src/controllers/ref-range.controller.ts +++ /dev/null @@ -1,237 +0,0 @@ -/** - * Copyright 2023-present DreamNum Inc. - * - * 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 { IRange } from '@univerjs/core'; -import { Disposable, isValidRange, IUniverInstanceService, LifecycleStages, OnLifecycle, toDisposable } from '@univerjs/core'; -import type { EffectRefRangeParams } from '@univerjs/sheets'; -import { handleDefaultRangeChangeWithEffectRefCommands, RefRangeService } from '@univerjs/sheets'; -import type { IAddHyperLinkMutationParams, ICellHyperLink, IRemoveHyperLinkMutationParams, IUpdateHyperLinkMutationParams, IUpdateHyperLinkRefMutationParams } from '@univerjs/sheets-hyper-link'; -import { AddHyperLinkMutation, HyperLinkModel, RemoveHyperLinkMutation, UpdateHyperLinkMutation, UpdateHyperLinkRefMutation } from '@univerjs/sheets-hyper-link'; -import type { IDisposable } from '@wendellhu/redi'; -import { Inject } from '@wendellhu/redi'; -import { deserializeRangeWithSheet, serializeRange } from '@univerjs/engine-formula'; -import { SheetsHyperLinkResolverService } from '../services/resolver.service'; -import { ERROR_RANGE } from '../types/const'; - -@OnLifecycle(LifecycleStages.Starting, SheetsHyperLinkRefRangeController) -export class SheetsHyperLinkRefRangeController extends Disposable { - private _disposableMap = new Map(); - private _rangeDisableMap = new Map(); - - constructor( - @Inject(RefRangeService) private readonly _refRangeService: RefRangeService, - @Inject(HyperLinkModel) private readonly _hyperLinkModel: HyperLinkModel, - @Inject(SheetsHyperLinkResolverService) private readonly _resolverService: SheetsHyperLinkResolverService, - @IUniverInstanceService private readonly _univerInstanceService: IUniverInstanceService - ) { - super(); - this._initData(); - this._initRefRange(); - } - - private _register(unitId: string, subUnitId: string, link: ICellHyperLink) { - const id = link.id; - const oldRange: IRange = { - startColumn: link.column, - endColumn: link.column, - startRow: link.row, - endRow: link.row, - }; - - const handleRangeChange = (commandInfo: EffectRefRangeParams) => { - const resultRange = handleDefaultRangeChangeWithEffectRefCommands(oldRange, commandInfo); - if (resultRange && resultRange.startColumn === oldRange.startColumn && resultRange.startRow === oldRange.startRow) { - return { - undos: [], - redos: [], - }; - } - - if (!resultRange) { - return { - redos: [{ - id: RemoveHyperLinkMutation.id, - params: { - unitId, - subUnitId, - id: link.id, - } as IRemoveHyperLinkMutationParams, - }], - undos: [{ - id: AddHyperLinkMutation.id, - params: { - unitId, - subUnitId, - link, - } as IAddHyperLinkMutationParams, - }], - }; - } - return { - redos: [{ - id: UpdateHyperLinkRefMutation.id, - params: { - unitId, - subUnitId, - id: link.id, - row: resultRange.startRow, - column: resultRange.startColumn, - } as IUpdateHyperLinkRefMutationParams, - }], - undos: [{ - id: UpdateHyperLinkRefMutation.id, - params: { - unitId, - subUnitId, - id: link.id, - row: oldRange.startRow, - column: oldRange.startColumn, - } as IUpdateHyperLinkRefMutationParams, - }], - }; - }; - - this._disposableMap.set( - id, - this._refRangeService.registerRefRange(oldRange, handleRangeChange, unitId, subUnitId) - ); - } - - private _unregister(id: string) { - const disposable = this._disposableMap.get(id); - disposable?.dispose(); - this._disposableMap.delete(id); - } - - private _registerRange(unitId: string, id: string, payload: string) { - const linkInfo = this._resolverService.parseHyperLink(payload); - if (linkInfo.searchObj && linkInfo.searchObj.range && linkInfo.searchObj.gid) { - const subUnitId = linkInfo.searchObj.gid; - const range = deserializeRangeWithSheet(linkInfo.searchObj.range).range; - - if (isValidRange(range) && linkInfo.searchObj.range !== ERROR_RANGE) { - const handleRangeChange = (commandInfo: EffectRefRangeParams) => { - const resultRange = handleDefaultRangeChangeWithEffectRefCommands(range, commandInfo); - if (resultRange && serializeRange(resultRange) === serializeRange(range)) { - return { - redos: [], - undos: [], - }; - } - - return { - redos: [{ - id: UpdateHyperLinkMutation.id, - params: { - unitId, - subUnitId, - id, - payload: { - payload: `#gid=${subUnitId}&range=${resultRange ? serializeRange(resultRange) : 'err'}`, - }, - } as IUpdateHyperLinkMutationParams, - }], - undos: [{ - id: UpdateHyperLinkMutation.id, - params: { - unitId, - subUnitId, - id, - payload: { - payload, - }, - } as IUpdateHyperLinkMutationParams, - }], - }; - }; - this._rangeDisableMap.set(id, this._refRangeService.registerRefRange(range, handleRangeChange, unitId, subUnitId)); - } - } - } - - private _unregisterRange(id: string) { - const disposable = this._rangeDisableMap.get(id); - disposable?.dispose(); - this._rangeDisableMap.delete(id); - } - - private _initData() { - const data = this._hyperLinkModel.getAll(); - - data.forEach((unitData) => { - unitData.forEach((subUnitData) => { - const { unitId, subUnitId, links } = subUnitData; - - links.forEach((link) => { - this._register(unitId, subUnitId, link); - }); - }); - }); - } - - private _initRefRange() { - this.disposeWithMe( - this._hyperLinkModel.linkUpdate$.subscribe((option) => { - switch (option.type) { - case 'add': { - this._register(option.unitId, option.subUnitId, option.payload); - this._registerRange(option.unitId, option.payload.id, option.payload.payload); - break; - } - case 'remove': { - this._unregister(option.payload.id); - this._unregisterRange(option.payload.id); - break; - } - case 'updateRef': { - const { unitId, subUnitId, id } = option; - const link = this._hyperLinkModel.getHyperLink(unitId, subUnitId, id); - if (!link) { - return; - } - - this._unregister(id); - this._register(unitId, subUnitId, link); - break; - } - case 'unload': { - const { unitLinks } = option; - unitLinks.forEach((subUnitData) => { - const { links } = subUnitData; - links.forEach((link) => { - this._unregister(link.id); - this._unregisterRange(link.id); - }); - }); - break; - } - case 'update': { - this._unregisterRange(option.id); - this._registerRange(option.unitId, option.id, option.payload.payload); - break; - } - } - }) - ); - - this.disposeWithMe(toDisposable(() => { - this._disposableMap.forEach((item) => { - item.dispose(); - }); - this._disposableMap.clear(); - })); - } -} diff --git a/packages/sheets-hyper-link-ui/src/controllers/set-range.controller.ts b/packages/sheets-hyper-link-ui/src/controllers/set-range.controller.ts index ca4ff512579..5fab1a0c9e0 100644 --- a/packages/sheets-hyper-link-ui/src/controllers/set-range.controller.ts +++ b/packages/sheets-hyper-link-ui/src/controllers/set-range.controller.ts @@ -19,8 +19,8 @@ import { CellValueType, Disposable, IUniverInstanceService, LifecycleStages, Obj import { Inject, Injector } from '@wendellhu/redi'; import type { ISetRangeValuesMutationParams } from '@univerjs/sheets'; import { ClearSelectionAllCommand, ClearSelectionContentCommand, getSheetCommandTarget, SelectionManagerService, SetRangeValuesCommand, SetRangeValuesMutation, SetRangeValuesUndoMutationFactory, SheetInterceptorService } from '@univerjs/sheets'; -import type { IAddHyperLinkCommandParams, IUpdateHyperLinkCommandParams, IUpdateHyperLinkMutationParams } from '@univerjs/sheets-hyper-link'; -import { AddHyperLinkCommand, AddHyperLinkMutation, HyperLinkModel, RemoveHyperLinkMutation, UpdateHyperLinkCommand, UpdateHyperLinkMutation } from '@univerjs/sheets-hyper-link'; +import type { IAddHyperLinkCommandParams, IUpdateHyperLinkCommandParams } from '@univerjs/sheets-hyper-link'; +import { AddHyperLinkCommand, AddHyperLinkMutation, HyperLinkModel, RemoveHyperLinkMutation, UpdateHyperLinkCommand } from '@univerjs/sheets-hyper-link'; import { isLegalLink, serializeUrl } from '../common/util'; @OnLifecycle(LifecycleStages.Starting, SheetHyperLinkSetRangeController) @@ -130,11 +130,9 @@ export class SheetHyperLinkSetRangeController extends Disposable { })); } - // eslint-disable-next-line max-lines-per-function private _initSetRangeValuesCommandInterceptor() { this.disposeWithMe(this._sheetInterceptorService.interceptCommand({ - // eslint-disable-next-line max-lines-per-function getMutations: (command) => { if (command.id === SetRangeValuesCommand.id) { const params = command.params as ISetRangeValuesMutationParams; @@ -143,11 +141,10 @@ export class SheetHyperLinkSetRangeController extends Disposable { const redos: IMutationInfo[] = []; const undos: IMutationInfo[] = []; if (params.cellValue) { - // eslint-disable-next-line max-lines-per-function new ObjectMatrix(params.cellValue).forValue((row, col, cell) => { - const cellValue = (cell?.v ?? cell?.p?.body?.dataStream.slice(0, -2) ?? '').toString(); + const cellValueRaw = cell?.v ?? cell?.p?.body?.dataStream.slice(0, -2); + const cellValue = (cellValueRaw ?? '').toString(); const link = this._hyperLinkModel.getHyperLinkByLocation(unitId, subUnitId, row, col); - if (!link) { if (isLegalLink(cellValue)) { const id = Tools.generateRandomId(); @@ -177,11 +174,7 @@ export class SheetHyperLinkSetRangeController extends Disposable { return; } - if (link.display === cellValue) { - return; - } - - if (!cellValue) { + if (cellValueRaw === '') { redos.push({ id: RemoveHyperLinkMutation.id, params: { @@ -199,33 +192,6 @@ export class SheetHyperLinkSetRangeController extends Disposable { }, }); } - - const redoParams: IUpdateHyperLinkMutationParams = { - unitId, - subUnitId, - id: link.id, - payload: { - payload: link.payload, - display: cellValue, - }, - }; - const undoParams: IUpdateHyperLinkMutationParams = { - unitId, - subUnitId, - id: link.id, - payload: { - payload: link.payload, - display: link.display, - }, - }; - redos.push({ - id: UpdateHyperLinkMutation.id, - params: redoParams, - }); - undos.push({ - id: UpdateHyperLinkMutation.id, - params: undoParams, - }); }); } diff --git a/packages/sheets-hyper-link-ui/src/index.ts b/packages/sheets-hyper-link-ui/src/index.ts index e219c96fbc4..e8f1a75b4a6 100644 --- a/packages/sheets-hyper-link-ui/src/index.ts +++ b/packages/sheets-hyper-link-ui/src/index.ts @@ -15,7 +15,6 @@ */ export { SheetsHyperLinkRemoveSheetController } from './controllers/remove-sheet.controller'; -export { SheetsHyperLinkRefRangeController } from './controllers/ref-range.controller'; export { SheetsHyperLinkRenderManagerController, SheetsHyperLinkRenderController } from './controllers/render-controllers/render.controller'; export { SheetsHyperLinkPopupService } from './services/popup.service'; export { SheetsHyperLinkResolverService } from './services/resolver.service'; diff --git a/packages/sheets-hyper-link-ui/src/plugin.ts b/packages/sheets-hyper-link-ui/src/plugin.ts index 086b181955b..d68b4ea9097 100644 --- a/packages/sheets-hyper-link-ui/src/plugin.ts +++ b/packages/sheets-hyper-link-ui/src/plugin.ts @@ -20,7 +20,6 @@ import { DependentOn, Plugin, UniverInstanceType } from '@univerjs/core'; import { UniverSheetsHyperLinkPlugin } from '@univerjs/sheets-hyper-link'; import { IRenderManagerService } from '@univerjs/engine-render'; import { SheetsHyperLinkRemoveSheetController } from './controllers/remove-sheet.controller'; -import { SheetsHyperLinkRefRangeController } from './controllers/ref-range.controller'; import { SheetsHyperLinkRenderController, SheetsHyperLinkRenderManagerController } from './controllers/render-controllers/render.controller'; import { SheetsHyperLinkPopupService } from './services/popup.service'; import { SheetsHyperLinkResolverService } from './services/resolver.service'; @@ -53,7 +52,6 @@ export class UniverSheetsHyperLinkUIPlugin extends Plugin { [SheetsHyperLinkPopupService], [SheetsHyperLinkRemoveSheetController], - [SheetsHyperLinkRefRangeController], [SheetsHyperLinkRenderManagerController], [SheetHyperLinkSetRangeController], [SheetsHyperLinkPopupController], diff --git a/packages/sheets-hyper-link-ui/src/services/popup.service.ts b/packages/sheets-hyper-link-ui/src/services/popup.service.ts index f7a9f1f2e81..e7c28e19f13 100644 --- a/packages/sheets-hyper-link-ui/src/services/popup.service.ts +++ b/packages/sheets-hyper-link-ui/src/services/popup.service.ts @@ -20,6 +20,7 @@ import { SheetCanvasPopManagerService } from '@univerjs/sheets-ui'; import type { IDisposable } from '@wendellhu/redi'; import { Inject } from '@wendellhu/redi'; import { BehaviorSubject, Subject } from 'rxjs'; +import { Disposable } from '@univerjs/core'; import { CellLinkPopup } from '../views/CellLinkPopup'; interface IHyperLinkPopup { @@ -27,6 +28,8 @@ interface IHyperLinkPopup { subUnitId: string; id: string; disposable?: IDisposable; + row: number; + col: number; } interface IHyperLinkEditing { @@ -36,7 +39,11 @@ interface IHyperLinkEditing { column: number; } -export class SheetsHyperLinkPopupService { +const isEqualLink = (a: ISheetLocationBase, b: ISheetLocationBase) => { + return a.unitId === b.unitId && a.subUnitId === b.subUnitId && a.row === b.row && a.col === b.col; +}; + +export class SheetsHyperLinkPopupService extends Disposable { private _currentPopup: IHyperLinkPopup | null = null; private _currentPopup$ = new Subject(); currentPopup$ = this._currentPopup$.asObservable(); @@ -55,11 +62,26 @@ export class SheetsHyperLinkPopupService { constructor( @Inject(HyperLinkModel) private readonly _hyperLinkModel: HyperLinkModel, @Inject(SheetCanvasPopManagerService) private readonly _sheetCanvasPopManagerService: SheetCanvasPopManagerService - ) {} + ) { + super(); + + this.disposeWithMe(() => { + this.hideCurrentPopup(); + this.endEditing(); + + this._currentEditing$.complete(); + this._currentPopup$.complete(); + }); + } showPopup(location: ISheetLocationBase) { + if (this._currentPopup && isEqualLink(location, this._currentPopup)) { + return; + } + this.hideCurrentPopup(); const { unitId, subUnitId, row, col } = location; + const link = this._hyperLinkModel.getHyperLinkByLocation(unitId, subUnitId, row, col); if (!link) { return; @@ -76,6 +98,8 @@ export class SheetsHyperLinkPopupService { subUnitId, id: link.id, disposable, + row, + col, }; this._currentPopup$.next(this._currentPopup); } diff --git a/packages/sheets-hyper-link-ui/src/services/resolver.service.ts b/packages/sheets-hyper-link-ui/src/services/resolver.service.ts index 46fc927bf31..6cfddc320e9 100644 --- a/packages/sheets-hyper-link-ui/src/services/resolver.service.ts +++ b/packages/sheets-hyper-link-ui/src/services/resolver.service.ts @@ -14,16 +14,16 @@ * limitations under the License. */ -import type { IRange, Workbook } from '@univerjs/core'; -import { ICommandService, isValidRange, IUniverInstanceService, LocaleService, Rectangle, UniverInstanceType } from '@univerjs/core'; +import type { IRange, Workbook, Worksheet } from '@univerjs/core'; +import { ICommandService, isValidRange, IUniverInstanceService, LocaleService, RANGE_TYPE, Rectangle, UniverInstanceType } from '@univerjs/core'; import { MessageType } from '@univerjs/design'; import { deserializeRangeWithSheet, IDefinedNamesService, serializeRangeWithSheet } from '@univerjs/engine-formula'; import type { ISetSelectionsOperationParams } from '@univerjs/sheets'; import { NORMAL_SELECTION_PLUGIN_NAME, SetSelectionsOperation, SetWorksheetActiveOperation } from '@univerjs/sheets'; -import { ScrollToCellCommand } from '@univerjs/sheets-ui'; +import { ERROR_RANGE } from '@univerjs/sheets-hyper-link'; +import { ScrollToRangeOperation } from '@univerjs/sheets-ui'; import { IMessageService } from '@univerjs/ui'; import { Inject } from '@wendellhu/redi'; -import { ERROR_RANGE } from '../types/const'; interface ISheetUrlParams { gid?: string; @@ -31,7 +31,22 @@ interface ISheetUrlParams { rangeid?: string; } -function getContainRange(range: IRange, mergedCells: IRange[]) { +function getContainRange(range: IRange, worksheet: Worksheet) { + const mergedCells = worksheet.getMergeData(); + const maxCol = worksheet.getMaxColumns() - 1; + const maxRow = worksheet.getMaxRows() - 1; + if (maxCol < range.endColumn) { + range.endColumn = maxCol; + } + + if (maxRow < range.endRow) { + range.endRow = maxRow; + } + + if (range.rangeType === RANGE_TYPE.COLUMN || RANGE_TYPE.ROW) { + return range; + } + const relativeCells: IRange[] = []; mergedCells.forEach((cell) => { if (Rectangle.intersects(range, cell)) { @@ -169,7 +184,7 @@ export class SheetsHyperLinkResolverService { async navigateToRange(unitId: string, subUnitId: string, range: IRange) { const worksheet = await this.navigateToSheetById(unitId, subUnitId); if (worksheet) { - const realRange = getContainRange(range, worksheet.getMergeData()); + const realRange = getContainRange(range, worksheet); await this._commandService.executeCommand( SetSelectionsOperation.id, { @@ -177,12 +192,11 @@ export class SheetsHyperLinkResolverService { subUnitId, pluginName: NORMAL_SELECTION_PLUGIN_NAME, selections: [{ - range: realRange, }], } as ISetSelectionsOperationParams ); - await this._commandService.executeCommand(ScrollToCellCommand.id, { + await this._commandService.executeCommand(ScrollToRangeOperation.id, { range: realRange, }); } diff --git a/packages/sheets-hyper-link-ui/src/types/const.ts b/packages/sheets-hyper-link-ui/src/types/const.ts index 8a2f6419c36..08dabe0648e 100644 --- a/packages/sheets-hyper-link-ui/src/types/const.ts +++ b/packages/sheets-hyper-link-ui/src/types/const.ts @@ -15,5 +15,3 @@ */ export const SHEET_HYPER_LINK_UI_PLUGIN = 'SHEET_HYPER_LINK_UI_PLUGIN'; - -export const ERROR_RANGE = 'err'; diff --git a/packages/sheets-hyper-link-ui/src/views/CellLinkEdit/index.tsx b/packages/sheets-hyper-link-ui/src/views/CellLinkEdit/index.tsx index 14fa63ffc5e..b224bc60928 100644 --- a/packages/sheets-hyper-link-ui/src/views/CellLinkEdit/index.tsx +++ b/packages/sheets-hyper-link-ui/src/views/CellLinkEdit/index.tsx @@ -17,17 +17,17 @@ import React, { useEffect, useMemo, useRef, useState } from 'react'; import { Button, FormLayout, Input, Select } from '@univerjs/design'; import { useDependency } from '@wendellhu/redi/react-bindings'; -import type { ICellData, Nullable, Workbook } from '@univerjs/core'; -import { createInternalEditorID, DEFAULT_EMPTY_DOCUMENT_VALUE, ICommandService, isValidRange, IUniverInstanceService, LocaleService, Tools, UniverInstanceType } from '@univerjs/core'; -import { RangeSelector, useObservable } from '@univerjs/ui'; +import type { IUnitRangeWithName, Workbook } from '@univerjs/core'; +import { createInternalEditorID, ICommandService, isValidRange, IUniverInstanceService, LocaleService, Tools, UniverInstanceType } from '@univerjs/core'; +import { RangeSelector, useEvent, useObservable } from '@univerjs/ui'; import { deserializeRangeWithSheet, IDefinedNamesService, serializeRange, serializeRangeToRefString, serializeRangeWithSheet } from '@univerjs/engine-formula'; -import { AddHyperLinkCommand, HyperLinkModel, UpdateHyperLinkCommand } from '@univerjs/sheets-hyper-link'; +import { AddHyperLinkCommand, ERROR_RANGE, HyperLinkModel, UpdateHyperLinkCommand } from '@univerjs/sheets-hyper-link'; import { SetWorksheetActiveOperation } from '@univerjs/sheets'; -import { ScrollToCellCommand } from '@univerjs/sheets-ui'; +import { ScrollToRangeOperation } from '@univerjs/sheets-ui'; import { SheetsHyperLinkPopupService } from '../../services/popup.service'; import { SheetsHyperLinkResolverService } from '../../services/resolver.service'; import { CloseHyperLinkSidebarOperation } from '../../commands/operations/sidebar.operations'; -import { hasProtocol, isLegalLink } from '../../common/util'; +import { getCellValueOrigin, isLegalLink, serializeUrl } from '../../common/util'; import styles from './index.module.less'; enum LinkType { @@ -37,28 +37,6 @@ enum LinkType { definedName = 'rangeid', } -function getCellValueOrigin(cell: Nullable) { - if (cell === null) { - return ''; - } - - if (cell?.p) { - const body = cell?.p.body; - - if (body == null) { - return ''; - } - - const data = body.dataStream; - const lastString = data.substring(data.length - 2, data.length); - const newDataStream = lastString === DEFAULT_EMPTY_DOCUMENT_VALUE ? data.substring(0, data.length - 2) : data; - - return newDataStream; - } - - return cell?.v; -} - export const CellLinkEdit = () => { const [id, setId] = useState(''); const [display, setDisplay] = useState(''); @@ -78,7 +56,7 @@ export const CellLinkEdit = () => { useEffect(() => { if (editing?.row !== undefined && editing.column !== undefined) { - const link = hyperLinkModel.getHyperLinkByLocation(editing.unitId, editing.subUnitId, editing.row, editing.column); + const link = hyperLinkModel.getHyperLinkByLocationSync(editing.unitId, editing.subUnitId, editing.row, editing.column); if (link) { const linkInfo = resolverService.parseHyperLink(link.payload); setId(link.id); @@ -86,12 +64,16 @@ export const CellLinkEdit = () => { if (linkInfo.type === 'outer') { setType(LinkType.link); setPayload(linkInfo.url); + if (linkInfo.url === link.display) { + setByPayload.current = true; + } return; } else { const params = linkInfo.searchObj; if (params.rangeid) { setType(LinkType.definedName); setPayload(params.rangeid); + return; } @@ -104,7 +86,16 @@ export const CellLinkEdit = () => { ?? '' : ''; setType(LinkType.range); - setPayload(serializeRangeWithSheet(sheetName, deserializeRangeWithSheet(params.range).range)); + if (params.range === ERROR_RANGE) { + setPayload(''); + } else { + const payload = (serializeRangeWithSheet(sheetName, deserializeRangeWithSheet(params.range).range)); + setPayload(payload); + if (payload === link.display) { + setByPayload.current = true; + } + } + return; } @@ -166,7 +157,7 @@ export const CellLinkEdit = () => { const formatUrl = (type: LinkType, payload: string) => { if (type === LinkType.link) { - return hasProtocol(payload) ? payload : `http://${payload}`; + return serializeUrl(payload); } if (type === LinkType.range) { @@ -180,6 +171,23 @@ export const CellLinkEdit = () => { return `#${type}=${payload}`; }; + const handleRangeChange = useEvent((newValue: IUnitRangeWithName[]) => { + const range = newValue[0]; + if (!range || !isValidRange(range.range)) { + return; + } + if (!range.sheetName) { + range.sheetName = workbook.getActiveSheet().getName(); + } + const newPayload = serializeRangeToRefString(range); + setPayload(newPayload); + + if (newPayload && (setByPayload.current || !display)) { + setDisplay(newPayload); + setByPayload.current = true; + } + }); + const handleSubmit = async () => { if (editing) { if (id) { @@ -212,12 +220,13 @@ export const CellLinkEdit = () => { subUnitId: editing.subUnitId, }); - await commandService.executeCommand(ScrollToCellCommand.id, { + const GAP = 5; + await commandService.executeCommand(ScrollToRangeOperation.id, { range: { - startRow: editing.row, - endRow: editing.row, - startColumn: editing.column, - endColumn: editing.column, + startRow: Math.max(editing.row - GAP, 0), + endRow: editing.row + GAP, + startColumn: Math.max(editing.column - GAP, 0), + endColumn: editing.column + GAP, }, }); } @@ -258,7 +267,7 @@ export const CellLinkEdit = () => { value={payload} onChange={(newLink) => { setPayload(newLink); - if (newLink && (setByPayload.current || !display)) { + if (newLink && (setByPayload.current || !display || display === payload)) { setDisplay(newLink); setByPayload.current = true; } @@ -274,23 +283,7 @@ export const CellLinkEdit = () => { id={createInternalEditorID('hyper-link-edit')} isSingleChoice value={payloadInitial} - onChange={(newValue) => { - const range = newValue[0]; - if (!range || !isValidRange(range.range)) { - return; - } - if (!range.sheetName) { - range.sheetName = workbook.getActiveSheet().getName(); - } - const newPayload = serializeRangeToRefString(range); - setPayload(newPayload); - - if (newPayload && (setByPayload.current || !display)) { - setDisplay(newPayload); - setByPayload.current = true; - } - }} - + onChange={handleRangeChange} /> )} @@ -302,7 +295,8 @@ export const CellLinkEdit = () => { onChange={(newPayload) => { setPayload(newPayload); const label = sheetsOption.find((i) => i.value === newPayload)?.label; - if (label && (setByPayload.current || !display)) { + const oldLabel = sheetsOption.find((i) => i.value === payload)?.label; + if (label && (setByPayload.current || !display || display === oldLabel)) { setDisplay(label); setByPayload.current = true; } @@ -318,7 +312,8 @@ export const CellLinkEdit = () => { onChange={(newValue) => { setPayload(newValue); const label = definedNames.find((i) => i.value === newValue)?.label; - if (label && (setByPayload.current || !display)) { + const oldLabel = definedNames.find((i) => i.value === payload)?.label; + if (label && (setByPayload.current || !display || display === oldLabel)) { setDisplay(label); setByPayload.current = true; } diff --git a/packages/sheets-hyper-link/package.json b/packages/sheets-hyper-link/package.json index ee3e18cef98..f5d1446d822 100644 --- a/packages/sheets-hyper-link/package.json +++ b/packages/sheets-hyper-link/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-hyper-link", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", @@ -58,12 +58,17 @@ }, "peerDependencies": { "@univerjs/core": "workspace:*", + "@univerjs/engine-formula": "workspace:*", "@univerjs/sheets": "workspace:*", "@wendellhu/redi": "0.15.2", "rxjs": ">=7.0.0" + }, + "dependencies": { + }, "devDependencies": { "@univerjs/core": "workspace:*", + "@univerjs/engine-formula": "workspace:*", "@univerjs/protocol": "^0.1.36", "@univerjs/shared": "workspace:*", "@univerjs/sheets": "workspace:*", diff --git a/packages/sheets-hyper-link/src/commands/mutations/update-hyper-link.mutation.ts b/packages/sheets-hyper-link/src/commands/mutations/update-hyper-link.mutation.ts index 6725d241a8d..0da2ba1ecf2 100644 --- a/packages/sheets-hyper-link/src/commands/mutations/update-hyper-link.mutation.ts +++ b/packages/sheets-hyper-link/src/commands/mutations/update-hyper-link.mutation.ts @@ -46,6 +46,7 @@ export interface IUpdateHyperLinkRefMutationParams { id: string; row: number; column: number; + silent?: boolean; } export const UpdateHyperLinkRefMutation: ICommand = { @@ -57,7 +58,7 @@ export const UpdateHyperLinkRefMutation: ICommand(); + private _watchDisposableMap = new Map(); + private _rangeDisableMap = new Map(); + private _rangeWatcherMap = new Map(); + + constructor( + @Inject(RefRangeService) private readonly _refRangeService: RefRangeService, + @Inject(HyperLinkModel) private readonly _hyperLinkModel: HyperLinkModel, + @Inject(SelectionManagerService) private readonly _selectionManagerService: SelectionManagerService, + @ICommandService private readonly _commandService: ICommandService + ) { + super(); + this._initData(); + this._initRefRange(); + } + + private _handlePositionChange = (unitId: string, subUnitId: string, link: ICellHyperLink, resultRange: Nullable, silent: boolean) => { + const oldRange: IRange = { + startColumn: link.column, + endColumn: link.column, + startRow: link.row, + endRow: link.row, + }; + + if (!resultRange) { + return { + redos: [{ + id: RemoveHyperLinkMutation.id, + params: { + unitId, + subUnitId, + id: link.id, + } as IRemoveHyperLinkMutationParams, + }], + undos: [{ + id: AddHyperLinkMutation.id, + params: { + unitId, + subUnitId, + link, + } as IAddHyperLinkMutationParams, + }], + }; + } + return { + redos: [{ + id: UpdateHyperLinkRefMutation.id, + params: { + unitId, + subUnitId, + id: link.id, + row: resultRange.startRow, + column: resultRange.startColumn, + silent, + } as IUpdateHyperLinkRefMutationParams, + }], + undos: [{ + id: UpdateHyperLinkRefMutation.id, + params: { + unitId, + subUnitId, + id: link.id, + row: oldRange.startRow, + column: oldRange.startColumn, + silent, + } as IUpdateHyperLinkRefMutationParams, + }], + }; + }; + + private _registerPosition(unitId: string, subUnitId: string, link: ICellHyperLink) { + const id = link.id; + const oldRange: IRange = { + startColumn: link.column, + endColumn: link.column, + startRow: link.row, + endRow: link.row, + }; + + const handleRefRangeChange = (commandInfo: EffectRefRangeParams) => { + const resultRange = handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests(oldRange, commandInfo, { selectionManagerService: this._selectionManagerService }); + if (resultRange && resultRange.startColumn === oldRange.startColumn && resultRange.startRow === oldRange.startRow) { + return { + undos: [], + redos: [], + }; + } + + const res = this._handlePositionChange(unitId, subUnitId, link, resultRange, false); + return res; + }; + this._disposableMap.set(id, this._refRangeService.registerRefRange(oldRange, handleRefRangeChange, unitId, subUnitId)); + } + + private _watchPosition(unitId: string, subUnitId: string, link: ICellHyperLink) { + const id = link.id; + const oldRange: IRange = { + startColumn: link.column, + endColumn: link.column, + 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) + ); + } + + private _unregisterPosition(id: string) { + const disposable = this._disposableMap.get(id); + disposable?.dispose(); + this._disposableMap.delete(id); + } + + private _unwatchPosition(id: string) { + const disposable = this._watchDisposableMap.get(id); + disposable?.dispose(); + this._watchDisposableMap.delete(id); + } + + private _registerRange(unitId: string, id: string, payload: string, silent = false) { + if (payload.startsWith('#')) { + const search = new URLSearchParams(payload.slice(1)); + // range, gid, rangeid + const searchObj = { + gid: search.get('gid') ?? '', + range: search.get('range') ?? '', + rangeid: search.get('rangeid') ?? '', + }; + + if (searchObj.range && searchObj.gid) { + const subUnitId = searchObj.gid; + const range = deserializeRangeWithSheet(searchObj.range).range; + + if (isValidRange(range) && searchObj.range !== ERROR_RANGE) { + const handleRangeChange = (commandInfo: EffectRefRangeParams) => { + const resultRange = handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests(range, commandInfo, { selectionManagerService: this._selectionManagerService }); + if (resultRange && serializeRange(resultRange) === serializeRange(range)) { + return { + redos: [], + undos: [], + }; + } + + return { + redos: [{ + id: UpdateHyperLinkMutation.id, + params: { + unitId, + subUnitId, + id, + payload: { + payload: `#gid=${subUnitId}&range=${resultRange ? serializeRange(resultRange) : 'err'}`, + }, + } as IUpdateHyperLinkMutationParams, + }], + undos: [{ + id: UpdateHyperLinkMutation.id, + params: { + unitId, + subUnitId, + id, + payload: { + payload, + }, + } as IUpdateHyperLinkMutationParams, + }], + }; + }; + this._rangeDisableMap.set(id, this._refRangeService.registerRefRange(range, handleRangeChange, unitId, subUnitId)); + if (!silent) { + this._rangeWatcherMap.set(id, this._refRangeService.watchRange(unitId, subUnitId, range, (before, after) => { + this._hyperLinkModel.updateHyperLink(unitId, subUnitId, id, { + payload: `#gid=${subUnitId}&range=${after ? serializeRange(after) : 'err'}`, + }, true); + }, true)); + } + } + } + } + } + + private _unregisterRange(id: string) { + const disposable = this._rangeDisableMap.get(id); + disposable?.dispose(); + this._rangeDisableMap.delete(id); + } + + private _unwatchRange(id: string) { + const disposable = this._rangeWatcherMap.get(id); + disposable?.dispose(); + this._rangeWatcherMap.delete(id); + } + + private _initData() { + const data = this._hyperLinkModel.getAll(); + + data.forEach((unitData) => { + unitData.forEach((subUnitData) => { + const { unitId, subUnitId, links } = subUnitData; + + links.forEach((link) => { + this._registerPosition(unitId, subUnitId, link); + this._watchPosition(unitId, subUnitId, link); + this._registerRange(unitId, link.id, link.payload); + }); + }); + }); + } + + private _initRefRange() { + this.disposeWithMe( + this._hyperLinkModel.linkUpdate$.subscribe((option) => { + switch (option.type) { + case 'add': { + this._registerPosition(option.unitId, option.subUnitId, option.payload); + this._watchPosition(option.unitId, option.subUnitId, option.payload); + this._registerRange(option.unitId, option.payload.id, option.payload.payload); + break; + } + case 'remove': { + this._unregisterPosition(option.payload.id); + this._unwatchPosition(option.payload.id); + this._unregisterRange(option.payload.id); + break; + } + case 'updateRef': { + const { unitId, subUnitId, id, silent } = option; + const link = this._hyperLinkModel.getHyperLink(unitId, subUnitId, id); + if (!link) { + return; + } + + this._unregisterPosition(id); + this._registerPosition(unitId, subUnitId, link); + if (!silent) { + this._unwatchPosition(id); + this._watchPosition(unitId, subUnitId, link); + } + break; + } + case 'unload': { + const { unitLinks } = option; + unitLinks.forEach((subUnitData) => { + const { links } = subUnitData; + links.forEach((link) => { + this._unregisterPosition(link.id); + this._unregisterRange(link.id); + }); + }); + break; + } + case 'update': { + if (!option.silent) { + this._unwatchRange(option.id); + } + this._unregisterRange(option.id); + this._registerRange(option.unitId, option.id, option.payload.payload, option.silent); + break; + } + } + }) + ); + + this.disposeWithMe(toDisposable(() => { + this._disposableMap.forEach((item) => { + item.dispose(); + }); + this._disposableMap.clear(); + })); + } +} diff --git a/packages/sheets-hyper-link/src/controllers/sheet-hyper-link-resource.controller.ts b/packages/sheets-hyper-link/src/controllers/sheet-hyper-link-resource.controller.ts index 75996b3e732..b37c4471541 100644 --- a/packages/sheets-hyper-link/src/controllers/sheet-hyper-link-resource.controller.ts +++ b/packages/sheets-hyper-link/src/controllers/sheet-hyper-link-resource.controller.ts @@ -39,7 +39,7 @@ export class SheetsHyperLinkResourceController extends Disposable { const resultMap: UnitHyperLinkJSON = {}; if (map) { map.forEach((info) => { - resultMap[info.subUnitId] = info.links; + resultMap[info.subUnitId] = info.links.map(({ display, ...link }) => link); }); return JSON.stringify(resultMap); diff --git a/packages/sheets-hyper-link/src/index.ts b/packages/sheets-hyper-link/src/index.ts index efc5fe03d31..13e511b6c27 100644 --- a/packages/sheets-hyper-link/src/index.ts +++ b/packages/sheets-hyper-link/src/index.ts @@ -27,4 +27,7 @@ export { HyperLinkModel } from './models/hyper-link.model'; export { SheetsHyperLinkController } from './controllers/sheet-hyper-link.controller'; export { HyperLinkType } from './types/enums/hyper-link-type'; export { UniverSheetsHyperLinkPlugin } from './plugin'; +export { SheetsHyperLinkRefRangeController } from './controllers/ref-range.controller'; export type { ICellHyperLink, ICellLinkContent } from './types/interfaces/i-hyper-link'; + +export { ERROR_RANGE } from './types/const'; diff --git a/packages/sheets-hyper-link/src/models/hyper-link.model.ts b/packages/sheets-hyper-link/src/models/hyper-link.model.ts index 12062768044..67409ecee32 100644 --- a/packages/sheets-hyper-link/src/models/hyper-link.model.ts +++ b/packages/sheets-hyper-link/src/models/hyper-link.model.ts @@ -15,7 +15,8 @@ */ import { Subject } from 'rxjs'; -import { Disposable, ObjectMatrix } from '@univerjs/core'; +import type { Workbook } from '@univerjs/core'; +import { Disposable, IUniverInstanceService, ObjectMatrix, UniverInstanceType } from '@univerjs/core'; import type { ICellHyperLink, ICellLinkContent } from '../types/interfaces/i-hyper-link'; type LinkUpdate = { @@ -23,23 +24,27 @@ type LinkUpdate = { payload: ICellHyperLink; unitId: string; subUnitId: string; + silent?: boolean; } | { type: 'remove'; payload: ICellHyperLink; unitId: string; subUnitId: string; + silent?: boolean; } | { type: 'update'; unitId: string; subUnitId: string; payload: ICellLinkContent; id: string; + silent?: boolean; } | { type: 'updateRef'; unitId: string; subUnitId: string; id: string; payload: { row: number; column: number }; + silent?: boolean; } | { type: 'unload'; unitId: string; @@ -48,6 +53,7 @@ type LinkUpdate = { subUnitId: string; links: ICellHyperLink[]; }[]; + silent?: boolean; }; export class HyperLinkModel extends Disposable { @@ -57,7 +63,9 @@ export class HyperLinkModel extends Disposable { private _linkMap: Map>> = new Map(); private _linkPositionMap: Map>> = new Map(); - constructor() { + constructor( + @IUniverInstanceService private readonly _univerInstanceService: IUniverInstanceService + ) { super(); this.disposeWithMe({ dispose: () => { @@ -121,22 +129,22 @@ export class HyperLinkModel extends Disposable { return false; } Object.assign(link, payload); - if (!silent) { - this._linkUpdate$.next({ - unitId, - subUnitId, - payload: { - display: link.display, - payload: link.payload, - }, - id, - type: 'update', - }); - } + + this._linkUpdate$.next({ + unitId, + subUnitId, + payload: { + display: link.display, + payload: link.payload, + }, + id, + type: 'update', + silent, + }); return true; } - updateHyperLinkRef(unitId: string, subUnitId: string, id: string, payload: { row: number; column: number }) { + updateHyperLinkRef(unitId: string, subUnitId: string, id: string, payload: { row: number; column: number }, silent = false) { const { matrix, positionMap } = this._ensureMap(unitId, subUnitId); // const current = matrix.getValue(); const position = positionMap.get(id); @@ -159,6 +167,7 @@ export class HyperLinkModel extends Disposable { payload, id, type: 'updateRef', + silent, }); return true; } @@ -195,10 +204,25 @@ export class HyperLinkModel extends Disposable { getHyperLinkByLocation(unitId: string, subUnitId: string, row: number, column: number): ICellHyperLink | undefined { const { matrix } = this._ensureMap(unitId, subUnitId); - return matrix.getValue(row, column); } + getHyperLinkByLocationSync(unitId: string, subUnitId: string, row: number, column: number) { + const { matrix } = this._ensureMap(unitId, subUnitId); + const workbook = this._univerInstanceService.getUnit(unitId, UniverInstanceType.UNIVER_SHEET); + const cell = workbook?.getSheetBySheetId(subUnitId)?.getCellRaw(row, column); + const cellValueStr = (cell?.v ?? cell?.p?.body?.dataStream.slice(0, -2) ?? '').toString(); + const link = matrix.getValue(row, column); + + if (!link) { + return undefined; + } + return { + ...link, + display: cellValueStr, + }; + } + getSubUnit(unitId: string, subUnitId: string) { const { matrix } = this._ensureMap(unitId, subUnitId); diff --git a/packages/sheets-hyper-link/src/plugin.ts b/packages/sheets-hyper-link/src/plugin.ts index aed422e77b0..34eab1e9cd0 100644 --- a/packages/sheets-hyper-link/src/plugin.ts +++ b/packages/sheets-hyper-link/src/plugin.ts @@ -21,6 +21,7 @@ import { SheetsHyperLinkController } from './controllers/sheet-hyper-link.contro import { HyperLinkModel } from './models/hyper-link.model'; import { SHEET_HYPER_LINK_PLUGIN } from './types/const'; import { SheetsHyperLinkResourceController } from './controllers/sheet-hyper-link-resource.controller'; +import { SheetsHyperLinkRefRangeController } from './controllers/ref-range.controller'; export class UniverSheetsHyperLinkPlugin extends Plugin { static override pluginName = SHEET_HYPER_LINK_PLUGIN; @@ -37,6 +38,7 @@ export class UniverSheetsHyperLinkPlugin extends Plugin { ([ [SheetsHyperLinkResourceController], [SheetsHyperLinkController], + [SheetsHyperLinkRefRangeController], [HyperLinkModel], ] as Dependency[]).forEach((dep) => { _injector.add(dep); diff --git a/packages/sheets-hyper-link/src/types/const.ts b/packages/sheets-hyper-link/src/types/const.ts index b99fdfaa82d..b9dcef556aa 100644 --- a/packages/sheets-hyper-link/src/types/const.ts +++ b/packages/sheets-hyper-link/src/types/const.ts @@ -15,3 +15,4 @@ */ export const SHEET_HYPER_LINK_PLUGIN = 'SHEET_HYPER_LINK_PLUGIN'; +export const ERROR_RANGE = 'err'; diff --git a/packages/sheets-hyper-link/src/types/interfaces/i-hyper-link.ts b/packages/sheets-hyper-link/src/types/interfaces/i-hyper-link.ts index e6f12e2748c..1b836c2ac65 100644 --- a/packages/sheets-hyper-link/src/types/interfaces/i-hyper-link.ts +++ b/packages/sheets-hyper-link/src/types/interfaces/i-hyper-link.ts @@ -23,7 +23,10 @@ export interface ICellLinkContent { * file: file://a.xlsx */ payload: string; - display: string; + /** + * only for notify, if you wan't to read the display of text, use cell-value of cell-matrix instead + */ + display?: string; } export interface ICellHyperLink extends ICellLinkContent { diff --git a/packages/sheets-numfmt/package.json b/packages/sheets-numfmt/package.json index acc2ccf0faf..08589155915 100644 --- a/packages/sheets-numfmt/package.json +++ b/packages/sheets-numfmt/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-numfmt", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet numfmt plugin", "author": "DreamNum ", diff --git a/packages/sheets-thread-comment-base/README-zh.md b/packages/sheets-thread-comment-base/README-zh.md new file mode 100644 index 00000000000..8a300866051 --- /dev/null +++ b/packages/sheets-thread-comment-base/README-zh.md @@ -0,0 +1,22 @@ +# @univerjs/sheets-thread-comment-base + +[![npm version](https://img.shields.io/npm/v/@univerjs/sheets-thread-comment-base)](https://npmjs.org/packages/@univerjs/sheets-thread-comment-base) +[![license](https://img.shields.io/npm/l/@univerjs/sheets-thread-comment-base)](https://img.shields.io/npm/l/@univerjs/sheets-thread-comment-base) + +## 简介 + +> `@univerjs/sheets-thread-comment-base` 表格 评论/批注 核心包,如需使用请查看 [@univerjs/sheets-thread-comment](../sheets-thread-comment/README-zh.md) + + +## 使用指南 + +### 安装 + +```shell +# 使用 npm +npm install @univerjs/sheets-thread-comment-base + +# 使用 pnpm +pnpm add @univerjs/sheets-thread-comment-base +``` + diff --git a/packages/sheets-thread-comment-base/README.md b/packages/sheets-thread-comment-base/README.md new file mode 100644 index 00000000000..d88a2e15c0c --- /dev/null +++ b/packages/sheets-thread-comment-base/README.md @@ -0,0 +1,22 @@ +# @univerjs/sheets-thread-comment-base + +[![npm version](https://img.shields.io/npm/v/@univerjs/sheets-thread-comment-base)](https://npmjs.org/packages/@univerjs/sheets-thread-comment-base) +[![license](https://img.shields.io/npm/l/@univerjs/sheets-thread-comment-base)](https://img.shields.io/npm/l/@univerjs/sheets-thread-comment-base) + +## 简介 + +> `@univerjs/sheets-thread-comment-base` core package for sheet comment. For using, please refer to [@univerjs/sheets-thread-comment](../sheets-thread-comment/README.md) + + +## 使用指南 + +### 安装 + +```shell +# 使用 npm +npm install @univerjs/sheets-thread-comment-base + +# 使用 pnpm +pnpm add @univerjs/sheets-thread-comment-base +``` + diff --git a/packages/sheets-thread-comment-base/package.json b/packages/sheets-thread-comment-base/package.json new file mode 100644 index 00000000000..94c7ebd9767 --- /dev/null +++ b/packages/sheets-thread-comment-base/package.json @@ -0,0 +1,88 @@ +{ + "name": "@univerjs/sheets-thread-comment-base", + "version": "0.1.13", + "private": false, + "description": "Univer sheets thread comment base plugin", + "author": "DreamNum ", + "license": "Apache-2.0", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/univer" + }, + "homepage": "https://univer.ai", + "repository": { + "type": "git", + "url": "https://github.com/dream-num/univer" + }, + "bugs": { + "url": "https://github.com/dream-num/univer/issues" + }, + "keywords": [], + "exports": { + ".": "./src/index.ts", + "./*": "./src/*", + "./locale/*": "./src/locale/*.ts" + }, + "main": "./lib/cjs/index.js", + "module": "./lib/es/index.js", + "types": "./lib/types/index.d.ts", + "publishConfig": { + "access": "public", + "main": "./lib/cjs/index.js", + "module": "./lib/es/index.js", + "exports": { + ".": { + "import": "./lib/es/index.js", + "require": "./lib/cjs/index.js", + "types": "./lib/types/index.d.ts" + }, + "./*": { + "import": "./lib/es/*", + "require": "./lib/cjs/*", + "types": "./lib/types/index.d.ts" + }, + "./locale/*": "./lib/locale/*.json", + "./lib/*": "./lib/*" + } + }, + "directories": { + "lib": "lib" + }, + "files": [ + "lib" + ], + "scripts": { + "test": "vitest run", + "test:watch": "vitest", + "coverage": "vitest run --coverage", + "lint:types": "tsc --noEmit", + "build": "tsc && vite build" + }, + "peerDependencies": { + "@univerjs/core": "workspace:*", + "@univerjs/engine-formula": "workspace:*", + "@univerjs/engine-render": "workspace:*", + "@univerjs/sheets": "workspace:*", + "@univerjs/thread-comment": "workspace:*", + "@univerjs/ui": "workspace:*", + "@wendellhu/redi": "0.15.2", + "react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "rxjs": ">=7.0.0" + }, + "dependencies": { + "@univerjs/thread-comment": "workspace:*" + }, + "devDependencies": { + "@univerjs/core": "workspace:*", + "@univerjs/design": "workspace:*", + "@univerjs/engine-formula": "workspace:*", + "@univerjs/shared": "workspace:*", + "@univerjs/ui": "workspace:*", + "@wendellhu/redi": "0.15.2", + "react": "18.2.0", + "rxjs": "^7.8.1", + "typescript": "^5.4.5", + "vite": "^5.2.12", + "vitest": "^1.6.0" + } +} diff --git a/packages/sheets-thread-comment-base/src/controllers/sheets-thread-comment-ref-range.controller.ts b/packages/sheets-thread-comment-base/src/controllers/sheets-thread-comment-ref-range.controller.ts new file mode 100644 index 00000000000..ac0ea0ff430 --- /dev/null +++ b/packages/sheets-thread-comment-base/src/controllers/sheets-thread-comment-ref-range.controller.ts @@ -0,0 +1,235 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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 { IRange, Nullable } from '@univerjs/core'; +import { Disposable, ICommandService, LifecycleStages, OnLifecycle, sequenceExecuteAsync, toDisposable } from '@univerjs/core'; +import type { IDisposable } from '@wendellhu/redi'; +import { Inject } from '@wendellhu/redi'; +import type { EffectRefRangeParams } from '@univerjs/sheets'; +import { handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests, RefRangeService, SelectionManagerService } from '@univerjs/sheets'; +import type { IAddCommentMutationParams, IUpdateCommentRefMutationParams } from '@univerjs/thread-comment'; +import { AddCommentMutation, DeleteCommentMutation, ThreadCommentModel, UpdateCommentRefMutation } from '@univerjs/thread-comment'; +import { serializeRange, singleReferenceToGrid } from '@univerjs/engine-formula'; +import type { ISheetThreadComment } from '../types/interfaces/i-sheet-thread-comment'; +import { SheetsThreadCommentModel } from '../models/sheets-thread-comment.model'; + +@OnLifecycle(LifecycleStages.Starting, SheetsThreadCommentRefRangeController) +export class SheetsThreadCommentRefRangeController extends Disposable { + private _disposableMap = new Map(); + private _watcherMap = new Map(); + + constructor( + @Inject(RefRangeService) private readonly _refRangeService: RefRangeService, + @Inject(SheetsThreadCommentModel) private readonly _sheetsThreadCommentModel: SheetsThreadCommentModel, + @Inject(ThreadCommentModel) private readonly _threadCommentModel: ThreadCommentModel, + @Inject(SelectionManagerService) private readonly _selectionManagerService: SelectionManagerService, + @ICommandService private readonly _commandService: ICommandService + ) { + super(); + this._initData(); + this._initRefRange(); + } + + private _getIdWithUnitId(unitId: string, subUnitId: string, id: string) { + return `${unitId}-${subUnitId}-${id}`; + } + + private _handleRangeChange = (unitId: string, subUnitId: string, comment: ISheetThreadComment, resultRange: Nullable, silent?: boolean) => { + const commentId = comment.id; + const oldRange: IRange = { + startColumn: comment.column, + endColumn: comment.column, + startRow: comment.row, + endRow: comment.row, + }; + + if (!resultRange) { + return { + redos: [{ + id: DeleteCommentMutation.id, + params: { + unitId, + subUnitId, + commentId, + }, + }], + undos: [{ + id: AddCommentMutation.id, + params: { + unitId, + subUnitId, + comment, + } as IAddCommentMutationParams, + }], + }; + } + return { + redos: [{ + id: UpdateCommentRefMutation.id, + params: { + unitId, + subUnitId, + payload: { + ref: serializeRange(resultRange), + commentId, + }, + silent, + } as IUpdateCommentRefMutationParams, + }], + undos: [{ + id: UpdateCommentRefMutation.id, + params: { + unitId, + subUnitId, + payload: { + ref: serializeRange(oldRange), + commentId, + }, + silent, + } as IUpdateCommentRefMutationParams, + }], + }; + }; + + private _register(unitId: string, subUnitId: string, comment: ISheetThreadComment) { + const commentId = comment.id; + const oldRange: IRange = { + startColumn: comment.column, + endColumn: comment.column, + startRow: comment.row, + endRow: comment.row, + }; + + this._disposableMap.set( + this._getIdWithUnitId(unitId, subUnitId, commentId), + this._refRangeService.registerRefRange(oldRange, (commandInfo: EffectRefRangeParams) => { + const resultRange = handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests(oldRange, commandInfo, { selectionManagerService: this._selectionManagerService }); + if (resultRange && resultRange.startColumn === oldRange.startColumn && resultRange.startRow === oldRange.startRow) { + return { + undos: [], + redos: [], + }; + } + const res = this._handleRangeChange(unitId, subUnitId, comment, resultRange, false); + return res; + }, unitId, subUnitId) + ); + } + + private _watch(unitId: string, subUnitId: string, comment: ISheetThreadComment) { + const commentId = comment.id; + const oldRange: IRange = { + startColumn: comment.column, + endColumn: comment.column, + startRow: comment.row, + endRow: comment.row, + }; + this._watcherMap.set( + this._getIdWithUnitId(unitId, subUnitId, commentId), + this._refRangeService.watchRange(unitId, subUnitId, oldRange, (before, after) => { + const { redos } = this._handleRangeChange(unitId, subUnitId, comment, after, true); + sequenceExecuteAsync(redos, this._commandService, { onlyLocal: true }); + }, true) + ); + } + + private _unwatch(unitId: string, subUnitId: string, commentId: string) { + const id = this._getIdWithUnitId(unitId, subUnitId, commentId); + this._watcherMap.get(id)?.dispose(); + this._watcherMap.delete(id); + } + + private _unregister(unitId: string, subUnitId: string, commentId: string) { + const id = this._getIdWithUnitId(unitId, subUnitId, commentId); + this._disposableMap.get(id)?.dispose(); + this._disposableMap.delete(id); + } + + private _initData() { + const data = this._threadCommentModel.getAll(); + + for (const unitId in data) { + const unitMap = data[unitId]; + for (const subUnitId in unitMap) { + const subUnitMap = unitMap[subUnitId]; + for (const id in subUnitMap) { + const comment = subUnitMap[id]; + const ref = comment.ref; + const pos = singleReferenceToGrid(ref); + const sheetComment = { + ...comment, + ...pos, + }; + this._register(unitId, subUnitId, sheetComment); + this._watch(unitId, subUnitId, sheetComment); + } + } + } + } + + private _initRefRange() { + this.disposeWithMe( + this._sheetsThreadCommentModel.commentUpdate$.subscribe((option) => { + const { unitId, subUnitId } = option; + switch (option.type) { + case 'add': { + const comment = { + ...option.payload, + row: option.row, + column: option.column, + }; + + this._register(option.unitId, option.subUnitId, comment); + this._watch(option.unitId, option.subUnitId, comment); + break; + } + case 'delete': { + this._unregister(unitId, subUnitId, option.payload.commentId); + this._unwatch(unitId, subUnitId, option.payload.commentId); + break; + } + case 'updateRef': { + const comment = this._sheetsThreadCommentModel.getComment(unitId, subUnitId, option.payload.commentId); + if (!comment) { + return; + } + + this._unregister(unitId, subUnitId, option.payload.commentId); + const sheetComment = { + ...comment, + row: option.row, + column: option.column, + }; + if (!option.silent) { + this._unwatch(unitId, subUnitId, option.payload.commentId); + this._watch(unitId, subUnitId, sheetComment); + } + + this._register(option.unitId, option.subUnitId, sheetComment); + break; + } + } + }) + ); + + this.disposeWithMe(toDisposable(() => { + this._disposableMap.forEach((item) => { + item.dispose(); + }); + this._disposableMap.clear(); + })); + } +} diff --git a/packages/sheets-thread-comment-base/src/index.ts b/packages/sheets-thread-comment-base/src/index.ts new file mode 100644 index 00000000000..ecf3dc60668 --- /dev/null +++ b/packages/sheets-thread-comment-base/src/index.ts @@ -0,0 +1,20 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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. + */ + +export { SheetsThreadCommentRefRangeController } from './controllers/sheets-thread-comment-ref-range.controller'; +export { SheetsThreadCommentModel } from './models/sheets-thread-comment.model'; +export type { ISheetThreadComment } from './types/interfaces/i-sheet-thread-comment'; +export { UniverSheetsThreadCommentBasePlugin } from './plugin'; diff --git a/packages/sheets-thread-comment/src/models/sheets-thread-comment.model.ts b/packages/sheets-thread-comment-base/src/models/sheets-thread-comment.model.ts similarity index 97% rename from packages/sheets-thread-comment/src/models/sheets-thread-comment.model.ts rename to packages/sheets-thread-comment-base/src/models/sheets-thread-comment.model.ts index bb1a5846758..df32e584677 100644 --- a/packages/sheets-thread-comment/src/models/sheets-thread-comment.model.ts +++ b/packages/sheets-thread-comment-base/src/models/sheets-thread-comment.model.ts @@ -147,7 +147,10 @@ export class SheetsThreadCommentModel extends Disposable { if (isRoot) { const { row, column } = location; if (row >= 0 && column >= 0) { - matrix.realDeleteValue(row, column); + const current = matrix.getValue(row, column); + if (current === comment.id) { + matrix.realDeleteValue(row, column); + } } } this._commentUpdate$.next({ @@ -186,7 +189,6 @@ export class SheetsThreadCommentModel extends Disposable { matrix.setValue(location.row, location.column, commentId); locationMap.set(commentId, { row: location.row, column: location.column }); } - this._commentUpdate$.next({ ...update, ...location, diff --git a/packages/sheets-thread-comment-base/src/plugin.ts b/packages/sheets-thread-comment-base/src/plugin.ts new file mode 100644 index 00000000000..75ec29c2973 --- /dev/null +++ b/packages/sheets-thread-comment-base/src/plugin.ts @@ -0,0 +1,46 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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 { Dependency } from '@wendellhu/redi'; +import { Inject, Injector } from '@wendellhu/redi'; +import { DependentOn, ICommandService, Plugin, UniverInstanceType } from '@univerjs/core'; +import { UniverThreadCommentPlugin } from '@univerjs/thread-comment'; +import { SheetsThreadCommentRefRangeController } from './controllers/sheets-thread-comment-ref-range.controller'; +import { SheetsThreadCommentModel } from './models/sheets-thread-comment.model'; +import { SHEETS_THREAD_COMMENT_BASE } from './types/const'; + +@DependentOn(UniverThreadCommentPlugin) +export class UniverSheetsThreadCommentBasePlugin extends Plugin { + static override pluginName = SHEETS_THREAD_COMMENT_BASE; + static override type = UniverInstanceType.UNIVER_SHEET; + + constructor( + config: unknown, + @Inject(Injector) protected override _injector: Injector, + @Inject(ICommandService) protected _commandService: ICommandService + ) { + super(); + } + + override onStarting(injector: Injector): void { + ([ + [SheetsThreadCommentModel], + [SheetsThreadCommentRefRangeController], + ] as Dependency[]).forEach((dep) => { + injector.add(dep); + }); + } +} diff --git a/packages/sheets-thread-comment-base/src/types/const.ts b/packages/sheets-thread-comment-base/src/types/const.ts new file mode 100644 index 00000000000..6bdf4517183 --- /dev/null +++ b/packages/sheets-thread-comment-base/src/types/const.ts @@ -0,0 +1,17 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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. + */ + +export const SHEETS_THREAD_COMMENT_BASE = 'SHEETS_THREAD_COMMENT_BASE_PLUGIN'; diff --git a/packages/sheets-thread-comment-base/src/types/interfaces/i-sheet-thread-comment.ts b/packages/sheets-thread-comment-base/src/types/interfaces/i-sheet-thread-comment.ts new file mode 100644 index 00000000000..4ae71f95fee --- /dev/null +++ b/packages/sheets-thread-comment-base/src/types/interfaces/i-sheet-thread-comment.ts @@ -0,0 +1,22 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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 { IThreadComment } from '@univerjs/thread-comment'; + +export interface ISheetThreadComment extends IThreadComment { + row: number; + column: number; +} diff --git a/packages/sheets-thread-comment-base/src/vite-env.d.ts b/packages/sheets-thread-comment-base/src/vite-env.d.ts new file mode 100644 index 00000000000..11f02fe2a00 --- /dev/null +++ b/packages/sheets-thread-comment-base/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/packages/sheets-thread-comment-base/tsconfig.json b/packages/sheets-thread-comment-base/tsconfig.json new file mode 100644 index 00000000000..d676ad2a20d --- /dev/null +++ b/packages/sheets-thread-comment-base/tsconfig.json @@ -0,0 +1,9 @@ +{ + "extends": "@univerjs/shared/tsconfigs/base", + "compilerOptions": { + "rootDir": "src", + "outDir": "lib/types" + }, + "references": [{ "path": "./tsconfig.node.json" }], + "include": ["src"] +} diff --git a/packages/sheets-thread-comment-base/tsconfig.node.json b/packages/sheets-thread-comment-base/tsconfig.node.json new file mode 100644 index 00000000000..e53dac88688 --- /dev/null +++ b/packages/sheets-thread-comment-base/tsconfig.node.json @@ -0,0 +1,4 @@ +{ + "extends": "@univerjs/shared/tsconfigs/node", + "include": ["vite.config.ts"] +} diff --git a/packages/sheets-thread-comment-base/vite.config.ts b/packages/sheets-thread-comment-base/vite.config.ts new file mode 100644 index 00000000000..925b530b4d5 --- /dev/null +++ b/packages/sheets-thread-comment-base/vite.config.ts @@ -0,0 +1,12 @@ +import createViteConfig from '@univerjs/shared/vite'; +import pkg from './package.json'; + +export default ({ mode }) => createViteConfig({}, { + mode, + pkg, + features: { + react: false, + css: true, + dom: true, + }, +}); diff --git a/packages/sheets-thread-comment/package.json b/packages/sheets-thread-comment/package.json index 2f9117b7ad7..12cac89a5da 100644 --- a/packages/sheets-thread-comment/package.json +++ b/packages/sheets-thread-comment/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-thread-comment", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Univer thread comment plugin", "author": "DreamNum ", @@ -73,6 +73,7 @@ }, "dependencies": { "@univerjs/icons": "^0.1.56", + "@univerjs/sheets-thread-comment-base": "workspace:*", "@univerjs/thread-comment": "workspace:*", "@univerjs/thread-comment-ui": "workspace:*" }, diff --git a/packages/sheets-thread-comment/src/commands/operations/comment.operation.ts b/packages/sheets-thread-comment/src/commands/operations/comment.operation.ts index 7e0a1c39dae..a538336a7b8 100644 --- a/packages/sheets-thread-comment/src/commands/operations/comment.operation.ts +++ b/packages/sheets-thread-comment/src/commands/operations/comment.operation.ts @@ -19,8 +19,8 @@ import { CommandType, IUniverInstanceService } from '@univerjs/core'; import type { ISheetLocation } from '@univerjs/sheets'; import { getSheetCommandTarget, SelectionManagerService } from '@univerjs/sheets'; import { ThreadCommentPanelService } from '@univerjs/thread-comment-ui'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; import { SheetsThreadCommentPopupService } from '../../services/sheets-thread-comment-popup.service'; -import { SheetsThreadCommentModel } from '../../models/sheets-thread-comment.model'; export const ShowAddSheetCommentModalOperation: ICommand = { type: CommandType.OPERATION, @@ -50,12 +50,12 @@ export const ShowAddSheetCommentModalOperation: ICommand = { worksheet, unitId, subUnitId: sheetId, - row: activeCell.actualRow, + row: activeCell.startRow, col: activeCell.startColumn, }; sheetsThreadCommentPopupService.showPopup(location); - const rootId = model.getByLocation(unitId, sheetId, activeCell.actualRow, activeCell.startColumn); + const rootId = model.getByLocation(unitId, sheetId, activeCell.startRow, activeCell.startColumn); if (rootId) { threadCommentPanelService.setActiveComment({ unitId, diff --git a/packages/sheets-thread-comment/src/controllers/render-controllers/render.controller.ts b/packages/sheets-thread-comment/src/controllers/render-controllers/render.controller.ts index 99ef0c1c8d8..89111a8f023 100644 --- a/packages/sheets-thread-comment/src/controllers/render-controllers/render.controller.ts +++ b/packages/sheets-thread-comment/src/controllers/render-controllers/render.controller.ts @@ -21,7 +21,7 @@ import { Inject } from '@wendellhu/redi'; import { SheetSkeletonManagerService } from '@univerjs/sheets-ui'; import type { Spreadsheet } from '@univerjs/engine-render'; import { IRenderManagerService } from '@univerjs/engine-render'; -import { SheetsThreadCommentModel } from '../../models/sheets-thread-comment.model'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; @OnLifecycle(LifecycleStages.Ready, SheetsThreadCommentRenderController) export class SheetsThreadCommentRenderController extends Disposable { diff --git a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-copy-paste.controller.ts b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-copy-paste.controller.ts index 0d484a14afb..1c65e5cc24b 100644 --- a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-copy-paste.controller.ts +++ b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-copy-paste.controller.ts @@ -20,8 +20,8 @@ import { COPY_TYPE, ISheetClipboardService } from '@univerjs/sheets-ui'; import { Inject } from '@wendellhu/redi'; import { AddCommentMutation, DeleteCommentMutation, type IThreadComment } from '@univerjs/thread-comment'; import { serializeRange, singleReferenceToGrid } from '@univerjs/engine-formula'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; import { SHEETS_THREAD_COMMENT } from '../types/const'; -import { SheetsThreadCommentModel } from '../models/sheets-thread-comment.model'; const transformRef = (ref: string, source: { row: number; column: number }, target: { row: number; column: number }) => { const refObj = singleReferenceToGrid(ref); diff --git a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-hover.controller.ts b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-hover.controller.ts index dff71a43eea..381c9fdf518 100644 --- a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-hover.controller.ts +++ b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-hover.controller.ts @@ -18,8 +18,8 @@ import { Disposable, LifecycleStages, OnLifecycle } from '@univerjs/core'; import { HoverManagerService } from '@univerjs/sheets-ui'; import { Inject } from '@wendellhu/redi'; import { debounceTime } from 'rxjs'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; import { SheetsThreadCommentPopupService } from '../services/sheets-thread-comment-popup.service'; -import { SheetsThreadCommentModel } from '../models/sheets-thread-comment.model'; @OnLifecycle(LifecycleStages.Rendered, SheetsThreadCommentHoverController) export class SheetsThreadCommentHoverController extends Disposable { diff --git a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-ref-range.controller.ts b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-ref-range.controller.ts deleted file mode 100644 index 60ad5a99f63..00000000000 --- a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment-ref-range.controller.ts +++ /dev/null @@ -1,182 +0,0 @@ -/** - * Copyright 2023-present DreamNum Inc. - * - * 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 { IRange } from '@univerjs/core'; -import { Disposable, LifecycleStages, OnLifecycle, toDisposable } from '@univerjs/core'; -import type { IDisposable } from '@wendellhu/redi'; -import { Inject } from '@wendellhu/redi'; -import type { EffectRefRangeParams } from '@univerjs/sheets'; -import { handleDefaultRangeChangeWithEffectRefCommands, RefRangeService } from '@univerjs/sheets'; -import type { IAddCommentMutationParams, IUpdateCommentRefMutationParams } from '@univerjs/thread-comment'; -import { AddCommentMutation, DeleteCommentMutation, ThreadCommentModel, UpdateCommentRefMutation } from '@univerjs/thread-comment'; -import { serializeRange, singleReferenceToGrid } from '@univerjs/engine-formula'; -import type { ISheetThreadComment } from '../types/interfaces/i-sheet-thread-comment'; -import { SheetsThreadCommentModel } from '../models/sheets-thread-comment.model'; - -@OnLifecycle(LifecycleStages.Starting, SheetsThreadCommentRefRangeController) -export class SheetsThreadCommentRefRangeController extends Disposable { - private _disposableMap = new Map(); - - constructor( - @Inject(RefRangeService) private readonly _refRangeService: RefRangeService, - @Inject(SheetsThreadCommentModel) private readonly _sheetsThreadCommentModel: SheetsThreadCommentModel, - @Inject(ThreadCommentModel) private readonly _threadCommentModel: ThreadCommentModel - ) { - super(); - this._initData(); - this._initRefRange(); - } - - private _getIdWithUnitId(unitId: string, subUnitId: string, id: string) { - return `${unitId}-${subUnitId}-${id}`; - } - - private _register(unitId: string, subUnitId: string, comment: ISheetThreadComment) { - const commentId = comment.id; - const oldRange: IRange = { - startColumn: comment.column, - endColumn: comment.column, - startRow: comment.row, - endRow: comment.row, - }; - - const handleRangeChange = (commandInfo: EffectRefRangeParams) => { - const resultRange = handleDefaultRangeChangeWithEffectRefCommands(oldRange, commandInfo); - if (resultRange && resultRange.startColumn === oldRange.startColumn && resultRange.startRow === oldRange.startRow) { - return { - undos: [], - redos: [], - }; - } - - if (!resultRange) { - return { - redos: [{ - id: DeleteCommentMutation.id, - params: { - unitId, - subUnitId, - commentId, - }, - }], - undos: [{ - id: AddCommentMutation.id, - params: { - unitId, - subUnitId, - comment, - } as IAddCommentMutationParams, - }], - }; - } - return { - redos: [{ - id: UpdateCommentRefMutation.id, - params: { - unitId, - subUnitId, - payload: { - ref: serializeRange(resultRange), - commentId, - }, - } as IUpdateCommentRefMutationParams, - }], - undos: [{ - id: UpdateCommentRefMutation.id, - params: { - unitId, - subUnitId, - payload: { - ref: serializeRange(oldRange), - commentId, - }, - } as IUpdateCommentRefMutationParams, - }], - }; - }; - - this._disposableMap.set( - this._getIdWithUnitId(unitId, subUnitId, commentId), - this._refRangeService.registerRefRange(oldRange, handleRangeChange, unitId, subUnitId) - ); - } - - private _initData() { - const data = this._threadCommentModel.getAll(); - - for (const unitId in data) { - const unitMap = data[unitId]; - for (const subUnitId in unitMap) { - const subUnitMap = unitMap[subUnitId]; - for (const id in subUnitMap) { - const comment = subUnitMap[id]; - const ref = comment.ref; - const pos = singleReferenceToGrid(ref); - this._register(unitId, subUnitId, { - ...comment, - ...pos, - }); - } - } - } - } - - private _initRefRange() { - this.disposeWithMe( - this._sheetsThreadCommentModel.commentUpdate$.subscribe((option) => { - const { unitId, subUnitId } = option; - switch (option.type) { - case 'add': { - const comment = option.payload; - this._register(option.unitId, option.subUnitId, { - ...comment, - row: option.row, - column: option.column, - }); - break; - } - case 'delete': { - const disposable = this._disposableMap.get(this._getIdWithUnitId(unitId, subUnitId, option.payload.commentId)); - disposable?.dispose(); - break; - } - case 'updateRef': { - const comment = this._sheetsThreadCommentModel.getComment(unitId, subUnitId, option.payload.commentId); - if (!comment) { - return; - } - - const disposable = this._disposableMap.get(this._getIdWithUnitId(unitId, subUnitId, comment.id)); - disposable?.dispose(); - this._register(option.unitId, option.subUnitId, { - ...comment, - row: option.row, - column: option.column, - }); - break; - } - } - }) - ); - - this.disposeWithMe(toDisposable(() => { - this._disposableMap.forEach((item) => { - item.dispose(); - }); - this._disposableMap.clear(); - })); - } -} diff --git a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment.controller.ts b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment.controller.ts index 3a38d9b91cf..b57813c658c 100644 --- a/packages/sheets-thread-comment/src/controllers/sheets-thread-comment.controller.ts +++ b/packages/sheets-thread-comment/src/controllers/sheets-thread-comment.controller.ts @@ -24,14 +24,14 @@ import { SetActiveCommentOperation, THREAD_COMMENT_PANEL, ThreadCommentPanelServ import type { ISetSelectionsOperationParams } from '@univerjs/sheets'; import { SelectionMoveType, SetSelectionsOperation, SetWorksheetActiveOperation } from '@univerjs/sheets'; import { singleReferenceToGrid } from '@univerjs/engine-formula'; -import { ScrollToCellCommand } from '@univerjs/sheets-ui'; import type { IDeleteCommentMutationParams } from '@univerjs/thread-comment'; import { DeleteCommentMutation } from '@univerjs/thread-comment'; +import { ScrollToRangeOperation } from '@univerjs/sheets-ui'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; import { SheetsThreadCommentCell } from '../views/sheets-thread-comment-cell'; import { COMMENT_SINGLE_ICON, SHEETS_THREAD_COMMENT_MODAL } from '../types/const'; import { SheetsThreadCommentPanel } from '../views/sheets-thread-comment-panel'; import { SheetsThreadCommentPopupService } from '../services/sheets-thread-comment-popup.service'; -import { SheetsThreadCommentModel } from '../models/sheets-thread-comment.model'; import { AddCommentShortcut, threadCommentMenuFactory, threadPanelMenuFactory } from './menu'; export interface IUniverSheetsThreadCommentConfig { @@ -157,12 +157,13 @@ export class SheetsThreadCommentController extends Disposable { } const location = singleReferenceToGrid(comment.ref); - await this._commandService.executeCommand(ScrollToCellCommand.id, { + const GAP = 5; + await this._commandService.executeCommand(ScrollToRangeOperation.id, { range: { - startColumn: location.column, - endColumn: location.column, - startRow: location.row, - endRow: location.row, + startRow: Math.max(location.row - GAP, 0), + endRow: location.row + GAP, + startColumn: Math.max(location.column - GAP, 0), + endColumn: location.column + GAP, }, }); this._sheetsThreadCommentPopupService.showPopup({ diff --git a/packages/sheets-thread-comment/src/index.ts b/packages/sheets-thread-comment/src/index.ts index 2e1874ef154..77530547ba6 100644 --- a/packages/sheets-thread-comment/src/index.ts +++ b/packages/sheets-thread-comment/src/index.ts @@ -19,8 +19,6 @@ export { Inject, Injector } from '@wendellhu/redi'; export { ICommandService, Plugin, UniverInstanceType } from '@univerjs/core'; export { UniverThreadCommentUIPlugin } from '@univerjs/thread-comment-ui'; export { SheetsThreadCommentController } from './controllers/sheets-thread-comment.controller'; -export { SheetsThreadCommentRefRangeController } from './controllers/sheets-thread-comment-ref-range.controller'; -export { SheetsThreadCommentModel } from './models/sheets-thread-comment.model'; export { SheetsThreadCommentPopupService } from './services/sheets-thread-comment-popup.service'; export { UniverSheetsThreadCommentPlugin } from './plugin'; export { SHEETS_THREAD_COMMENT } from './types/const'; @@ -29,3 +27,4 @@ export { SheetsThreadCommentHoverController } from './controllers/sheets-thread- export { ThreadCommentRemoveSheetsController } from './controllers/sheets-thread-comment-remove.controller'; export { IThreadCommentMentionDataService } from '@univerjs/thread-comment-ui'; export { IThreadCommentDataSourceService } from '@univerjs/thread-comment'; +export { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; diff --git a/packages/sheets-thread-comment/src/plugin.ts b/packages/sheets-thread-comment/src/plugin.ts index e088e366c3f..2e9c0220374 100644 --- a/packages/sheets-thread-comment/src/plugin.ts +++ b/packages/sheets-thread-comment/src/plugin.ts @@ -18,10 +18,9 @@ import type { Dependency } from '@wendellhu/redi'; import { Inject, Injector } from '@wendellhu/redi'; import { DependentOn, ICommandService, Plugin, Tools, UniverInstanceType } from '@univerjs/core'; import { UniverThreadCommentUIPlugin } from '@univerjs/thread-comment-ui'; +import { UniverSheetsThreadCommentBasePlugin } from '@univerjs/sheets-thread-comment-base'; import type { IUniverSheetsThreadCommentConfig } from './controllers/sheets-thread-comment.controller'; import { DefaultSheetsThreadCommentConfig, SheetsThreadCommentController } from './controllers/sheets-thread-comment.controller'; -import { SheetsThreadCommentRefRangeController } from './controllers/sheets-thread-comment-ref-range.controller'; -import { SheetsThreadCommentModel } from './models/sheets-thread-comment.model'; import { SheetsThreadCommentPopupService } from './services/sheets-thread-comment-popup.service'; import { ShowAddSheetCommentModalOperation } from './commands/operations/comment.operation'; import { SheetsThreadCommentRenderController } from './controllers/render-controllers/render.controller'; @@ -30,7 +29,7 @@ import { SheetsThreadCommentCopyPasteController } from './controllers/sheets-thr import { SheetsThreadCommentHoverController } from './controllers/sheets-thread-comment-hover.controller'; import { ThreadCommentRemoveSheetsController } from './controllers/sheets-thread-comment-remove.controller'; -@DependentOn(UniverThreadCommentUIPlugin) +@DependentOn(UniverThreadCommentUIPlugin, UniverSheetsThreadCommentBasePlugin) export class UniverSheetsThreadCommentPlugin extends Plugin { static override pluginName = SHEETS_THREAD_COMMENT; static override type = UniverInstanceType.UNIVER_SHEET; @@ -49,14 +48,12 @@ export class UniverSheetsThreadCommentPlugin extends Plugin { override onStarting(injector: Injector): void { ([ - [SheetsThreadCommentModel], [ SheetsThreadCommentController, { useFactory: () => this._injector.createInstance(SheetsThreadCommentController, this._pluginConfig), }, ], - [SheetsThreadCommentRefRangeController], [SheetsThreadCommentRenderController], [SheetsThreadCommentCopyPasteController], [SheetsThreadCommentHoverController], diff --git a/packages/sheets-thread-comment/src/views/sheets-thread-comment-cell/index.tsx b/packages/sheets-thread-comment/src/views/sheets-thread-comment-cell/index.tsx index 6e8ee9a5bd9..79133a49e08 100644 --- a/packages/sheets-thread-comment/src/views/sheets-thread-comment-cell/index.tsx +++ b/packages/sheets-thread-comment/src/views/sheets-thread-comment-cell/index.tsx @@ -20,7 +20,7 @@ import { ThreadCommentTree } from '@univerjs/thread-comment-ui'; import type { Workbook } from '@univerjs/core'; import { IUniverInstanceService, Tools, UniverInstanceType } from '@univerjs/core'; import { useObservable } from '@univerjs/ui'; -import { SheetsThreadCommentModel } from '../../models/sheets-thread-comment.model'; +import { SheetsThreadCommentModel } from '@univerjs/sheets-thread-comment-base'; import { SheetsThreadCommentPopupService } from '../../services/sheets-thread-comment-popup.service'; export const SheetsThreadCommentCell = () => { diff --git a/packages/sheets-ui/package.json b/packages/sheets-ui/package.json index ca39f1bbc07..87969832e45 100644 --- a/packages/sheets-ui/package.json +++ b/packages/sheets-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal ui-plugin-sheets", "author": "DreamNum ", diff --git a/packages/sheets-ui/src/commands/commands/set-format-painter.command.ts b/packages/sheets-ui/src/commands/commands/set-format-painter.command.ts index d855db12c09..76352bf3f54 100644 --- a/packages/sheets-ui/src/commands/commands/set-format-painter.command.ts +++ b/packages/sheets-ui/src/commands/commands/set-format-painter.command.ts @@ -100,6 +100,7 @@ export interface IApplyFormatPainterCommandParams { export const ApplyFormatPainterCommand: ICommand = { type: CommandType.COMMAND, id: 'sheet.command.apply-format-painter', + // eslint-disable-next-line max-lines-per-function handler: async (accessor: IAccessor, params: IApplyFormatPainterCommandParams) => { const commandService = accessor.get(ICommandService); const undoRedoService = accessor.get(IUndoRedoService); diff --git a/packages/sheets-ui/src/commands/operations/scroll-to-range.operation.ts b/packages/sheets-ui/src/commands/operations/scroll-to-range.operation.ts new file mode 100644 index 00000000000..161d0d0c23b --- /dev/null +++ b/packages/sheets-ui/src/commands/operations/scroll-to-range.operation.ts @@ -0,0 +1,34 @@ +/** + * Copyright 2023-present DreamNum Inc. + * + * 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 { CommandType, type ICommand, IUniverInstanceService, UniverInstanceType } from '@univerjs/core'; +import { IRenderManagerService } from '@univerjs/engine-render'; +import type { IScrollToCellCommandParams } from '../commands/set-scroll.command'; +import { SheetsScrollRenderController } from '../../controllers/render-controllers/scroll.render-controller'; + +export const ScrollToRangeOperation: ICommand = { + id: 'sheet.operation.scroll-to-range', + type: CommandType.OPERATION, + handler: (accessor, params) => { + const instanceService = accessor.get(IUniverInstanceService); + const renderManagerService = accessor.get(IRenderManagerService); + const scrollController = renderManagerService + .getRenderById(instanceService.getCurrentUnitForType(UniverInstanceType.UNIVER_SHEET)!.getUnitId())! + .with(SheetsScrollRenderController); + + return scrollController.scrollToRange(params!.range); + }, +}; diff --git a/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts b/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts index 9b8607bafca..5abda1fbd81 100644 --- a/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts +++ b/packages/sheets-ui/src/controllers/cell-custom-render.controller.ts @@ -116,6 +116,8 @@ export class CellCustomRenderController extends Disposable implements IRenderMod subUnitId, row, col, + workbook, + worksheet, }; const position = { 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 206937a2827..7894ae71f1e 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 @@ -89,7 +89,7 @@ export class SheetsScrollRenderController extends Disposable implements IRenderM this._scrollToSelection(); } else if (command.id === ScrollToCellOperation.id) { const param = command.params as IRange; - this._scrollToSelectionByDirection(param); + this.scrollToRange(param); } else if (command.id === ExpandSelectionCommand.id) { const param = command.params as IExpandSelectionCommandParams; this._scrollToSelectionForExpand(param); diff --git a/packages/sheets-ui/src/controllers/sheet-ui.controller.ts b/packages/sheets-ui/src/controllers/sheet-ui.controller.ts index 4a5c02d5a97..eb695d75be8 100644 --- a/packages/sheets-ui/src/controllers/sheet-ui.controller.ts +++ b/packages/sheets-ui/src/controllers/sheet-ui.controller.ts @@ -105,6 +105,7 @@ import { SheetPermissionOpenPanelOperation } from '../commands/operations/sheet- import { SheetPermissionOpenDialogOperation } from '../commands/operations/sheet-permission-open-dialog.operation'; import { AddRangeProtectionFromContextMenuCommand, AddRangeProtectionFromSheetBarCommand, AddRangeProtectionFromToolbarCommand, DeleteRangeProtectionFromContextMenuCommand, SetProtectionCommand, SetRangeProtectionFromContextMenuCommand, ViewSheetPermissionFromContextMenuCommand, ViewSheetPermissionFromSheetBarCommand } from '../commands/commands/range-protection.command'; import { AddWorksheetProtectionCommand, ChangeSheetProtectionFromSheetBarCommand, DeleteWorksheetProtectionCommand, DeleteWorksheetProtectionFormSheetBarCommand, SetWorksheetProtectionCommand } from '../commands/commands/worksheet-protection.command'; +import { ScrollToRangeOperation } from '../commands/operations/scroll-to-range.operation'; import { ClearSelectionAllMenuItemFactory, ClearSelectionContentMenuItemFactory, @@ -271,6 +272,7 @@ export class SheetUIController extends Disposable { this.disposeWithMe(componentManager.register(DEFINED_NAME_CONTAINER, DefinedNameContainer)); } + // eslint-disable-next-line max-lines-per-function private _initCommands(): void { [ AddWorksheetMergeAllCommand, @@ -317,6 +319,7 @@ export class SheetUIController extends Disposable { SetSelectionFrozenCommand, SetRowFrozenCommand, SetColumnFrozenCommand, + ScrollToRangeOperation, CancelFrozenCommand, SetUnderlineCommand, SetZoomRatioCommand, diff --git a/packages/sheets-ui/src/index.ts b/packages/sheets-ui/src/index.ts index 4c8d903a1ca..2c812adadd2 100644 --- a/packages/sheets-ui/src/index.ts +++ b/packages/sheets-ui/src/index.ts @@ -105,4 +105,5 @@ export { FormulaEditorController } from './controllers/editor/formula-editor.con export { StatusBarController } from './controllers/status-bar.controller'; export { SheetPermissionInterceptorBaseController } from './controllers/permission/sheet-permission-interceptor-base.controller'; export type { IRangeProtectionRenderCellData } from './views/permission/extensions/range-protection.render'; +export { ScrollToRangeOperation } from './commands/operations/scroll-to-range.operation'; export { SheetPrintInterceptorService } from './services/print-interceptor.service'; diff --git a/packages/sheets-zen-editor/package.json b/packages/sheets-zen-editor/package.json index 2041217d034..79cf315a76d 100644 --- a/packages/sheets-zen-editor/package.json +++ b/packages/sheets-zen-editor/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets-zen-editor", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Zen Editor plugin for Univer Sheets.", "author": "DreamNum ", diff --git a/packages/sheets/package.json b/packages/sheets/package.json index 6c55e2fb69a..9182a183370 100644 --- a/packages/sheets/package.json +++ b/packages/sheets/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/sheets", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal base-sheets", "author": "DreamNum ", diff --git a/packages/sheets/src/commands/commands/insert-row-col.command.ts b/packages/sheets/src/commands/commands/insert-row-col.command.ts index 1d0bd24f008..478b036c2f4 100644 --- a/packages/sheets/src/commands/commands/insert-row-col.command.ts +++ b/packages/sheets/src/commands/commands/insert-row-col.command.ts @@ -23,6 +23,7 @@ import { IUndoRedoService, IUniverInstanceService, Range, + RANGE_TYPE, sequenceExecute, UniverInstanceType, } from '@univerjs/core'; @@ -241,6 +242,7 @@ export const InsertRowAfterCommand: ICommand = { endRow: range.endRow + count, startColumn: 0, endColumn: worksheet.getColumnCount() - 1, + rangeType: RANGE_TYPE.ROW, }, }; @@ -377,6 +379,7 @@ export const InsertColBeforeCommand: ICommand = { endColumn: range.startColumn + count - 1, startRow: 0, endRow: worksheet.getLastRowWithContent(), + rangeType: RANGE_TYPE.COLUMN, }, cellValue, }; diff --git a/packages/sheets/src/index.ts b/packages/sheets/src/index.ts index 97027720cd7..f36bb39f5b1 100644 --- a/packages/sheets/src/index.ts +++ b/packages/sheets/src/index.ts @@ -291,6 +291,7 @@ export { runRefRangeMutations, handleCommonDefaultRangeChangeWithEffectRefCommands, handleDefaultRangeChangeWithEffectRefCommands, + handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests, } from './services/ref-range/util'; export { INTERCEPTOR_POINT } from './services/sheet-interceptor/interceptor-const'; export { SheetInterceptorService } from './services/sheet-interceptor/sheet-interceptor.service'; diff --git a/packages/sheets/src/services/ref-range/ref-range.service.ts b/packages/sheets/src/services/ref-range/ref-range.service.ts index b27eee84407..4d81ffef5e5 100644 --- a/packages/sheets/src/services/ref-range/ref-range.service.ts +++ b/packages/sheets/src/services/ref-range/ref-range.service.ts @@ -24,6 +24,7 @@ import { IUniverInstanceService, LifecycleStages, OnLifecycle, + RANGE_TYPE, Rectangle, toDisposable, UniverInstanceType, @@ -36,7 +37,7 @@ import { SheetInterceptorService } from '../sheet-interceptor/sheet-interceptor. import type { ISheetCommandSharedParams } from '../../commands/utils/interface'; import type { EffectRefRangeParams } from './type'; import { EffectRefRangId } from './type'; -import { adjustRangeOnMutation } from './util'; +import { adjustRangeOnMutation, getEffectedRangesOnMutation } from './util'; type RefRangCallback = (params: EffectRefRangeParams) => { redos: IMutationInfo[]; @@ -50,6 +51,8 @@ export type WatchRangeCallback = (before: IRange, after: Nullable) => vo const MERGE_REDO = createInterceptorKey('MERGE_REDO'); const MERGE_UNDO = createInterceptorKey('MERGE_UNDO'); +const MAX_ROW_COL = Math.floor(Number.MAX_SAFE_INTEGER / 10); + class WatchRange extends Disposable { constructor( private readonly _unitId: string, @@ -69,6 +72,13 @@ class WatchRange extends Disposable { if (!this._range) { return; } + if (this._skipIntersects) { + const effectRanges = getEffectedRangesOnMutation(mutation); + if (effectRanges?.some((effectRange) => Rectangle.intersects(effectRange, this._range!))) { + return false; + } + } + const afterRange: Nullable = adjustRangeOnMutation(this._range, mutation); if (afterRange && Rectangle.equals(afterRange, this._range)) { return false; @@ -189,6 +199,7 @@ export class RefRangeService extends Disposable { endRow: worksheet.getRowCount() - 1, startColumn: 0, endColumn: worksheet.getColumnCount() - 1, + rangeType: RANGE_TYPE.ROW, }; return this._checkRange([range], unitId, subUnitId); } @@ -200,6 +211,7 @@ export class RefRangeService extends Disposable { endRow: worksheet.getRowCount() - 1, startColumn: colStart, endColumn: worksheet.getColumnCount() - 1, + rangeType: RANGE_TYPE.COLUMN, }; return this._checkRange([range], unitId, subUnitId); } @@ -212,6 +224,7 @@ export class RefRangeService extends Disposable { endRow: worksheet.getRowCount() - 1, startColumn: 0, endColumn: worksheet.getColumnCount() - 1, + rangeType: RANGE_TYPE.ROW, }; return this._checkRange([range], unitId, subUnitId); } @@ -223,6 +236,7 @@ export class RefRangeService extends Disposable { endRow: worksheet.getRowCount() - 1, startColumn: colStart, endColumn: worksheet.getColumnCount() - 1, + rangeType: RANGE_TYPE.COLUMN, }; return this._checkRange([range], unitId, subUnitId); } @@ -234,7 +248,7 @@ export class RefRangeService extends Disposable { startRow: range.startRow, startColumn: range.startColumn, endColumn: range.endColumn, - endRow: worksheet.getRowCount() - 1, + endRow: MAX_ROW_COL, }; return this._checkRange([effectRange], unitId, subUnitId); } @@ -245,7 +259,7 @@ export class RefRangeService extends Disposable { const effectRange = { startRow: range.startRow, startColumn: range.startColumn, - endColumn: worksheet.getColumnCount() - 1, + endColumn: MAX_ROW_COL, endRow: range.endRow, }; return this._checkRange([effectRange], unitId, subUnitId); @@ -318,9 +332,12 @@ export class RefRangeService extends Disposable { endRow: +range.endRow, startColumn: +range.startColumn, endColumn: +range.endColumn, + rangeType: range.rangeType && +range.rangeType, }; // Todo@Gggpound : How to reduce this calculation - if (effectRanges.some((item) => Rectangle.intersects(item, realRange))) { + if ( + effectRanges.some((item) => Rectangle.intersects(item, realRange)) + ) { cbList && cbList.forEach((callback) => { callbackSet.add(callback); diff --git a/packages/sheets/src/services/ref-range/util.ts b/packages/sheets/src/services/ref-range/util.ts index f89bfe8984d..39dbc9094d9 100644 --- a/packages/sheets/src/services/ref-range/util.ts +++ b/packages/sheets/src/services/ref-range/util.ts @@ -108,6 +108,7 @@ interface ILine { /** * see docs/tldr/ref-range/move-rows-cols.tldr */ +// eslint-disable-next-line max-lines-per-function, complexity export const handleBaseMoveRowsCols = ( fromRange: ILine, toRange: ILine, @@ -909,6 +910,15 @@ export const handleDefaultRangeChangeWithEffectRefCommands = (range: IRange, com return resultRange; }; +export const handleDefaultRangeChangeWithEffectRefCommandsSkipNoInterests = (range: IRange, commandInfo: ICommandInfo, deps: { selectionManagerService: SelectionManagerService }) => { + const effectRanges = getEffectedRangesOnCommand(commandInfo as EffectRefRangeParams, deps); + if (effectRanges.some((effectRange) => Rectangle.intersects(effectRange, range))) { + return handleDefaultRangeChangeWithEffectRefCommands(range, commandInfo); + } + + return range; +}; + type MutationsAffectRange = ISheetCommandSharedParams | IRemoveSheetMutationParams @@ -1003,6 +1013,7 @@ export function adjustRangeOnMutation(range: Readonly, mutation: IMutati { start: (params as IMoveColumnsMutationParams).targetRange.startColumn, end: (params as IMoveColumnsMutationParams).targetRange.endColumn }, { start: range.startColumn, end: range.endColumn } ); + baseRangeOperator.type = OperatorType.HorizontalMove; break; case RemoveColMutation.id: baseRangeOperator = handleBaseRemoveRange((params as IRemoveColMutationParams).range, range); @@ -1045,22 +1056,31 @@ export function adjustRangeOnMutation(range: Readonly, mutation: IMutati } } -const MAX_BOUND = Math.floor(Number.MAX_SAFE_INTEGER / 10); - // eslint-disable-next-line max-lines-per-function export function getEffectedRangesOnCommand(command: EffectRefRangeParams, deps: { selectionManagerService: SelectionManagerService }) { const { selectionManagerService } = deps; switch (command.id) { case EffectRefRangId.MoveColsCommandId: { const params = command.params!; - const startColumn = Math.min(params.fromRange.startColumn, params.toRange.startColumn); - return [{ ...params.fromRange, startColumn, endColumn: MAX_BOUND }]; + return [ + params.fromRange, + { + ...params.toRange, + startColumn: params.toRange.startColumn - 0.5, + endColumn: params.toRange.endColumn - 0.5, + }, + ]; } case EffectRefRangId.MoveRowsCommandId: { const params = command.params!; - const startRow = Math.min(params.fromRange.startRow, params.toRange.startRow); - - return [{ ...params.fromRange, startRow, endRow: MAX_BOUND }]; + return [ + params.fromRange, + { + ...params.toRange, + startRow: params.toRange.startRow - 0.5, + endRow: params.toRange.startRow - 0.5, + }, + ]; } case EffectRefRangId.MoveRangeCommandId: { const params = command; @@ -1068,47 +1088,34 @@ export function getEffectedRangesOnCommand(command: EffectRefRangeParams, deps: } case EffectRefRangId.InsertRowCommandId: { const params = command; - const rowStart = params.params!.range.startRow; - const range: IRange = { - startRow: rowStart, - endRow: MAX_BOUND, - startColumn: 0, - endColumn: MAX_BOUND, - }; - return [range]; + const range: IRange = params.params!.range; + return [ + { + ...range, + startRow: range.startRow - 0.5, + endRow: range.endRow - 0.5, + }, + ]; } case EffectRefRangId.InsertColCommandId: { const params = command; - const colStart = params.params!.range.startColumn; - const range: IRange = { - startRow: 0, - endRow: MAX_BOUND, - startColumn: colStart, - endColumn: MAX_BOUND, - }; - return [range]; + const range: IRange = params.params!.range; + return [ + { + ...range, + startColumn: range.startColumn - 0.5, + endColumn: range.endColumn - 0.5, + }, + ]; } case EffectRefRangId.RemoveRowCommandId: { const params = command; - - const rowStart = params.params!.range.startRow; - const range: IRange = { - startRow: rowStart, - endRow: MAX_BOUND, - startColumn: 0, - endColumn: MAX_BOUND, - }; + const range: IRange = params.params!.range; return [range]; } case EffectRefRangId.RemoveColCommandId: { const params = command; - const colStart = params.params!.range.startColumn; - const range: IRange = { - startRow: 0, - endRow: MAX_BOUND, - startColumn: colStart, - endColumn: MAX_BOUND, - }; + const range: IRange = params.params!.range; return [range]; } case EffectRefRangId.DeleteRangeMoveUpCommandId: @@ -1118,13 +1125,7 @@ export function getEffectedRangesOnCommand(command: EffectRefRangeParams, deps: if (!range) { return []; } - const effectRange = { - startRow: range.startRow, - startColumn: range.startColumn, - endColumn: range.endColumn, - endRow: MAX_BOUND, - }; - return [effectRange]; + return [range]; } case EffectRefRangId.DeleteRangeMoveLeftCommandId: case EffectRefRangId.InsertRangeMoveRightCommandId: { @@ -1133,13 +1134,7 @@ export function getEffectedRangesOnCommand(command: EffectRefRangeParams, deps: if (!range) { return []; } - const effectRange = { - startRow: range.startRow, - startColumn: range.startColumn, - endColumn: MAX_BOUND, - endRow: range.endRow, - }; - return [effectRange]; + return [range]; } } } @@ -1148,13 +1143,25 @@ export function getEffectedRangesOnMutation(mutation: IMutationInfo", diff --git a/packages/slides/package.json b/packages/slides/package.json index 75104e57e68..10a7753abf4 100644 --- a/packages/slides/package.json +++ b/packages/slides/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/slides", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "", "author": "DreamNum ", diff --git a/packages/thread-comment-ui/package.json b/packages/thread-comment-ui/package.json index 3958d18a595..7bdda1180b8 100644 --- a/packages/thread-comment-ui/package.json +++ b/packages/thread-comment-ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/thread-comment-ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Univer common thread comment UI plugin", "author": "DreamNum ", diff --git a/packages/thread-comment/package.json b/packages/thread-comment/package.json index a18ff18264d..497800519aa 100644 --- a/packages/thread-comment/package.json +++ b/packages/thread-comment/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/thread-comment", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "Univer thread comment core plugin", "author": "DreamNum ", diff --git a/packages/thread-comment/src/commands/mutations/comment.mutation.ts b/packages/thread-comment/src/commands/mutations/comment.mutation.ts index 1421ca8f477..db092c511a7 100644 --- a/packages/thread-comment/src/commands/mutations/comment.mutation.ts +++ b/packages/thread-comment/src/commands/mutations/comment.mutation.ts @@ -50,6 +50,7 @@ export interface IUpdateCommentMutationParams { unitId: string; subUnitId: string; payload: IUpdateCommentPayload; + silent?: boolean; } export const UpdateCommentMutation: ICommand = { @@ -60,8 +61,8 @@ export const UpdateCommentMutation: ICommand = { return false; } const threadCommentModel = accessor.get(ThreadCommentModel); - const { unitId, subUnitId, payload } = params; - return threadCommentModel.updateComment(unitId, subUnitId, payload); + const { unitId, subUnitId, payload, silent } = params; + return threadCommentModel.updateComment(unitId, subUnitId, payload, silent); }, }; @@ -74,6 +75,7 @@ export interface IUpdateCommentRefMutationParams { unitId: string; subUnitId: string; payload: IUpdateCommentRefPayload; + silent?: boolean; } export const UpdateCommentRefMutation: ICommand = { @@ -84,8 +86,8 @@ export const UpdateCommentRefMutation: ICommand return false; } const threadCommentModel = accessor.get(ThreadCommentModel); - const { unitId, subUnitId, payload } = params; - return threadCommentModel.updateCommentRef(unitId, subUnitId, payload); + const { unitId, subUnitId, payload, silent } = params; + return threadCommentModel.updateCommentRef(unitId, subUnitId, payload, silent); }, }; diff --git a/packages/thread-comment/src/models/thread-comment.model.ts b/packages/thread-comment/src/models/thread-comment.model.ts index 14cd2252c7e..116015fb716 100644 --- a/packages/thread-comment/src/models/thread-comment.model.ts +++ b/packages/thread-comment/src/models/thread-comment.model.ts @@ -22,16 +22,14 @@ import type { IUpdateCommentPayload, IUpdateCommentRefPayload } from '../command export type CommentUpdate = { unitId: string; subUnitId: string; + silent?: boolean; +} & ({ type: 'add'; payload: IThreadComment; } | { - unitId: string; - subUnitId: string; type: 'update'; payload: IUpdateCommentPayload; } | { - unitId: string; - subUnitId: string; type: 'delete'; payload: { commentId: string; @@ -39,19 +37,15 @@ export type CommentUpdate = { comment: IThreadComment; }; } | { - unitId: string; - subUnitId: string; type: 'updateRef'; payload: IUpdateCommentRefPayload; } | { - unitId: string; - subUnitId: string; type: 'resolve'; payload: { commentId: string; resolved: boolean; }; -}; +}); export class ThreadCommentModel { private _commentsMap: Record>> = {}; @@ -166,7 +160,7 @@ export class ThreadCommentModel { return true; } - updateComment(unitId: string, subUnitId: string, payload: IUpdateCommentPayload) { + updateComment(unitId: string, subUnitId: string, payload: IUpdateCommentPayload, silent?: boolean) { const { commentMap } = this.ensureMap(unitId, subUnitId); const oldComment = commentMap[payload.commentId]; if (!oldComment) { @@ -182,13 +176,14 @@ export class ThreadCommentModel { subUnitId, type: 'update', payload, + silent, }); this._refreshCommentsMap$(); this._refreshCommentsTreeMap$(); return true; } - updateCommentRef(unitId: string, subUnitId: string, payload: IUpdateCommentRefPayload) { + updateCommentRef(unitId: string, subUnitId: string, payload: IUpdateCommentRefPayload, silent?: boolean) { const { commentMap } = this.ensureMap(unitId, subUnitId); const oldComment = commentMap[payload.commentId]; if (!oldComment) { @@ -202,6 +197,7 @@ export class ThreadCommentModel { subUnitId, type: 'updateRef', payload, + silent, }); this._refreshCommentsMap$(); this._refreshCommentsTreeMap$(); diff --git a/packages/ui/package.json b/packages/ui/package.json index 1f92e3d5fc3..ec435853990 100644 --- a/packages/ui/package.json +++ b/packages/ui/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/ui", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UniverSheet normal plugin UI manager", "author": "DreamNum ", diff --git a/packages/umd/package.json b/packages/umd/package.json index 48bea148f80..cfc96d97691 100644 --- a/packages/umd/package.json +++ b/packages/umd/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/umd", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UMD bundle for Univer", "author": "DreamNum ", diff --git a/packages/uniscript/package.json b/packages/uniscript/package.json index bff1945ae85..527ecf30d84 100644 --- a/packages/uniscript/package.json +++ b/packages/uniscript/package.json @@ -1,6 +1,6 @@ { "name": "@univerjs/uniscript", - "version": "0.1.13", + "version": "0.1.14", "private": false, "description": "UI component library for building exceptional Univer.", "author": "DreamNum ", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aa529497d19..d62d99c7835 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: devDependencies: '@antfu/eslint-config': - specifier: ^2.19.1 - version: 2.19.1(@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@vue/compiler-sfc@3.4.27)(eslint-plugin-format@0.1.1(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react-refresh@0.4.7(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) + specifier: ^2.20.0 + version: 2.20.0(@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@vue/compiler-sfc@3.4.27)(eslint-plugin-format@0.1.1(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react-refresh@0.4.7(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) '@commitlint/cli': specifier: ^19.3.0 version: 19.3.0(@types/node@20.12.12)(typescript@5.4.5) @@ -19,7 +19,7 @@ importers: version: 19.2.2 '@eslint-react/eslint-plugin': specifier: ^1.5.14 - version: 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + version: 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) '@playwright/test': specifier: ^1.44.1 version: 1.44.1 @@ -30,8 +30,8 @@ importers: specifier: ^8.0.1 version: 8.0.1(release-it@17.3.0(typescript@5.4.5)) '@storybook/react': - specifier: 8.1.5 - version: 8.1.5(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + specifier: 8.1.6 + version: 8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@types/node': specifier: ^20.12.12 version: 20.12.12 @@ -90,8 +90,8 @@ importers: specifier: ^14.2.3 version: 14.2.3 turbo: - specifier: ^1.13.3 - version: 1.13.3 + specifier: ^2.0.2 + version: 2.0.2 typescript: specifier: ^5.4.5 version: 5.4.5 @@ -102,8 +102,8 @@ importers: common/shared: dependencies: '@typescript-eslint/parser': - specifier: ^7.11.0 - version: 7.11.0(eslint@8.57.0)(typescript@5.4.5) + specifier: ^7.12.0 + version: 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@vitejs/plugin-react': specifier: ^4.3.0 version: 4.3.0(vite@5.2.12(@types/node@20.14.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) @@ -132,14 +132,14 @@ importers: specifier: ^1.5.0 version: 1.5.0(react@18.3.1) '@storybook/addon-essentials': - specifier: 8.1.5 - version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.1.6 + version: 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/addon-interactions': - specifier: 8.1.5 - version: 8.1.5(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) + specifier: 8.1.6 + version: 8.1.6(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) '@storybook/addon-links': - specifier: 8.1.5 - version: 8.1.5(react@18.3.1) + specifier: 8.1.6 + version: 8.1.6(react@18.3.1) '@storybook/addon-styling-webpack': specifier: ^1.0.0 version: 1.0.0(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) @@ -147,20 +147,20 @@ importers: specifier: ^1.0.3 version: 1.0.3(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) '@storybook/blocks': - specifier: 8.1.5 - version: 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.1.6 + version: 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/icons': specifier: ^1.2.9 version: 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@storybook/react': - specifier: 8.1.5 - version: 8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + specifier: 8.1.6 + version: 8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/react-webpack5': - specifier: 8.1.5 - version: 8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + specifier: 8.1.6 + version: 8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/types': - specifier: 8.1.5 - version: 8.1.5 + specifier: 8.1.6 + version: 8.1.6 '@univerjs/core': specifier: workspace:* version: link:../../packages/core @@ -180,8 +180,8 @@ importers: specifier: ^12.2.0 version: 12.2.0(less@4.2.0)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) storybook: - specifier: 8.1.5 - version: 8.1.5(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: 8.1.6 + version: 8.1.6(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) storybook-addon-swc: specifier: ^1.2.0 version: 1.2.0(@swc/core@1.5.7)(terser-webpack-plugin@5.3.10(@swc/core@1.5.7)(esbuild@0.20.2)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)))(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) @@ -504,8 +504,8 @@ importers: specifier: ^0.1.56 version: 0.1.56(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-dialog: - specifier: ^9.5.1 - version: 9.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + specifier: ^9.5.2 + version: 9.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) rc-dropdown: specifier: ^4.2.0 version: 4.2.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1632,6 +1632,9 @@ importers: '@univerjs/core': specifier: workspace:* version: link:../core + '@univerjs/engine-formula': + specifier: workspace:* + version: link:../engine-formula '@univerjs/protocol': specifier: ^0.1.36 version: 0.1.36(@grpc/grpc-js@1.10.6)(rxjs@7.8.1) @@ -1784,6 +1787,9 @@ importers: '@univerjs/sheets': specifier: workspace:* version: link:../sheets + '@univerjs/sheets-thread-comment-base': + specifier: workspace:* + version: link:../sheets-thread-comment-base '@univerjs/sheets-ui': specifier: workspace:* version: link:../sheets-ui @@ -1831,6 +1837,52 @@ importers: specifier: ^1.6.0 version: 1.6.0(@types/node@20.14.0)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0) + packages/sheets-thread-comment-base: + dependencies: + '@univerjs/engine-render': + specifier: workspace:* + version: link:../engine-render + '@univerjs/sheets': + specifier: workspace:* + version: link:../sheets + '@univerjs/thread-comment': + specifier: workspace:* + version: link:../thread-comment + devDependencies: + '@univerjs/core': + specifier: workspace:* + version: link:../core + '@univerjs/design': + specifier: workspace:* + version: link:../design + '@univerjs/engine-formula': + specifier: workspace:* + version: link:../engine-formula + '@univerjs/shared': + specifier: workspace:* + version: link:../../common/shared + '@univerjs/ui': + specifier: workspace:* + version: link:../ui + '@wendellhu/redi': + specifier: 0.15.2 + version: 0.15.2 + react: + specifier: 18.2.0 + version: 18.2.0 + rxjs: + specifier: ^7.8.1 + version: 7.8.1 + typescript: + specifier: ^5.4.5 + version: 5.4.5 + vite: + specifier: ^5.2.12 + version: 5.2.12(@types/node@20.12.12)(less@4.2.0)(sass@1.72.0)(terser@5.30.0) + vitest: + specifier: ^1.6.0 + version: 1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0) + packages/sheets-ui: dependencies: '@univerjs/docs-ui': @@ -2403,16 +2455,16 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@antfu/eslint-config@2.19.1': - resolution: {integrity: sha512-gtiyWxoBnk39Vgf23xJiSQrq3esEGYesv7Q4IZXEJJaYSpyiJWHMYxlC6dFr4V9tAczDa7bZjR9E6XWEiU7VEA==} + '@antfu/eslint-config@2.20.0': + resolution: {integrity: sha512-IFCEcrIrqgobv5/1dd7BGcNSeQ5Y5Fd+hiaB1o9YEITPpw9IrhBPxZT+n9UiRzWDWC7tMy9u7JRGX8ibLwWWtg==} hasBin: true peerDependencies: '@eslint-react/eslint-plugin': ^1.5.8 '@prettier/plugin-xml': ^3.4.1 '@unocss/eslint-plugin': '>=0.50.0' - astro-eslint-parser: ^0.16.3 + astro-eslint-parser: ^1.0.2 eslint: '>=8.40.0' - eslint-plugin-astro: ^0.31.4 + eslint-plugin-astro: ^1.2.0 eslint-plugin-format: '>=0.1.0' eslint-plugin-react-hooks: ^4.6.0 eslint-plugin-react-refresh: ^0.4.4 @@ -2556,10 +2608,6 @@ packages: resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.5': - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.6': resolution: {integrity: sha512-MZG/JcWfxybKwsA9N9PmtF2lOSFSEMVCpIRrbxccZFLJPrJciJdG/UhSh5W96GEteJI2ARqm5UAHxISwRDLSNg==} engines: {node: '>=6.9.0'} @@ -3277,10 +3325,6 @@ packages: peerDependencies: react: '>=16.8.0' - '@es-joy/jsdoccomment@0.43.0': - resolution: {integrity: sha512-Q1CnsQrytI3TlCB1IVWXWeqUIPGVEKGaE7IbVdt13Nq/3i0JESAkQQERrfiQkmlpijl+++qyqPgaS31Bvc1jRQ==} - engines: {node: '>=16'} - '@es-joy/jsdoccomment@0.43.1': resolution: {integrity: sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==} engines: {node: '>=16'} @@ -4293,58 +4337,58 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@storybook/addon-actions@8.1.5': - resolution: {integrity: sha512-XbCUGGXQ4XX/zTRgUsR1l1yZJQIWR33P/M1OEAn0HbsfwS+P87GqfApkj4N7QrMfLkUkoLtdfprp5BZul98AKA==} + '@storybook/addon-actions@8.1.6': + resolution: {integrity: sha512-EbiAdbtXN/UM4by3+qisbrQmElaIfahgNqffbst6GiCTmUCVE5if6geL1mzKd/u/rZOzx5g0EG76x8N9yDjOtg==} - '@storybook/addon-backgrounds@8.1.5': - resolution: {integrity: sha512-osAM4U8DCcKe/JGBBHoFYQi0oorNzFPwcETTy4SAc8LVqsv73SN7CyNnqCrN9Kjom9klJqB/tngvjdJ1XLu4WQ==} + '@storybook/addon-backgrounds@8.1.6': + resolution: {integrity: sha512-mrBG5mkcMg6vpRUtNxyYaseD4ucrG+mZiqZnXcx8LWzwDMOd4mOODvap286z+Si0Fl1etbGDDhPU9+hV+o1arw==} - '@storybook/addon-controls@8.1.5': - resolution: {integrity: sha512-O0796G3+772kohYOsR98puROgkEakNXZ9n3FXVsQQ57Ww/CIP7gFRv5VM5z+Jw0a+HQI5be6504hDeAOHrd8qQ==} + '@storybook/addon-controls@8.1.6': + resolution: {integrity: sha512-hDMsu4yRP/ySb/G7hbd7nSFhVNz+F9hnizJGJX4XGuiSx7rAEYjvfKQKkawxTP+VeAw6iZPj1fukvOrMCQ0xxQ==} - '@storybook/addon-docs@8.1.5': - resolution: {integrity: sha512-D3kDWjOGAthbwQOnouauOmywiTnuvI4KS0E9TDBYspcufimoNve5nOlr/oo9SLS1O2Psmhi6MDJephaDDo+5Dw==} + '@storybook/addon-docs@8.1.6': + resolution: {integrity: sha512-ejTbjDhaHn6IeTma/pwn8OutDzIqbMJKNhZx24W4FE/qvYInZIK/9gYPU9/oLKZ7FImqP3s1e4+RxDBgsq21lA==} - '@storybook/addon-essentials@8.1.5': - resolution: {integrity: sha512-0k2D5+j2N6hso3y+rSqTlQECZ/Z/Q85eit0exx2/Rk/TI5F5HceLveA1YXyC0J291nexdF9RvjP7aCtee3WSYg==} + '@storybook/addon-essentials@8.1.6': + resolution: {integrity: sha512-8ve9eM9dL6JsC5hV98unXtADvwyhIZoa3iWSeTicxWab49tvAfIM9ExwcWmUyPaB4m5q45jBSBXg66bzW2+TFw==} - '@storybook/addon-highlight@8.1.5': - resolution: {integrity: sha512-E31yrV7lmE82T57tLSm8mg50BX3lBbA4qozaVKyWohw0NrZPcrS3Z6Iyjl0dp7heoUFpE3rljHwMxADRA25HkQ==} + '@storybook/addon-highlight@8.1.6': + resolution: {integrity: sha512-QT95TS4OT0SJJVz/1m038COUdS2yWukQOwyq2rCgSM6nU3OHOPf/CldDK4Sdch7Z4jV9kRdRS0Pu4FB5SV+uOw==} - '@storybook/addon-interactions@8.1.5': - resolution: {integrity: sha512-jhDpqttch0XhRiCY9rfrs8xQpAH5KcAGAesqfaHaCnCZnZs6jqlGfJgCJAJWzA5PM+IdsK/RJ6abIgD1GAzNyw==} + '@storybook/addon-interactions@8.1.6': + resolution: {integrity: sha512-/5i3wXuNnduTN807BNSX7nJ0a3eQPjN49yUAfLtYtIoNCEsLAza2F5yt8aadKOj1rR6xqROc7y8NMhhC5Cp50A==} - '@storybook/addon-links@8.1.5': - resolution: {integrity: sha512-cRarzAI27K1JijDmFtNqr7khyg/l1JyOLXvLUDZRI6NBFGQo2oA42iHuR8jzje4tlUEh/8svGz52YR4TUvsDtQ==} + '@storybook/addon-links@8.1.6': + resolution: {integrity: sha512-EuSXoK+tpApjW08ZiC4yE9ePdJkIu36AFPJHA6FVierVU31klW+cbFqps88JpmALZkrlf+pzKf3uBIGLrkBSAw==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta peerDependenciesMeta: react: optional: true - '@storybook/addon-measure@8.1.5': - resolution: {integrity: sha512-kHiv2qq9Ws0lGQ8p7FfMKFtXO4hrRiYStG8CCp9i1IfPzLpY8S9Kl9bwnoyVyI5bwqZP1wjFQVw8sjumV6FMFw==} + '@storybook/addon-measure@8.1.6': + resolution: {integrity: sha512-afG6XzClrkBQ9ZUZQs0rI9z/RYB+qhebG5k1NTCGYJnj7K4c+jso9nQ9vmypOBqlYKwTT2ZG+9xSK1/IhudEvg==} - '@storybook/addon-outline@8.1.5': - resolution: {integrity: sha512-eCXnGN24ewfvUKKpzTJP7HtPJkAexIBnQdJCw9R9Jk8IyHh7xPWsrz+haY1FQHTXZGAevoBcI4/tpG2XOumBlw==} + '@storybook/addon-outline@8.1.6': + resolution: {integrity: sha512-YjH3L4kxln0fLF77oDGJ2KF1I0RNrBQ9FRtqZkGMUbplxwYU0BBrguSgVeGxTLN1q/69LmL6wjFP4nLzqZARhA==} '@storybook/addon-styling-webpack@1.0.0': resolution: {integrity: sha512-jo1kzn7pi+NA+LZxrWoRvW6w7dXIKY/BjTG80XX2uU92lIKT+X1k/9vYk/0KPVK3Bsf4tO6ToAuqIRyOk7MHtg==} peerDependencies: webpack: ^5.0.0 - '@storybook/addon-toolbars@8.1.5': - resolution: {integrity: sha512-UxEtb4ii0FORqUuPgLycPQ0MQ4Bq2YWBft6yT00xMjUuwkld27BlrvnpaBlx+disgWwOKGKVd02f/4dbZr2s1g==} + '@storybook/addon-toolbars@8.1.6': + resolution: {integrity: sha512-d1GciLzD2ZRqh7+b8+JGuCdx8x/MAobhTy+jKeK79d+QKNtPhqZ1OvyUbwObgD6XLF8B/3DvyP3r52lmYMwlnQ==} - '@storybook/addon-viewport@8.1.5': - resolution: {integrity: sha512-kHaYdaAiv7107GSi4TsS1wEDN4I7cdYWSaCBBSvJlvvYvULKFVMkhsDJlSioskICx6OchkIKY5LJgLZ72fxdVA==} + '@storybook/addon-viewport@8.1.6': + resolution: {integrity: sha512-4EpEkJW1fPqlHIqG7OQtnAaHh9DPj7k+guXpzWjVwHfF6AE0fXIg7Yx6iVDGPyKkRaagPw6nL8DOr2U8YwK4rQ==} '@storybook/addon-webpack5-compiler-swc@1.0.3': resolution: {integrity: sha512-ahemZdpFN7Ikz2WTy0sLJ38t6OWLLKweeTNOfUh2ARd3x0CqJxAqWLBAFXJke+2KDFUQg9MTE+1rwHEFCPYUvQ==} engines: {node: '>=18'} - '@storybook/blocks@8.1.5': - resolution: {integrity: sha512-rq8Ej5feS2BlfXOpNLDwdASkIIZJtKzLy9cUpuGftTiu06HiWAk3wpNpnn/kuunDYlZUa+qHEOSiIkTrdduwYw==} + '@storybook/blocks@8.1.6': + resolution: {integrity: sha512-HBp80G9puOejqlBA0iNlV3gUxc7TkBlNIVG2rmhjcvPZUueldxTUGIGvEfTLdEM6nqzNVZT+duXwqeHHnDcynA==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -4354,58 +4398,58 @@ packages: react-dom: optional: true - '@storybook/builder-manager@8.1.5': - resolution: {integrity: sha512-wDiHLV+UPaUN+765WwXkocVRB2QnJ61CjLHbpWaLiJvryFJt+JQ6nAvgSalCRnZxI046ztbS9T6okhpFI011IA==} + '@storybook/builder-manager@8.1.6': + resolution: {integrity: sha512-Y5d+dikKnUuCYyh4VLEF6A+AbWughEgtipVkDKOddSTzn04trClIOKqfhQqEUObydCpgvvfdjGXJa/zDRV/UQA==} - '@storybook/builder-webpack5@8.1.5': - resolution: {integrity: sha512-gGVlApa0JVu0q7Ws37Kubh9e8wDKoJh23DXGIeK3EHVloL2XU9+wgP2NcUoiySvTIKPtDB7Zljg1/BXgqeOJ4w==} + '@storybook/builder-webpack5@8.1.6': + resolution: {integrity: sha512-FP/vEUSM+/x+6Pof4d3EBaLH4dlzpH97Pzc3RsVD1qvEqVRHUyfbROh5Ud7/+X0m75M2kkpFtmlH/W9fVWzWGw==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@storybook/channels@8.1.5': - resolution: {integrity: sha512-R+puP4tWYzQUbpIp8sX6U5oI+ZUevVOaFxXGaAN3PRXjIRC38oKTVWzj/G6GdziVFzN6rDn+JsYPmiRMYo1sYg==} + '@storybook/channels@8.1.6': + resolution: {integrity: sha512-CzDnP6qfI8OC8pGUk+wPUzLPYcKhX8XbriF2gBtwl6qVM8YfkHP2mLTiDYDwBIi0rLuUbSm/SpILXQ/ouOHOGw==} - '@storybook/cli@8.1.5': - resolution: {integrity: sha512-VEYluZEMleNEnD5wTD90KTh03pwjvQwEEmzHAJQJdLbWTAcgBxZ3Gb45nbUPauSqBL+HdJx0QXF8Ielk+iBttw==} + '@storybook/cli@8.1.6': + resolution: {integrity: sha512-xsFdBoAbo+2h/UCWuVXiH4Tu49iQ6d+3R1J8F2n4N6rAKxMqAb6fzYnH1GeRYeZk0HGqb2iNc4kBkxj0jW0rKw==} hasBin: true - '@storybook/client-logger@8.1.5': - resolution: {integrity: sha512-zd+aENXnOHsxBATppELmhw/UywLzCxQjz/8i/xkUjeTRB4Ggp0hJlOUdJUEdIJz631ydyytfvM70ktBj9gMl1w==} + '@storybook/client-logger@8.1.6': + resolution: {integrity: sha512-QfSoUxS1rmrBzO7o99og9g+Gkm7sTmU5ZOpTkjszjlRqfV6/77eUnUOzUikej4LqPLmlJV5fqGuvoP0aNVksDw==} - '@storybook/codemod@8.1.5': - resolution: {integrity: sha512-eGoYozT2XPfsIFrzm4cJo9tRTX0yuK1y4uTYmKvnomezHu5kiY8qo2fUzQa5DHxiAzRDTpGlQTzb0PsxHOxYoA==} + '@storybook/codemod@8.1.6': + resolution: {integrity: sha512-N5JeimfscAOcME7FIrTCmxcsXxow11vtmPTjYWoeLYokBodaH5RyWcyyQ5KS1ACtt+dHYoX8lepSZA5SBEzYog==} - '@storybook/components@8.1.5': - resolution: {integrity: sha512-IxoT2pH7V98gF0zDAMUuq9sUZPg0vvQ9Y+A13HeYHvaY25XdesXVMbdzEd6SpeLYmfPykMPIAEcADfqeM6eXfA==} + '@storybook/components@8.1.6': + resolution: {integrity: sha512-RDcSj2gBVhK/klfcXQgINtvWe5hpJ1CYUv8hrAon3fWtZmX1+IrTJTorsdISvdHQ99o0WHZ+Ouz42O0yJnHzRg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/core-common@8.1.5': - resolution: {integrity: sha512-1QDOT6KPZ9KV7Gs1yyqzvSwGBmNSUB33gckUldSBF4aqP+tZ7W5JIQ6/YTtp3V02sEokZGdL9Ud4LczQxTgy3A==} + '@storybook/core-common@8.1.6': + resolution: {integrity: sha512-OTlfJFaTOB588ibXrrFm0TAXam6E5xV1VXSjNXL+fIifx8Kjln2HNSy1JKjvcblQneYiV4J1xPCVnAIe0EGHDg==} peerDependencies: prettier: ^2 || ^3 peerDependenciesMeta: prettier: optional: true - '@storybook/core-events@8.1.5': - resolution: {integrity: sha512-fgwbrHoLtSX6kfmamTGJqD+KfuEgun8cc4mWKZK094ByaqbSjhnOyeYO1sfVk8qst7QTFlOfhLAUe4cz1z149A==} + '@storybook/core-events@8.1.6': + resolution: {integrity: sha512-DaIVe4TUp/7uQdSJYGmJv9S/S364tSgZ3S3dZ1vsf1rgoUbCp5kTBtcd/fcqgukMPREgCgO9oDhmemI3SLAqzw==} - '@storybook/core-server@8.1.5': - resolution: {integrity: sha512-y16W2sg5KIHG6qgbd+a0nBUYHAgiUpPDFF7cdcIpbeOIoqFn+6ECp93MVefukumiSj3sQiJFU/tSm2A8apGltw==} + '@storybook/core-server@8.1.6': + resolution: {integrity: sha512-rgkeTG8V4emzhPqjlhchsjLay0WtgK7SrXNf1X40oTJIwmbgbReLJ5EmOXBe9rhWSXJ13aKL3l6JuTLAoptSkg==} - '@storybook/core-webpack@8.1.5': - resolution: {integrity: sha512-yXixldqg6gGT0OGWuWd52YZycgTrqiPlVHsi91SPtQJSaj3YRS2cM/Giq+gPTE0Zb9+Izq8QEnkyr8B4MfvGbQ==} + '@storybook/core-webpack@8.1.6': + resolution: {integrity: sha512-KjcAEDpHnX0M/7/hUckmZghvb+8FwrShQ2On92jkeL1HgKwzk9HUxFowMJAn1arYfkUT45q9g7HfqSmon36f5Q==} - '@storybook/csf-plugin@8.1.5': - resolution: {integrity: sha512-p6imdhlcm2iEeCU+3BDDR1fuw+u9sOQDlQQbTLYhBDvjy3lydp3W0erWo5aUANhQRU2uobZf4wZ52MLrENt+dQ==} + '@storybook/csf-plugin@8.1.6': + resolution: {integrity: sha512-y2OW84leoWsqfBXb7EoRy2QUmtsI3gpqYqpyD/d5K+vQ+E9CBel2WB8RPrwcYm2L88WPDaufQQDzqyB7aMx4fQ==} - '@storybook/csf-tools@8.1.5': - resolution: {integrity: sha512-jOfUo0arlaG4LlsdWaRfZCS0I1FhUnkf06ThzRBrrp8mFAPtOpf9iW16J3fYMS5vAdE/v+Z1RxuTRich4/JGdQ==} + '@storybook/csf-tools@8.1.6': + resolution: {integrity: sha512-jrKfHFNhiLBhWWW4/fm2wgKEVg55e6QuYUHY16KGd7PdPuzm+2Pt7jIl5V9yIj6a59YbjeMpT6jWPKbFx2TuCw==} '@storybook/csf@0.1.7': resolution: {integrity: sha512-53JeLZBibjQxi0Ep+/AJTfxlofJlxy1jXcSKENlnKxHjWEYyHQCumMP5yTFjf7vhNnMjEpV3zx6t23ssFiGRyw==} @@ -4413,8 +4457,8 @@ packages: '@storybook/docs-mdx@3.1.0-next.0': resolution: {integrity: sha512-t4syFIeSyufieNovZbLruPt2DmRKpbwL4fERCZ1MifWDRIORCKLc4NCEHy+IqvIqd71/SJV2k4B51nF7vlJfmQ==} - '@storybook/docs-tools@8.1.5': - resolution: {integrity: sha512-zlHv8fi1Bw8RbjkGGBJoO/RbM41bwxU1kV76TPQUyqQmzqPRsHi3zt+8bdddQLNrC6rhTF+Cj3yEdPfTZrB0aA==} + '@storybook/docs-tools@8.1.6': + resolution: {integrity: sha512-IhqQHSJ5nEBEJ162P/6/6c45toLinWpAkB7pwbAoP00djZSzfHNdQ4HfpZSGfD4GUJIvzsqMzUlyqCKLAoRPPA==} '@storybook/global@5.0.0': resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} @@ -4426,23 +4470,23 @@ packages: react: ^16.8.0 || ^17.0.0 || ^18.0.0 react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - '@storybook/instrumenter@8.1.5': - resolution: {integrity: sha512-pyOg0YeL06bIFw8J3y0E1xyaJEVX5dtyvFZ31xi7jcElhsO/uPTbrJzSfMFtv3kDXU3hKDpeI2pbxpkFUVSvsQ==} + '@storybook/instrumenter@8.1.6': + resolution: {integrity: sha512-BoNu0QaD5hhcbEVUsvmYDqUOu4HItNBMPUkj6aDCfpLxae5vstH3zsCRVqRcElbfqVhmRzD23w8+9In9M0Fajg==} - '@storybook/manager-api@8.1.5': - resolution: {integrity: sha512-iVP7FOKDf9L7zWCb8C2XeZjWSILS3hHeNwILvd9YSX9dg9du41kJYahsAHxDCR/jp/gv0ZM/V0vuHzi+naVPkQ==} + '@storybook/manager-api@8.1.6': + resolution: {integrity: sha512-L/s1FdFh/P+eFmQwLtFtJHwFJrGD9H7nauaQlKJOrU3GeXfjBjtlAZQF0Q6B4ZTGxwZjQrzShpt/0yKc6gymtw==} - '@storybook/manager@8.1.5': - resolution: {integrity: sha512-qMYwD1cXW0hJ3pMmdMlbsqktVBlsjsqwMH5PBzAN4FoWiCQ/yHeAnDXRUgFFaLcORS72h9H/cQuJ+p//RdeURg==} + '@storybook/manager@8.1.6': + resolution: {integrity: sha512-B7xc09FYHqC1sknJoWkGHBBCMQlfg7hF+4x42cGhAyYed4TeYAf7b1PDniq8L/PLbUgzTw+A62UC1fMurCcVDQ==} '@storybook/node-logger@8.0.5': resolution: {integrity: sha512-ssT8YCcCqgc89ee+EeExCxcOpueOsU05iek2roR+NCZnoCL1DmzcUp8H9t0utLaK/ngPV8zatlzSDVgKTHSIJw==} - '@storybook/node-logger@8.1.5': - resolution: {integrity: sha512-9qwPX/uGhdHaVjeVUSwJUSbKX7g9goyhGYdKVuCEyl7vHR9Kp7Zkag2sEHmVdd9ixTea3jk2GZQEbnBDNQNGnw==} + '@storybook/node-logger@8.1.6': + resolution: {integrity: sha512-IZEiTLFHu8Oom/vdEGpisSw5CfU+cw6/fTaX1P3EVClFOWVuy8/3X5MPu4wJH3jPym6E2DBduIUFeRsiuq61gA==} - '@storybook/preset-react-webpack@8.1.5': - resolution: {integrity: sha512-OiizVxDT5b7dORO8IYtNjQnrke+vgRgRPw/JSfIzWoYakDCFgui86BZ4Zx/1eecztXtQOem4bOfc7GLep5VkpA==} + '@storybook/preset-react-webpack@8.1.6': + resolution: {integrity: sha512-5x5h30Nm8pTguiWAS/Vb1mYSIsoNs2JydXCekIKOVd752Iq+/cDQio6A7gIE6zbtPgfofoa7fuvweiuT6NG2bw==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -4452,11 +4496,11 @@ packages: typescript: optional: true - '@storybook/preview-api@8.1.5': - resolution: {integrity: sha512-pv0aT5WbnSYR7KWQgy3jLfuBM0ocYG6GTcmZLREW5554oiBPHhzNFv+ZrBI47RzbrbFxq1h5dj4v8lkEcKIrbA==} + '@storybook/preview-api@8.1.6': + resolution: {integrity: sha512-g9EvVg/DYqmjMh1uivJBJnSIvURyuK4LLabYicQNmYdQJscAeXX2bpMcA4aeci9BBm9B2RP7JbSnq7DbXZaJYA==} - '@storybook/preview@8.1.5': - resolution: {integrity: sha512-8qNzK/5fCjfWcup5w3UxJXMAUp4+iOdh+vO+vDIJWSbPXRPtuarSM/tv/12N7hz/zvCpGLGBql0BE+oyC0bmhw==} + '@storybook/preview@8.1.6': + resolution: {integrity: sha512-o9OgOmO10GyX1ZC7WiapYqGdst4TOCPLqWSu3H2nL4ZT7BQLUQfCy30kyoMO7KyxCgc5K5rcqG7qZ/N0tfUgRg==} '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0': resolution: {integrity: sha512-KUqXC3oa9JuQ0kZJLBhVdS4lOneKTOopnNBK4tUAgoxWQ3u/IjzdueZjFr7gyBrXMoU6duutk3RQR9u8ZpYJ4Q==} @@ -4464,14 +4508,14 @@ packages: typescript: '>= 4.x' webpack: '>= 4' - '@storybook/react-dom-shim@8.1.5': - resolution: {integrity: sha512-eyHSngIBHeFT4vVkQTN2+c/mSKCPrb8uPpWbrc3ihGBKvL/656erWNmiUVnY3zuQvCBPz2q2Vy3v2Pr+nvfOTw==} + '@storybook/react-dom-shim@8.1.6': + resolution: {integrity: sha512-qP5nkAmpGFy/gshO+bVjRo1rgo/6UVDElgOd2dlUtYnfdPONiOfWko2XGYKKfxa6Cp7KU35JlZz/kHGqWG31zQ==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta - '@storybook/react-webpack5@8.1.5': - resolution: {integrity: sha512-XWHfSco08KmwjBbxFxi1WuG5bMipPkdJEUGyJqqqcVAP6BPFeYsO0PPai9CRJHlFSdQ3MGyUdY/Wy42JmRUocg==} + '@storybook/react-webpack5@8.1.6': + resolution: {integrity: sha512-jpRpa85efcv+9Kl1vIuwz+QC/Ug522Tx3oAT2FZTc1ZdIBrjeT+jY0tmEDjemRuadFMpjHvrXyW1HDItP5groQ==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -4481,8 +4525,8 @@ packages: typescript: optional: true - '@storybook/react@8.1.5': - resolution: {integrity: sha512-Yr0Z1FQPKFnc3jI7UbNYyi5K6zoFRZlac7xzBMT4q+bUtl0g3fmYTDFisCwK8I30qE6r01EjzNvaTU75PqXkMw==} + '@storybook/react@8.1.6': + resolution: {integrity: sha512-2CSc3MLeaY7QaYAQLwaXRboKkgQnWrSZAo/WTJcSHUr2YFxH5+iECB0Kci12GqaJklhhgmfTfVZ4Jo9ZJ6LQfg==} engines: {node: '>=18.0.0'} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -4492,17 +4536,17 @@ packages: typescript: optional: true - '@storybook/router@8.1.5': - resolution: {integrity: sha512-DCwvAswlbLhQu6REPV04XNRhtPvsrRqHjMHKzjlfs+qYJWY7Egkofy05qlegqjkMDve33czfnRGBm0C16IydkA==} + '@storybook/router@8.1.6': + resolution: {integrity: sha512-tvuhB2uXHEKK640Epm1SqVzPhQ9lXYfF7FX6FleJgVYEvZpJpNTD4RojedQoLI6SUUSXNy1Vs2QV26VM0XIPHQ==} - '@storybook/telemetry@8.1.5': - resolution: {integrity: sha512-QbB1Ox7oBaCvIF2TacFjPLi1XYeHxSPeZUuFXeE+tSMdvvWZzYLnXfj/oISmV6Q+X5VZfyJVMrZ2LfeW9CuFNg==} + '@storybook/telemetry@8.1.6': + resolution: {integrity: sha512-qNWjQPF6ufRvLCAavulhNYoqldDIeBvioFuCjLlwbw3BZw3ck7pwh1vZg4AJ0SAfzbnpnXPGrHe31gnxV0D6tw==} - '@storybook/test@8.1.5': - resolution: {integrity: sha512-BuxzWWS7BIJrOTuwH5WTj3nGQ+xNCvinJBQsV+MRAdH+kltgPYbntd/NBceuHmYeUrX0t8id5VUapNaG4SHw1A==} + '@storybook/test@8.1.6': + resolution: {integrity: sha512-tyexfYPtOHP83pMHggoGdHadfqh/veLdS+APHxt12zmCNUobxOxnuWmImXThQiyLlXTWecreLvlMvgAIjziBsA==} - '@storybook/theming@8.1.5': - resolution: {integrity: sha512-E4z1t49fMbVvd/t2MSL0Ecp5zbqsU/QfWBX/eorJ+m+Xc9skkwwG5qf/FnP9x4RZ9KaX8U8+862t0eafVvf4Tw==} + '@storybook/theming@8.1.6': + resolution: {integrity: sha512-0Cl/7/0z2WSfXhZ9XSw6rgEjb0fXac7jfktieX0vYo1YckrNpWFRQP9NCpVPAcYZaFLlRSOqYark6CLoutEsIg==} peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta @@ -4512,8 +4556,8 @@ packages: react-dom: optional: true - '@storybook/types@8.1.5': - resolution: {integrity: sha512-/PfAZh1xtXN2MvAZZKpiL/nPkC3bZj8BQ7P7z5a/aQarP+y7qdXuoitYQ6oOH3rkaiYywmkWzA/y4iW70KXLKg==} + '@storybook/types@8.1.6': + resolution: {integrity: sha512-cWpS9+x1pxCO39spR8QmumMK2ub2p5cvMtrRvWaIjBFPbCwm2CvjBXFWIra2veBCZTxUKJ9VWxvi7pzRHjN/nw==} '@stylistic/eslint-plugin-js@2.1.0': resolution: {integrity: sha512-gdXUjGNSsnY6nPyqxu6lmDTtVrwCOjun4x8PUn0x04d5ucLI74N3MT1Q0UhdcOR9No3bo5PGDyBgXK+KmD787A==} @@ -4893,8 +4937,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@7.11.0': - resolution: {integrity: sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==} + '@typescript-eslint/parser@7.12.0': + resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: eslint: ^8.56.0 @@ -4907,8 +4951,8 @@ packages: resolution: {integrity: sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@7.9.0': - resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==} + '@typescript-eslint/scope-manager@7.12.0': + resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/type-utils@7.11.0': @@ -4921,16 +4965,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@7.10.0': - resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==} - engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.11.0': resolution: {integrity: sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.9.0': - resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==} + '@typescript-eslint/types@7.12.0': + resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==} engines: {node: ^18.18.0 || >=20.0.0} '@typescript-eslint/typescript-estree@7.11.0': @@ -4942,8 +4982,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.9.0': - resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==} + '@typescript-eslint/typescript-estree@7.12.0': + resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==} engines: {node: ^18.18.0 || >=20.0.0} peerDependencies: typescript: '*' @@ -4957,18 +4997,12 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@7.9.0': - resolution: {integrity: sha512-5KVRQCzZajmT4Ep+NEgjXCvjuypVvYHUW7RHlXzNPuak2oWpVoD1jf5xCP0dPAuNIchjC7uQyvbdaSTFaLqSdA==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - '@typescript-eslint/visitor-keys@7.11.0': resolution: {integrity: sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.9.0': - resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==} + '@typescript-eslint/visitor-keys@7.12.0': + resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==} engines: {node: ^18.18.0 || >=20.0.0} '@ungap/structured-clone@1.2.0': @@ -5623,11 +5657,6 @@ packages: resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - chalk@https://r2.cnpmjs.org/chalk/-/chalk-4.1.2.tgz: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, tarball: https://r2.cnpmjs.org/chalk/-/chalk-4.1.2.tgz} - version: 4.1.2 - engines: {node: '>=10'} - chance@1.1.9: resolution: {integrity: sha512-TfxnA/DcZXRTA4OekA2zL9GH8qscbbl6X0ZqU4tXhGveVY/mXWvEQLt5GwZcYXTEyEFflVtj+pG8nc8EwSm1RQ==} @@ -7300,11 +7329,6 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - has-flag@https://r2.cnpmjs.org/has-flag/-/has-flag-4.0.0.tgz: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, tarball: https://r2.cnpmjs.org/has-flag/-/has-flag-4.0.0.tgz} - version: 4.0.0 - engines: {node: '>=8'} - has-property-descriptors@1.0.2: resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} @@ -7515,9 +7539,6 @@ packages: resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} engines: {node: '>= 12'} - ip@2.0.1: - resolution: {integrity: sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ==} - ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -8323,10 +8344,6 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} - micromatch@4.0.6: - resolution: {integrity: sha512-Y4Ypn3oujJYxJcMacVgcs92wofTHxp9FzfDpQON4msDefoC0lb3ETvQLOdLcbhSwU1bz8HrL/1sygfBIHudrkQ==} - engines: {node: '>=8.6'} - micromatch@4.0.7: resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} @@ -9102,8 +9119,8 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} - rc-dialog@9.5.1: - resolution: {integrity: sha512-vDcY1ww0STZKs4twKjPhcvyMY1fCjfscm+ihtpUqumdQ6YGGaPdmpurhRAnqAcw2SuZgzengj18j9JrQxoRQoQ==} + rc-dialog@9.5.2: + resolution: {integrity: sha512-qVUjc8JukG+j/pNaHVSRa2GO2/KbV2thm7yO4hepQ902eGdYK913sGkwg/fh9yhKYV1ql3BKIN2xnud3rEXAPw==} peerDependencies: react: '>=16.9.0' react-dom: '>=16.9.0' @@ -9310,16 +9327,15 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + react-is@18.1.0: resolution: {integrity: sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==} react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - react-is@https://r2.cnpmjs.org/react-is/-/react-is-17.0.2.tgz: - resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, tarball: https://r2.cnpmjs.org/react-is/-/react-is-17.0.2.tgz} - version: 17.0.2 - react-mentions@4.4.10: resolution: {integrity: sha512-JHiQlgF1oSZR7VYPjq32wy97z1w1oE4x10EuhKjPr4WUKhVzG1uFQhQjKqjQkbVqJrmahf+ldgBTv36NrkpKpA==} peerDependencies: @@ -9880,8 +9896,8 @@ packages: webpack: optional: true - storybook@8.1.5: - resolution: {integrity: sha512-v4o8AfTvxWpdGa9Pa9x8EAmqbN5yJc+2fW8b6ZaCsDOTh2t5Y3EUHbIzdtvX+1Gb6ALsOs5e2Q9GlCAzjz+WNQ==} + storybook@8.1.6: + resolution: {integrity: sha512-qouQEB+sSb9ktE6fGVoBy6CLEUq4NOqDUpt/EhnITaWqzUeAZSQXTcoHg9DXhTMiynnbfqsUcZuK9PZOjgt7/w==} hasBin: true stream-shift@1.0.3: @@ -10011,11 +10027,6 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-color@https://r2.cnpmjs.org/supports-color/-/supports-color-7.2.0.tgz: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, tarball: https://r2.cnpmjs.org/supports-color/-/supports-color-7.2.0.tgz} - version: 7.2.0 - engines: {node: '>=8'} - supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -10195,38 +10206,38 @@ packages: tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - turbo-darwin-64@1.13.3: - resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==} + turbo-darwin-64@2.0.2: + resolution: {integrity: sha512-5eqlzc/lm9G4jM1bQyuKxdLS7kPotHL31MtiCepJKEnONYeJ36NRITsBiHNsQC2/qNGfYwjpxxO+RC/Hs6Y3zw==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@1.13.3: - resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==} + turbo-darwin-arm64@2.0.2: + resolution: {integrity: sha512-Qh6cU8f+A4mwFaU0/HCKu9Zh67A+XHOh8AX9i+lvwfyl8rxCA+ToUQQo5OCMzV/XwJ6tLoLJH0c0GMsaESK4Tg==} cpu: [arm64] os: [darwin] - turbo-linux-64@1.13.3: - resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==} + turbo-linux-64@2.0.2: + resolution: {integrity: sha512-86YP2P3Kx9zhbKU5WtCXju2H2pooiOPuuw+6OAfXlwc2Omg/55NCZf3WquMFQMPxvrWCdWLruDtY4TD8m9t1EQ==} cpu: [x64] os: [linux] - turbo-linux-arm64@1.13.3: - resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==} + turbo-linux-arm64@2.0.2: + resolution: {integrity: sha512-jTVyaTo9rPMGDcu6wsS6F72lSeVibWmGgcKTVQTxl5+H73hknyQFFaEqwg8y7VU+soySte7szQkeBpYRTGzkRQ==} cpu: [arm64] os: [linux] - turbo-windows-64@1.13.3: - resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==} + turbo-windows-64@2.0.2: + resolution: {integrity: sha512-vNRmFZyGPgLdr943hrn0dPY00DtYmOBoBoj6M72ftnBU7dPK7OFMF95cVXr0I6XssRsYSz+xIwyM98xt+2e4hQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@1.13.3: - resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==} + turbo-windows-arm64@2.0.2: + resolution: {integrity: sha512-1O8gP6OvdvW5FQytURVhU0U83h9cEq2vD0JpTXK4ueOsYfwV762LXszB0/20S3arw4UzeNU0Q6SHIwRgW/K8lA==} cpu: [arm64] os: [win32] - turbo@1.13.3: - resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==} + turbo@2.0.2: + resolution: {integrity: sha512-Uty6r3QIX7XvfsJbdj2q6j1lNbZ/heN4U1bsOWsUk9AJGV4bPCHccRsBBRsQ01Bqhnw0M9Q4UzKXdL2n/XrnyA==} hasBin: true tween-functions@1.2.0: @@ -10552,8 +10563,8 @@ packages: jsdom: optional: true - vue-eslint-parser@9.4.2: - resolution: {integrity: sha512-Ry9oiGmCAK91HrKMtCrKFWmSFWvYkpGglCeFAIqDdr9zdXmMMpJOmUJS7WWsW7fX81h6mwHmUZCQQ1E0PkSwYQ==} + vue-eslint-parser@9.4.3: + resolution: {integrity: sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' @@ -10829,13 +10840,13 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@antfu/eslint-config@2.19.1(@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@vue/compiler-sfc@3.4.27)(eslint-plugin-format@0.1.1(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react-refresh@0.4.7(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': + '@antfu/eslint-config@2.20.0(@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(@vue/compiler-sfc@3.4.27)(eslint-plugin-format@0.1.1(eslint@8.57.0))(eslint-plugin-react-hooks@4.6.2(eslint@8.57.0))(eslint-plugin-react-refresh@0.4.7(eslint@8.57.0))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': dependencies: '@antfu/install-pkg': 0.3.3 '@clack/prompts': 0.7.0 '@stylistic/eslint-plugin': 2.1.0(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 eslint-config-flat-gitignore: 0.1.5 eslint-flat-config-utils: 0.2.5 @@ -10849,12 +10860,12 @@ snapshots: eslint-plugin-markdown: 5.0.0(eslint@8.57.0) eslint-plugin-n: 17.7.0(eslint@8.57.0) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-perfectionist: 2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@8.57.0)) + eslint-plugin-perfectionist: 2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.3(eslint@8.57.0)) eslint-plugin-regexp: 2.6.0(eslint@8.57.0) eslint-plugin-toml: 0.11.0(eslint@8.57.0) eslint-plugin-unicorn: 53.0.0(eslint@8.57.0) - eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) - eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) + eslint-plugin-unused-imports: 3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0) + eslint-plugin-vitest: 0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) eslint-plugin-vue: 9.26.0(eslint@8.57.0) eslint-plugin-yml: 1.14.0(eslint@8.57.0) eslint-processor-vue-blocks: 0.1.2(@vue/compiler-sfc@3.4.27)(eslint@8.57.0) @@ -10864,11 +10875,11 @@ snapshots: parse-gitignore: 2.0.0 picocolors: 1.0.1 toml-eslint-parser: 0.9.3 - vue-eslint-parser: 9.4.2(eslint@8.57.0) + vue-eslint-parser: 9.4.3(eslint@8.57.0) yaml-eslint-parser: 1.2.3 yargs: 17.7.2 optionalDependencies: - '@eslint-react/eslint-plugin': 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@eslint-react/eslint-plugin': 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) eslint-plugin-format: 0.1.1(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.2(eslint@8.57.0) eslint-plugin-react-refresh: 0.4.7(eslint@8.57.0) @@ -10992,7 +11003,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 debug: 4.3.4 lodash.debounce: 4.0.8 resolve: 1.22.8 @@ -11042,8 +11053,6 @@ snapshots: '@babel/helper-plugin-utils@7.24.0': {} - '@babel/helper-plugin-utils@7.24.5': {} - '@babel/helper-plugin-utils@7.24.6': {} '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5)': @@ -11133,17 +11142,17 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) @@ -11151,7 +11160,7 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5)': dependencies: @@ -11160,119 +11169,119 @@ snapshots: '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-flow@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) @@ -11280,30 +11289,30 @@ snapshots: dependencies: '@babel/core': 7.24.5 '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) '@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5)': @@ -11313,7 +11322,7 @@ snapshots: '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/helper-split-export-declaration': 7.24.5 globals: 11.12.0 @@ -11321,53 +11330,53 @@ snapshots: '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/template': 7.24.0 '@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-flow-strip-types@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-flow': 7.24.1(@babel/core@7.24.5) '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5)': @@ -11375,41 +11384,41 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-simple-access': 7.24.5 '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5)': @@ -11417,88 +11426,88 @@ snapshots: '@babel/core': 7.24.5 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-validator-identifier': 7.24.5 '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) '@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) '@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-react-jsx-self@7.24.1(@babel/core@7.24.3)': dependencies: @@ -11523,77 +11532,77 @@ snapshots: '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 regenerator-transform: 0.15.2 '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-typescript@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/preset-env@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/compat-data': 7.24.4 '@babel/core': 7.24.5 '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) @@ -11678,21 +11687,21 @@ snapshots: '@babel/preset-flow@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-transform-flow-strip-types': 7.24.1(@babel/core@7.24.5) '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/types': 7.24.5 esutils: 2.0.3 '@babel/preset-typescript@7.24.1(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/helper-plugin-utils': 7.24.6 '@babel/helper-validator-option': 7.23.5 '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) @@ -11923,20 +11932,11 @@ snapshots: dependencies: react: 18.3.1 - '@es-joy/jsdoccomment@0.43.0': - dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 - '@typescript-eslint/types': 7.10.0 - comment-parser: 1.4.1 - esquery: 1.5.0 - jsdoc-type-pratt-parser: 4.0.0 - '@es-joy/jsdoccomment@0.43.1': dependencies: '@types/eslint': 8.56.10 '@types/estree': 1.0.5 - '@typescript-eslint/types': 7.10.0 + '@typescript-eslint/types': 7.11.0 comment-parser: 1.4.1 esquery: 1.5.0 jsdoc-type-pratt-parser: 4.0.0 @@ -12124,21 +12124,21 @@ snapshots: - supports-color - typescript - '@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@eslint-react/eslint-plugin@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-react/shared': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/tools': 1.5.14 '@eslint-react/types': 1.5.14(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/types': 7.11.0 '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 - eslint-plugin-react-core: 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-react-dom: 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-react-hooks-extra: 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-react-naming-convention: 1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-react-core: 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-react-dom: 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-react-hooks-extra: 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + eslint-plugin-react-naming-convention: 1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) typescript: 5.4.5 transitivePeerDependencies: - supports-color @@ -12868,24 +12868,24 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@storybook/addon-actions@8.1.5': + '@storybook/addon-actions@8.1.6': dependencies: - '@storybook/core-events': 8.1.5 + '@storybook/core-events': 8.1.6 '@storybook/global': 5.0.0 '@types/uuid': 9.0.8 dequal: 2.0.3 polished: 4.3.1 uuid: 9.0.1 - '@storybook/addon-backgrounds@8.1.5': + '@storybook/addon-backgrounds@8.1.6': dependencies: '@storybook/global': 5.0.0 memoizerific: 1.11.3 ts-dedent: 2.2.0 - '@storybook/addon-controls@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/addon-controls@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/blocks': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) dequal: 2.0.3 lodash: 4.17.21 ts-dedent: 2.2.0 @@ -12898,21 +12898,21 @@ snapshots: - react-dom - supports-color - '@storybook/addon-docs@8.1.5(@types/react-dom@18.3.0)(prettier@3.2.5)': + '@storybook/addon-docs@8.1.6(@types/react-dom@18.3.0)(prettier@3.3.0)': dependencies: '@babel/core': 7.24.5 '@mdx-js/react': 3.0.1(@types/react@18.3.3)(react@18.3.1) - '@storybook/blocks': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/client-logger': 8.1.5 - '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/csf-plugin': 8.1.5 - '@storybook/csf-tools': 8.1.5 + '@storybook/blocks': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/client-logger': 8.1.6 + '@storybook/components': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/csf-plugin': 8.1.6 + '@storybook/csf-tools': 8.1.6 '@storybook/global': 5.0.0 - '@storybook/node-logger': 8.1.5 - '@storybook/preview-api': 8.1.5 - '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 + '@storybook/node-logger': 8.1.6 + '@storybook/preview-api': 8.1.6 + '@storybook/react-dom-shim': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/theming': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/types': 8.1.6 '@types/react': 18.3.3 fs-extra: 11.2.0 react: 18.3.1 @@ -12926,21 +12926,21 @@ snapshots: - prettier - supports-color - '@storybook/addon-essentials@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@storybook/addon-actions': 8.1.5 - '@storybook/addon-backgrounds': 8.1.5 - '@storybook/addon-controls': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/addon-docs': 8.1.5(@types/react-dom@18.3.0)(prettier@3.2.5) - '@storybook/addon-highlight': 8.1.5 - '@storybook/addon-measure': 8.1.5 - '@storybook/addon-outline': 8.1.5 - '@storybook/addon-toolbars': 8.1.5 - '@storybook/addon-viewport': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/manager-api': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/node-logger': 8.1.5 - '@storybook/preview-api': 8.1.5 + '@storybook/addon-essentials@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + dependencies: + '@storybook/addon-actions': 8.1.6 + '@storybook/addon-backgrounds': 8.1.6 + '@storybook/addon-controls': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/addon-docs': 8.1.6(@types/react-dom@18.3.0)(prettier@3.3.0) + '@storybook/addon-highlight': 8.1.6 + '@storybook/addon-measure': 8.1.6 + '@storybook/addon-outline': 8.1.6 + '@storybook/addon-toolbars': 8.1.6 + '@storybook/addon-viewport': 8.1.6 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/manager-api': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/node-logger': 8.1.6 + '@storybook/preview-api': 8.1.6 ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' @@ -12951,16 +12951,16 @@ snapshots: - react-dom - supports-color - '@storybook/addon-highlight@8.1.5': + '@storybook/addon-highlight@8.1.6': dependencies: '@storybook/global': 5.0.0 - '@storybook/addon-interactions@8.1.5(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': + '@storybook/addon-interactions@8.1.6(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': dependencies: '@storybook/global': 5.0.0 - '@storybook/instrumenter': 8.1.5 - '@storybook/test': 8.1.5(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) - '@storybook/types': 8.1.5 + '@storybook/instrumenter': 8.1.6 + '@storybook/test': 8.1.6(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) + '@storybook/types': 8.1.6 polished: 4.3.1 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -12970,7 +12970,7 @@ snapshots: - jest - vitest - '@storybook/addon-links@8.1.5(react@18.3.1)': + '@storybook/addon-links@8.1.6(react@18.3.1)': dependencies: '@storybook/csf': 0.1.7 '@storybook/global': 5.0.0 @@ -12978,12 +12978,12 @@ snapshots: optionalDependencies: react: 18.3.1 - '@storybook/addon-measure@8.1.5': + '@storybook/addon-measure@8.1.6': dependencies: '@storybook/global': 5.0.0 tiny-invariant: 1.3.3 - '@storybook/addon-outline@8.1.5': + '@storybook/addon-outline@8.1.6': dependencies: '@storybook/global': 5.0.0 ts-dedent: 2.2.0 @@ -12993,9 +12993,9 @@ snapshots: '@storybook/node-logger': 8.0.5 webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.20.2) - '@storybook/addon-toolbars@8.1.5': {} + '@storybook/addon-toolbars@8.1.6': {} - '@storybook/addon-viewport@8.1.5': + '@storybook/addon-viewport@8.1.6': dependencies: memoizerific: 1.11.3 @@ -13007,20 +13007,20 @@ snapshots: - '@swc/helpers' - webpack - '@storybook/blocks@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/blocks@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/components': 8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/core-events': 8.1.5 + '@storybook/channels': 8.1.6 + '@storybook/client-logger': 8.1.6 + '@storybook/components': 8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/core-events': 8.1.6 '@storybook/csf': 0.1.7 - '@storybook/docs-tools': 8.1.5(prettier@3.2.5) + '@storybook/docs-tools': 8.1.6(prettier@3.3.0) '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/manager-api': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/preview-api': 8.1.5 - '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 + '@storybook/manager-api': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/preview-api': 8.1.6 + '@storybook/theming': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/types': 8.1.6 '@types/lodash': 4.17.0 color-convert: 2.0.1 dequal: 2.0.3 @@ -13043,12 +13043,12 @@ snapshots: - prettier - supports-color - '@storybook/builder-manager@8.1.5(prettier@3.2.5)': + '@storybook/builder-manager@8.1.6(prettier@3.3.0)': dependencies: '@fal-works/esbuild-plugin-global-externals': 2.1.2 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/manager': 8.1.5 - '@storybook/node-logger': 8.1.5 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/manager': 8.1.6 + '@storybook/node-logger': 8.1.6 '@types/ejs': 3.1.5 '@yarnpkg/esbuild-plugin-pnp': 3.0.0-rc.15(esbuild@0.20.2) browser-assert: 1.2.1 @@ -13064,16 +13064,16 @@ snapshots: - prettier - supports-color - '@storybook/builder-webpack5@8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(typescript@5.4.5)': + '@storybook/builder-webpack5@8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(typescript@5.4.5)': dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 - '@storybook/core-webpack': 8.1.5(prettier@3.2.5) - '@storybook/node-logger': 8.1.5 - '@storybook/preview': 8.1.5 - '@storybook/preview-api': 8.1.5 + '@storybook/channels': 8.1.6 + '@storybook/client-logger': 8.1.6 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/core-events': 8.1.6 + '@storybook/core-webpack': 8.1.6(prettier@3.3.0) + '@storybook/node-logger': 8.1.6 + '@storybook/preview': 8.1.6 + '@storybook/preview-api': 8.1.6 '@types/node': 18.19.28 '@types/semver': 7.5.8 browser-assert: 1.2.1 @@ -13112,27 +13112,27 @@ snapshots: - uglify-js - webpack-cli - '@storybook/channels@8.1.5': + '@storybook/channels@8.1.6': dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 + '@storybook/client-logger': 8.1.6 + '@storybook/core-events': 8.1.6 '@storybook/global': 5.0.0 telejson: 7.2.0 tiny-invariant: 1.3.3 - '@storybook/cli@8.1.5(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/cli@8.1.6(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@babel/core': 7.24.5 '@babel/types': 7.24.5 '@ndelangen/get-tarball': 3.0.9 - '@storybook/codemod': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 - '@storybook/core-server': 8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/telemetry': 8.1.5(prettier@3.2.5) - '@storybook/types': 8.1.5 + '@storybook/codemod': 8.1.6 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/core-events': 8.1.6 + '@storybook/core-server': 8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/csf-tools': 8.1.6 + '@storybook/node-logger': 8.1.6 + '@storybook/telemetry': 8.1.6(prettier@3.3.0) + '@storybook/types': 8.1.6 '@types/semver': 7.5.8 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 @@ -13150,7 +13150,7 @@ snapshots: jscodeshift: 0.15.2(@babel/preset-env@7.24.5(@babel/core@7.24.5)) leven: 3.1.0 ora: 5.4.1 - prettier: 3.2.5 + prettier: 3.3.0 prompts: 2.4.2 read-pkg-up: 7.0.1 semver: 7.6.2 @@ -13167,40 +13167,40 @@ snapshots: - supports-color - utf-8-validate - '@storybook/client-logger@8.1.5': + '@storybook/client-logger@8.1.6': dependencies: '@storybook/global': 5.0.0 - '@storybook/codemod@8.1.5': + '@storybook/codemod@8.1.6': dependencies: '@babel/core': 7.24.5 '@babel/preset-env': 7.24.5(@babel/core@7.24.5) '@babel/types': 7.24.5 '@storybook/csf': 0.1.7 - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 + '@storybook/csf-tools': 8.1.6 + '@storybook/node-logger': 8.1.6 + '@storybook/types': 8.1.6 '@types/cross-spawn': 6.0.6 cross-spawn: 7.0.3 globby: 14.0.1 jscodeshift: 0.15.2(@babel/preset-env@7.24.5(@babel/core@7.24.5)) lodash: 4.17.21 - prettier: 3.2.5 + prettier: 3.3.0 recast: 0.23.6 tiny-invariant: 1.3.3 transitivePeerDependencies: - supports-color - '@storybook/components@8.1.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/components@8.1.6(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@radix-ui/react-dialog': 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@radix-ui/react-slot': 1.0.2(@types/react@18.3.3)(react@18.3.1) - '@storybook/client-logger': 8.1.5 + '@storybook/client-logger': 8.1.6 '@storybook/csf': 0.1.7 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 + '@storybook/theming': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/types': 8.1.6 memoizerific: 1.11.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13209,49 +13209,12 @@ snapshots: - '@types/react' - '@types/react-dom' - '@storybook/core-common@8.1.5(prettier@3.2.5)': - dependencies: - '@storybook/core-events': 8.1.5 - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 - '@yarnpkg/fslib': 2.10.3 - '@yarnpkg/libzip': 2.3.0 - chalk: 4.1.2 - cross-spawn: 7.0.3 - esbuild: 0.20.2 - esbuild-register: 3.5.0(esbuild@0.20.2) - execa: 5.1.1 - file-system-cache: 2.3.0 - find-cache-dir: 3.3.2 - find-up: 5.0.0 - fs-extra: 11.2.0 - glob: 10.3.12 - handlebars: 4.7.8 - lazy-universal-dotenv: 4.0.0 - node-fetch: 2.7.0 - picomatch: 2.3.1 - pkg-dir: 5.0.0 - prettier-fallback: prettier@3.3.0 - pretty-hrtime: 1.0.3 - resolve-from: 5.0.0 - semver: 7.6.2 - tempy: 3.1.0 - tiny-invariant: 1.3.3 - ts-dedent: 2.2.0 - util: 0.12.5 - optionalDependencies: - prettier: 3.2.5 - transitivePeerDependencies: - - encoding - - supports-color - - '@storybook/core-common@8.1.5(prettier@3.3.0)': + '@storybook/core-common@8.1.6(prettier@3.3.0)': dependencies: - '@storybook/core-events': 8.1.5 - '@storybook/csf-tools': 8.1.5 - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 + '@storybook/core-events': 8.1.6 + '@storybook/csf-tools': 8.1.6 + '@storybook/node-logger': 8.1.6 + '@storybook/types': 8.1.6 '@yarnpkg/fslib': 2.10.3 '@yarnpkg/libzip': 2.3.0 chalk: 4.1.2 @@ -13283,31 +13246,31 @@ snapshots: - encoding - supports-color - '@storybook/core-events@8.1.5': + '@storybook/core-events@8.1.6': dependencies: '@storybook/csf': 0.1.7 ts-dedent: 2.2.0 - '@storybook/core-server@8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/core-server@8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@aw-web-design/x-default-browser': 1.4.126 '@babel/core': 7.24.5 '@babel/parser': 7.24.5 '@discoveryjs/json-ext': 0.5.7 - '@storybook/builder-manager': 8.1.5(prettier@3.2.5) - '@storybook/channels': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 + '@storybook/builder-manager': 8.1.6(prettier@3.3.0) + '@storybook/channels': 8.1.6 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/core-events': 8.1.6 '@storybook/csf': 0.1.7 - '@storybook/csf-tools': 8.1.5 + '@storybook/csf-tools': 8.1.6 '@storybook/docs-mdx': 3.1.0-next.0 '@storybook/global': 5.0.0 - '@storybook/manager': 8.1.5 - '@storybook/manager-api': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/node-logger': 8.1.5 - '@storybook/preview-api': 8.1.5 - '@storybook/telemetry': 8.1.5(prettier@3.2.5) - '@storybook/types': 8.1.5 + '@storybook/manager': 8.1.6 + '@storybook/manager-api': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/node-logger': 8.1.6 + '@storybook/preview-api': 8.1.6 + '@storybook/telemetry': 8.1.6(prettier@3.3.0) + '@storybook/types': 8.1.6 '@types/detect-port': 1.3.5 '@types/diff': 5.2.1 '@types/node': 18.19.28 @@ -13322,7 +13285,6 @@ snapshots: express: 4.19.2 fs-extra: 11.2.0 globby: 14.0.1 - ip: 2.0.1 lodash: 4.17.21 open: 8.4.2 pretty-hrtime: 1.0.3 @@ -13345,11 +13307,11 @@ snapshots: - supports-color - utf-8-validate - '@storybook/core-webpack@8.1.5(prettier@3.2.5)': + '@storybook/core-webpack@8.1.6(prettier@3.3.0)': dependencies: - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/node-logger': 8.1.5 - '@storybook/types': 8.1.5 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/node-logger': 8.1.6 + '@storybook/types': 8.1.6 '@types/node': 18.19.28 ts-dedent: 2.2.0 transitivePeerDependencies: @@ -13357,21 +13319,21 @@ snapshots: - prettier - supports-color - '@storybook/csf-plugin@8.1.5': + '@storybook/csf-plugin@8.1.6': dependencies: - '@storybook/csf-tools': 8.1.5 + '@storybook/csf-tools': 8.1.6 unplugin: 1.10.1 transitivePeerDependencies: - supports-color - '@storybook/csf-tools@8.1.5': + '@storybook/csf-tools@8.1.6': dependencies: '@babel/generator': 7.24.5 '@babel/parser': 7.24.5 '@babel/traverse': 7.24.5 '@babel/types': 7.24.5 '@storybook/csf': 0.1.7 - '@storybook/types': 8.1.5 + '@storybook/types': 8.1.6 fs-extra: 11.2.0 recast: 0.23.6 ts-dedent: 2.2.0 @@ -13384,27 +13346,12 @@ snapshots: '@storybook/docs-mdx@3.1.0-next.0': {} - '@storybook/docs-tools@8.1.5(prettier@3.2.5)': + '@storybook/docs-tools@8.1.6(prettier@3.3.0)': dependencies: - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/core-events': 8.1.5 - '@storybook/preview-api': 8.1.5 - '@storybook/types': 8.1.5 - '@types/doctrine': 0.0.3 - assert: 2.1.0 - doctrine: 3.0.0 - lodash: 4.17.21 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - - '@storybook/docs-tools@8.1.5(prettier@3.3.0)': - dependencies: - '@storybook/core-common': 8.1.5(prettier@3.3.0) - '@storybook/core-events': 8.1.5 - '@storybook/preview-api': 8.1.5 - '@storybook/types': 8.1.5 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/core-events': 8.1.6 + '@storybook/preview-api': 8.1.6 + '@storybook/types': 8.1.6 '@types/doctrine': 0.0.3 assert: 2.1.0 doctrine: 3.0.0 @@ -13421,27 +13368,27 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/instrumenter@8.1.5': + '@storybook/instrumenter@8.1.6': dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 + '@storybook/channels': 8.1.6 + '@storybook/client-logger': 8.1.6 + '@storybook/core-events': 8.1.6 '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.1.5 + '@storybook/preview-api': 8.1.6 '@vitest/utils': 1.6.0 util: 0.12.5 - '@storybook/manager-api@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/manager-api@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 + '@storybook/channels': 8.1.6 + '@storybook/client-logger': 8.1.6 + '@storybook/core-events': 8.1.6 '@storybook/csf': 0.1.7 '@storybook/global': 5.0.0 '@storybook/icons': 1.2.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/router': 8.1.5 - '@storybook/theming': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 + '@storybook/router': 8.1.6 + '@storybook/theming': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/types': 8.1.6 dequal: 2.0.3 lodash: 4.17.21 memoizerific: 1.11.3 @@ -13452,18 +13399,18 @@ snapshots: - react - react-dom - '@storybook/manager@8.1.5': {} + '@storybook/manager@8.1.6': {} '@storybook/node-logger@8.0.5': {} - '@storybook/node-logger@8.1.5': {} + '@storybook/node-logger@8.1.6': {} - '@storybook/preset-react-webpack@8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@storybook/preset-react-webpack@8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': dependencies: - '@storybook/core-webpack': 8.1.5(prettier@3.2.5) - '@storybook/docs-tools': 8.1.5(prettier@3.2.5) - '@storybook/node-logger': 8.1.5 - '@storybook/react': 8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@storybook/core-webpack': 8.1.6(prettier@3.3.0) + '@storybook/docs-tools': 8.1.6(prettier@3.3.0) + '@storybook/node-logger': 8.1.6 + '@storybook/react': 8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) '@storybook/react-docgen-typescript-plugin': 1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) '@types/node': 18.19.28 '@types/semver': 7.5.8 @@ -13488,14 +13435,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/preview-api@8.1.5': + '@storybook/preview-api@8.1.6': dependencies: - '@storybook/channels': 8.1.5 - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 + '@storybook/channels': 8.1.6 + '@storybook/client-logger': 8.1.6 + '@storybook/core-events': 8.1.6 '@storybook/csf': 0.1.7 '@storybook/global': 5.0.0 - '@storybook/types': 8.1.5 + '@storybook/types': 8.1.6 '@types/qs': 6.9.14 dequal: 2.0.3 lodash: 4.17.21 @@ -13505,7 +13452,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/preview@8.1.5': {} + '@storybook/preview@8.1.6': {} '@storybook/react-docgen-typescript-plugin@1.0.6--canary.9.0c3f3b7.0(typescript@5.4.5)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2))': dependencies: @@ -13513,7 +13460,7 @@ snapshots: endent: 2.1.0 find-cache-dir: 3.3.2 flat-cache: 3.2.0 - micromatch: 4.0.6 + micromatch: 4.0.7 react-docgen-typescript: 2.2.2(typescript@5.4.5) tslib: 2.6.2 typescript: 5.4.5 @@ -13521,17 +13468,17 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react-dom-shim@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/react-dom-shim@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/react-webpack5@8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@storybook/react-webpack5@8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': dependencies: - '@storybook/builder-webpack5': 8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(typescript@5.4.5) - '@storybook/preset-react-webpack': 8.1.5(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - '@storybook/react': 8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) - '@storybook/types': 8.1.5 + '@storybook/builder-webpack5': 8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(typescript@5.4.5) + '@storybook/preset-react-webpack': 8.1.6(@swc/core@1.5.7)(esbuild@0.20.2)(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@storybook/react': 8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5) + '@storybook/types': 8.1.6 '@types/node': 18.19.28 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -13547,14 +13494,14 @@ snapshots: - uglify-js - webpack-cli - '@storybook/react@8.1.5(prettier@3.2.5)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@storybook/react@8.1.6(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/docs-tools': 8.1.5(prettier@3.2.5) + '@storybook/client-logger': 8.1.6 + '@storybook/docs-tools': 8.1.6(prettier@3.3.0) '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.1.5 - '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 + '@storybook/preview-api': 8.1.6 + '@storybook/react-dom-shim': 8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/types': 8.1.6 '@types/escodegen': 0.0.6 '@types/estree': 0.0.51 '@types/node': 18.19.28 @@ -13579,49 +13526,17 @@ snapshots: - prettier - supports-color - '@storybook/react@8.1.5(prettier@3.3.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.4.5)': + '@storybook/router@8.1.6': dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/docs-tools': 8.1.5(prettier@3.3.0) - '@storybook/global': 5.0.0 - '@storybook/preview-api': 8.1.5 - '@storybook/react-dom-shim': 8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@storybook/types': 8.1.5 - '@types/escodegen': 0.0.6 - '@types/estree': 0.0.51 - '@types/node': 18.19.28 - acorn: 7.4.1 - acorn-jsx: 5.3.2(acorn@7.4.1) - acorn-walk: 7.2.0 - escodegen: 2.1.0 - html-tags: 3.3.1 - lodash: 4.17.21 - prop-types: 15.8.1 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-element-to-jsx-string: 15.0.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - semver: 7.6.2 - ts-dedent: 2.2.0 - type-fest: 2.19.0 - util-deprecate: 1.0.2 - optionalDependencies: - typescript: 5.4.5 - transitivePeerDependencies: - - encoding - - prettier - - supports-color - - '@storybook/router@8.1.5': - dependencies: - '@storybook/client-logger': 8.1.5 + '@storybook/client-logger': 8.1.6 memoizerific: 1.11.3 qs: 6.12.0 - '@storybook/telemetry@8.1.5(prettier@3.2.5)': + '@storybook/telemetry@8.1.6(prettier@3.3.0)': dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-common': 8.1.5(prettier@3.2.5) - '@storybook/csf-tools': 8.1.5 + '@storybook/client-logger': 8.1.6 + '@storybook/core-common': 8.1.6(prettier@3.3.0) + '@storybook/csf-tools': 8.1.6 chalk: 4.1.2 detect-package-manager: 2.0.1 fetch-retry: 5.0.6 @@ -13632,12 +13547,12 @@ snapshots: - prettier - supports-color - '@storybook/test@8.1.5(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': + '@storybook/test@8.1.6(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0))': dependencies: - '@storybook/client-logger': 8.1.5 - '@storybook/core-events': 8.1.5 - '@storybook/instrumenter': 8.1.5 - '@storybook/preview-api': 8.1.5 + '@storybook/client-logger': 8.1.6 + '@storybook/core-events': 8.1.6 + '@storybook/instrumenter': 8.1.6 + '@storybook/preview-api': 8.1.6 '@testing-library/dom': 9.3.4 '@testing-library/jest-dom': 6.4.2(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)) '@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4) @@ -13651,19 +13566,19 @@ snapshots: - jest - vitest - '@storybook/theming@8.1.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@storybook/theming@8.1.6(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: '@emotion/use-insertion-effect-with-fallbacks': 1.0.1(react@18.3.1) - '@storybook/client-logger': 8.1.5 + '@storybook/client-logger': 8.1.6 '@storybook/global': 5.0.0 memoizerific: 1.11.3 optionalDependencies: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@storybook/types@8.1.5': + '@storybook/types@8.1.6': dependencies: - '@storybook/channels': 8.1.5 + '@storybook/channels': 8.1.6 '@types/express': 4.17.21 file-system-cache: 2.3.0 @@ -13686,7 +13601,7 @@ snapshots: '@stylistic/eslint-plugin-plus@2.1.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -13696,7 +13611,7 @@ snapshots: dependencies: '@stylistic/eslint-plugin-js': 2.1.0(eslint@8.57.0) '@types/eslint': 8.56.10 - '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 transitivePeerDependencies: - supports-color @@ -13776,7 +13691,7 @@ snapshots: '@babel/runtime': 7.24.1 '@types/aria-query': 5.0.4 aria-query: 5.1.3 - chalk: https://r2.cnpmjs.org/chalk/-/chalk-4.1.2.tgz + chalk: 4.1.2 dom-accessibility-api: 0.5.16 lz-string: 1.5.0 pretty-format: 27.5.1 @@ -13849,11 +13764,11 @@ snapshots: '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/connect@3.4.38': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/conventional-commits-parser@5.0.0': dependencies: @@ -13861,7 +13776,7 @@ snapshots: '@types/cross-spawn@6.0.6': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/detect-port@1.3.5': {} @@ -13893,7 +13808,7 @@ snapshots: '@types/express-serve-static-core@4.17.43': dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/qs': 6.9.14 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -14003,13 +13918,13 @@ snapshots: '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/serve-static@1.15.5': dependencies: '@types/http-errors': 2.0.4 '@types/mime': 4.0.0 - '@types/node': 20.12.12 + '@types/node': 20.14.0 '@types/stylus@0.48.42': dependencies: @@ -14023,10 +13938,10 @@ snapshots: '@types/validator@13.11.9': {} - '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) @@ -14041,12 +13956,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5)': + '@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: - '@typescript-eslint/scope-manager': 7.11.0 - '@typescript-eslint/types': 7.11.0 - '@typescript-eslint/typescript-estree': 7.11.0(typescript@5.4.5) - '@typescript-eslint/visitor-keys': 7.11.0 + '@typescript-eslint/scope-manager': 7.12.0 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.4 eslint: 8.57.0 optionalDependencies: @@ -14059,10 +13974,10 @@ snapshots: '@typescript-eslint/types': 7.11.0 '@typescript-eslint/visitor-keys': 7.11.0 - '@typescript-eslint/scope-manager@7.9.0': + '@typescript-eslint/scope-manager@7.12.0': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/visitor-keys': 7.12.0 '@typescript-eslint/type-utils@7.11.0(eslint@8.57.0)(typescript@5.4.5)': dependencies: @@ -14076,11 +13991,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@7.10.0': {} - '@typescript-eslint/types@7.11.0': {} - '@typescript-eslint/types@7.9.0': {} + '@typescript-eslint/types@7.12.0': {} '@typescript-eslint/typescript-estree@7.11.0(typescript@5.4.5)': dependencies: @@ -14097,10 +14010,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.9.0(typescript@5.4.5)': + '@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5)': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/types': 7.12.0 + '@typescript-eslint/visitor-keys': 7.12.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -14123,25 +14036,14 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@7.9.0(eslint@8.57.0)(typescript@5.4.5)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.9.0 - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.4.5) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript - '@typescript-eslint/visitor-keys@7.11.0': dependencies: '@typescript-eslint/types': 7.11.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.9.0': + '@typescript-eslint/visitor-keys@7.12.0': dependencies: - '@typescript-eslint/types': 7.9.0 + '@typescript-eslint/types': 7.12.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -14974,11 +14876,6 @@ snapshots: chalk@5.3.0: {} - chalk@https://r2.cnpmjs.org/chalk/-/chalk-4.1.2.tgz: - dependencies: - ansi-styles: https://r2.cnpmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz - supports-color: https://r2.cnpmjs.org/supports-color/-/supports-color-7.2.0.tgz - chance@1.1.9: {} char-regex@1.0.2: {} @@ -16028,7 +15925,7 @@ snapshots: eslint-plugin-command@0.2.3(eslint@8.57.0): dependencies: - '@es-joy/jsdoccomment': 0.43.0 + '@es-joy/jsdoccomment': 0.43.1 eslint: 8.57.0 eslint-plugin-es-x@7.6.0(eslint@8.57.0): @@ -16061,7 +15958,7 @@ snapshots: eslint-plugin-import-x@0.5.1(eslint@8.57.0)(typescript@5.4.5): dependencies: - '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 doctrine: 3.0.0 eslint: 8.57.0 @@ -16131,19 +16028,19 @@ snapshots: eslint: 8.57.0 requireindex: 1.2.0 - eslint-plugin-perfectionist@2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.2(eslint@8.57.0)): + eslint-plugin-perfectionist@2.10.0(eslint@8.57.0)(typescript@5.4.5)(vue-eslint-parser@9.4.3(eslint@8.57.0)): dependencies: - '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 minimatch: 9.0.4 natural-compare-lite: 1.4.0 optionalDependencies: - vue-eslint-parser: 9.4.2(eslint@8.57.0) + vue-eslint-parser: 9.4.3(eslint@8.57.0) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-react-core@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-react-core@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): dependencies: '@eslint-react/ast': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/core': 1.5.14(eslint@8.57.0)(typescript@5.4.5) @@ -16152,7 +16049,7 @@ snapshots: '@eslint-react/tools': 1.5.14 '@eslint-react/types': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/var': 1.5.14(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/types': 7.11.0 @@ -16165,7 +16062,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-dom@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-react-dom@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): dependencies: '@eslint-react/ast': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/core': 1.5.14(eslint@8.57.0)(typescript@5.4.5) @@ -16174,7 +16071,7 @@ snapshots: '@eslint-react/tools': 1.5.14 '@eslint-react/types': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/var': 1.5.14(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/types': 7.11.0 '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) @@ -16185,7 +16082,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-react-hooks-extra@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-react-hooks-extra@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): dependencies: '@eslint-react/ast': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/core': 1.5.14(eslint@8.57.0)(typescript@5.4.5) @@ -16194,7 +16091,7 @@ snapshots: '@eslint-react/tools': 1.5.14 '@eslint-react/types': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/var': 1.5.14(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/types': 7.11.0 @@ -16210,7 +16107,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-plugin-react-naming-convention@1.5.14(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): + eslint-plugin-react-naming-convention@1.5.14(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5): dependencies: '@eslint-react/ast': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/core': 1.5.14(eslint@8.57.0)(typescript@5.4.5) @@ -16218,7 +16115,7 @@ snapshots: '@eslint-react/shared': 1.5.14(eslint@8.57.0)(typescript@5.4.5) '@eslint-react/tools': 1.5.14 '@eslint-react/types': 1.5.14(eslint@8.57.0)(typescript@5.4.5) - '@typescript-eslint/parser': 7.11.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/parser': 7.12.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/scope-manager': 7.11.0 '@typescript-eslint/type-utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/types': 7.11.0 @@ -16299,19 +16196,19 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): + eslint-plugin-unused-imports@3.2.0(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0): dependencies: eslint: 8.57.0 eslint-rule-composer: 0.3.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) - eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)): + eslint-plugin-vitest@0.5.4(@typescript-eslint/eslint-plugin@7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)(vitest@1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0)): dependencies: - '@typescript-eslint/utils': 7.9.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 7.11.0(eslint@8.57.0)(typescript@5.4.5) eslint: 8.57.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.11.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/eslint-plugin': 7.11.0(@typescript-eslint/parser@7.12.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) vitest: 1.6.0(@types/node@20.12.12)(happy-dom@13.3.8)(jsdom@24.0.0)(less@4.2.0)(sass@1.72.0)(terser@5.30.0) transitivePeerDependencies: - supports-color @@ -16326,7 +16223,7 @@ snapshots: nth-check: 2.1.1 postcss-selector-parser: 6.0.16 semver: 7.6.2 - vue-eslint-parser: 9.4.2(eslint@8.57.0) + vue-eslint-parser: 9.4.3(eslint@8.57.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -16950,8 +16847,6 @@ snapshots: has-flag@4.0.0: {} - has-flag@https://r2.cnpmjs.org/has-flag/-/has-flag-4.0.0.tgz: {} - has-property-descriptors@1.0.2: dependencies: es-define-property: 1.0.0 @@ -17159,8 +17054,6 @@ snapshots: jsbn: 1.1.0 sprintf-js: 1.1.3 - ip@2.0.1: {} - ipaddr.js@1.9.1: {} is-absolute-url@4.0.1: {} @@ -17500,7 +17393,7 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.12 + '@types/node': 20.14.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -17540,7 +17433,7 @@ snapshots: chalk: 4.1.2 flow-parser: 0.232.0 graceful-fs: 4.2.11 - micromatch: 4.0.6 + micromatch: 4.0.7 neo-async: 2.6.2 node-dir: 0.1.17 recast: 0.23.6 @@ -17937,11 +17830,6 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 - micromatch@4.0.6: - dependencies: - braces: 3.0.3 - picomatch: 4.0.2 - micromatch@4.0.7: dependencies: braces: 3.0.3 @@ -18580,7 +18468,7 @@ snapshots: dependencies: ansi-regex: 5.0.1 ansi-styles: 5.2.0 - react-is: https://r2.cnpmjs.org/react-is/-/react-is-17.0.2.tgz + react-is: 17.0.2 pretty-format@29.7.0: dependencies: @@ -18713,7 +18601,7 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 - rc-dialog@9.5.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + rc-dialog@9.5.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.24.1 '@rc-component/portal': 1.1.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -18982,12 +18870,12 @@ snapshots: react-is@16.13.1: {} + react-is@17.0.2: {} + react-is@18.1.0: {} react-is@18.2.0: {} - react-is@https://r2.cnpmjs.org/react-is/-/react-is-17.0.2.tgz: {} - react-mentions@4.4.10(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@babel/runtime': 7.4.5 @@ -19694,9 +19582,9 @@ snapshots: terser-webpack-plugin: 5.3.10(@swc/core@1.5.7)(esbuild@0.20.2)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)) webpack: 5.91.0(@swc/core@1.5.7)(esbuild@0.20.2) - storybook@8.1.5(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + storybook@8.1.6(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@storybook/cli': 8.1.5(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@storybook/cli': 8.1.6(@babel/preset-env@7.24.5(@babel/core@7.24.5))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@babel/preset-env' - bufferutil @@ -19844,10 +19732,6 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-color@https://r2.cnpmjs.org/supports-color/-/supports-color-7.2.0.tgz: - dependencies: - has-flag: https://r2.cnpmjs.org/has-flag/-/has-flag-4.0.0.tgz - supports-preserve-symlinks-flag@1.0.0: {} swc-loader@0.1.16(@swc/core@1.5.7)(webpack@5.91.0(@swc/core@1.5.7)(esbuild@0.20.2)): @@ -20023,32 +19907,32 @@ snapshots: tslib@2.6.2: {} - turbo-darwin-64@1.13.3: + turbo-darwin-64@2.0.2: optional: true - turbo-darwin-arm64@1.13.3: + turbo-darwin-arm64@2.0.2: optional: true - turbo-linux-64@1.13.3: + turbo-linux-64@2.0.2: optional: true - turbo-linux-arm64@1.13.3: + turbo-linux-arm64@2.0.2: optional: true - turbo-windows-64@1.13.3: + turbo-windows-64@2.0.2: optional: true - turbo-windows-arm64@1.13.3: + turbo-windows-arm64@2.0.2: optional: true - turbo@1.13.3: + turbo@2.0.2: optionalDependencies: - turbo-darwin-64: 1.13.3 - turbo-darwin-arm64: 1.13.3 - turbo-linux-64: 1.13.3 - turbo-linux-arm64: 1.13.3 - turbo-windows-64: 1.13.3 - turbo-windows-arm64: 1.13.3 + turbo-darwin-64: 2.0.2 + turbo-darwin-arm64: 2.0.2 + turbo-linux-64: 2.0.2 + turbo-linux-arm64: 2.0.2 + turbo-windows-64: 2.0.2 + turbo-windows-arm64: 2.0.2 tween-functions@1.2.0: {} @@ -20438,7 +20322,7 @@ snapshots: - supports-color - terser - vue-eslint-parser@9.4.2(eslint@8.57.0): + vue-eslint-parser@9.4.3(eslint@8.57.0): dependencies: debug: 4.3.4 eslint: 8.57.0 diff --git a/turbo.json b/turbo.json index 53aa50feb76..cc5284971a3 100644 --- a/turbo.json +++ b/turbo.json @@ -3,7 +3,7 @@ "extends": [ "//" ], - "pipeline": { + "tasks": { "test": { },