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',