(frontend) enhance dropdown menu and quick search components

- Added a horizontal separator to the dropdown menu for better visual
distinction between options.
- Updated padding in the quick search input for improved layout
consistency.
- Adjusted margin in the quick search group for better spacing.
- Increased vertical padding in quick search item content for enhanced
readability.
- Modified the horizontal separator to accept custom padding for more
flexible styling.
- Improved left panel styling to manage overflow behavior effectively.
- Removed unused skeleton loading styles from globals.css to clean up
the codebase.
This commit is contained in:
Nathan Panchout
2025-07-02 14:32:14 +02:00
committed by Anthony LC
parent 6af8d78ede
commit 1c5270e301
6 changed files with 81 additions and 64 deletions

View File

@@ -1,4 +1,5 @@
import { PropsWithChildren, useRef, useState } from 'react'; import { HorizontalSeparator } from '@gouvfr-lasuite/ui-kit';
import { Fragment, PropsWithChildren, useRef, useState } from 'react';
import { css } from 'styled-components'; import { css } from 'styled-components';
import { Box, BoxButton, BoxProps, DropButton, Icon, Text } from '@/components'; import { Box, BoxButton, BoxProps, DropButton, Icon, Text } from '@/components';
@@ -14,6 +15,7 @@ export type DropdownMenuOption = {
isSelected?: boolean; isSelected?: boolean;
disabled?: boolean; disabled?: boolean;
show?: boolean; show?: boolean;
showSeparator?: boolean;
}; };
export type DropdownMenuProps = { export type DropdownMenuProps = {
@@ -112,6 +114,7 @@ export const DropdownMenu = ({
} }
const isDisabled = option.disabled !== undefined && option.disabled; const isDisabled = option.disabled !== undefined && option.disabled;
return ( return (
<Fragment key={option.label}>
<BoxButton <BoxButton
role="menuitem" role="menuitem"
aria-label={option.label} aria-label={option.label}
@@ -177,6 +180,10 @@ export const DropdownMenu = ({
<Icon iconName="check" $size="20px" $theme="greyscale" /> <Icon iconName="check" $size="20px" $theme="greyscale" />
)} )}
</BoxButton> </BoxButton>
{option.showSeparator && (
<HorizontalSeparator withPadding={false} />
)}
</Fragment>
); );
})} })}
</Box> </Box>

View File

@@ -18,7 +18,7 @@ export const QuickSearchGroup = <T,>({
renderElement, renderElement,
}: Props<T>) => { }: Props<T>) => {
return ( return (
<Box $margin={{ top: 'base' }}> <Box $margin={{ top: 'sm' }}>
<Command.Group <Command.Group
key={group.groupName} key={group.groupName}
heading={group.groupName} heading={group.groupName}

View File

@@ -44,7 +44,7 @@ export const QuickSearchInput = ({
$align="center" $align="center"
className="quick-search-input" className="quick-search-input"
$gap={spacingsTokens['2xs']} $gap={spacingsTokens['2xs']}
$padding={{ all: 'base' }} $padding={{ horizontal: 'base', vertical: 'sm' }}
> >
{!loading && <Icon iconName="search" $variation="600" />} {!loading && <Icon iconName="search" $variation="600" />}
{loading && ( {loading && (

View File

@@ -24,8 +24,9 @@ export const QuickSearchItemContent = ({
<Box <Box
$direction="row" $direction="row"
$align="center" $align="center"
$padding={{ horizontal: '2xs', vertical: '3xs' }} $padding={{ horizontal: '2xs', vertical: '4xs' }}
$justify="space-between" $justify="space-between"
$minHeight="34px"
$width="100%" $width="100%"
> >
<Box <Box

View File

@@ -1,4 +1,5 @@
import { useCunninghamTheme } from '@/cunningham'; import { useCunninghamTheme } from '@/cunningham';
import { Spacings } from '@/utils';
import { Box } from '../Box'; import { Box } from '../Box';
@@ -10,19 +11,25 @@ export enum SeparatorVariant {
type Props = { type Props = {
variant?: SeparatorVariant; variant?: SeparatorVariant;
$withPadding?: boolean; $withPadding?: boolean;
customPadding?: Spacings;
}; };
export const HorizontalSeparator = ({ export const HorizontalSeparator = ({
variant = SeparatorVariant.LIGHT, variant = SeparatorVariant.LIGHT,
$withPadding = true, $withPadding = true,
customPadding,
}: Props) => { }: Props) => {
const { colorsTokens } = useCunninghamTheme(); const { colorsTokens } = useCunninghamTheme();
const padding = $withPadding
? (customPadding ?? 'base')
: ('none' as Spacings);
return ( return (
<Box <Box
$height="1px" $height="1px"
$width="100%" $width="100%"
$margin={{ vertical: $withPadding ? 'base' : 'none' }} $margin={{ vertical: padding }}
$background={ $background={
variant === SeparatorVariant.DARK variant === SeparatorVariant.DARK
? '#e5e5e533' ? '#e5e5e533'

View File

@@ -70,6 +70,8 @@ export const LeftPanel = () => {
position: fixed; position: fixed;
transform: translateX(${isPanelOpen ? '0' : '-100dvw'}); transform: translateX(${isPanelOpen ? '0' : '-100dvw'});
background-color: var(--c--theme--colors--greyscale-000); background-color: var(--c--theme--colors--greyscale-000);
overflow-y: auto;
overflow-x: hidden;
`} `}
className="--docs--left-panel-mobile" className="--docs--left-panel-mobile"
> >