diff --git a/apps/builder/app/builder/features/style-panel/style-source/style-source-input.tsx b/apps/builder/app/builder/features/style-panel/style-source/style-source-input.tsx index 2d0961523a..d3fed9033b 100644 --- a/apps/builder/app/builder/features/style-panel/style-source/style-source-input.tsx +++ b/apps/builder/app/builder/features/style-panel/style-source/style-source-input.tsx @@ -19,7 +19,6 @@ import { Combobox, ComboboxAnchor, ComboboxContent, - DeprecatedTextFieldContainer, DeprecatedTextFieldInput, useDeprecatedTextFieldFocus, useCombobox, @@ -31,6 +30,7 @@ import { DropdownMenuSeparator, rawTheme, theme, + styled, } from "@webstudio-is/design-system"; import { forwardRef, @@ -64,18 +64,32 @@ export type ItemSelector = { state?: string; }; +const TextFieldContainer = styled("div", { + // Custom + display: "flex", + flexWrap: "wrap", + alignItems: "center", + backgroundColor: theme.colors.backgroundControls, + gap: theme.spacing[3], + p: theme.spacing[3], + borderRadius: theme.borderRadius[4], + minHeight: theme.spacing[12], + minWidth: 0, + border: `1px solid ${theme.colors.borderMain}`, + "&:focus-within": { + outline: `2px solid ${theme.colors.borderFocus}`, + outlineOffset: -1, + }, +}); + type TextFieldBaseWrapperProps = Omit< ComponentProps<"input">, "value" > & - Pick< - ComponentProps, - "variant" | "state" | "css" - > & { + Pick, "css"> & { value: Array; selectedItemSelector: undefined | ItemSelector; label: string; - disabled?: boolean; containerRef?: RefObject; inputRef?: RefObject; renderStyleSourceMenuItems: (item: Item) => ReactNode; @@ -93,11 +107,8 @@ const TextFieldBase: ForwardRefRenderFunction< > = (props, forwardedRef) => { const { css, - disabled, containerRef, inputRef, - state, - variant: textFieldVariant, onFocus, onBlur, onClick, @@ -116,7 +127,6 @@ const TextFieldBase: ForwardRefRenderFunction< ...textFieldProps } = props; const [internalInputRef, focusProps] = useDeprecatedTextFieldFocus({ - disabled, onFocus, onBlur, }); @@ -126,13 +136,10 @@ const TextFieldBase: ForwardRefRenderFunction< }); return ( - )} - + ); }; @@ -338,7 +351,11 @@ const renderMenuItems = (props: { onSelect={() => props.onSelect?.({ styleSourceId: props.item.id, - state: selector, + // toggle state selection + state: + props.selectedItemSelector?.state === selector + ? undefined + : selector, }) } > diff --git a/apps/builder/app/builder/features/style-panel/style-source/style-source.tsx b/apps/builder/app/builder/features/style-panel/style-source/style-source.tsx index c3038af855..ef2cb8b006 100644 --- a/apps/builder/app/builder/features/style-panel/style-source/style-source.tsx +++ b/apps/builder/app/builder/features/style-panel/style-source/style-source.tsx @@ -4,17 +4,17 @@ import { DropdownMenuContent, DropdownMenuPortal, DropdownMenuTrigger, - DeprecatedText2, + Text, styled, Box, theme, + Flex, } from "@webstudio-is/design-system"; import { ChevronDownIcon } from "@webstudio-is/icons"; import { useEffect, useLayoutEffect, useRef, - forwardRef, type KeyboardEvent, type KeyboardEventHandler, type FocusEvent, @@ -228,7 +228,7 @@ const EditableText = ({ }); return ( - {label} - + ); }; @@ -269,7 +269,7 @@ const useForceRecalcStyle = ( return ref; }; -const StyledSourceContainer = styled(Box, { +const StyleSourceContainer = styled(Box, { display: "inline-flex", borderRadius: theme.borderRadius[3], minWidth: theme.spacing[13], @@ -309,42 +309,25 @@ const StyledSourceContainer = styled(Box, { }, }); -type SourceContainerProps = { - id: string; - source: ItemSource; - selected: boolean; - disabled: boolean; - children: Array; -}; - -const SourceSourceContainer = forwardRef( - ({ id, source, selected, disabled, children }, ref) => { - return ( - - {children} - - ); - } -); -SourceSourceContainer.displayName = "SourceSourceContainer"; - const StyleSourceButton = styled("button", { all: "unset", + flexGrow: 1, display: "block", boxSizing: "border-box", - padding: theme.spacing[4], maxWidth: "100%", + padding: theme.spacing[3], + variants: { + isEditing: { + true: { + color: theme.colors.foregroundMain, + backgroundColor: theme.colors.backgroundControls, + }, + false: {}, + }, + }, }); -const StyleSourceState = styled(Box, { +const StyleSourceState = styled(Text, { padding: theme.spacing[4], backgroundColor: theme.colors.backgroundStyleSourceToken, borderTopRightRadius: theme.borderRadius[3], @@ -387,26 +370,34 @@ export const StyleSource = ({ const showMenu = isEditing === false && isDragging === false; return ( - - - + - + onClick={onSelect} + > + + + {stateLabel !== undefined && ( {stateLabel} )} {showMenu && {menuItems}} - + ); };