From d891f1614beee3cecd46da54852e40159bf3a97a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=99=BD=E7=86=B1?= Date: Mon, 26 May 2025 14:36:26 +0800 Subject: [PATCH] feat: update SheetTableThemePanel for improved theme handling and UI responsiveness (#5267) --- common/shared/vite/cleanup-pkg-plugin.ts | 2 +- examples/src/sheets-multi/main.tsx | 2 +- .../debugger/src/components/Image.tsx | 2 +- .../debugger/src/components/RangeLoading.tsx | 22 +- .../src/views/uni-toolbar/UniFloatToolbar.tsx | 2 +- packages/action-recorder/src/locale/en-US.ts | 2 + packages/action-recorder/src/locale/fa-IR.ts | 2 + packages/action-recorder/src/locale/fr-FR.ts | 2 + packages/action-recorder/src/locale/ru-RU.ts | 2 + packages/action-recorder/src/locale/vi-VN.ts | 2 + packages/action-recorder/src/locale/zh-CN.ts | 2 + packages/action-recorder/src/locale/zh-TW.ts | 8 +- .../components/input-number/InputNumber.tsx | 5 +- .../design/src/components/input/Input.tsx | 7 +- .../design/src/components/message/Message.tsx | 10 +- .../src/components/select/MultipleSelect.tsx | 9 +- .../design/src/components/select/Select.tsx | 13 +- .../src/views/printing-float-dom/index.tsx | 2 +- .../src/views/paragraph-setting/Setting.tsx | 3 +- .../src/components/preview/index.tsx | 17 +- .../components/wrapper-error/WrapperError.tsx | 15 +- .../src/views/components/detail/index.tsx | 2 +- .../formula-input/ListFormulaInput.tsx | 25 +-- .../views/components/SheetsFilterPanel.tsx | 4 +- .../src/views/range-selector/index.tsx | 8 +- .../src/views/CellLinkEdit/index.tsx | 3 +- .../sheets-sort-ui/src/views/EmbedSortBtn.tsx | 12 +- .../src/views/components/SheetTableAnchor.tsx | 37 ++-- .../views/components/SheetTableThemePanel.tsx | 58 ++++-- .../menu-item-input/MenuItemInput.tsx | 1 + .../views/defined-name/DefinedNameInput.tsx | 15 +- .../views/dropdown/list-dropdown/index.tsx | 8 +- .../src/views/formula-bar/FormulaBar.tsx | 49 ++--- .../src/views/sheet-bar/SheetBar.tsx | 22 +- .../sheet-bar-button/SheetBarButton.tsx | 11 +- .../src/views/thread-comment-editor/index.tsx | 3 +- .../src/views/thread-comment-tree/index.tsx | 197 +++++++++--------- packages/ui/src/common/component-manager.ts | 8 +- .../components/custom-label/CustomLabel.tsx | 24 ++- .../ui/src/components/heading-item/index.tsx | 6 +- .../ui/src/views/components/dom/FloatDom.tsx | 4 +- .../ui/src/views/components/dom/print.tsx | 11 +- .../src/views/components/popup/RectPopup.tsx | 10 +- .../ui/src/views/components/ribbon/Ribbon.tsx | 13 +- .../ribbon/TooltipButtonWrapper.tsx | 9 +- 45 files changed, 358 insertions(+), 313 deletions(-) diff --git a/common/shared/vite/cleanup-pkg-plugin.ts b/common/shared/vite/cleanup-pkg-plugin.ts index 14d57c0079..7f8ee30ff4 100644 --- a/common/shared/vite/cleanup-pkg-plugin.ts +++ b/common/shared/vite/cleanup-pkg-plugin.ts @@ -19,7 +19,6 @@ import path from 'node:path'; import process from 'node:process'; import fs from 'fs-extra'; import sortKeys from 'sort-keys'; - import localPkg from '../package.json'; import { peerDepsMap } from './data'; @@ -78,6 +77,7 @@ export function cleanupPkgPlugin(): Plugin { generateBundle() { const hasLocales = fs.existsSync(path.resolve(process.cwd(), 'src/locale')); const hasFacade = fs.existsSync(path.resolve(process.cwd(), 'src/facade/index.ts')); + pkg.version = localPkg.version; pkg.publishConfig = { access: 'public', main: './lib/es/index.js', diff --git a/examples/src/sheets-multi/main.tsx b/examples/src/sheets-multi/main.tsx index bd505f5190..4a461707d4 100644 --- a/examples/src/sheets-multi/main.tsx +++ b/examples/src/sheets-multi/main.tsx @@ -93,7 +93,7 @@ export function App() { title={TITLE_MAP[id]} toolbarControls={
} > -
+
{TITLE_MAP[id]}
diff --git a/packages-experimental/debugger/src/components/Image.tsx b/packages-experimental/debugger/src/components/Image.tsx index ab095df475..db11ca13f6 100644 --- a/packages-experimental/debugger/src/components/Image.tsx +++ b/packages-experimental/debugger/src/components/Image.tsx @@ -17,5 +17,5 @@ const image = 'data:image/jpeg;base64,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'; export const ImageDemo = () => { - return ; + return ; }; diff --git a/packages-experimental/debugger/src/components/RangeLoading.tsx b/packages-experimental/debugger/src/components/RangeLoading.tsx index 7df908e96d..62d4b2b4b8 100644 --- a/packages-experimental/debugger/src/components/RangeLoading.tsx +++ b/packages-experimental/debugger/src/components/RangeLoading.tsx @@ -14,21 +14,17 @@ * limitations under the License. */ -export const RangeLoading = () => { - const divStyle = { - width: '100%', - height: '100%', - backgroundColor: '#fff', - border: '1px solid #ccc', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', - textAlign: 'center' as const, - transformOrigin: 'top left', - }; +import { borderClassName, clsx } from '@univerjs/design'; +export const RangeLoading = () => { return ( -
+
Loading...
); diff --git a/packages-experimental/uniui/src/views/uni-toolbar/UniFloatToolbar.tsx b/packages-experimental/uniui/src/views/uni-toolbar/UniFloatToolbar.tsx index 16a1ad79f5..1937b57415 100644 --- a/packages-experimental/uniui/src/views/uni-toolbar/UniFloatToolbar.tsx +++ b/packages-experimental/uniui/src/views/uni-toolbar/UniFloatToolbar.tsx @@ -85,12 +85,12 @@ export const UniFloatingToolbar = React.forwardRef
, 'onChange' | 'value' | 'defaultValue'> { + extends Omit, 'onChange' | 'value' | 'defaultValue' | 'size'> { value?: number | null; defaultValue?: number; + size?: 'mini' | 'small'; min?: number; max?: number; step?: number; @@ -44,6 +45,7 @@ export const InputNumber = forwardRef( { value, defaultValue, + size = 'small', min = Number.MIN_SAFE_INTEGER, max = Number.MAX_SAFE_INTEGER, step = 1, @@ -315,6 +317,7 @@ export const InputNumber = forwardRef( ( type="button" onClick={handleClear} className={` - univer-flex univer-size-4 univer-cursor-pointer univer-rounded-full univer-border-none - univer-bg-transparent univer-p-1 univer-text-gray-400 univer-transition-colors - univer-duration-200 + univer-flex univer-size-4 univer-cursor-pointer univer-items-center + univer-rounded-full univer-border-none univer-bg-transparent univer-p-1 + univer-text-gray-400 univer-transition-colors univer-duration-200 focus:univer-outline-none hover:univer-text-gray-500 `} diff --git a/packages/design/src/components/message/Message.tsx b/packages/design/src/components/message/Message.tsx index b01e7ff041..20bf0b2fcf 100644 --- a/packages/design/src/components/message/Message.tsx +++ b/packages/design/src/components/message/Message.tsx @@ -110,6 +110,7 @@ const createMessage = (() => { }; useEffect(() => { + const timers: number[] = []; addMessage = (message) => { const id = String(messageCount++); setState((prev) => ({ @@ -117,13 +118,20 @@ const createMessage = (() => { })); if (message.duration !== Infinity) { - setTimeout(() => { + const timer = window.setTimeout(() => { setState((prev) => ({ messages: prev.messages.filter((t) => t.id !== id), })); }, message.duration || 3000); + timers.push(timer); } }; + + return () => { + timers.forEach((timer) => { + window.clearTimeout(timer); + }); + }; }, []); return createPortal( diff --git a/packages/design/src/components/select/MultipleSelect.tsx b/packages/design/src/components/select/MultipleSelect.tsx index f4981ff9ef..135793c63c 100644 --- a/packages/design/src/components/select/MultipleSelect.tsx +++ b/packages/design/src/components/select/MultipleSelect.tsx @@ -18,10 +18,10 @@ import type { ReactNode } from 'react'; import type { IDropdownMenuProps } from '../dropdown-menu/DropdownMenu'; import { MoreDownSingle } from '@univerjs/icons'; import { useMemo, useState } from 'react'; -import { borderClassName } from '../../helper/class-utilities'; import { clsx } from '../../helper/clsx'; import { Badge } from '../badge/Badge'; import { DropdownMenu } from '../dropdown-menu/DropdownMenu'; +import { selectClassName } from './Select'; interface IOption { label?: string | ReactNode; @@ -125,12 +125,7 @@ export function MultipleSelect(props: IMultipleSelectProps) { >
void; } +export const selectClassName = clsx(` + univer-box-border univer-inline-flex univer-h-8 univer-min-w-36 univer-items-center univer-justify-between + univer-gap-2 univer-rounded-lg univer-bg-white univer-px-2.5 univer-transition-colors univer-duration-200 + dark:!univer-bg-gray-700 dark:!univer-text-white +`, borderClassName); + export function Select(props: ISelectProps) { const { className, @@ -149,12 +155,7 @@ export function Select(props: ISelectProps) { >
{ .filter(([_, floatDom]) => !(floatDom.position.endX < 0 || floatDom.position.endY < 0 || floatDom.position.startX > width || floatDom.position.startY > height)), [floatDomInfos, scene, offset, width, height]); return ( -
+
{floatDomParams.map(([id, floatDom]) => ( ))} diff --git a/packages/docs-ui/src/views/paragraph-setting/Setting.tsx b/packages/docs-ui/src/views/paragraph-setting/Setting.tsx index d0b38c3fbf..e727dc19cb 100644 --- a/packages/docs-ui/src/views/paragraph-setting/Setting.tsx +++ b/packages/docs-ui/src/views/paragraph-setting/Setting.tsx @@ -176,8 +176,7 @@ export function ParagraphSetting() {
{localeService.t('doc.paragraphSetting.lineSpace')}