diff --git a/packages/core/src/components/Button/Button.module.scss b/packages/core/src/components/Button/Button.module.scss index 1d00fc63e6..addcf7238a 100644 --- a/packages/core/src/components/Button/Button.module.scss +++ b/packages/core/src/components/Button/Button.module.scss @@ -222,6 +222,23 @@ $disabled-on-primary-color-opacity: 0.5; color: var(--fixed-light-color); } +.kindPrimary.colorOnInvertedBackground { + background: var(--primary-background-color); + color: var(--primary-text-color); +} + +.kindPrimary.colorOnInvertedBackgroundActive, +.kindPrimary.colorOnInvertedBackground:hover, +.kindPrimary.colorOnInvertedBackground:focus { + background: var(--ui-background-color); +} + +.kindPrimary.button.colorOnInvertedBackground.disabled { + background: var(--ui-background-color); + color: var(--primary-text-color); + opacity: $disabled-on-primary-color-opacity; +} + .kindPrimary.button.disabled { background: var(--disabled-background-color); color: var(--disabled-text-color); @@ -341,6 +358,23 @@ $disabled-on-primary-color-opacity: 0.5; @include focus-style-on-primary(); } +.kindSecondary.colorOnInvertedBackground { + border-color: var(--text-color-on-inverted); + color: var(--text-color-on-inverted); +} + +.kindSecondary.colorOnInvertedBackgroundActive, +.kindSecondary.colorOnInvertedBackground:hover, +.kindSecondary.colorOnInvertedBackground:focus { + background: var(--icon-color); +} + +.kindSecondary.colorOnInvertedBackground.disabled { + border-color: var(--text-color-on-inverted); + color: var(--text-color-on-inverted); + opacity: $disabled-on-primary-color-opacity; +} + .kindSecondary.colorFixedLight.disabled { opacity: $disabled-on-primary-color-opacity; color: var(--fixed-light-color); @@ -459,7 +493,13 @@ $disabled-on-primary-color-opacity: 0.5; .kindTertiary.colorOnInvertedBackgroundActive, .kindTertiary.colorOnInvertedBackground:hover, .kindTertiary.colorOnInvertedBackground:focus { - backdrop-filter: brightness(85%); + background: var(--icon-color); +} + +.kindTertiary.colorOnInvertedBackground.disabled { + background: var(--icon-color); + opacity: $disabled-on-primary-color-opacity; + color: var(--text-color-on-inverted); } .kindTertiary.disabled { diff --git a/packages/core/src/components/Steps/Steps.tsx b/packages/core/src/components/Steps/Steps.tsx index 4b97d2e638..7a8d2cab68 100644 --- a/packages/core/src/components/Steps/Steps.tsx +++ b/packages/core/src/components/Steps/Steps.tsx @@ -3,11 +3,12 @@ import cx from "classnames"; import { NOOP } from "../../utils/function-utils"; import useMergeRef from "../../hooks/useMergeRef"; import { StepsHeader } from "./StepsHeader"; -import { StepsType } from "./StepsConstants"; +import { StepsColor, StepsType } from "./StepsConstants"; import { ButtonProps } from "../Button/Button"; import { ComponentDefaultTestId, getTestId } from "../../tests/test-ids-utils"; import { withStaticProps, VibeComponent, VibeComponentProps } from "../../types"; import styles from "./Steps.module.scss"; +import { backwardCompatibilityForProperties } from "../../helpers/backwardCompatibilityForProperties"; export interface StepsProps extends VibeComponentProps { /** @@ -21,7 +22,11 @@ export interface StepsProps extends VibeComponentProps { areNavigationButtonsHidden?: boolean; steps?: ReactElement[]; type?: StepsType; + /** + * @deprecated - Use color instead + */ isOnPrimary?: boolean; + color?: StepsColor; isContentOnTop?: boolean; areButtonsIconsHidden?: boolean; backButtonProps?: ButtonProps; @@ -41,7 +46,9 @@ const Steps: VibeComponent & { types?: typeof StepsType } = forwardR type = StepsType.GALLERY, onChangeActiveStep = NOOP, onFinish, + // TODO Remove in next major as breaking change isOnPrimary = false, + color, areNavigationButtonsHidden = false, isContentOnTop = false, backButtonProps = {}, @@ -53,6 +60,10 @@ const Steps: VibeComponent & { types?: typeof StepsType } = forwardR ) => { const componentRef = useRef(null); const mergedRef = useMergeRef(ref, componentRef); + const overrideColor = backwardCompatibilityForProperties([ + color, + isOnPrimary ? StepsColor.ON_PRIMARY_COLOR : undefined + ]); return (
& { types?: typeof StepsType } = forwardR activeStepIndex={activeStepIndex} stepsCount={steps.length} areNavigationButtonsHidden={areNavigationButtonsHidden} - isOnPrimary={isOnPrimary} + color={overrideColor} backButtonProps={backButtonProps} nextButtonProps={nextButtonProps} finishButtonProps={finishButtonProps} diff --git a/packages/core/src/components/Steps/StepsCommand.module.scss b/packages/core/src/components/Steps/StepsCommand.module.scss index d040db7733..6bdb873dbd 100644 --- a/packages/core/src/components/Steps/StepsCommand.module.scss +++ b/packages/core/src/components/Steps/StepsCommand.module.scss @@ -15,7 +15,11 @@ &.disabled { color: var(--disabled-text-color); } - &.onPrimary { + &.colorOnPrimaryColor { color: var(--text-color-on-primary); } + &.colorOnInvertedBackground { + color: var(--text-color-on-inverted); + } } + diff --git a/packages/core/src/components/Steps/StepsCommand.tsx b/packages/core/src/components/Steps/StepsCommand.tsx index cd6dc95b8f..ca18bcfb28 100644 --- a/packages/core/src/components/Steps/StepsCommand.tsx +++ b/packages/core/src/components/Steps/StepsCommand.tsx @@ -5,10 +5,12 @@ import NavigationChevronLeft from "../../components/Icon/Icons/components/Naviga import Icon from "../../components/Icon/Icon"; import Button, { ButtonProps } from "../../components/Button/Button"; import { NOOP } from "../../utils/function-utils"; -import { BACK_TEXT, NEXT_TEXT } from "./StepsConstants"; +import { BACK_TEXT, NEXT_TEXT, StepsColor } from "./StepsConstants"; import VibeComponentProps from "../../types/VibeComponentProps"; import { ComponentDefaultTestId } from "../../tests/constants"; import styles from "./StepsCommand.module.scss"; +import { camelCase } from "lodash-es"; +import { getStyle } from "../..//helpers/typesciptCssModulesHelper"; export interface StepsCommandProps extends VibeComponentProps { isNext?: boolean; @@ -17,7 +19,7 @@ export interface StepsCommandProps extends VibeComponentProps { stepsCount: number; isIconHidden?: boolean; buttonProps?: ButtonProps; - isOnPrimary?: boolean; + color?: StepsColor; } export const StepsCommand: FC = ({ @@ -26,15 +28,14 @@ export const StepsCommand: FC = ({ activeStepIndex, stepsCount, isIconHidden = false, - isOnPrimary = false, - buttonProps = {} + buttonProps = {}, + color = StepsColor.PRIMARY }) => { const { children: buttonChildren, ...otherButtonProps } = buttonProps; const description = useMemo(() => { if (buttonChildren) return buttonChildren; return isNext ? NEXT_TEXT : BACK_TEXT; }, [isNext, buttonChildren]); - const buttonBaseColor = isOnPrimary ? Button.colors.ON_PRIMARY_COLOR : undefined; const newStepIndex = isNext ? activeStepIndex + 1 : activeStepIndex - 1; const onClick = useCallback( (e: React.MouseEvent) => onChangeActiveStep(e, newStepIndex), @@ -52,7 +53,8 @@ export const StepsCommand: FC = ({ kind={Button.kinds.TERTIARY} onClick={onClick} disabled={isDisabled} - color={buttonBaseColor} + // @ts-ignore + color={color} {...otherButtonProps} > {description} @@ -60,9 +62,8 @@ export const StepsCommand: FC = ({ )} diff --git a/packages/core/src/components/Steps/StepsConstants.ts b/packages/core/src/components/Steps/StepsConstants.ts index 2491f6fa2f..4be19e9115 100644 --- a/packages/core/src/components/Steps/StepsConstants.ts +++ b/packages/core/src/components/Steps/StepsConstants.ts @@ -14,3 +14,9 @@ export enum StepsDotAriaCurrent { DATE = "date", TIME = "time" } + +export enum StepsColor { + PRIMARY = "primary", + ON_PRIMARY_COLOR = "on-primary-color", + ON_INVERTED_BACKGROUND = "on-inverted-background" +} diff --git a/packages/core/src/components/Steps/StepsDot.module.scss b/packages/core/src/components/Steps/StepsDot.module.scss index a4e6481e20..79bd7c0c3c 100644 --- a/packages/core/src/components/Steps/StepsDot.module.scss +++ b/packages/core/src/components/Steps/StepsDot.module.scss @@ -28,11 +28,19 @@ @include active-step-dot; } -.onPrimary.dot { +.colorOnPrimaryColor.dot { background: var(--primary-hover-color); @include focus-style-on-primary; } -.onPrimary.isActive { +.colorOnPrimaryColor.dot.isActive { background: var(--text-color-on-primary); } + +.colorOnInvertedBackground.dot { + background: var(--placeholder-color); +} + +.colorOnInvertedBackground.dot.isActive { + background: var(--text-color-on-inverted); +} diff --git a/packages/core/src/components/Steps/StepsDot.tsx b/packages/core/src/components/Steps/StepsDot.tsx index 0ddacc6115..4ef15976da 100644 --- a/packages/core/src/components/Steps/StepsDot.tsx +++ b/packages/core/src/components/Steps/StepsDot.tsx @@ -1,16 +1,17 @@ import cx from "classnames"; -import { noop as NOOP } from "lodash-es"; -import { StepsDotAriaCurrent } from "./StepsConstants"; +import { noop as NOOP, camelCase } from "lodash-es"; +import { StepsColor, StepsDotAriaCurrent } from "./StepsConstants"; import VibeComponentProps from "../../types/VibeComponentProps"; import React, { FC } from "react"; import styles from "./StepsDot.module.scss"; +import { getStyle } from "../../helpers/typesciptCssModulesHelper"; export interface StepsDotProps extends VibeComponentProps { onClick?: (e: React.MouseEvent) => void; ariaCurrent?: StepsDotAriaCurrent | boolean; isActive?: boolean; ariaLabel?: string; - isOnPrimary?: boolean; + color?: StepsColor; } export const StepsDot: FC = ({ @@ -18,7 +19,7 @@ export const StepsDot: FC = ({ onClick = NOOP, ariaCurrent = StepsDotAriaCurrent.STEP, ariaLabel, - isOnPrimary, + color, className }) => { return ( @@ -28,9 +29,9 @@ export const StepsDot: FC = ({ aria-current={isActive ? ariaCurrent : false} className={cx( styles.dot, + getStyle(styles, camelCase("color-" + color)), { - [styles.isActive]: isActive, - [styles.onPrimary]: isOnPrimary + [styles.isActive]: isActive }, className )} diff --git a/packages/core/src/components/Steps/StepsGalleryHeader.tsx b/packages/core/src/components/Steps/StepsGalleryHeader.tsx index 4726b1f2c3..e911077a16 100644 --- a/packages/core/src/components/Steps/StepsGalleryHeader.tsx +++ b/packages/core/src/components/Steps/StepsGalleryHeader.tsx @@ -3,13 +3,14 @@ import { range } from "lodash-es"; import { StepsDot } from "./StepsDot"; import VibeComponentProps from "../../types/VibeComponentProps"; import styles from "./StepsGalleryHeader.module.scss"; +import { StepsColor } from "./StepsConstants"; export interface StepsGalleryHeaderProps extends VibeComponentProps { activeStepIndex: number; stepsCount: number; onChangeActiveStep: (e: React.MouseEvent, stepIndex: number) => void; stepDescriptionFunc: (stepIndex: number) => string; - isOnPrimary?: boolean; + color?: StepsColor; } export const StepsGalleryHeader: FC = ({ @@ -17,7 +18,7 @@ export const StepsGalleryHeader: FC = ({ stepsCount, onChangeActiveStep, stepDescriptionFunc, - isOnPrimary + color }) => { const stepsPlaceholders = useMemo(() => range(stepsCount), [stepsCount]); const defaultStepDescriptionFunc = useCallback((stepIndex: number) => `Step number ${stepIndex}`, []); @@ -36,13 +37,13 @@ export const StepsGalleryHeader: FC = ({ key={`monday-style-step-dot-${stepIndex + 1}`} ariaLabel={overrideStepDescriptionFunc(stepIndex)} onClick={onClickFunctions[stepIndex]} - isOnPrimary={isOnPrimary} + color={color} className={styles.galleryHeaderDot} /> ), [] ), - [activeStepIndex, isOnPrimary, onClickFunctions, overrideStepDescriptionFunc, stepsPlaceholders] + [activeStepIndex, color, onClickFunctions, overrideStepDescriptionFunc, stepsPlaceholders] ); return ( diff --git a/packages/core/src/components/Steps/StepsHeader.tsx b/packages/core/src/components/Steps/StepsHeader.tsx index 4870eb49e3..299dee9e03 100644 --- a/packages/core/src/components/Steps/StepsHeader.tsx +++ b/packages/core/src/components/Steps/StepsHeader.tsx @@ -3,7 +3,7 @@ import cx from "classnames"; import { StepsCommand } from "./StepsCommand"; import { StepsGalleryHeader, StepsGalleryHeaderProps } from "./StepsGalleryHeader"; import { StepsNumbersHeader, StepsNumbersHeaderProps } from "./StepsNumbersHeader"; -import { StepsType, FINISH_TEXT } from "./StepsConstants"; +import { StepsType, FINISH_TEXT, StepsColor } from "./StepsConstants"; import VibeComponentProps from "../../types/VibeComponentProps"; import Button, { ButtonProps } from "../Button/Button"; import styles from "./StepsHeader.module.scss"; @@ -18,7 +18,7 @@ export interface StepsHeaderProps extends VibeComponentProps { nextButtonProps: ButtonProps; finishButtonProps: ButtonProps; areButtonsIconsHidden: boolean; - isOnPrimary: boolean; + color?: StepsColor; onFinish?: (e: React.MouseEvent) => void; } @@ -32,7 +32,7 @@ export const StepsHeader: FC = ({ nextButtonProps, finishButtonProps, areButtonsIconsHidden, - isOnPrimary, + color = StepsColor.PRIMARY, onFinish, className }) => { @@ -57,23 +57,20 @@ export const StepsHeader: FC = ({ activeStepIndex={activeStepIndex} stepsCount={stepsCount} buttonProps={backButtonProps} - isOnPrimary={isOnPrimary} + color={color} /> )} {areNavigationButtonsHidden ? null : ( <> {showFinishButton ? ( - ) : ( @@ -84,7 +81,7 @@ export const StepsHeader: FC = ({ onChangeActiveStep={onChangeActiveStep} stepsCount={stepsCount} buttonProps={nextButtonProps} - isOnPrimary={isOnPrimary} + color={color} /> )} diff --git a/packages/core/src/components/Steps/StepsNumbersHeader.tsx b/packages/core/src/components/Steps/StepsNumbersHeader.tsx index 519e4a7a32..a3ca31d34e 100644 --- a/packages/core/src/components/Steps/StepsNumbersHeader.tsx +++ b/packages/core/src/components/Steps/StepsNumbersHeader.tsx @@ -1,21 +1,29 @@ import cx from "classnames"; -import React, { FC } from "react"; +import React, { FC, useMemo } from "react"; import VibeComponentProps from "../../types/VibeComponentProps"; import Text from "../Text/Text"; import styles from "./StepsNumbersHeader.module.scss"; +import { StepsColor } from "./StepsConstants"; export interface StepsNumbersHeaderProps extends VibeComponentProps { activeStepIndex: number; stepsCount: number; - isOnPrimary?: boolean; + color?: StepsColor; } -export const StepsNumbersHeader: FC = ({ activeStepIndex, stepsCount, isOnPrimary }) => { +export const StepsNumbersHeader: FC = ({ activeStepIndex, stepsCount, color }) => { + const textColor = useMemo(() => { + if (color === StepsColor.PRIMARY) { + return color; + } else { + return color === StepsColor.ON_INVERTED_BACKGROUND ? Text.colors.ON_INVERTED : Text.colors.ON_PRIMARY; + } + }, [color]); + return ( - {`${activeStepIndex + 1} \\ ${stepsCount}`} + // @ts-ignore + {`${ + activeStepIndex + 1 + } \\ ${stepsCount}`} ); }; diff --git a/packages/core/src/components/Steps/__tests__/__snapshots__/steps-snapshot-tests.jest.js.snap b/packages/core/src/components/Steps/__tests__/__snapshots__/steps-snapshot-tests.jest.js.snap index 71c861f4aa..c42c3557c3 100644 --- a/packages/core/src/components/Steps/__tests__/__snapshots__/steps-snapshot-tests.jest.js.snap +++ b/packages/core/src/components/Steps/__tests__/__snapshots__/steps-snapshot-tests.jest.js.snap @@ -29,14 +29,14 @@ exports[`Steps with gallery type renders correctly when hide navigations icons 1
); @@ -166,7 +190,7 @@ const Tipseen: VibeComponent & { hideTrigger={hideTrigger} showTrigger={showTrigger} content={tooltipContent} - theme={Tooltip.themes.Primary} + theme={color === TipseenColor.INVERTED ? TooltipTheme.Dark : TooltipTheme.Primary} justify={justify} containerSelector={containerSelector} disableDialogSlide={false} @@ -189,5 +213,6 @@ export default withStaticProps(Tipseen, { positions: DialogPosition, animationTypes: AnimationType, justifyTypes: JustifyType, - hideShowTriggers: HideShowEvent + hideShowTriggers: HideShowEvent, + colors: TipseenColor }); diff --git a/packages/core/src/components/Tipseen/TipseenBasicContent.module.scss b/packages/core/src/components/Tipseen/TipseenBasicContent.module.scss index 6aaa948bc6..8e26d972ca 100644 --- a/packages/core/src/components/Tipseen/TipseenBasicContent.module.scss +++ b/packages/core/src/components/Tipseen/TipseenBasicContent.module.scss @@ -6,4 +6,11 @@ @include tipseen-content-padding; display: flex; flex-direction: column; + + // this is becasu the designer wanted the padding top + // to be 8px in case the tipseen have both content and image + &:not(:first-child) { + padding-top: var(--spacing-small); + } } + diff --git a/packages/core/src/components/Tipseen/TipseenConstants.ts b/packages/core/src/components/Tipseen/TipseenConstants.ts index 1955482d6e..35cc8e1065 100644 --- a/packages/core/src/components/Tipseen/TipseenConstants.ts +++ b/packages/core/src/components/Tipseen/TipseenConstants.ts @@ -7,7 +7,14 @@ export const TIPSEEN_CLOSE_BUTTON_TEST_ID = "close-tipseen"; export const TIPSEEN_CLOSE_BUTTON_ARIA_LABEL = "Close"; export enum TipseenCloseButtonTheme { LIGHT = "light", - DARK = "dark" + DARK = "dark", + FIXED_LIGHT = "fixed-light", + FIXED_DARK = "fixed-dark" +} + +export enum TipseenColor { + PRIMARY = "primary", + INVERTED = "inverted" } /** diff --git a/packages/core/src/components/Tipseen/TipseenContent.tsx b/packages/core/src/components/Tipseen/TipseenContent.tsx index aa44010c94..d9eb80f7a1 100644 --- a/packages/core/src/components/Tipseen/TipseenContent.tsx +++ b/packages/core/src/components/Tipseen/TipseenContent.tsx @@ -1,15 +1,22 @@ -import React, { FC } from "react"; +import React, { FC, useContext, useMemo } from "react"; import cx from "classnames"; import { NOOP } from "../../utils/function-utils"; import Button from "../../components/Button/Button"; import { backwardCompatibilityForProperties } from "../../helpers/backwardCompatibilityForProperties"; -import { ButtonPropsBackwardCompatible, DISMISS_BUTTON_TEXT, SUBMIT_BUTTON_TEXT } from "./TipseenConstants"; +import { + ButtonPropsBackwardCompatible, + DISMISS_BUTTON_TEXT, + SUBMIT_BUTTON_TEXT, + TipseenColor +} from "./TipseenConstants"; import TipseenBasicContent from "./TipseenBasicContent"; import { VibeComponentProps } from "../../types"; import { ElementContent } from "../../types/ElementContent"; import styles from "./TipseenContent.module.scss"; import { getTestId } from "../../tests/test-ids-utils"; import { ComponentDefaultTestId } from "../../tests/constants"; +import { TipseenContext } from "./Tipseen"; +import { ButtonColor } from "../Button/ButtonConstants"; const EMPTY_OBJECT: ButtonPropsBackwardCompatible = {}; @@ -79,6 +86,10 @@ const TipseenContent: FC = ({ SUBMIT_BUTTON_TEXT ); const overrideSubmitOnClick = backwardCompatibilityForProperties([onSubmit, submitDeprecatedOnClick], NOOP); + const color = useContext(TipseenContext); + const buttonColor = useMemo(() => { + return color === TipseenColor.INVERTED ? ButtonColor.ON_INVERTED_BACKGROUND : ButtonColor.ON_PRIMARY_COLOR; + }, [color]); return ( @@ -87,7 +98,7 @@ const TipseenContent: FC = ({ {overrideHideDismiss ? null : (