refactor: replace state setter functions for consistency across components (#5275)

This commit is contained in:
白熱
2025-05-26 22:38:26 +08:00
committed by GitHub
parent d069632df8
commit bd9fd856f8
47 changed files with 445 additions and 562 deletions
@@ -112,9 +112,10 @@ class ImportCSVButtonPlugin extends Plugin {
* The plugin should add its own module to the dependency injection system at this lifecycle.
* It is not recommended to initialize the internal module of the plugin outside this lifecycle.
*/
// eslint-disable-next-line max-lines-per-function
override onStarting() {
// register icon component
this.componentManager.register('FolderSingle', FolderSingle);
this.componentManager.register('FolderSingle2', FolderSingle);
const buttonId = 'import-csv-button';
@@ -205,7 +206,7 @@ class ImportCSVButtonPlugin extends Plugin {
id: buttonId,
title: 'Import CSV',
tooltip: 'Import CSV',
icon: 'FolderSingle', // icon name
icon: 'FolderSingle2', // icon name
type: MenuItemType.BUTTON,
});
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@univerjs/mockdata",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
+1 -1
View File
@@ -48,7 +48,7 @@
"@antfu/eslint-config": "4.13.2",
"@commitlint/cli": "^19.8.1",
"@commitlint/config-conventional": "^19.8.1",
"@eslint-react/eslint-plugin": "^1.49.0",
"@eslint-react/eslint-plugin": "^1.50.0",
"@playwright/test": "^1.52.0",
"@release-it-plugins/workspaces": "^4.2.0",
"@release-it/conventional-changelog": "^9.0.4",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@univerjs/debugger",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uni-docs-ui",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uni-formula-ui",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uni-formula",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uni-sheets-ui",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uni-slides-ui",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "@univerjs/uniui",
"version": "0.7.0",
"version": "0.0.0",
"private": true,
"description": "",
"author": "DreamNum <developer@univer.ai>",
-2
View File
@@ -82,7 +82,6 @@
"kdbush": "^4.0.2",
"lodash-es": "^4.17.21",
"nanoid": "5.1.5",
"numeral": "^2.0.6",
"numfmt": "^2.5.2",
"ot-json1": "^1.0.2",
"rbush": "^4.0.1"
@@ -90,7 +89,6 @@
"devDependencies": {
"@types/async-lock": "^1.4.2",
"@types/lodash-es": "^4.17.12",
"@types/numeral": "^2.0.5",
"@types/rbush": "^4.0.0",
"@univerjs-infra/shared": "workspace:*",
"rxjs": "^7.8.2",
-1
View File
@@ -74,7 +74,6 @@
"@univerjs/drawing": "workspace:*",
"@univerjs/drawing-ui": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/icons": "^0.3.24",
"@univerjs/ui": "workspace:*"
},
"devDependencies": {
@@ -15,7 +15,6 @@
*/
import { Disposable, ICommandService, Inject } from '@univerjs/core';
import { AddImageSingle } from '@univerjs/icons';
import { ComponentManager, IMenuManagerService, IShortcutService } from '@univerjs/ui';
import { DeleteDocDrawingsCommand } from '../commands/commands/delete-doc-drawing.command';
@@ -33,7 +32,6 @@ import { EditDocDrawingOperation } from '../commands/operations/edit-doc-drawing
import { SidebarDocDrawingOperation } from '../commands/operations/open-drawing-panel.operation';
import { COMPONENT_DOC_DRAWING_PANEL } from '../views/doc-image-panel/component-name';
import { DocDrawingPanel } from '../views/doc-image-panel/DocDrawingPanel';
import { ImageUploadIcon } from '../views/menu/image.menu';
import { menuSchema } from './menu.schema';
import { DeleteDrawingsShortcutItem, MoveDrawingDownShortcutItem, MoveDrawingLeftShortcutItem, MoveDrawingRightShortcutItem, MoveDrawingUpShortcutItem } from './shortcuts/drawing.shortcut';
@@ -51,7 +49,6 @@ export class DocDrawingUIController extends Disposable {
private _initCustomComponents(): void {
const componentManager = this._componentManager;
this.disposeWithMe(componentManager.register(ImageUploadIcon, AddImageSingle));
this.disposeWithMe(componentManager.register(COMPONENT_DOC_DRAWING_PANEL, DocDrawingPanel));
}
@@ -23,7 +23,6 @@ import { getMenuHiddenObservable, MenuItemType } from '@univerjs/ui';
import { Observable } from 'rxjs';
import { InsertDocImageCommand } from '../../commands/commands/insert-image.command';
export const ImageUploadIcon = 'addition-and-subtraction-single';
export const DOCS_IMAGE_MENU_ID = 'doc.menu.image';
export const IMAGE_MENU_UPLOAD_FLOAT_ID = InsertDocImageCommand.id;
@@ -66,7 +65,7 @@ export function ImageMenuFactory(accessor: IAccessor): IMenuItem {
return {
id: DOCS_IMAGE_MENU_ID,
type: MenuItemType.SUBITEMS,
icon: ImageUploadIcon,
icon: 'AddImageSingle',
tooltip: 'docImage.title',
disabled$: getDisableWhenSelectionInTableObservable(accessor),
hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_DOC, undefined, DOCS_ZEN_EDITOR_UNIT_ID_KEY),
@@ -73,17 +73,17 @@ export function ParagraphSetting() {
], []);
const currentParagraph = useCurrentParagraph();
const [horizontalAlignValue, horizontalAlignSet] = useFirstParagraphHorizontalAlign(currentParagraph, alignmentOptions[0].value);
const [horizontalAlignValue, setHorizontalAlign] = useFirstParagraphHorizontalAlign(currentParagraph, alignmentOptions[0].value);
const [indentStart, indentStartSet] = useFirstParagraphIndentStart(currentParagraph);
const [indentEnd, indentEndSet] = useFirstParagraphIndentEnd(currentParagraph);
const [indentFirstLine, indentFirstLineSet] = useFirstParagraphIndentFirstLine(currentParagraph);
const [indentStart, setIndentStart] = useFirstParagraphIndentStart(currentParagraph);
const [indentEnd, setIndentEnd] = useFirstParagraphIndentEnd(currentParagraph);
const [indentFirstLine, setIndentFirstLine] = useFirstParagraphIndentFirstLine(currentParagraph);
const [hanging, hangingSet] = useFirstParagraphIndentHanging(currentParagraph);
const [hanging, setHanging] = useFirstParagraphIndentHanging(currentParagraph);
const [spaceAbove, spaceAboveSet] = useFirstParagraphIndentSpaceAbove(currentParagraph);
const [spaceBelow, spaceBelowSet] = useFirstParagraphSpaceBelow(currentParagraph);
const { lineSpacing: [lineSpacing, lineSpacingSet], spacingRule: [spacingRule, spacingRuleSet] } = useFirstParagraphLineSpacing(currentParagraph);
const [spaceAbove, setSpaceAbove] = useFirstParagraphIndentSpaceAbove(currentParagraph);
const [spaceBelow, setSpaceBelow] = useFirstParagraphSpaceBelow(currentParagraph);
const { lineSpacing: [lineSpacing, setLineSpacing], spacingRule: [spacingRule, setSpacingRule] } = useFirstParagraphLineSpacing(currentParagraph);
const lineSpaceConfig = useMemo(() => {
if (spacingRule === SpacingRule.AUTO) {
@@ -112,7 +112,7 @@ export function ParagraphSetting() {
`, {
'univer-bg-blend-color-dodge/90': horizontalAlignValue === item.value,
})}
onClick={() => horizontalAlignSet(item.value)}
onClick={() => setHorizontalAlign(item.value)}
>
{item.icon}
</span>
@@ -128,7 +128,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.left')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={indentStart} onChange={(v) => indentStartSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={indentStart} onChange={(v) => setIndentStart(v ?? 0)} />
</div>
<div className="univer-flex univer-justify-between univer-item-center">
@@ -136,7 +136,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.right')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={indentEnd} onChange={(v) => indentEndSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={indentEnd} onChange={(v) => setIndentEnd(v ?? 0)} />
</div>
<div className="univer-flex univer-justify-between univer-item-center">
@@ -144,7 +144,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.firstLine')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={indentFirstLine} onChange={(v) => indentFirstLineSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={indentFirstLine} onChange={(v) => setIndentFirstLine(v ?? 0)} />
</div>
<div className="univer-flex univer-justify-between univer-item-center">
@@ -152,7 +152,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.hanging')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={hanging} onChange={(v) => hangingSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={hanging} onChange={(v) => setHanging(v ?? 0)} />
</div>
</div>
<div className="univer-t-4 univer-text-sm univer-font-medium">{localeService.t('doc.paragraphSetting.spacing')}</div>
@@ -163,7 +163,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.before')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={spaceAbove} onChange={(v) => spaceAboveSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={spaceAbove} onChange={(v) => setSpaceAbove(v ?? 0)} />
</div>
<div className="univer-flex univer-justify-between univer-item-center">
@@ -171,7 +171,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.after')}
(px)
</div>
<AutoFocusInputNumber className="univer-mt-4" value={spaceBelow} onChange={(v) => spaceBelowSet(v ?? 0)} />
<AutoFocusInputNumber className="univer-mt-4" value={spaceBelow} onChange={(v) => setSpaceBelow(v ?? 0)} />
</div>
<div className="univer-flex univer-justify-between item-center">
<div className="univer-mt-3 univer-text-xs">{localeService.t('doc.paragraphSetting.lineSpace')}</div>
@@ -184,12 +184,12 @@ export function ParagraphSetting() {
{ label: localeService.t('doc.paragraphSetting.multiSpace'), value: `${SpacingRule.AUTO}` },
{ label: localeService.t('doc.paragraphSetting.fixedValue'), value: `${SpacingRule.AT_LEAST}` },
]}
onChange={(v) => spacingRuleSet(Number(v))}
onChange={(v) => setSpacingRule(Number(v))}
/>
<AutoFocusInputNumber
{...lineSpaceConfig}
value={lineSpacing}
onChange={(v) => lineSpacingSet(v ?? 0)}
onChange={(v) => setLineSpacing(v ?? 0)}
/>
</div>
@@ -100,134 +100,134 @@ export const useCurrentSections = (currentParagraphs: IParagraph[]) => {
export const useFirstParagraphHorizontalAlign = (paragraph: IParagraph[], defaultValue: string) => {
const commandService = useDependency(ICommandService);
const [horizontalAlign, _horizontalAlignSet] = useState(() => {
const [horizontalAlign, setHorizontalAlignSetInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return defaultValue;
}
return String(firstParagraph.paragraphStyle?.horizontalAlign ?? defaultValue);
});
const horizontalAlignSet = (v: string) => {
_horizontalAlignSet(v);
const sethorizontalAlign = (v: string) => {
setHorizontalAlignSetInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { horizontalAlign: Number(v) },
} as IDocParagraphSettingCommandParams);
};
return [horizontalAlign, horizontalAlignSet] as const;
return [horizontalAlign, sethorizontalAlign] as const;
};
export const useFirstParagraphIndentStart = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [indentStart, _indentStartSet] = useState(() => {
const [indentStart, setIndentStartInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.indentStart, 0);
});
const indentStartSet = (v: number) => {
_indentStartSet(v);
const setIndentStart = (v: number) => {
setIndentStartInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { indentStart: { v } },
} as IDocParagraphSettingCommandParams);
};
return [indentStart, indentStartSet] as const;
return [indentStart, setIndentStart] as const;
};
export const useFirstParagraphIndentEnd = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [indentEnd, _indentEndSet] = useState(() => {
const [indentEnd, setIndentEndInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.indentEnd, 0);
});
const indentEndSet = (v: number) => {
_indentEndSet(v);
const setIndentEnd = (v: number) => {
setIndentEndInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { indentEnd: { v } },
} as IDocParagraphSettingCommandParams);
};
return [indentEnd, indentEndSet] as const;
return [indentEnd, setIndentEnd] as const;
};
export const useFirstParagraphIndentFirstLine = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [indentFirstLine, _indentFirstLineSet] = useState(() => {
const [indentFirstLine, setIndentFirstLineInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.indentFirstLine, 0);
});
const indentFirstLineSet = (v: number) => {
_indentFirstLineSet(v);
const setIndentFirstLine = (v: number) => {
setIndentFirstLineInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { indentFirstLine: { v } },
} as IDocParagraphSettingCommandParams);
};
return [indentFirstLine, indentFirstLineSet] as const;
return [indentFirstLine, setIndentFirstLine] as const;
};
export const useFirstParagraphIndentHanging = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [hanging, _hangingSet] = useState(() => {
const [hanging, setHangingInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.hanging, 0);
});
const hangingSet = (v: number) => {
_hangingSet(v);
const setHanging = (v: number) => {
setHangingInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { hanging: { v } },
} as IDocParagraphSettingCommandParams);
};
return [hanging, hangingSet] as const;
return [hanging, setHanging] as const;
};
export const useFirstParagraphIndentSpaceAbove = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [spaceAbove, _spaceAboveSet] = useState(() => {
const [spaceAbove, setSpaceAboveInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.spaceAbove, 0);
});
const spaceAboveSet = (v: number) => {
_spaceAboveSet(v);
const setSpaceAbove = (v: number) => {
setSpaceAboveInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { spaceAbove: { v } },
} as IDocParagraphSettingCommandParams);
};
return [spaceAbove, spaceAboveSet] as const;
return [spaceAbove, setSpaceAbove] as const;
};
export const useFirstParagraphSpaceBelow = (paragraph: IParagraph[]) => {
const commandService = useDependency(ICommandService);
const [spaceBelow, _spaceBelowSet] = useState(() => {
const [spaceBelow, setSpaceBelowInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 0;
}
return getNumberUnitValue(firstParagraph.paragraphStyle?.spaceBelow, 0);
});
const spaceBelowSet = (v: number) => {
_spaceBelowSet(v);
const setSpaceBelow = (v: number) => {
setSpaceBelowInternal(v);
return commandService.executeCommand(DocParagraphSettingCommand.id, {
paragraph: { spaceBelow: { v } },
} as IDocParagraphSettingCommandParams);
};
return [spaceBelow, spaceBelowSet] as const;
return [spaceBelow, setSpaceBelow] as const;
};
// eslint-disable-next-line max-lines-per-function
@@ -246,7 +246,7 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => {
const stateChange$ = useMemo(() => new BehaviorSubject<{ spacingRule?: SpacingRule; lineSpacing?: number }>({}), []);
const [lineSpacing, _lineSpacingSet] = useState(() => {
const [lineSpacing, setLineSpacingInternal] = useState(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return 1;
@@ -256,7 +256,7 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => {
const lineSpacingCache = useRef<number>(lineSpacing);
const [spacingRule, _spacingRuleSet] = useState<SpacingRule>(() => {
const [spacingRule, setSpacingRuleInternal] = useState<SpacingRule>(() => {
const firstParagraph = paragraph[0];
if (!firstParagraph) {
return SpacingRule.AUTO;
@@ -264,12 +264,12 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => {
return firstParagraph.paragraphStyle?.spacingRule ?? SpacingRule.AUTO;
});
const lineSpacingSet = async (v: number) => {
_lineSpacingSet(v);
const setLineSpacing = async (v: number) => {
setLineSpacingInternal(v);
stateChange$.next({ lineSpacing: v, spacingRule });
};
const spacingRuleSet = async (v: SpacingRule) => {
const setSpacingRule = async (v: SpacingRule) => {
if (v !== spacingRule) {
let cache = lineSpacingCache.current;
if (v === SpacingRule.AT_LEAST) {
@@ -288,8 +288,8 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => {
}
}
lineSpacingCache.current = lineSpacing;
lineSpacingSet(cache);
_spacingRuleSet(v);
setLineSpacing(cache);
setSpacingRuleInternal(v);
stateChange$.next({ spacingRule: v });
}
};
@@ -316,8 +316,7 @@ export const useFirstParagraphLineSpacing = (paragraph: IParagraph[]) => {
}, []);
return {
lineSpacing: [lineSpacing, lineSpacingSet] as const,
spacingRule: [spacingRule, spacingRuleSet] as const,
lineSpacing: [lineSpacing, setLineSpacing] as const,
spacingRule: [spacingRule, setSpacingRule] as const,
};
};
@@ -19,7 +19,7 @@ import type { IRichTextEditingMutationParams, ISetTextSelectionsOperationParams
import { debounce, generateRandomId, ICommandService, LocaleService } from '@univerjs/core';
import { RichTextEditingMutation, SetTextSelectionsOperation } from '@univerjs/docs';
import { useDependency, useObservable } from '@univerjs/ui';
import React, { useEffect, useMemo, useRef, useState } from 'react';
import { useEffect, useMemo, useRef, useState } from 'react';
import { DocParagraphSettingCommand } from '../../commands/commands/doc-paragraph-setting.command';
import { ParagraphSetting } from './Setting';
@@ -34,9 +34,9 @@ export function ParagraphSettingIndex() {
const localeService = useDependency(LocaleService);
const currentLocale = useObservable(localeService.currentLocale$);
const [key, keySet] = useState('');
const [key, setKey] = useState('');
const debounceReset = useMemo(() => {
return debounce(() => keySet(generateRandomId(4)), 300);
return debounce(() => setKey(generateRandomId(4)), 300);
}, []);
const rangeRef = useRef<ITextRange[]>([]);
@@ -46,7 +46,7 @@ export function ParagraphSettingIndex() {
if (SetTextSelectionsOperation.id === info.id) {
const ranges = (info.params as ISetTextSelectionsOperationParams).ranges;
if (!isRangesEqual(ranges, rangeRef.current)) {
keySet(generateRandomId(4));
setKey(generateRandomId(4));
}
rangeRef.current = ranges;
}
@@ -62,7 +62,7 @@ export function ParagraphSettingIndex() {
}, [debounceReset]);
useEffect(() => {
keySet(generateRandomId(4));
setKey(generateRandomId(4));
}, [currentLocale]);
useEffect(() => () => debounceReset.cancel(), [debounceReset]);
@@ -14,29 +14,35 @@
* limitations under the License.
*/
import type { IconProps } from '@univerjs/icons';
import { ColorKit } from '@univerjs/core';
import { clsx, Dropdown, ColorPicker as OriginColorPicker } from '@univerjs/design';
import { MoreDownSingle } from '@univerjs/icons';
import { ComponentManager, useDependency } from '@univerjs/ui';
import { PaintBucket } from '@univerjs/icons';
import { useMemo } from 'react';
interface IColorPickerProps {
color: string;
onChange: (color: string) => void;
disable?: boolean;
iconId?: string;
Icon?: React.ForwardRefExoticComponent<IconProps & React.RefAttributes<SVGElement>>;
className?: string;
isNeedDropdownIcon?: boolean;
};
export const ColorPicker = (props: IColorPickerProps) => {
const { color, onChange, disable = false, iconId = 'PaintBucket', className, isNeedDropdownIcon = true } = props;
const componentManager = useDependency(ComponentManager);
const { color, onChange, disable = false, Icon = PaintBucket, className } = props;
const colorKit = useMemo(() => new ColorKit(color), [color]);
const Icon = componentManager.get(iconId);
if (!Icon) return null;
const renderIcon = () => {
const iconProps = {
className: clsx('univer-fill-primary-600', disable && className),
extend: { colorChannel1: colorKit.isValid ? color : '' },
};
return (
<Icon {...iconProps} />
);
};
return !disable
? (
@@ -54,14 +60,9 @@ export const ColorPicker = (props: IColorPickerProps) => {
hover:univer-bg-gray-100
`, className)}
>
<Icon className="univer-fill-primary-600" extend={{ colorChannel1: colorKit.isValid ? color : '' }} />
{isNeedDropdownIcon && (
<MoreDownSingle
className="univer-ml-1.5 univer-text-gray-400"
/>
)}
{renderIcon()}
</span>
</Dropdown>
)
: <Icon className={clsx('univer-fill-primary-600', className)} extend={{ colorChannel1: colorKit.isValid ? color : '' }} />;
: renderIcon();
};
@@ -17,6 +17,7 @@
import type { IHighlightCell } from '@univerjs/sheets-conditional-formatting';
import { BooleanNumber } from '@univerjs/core';
import { clsx } from '@univerjs/design';
import { BoldSingle, FontColor, ItalicSingle, StrikethroughSingle, UnderlineSingle } from '@univerjs/icons';
import { removeUndefinedAttr } from '@univerjs/sheets-conditional-formatting';
import { ComponentManager, useDependency } from '@univerjs/ui';
import { useEffect, useState } from 'react';
@@ -35,52 +36,49 @@ const getBooleanFromNumber = (v: BooleanNumber) => v !== BooleanNumber.FALSE;
export const ConditionalStyleEditor = (props: IConditionalStyleEditorProps) => {
const { style, onChange, className } = props;
const componentManager = useDependency(ComponentManager);
const [isBold, isBoldSet] = useState<BooleanNumber | undefined>(() => {
const [isBold, setIsBold] = useState<BooleanNumber | undefined>(() => {
const defaultV = undefined;
if (!style?.bl) {
return defaultV;
}
return style.bl;
});
const [isItalic, isItalicSet] = useState<BooleanNumber | undefined>(() => {
const [isItalic, setIsItalic] = useState<BooleanNumber | undefined>(() => {
const defaultV = undefined;
if (!style?.it) {
return defaultV;
}
return style.it;
});
const [isUnderline, isUnderlineSet] = useState<BooleanNumber | undefined>(() => {
const [isUnderline, setIsUnderline] = useState<BooleanNumber | undefined>(() => {
const defaultV = undefined;
if (!style?.ul) {
return defaultV;
}
return style.ul.s;
});
const [isStrikethrough, isStrikethroughSet] = useState<BooleanNumber | undefined>(() => {
const [isStrikethrough, setIsStrikethrough] = useState<BooleanNumber | undefined>(() => {
const defaultV = undefined;
if (!style?.st) {
return defaultV;
}
return style.st.s;
});
const [fontColor, fontColorSet] = useState(() => {
const [fontColor, setFontColor] = useState(() => {
const defaultV = '#2f56ef';
if (!style?.cl?.rgb) {
return defaultV;
}
return style.cl.rgb;
});
const [bgColor, bgColorSet] = useState(() => {
const [bgColor, setBgColor] = useState(() => {
const defaultV = '#e8ecfc';
if (!style?.bg?.rgb) {
return defaultV;
}
return style.bg.rgb;
});
const BoldSingleIcon = componentManager.get('BoldSingle');
const ItalicSingleIcon = componentManager.get('ItalicSingle');
const UnderlineSingleIcon = componentManager.get('UnderlineSingle');
const StrikethroughSingle = componentManager.get('StrikethroughSingle');
useEffect(() => {
const resultStyle: IHighlightCell['style'] = {
bl: isBold,
@@ -105,48 +103,40 @@ export const ConditionalStyleEditor = (props: IConditionalStyleEditorProps) => {
return (
<div className={clsx('univer-my-2.5 univer-flex univer-justify-between', className)}>
{BoldSingleIcon && (
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100': getBooleanFromNumber(isBold || BooleanNumber.FALSE),
})}
onClick={() => isBoldSet(getAnotherBooleanNumber(isBold))}
>
<BoldSingleIcon />
</div>
)}
{ItalicSingleIcon && (
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100': getBooleanFromNumber(isItalic || BooleanNumber.FALSE),
})}
onClick={() => isItalicSet(getAnotherBooleanNumber(isItalic))}
>
<ItalicSingleIcon />
</div>
)}
{UnderlineSingleIcon && (
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100': getBooleanFromNumber(isUnderline || BooleanNumber.FALSE),
})}
onClick={() => isUnderlineSet(getAnotherBooleanNumber(isUnderline))}
>
<UnderlineSingleIcon />
</div>
)}
{StrikethroughSingle && (
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100': getBooleanFromNumber(isStrikethrough || BooleanNumber.FALSE),
})}
onClick={() => isStrikethroughSet(getAnotherBooleanNumber(isStrikethrough))}
>
<StrikethroughSingle />
</div>
)}
<ColorPicker color={fontColor} onChange={fontColorSet} iconId="FontColor" />
<ColorPicker color={bgColor} onChange={bgColorSet} iconId="PaintBucket" />
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100 dark:univer-bg-gray-700': getBooleanFromNumber(isBold || BooleanNumber.FALSE),
})}
onClick={() => setIsBold(getAnotherBooleanNumber(isBold))}
>
<BoldSingle />
</div>
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100 dark:univer-bg-gray-700': getBooleanFromNumber(isItalic || BooleanNumber.FALSE),
})}
onClick={() => setIsItalic(getAnotherBooleanNumber(isItalic))}
>
<ItalicSingle />
</div>
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100 dark:univer-bg-gray-700': getBooleanFromNumber(isUnderline || BooleanNumber.FALSE),
})}
onClick={() => setIsUnderline(getAnotherBooleanNumber(isUnderline))}
>
<UnderlineSingle />
</div>
<div
className={clsx(buttonItemClassName, {
'univer-bg-gray-100 dark:univer-bg-gray-700': getBooleanFromNumber(isStrikethrough || BooleanNumber.FALSE),
})}
onClick={() => setIsStrikethrough(getAnotherBooleanNumber(isStrikethrough))}
>
<StrikethroughSingle />
</div>
<ColorPicker color={fontColor} onChange={setFontColor} Icon={FontColor} />
<ColorPicker color={bgColor} onChange={setBgColor} />
</div>
);
};
@@ -22,21 +22,21 @@ import { RuleList } from './rule-list';
interface IConditionFormattingPanelProps { rule?: IConditionFormattingRule };
export const ConditionFormattingPanel = (props: IConditionFormattingPanelProps) => {
const [currentEditRule, currentEditRuleSet] = useState<IConditionFormattingRule | undefined>(props.rule);
const [isShowRuleEditor, isShowRuleEditorSet] = useState(!!props.rule);
const [currentEditRule, setCurrentEditRule] = useState<IConditionFormattingRule | undefined>(props.rule);
const [isShowRuleEditor, setIsShowRuleEditor] = useState(!!props.rule);
const createCfRule = () => {
isShowRuleEditorSet(true);
setIsShowRuleEditor(true);
};
const handleCancel = () => {
isShowRuleEditorSet(false);
currentEditRuleSet(undefined);
setIsShowRuleEditor(false);
setCurrentEditRule(undefined);
};
const handleRuleClick = (rule: IConditionFormattingRule) => {
currentEditRuleSet(rule);
isShowRuleEditorSet(true);
setCurrentEditRule(rule);
setIsShowRuleEditor(true);
};
return (
@@ -33,8 +33,8 @@ const createOptionItem = (text: CFValueType, localeService: LocaleService) => ({
const InputText = (props: { disabled?: boolean; id: string; className: string; type: CFValueType; value: string | number; onChange: (v: string | number) => void }) => {
const { onChange, className, value, type, id, disabled = false } = props;
const univerInstanceService = useDependency(IUniverInstanceService);
const unitId = univerInstanceService.getCurrentUnitForType<Workbook>(UniverInstanceType.UNIVER_SHEET)!.getUnitId();
const subUnitId = univerInstanceService.getCurrentUnitForType<Workbook>(UniverInstanceType.UNIVER_SHEET)!.getActiveSheet()?.getSheetId();
const unitId = univerInstanceService.getCurrentUnitOfType<Workbook>(UniverInstanceType.UNIVER_SHEET)!.getUnitId();
const subUnitId = univerInstanceService.getCurrentUnitOfType<Workbook>(UniverInstanceType.UNIVER_SHEET)!.getActiveSheet()?.getSheetId();
const formulaEditorRef = useRef<IFormulaEditorRef>(null);
const [isFocusFormulaEditor, setIsFocusFormulaEditor] = useState(false);
@@ -102,26 +102,31 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
const localeService = useDependency(LocaleService);
const rule = props.rule?.type === CFRuleType.dataBar ? props.rule : undefined;
const [isGradient, isGradientSet] = useState(() => {
const [isGradient, setIsGradient] = useState(() => {
const defaultV = '0';
if (!rule) {
return defaultV;
}
return rule.config?.isGradient ? '1' : '0';
});
const [positiveColor, positiveColorSet] = useState(() => {
const [positiveColor, setPositiveColor] = useState(() => {
if (!rule) {
return defaultDataBarPositiveColor;
}
return rule.config?.positiveColor || defaultDataBarPositiveColor;
});
const [nativeColor, nativeColorSet] = useState(() => {
const [nativeColor, setNativeColor] = useState(() => {
if (!rule) {
return defaultDataBarNativeColor;
}
return rule.config?.nativeColor || defaultDataBarNativeColor;
});
const commonOptions = [createOptionItem(CFValueType.num, localeService), createOptionItem(CFValueType.percent, localeService), createOptionItem(CFValueType.percentile, localeService), createOptionItem(CFValueType.formula, localeService)];
const commonOptions = [
createOptionItem(CFValueType.num, localeService),
createOptionItem(CFValueType.percent, localeService),
createOptionItem(CFValueType.percentile, localeService),
createOptionItem(CFValueType.formula, localeService),
];
const minOptions = [createOptionItem(CFValueType.min, localeService), ...commonOptions];
const maxOptions = [createOptionItem(CFValueType.max, localeService), ...commonOptions];
const [minValueType, setMinValueType] = useState<CFValueType>(() => {
@@ -138,7 +143,7 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
}
return rule.config?.max.type || defaultV;
});
const [minValue, minValueSet] = useState(() => {
const [minValue, setMinValue] = useState(() => {
const defaultV = 0;
if (!rule) {
return defaultV;
@@ -203,7 +208,7 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
return dispose as () => void;
}, [isGradient, minValue, minValueType, maxValue, maxValueType, positiveColor, nativeColor, interceptorManager, isShowValue]);
const _handleChange = (option: {
const handleChange = (option: {
minValueType: CFValueType;
minValue: number | string;
maxValueType: CFValueType;
@@ -217,9 +222,9 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
};
const handlePositiveColorChange = (color: string) => {
positiveColorSet(color);
setPositiveColor(color);
_handleChange({
handleChange({
isGradient,
minValue,
minValueType,
@@ -231,8 +236,8 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
});
};
const handleNativeColorChange = (color: string) => {
nativeColorSet(color);
_handleChange({
setNativeColor(color);
handleChange({
isGradient,
minValue,
minValueType,
@@ -286,8 +291,8 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
<RadioGroup
value={isGradient}
onChange={(v) => {
isGradientSet(v as string);
_handleChange({
setIsGradient(v as string);
handleChange({
isGradient: v as string,
minValue,
minValueType,
@@ -311,7 +316,7 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
checked={!isShowValue}
onChange={(v) => {
setIsShowValue(!v);
_handleChange({
handleChange({
isGradient: v as string,
minValue,
minValueType,
@@ -375,8 +380,8 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
onChange={(v) => {
setMinValueType(v as CFValueType);
const value = createDefaultValueByValueType(v as CFValueType, 10);
minValueSet(value);
_handleChange({
setMinValue(value);
handleChange({
isGradient,
minValue: value,
minValueType: v as CFValueType,
@@ -396,8 +401,8 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
type={minValueType}
value={minValue}
onChange={(v) => {
minValueSet(v || 0);
_handleChange({
setMinValue(v || 0);
handleChange({
isGradient,
minValue: v || 0,
minValueType,
@@ -427,7 +432,7 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
setMaxValueType(v as CFValueType);
const value = createDefaultValueByValueType(v as CFValueType, 90);
setMaxValue(value);
_handleChange({
handleChange({
isGradient,
minValue,
minValueType,
@@ -447,7 +452,7 @@ export const DataBarStyleEditor = (props: IStyleEditorProps) => {
value={maxValue}
onChange={(v) => {
setMaxValue(v || 0);
_handleChange({
handleChange({
isGradient,
minValue,
minValueType,
@@ -235,7 +235,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps<any, ITextHigh
const localeService = useDependency(LocaleService);
const rule = props.rule?.type === CFRuleType.highlightCell ? props.rule : undefined;
const [subType, subTypeSet] = useState<CFSubRuleType.number | CFSubRuleType.text | CFSubRuleType.timePeriod | CFSubRuleType.duplicateValues | CFSubRuleType.uniqueValues>(() => {
const [subType, setSubType] = useState<CFSubRuleType.number | CFSubRuleType.text | CFSubRuleType.timePeriod | CFSubRuleType.duplicateValues | CFSubRuleType.uniqueValues>(() => {
const defaultV = CFSubRuleType.text;
if (!rule) {
return defaultV;
@@ -262,7 +262,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps<any, ITextHigh
const operatorOptions = useMemo(() => getOperatorOptions(subType, localeService), [subType]);
const [operator, operatorSet] = useState<IResult['operator'] | undefined>(() => {
const [operator, setOperator] = useState<IResult['operator'] | undefined>(() => {
const defaultV = operatorOptions ? operatorOptions[0].value as IResult['operator'] : undefined;
if (!rule) {
return defaultV;
@@ -270,7 +270,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps<any, ITextHigh
return rule.operator || defaultV;
});
const [value, valueSet] = useState<IValue>(() => {
const [value, setValue] = useState<IValue>(() => {
const defaultV = '';
if (!rule) {
return defaultV;
@@ -336,7 +336,7 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps<any, ITextHigh
useEffect(() => {
if (!typeOptions.some((item) => item.value === subType)) {
subTypeSet(typeOptions[0].value as CFSubRuleType.text);
setSubType(typeOptions[0].value as CFSubRuleType.text);
}
}, [typeOptions]);
@@ -344,20 +344,20 @@ export const HighlightCellStyleEditor = (props: IStyleEditorProps<any, ITextHigh
const _subType = v as typeof subType;
const operatorList = getOperatorOptions(_subType, localeService);
const _operator = operatorList && operatorList[0].value as typeof operator;
subTypeSet(_subType);
operatorSet(_operator);
_operator && valueSet(createDefaultValue(_subType, _operator));
setSubType(_subType);
setOperator(_operator);
_operator && setValue(createDefaultValue(_subType, _operator));
onChange(getResult({ subType: _subType, operator: _operator }));
};
const onOperatorChange = (v: string) => {
const _operator = v as typeof operator;
operatorSet(_operator);
setOperator(_operator);
onChange(getResult({ operator: _operator }));
};
const onInputChange = (value: number | string | [number, number]) => {
valueSet(value);
setValue(value);
onChange(getResult({ value }));
};
@@ -50,11 +50,11 @@ const TextInput = (props: { id: number; type: CFValueType; value: number | strin
const subUnitId = univerInstanceService.getCurrentUnitForType<Workbook>(UniverInstanceType.UNIVER_SHEET)!.getActiveSheet()?.getSheetId();
const formulaEditorRef = useRef<IFormulaEditorRef>(null);
const [isFocusFormulaEditor, isFocusFormulaEditorSet] = useState(false);
const [isFocusFormulaEditor, setIsFocusFormulaEditor] = useState(false);
useSidebarClick((e: MouseEvent) => {
const isOutSide = formulaEditorRef.current?.isClickOutSide(e);
isOutSide && isFocusFormulaEditorSet(false);
isOutSide && setIsFocusFormulaEditor(false);
});
return (
<div className="univer-relative">
@@ -87,7 +87,7 @@ const TextInput = (props: { id: number; type: CFValueType; value: number | strin
const formula = v || '';
onChange(formula);
}}
onFocus={() => isFocusFormulaEditorSet(true)}
onFocus={() => setIsFocusFormulaEditor(true)}
/>
</div>
)}
@@ -405,8 +405,8 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
const { interceptorManager } = props;
const rule = props.rule?.type === CFRuleType.iconSet ? props.rule : undefined;
const localeService = useDependency(LocaleService);
const [errorMap, errorMapSet] = useState<Record<string, string>>({});
const [currentIconType, currentIconTypeSet] = useState<IIconType>(() => {
const [errorMap, setErrorMap] = useState<Record<string, string>>({});
const [currentIconType, setCurrentIconType] = useState<IIconType>(() => {
const defaultV = Object.keys(iconMap)[0] as IIconType;
if (rule && rule.config.length) {
const type = rule.config[0].iconType;
@@ -418,7 +418,7 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
return defaultV;
});
const [configList, configListSet] = useState(() => {
const [configList, setConfigList] = useState(() => {
if (rule && rule.config.length) {
return Tools.deepClone(rule?.config);
}
@@ -438,7 +438,7 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
});
});
const [isShowValue, isShowValueSet] = useState(() => {
const [isShowValue, setIsShowValue] = useState(() => {
if (!rule) {
return true;
}
@@ -509,16 +509,16 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
const oldV = get(configList, keys);
if (oldV !== v) {
set(configList, keys, v);
configListSet([...configList]);
errorMapSet(checkResult(configList));
setConfigList([...configList]);
setErrorMap(checkResult(configList));
}
};
const handleClickIconList = (iconType: IIconType) => {
currentIconTypeSet(iconType);
setCurrentIconType(iconType);
const list = iconMap[iconType] || [];
const config = new Array(list.length).fill('').map((_e, index, list) => createDefaultConfigItem(iconType, index, list));
configListSet(config);
errorMapSet(checkResult(config));
setConfigList(config);
setErrorMap(checkResult(config));
};
useEffect(() => {
@@ -553,7 +553,7 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
item.iconId = newIcon.iconId;
item.iconType = newIcon.iconType;
});
configListSet([...configList]);
setConfigList([...configList]);
};
const layoutService = useDependency(ILayoutService);
const [iconGroupListEl, setIconGroupListEl] = useState<HTMLDivElement>();
@@ -598,7 +598,7 @@ export const IconSet = (props: IStyleEditorProps<unknown, IIconSet>) => {
{localeService.t('sheet.cf.iconSet.reverseIconOrder')}
</div>
<div className="univer-ml-6 univer-flex univer-items-center univer-text-xs">
<Checkbox checked={!isShowValue} onChange={(v) => { isShowValueSet(!v); }} />
<Checkbox checked={!isShowValue} onChange={(v) => { setIsShowValue(!v); }} />
{localeService.t('sheet.cf.iconSet.onlyShowIcon')}
</div>
</div>
@@ -51,7 +51,7 @@ export const RuleEdit = (props: IRuleEditProps) => {
const unitId = getUnitId(univerInstanceService);
const subUnitId = getSubUnitId(univerInstanceService);
const [errorText, errorTextSet] = useState<string | undefined>(undefined);
const [errorText, setErrorText] = useState<string | undefined>(undefined);
const rangeResult = useRef<IRange[]>(props.rule?.ranges ?? []);
const rangeString = useMemo(() => {
@@ -78,7 +78,7 @@ export const RuleEdit = (props: IRuleEditProps) => {
{ label: localeService.t('sheet.cf.ruleType.iconSet'), value: '6' },
];
const [ruleType, ruleTypeSet] = useState(() => {
const [ruleType, setRuleType] = useState(() => {
const type = props.rule?.rule.type;
const defaultType = options[0].value;
if (!type) {
@@ -220,12 +220,12 @@ export const RuleEdit = (props: IRuleEditProps) => {
const handleVerify = (v: boolean, rangeText: string) => {
if (v) {
if (rangeText.length < 1) {
errorTextSet(localeService.t('sheet.cf.errorMessage.rangeError'));
setErrorText(localeService.t('sheet.cf.errorMessage.rangeError'));
} else {
errorTextSet(undefined);
setErrorText(undefined);
}
} else {
errorTextSet(localeService.t('sheet.cf.errorMessage.rangeError'));
setErrorText(localeService.t('sheet.cf.errorMessage.rangeError'));
}
};
return (
@@ -260,7 +260,7 @@ export const RuleEdit = (props: IRuleEditProps) => {
className="univer-mt-4 univer-w-full"
value={ruleType}
options={options}
onChange={(e) => ruleTypeSet(e)}
onChange={(e) => setRuleType(e)}
/>
<StyleEditor
interceptorManager={interceptorManager}
@@ -126,7 +126,7 @@ export const RuleList = (props: IRuleListProps) => {
const subUnitId = worksheet.getSheetId();
const [currentRuleRanges, currentRuleRangesSet] = useState<IRange[]>([]);
const [currentRuleRanges, setCurrentRuleRanges] = useState<IRange[]>([]);
const [selectValue, setSelectValue] = useState('2');
const [fetchRuleListId, setFetchRuleListId] = useState(0);
const [draggingId, setDraggingId] = useState<number>(-1);
@@ -159,7 +159,7 @@ export const RuleList = (props: IRuleListProps) => {
return [];
};
const [ruleList, ruleListSet] = useState(getRuleList);
const [ruleList, setRuleList] = useState(getRuleList);
useHighlightRange(currentRuleRanges);
@@ -173,7 +173,7 @@ export const RuleList = (props: IRuleListProps) => {
});
useEffect(() => {
ruleListSet(getRuleList);
setRuleList(getRuleList);
}, [selectValue, fetchRuleListId, unitId, subUnitId]);
useEffect(() => {
@@ -192,7 +192,7 @@ export const RuleList = (props: IRuleListProps) => {
});
return () => disposable.dispose();
}).pipe(debounceTime(16)).subscribe(() => {
ruleListSet(getRuleList);
setRuleList(getRuleList);
});
return () => {
subscription.unsubscribe();
@@ -387,9 +387,9 @@ export const RuleList = (props: IRuleListProps) => {
'univer-bg-gray-100 dark:!univer-bg-gray-700': draggingId === index,
})}
onMouseMove={() => {
rule.ranges !== currentRuleRanges && currentRuleRangesSet(rule.ranges);
rule.ranges !== currentRuleRanges && setCurrentRuleRanges(rule.ranges);
}}
onMouseLeave={() => currentRuleRangesSet([])}
onMouseLeave={() => setCurrentRuleRanges([])}
onClick={() => {
onClick(rule);
}}
@@ -438,7 +438,7 @@ export const RuleList = (props: IRuleListProps) => {
onClick={(e) => {
e.stopPropagation();
handleDelete(rule);
currentRuleRangesSet([]);
setCurrentRuleRanges([]);
}}
>
<DeleteSingle />
@@ -63,7 +63,7 @@ export function DataValidationDetail() {
const [localRanges, setLocalRanges] = useState<IUnitRange[]>(() => localRule.ranges.map((i) => ({ unitId: '', sheetId: '', range: i })));
const debounceExecute = useMemo(() => debounceExecuteFactory(commandService), [commandService]);
const [isRangeError, setIsRangeError] = useState(false);
const [isFocusRangeSelector, isFocusRangeSelectorSet] = useState(false);
const [isFocusRangeSelector, setIsFocusRangeSelector] = useState(false);
const rangeSelectorInstance = useRef<IRangeSelectorInstance>(null);
const sheetSelectionService = useDependency(SheetsSelectionsService);
@@ -264,7 +264,7 @@ export function DataValidationDetail() {
}
}}
onFocusChange={(focusing, str) => {
isFocusRangeSelectorSet(focusing);
setIsFocusRangeSelector(focusing);
if (!focusing && str && rangeSelectorInstance.current?.verify()) {
handleUpdateRuleRanges(str);
}
@@ -25,11 +25,11 @@ export function CustomFormulaInput(props: IFormulaInputProps) {
const { unitId, subUnitId, value, onChange, showError, validResult } = props;
const formula1Res = showError ? validResult?.formula1 : undefined;
const formulaEditorRef = useRef<IFormulaEditorRef>(null);
const [isFocusFormulaEditor, isFocusFormulaEditorSet] = useState(false);
const [isFocusFormulaEditor, setIsFocusFormulaEditor] = useState(false);
useSidebarClick((e: MouseEvent) => {
const isOutSide = formulaEditorRef.current?.isClickOutSide(e);
isOutSide && isFocusFormulaEditorSet(false);
isOutSide && setIsFocusFormulaEditor(false);
});
return (
@@ -60,7 +60,7 @@ export function CustomFormulaInput(props: IFormulaInputProps) {
formula1: newFormula,
});
}}
onFocus={() => isFocusFormulaEditorSet(true)}
onFocus={() => setIsFocusFormulaEditor(true)}
/>
</FormLayout>
);
@@ -321,11 +321,11 @@ export function ListFormulaInput(props: IFormulaInputProps) {
});
const formulaEditorRef = useRef<IFormulaEditorRef>(null);
const [isFocusFormulaEditor, isFocusFormulaEditorSet] = useState(false);
const [isFocusFormulaEditor, setIsFocusFormulaEditor] = useState(false);
useSidebarClick((e: MouseEvent) => {
const isOutSide = formulaEditorRef.current?.isClickOutSide(e);
isOutSide && isFocusFormulaEditorSet(false);
isOutSide && setIsFocusFormulaEditor(false);
});
return (
@@ -366,7 +366,7 @@ export function ListFormulaInput(props: IFormulaInputProps) {
subUnitId={subUnitId}
isFocus={isFocusFormulaEditor}
isSupportAcrossSheet
onFocus={() => isFocusFormulaEditorSet(true)}
onFocus={() => setIsFocusFormulaEditor(true)}
onChange={(v = '') => {
const str = (v ?? '').trim();
setFormulaStrCopy(str);
-1
View File
@@ -84,7 +84,6 @@
"@univerjs/drawing": "workspace:*",
"@univerjs/drawing-ui": "workspace:*",
"@univerjs/engine-render": "workspace:*",
"@univerjs/icons": "^0.3.24",
"@univerjs/sheets": "workspace:*",
"@univerjs/sheets-drawing": "workspace:*",
"@univerjs/sheets-ui": "workspace:*",
@@ -17,7 +17,6 @@
import { Disposable, ICommandService, Inject } from '@univerjs/core';
import { IDrawingManagerService } from '@univerjs/drawing';
import { AddImageSingle } from '@univerjs/icons';
import { SheetsSelectionsService } from '@univerjs/sheets';
import { ComponentManager, IMenuManagerService, IShortcutService } from '@univerjs/ui';
import { DeleteDrawingsCommand } from '../commands/commands/delete-drawings.command';
@@ -33,7 +32,6 @@ import { UngroupSheetDrawingCommand } from '../commands/commands/ungroup-sheet-d
import { ClearSheetDrawingTransformerOperation } from '../commands/operations/clear-drawing-transformer.operation';
import { EditSheetDrawingOperation } from '../commands/operations/edit-sheet-drawing.operation';
import { SidebarSheetDrawingOperation } from '../commands/operations/open-drawing-panel.operation';
import { IMAGE_UPLOAD_ICON } from '../views/menu/image.menu';
import { COMPONENT_SHEET_DRAWING_PANEL } from '../views/sheet-image-panel/component-name';
import { SheetDrawingPanel } from '../views/sheet-image-panel/SheetDrawingPanel';
import { menuSchema } from './menu.schema';
@@ -55,7 +53,6 @@ export class SheetDrawingUIController extends Disposable {
private _initCustomComponents(): void {
const componentManager = this._componentManager;
this.disposeWithMe(componentManager.register(IMAGE_UPLOAD_ICON, AddImageSingle));
this.disposeWithMe(componentManager.register(COMPONENT_SHEET_DRAWING_PANEL, SheetDrawingPanel));
}
@@ -22,14 +22,13 @@ import { getCurrentRangeDisable$ } from '@univerjs/sheets-ui';
import { getMenuHiddenObservable, MenuItemType } from '@univerjs/ui';
import { InsertCellImageCommand, InsertFloatImageCommand } from '../../commands/commands/insert-image.command';
export const IMAGE_UPLOAD_ICON = 'addition-and-subtraction-single';
export const SHEETS_IMAGE_MENU_ID = 'sheet.menu.image';
export function ImageMenuFactory(accessor: IAccessor): IMenuItem {
return {
id: SHEETS_IMAGE_MENU_ID,
type: MenuItemType.SUBITEMS,
icon: IMAGE_UPLOAD_ICON,
icon: 'AddImageSingle',
tooltip: 'sheetImage.title',
hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_SHEET),
disabled$: getCurrentRangeDisable$(accessor, { workbookTypes: [WorkbookEditablePermission], worksheetTypes: [WorksheetEditPermission], rangeTypes: [RangeProtectionPermissionEditPoint] }),
@@ -27,17 +27,17 @@ export const useFormulaDescribe = (isNeed: boolean, formulaText: string, editor?
const descriptionService = useDependency(IDescriptionService);
const lexerTreeBuilder = useDependency(LexerTreeBuilder);
const [functionInfo, functionInfoSet] = useState<IFunctionInfo | undefined>();
const [paramIndex, paramIndexSet] = useState<number>(-1);
const [isShow, isShowSet] = useState(true);
const [functionInfo, setFunctionInfo] = useState<IFunctionInfo | undefined>();
const [paramIndex, setParamIndex] = useState<number>(-1);
const [isShow, setIsShow] = useState(true);
const isShowRef = useStateRef(isShow);
const formulaTextRef = useRef(formulaText);
formulaTextRef.current = formulaText;
const reset = () => {
functionInfoSet(undefined);
paramIndexSet(-1);
isShowSet(false);
setFunctionInfo(undefined);
setParamIndex(-1);
setIsShow(false);
};
useEffect(() => {
@@ -51,14 +51,14 @@ export const useFormulaDescribe = (isNeed: boolean, formulaText: string, editor?
if (res) {
const { functionName, paramIndex } = res;
const info = descriptionService.getFunctionInfo(functionName);
functionInfoSet(info);
paramIndexSet(paramIndex);
setFunctionInfo(info);
setParamIndex(paramIndex);
return;
}
}
}
functionInfoSet(undefined);
paramIndexSet(-1);
setFunctionInfo(undefined);
setParamIndex(-1);
});
const d2 = editor.selectionChange$.pipe(
filter((e) => e.isEditing),
@@ -66,7 +66,7 @@ export const useFormulaDescribe = (isNeed: boolean, formulaText: string, editor?
map((e) => e.textRanges[0].startOffset),
distinctUntilChanged()
).subscribe(() => {
isShowSet(true);
setIsShow(true);
});
return () => {
d.unsubscribe();
@@ -29,14 +29,14 @@ import { useStateRef } from '../hooks/use-state-ref';
export const useFormulaSearch = (isNeed: boolean, nodes: INode[] = [], editor?: Editor) => {
const descriptionService = useDependency(IDescriptionService);
const [searchList, searchListSet] = useState<ISearchItem[]>([]);
const [searchText, searchTextSet] = useState<string>('');
const [searchList, setSearchList] = useState<ISearchItem[]>([]);
const [searchText, setSearchText] = useState<string>('');
const indexRef = useRef(-1);
const stateRef = useStateRef({ nodes });
const reset = () => {
searchListSet([]);
searchTextSet('');
setSearchList([]);
setSearchText('');
indexRef.current = -1;
};
@@ -56,15 +56,15 @@ export const useFormulaSearch = (isNeed: boolean, nodes: INode[] = [], editor?:
indexRef.current = currentNodeIndex;
const token = currentNode.token;
const list = descriptionService.getSearchListByNameFirstLetter(token);
searchListSet(list);
searchTextSet(token);
setSearchList(list);
setSearchText(token);
return;
}
}
}
indexRef.current = -1;
searchTextSet('');
searchListSet((pre) => {
setSearchText('');
setSearchList((pre) => {
if (!pre?.length) {
return pre;
}
@@ -120,7 +120,7 @@ export const FormulaEditor = forwardRef((props: IFormulaEditorProps, ref: Ref<IF
const searchFunctionRef = useRef<HTMLElement>(null);
const editorRef = useRef<Editor>(undefined);
const editor = editorRef.current;
const [isFocus, isFocusSet] = useState(_isFocus);
const [isFocus, setIsFocus] = useState(_isFocus);
const formulaEditorContainerRef = useRef(null);
const editorId = useMemo(() => propEditorId ?? createInternalEditorID(`${EMBEDDING_FORMULA_EDITOR}-${generateRandomId(4)}`), []);
const isError = useMemo(() => errorText !== undefined, [errorText]);
@@ -239,14 +239,14 @@ export const FormulaEditor = forwardRef((props: IFormulaEditorProps, ref: Ref<IF
useLayoutEffect(() => {
if (_isFocus) {
isFocusSet(_isFocus);
setIsFocus(_isFocus);
focus();
} else {
if (resetSelectionOnBlur) {
editor?.blur();
resetSelection();
}
isFocusSet(_isFocus);
setIsFocus(_isFocus);
}
}, [_isFocus, editor, focus, resetSelection, resetSelectionOnBlur]);
@@ -285,7 +285,7 @@ export const FormulaEditor = forwardRef((props: IFormulaEditorProps, ref: Ref<IF
editor,
handleSelectionChange
);
useSwitchSheet(isFocus && Boolean(isSelecting && docFocusing), unitId, isSupportAcrossSheet, isFocusSet, onBlur, () => {
useSwitchSheet(isFocus && Boolean(isSelecting && docFocusing), unitId, isSupportAcrossSheet, setIsFocus, onBlur, () => {
highlight(formulaTextRef.current, false, true);
});
@@ -307,7 +307,7 @@ export const FormulaEditor = forwardRef((props: IFormulaEditorProps, ref: Ref<IF
};
const handleMouseUp = () => {
isFocusSet(true);
setIsFocus(true);
onFocus();
focus();
};
@@ -46,7 +46,7 @@ function SearchFunctionFactory(props: ISearchFunctionProps, ref: any) {
const { searchList, searchText, handlerFormulaReplace, reset: resetFormulaSearch } = useFormulaSearch(isFocus, sequenceNodes, editor);
const visible = useMemo(() => !!searchList.length, [searchList]);
const ulRef = useRef<HTMLUListElement>(undefined);
const [active, activeSet] = useState(0);
const [active, setActive] = useState(0);
const isEnableMouseEnterOrOut = useRef(false);
const [position$] = useEditorPosition(editorId, visible, [searchText, searchList]);
const stateRef = useStateRef({ searchList, active });
@@ -63,14 +63,14 @@ function SearchFunctionFactory(props: ISearchFunctionProps, ref: any) {
if (!isEnableMouseEnterOrOut.current) {
return;
}
activeSet(index);
setActive(index);
}
function handleLiMouseLeave() {
if (!isEnableMouseEnterOrOut.current) {
return;
}
activeSet(-1);
setActive(-1);
}
useEffect(() => {
@@ -85,7 +85,7 @@ function SearchFunctionFactory(props: ISearchFunctionProps, ref: any) {
switch (keycode) {
case KeyCode.ARROW_UP: {
activeSet((pre) => {
setActive((pre) => {
const res = Math.max(0, pre - 1);
scrollToVisible(res);
return res;
@@ -94,7 +94,7 @@ function SearchFunctionFactory(props: ISearchFunctionProps, ref: any) {
break;
}
case KeyCode.ARROW_DOWN: {
activeSet((pre) => {
setActive((pre) => {
const res = Math.min(searchList.length - 1, pre + 1);
scrollToVisible(res);
return res;
@@ -33,7 +33,7 @@ export const AccountingPanel: FC<IBusinessComponentProps> = (props) => {
const [decimal, setDecimal] = useState(() => getDecimalFromPattern(defaultPattern || '', 2));
const userHabitCurrency = useContext(UserHabitCurrencyContext);
const [suffix, suffixSet] = useState(() => getCurrencyType(defaultPattern) || userHabitCurrency[0]);
const [suffix, setSuffix] = useState(() => getCurrencyType(defaultPattern) || userHabitCurrency[0]);
const options = useMemo(() => userHabitCurrency.map((key) => ({ label: key, value: key })), []);
const localeService = useDependency(LocaleService);
@@ -42,7 +42,7 @@ export const AccountingPanel: FC<IBusinessComponentProps> = (props) => {
action.current = () => setPatternDecimal(`_("${suffix}"* #,##0${decimal > 0 ? '.0' : ''}_)`, decimal);
const handleSelect = (v: string) => {
suffixSet(v);
setSuffix(v);
onChange(setPatternDecimal(`_("${v}"* #,##0${decimal > 0 ? '.0' : ''}_)`, decimal));
};
@@ -32,9 +32,9 @@ export const CurrencyPanel: FC<IBusinessComponentProps> = (props) => {
const localeService = useDependency(LocaleService);
const t = localeService.t;
const userHabitCurrency = useContext(UserHabitCurrencyContext);
const [suffix, suffixSet] = useState(() => getCurrencyType(props.defaultPattern) || userHabitCurrency[0]);
const [decimal, decimalSet] = useState(() => getDecimalFromPattern(props.defaultPattern || '', 2));
const [pattern, patternSet] = useState(() => {
const [suffix, setSuffix] = useState(() => getCurrencyType(props.defaultPattern) || userHabitCurrency[0]);
const [decimal, setDecimal] = useState(() => getDecimalFromPattern(props.defaultPattern || '', 2));
const [pattern, setPattern] = useState(() => {
const negativeOptions = getCurrencyFormatOptions(suffix);
const pattern =
negativeOptions.find((item) => isPatternEqualWithoutDecimal(item.value, props.defaultPattern))?.value ||
@@ -51,9 +51,9 @@ export const CurrencyPanel: FC<IBusinessComponentProps> = (props) => {
if (value === undefined) {
return;
}
suffixSet(value);
setSuffix(value);
const pattern = getCurrencyFormatOptions(value)[0].value;
patternSet(pattern);
setPattern(pattern);
props.onChange(setPatternDecimal(pattern, decimal));
};
@@ -61,12 +61,12 @@ export const CurrencyPanel: FC<IBusinessComponentProps> = (props) => {
if (value === undefined) {
return;
}
patternSet(value);
setPattern(value);
props.onChange(setPatternDecimal(value, decimal));
};
const onDecimalChange = (v: number | null) => {
decimalSet(v || 0);
setDecimal(v || 0);
props.onChange(setPatternDecimal(pattern, v || 0));
};
@@ -32,7 +32,7 @@ export function CustomFormat(props: IBusinessComponentProps) {
const localStorageService = useDependency(ILocalStorageService);
const localeService = useDependency(LocaleService);
const [pattern, patternSet] = useState(defaultPattern);
const [pattern, setPattern] = useState(defaultPattern);
action.current = () => {
userHabitController.markHabit(key, pattern);
localStorageService.getItem<string[]>(historyPatternKey).then((list = []) => {
@@ -41,7 +41,7 @@ export function CustomFormat(props: IBusinessComponentProps) {
});
return pattern;
};
const [options, optionsSet] = useState<(string | number)[]>([]);
const [options, setOptions] = useState<(string | number)[]>([]);
useEffect(() => {
localStorageService.getItem<string[]>(historyPatternKey).then((historyList) => {
@@ -53,14 +53,14 @@ export function CustomFormat(props: IBusinessComponentProps) {
list.push(...(historyList || []));
userHabitController.addHabit(key, []).finally(() => {
userHabitController.getHabit(key, list).then((list) => {
optionsSet([...new Set(list)]);
setOptions([...new Set(list)]);
});
});
});
}, []);
const handleClick = (p: string) => {
patternSet(p);
setPattern(p);
onChange(p);
};
@@ -75,7 +75,7 @@ export function CustomFormat(props: IBusinessComponentProps) {
placeholder={localeService.t('sheet.numfmt.customFormat')}
onBlur={handleBlur}
value={pattern}
onChange={patternSet}
onChange={setPattern}
className="univer-mt-2 univer-w-full"
/>
<div
@@ -14,7 +14,6 @@
* limitations under the License.
*/
import type { FC } from 'react';
import type { IBusinessComponentProps } from './interface';
import { LocaleService, numfmt } from '@univerjs/core';
import { SelectList } from '@univerjs/design';
@@ -31,13 +30,15 @@ export const isDatePanel = (pattern: string) => {
);
};
export const DatePanel: FC<IBusinessComponentProps> = (props) => {
export function DatePanel(props: IBusinessComponentProps) {
const { onChange, defaultPattern } = props;
const options = useMemo(getDateFormatOptions, []);
const localeService = useDependency(LocaleService);
const t = localeService.t;
const [suffix, suffixSet] = useState(() => {
if (props.defaultPattern) {
const item = options.find((item) => item.value === props.defaultPattern);
const [suffix, setSuffix] = useState(() => {
if (defaultPattern) {
const item = options.find((item) => item.value === defaultPattern);
if (item) {
return item.value;
}
@@ -45,21 +46,22 @@ export const DatePanel: FC<IBusinessComponentProps> = (props) => {
return options[0].value;
});
// FIXME: WTF??
props.action.current = () => suffix;
const onChange = (v: any) => {
const handleChange = (v: any) => {
if (v === undefined) {
return;
}
suffixSet(v);
props.onChange(v);
setSuffix(v);
onChange(v);
};
return (
<div>
<div className="univer-mt-4 univer-text-sm univer-text-gray-400">{t('sheet.numfmt.dateType')}</div>
<div className="univer-mt-4 univer-text-sm univer-text-gray-400">{localeService.t('sheet.numfmt.dateType')}</div>
<div className="univer-mt-2">
<SelectList value={suffix} options={options} onChange={onChange} />
<SelectList value={suffix} options={options} onChange={handleChange} />
</div>
<div
className={`
@@ -67,7 +69,7 @@ export const DatePanel: FC<IBusinessComponentProps> = (props) => {
dark:!univer-text-gray-200
`}
>
{t('sheet.numfmt.dateDes')}
{localeService.t('sheet.numfmt.dateDes')}
</div>
</div>
);
@@ -29,9 +29,9 @@ export const ThousandthPercentilePanel: FC<IBusinessComponentProps> = (props) =>
const localeService = useDependency(LocaleService);
const options = useMemo(getNumberFormatOptions, []);
const [decimal, decimalSet] = useState(() => getDecimalFromPattern(props.defaultPattern || '', 0));
const [decimal, setDecimal] = useState(() => getDecimalFromPattern(props.defaultPattern || '', 0));
const [suffix, suffixSet] = useState(() => {
const [suffix, setSuffix] = useState(() => {
const item = options.find((item) => isPatternEqualWithoutDecimal(item.value, props.defaultPattern || ''));
return item?.value || options[0].value;
});
@@ -41,15 +41,15 @@ export const ThousandthPercentilePanel: FC<IBusinessComponentProps> = (props) =>
const isInputDisable = useMemo(() => !isPatternHasDecimal(suffix), [suffix]);
const handleDecimalChange = (decimal: number | null) => {
decimalSet(decimal || 0);
setDecimal(decimal || 0);
props.onChange(setPatternDecimal(suffix, Number(decimal || 0)));
};
const handleClick = (v: any) => {
if (v === undefined) {
return;
}
decimalSet(getDecimalFromPattern(v, 0));
suffixSet(v);
setDecimal(getDecimalFromPattern(v, 0));
setSuffix(v);
props.onChange(v);
};
@@ -22,12 +22,12 @@ import { UserHabitController } from '../../controllers/user-habit.controller';
const key = 'numfmtCurrency';
export const useCurrencyOptions = (onOptionChange?: (options: string[]) => void) => {
const userHabitController = useDependency(UserHabitController);
const [options, optionsSet] = useState(currencySymbols);
const [options, setOptions] = useState(currencySymbols);
useEffect(() => {
userHabitController.addHabit('numfmtCurrency', []).then(() => {
userHabitController.getHabit(key, [...currencySymbols]).then((list) => {
optionsSet(list as string[]);
setOptions(list as string[]);
onOptionChange && onOptionChange(list as string[]);
});
});
@@ -36,5 +36,6 @@ export const useCurrencyOptions = (onOptionChange?: (options: string[]) => void)
const mark = (v: string) => {
userHabitController.markHabit(key, v);
};
return { userHabitCurrency: options, mark };
};
@@ -197,11 +197,11 @@ export const DefinedNameInput = (props: IDefinedNameInputProps) => {
};
const formulaEditorRef = useRef<any>(null);
const [isFocusFormulaEditor, isFocusFormulaEditorSet] = useState(false);
const [isFocusFormulaEditor, setIsFocusFormulaEditor] = useState(false);
useSidebarClick((e: MouseEvent) => {
const isOutSide = formulaEditorRef.current?.isClickOutSide(e);
isOutSide && isFocusFormulaEditorSet(false);
isOutSide && setIsFocusFormulaEditor(false);
});
return (
@@ -262,7 +262,7 @@ export const DefinedNameInput = (props: IDefinedNameInputProps) => {
onVerify={(res: boolean) => {
setValidFormulaOrRange(res);
}}
onFocus={() => isFocusFormulaEditorSet(true)}
onFocus={() => setIsFocusFormulaEditor(true)}
/>
</div>
</div>
@@ -46,7 +46,7 @@ export const SheetPermissionPanelList = () => {
const permissionService = useDependency(IPermissionService);
const usesManagerService = useDependency(UserManagerService);
const currentUser = usesManagerService.getCurrentUser();
const [currentRuleRanges, currentRuleRangesSet] = useState<IRange[]>([]);
const [currentRuleRanges, setCurrentRuleRanges] = useState<IRange[]>([]);
const sheetPermissionUserManagerService = useDependency(SheetPermissionUserManagerService);
const _sheetRuleRefresh = useObservable(worksheetProtectionModel.ruleRefresh$, '');
@@ -151,7 +151,7 @@ export const SheetPermissionPanelList = () => {
if (res) {
setForceUpdateFlag(!forceUpdateFlag);
if ((rule as IRangeProtectionRule).ranges === currentRuleRanges) {
currentRuleRangesSet([]);
setCurrentRuleRanges([]);
}
}
};
@@ -278,13 +278,13 @@ export const SheetPermissionPanelList = () => {
}
if (unitType === UnitObject.SelectRange) {
const ranges = (rule as IRangeProtectionRule).ranges || [];
ranges !== currentRuleRanges && currentRuleRangesSet(ranges);
ranges !== currentRuleRanges && setCurrentRuleRanges(ranges);
} else if (unitType === UnitObject.Worksheet) {
const ranges = [{ startRow: 0, endRow: activeSheet.getRowCount() - 1, startColumn: 0, endColumn: activeSheet.getColumnCount() - 1 }];
ranges !== currentRuleRanges && currentRuleRangesSet(ranges);
ranges !== currentRuleRanges && setCurrentRuleRanges(ranges);
}
}}
onMouseLeave={() => currentRuleRangesSet([])}
onMouseLeave={() => setCurrentRuleRanges([])}
>
<div className="univer-flex univer-h-5 univer-justify-between univer-leading-5">
<Tooltip title={ruleName}>
@@ -20,14 +20,13 @@ import { UniverInstanceType } from '@univerjs/core';
import { getMenuHiddenObservable, MenuItemType } from '@univerjs/ui';
import { InsertSlideFloatImageCommand } from '../commands/operations/insert-image.operation';
export const IMAGE_UPLOAD_ICON = 'addition-and-subtraction-single';
export const SLIDES_IMAGE_MENU_ID = 'slide.menu.image';
export function SlideImageMenuFactory(accessor: IAccessor): IMenuItem {
return {
id: SLIDES_IMAGE_MENU_ID,
type: MenuItemType.SUBITEMS,
icon: IMAGE_UPLOAD_ICON,
icon: 'AddImageSingle',
tooltip: 'slide.image.insert.title',
hidden$: getMenuHiddenObservable(accessor, UniverInstanceType.UNIVER_SLIDE),
};
@@ -15,7 +15,7 @@
*/
import { Disposable, ICommandService, Inject, Injector } from '@univerjs/core';
import { AddImageSingle, GraphSingle, TextSingle } from '@univerjs/icons';
import { GraphSingle, TextSingle } from '@univerjs/icons';
import { BuiltInUIPart, ComponentManager, connectInjector, IMenuManagerService, IShortcutService, IUIPartsService } from '@univerjs/ui';
import { ActivateSlidePageOperation } from '../commands/operations/activate.operation';
import { AppendSlideOperation } from '../commands/operations/append-slide.operation';
@@ -31,7 +31,6 @@ import { SlideImagePopupMenu } from '../components/image-popup-menu/ImagePopupMe
import Sidebar, { COMPONENT_SLIDE_SIDEBAR } from '../components/sidebar/Sidebar';
import { SlideSideBar } from '../components/slide-bar/SlideBar';
import { SlideEditorContainer } from '../views/editor-container';
import { IMAGE_UPLOAD_ICON } from './image.menu';
import { menuSchema } from './menu.schema';
import { GRAPH_SINGLE_ICON } from './shape.menu';
import { EditorDeleteLeftShortcut, generateArrowSelectionShortCutItem } from './shortcuts/editor.shortcuts';
@@ -64,7 +63,6 @@ export class SlidesUIController extends Disposable {
private _initCustomComponents(): void {
const componentManager = this._componentManager;
this.disposeWithMe(componentManager.register(IMAGE_UPLOAD_ICON, AddImageSingle));
this.disposeWithMe(componentManager.register(TEXT_ICON_ID, TextSingle));
this.disposeWithMe(componentManager.register(GRAPH_SINGLE_ICON, GraphSingle));
this.disposeWithMe(componentManager.register(COMPONENT_SLIDE_IMAGE_POPUP_MENU, SlideImagePopupMenu));
@@ -21,6 +21,7 @@ import { toDisposable } from '@univerjs/core';
import {
AddDigitsSingle,
AddImageSingle,
AdjustHeight,
AdjustWidth,
AlignBottomSingle,
@@ -154,6 +155,7 @@ export class ComponentManager {
// eslint-disable-next-line max-lines-per-function
constructor() {
const iconList: Record<string, React.ForwardRefExoticComponent<any>> = {
AddImageSingle,
AlignBottomSingle,
AlignTopSingle,
AllBorderSingle,
+160 -263
View File
@@ -16,7 +16,7 @@ importers:
devDependencies:
'@antfu/eslint-config':
specifier: 4.13.2
version: 4.13.2(@eslint-react/eslint-plugin@1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(eslint-plugin-format@1.0.1(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.20(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.21)(happy-dom@17.4.7)(jiti@2.4.2)(jsdom@26.1.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))
version: 4.13.2(@eslint-react/eslint-plugin@1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(eslint-plugin-format@1.0.1(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.20(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.21)(happy-dom@17.4.7)(jiti@2.4.2)(jsdom@26.1.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))
'@commitlint/cli':
specifier: ^19.8.1
version: 19.8.1(@types/node@22.15.21)(typescript@5.8.3)
@@ -24,8 +24,8 @@ importers:
specifier: ^19.8.1
version: 19.8.1
'@eslint-react/eslint-plugin':
specifier: ^1.49.0
version: 1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
specifier: ^1.50.0
version: 1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
'@playwright/test':
specifier: ^1.52.0
version: 1.52.0
@@ -1121,9 +1121,6 @@ importers:
nanoid:
specifier: 5.1.5
version: 5.1.5
numeral:
specifier: ^2.0.6
version: 2.0.6
numfmt:
specifier: ^2.5.2
version: 2.5.2
@@ -1140,9 +1137,6 @@ importers:
'@types/lodash-es':
specifier: ^4.17.12
version: 4.17.12
'@types/numeral':
specifier: ^2.0.5
version: 2.0.5
'@types/rbush':
specifier: ^4.0.0
version: 4.0.0
@@ -1369,9 +1363,6 @@ importers:
'@univerjs/engine-render':
specifier: workspace:*
version: link:../engine-render
'@univerjs/icons':
specifier: ^0.3.24
version: 0.3.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@univerjs/ui':
specifier: workspace:*
version: link:../ui
@@ -2294,9 +2285,6 @@ importers:
'@univerjs/engine-render':
specifier: workspace:*
version: link:../engine-render
'@univerjs/icons':
specifier: ^0.3.24
version: 0.3.24(react-dom@19.1.0(react@19.1.0))(react@19.1.0)
'@univerjs/sheets':
specifier: workspace:*
version: link:../sheets
@@ -4271,20 +4259,20 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint-react/ast@1.49.0':
resolution: {integrity: sha512-kKYKd3hVjztMMLNAX41GRbi+luSIVYSYReXtifiPKjYNu/CkZ14x5o9CCN0iAeuSinpSmaUq4qXDD6nihMp1Wg==}
'@eslint-react/ast@1.50.0':
resolution: {integrity: sha512-WGAZvyZweQzyHBZ9DjHD4WPTwM1POuyEaUyFyAV0SF82zIM/UE6CbWk4IkDYs3km/48SGqPYlzRQO1LskBhl/Q==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint-react/core@1.49.0':
resolution: {integrity: sha512-SS2V3reZmiTSgJjyNhIotZDcpcXeQBr/HWAup/Q3a5rtJDydKO2grvdSpP92NbaGKaIsakRMW4XupUmGVZhnYA==}
'@eslint-react/core@1.50.0':
resolution: {integrity: sha512-2hwkvmW5xZrqe8Em+gCd0ipzNOuViwj2/5tiFSK6xyvC0WPPszlkMTvjUxtLeCnjcaIUqGSurQZ3jIP0bJeYAA==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint-react/eff@1.49.0':
resolution: {integrity: sha512-u4TNqG/smBx5HefDJDUkpdDJ2Wg0rXJFFi61UHPREp0IDPKQOqCMQ1fH1RbZp2w95TRiar94/mXwweeyqAVekQ==}
'@eslint-react/eff@1.50.0':
resolution: {integrity: sha512-SGLWvBeJCJBXDAJXeTEyGfKjK6KcfHQtYfCoaU0TqFyOdpwArf/AJtOedtfle2OuLHx7xStlx1SESk0532mU+w==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint-react/eslint-plugin@1.49.0':
resolution: {integrity: sha512-KMMSRROH4OQla+pOQjXC3IYTgOWBIf46WaZDwX0hGgGP8qzXAjJcWiJdButhIQ8PsgKoFKnr13uStIput8wwIQ==}
'@eslint-react/eslint-plugin@1.50.0':
resolution: {integrity: sha512-EkyWjzo1k86IHDfBwhtnE9LhpgedoqkiDj+YT7uzIJm/pJsZ5JF3njhRbU7nvtDuZ4x89pml1O4rREZIpDXZ5g==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -4293,16 +4281,16 @@ packages:
typescript:
optional: true
'@eslint-react/kit@1.49.0':
resolution: {integrity: sha512-bLyVQaFaXG34ShcStuMRX64GUOkB7qUvhXsl5+Z56LE+PAM60pTWIxtPJ4PdogO9iEOpNU7v3FDnuCLVKTAzKg==}
'@eslint-react/kit@1.50.0':
resolution: {integrity: sha512-DKj8qbWvLjK1o8PKjPkaWr3IO4meahQ3zZ82TQQ5JTMgUqWZnABAvTPKxv7Fyb8gGUhYLkhZa2xbUA5X8hXmxQ==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint-react/shared@1.49.0':
resolution: {integrity: sha512-e+qB/bcQTBnRnYXBEAJkKBxHcsiIM+2KGHBJAmc9OFwaEtOOGl+1ShhVox6r9YIIGI7ak+ylnLYabkQp15K/tw==}
'@eslint-react/shared@1.50.0':
resolution: {integrity: sha512-Lt26m2W/iYaw2Y6/pTA/uA5QB7eZzWWilSJ/xLW73xu92nxUaWzB4fVuUTIpsDDeN6q5ttMvVRf8LbIkIFWUFg==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint-react/var@1.49.0':
resolution: {integrity: sha512-CHx6PZAptM3ghSyr0yCxSbR3Fl+EvCk9ctIqj8lQYbXnSkHyIfwclFJb884pc+pss3glmCsOrWNQtR3dxPVVrQ==}
'@eslint-react/var@1.50.0':
resolution: {integrity: sha512-C/hTee8/JQIQ+j5Aj7P5mvUFltfYPwZfXuqSUnZU6qk1n9aX3TIHh9NfGb8UsSDeRWgV0ZwCybF9ronp+krilg==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
'@eslint/compat@1.2.9':
@@ -5640,9 +5628,6 @@ packages:
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
'@types/numeral@2.0.5':
resolution: {integrity: sha512-kH8I7OSSwQu9DS9JYdFWbuvhVzvFRoCPCkGxNwoGgaPeDfEPJlcxNvEOypZhQ3XXHsGbfIuYcxcJxKUfJHnRfw==}
'@types/opentype.js@1.3.8':
resolution: {integrity: sha512-H6qeTp03jrknklSn4bpT1/9+1xCAEIU2CnjcWPkicJy8A1SKuthanbvoHYMiv79/2W3Xn1XE4gfSJFzt2U3JSw==}
@@ -5711,21 +5696,10 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/scope-manager@8.32.0':
resolution: {integrity: sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/scope-manager@8.32.1':
resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/type-utils@8.32.0':
resolution: {integrity: sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/type-utils@8.32.1':
resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5741,25 +5715,12 @@ packages:
resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/typescript-estree@8.32.0':
resolution: {integrity: sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/typescript-estree@8.32.1':
resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/utils@8.32.0':
resolution: {integrity: sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/utils@8.32.1':
resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -5767,10 +5728,6 @@ packages:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.9.0'
'@typescript-eslint/visitor-keys@8.32.0':
resolution: {integrity: sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@typescript-eslint/visitor-keys@8.32.1':
resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -6077,12 +6034,6 @@ packages:
'@zeit/schemas@2.36.0':
resolution: {integrity: sha512-7kjMwcChYEzMKjeex9ZFXkt1AyNov9R5HZtjBKVsmVpw7pa7ZtlCGvCBC2vnnXctaYN+aRI61HjIqeetZW5ROg==}
'@zod/core@0.11.6':
resolution: {integrity: sha512-03Bv82fFSfjDAvMfdHHdGSS6SOJs0iCcJlWJv1kJHRtoTT02hZpyip/2Lk6oo4l4FtjuwTrsEQTwg/LD8I7dJA==}
'@zod/mini@4.0.0-beta.20250505T195954':
resolution: {integrity: sha512-ioybPtU4w4TqwHvJv0gkAiYNaBkZ/BaGHBpK7viCIRSE8BiiZucVZ8vS0YE04Qy1R120nAnFy1d+tD9ByMO0yw==}
JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -7548,8 +7499,8 @@ packages:
peerDependencies:
eslint: ^9.0.0
eslint-plugin-react-debug@1.49.0:
resolution: {integrity: sha512-d7/5OnbBFPVQG9jVjM1Bs5p24M+xCri0Dv1ExeWxJZO1Gl9xKaqDO4tv6+cL9Kg2+yy6QaD/xD6j6IHjIv2Bmw==}
eslint-plugin-react-debug@1.50.0:
resolution: {integrity: sha512-lCHKl1+ydvNNnJ+Cm0Sezog9dYh8Se9fFTVA8IUAjThfElC7FyqtF7YiehDDPnY+4ncX0Lytk8bPfRfGtoIDNA==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -7558,8 +7509,8 @@ packages:
typescript:
optional: true
eslint-plugin-react-dom@1.49.0:
resolution: {integrity: sha512-gz+rXbU9evjneshMYclUXHCzFSdt4QHRaLZYJXrdzTBTnROM1lrjvmT72Pt8KYQpiRNIcz1pemyJQmdJ2OQ+Ig==}
eslint-plugin-react-dom@1.50.0:
resolution: {integrity: sha512-ksMoCuD2vUTSy6YN2zhgR7hSbbRr0TUPNoxe44A/3Dlz6Ww500OwamBb2c13nqZi6Mk0fE4T2gbMJEF5aZzFkw==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -7568,8 +7519,8 @@ packages:
typescript:
optional: true
eslint-plugin-react-hooks-extra@1.49.0:
resolution: {integrity: sha512-euvLPhRaYxZIuj1muOB+SKrepcuM9NiPABAyMmGdwSOPdoZX/SphXxzzJLkAWCN1m3QwWXpSFH/J9Z+fQ5Av3w==}
eslint-plugin-react-hooks-extra@1.50.0:
resolution: {integrity: sha512-owJUWaEeDZvceQkmof7CKFBBA81EjcUOVADcb5aZWwneM2Ui3BUlTHulmxcoSCJDH8b2u7VOkUjiQ/nAZcp55Q==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -7584,8 +7535,8 @@ packages:
peerDependencies:
eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0
eslint-plugin-react-naming-convention@1.49.0:
resolution: {integrity: sha512-TfaLDPdNsdlQy+plRXO6yzae38ZpT+pHQijSxKLYSJvegfe5VYJTltsKPkwa8+WSUnZAS9U4NXwYdi06uP5aiw==}
eslint-plugin-react-naming-convention@1.50.0:
resolution: {integrity: sha512-icV9kENTe15osNJOr09LlKZ2Xj0q43Xm77ofJCzYjWa8JpfI8HI2DNdG3DE4fNkftMIgCxMJIsSs7ch14f1STA==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -7599,8 +7550,8 @@ packages:
peerDependencies:
eslint: '>=8.40'
eslint-plugin-react-web-api@1.49.0:
resolution: {integrity: sha512-Tba3qAKXjwM58jE9gocwgUqcuy+3gsh75HtbBjf2iG9vHoRiLuve9r1zGuI1SSlF+J8NdIfZf9b+1rBDLn+Spw==}
eslint-plugin-react-web-api@1.50.0:
resolution: {integrity: sha512-2I5rmaDdhgtLcOFZ81/0MLJlTdvVQTVL8b+jfUWR4tLfk6BQKHZlx5pBcunYvuGjkZRYZ2viUoue/CKm+92zaA==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -7609,8 +7560,8 @@ packages:
typescript:
optional: true
eslint-plugin-react-x@1.49.0:
resolution: {integrity: sha512-yRh5nN8Z1Xoq26dt40Jnbqg8Z3N/svD4v7bT7sAWGslhCpxAGJEnOpj6V0L0xmw4ztz7ZonHt/4ks7mEOpagmQ==}
eslint-plugin-react-x@1.50.0:
resolution: {integrity: sha512-Izej25IW8wk2wxB0J3orZLf8x+9vyvNICilDu+MOU7LYPPZQifXTeEweOUUfSwXB0byUSElilU+zFG2EKcCJFg==}
engines: {bun: '>=1.0.15', node: '>=18.18.0'}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -9162,9 +9113,6 @@ packages:
nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
numeral@2.0.6:
resolution: {integrity: sha512-qaKRmtYPZ5qdw4jWJD6bxEf1FJEqllJrwxCLIm0sQU/A7v2/czigzOb+C2uSiFsa9lBUzeH7M1oK+Q+OLxL3kA==}
numfmt@2.5.2:
resolution: {integrity: sha512-VXrB2bpU9Xa0oCHq8IsqE2CcUx5OLupLC3oryFT4DB9e/xe+OnUzBndhXfNHUzxFE4DYI3Sx4OtzS1Sdaf7tEw==}
@@ -10735,8 +10683,8 @@ packages:
ts-interface-checker@0.1.13:
resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==}
ts-pattern@5.7.0:
resolution: {integrity: sha512-0/FvIG4g3kNkYgbNwBBW5pZBkfpeYQnH+2AA3xmjkCAit/DSDPKmgwC3fKof4oYUq6gupClVOJlFl+939VRBMg==}
ts-pattern@5.7.1:
resolution: {integrity: sha512-EGs8PguQqAAUIcQfK4E9xdXxB6s2GK4sJfT/vcc9V1ELIvC4LH/zXu2t/5fajtv6oiRCxdv7BgtVK3vWgROxag==}
tsconfig-paths-webpack-plugin@4.2.0:
resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==}
@@ -11295,6 +11243,9 @@ packages:
resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
engines: {node: '>=18'}
zod@3.25.28:
resolution: {integrity: sha512-/nt/67WYKnr5by3YS7LroZJbtcCBurDKKPBPWWzaxvVCGuG/NOsiKkrjoOhI8mJ+SQUXEbUzeB3S+6XDUEEj7Q==}
zustand@4.5.6:
resolution: {integrity: sha512-ibr/n1hBzLLj5Y+yUcU7dYw8p6WnIVzdJbnX+1YpaScvZVF2ziugqHs+LAmHw4lWO9c/zRj+K1ncgWDQuthEdQ==}
engines: {node: '>=12.7.0'}
@@ -11324,7 +11275,7 @@ snapshots:
'@jridgewell/gen-mapping': 0.3.8
'@jridgewell/trace-mapping': 0.3.25
'@antfu/eslint-config@4.13.2(@eslint-react/eslint-plugin@1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(eslint-plugin-format@1.0.1(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.20(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.21)(happy-dom@17.4.7)(jiti@2.4.2)(jsdom@26.1.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))':
'@antfu/eslint-config@4.13.2(@eslint-react/eslint-plugin@1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3))(@vue/compiler-sfc@3.5.14)(eslint-plugin-format@1.0.1(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-hooks@5.2.0(eslint@9.27.0(jiti@2.4.2)))(eslint-plugin-react-refresh@0.4.20(eslint@9.27.0(jiti@2.4.2)))(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)(vitest@3.1.4(@types/debug@4.1.12)(@types/node@22.15.21)(happy-dom@17.4.7)(jiti@2.4.2)(jsdom@26.1.0)(sass@1.87.0)(terser@5.39.0)(tsx@4.19.4)(yaml@2.8.0))':
dependencies:
'@antfu/install-pkg': 1.1.0
'@clack/prompts': 0.10.1
@@ -11364,7 +11315,7 @@ snapshots:
vue-eslint-parser: 10.1.3(eslint@9.27.0(jiti@2.4.2))
yaml-eslint-parser: 1.3.0
optionalDependencies:
'@eslint-react/eslint-plugin': 1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
'@eslint-react/eslint-plugin': 1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
eslint-plugin-format: 1.0.1(eslint@9.27.0(jiti@2.4.2))
eslint-plugin-react-hooks: 5.2.0(eslint@9.27.0(jiti@2.4.2))
eslint-plugin-react-refresh: 0.4.20(eslint@9.27.0(jiti@2.4.2))
@@ -12024,93 +11975,93 @@ snapshots:
'@eslint-community/regexpp@4.12.1': {}
'@eslint-react/ast@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
'@eslint-react/ast@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-react/eff': 1.49.0
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
transitivePeerDependencies:
- eslint
- supports-color
- typescript
'@eslint-react/core@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
'@eslint-react/core@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
birecord: 0.1.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
transitivePeerDependencies:
- eslint
- supports-color
- typescript
'@eslint-react/eff@1.49.0': {}
'@eslint-react/eff@1.50.0': {}
'@eslint-react/eslint-plugin@1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)':
'@eslint-react/eslint-plugin@1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)':
dependencies:
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
eslint-plugin-react-debug: 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-dom: 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-hooks-extra: 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-naming-convention: 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-web-api: 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-x: 1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
eslint-plugin-react-debug: 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-dom: 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-hooks-extra: 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-naming-convention: 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-web-api: 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint-plugin-react-x: 1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3)
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
- ts-api-utils
'@eslint-react/kit@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
'@eslint-react/kit@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-react/eff': 1.49.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@zod/mini': 4.0.0-beta.20250505T195954
ts-pattern: 5.7.0
'@eslint-react/eff': 1.50.0
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
ts-pattern: 5.7.1
zod: 3.25.28
transitivePeerDependencies:
- eslint
- supports-color
- typescript
'@eslint-react/shared@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
'@eslint-react/shared@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@zod/mini': 4.0.0-beta.20250505T195954
ts-pattern: 5.7.0
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
ts-pattern: 5.7.1
zod: 3.25.28
transitivePeerDependencies:
- eslint
- supports-color
- typescript
'@eslint-react/var@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
'@eslint-react/var@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
transitivePeerDependencies:
- eslint
- supports-color
@@ -13543,8 +13494,6 @@ snapshots:
'@types/normalize-package-data@2.4.4': {}
'@types/numeral@2.0.5': {}
'@types/opentype.js@1.3.8': {}
'@types/parse-json@4.0.2': {}
@@ -13618,27 +13567,11 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@8.32.0':
dependencies:
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/visitor-keys': 8.32.0
'@typescript-eslint/scope-manager@8.32.1':
dependencies:
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/visitor-keys': 8.32.1
'@typescript-eslint/type-utils@8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
debug: 4.4.0
eslint: 9.27.0(jiti@2.4.2)
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/type-utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3)
@@ -13654,20 +13587,6 @@ snapshots:
'@typescript-eslint/types@8.32.1': {}
'@typescript-eslint/typescript-estree@8.32.0(typescript@5.8.3)':
dependencies:
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/visitor-keys': 8.32.0
debug: 4.4.0
fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
semver: 7.7.1
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)':
dependencies:
'@typescript-eslint/types': 8.32.1
@@ -13682,17 +13601,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/typescript-estree': 8.32.0(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)':
dependencies:
'@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0(jiti@2.4.2))
@@ -13704,11 +13612,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/visitor-keys@8.32.0':
dependencies:
'@typescript-eslint/types': 8.32.0
eslint-visitor-keys: 4.2.0
'@typescript-eslint/visitor-keys@8.32.1':
dependencies:
'@typescript-eslint/types': 8.32.1
@@ -14098,12 +14001,6 @@ snapshots:
'@zeit/schemas@2.36.0': {}
'@zod/core@0.11.6': {}
'@zod/mini@4.0.0-beta.20250505T195954':
dependencies:
'@zod/core': 0.11.6
JSONStream@1.3.5:
dependencies:
jsonparse: 1.3.1
@@ -15629,61 +15526,61 @@ snapshots:
tinyglobby: 0.2.13
yaml-eslint-parser: 1.3.0
eslint-plugin-react-debug@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-plugin-react-debug@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
eslint-plugin-react-dom@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-plugin-react-dom@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
compare-versions: 6.1.1
eslint: 9.27.0(jiti@2.4.2)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
eslint-plugin-react-hooks-extra@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-plugin-react-hooks-extra@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
@@ -15693,21 +15590,21 @@ snapshots:
dependencies:
eslint: 9.27.0(jiti@2.4.2)
eslint-plugin-react-naming-convention@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-plugin-react-naming-convention@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
@@ -15717,42 +15614,42 @@ snapshots:
dependencies:
eslint: 9.27.0(jiti@2.4.2)
eslint-plugin-react-web-api@1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
eslint-plugin-react-web-api@1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
typescript: 5.8.3
transitivePeerDependencies:
- supports-color
eslint-plugin-react-x@1.49.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3):
eslint-plugin-react-x@1.50.0(eslint@9.27.0(jiti@2.4.2))(ts-api-utils@2.1.0(typescript@5.8.3))(typescript@5.8.3):
dependencies:
'@eslint-react/ast': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.49.0
'@eslint-react/kit': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.49.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.0
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.0
'@typescript-eslint/utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/ast': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/core': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/eff': 1.50.0
'@eslint-react/kit': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/shared': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@eslint-react/var': 1.50.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/scope-manager': 8.32.1
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/types': 8.32.1
'@typescript-eslint/utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
compare-versions: 6.1.1
eslint: 9.27.0(jiti@2.4.2)
is-immutable-type: 5.0.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
string-ts: 2.2.1
ts-pattern: 5.7.0
ts-pattern: 5.7.1
optionalDependencies:
ts-api-utils: 2.1.0(typescript@5.8.3)
typescript: 5.8.3
@@ -16586,7 +16483,7 @@ snapshots:
is-immutable-type@5.0.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3):
dependencies:
'@typescript-eslint/type-utils': 8.32.0(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
'@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0(jiti@2.4.2))(typescript@5.8.3)
eslint: 9.27.0(jiti@2.4.2)
ts-api-utils: 2.1.0(typescript@5.8.3)
ts-declaration-location: 1.0.7(typescript@5.8.3)
@@ -17566,8 +17463,6 @@ snapshots:
dependencies:
boolbase: 1.0.0
numeral@2.0.6: {}
numfmt@2.5.2: {}
nwsapi@2.2.20: {}
@@ -19376,7 +19271,7 @@ snapshots:
ts-interface-checker@0.1.13: {}
ts-pattern@5.7.0: {}
ts-pattern@5.7.1: {}
tsconfig-paths-webpack-plugin@4.2.0:
dependencies:
@@ -20013,6 +19908,8 @@ snapshots:
yoctocolors-cjs@2.1.2: {}
zod@3.25.28: {}
zustand@4.5.6(@types/react@19.1.5)(react@19.1.0):
dependencies:
use-sync-external-store: 1.5.0(react@19.1.0)