diff --git a/libs/components/editor-core/src/block-pendant/pendant-modify-panel/IconInput.tsx b/libs/components/editor-core/src/block-pendant/pendant-modify-panel/IconInput.tsx index 98bd66e7a3..8873056498 100644 --- a/libs/components/editor-core/src/block-pendant/pendant-modify-panel/IconInput.tsx +++ b/libs/components/editor-core/src/block-pendant/pendant-modify-panel/IconInput.tsx @@ -1,4 +1,4 @@ -import React, { type CSSProperties, useState } from 'react'; +import React, { forwardRef, type CSSProperties, useState } from 'react'; import { Input, styled, InputProps } from '@toeverything/components/ui'; import { StyledHighLightWrapper } from '../StyledComponent'; import { IconNames } from '../types'; @@ -29,38 +29,39 @@ export const PendantIcon = ({ ); }; -export const IconInput = ({ - iconName, - iconStyle, - color, - background, - ...inputProps -}: IconInputProps) => { - return ( - <> - - - - ); -}; +export const IconInput = forwardRef( + ({ iconName, iconStyle, color, background, ...inputProps }, ref) => { + return ( + <> + + + + ); + } +); type HighLightIconInputProps = { startElement?: React.ReactNode; endElement?: React.ReactNode; + tabIndex?: number; } & IconInputProps; -export const HighLightIconInput = (props: HighLightIconInputProps) => { +export const HighLightIconInput = forwardRef< + HTMLInputElement, + HighLightIconInputProps +>((props, ref) => { const { onFocus, onBlur, @@ -74,6 +75,7 @@ export const HighLightIconInput = (props: HighLightIconInputProps) => { {startElement} { setFocus(true); onFocus?.(e); @@ -87,7 +89,7 @@ export const HighLightIconInput = (props: HighLightIconInputProps) => { {endElement} ); -}; +}); const StyledIconWrapper = styled('div')` display: inline-flex; diff --git a/libs/components/editor-core/src/block-pendant/pendant-modify-panel/Select.tsx b/libs/components/editor-core/src/block-pendant/pendant-modify-panel/Select.tsx index 7f29905d8f..6d0d1f26f9 100644 --- a/libs/components/editor-core/src/block-pendant/pendant-modify-panel/Select.tsx +++ b/libs/components/editor-core/src/block-pendant/pendant-modify-panel/Select.tsx @@ -5,7 +5,7 @@ import React, { KeyboardEvent, useRef, } from 'react'; -import { Add, Delete, Close } from '@mui/icons-material'; +import { Add, Close } from '@mui/icons-material'; import { ModifyPanelContentProps } from './types'; import { MultiSelectProperty, @@ -38,6 +38,7 @@ type OptionItemType = { }; onEnter?: (e: KeyboardEvent) => void; focused?: boolean; + tabIndex?: number; }; type SelectPropsType = { @@ -138,6 +139,7 @@ export const BasicSelect = ({ onEnter={() => { insertOption(options[options.length - 1].id); }} + tabIndex={index + 1} /> ); })} @@ -196,6 +198,7 @@ const OptionItem = ({ iconConfig, onEnter, focused, + tabIndex, }: OptionItemType) => { const theme = useTheme(); const inputRef = useRef(); @@ -204,11 +207,8 @@ const OptionItem = ({ }, [focused]); return ( { - const [text, setText] = useState(initialValue?.value || ''); + const [text, setText] = useState((initialValue?.value as string) || ''); return ( ; -export const Input = forwardRef(function CustomInput( - props: InputUnstyledProps, - ref: ForwardedRef -) { - const { components, ...other } = props; - return ( - - ); -}); +export const Input = forwardRef( + (props: InputProps, ref: ForwardedRef) => { + // const { getRootProps, getInputProps } = useInput(props); + const { + style, + startAdornment = null, + endAdornment = null, + onClick, + noBorder = false, + ...inputProps + } = props; -const StyledInputRoot = styled('div')(({ theme }) => ({ - height: '32px', - display: 'flex', - border: `1px solid ${theme.affine.palette.borderColor}`, - borderRadius: '10px', - color: `${theme.affine.palette.secondaryText}`, - padding: '0 12px', - fontSize: '14px', - lineHeight: '1.5', - transition: 'border .1s', - [`&.${inputUnstyledClasses.focused}`]: { - borderColor: `${theme.affine.palette.primary}`, - }, -})); + return ( + + {startAdornment} + + {endAdornment} + + ); + } +); + +const StyledInputRoot = styled('div')<{ noBorder: boolean }>( + ({ noBorder, theme }) => ({ + height: '32px', + display: 'flex', + border: noBorder + ? 'none' + : `1px solid ${theme.affine.palette.borderColor}`, + borderRadius: '10px', + color: `${theme.affine.palette.secondaryText}`, + padding: '0 12px', + fontSize: '14px', + lineHeight: '1.5', + transition: 'border .1s', + '&:focus-within': { + borderColor: `${theme.affine.palette.primary}`, + }, + }) +); const StyledInputElement = styled('input')(({ theme }) => ({ fontSize: '14px',