diff --git a/packages/x-date-pickers/src/TimeClock/Clock.tsx b/packages/x-date-pickers/src/TimeClock/Clock.tsx index 26d69784720da..f47484d497ecf 100644 --- a/packages/x-date-pickers/src/TimeClock/Clock.tsx +++ b/packages/x-date-pickers/src/TimeClock/Clock.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import clsx from 'clsx'; import IconButton from '@mui/material/IconButton'; import Typography from '@mui/material/Typography'; -import { styled, useThemeProps } from '@mui/material/styles'; +import { styled, useThemeProps, Theme } from '@mui/material/styles'; import { unstable_useEnhancedEffect as useEnhancedEffect, unstable_composeClasses as composeClasses, @@ -16,6 +16,7 @@ import { CLOCK_HOUR_WIDTH, getHours, getMinutes } from './shared'; import { PickerValidDate, TimeView } from '../models'; import { ClockClasses, getClockUtilityClass } from './clockClasses'; import { formatMeridiem } from '../internals/utils/date-utils'; +import { Meridiem } from '../internals/utils/time-utils'; export interface ClockProps extends ReturnType { @@ -47,15 +48,15 @@ export interface ClockProps } const useUtilityClasses = (ownerState: ClockProps) => { - const { classes } = ownerState; + const { classes, meridiemMode } = ownerState; const slots = { root: ['root'], clock: ['clock'], wrapper: ['wrapper'], squareMask: ['squareMask'], pin: ['pin'], - amButton: ['amButton'], - pmButton: ['pmButton'], + amButton: ['amButton', meridiemMode === 'am' && 'selected'], + pmButton: ['pmButton', meridiemMode === 'pm' && 'selected'], meridiemText: ['meridiemText'], }; @@ -145,21 +146,15 @@ const ClockPin = styled('div', { transform: 'translate(-50%, -50%)', })); -const ClockAmButton = styled(IconButton, { - name: 'MuiClock', - slot: 'AmButton', - overridesResolver: (_, styles) => styles.amButton, -})<{ ownerState: ClockProps }>(({ theme }) => ({ +const meridiemButtonCommonStyles = (theme: Theme, meridiemMode: Meridiem) => ({ zIndex: 1, - position: 'absolute', bottom: 8, - left: 8, paddingLeft: 4, paddingRight: 4, width: CLOCK_HOUR_WIDTH, variants: [ { - props: { meridiemMode: 'am' }, + props: { meridiemMode }, style: { backgroundColor: (theme.vars || theme).palette.primary.main, color: (theme.vars || theme).palette.primary.contrastText, @@ -169,6 +164,17 @@ const ClockAmButton = styled(IconButton, { }, }, ], +}); + +const ClockAmButton = styled(IconButton, { + name: 'MuiClock', + slot: 'AmButton', + overridesResolver: (_, styles) => styles.amButton, +})<{ ownerState: ClockProps }>(({ theme }) => ({ + ...meridiemButtonCommonStyles(theme, 'am'), + // keeping it here to make TS happy + position: 'absolute', + left: 8, })); const ClockPmButton = styled(IconButton, { @@ -176,25 +182,10 @@ const ClockPmButton = styled(IconButton, { slot: 'PmButton', overridesResolver: (_, styles) => styles.pmButton, })<{ ownerState: ClockProps }>(({ theme }) => ({ - zIndex: 1, + ...meridiemButtonCommonStyles(theme, 'pm'), + // keeping it here to make TS happy position: 'absolute', - bottom: 8, right: 8, - paddingLeft: 4, - paddingRight: 4, - width: CLOCK_HOUR_WIDTH, - variants: [ - { - props: { meridiemMode: 'pm' }, - style: { - backgroundColor: (theme.vars || theme).palette.primary.main, - color: (theme.vars || theme).palette.primary.contrastText, - '&:hover': { - backgroundColor: (theme.vars || theme).palette.primary.light, - }, - }, - }, - ], })); const ClockMeridiemText = styled(Typography, { diff --git a/packages/x-date-pickers/src/TimeClock/clockClasses.ts b/packages/x-date-pickers/src/TimeClock/clockClasses.ts index 19c25b5c6cbd5..76695b1adc88d 100644 --- a/packages/x-date-pickers/src/TimeClock/clockClasses.ts +++ b/packages/x-date-pickers/src/TimeClock/clockClasses.ts @@ -20,6 +20,8 @@ export interface ClockClasses { pmButton: string; /** Styles applied to the meridiem typography element. */ meridiemText: string; + /** Styles applied to the selected meridiem button element */ + selected: string; } export type ClockClassKey = keyof ClockClasses; @@ -37,4 +39,5 @@ export const clockClasses: ClockClasses = generateUtilityClasses('MuiClock', [ 'amButton', 'pmButton', 'meridiemText', + 'selected', ]);