diff --git a/app/client/src/components/designSystems/appsmith/BaseButton.tsx b/app/client/src/components/designSystems/appsmith/BaseButton.tsx index bd92cdce7b..aa332aa99a 100644 --- a/app/client/src/components/designSystems/appsmith/BaseButton.tsx +++ b/app/client/src/components/designSystems/appsmith/BaseButton.tsx @@ -1,65 +1,224 @@ import React from "react"; -import { IButtonProps, Button } from "@blueprintjs/core"; -import { darkenActive, darkenHover, Theme } from "constants/DefaultTheme"; -import styled, { css } from "styled-components"; -import { omit } from "lodash"; -import { ButtonStyleType, ButtonVariant } from "components/constants"; -export type ButtonStyleName = "primary" | "secondary" | "error"; +import styled from "styled-components"; +import tinycolor from "tinycolor2"; -type ButtonStyleProps = { - accent?: ButtonStyleName; - filled?: boolean; - buttonStyle?: ButtonStyleType; - buttonVariant?: ButtonVariant; +import { IButtonProps, Button, Alignment } from "@blueprintjs/core"; +import { IconName } from "@blueprintjs/icons"; + +import { Theme } from "constants/DefaultTheme"; + +import { ThemeProp } from "components/ads/common"; + +import _ from "lodash"; +import { + ButtonStyleTypes, + ButtonBoxShadow, + ButtonBoxShadowTypes, + ButtonBorderRadius, + ButtonBorderRadiusTypes, + ButtonStyleType, + ButtonVariant, + ButtonVariantTypes, +} from "components/constants"; + +const getCustomTextColor = ( + theme: Theme, + backgroundColor?: string, + prevButtonStyle?: ButtonStyleType, +) => { + if (!backgroundColor) + return theme.colors.button[ + (prevButtonStyle || ButtonStyleTypes.PRIMARY).toLowerCase() + ].solid.textColor; + const isDark = tinycolor(backgroundColor).isDark(); + if (isDark) { + return theme.colors.button.custom.solid.light.textColor; + } + return theme.colors.button.custom.solid.dark.textColor; }; -const AccentColorMap: Record = { - primary: "primaryOld", - secondary: "secondaryOld", - error: "error", -}; +const getCustomHoverColor = ( + theme: Theme, + prevButtonStyle?: ButtonStyleType, + buttonVariant?: ButtonVariant, + backgroundColor?: string, +) => { + if (!backgroundColor) { + return theme.colors.button[ + (prevButtonStyle || ButtonStyleTypes.PRIMARY).toLowerCase() + ][(buttonVariant || ButtonVariantTypes.SOLID).toLowerCase()].hoverColor; + } -const getButtonColorStyles = (props: { theme: Theme } & ButtonStyleProps) => { - if (props.filled) return props.theme.colors.textOnDarkBG; - if (props.accent) { - if (props.accent === "secondary") { - return props.theme.colors[AccentColorMap["primary"]]; - } - return props.theme.colors[AccentColorMap[props.accent]]; + switch (buttonVariant) { + case ButtonVariantTypes.OUTLINE: + return backgroundColor + ? tinycolor(backgroundColor) + .lighten(40) + .toString() + : theme.colors.button.primary.outline.hoverColor; + + case ButtonVariantTypes.GHOST: + return backgroundColor + ? tinycolor(backgroundColor) + .lighten(40) + .toString() + : theme.colors.button.primary.ghost.hoverColor; + + default: + return backgroundColor + ? tinycolor(backgroundColor) + .darken(10) + .toString() + : theme.colors.button.primary.solid.hoverColor; } }; -const ButtonColorStyles = css` - color: ${getButtonColorStyles}; - svg { - fill: ${getButtonColorStyles}; - } -`; +const getCustomBackgroundColor = ( + theme: Theme, + prevButtonStyle?: ButtonStyleType, + buttonVariant?: ButtonVariant, + backgroundColor?: string, +) => { + return buttonVariant === ButtonVariantTypes.SOLID + ? backgroundColor + ? backgroundColor + : theme.colors.button[ + (prevButtonStyle || ButtonStyleTypes.PRIMARY).toLowerCase() + ].solid.bgColor + : "none"; +}; -const ButtonWrapper = styled((props: ButtonStyleProps & IButtonProps) => ( -