diff --git a/datahub-web-react/src/alchemy-components/components/AvatarStack/AvatarStack.tsx b/datahub-web-react/src/alchemy-components/components/AvatarStack/AvatarStack.tsx
index 47d109df6f..d71654a3c6 100644
--- a/datahub-web-react/src/alchemy-components/components/AvatarStack/AvatarStack.tsx
+++ b/datahub-web-react/src/alchemy-components/components/AvatarStack/AvatarStack.tsx
@@ -14,7 +14,7 @@ export const avatarListDefaults: AvatarStackProps = {
};
export const AvatarStack = ({ avatars, size = 'md', showRemainingNumber = true, maxToShow = 4 }: AvatarStackProps) => {
- if (avatars?.length === 0) return
-
;
+ if (!avatars?.length) return -
;
const remainingNumber = avatars.length - maxToShow;
const renderAvatarStack = avatars?.slice(0, maxToShow).map((avatar: AvatarItemProps) => (
diff --git a/datahub-web-react/src/alchemy-components/components/AvatarStack/types.ts b/datahub-web-react/src/alchemy-components/components/AvatarStack/types.ts
index 79f8f5d675..96d099ec05 100644
--- a/datahub-web-react/src/alchemy-components/components/AvatarStack/types.ts
+++ b/datahub-web-react/src/alchemy-components/components/AvatarStack/types.ts
@@ -13,7 +13,7 @@ export interface AvatarItemProps {
}
export type AvatarStackProps = {
- avatars: AvatarItemProps[];
+ avatars?: AvatarItemProps[];
size?: AvatarSizeOptions;
showRemainingNumber?: boolean;
maxToShow?: number;
diff --git a/datahub-web-react/src/alchemy-components/components/Button/utils.ts b/datahub-web-react/src/alchemy-components/components/Button/utils.ts
index 8090f755c8..8e0d51f637 100644
--- a/datahub-web-react/src/alchemy-components/components/Button/utils.ts
+++ b/datahub-web-react/src/alchemy-components/components/Button/utils.ts
@@ -122,17 +122,22 @@ const getButtonColorStyles = (variant: ButtonVariant, color: ColorOptions, theme
};
// Generate color styles for button
-const getButtonVariantStyles = (variant: ButtonVariant, colorStyles: ColorStyles, color: ColorOptions): CSSObject => {
- const isViolet = color === 'violet';
- const violetGradient = `radial-gradient(115.48% 144.44% at 50% -44.44%, var(--buttons-bg-2-for-gradient, #705EE4) 38.97%, var(--buttons-bg, #533FD1) 100%)`;
+const getButtonVariantStyles = (
+ variant: ButtonVariant,
+ colorStyles: ColorStyles,
+ color: ColorOptions,
+ theme?: Theme,
+): CSSObject => {
+ const isPrimary = color === 'violet' || color === 'primary';
+ const primaryGradient = `radial-gradient(115.48% 144.44% at 50% -44.44%, ${theme?.styles?.['primary-color-gradient'] || '#705EE4'} 38.97%, ${theme?.styles?.['primary-color'] || '#533FD1'} 100%)`;
const variantStyles = {
filled: {
- background: isViolet ? violetGradient : colorStyles.bgColor,
+ background: isPrimary ? primaryGradient : colorStyles.bgColor,
border: `1px solid ${colorStyles.borderColor}`,
color: colorStyles.textColor,
'&:hover': {
- background: isViolet ? violetGradient : colorStyles.hoverBgColor,
+ background: isPrimary ? primaryGradient : colorStyles.hoverBgColor,
border: `1px solid ${colorStyles.hoverBgColor}`,
boxShadow: shadows.sm,
},
@@ -276,7 +281,7 @@ export const getButtonStyle = (props: ButtonStyleProps): CSSObject => {
const colorStyles = getButtonColorStyles(variant, color, theme);
// Define styles for button
- const variantStyles = getButtonVariantStyles(variant, colorStyles, color);
+ const variantStyles = getButtonVariantStyles(variant, colorStyles, color, theme);
const fontStyles = getButtonFontStyles(size);
const radiiStyles = getButtonRadiiStyles(isCircle);
const paddingStyles = getButtonPadding(size, hasChildren, isCircle, variant);
diff --git a/datahub-web-react/src/alchemy-components/components/Checkbox/Checkbox.stories.tsx b/datahub-web-react/src/alchemy-components/components/Checkbox/Checkbox.stories.tsx
index 7ab62e5c08..3fec5c8840 100644
--- a/datahub-web-react/src/alchemy-components/components/Checkbox/Checkbox.stories.tsx
+++ b/datahub-web-react/src/alchemy-components/components/Checkbox/Checkbox.stories.tsx
@@ -126,6 +126,16 @@ export const states = () => (
);
+export const sizes = () => (
+
+
+
+
+
+
+
+);
+
export const intermediate = () => {
return (
diff --git a/datahub-web-react/src/alchemy-components/components/Checkbox/utils.ts b/datahub-web-react/src/alchemy-components/components/Checkbox/utils.ts
index dba3716fa2..50eec87274 100644
--- a/datahub-web-react/src/alchemy-components/components/Checkbox/utils.ts
+++ b/datahub-web-react/src/alchemy-components/components/Checkbox/utils.ts
@@ -21,7 +21,7 @@ export function getCheckboxColor(checked: boolean, error: string, disabled: bool
}
if (error) return checkboxBackgroundDefault.error;
if (checked) return checkboxBackgroundDefault.checked;
- return mode === 'background' ? checkboxBackgroundDefault.default : colors.gray[500];
+ return mode === 'background' ? checkboxBackgroundDefault.default : colors.gray[1800];
}
export function getCheckboxHoverBackgroundColor(checked: boolean, error: string) {
@@ -36,7 +36,7 @@ const sizeMap: Record = {
md: '20px',
lg: '22px',
xl: '24px',
- inherit: '',
+ inherit: 'inherit',
};
export function getCheckboxSize(size: SizeOptions) {
diff --git a/datahub-web-react/src/alchemy-components/components/GraphCard/GraphCard.tsx b/datahub-web-react/src/alchemy-components/components/GraphCard/GraphCard.tsx
index 78daca5237..ae83113714 100644
--- a/datahub-web-react/src/alchemy-components/components/GraphCard/GraphCard.tsx
+++ b/datahub-web-react/src/alchemy-components/components/GraphCard/GraphCard.tsx
@@ -79,7 +79,7 @@ export function GraphCard({
)}
{emptyMessage}
{moreInfoModalContent && (
- setShowInfoModal(true)}>
+ setShowInfoModal(true)}>
More info
)}
diff --git a/datahub-web-react/src/alchemy-components/components/Icon/Icon.tsx b/datahub-web-react/src/alchemy-components/components/Icon/Icon.tsx
index a10898f892..450ff603c9 100644
--- a/datahub-web-react/src/alchemy-components/components/Icon/Icon.tsx
+++ b/datahub-web-react/src/alchemy-components/components/Icon/Icon.tsx
@@ -6,6 +6,8 @@ import { IconProps, IconPropsDefaults } from '@components/components/Icon/types'
import { getIconComponent, getIconNames } from '@components/components/Icon/utils';
import { getColor, getFontSize, getRotationTransform } from '@components/theme/utils';
+import { useCustomTheme } from '@src/customThemeContext';
+
export const iconDefaults: IconPropsDefaults = {
source: 'material',
variant: 'outline',
@@ -28,6 +30,7 @@ export const Icon = ({
...props
}: IconProps) => {
const { filled, outlined } = getIconNames();
+ const { theme } = useCustomTheme();
// Return early if no icon is provided
if (!icon) return null;
@@ -60,9 +63,9 @@ export const Icon = ({
diff --git a/datahub-web-react/src/alchemy-components/components/Input/Input.tsx b/datahub-web-react/src/alchemy-components/components/Input/Input.tsx
index 1fd3b440c7..c5d87140f4 100644
--- a/datahub-web-react/src/alchemy-components/components/Input/Input.tsx
+++ b/datahub-web-react/src/alchemy-components/components/Input/Input.tsx
@@ -36,6 +36,10 @@ const SearchIcon = styled(Icon)`
margin-left: 8px;
`;
+const ClearIcon = styled(Icon)`
+ cursor: pointer;
+`;
+
export const Input = ({
value = inputDefaults.value,
setValue = inputDefaults.setValue,
@@ -55,6 +59,7 @@ export const Input = ({
id,
inputStyles,
inputTestId,
+ onClear,
...props
}: InputProps) => {
// Invalid state is always true if error is present
@@ -104,6 +109,7 @@ export const Input = ({
{warning && }
)}
+ {!!onClear && value && }
{isPassword && setShowPassword(!showPassword)} icon={passwordIcon} size="lg" />}
{invalid && error && !errorOnHover && {error}}
diff --git a/datahub-web-react/src/alchemy-components/components/Input/types.ts b/datahub-web-react/src/alchemy-components/components/Input/types.ts
index 872bc672f5..cbfa3608aa 100644
--- a/datahub-web-react/src/alchemy-components/components/Input/types.ts
+++ b/datahub-web-react/src/alchemy-components/components/Input/types.ts
@@ -22,4 +22,5 @@ export interface InputProps extends InputHTMLAttributes {
styles?: React.CSSProperties;
inputStyles?: React.CSSProperties;
inputTestId?: string;
+ onClear?: () => void;
}
diff --git a/datahub-web-react/src/alchemy-components/components/Modal/Modal.stories.tsx b/datahub-web-react/src/alchemy-components/components/Modal/Modal.stories.tsx
index d4352c74e9..c1215762d8 100644
--- a/datahub-web-react/src/alchemy-components/components/Modal/Modal.stories.tsx
+++ b/datahub-web-react/src/alchemy-components/components/Modal/Modal.stories.tsx
@@ -77,13 +77,13 @@ function Render({ buttons, buttonExamples, content, ...props }: ModalWithExample
buttonExamples?.map((text) => {
switch (text) {
case 'Cancel':
- return { text, variant: 'text', onClick: () => setIsOpen(false) };
+ return { text, variant: 'text', onClick: () => setIsOpen(false), key: 'cancel' };
case 'Propose':
// TODO: Replace with secondary variant once it's supported
- return { text, variant: 'outline', onClick: () => setIsOpen(false) };
+ return { text, variant: 'outline', onClick: () => setIsOpen(false), key: 'propose' };
case 'Submit':
default:
- return { text, variant: 'filled', onClick: () => setIsOpen(false) };
+ return { text, variant: 'filled', onClick: () => setIsOpen(false), key: 'submit' };
}
}) || [];
@@ -91,7 +91,7 @@ function Render({ buttons, buttonExamples, content, ...props }: ModalWithExample
<>
{isOpen && (
- setIsOpen(false)}>
+ setIsOpen(false)}>
{content && {content}}
)}
diff --git a/datahub-web-react/src/alchemy-components/components/Modal/Modal.tsx b/datahub-web-react/src/alchemy-components/components/Modal/Modal.tsx
index b907ddca48..6284ac66e2 100644
--- a/datahub-web-react/src/alchemy-components/components/Modal/Modal.tsx
+++ b/datahub-web-react/src/alchemy-components/components/Modal/Modal.tsx
@@ -62,8 +62,8 @@ export interface ModalButton extends ButtonProps {
}
export interface ModalProps {
- buttons: ModalButton[];
- title: string;
+ buttons?: ModalButton[];
+ title: React.ReactNode;
subtitle?: string;
titlePill?: React.ReactNode;
children?: React.ReactNode;
@@ -105,7 +105,7 @@ export function Modal({
}
footer={
- !!buttons.length && (
+ !!buttons?.length && (
{buttons.map(({ text, variant, onClick, key, buttonDataTestId, ...buttonProps }, index) => (