Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ const ConfirmationDialog: React.FC<{
Please input "{challengeTxt}" prior to clicking confirm.
<Input
placeholder={challengeTxt}
className='border-t-0 border-l-0 border-r-0 rounded-sm border-black dark:border-white bg-transparent dark:bg-transparent placeholder-neutral-dark-10 dark:placeholder-neutral-light-10 pl-2'
className='border-t-0 border-l-0 border-r-0 rounded-none border-black dark:border-white bg-transparent dark:bg-transparent placeholder-neutral-dark-10 dark:placeholder-neutral-light-10 focus-visible:ring-0 focus-visible:ring-offset-0 pl-2'
onChange={(e) => setChallengeTxtReply(e.target.value)}
value={challengeTxtReply}
data-testid='confirmation-dialog_challenge-text'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import { Button, ButtonProps, Popover, PopoverContent, Tooltip, Typography } fro
import { FC, useState } from 'react';
import { cn } from '../../utils';
import DropdownTrigger from './DropdownTrigger';
import { optionIconStyles, optionStyles, popoverContentStyles, tooltipStyles } from './constants';
import { optionStyles, popoverContentStyles, tooltipStyles } from './constants';
import { DropdownOption } from './types';

const DropdownSelector: FC<{
Expand Down Expand Up @@ -75,7 +75,6 @@ const DropdownSelector: FC<{
</span>
{option.icon && (
<FontAwesomeIcon
className={optionIconStyles}
style={{ width: '10%', alignSelf: 'center' }}
icon={option.icon}
data-testid={`dropdown-icon-${option.icon.iconName}`}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,24 @@
//
// SPDX-License-Identifier: Apache-2.0

import { PopoverTrigger } from 'doodle-ui';
import DropdownTriggerContents, { DropdownTriggerContentsProps } from './DropdownTriggerContents';
import { ButtonProps, PopoverTrigger } from 'doodle-ui';
import { FC } from 'react';
import DropdownTriggerContents from './DropdownTriggerContents';

const DropdownTrigger = (props: DropdownTriggerContentsProps) => {
const DropdownTrigger: FC<{
open: boolean;
selectedText: JSX.Element | string;
buttonProps?: ButtonProps;
StartAdornment?: React.FC;
EndAdornment?: React.FC;
testId?: string;
variant?: ButtonProps['variant'];
}> = (props) => {
return (
<PopoverTrigger asChild>
<DropdownTriggerContents {...props} />
<div>
<DropdownTriggerContents {...props} />
</div>
</PopoverTrigger>
);
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,83 +14,70 @@
//
// SPDX-License-Identifier: Apache-2.0
import { Button, ButtonProps } from 'doodle-ui';
import { forwardRef, type FC } from 'react';
import { cn } from '../../utils';
import { AppIcon } from '../AppIcon';
import { dropdownIconStateStyles, selectorIconStyles, triggerStyles } from './constants';
import { triggerStyles } from './constants';

export type DropdownTriggerContentsProps = ButtonProps & {
type DropdownTriggerContentsProps = {
open: boolean;
selectedText: JSX.Element | string;
buttonProps?: ButtonProps;
StartAdornment?: FC;
EndAdornment?: FC;
StartAdornment?: React.FC;
EndAdornment?: React.FC;
testId?: string;
variant?: ButtonProps['variant'];
readOnly?: boolean;
};

const DropdownTriggerContents = forwardRef<HTMLButtonElement, DropdownTriggerContentsProps>(
(
{
open,
selectedText,
buttonProps,
StartAdornment,
EndAdornment,
testId,
variant,
readOnly,
className,
...props
},
ref
) => {
const buttonPrimary = variant === 'primary';
const DropdownTriggerContents = ({
open,
selectedText,
buttonProps,
StartAdornment,
EndAdornment,
testId,
variant,
readOnly,
}: DropdownTriggerContentsProps) => {
const buttonPrimary = variant === 'primary';

return (
<Button
ref={ref}
{...props}
variant={variant ?? 'transparent'}
className={cn(
'uppercase group',
buttonPrimary && `w-full text-sm ${dropdownIconStateStyles}`,
{
[triggerStyles]: !buttonPrimary,
'bg-primary text-white dark:text-neutral-dark-1 border-transparent [&_svg]:text-white dark:[&_svg]:text-neutral-dark-1 [&_svg]:fill-current [&_svg_*]:text-white dark:[&_svg_*]:text-neutral-dark-1 [&_svg_*]:fill-current':
open,
},
className,
buttonProps?.className
return (
<Button
variant={variant}
className={cn(
'uppercase',
{
'w-full text-sm': buttonPrimary,
[triggerStyles]: !buttonPrimary,
'bg-primary text-white border-transparent': open,
},
buttonProps?.className
)}
size='small'
data-testid={testId ? testId : 'dropdown_context-selector'}>
<span
className={cn('flex justify-center items-center max-w-full', {
'justify-between': StartAdornment,
})}>
<div className='flex items-center truncate'>
{StartAdornment && <StartAdornment />}
<p className='truncate font-bold mr-2'>{selectedText}</p>
</div>
{EndAdornment ? (
<EndAdornment />
) : (
<span
className={cn({
'rotate-180 transition-transform': open,
'justify-self-end': buttonPrimary,
hidden: readOnly,
})}>
<AppIcon.CaretDown size={12} />
</span>
)}
size='small'
data-testid={testId ? testId : 'dropdown_context-selector'}>
<span
className={cn('flex justify-center items-center max-w-full', {
'justify-between': StartAdornment,
})}>
<div className='flex items-center truncate'>
{StartAdornment && <StartAdornment />}
<p className='truncate font-bold mr-2'>{selectedText}</p>
</div>
{EndAdornment ? (
<EndAdornment />
) : (
<span
className={cn({
'rotate-180 transition-transform': open,
'justify-self-end': buttonPrimary,
hidden: readOnly,
})}>
<AppIcon.CaretDown className={selectorIconStyles} size={12} />
</span>
)}
</span>
</Button>
);
}
);
DropdownTriggerContents.displayName = 'DropdownTriggerContents';
</span>
</Button>
);
};

export default DropdownTriggerContents;
Original file line number Diff line number Diff line change
Expand Up @@ -13,21 +13,12 @@
// limitations under the License.
//
// SPDX-License-Identifier: Apache-2.0
export const focusedControlStateStyles =
'focus:bg-primary focus:text-white dark:focus:text-neutral-dark-1 focus-visible:bg-primary focus-visible:text-white dark:focus-visible:text-neutral-dark-1';

export const dropdownIconStateStyles =
'hover:[&_svg]:text-white dark:hover:[&_svg]:text-neutral-dark-1 hover:[&_svg]:fill-current hover:[&_svg_*]:text-white dark:hover:[&_svg_*]:text-neutral-dark-1 hover:[&_svg_*]:fill-current focus:[&_svg]:text-white dark:focus:[&_svg]:text-neutral-dark-1 focus:[&_svg]:fill-current focus:[&_svg_*]:text-white dark:focus:[&_svg_*]:text-neutral-dark-1 focus:[&_svg_*]:fill-current focus-visible:[&_svg]:text-white dark:focus-visible:[&_svg]:text-neutral-dark-1 focus-visible:[&_svg]:fill-current focus-visible:[&_svg_*]:text-white dark:focus-visible:[&_svg_*]:text-neutral-dark-1 focus-visible:[&_svg_*]:fill-current';

export const triggerStyles = `max-w-56 text-sm text-contrast rounded-md bg-transparent hover:bg-primary hover:text-white dark:hover:text-neutral-dark-1 ${focusedControlStateStyles} border shadow-outer-0 hover:border-transparent focus:border-transparent focus-visible:border-transparent border-neutral-light-5 group ${dropdownIconStateStyles}`;
export const triggerStyles =
'max-w-56 text-sm text-contrast rounded-md bg-transparent hover:bg-primary hover:text-white border shadow-outer-0 hover:border-transparent border-neutral-light-5 group';

export const popoverContentStyles = 'flex flex-col p-0 rounded-md border border-neutral-5 bg-neutral-1';

export const optionStyles = `px-4 py-1 rounded-none w-full justify-normal text-contrast dark:text-neutral-light-1 hover:no-underline hover:bg-neutral-4 dark:hover:text-neutral-dark-1 ${focusedControlStateStyles} ${dropdownIconStateStyles} disabled:bg-neutral-4 group`;

export const selectorIconStyles =
'group-hover:text-white dark:group-hover:text-neutral-dark-1 group-focus:text-white dark:group-focus:text-neutral-dark-1 group-focus-visible:text-white dark:group-focus-visible:text-neutral-dark-1';

export const optionIconStyles = selectorIconStyles;
export const optionStyles =
'px-4 py-1 rounded-none w-full justify-normal hover:no-underline hover:bg-neutral-4 disabled:bg-neutral-4';

export const tooltipStyles = 'max-w-80 border-0 dark:bg-neutral-4 dark:text-white';
Loading
Loading