Skip to content
Merged
Show file tree
Hide file tree
Changes from 32 commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
bf86e07
feat(time-input): add utils for toggling select and formatparts
shaneeza Nov 26, 2025
612b474
wip
shaneeza Nov 30, 2025
a578ecb
refactor(time-input): enhance time formatting utilities and improve d…
shaneeza Dec 1, 2025
804cd88
refactor(time-input): improve time input handling and formatting logic
shaneeza Dec 1, 2025
1db42af
feat(time-input): add TimeFormField and TimeFormFieldInputContainer c…
shaneeza Dec 1, 2025
206e145
temp remove ts check
shaneeza Dec 1, 2025
bb3916d
refactor(time-input): clean up unused select unit logic and improve s…
shaneeza Dec 1, 2025
df69d22
feat(time-input): enhance TimeInput component with new constants for …
shaneeza Dec 2, 2025
2f5707f
refactor(time-input): update time segment rules and default values to…
shaneeza Dec 2, 2025
9715407
refactor(time-input): simplify getFormatParts function by removing lo…
shaneeza Dec 2, 2025
dad7b62
test(time-input): add unit tests for getFormatParts utility to verify…
shaneeza Dec 2, 2025
f559593
refactor(time-input): remove locale dependency from formatParts in Ti…
shaneeza Dec 2, 2025
3e6f6be
feat(time-input): add default time parts and enhance time input conte…
shaneeza Dec 3, 2025
1ef4c97
merge conflits
shaneeza Dec 3, 2025
87023fb
feat(time-input): enhance TimeInput stories with new argTypes for dar…
shaneeza Dec 3, 2025
580c90f
test(time-input): add comprehensive unit tests for TimeInputSegment c…
shaneeza Dec 3, 2025
2495aa1
test(time-input): add comprehensive unit tests for TimeInputSegment c…
shaneeza Dec 3, 2025
4cad730
refactor(time-input): update time segment handling to use explicit is…
shaneeza Dec 3, 2025
1afe57e
refactor(time-input): rename shouldShowSelect to is12hFormat for clar…
shaneeza Dec 12, 2025
cb84996
refactor(time-input): clean up unused state and comments in TimeInput…
shaneeza Dec 12, 2025
6e265a7
chore(pnpm-lock): add workspace links for @leafygreen-ui/input-box to…
shaneeza Dec 12, 2025
2547fdc
refactor(time-input): remove unused console logs and simplify time fo…
shaneeza Dec 12, 2025
10d4039
merge conflict
shaneeza Dec 12, 2025
e46a73c
refactor(time-input): clean up comments and improve test descriptions…
shaneeza Dec 12, 2025
94ed98f
refactor(time-input): remove outdated TODO comment in TimeInputContex…
shaneeza Dec 12, 2025
7e42f34
merge conflict
shaneeza Dec 12, 2025
2d2fbd5
Merge branch 'shaneeza/segment-logic-integration' of github.com:mongo…
shaneeza Dec 12, 2025
d9b99ec
Merge branch 'LG-5538/segments-parse-time' of github.com:mongodb/leaf…
shaneeza Dec 12, 2025
f07a1b8
merge conflict
shaneeza Dec 12, 2025
ed87ee7
test(time-input): add unit tests for TimeInputBox component
shaneeza Dec 14, 2025
e18c444
feat(time-input): integrate LGIDs into TimeInput components for impro…
shaneeza Dec 14, 2025
a361ba7
test(time-input): add test to verify seconds input is not rendered wh…
shaneeza Dec 14, 2025
aa4e7a2
feat(time-input): implement getNonLiteralTimeParts utility function w…
shaneeza Dec 16, 2025
d38ee94
refactor(time-input): rename defaultTimeParts to defaultDateTimeParts…
shaneeza Dec 16, 2025
d57c109
refactor(time-input): simplify import structure for getFormatPartsVal…
shaneeza Dec 16, 2025
aff3376
refactor(time-input): enhance getFormatter utility to conditionally i…
shaneeza Dec 16, 2025
9e343ff
refactor(time-input): consolidate imports for utility functions in Ti…
shaneeza Dec 16, 2025
346cb74
feat(time-input): add getFormattedDateTimeParts utility with tests fo…
shaneeza Dec 19, 2025
31dba0b
refactor(time-input): rename TimeParts to DateTimeParts and update re…
shaneeza Dec 19, 2025
388339e
refactor(time-input): update documentation in getFormattedDateTimePar…
shaneeza Dec 19, 2025
cea6a1d
merge conflict
shaneeza Dec 19, 2025
8abc708
refactor(time-input): remove unused state and error message from Time…
shaneeza Dec 19, 2025
4458f6f
refactor(time-input): update styles for seamless input display and cl…
shaneeza Dec 19, 2025
5455489
Merge branch 'shaneeza/segment-logic-integration' of github.com:mongo…
shaneeza Dec 19, 2025
237c4ee
chore(version): update version to 5.2.0
shaneeza Dec 19, 2025
617ebb7
Merge branch 'LG-5538/segments-parse-time' of github.com:mongodb/leaf…
shaneeza Dec 19, 2025
a736467
merge conflict
shaneeza Dec 19, 2025
c9751da
fix(time-input): update minExplicitValue for hour segment to ensure c…
shaneeza Dec 19, 2025
7ccb116
feat(time-input): enhance time input context and segment change event…
shaneeza Dec 20, 2025
2b4acae
refactor(time-input): remove unused TimeInputDisplayContext utility file
shaneeza Dec 20, 2025
574a23a
refactor(time-input): streamline imports and enhance context utility …
shaneeza Dec 20, 2025
96b9ebd
feat(time-input): add TimeInputDisplayContext utility functions and d…
shaneeza Dec 20, 2025
e032c8b
refactor(time-input): update imports to use TimeInputDisplayContext u…
shaneeza Dec 20, 2025
a04fca7
refactor(time-input): update component props to use ComponentPropsWit…
shaneeza Dec 22, 2025
379f871
refactor(time-input): move time segment rules and default min/max fun…
shaneeza Dec 22, 2025
4a62b19
refactor(time-input): simplify aria attributes in TimeFormFieldInputC…
shaneeza Dec 22, 2025
e88a937
refactor(time-input): remove unused TimeInputSegmentChangeEvent type …
shaneeza Dec 22, 2025
a714dc8
refactor(time-input): rename defaultPlaceholder to defaultPlaceholder…
shaneeza Dec 22, 2025
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 @@ -54,8 +54,12 @@ export const useDateSegments = (
(isNull(date) || isUndefined(date)) && isValidDate(prevDate);

if (hasDateValueChanged || hasDateBeenCleared) {
// This returns a new state object with the updated segments from the new date
const newSegments = getFormattedSegmentsFromDate(date);
// Pass the new state and a copy of the previous state to the callback
onUpdate?.(newSegments, { ...segments });
// This updates all segments in the internal state of the hook
// This internally invokes `dateSegmentsReducer` and passes `updateObject` as the second argument. `segments` is the first argument. This updates the internal state of the hook.
dispatch(newSegments);
}
}, [date, onUpdate, prevDate, segments]);
Expand All @@ -69,8 +73,11 @@ export const useDateSegments = (
// finally, commit the new state

const updateObject = { [segment]: value };
// This returns a new state object with the updated segment
const nextState = dateSegmentsReducer(segments, updateObject);
// Pass the new state and a copy of the previous state to the callback
onUpdate?.(nextState, { ...segments }, segment);
// This internally invokes `dateSegmentsReducer` and passes `updateObject` as the second argument. `segments` is the first argument. This updates the internal state of the hook.
dispatch(updateObject);
};

Expand Down
1 change: 1 addition & 0 deletions packages/time-input/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"@leafygreen-ui/emotion": "workspace:^",
"@leafygreen-ui/form-field": "workspace:^",
"@leafygreen-ui/hooks": "workspace:^",
"@leafygreen-ui/input-box": "workspace:^",
"@leafygreen-ui/lib": "workspace:^",
"@leafygreen-ui/palette": "workspace:^",
"@leafygreen-ui/select": "workspace:^",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ import React, {
useState,
} from 'react';
import defaults from 'lodash/defaults';
import defaultTo from 'lodash/defaultTo';

import { hasDayPeriod } from '../../utils';
import { getFormatParts } from '../../utils/getFormatParts/getFormatParts';

import {
TimeInputDisplayContextProps,
Expand Down Expand Up @@ -37,7 +41,27 @@ export const TimeInputDisplayProvider = ({
...defaults(rest, defaultTimeInputDisplayContext),
};

// TODO: min, max helpers
/**
* Determines if the input should show a select for the day period (AM/PM)
*/
const is12HourFormat = !!hasDayPeriod(providerValue.locale);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const is12HourFormat = !!hasDayPeriod(providerValue.locale);
const is12HourFormat = hasDayPeriod(providerValue.locale);


/**
* Only used to track the presentation format of the segments, not the value itself
*/
const formatParts = getFormatParts({
showSeconds: providerValue.showSeconds,
});

/**
* Gets the time zone from the provider value or the browser's default
*/
const timeZone = defaultTo(
providerValue.timeZone,
Intl.DateTimeFormat().resolvedOptions().timeZone,
);

// TODO: min, max helpers will be in a future PR
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Would be helpful to create a backlog ticket for this and reference that in this comment

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm just gonna remove this


return (
<TimeInputDisplayContext.Provider
Expand All @@ -48,6 +72,9 @@ export const TimeInputDisplayProvider = ({
ariaLabelledbyProp,
isDirty,
setIsDirty,
is12HourFormat,
formatParts,
timeZone,
}}
>
{children}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { AriaLabelPropsWithLabel } from '@leafygreen-ui/a11y';
import { DarkModeProps } from '@leafygreen-ui/lib';

import { DisplayTimeInputProps } from '../../TimeInput/TimeInput.types';
import { GetLgIdsReturnType } from '../../utils/getLgIds';

type AriaLabelKeys = keyof AriaLabelPropsWithLabel;
type AriaLabelKeysWithoutLabel = Exclude<AriaLabelKeys, 'label'>;
Expand Down Expand Up @@ -38,6 +39,24 @@ export type TimeInputDisplayContextProps = Omit<
* Setter for whether the input has been interacted with
*/
setIsDirty: React.Dispatch<React.SetStateAction<boolean>>;

/**
* Whether the time input is in 12-hour format. Helps determine if the AM/PM select should be shown.
*
* @default false
*/
is12HourFormat: boolean;

/**
* An array of {@link Intl.DateTimeFormatPart},
* used to determine the order of segments in the input
*/
formatParts?: Array<Intl.DateTimeFormatPart>;

/**
* LGIDs for the code snippet.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to update comment?

*/
lgIds: GetLgIdsReturnType;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you remind me what this pattern is for? It seems odd to pass these down through props and can't remember why it's necessary

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah, this is so that nested child components have access to the dynamic LGIDs.

};

/**
Expand All @@ -62,4 +81,9 @@ export type TimeInputDisplayProviderProps = Omit<
* The aria-labelledby prop
*/
'aria-labelledby'?: string;

/**
* LGIDs for the code snippet.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to update comment?

*/
lgIds?: GetLgIdsReturnType;
};
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,17 @@ import {
import { BaseFontSize } from '@leafygreen-ui/tokens';

import { Size } from '../../TimeInput/TimeInput.types';
import { getLgIds } from '../../utils/getLgIds';

import {
TimeInputDisplayContextProps,
TimeInputDisplayProviderProps,
} from './TimeInputDisplayContext.types';

export type DisplayContextPropKeys = keyof TimeInputDisplayProviderProps;
export type DisplayContextPropKeys = Exclude<
keyof TimeInputDisplayProviderProps,
'lgIds'
>;

/**
* Props names that that are added to the context and used to pick and omit props
Expand All @@ -31,6 +35,7 @@ export const displayContextPropNames: Array<DisplayContextPropKeys> = [
'size',
'errorMessage',
'state',
'showSeconds',
];

/**
Expand All @@ -51,4 +56,7 @@ export const defaultTimeInputDisplayContext: TimeInputDisplayContextProps = {
errorMessage: '',
isDirty: false,
setIsDirty: () => {},
is12HourFormat: false,
showSeconds: true,
lgIds: getLgIds(),
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
import React from 'react';

import { FormField } from '@leafygreen-ui/form-field';

import { useTimeInputDisplayContext } from '../../Context/TimeInputDisplayContext';

import { TimeFormFieldProps } from './TimeFormField.types';

/**
* A wrapper around `FormField` that sets the relevant
* attributes, and styling
*/
export const TimeFormField = React.forwardRef<
HTMLDivElement,
TimeFormFieldProps
>(({ children, ...rest }: TimeFormFieldProps, fwdRef) => {
const {
label,
description,
// stateNotification: { state, message: errorMessage },
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

do we need to remove this?

disabled,
size,
} = useTimeInputDisplayContext();

return (
<FormField
label={label}
description={description}
disabled={disabled}
// state={state}
// errorMessage={errorMessage}
size={size}
ref={fwdRef}
{...rest}
>
{children}
</FormField>
);
});

TimeFormField.displayName = 'TimeFormField';
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { FormFieldProps } from '@leafygreen-ui/form-field';

export type TimeFormFieldProps = React.ComponentPropsWithoutRef<'div'> & {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be ComponentPropsWithRef?

Copy link
Collaborator Author

@shaneeza shaneeza Dec 20, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If a component is wrapped in a forwardRef, you should use ComponentPropsWithoutRef because the ref shouldn't be included with the props. React gives you the ref as the second parameter in the forwardRef callback function. Will update!

children: FormFieldProps['children'];
};
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { css, cx } from '@leafygreen-ui/emotion';

const selectStyles = css`
border-top-right-radius: 0;
border-bottom-right-radius: 0;
`;

const baseStyles = css`
&:hover,
&:focus-within {
z-index: 1;
}
`;

export const getContainerStyles = ({
is12HourFormat,
}: {
is12HourFormat: boolean;
}) =>
cx(baseStyles, {
[selectStyles]: is12HourFormat,
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

might be worth adding a comment on why we're removing border radius for 12hr format

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

since this is a pattern that exists in NumberInput as well, what do you think about building this into FormFieldInputContainer itself?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think that is a good idea, but I would want to spend some more time thinking of a good pattern to support removing border-radius on the left and right sides of the input. Since I'm on a tight deadline, I can create a ticket to look into this.

});
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import React from 'react';

import { FormFieldInputContainer } from '@leafygreen-ui/form-field';

import { useTimeInputDisplayContext } from '../../Context/TimeInputDisplayContext';

import { getContainerStyles } from './TimeFormFieldInputContainer.styles';
import { TimeFormFieldInputContainerProps } from './TimeFormFieldInputContainer.types';

/**
* A wrapper around `FormField` that sets the relevant
* attributes, and styling
*/
export const TimeFormFieldInputContainer = React.forwardRef<
HTMLDivElement,
TimeFormFieldInputContainerProps
>(({ children, onInputClick }: TimeFormFieldInputContainerProps, fwdRef) => {
const { label, ariaLabelProp, ariaLabelledbyProp, is12HourFormat } =
useTimeInputDisplayContext();

return (
<FormFieldInputContainer
ref={fwdRef}
role="combobox"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Time input isn't a combobox. I's just a text input

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

whoopsie

tabIndex={-1}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

is it worth adding a comment about why we need to include this?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think I need this, removing

aria-label={!label && ariaLabelProp ? ariaLabelProp : undefined}
aria-labelledby={
!label && !ariaLabelProp && ariaLabelledbyProp
? ariaLabelledbyProp
: undefined
}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe these should be passed to FormField and this logic is abstracted in useFormFieldProps

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated!

onClick={onInputClick}
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

similar to above note, should this not be passed to FormField?

Copy link
Collaborator Author

@shaneeza shaneeza Dec 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I want this click to be on the input only, not the label, description, and input.

Copy link
Collaborator

@stephl3 stephl3 Dec 22, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's difficult to provide feedback on this because it's unclear what it's getting used for. Is it possible to add some docs for what this is used for or add it when it gets used? If it's actually for the *InputContainer and not the input element, any reason not to use the native onClick attribute?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I can remove this for now

className={getContainerStyles({ is12HourFormat })}
>
{children}
</FormFieldInputContainer>
);
});

TimeFormFieldInputContainer.displayName = 'TimeFormFieldInputContainer';
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { FormFieldProps } from '@leafygreen-ui/form-field';

export type TimeFormFieldInputContainerProps =
React.ComponentPropsWithoutRef<'div'> & {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this one also use ComponentPropsWithRef?

children: FormFieldProps['children'];
onInputClick?: React.MouseEventHandler<HTMLDivElement>;
};
2 changes: 2 additions & 0 deletions packages/time-input/src/TimeFormField/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { TimeFormField } from './TimeFormField/TimeFormField';
export { TimeFormFieldInputContainer } from './TimeFormFieldInputContainer/TimeFormFieldInputContainer';
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

any reason not to use barrel files for these?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

these were missed, will update!

50 changes: 47 additions & 3 deletions packages/time-input/src/TimeInput.stories.tsx
Original file line number Diff line number Diff line change
@@ -1,19 +1,63 @@
import React from 'react';
import { type StoryMetaType } from '@lg-tools/storybook-utils';
import React, { useState } from 'react';
import {
storybookArgTypes,
type StoryMetaType,
} from '@lg-tools/storybook-utils';
import { StoryFn } from '@storybook/react';

import { DateType, SupportedLocales } from '@leafygreen-ui/date-utils';

import { Size } from './TimeInput/TimeInput.types';
import { TimeInput } from '.';

const meta: StoryMetaType<typeof TimeInput> = {
title: 'Components/Inputs/TimeInput',
component: TimeInput,
parameters: {
default: 'LiveExample',
controls: {
exclude: [
'handleValidation',
'initialValue',
'onChange',
'onDateChange',
'onSegmentChange',
'value',
'onTimeChange',
'data-lgid',
'data-testid',
],
},
},
args: {
showSeconds: true,
locale: SupportedLocales.ISO_8601,
timeZone: 'UTC',
label: 'Time Input',
darkMode: false,
size: Size.Default,
},
argTypes: {
locale: { control: 'select', options: Object.values(SupportedLocales) },
timeZone: {
control: 'select',
options: [undefined, 'UTC', 'America/New_York', 'Europe/London'],
},
darkMode: storybookArgTypes.darkMode,
size: { control: 'select', options: Object.values(Size) },
},
};

export default meta;

const Template: StoryFn<typeof TimeInput> = props => <TimeInput {...props} />;
const Template: StoryFn<typeof TimeInput> = props => {
const [value, setValue] = useState<DateType | undefined>(
new Date('1990-02-20T14:30:50Z'),
);

return (
<TimeInput {...props} value={value} onTimeChange={time => setValue(time)} />
);
};

export const LiveExample = Template.bind({});
6 changes: 4 additions & 2 deletions packages/time-input/src/TimeInput/TimeInput.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ import {
displayContextPropNames,
} from '../Context/TimeInputDisplayContext/TimePickerDisplayContext.utils';
import { TimeInputContent } from '../TimeInputContent';
import { getLgIds } from '../utils/getLgIds';

import { TimeInputProps } from './TimeInput.types';

Expand All @@ -26,7 +27,7 @@ export const TimeInput = forwardRef<HTMLDivElement, TimeInputProps>(
onTimeChange: onChangeProp,
handleValidation,
initialValue: initialValueProp,
'data-lgid': _dataLgId,
'data-lgid': dataLgId,
darkMode: darkModeProp,
baseFontSize: basefontSizeProp,
...props
Expand All @@ -35,6 +36,7 @@ export const TimeInput = forwardRef<HTMLDivElement, TimeInputProps>(
) => {
const { darkMode } = useDarkMode(darkModeProp);
const baseFontSize = useUpdatedBaseFontSize(basefontSizeProp);
const lgIds = getLgIds(dataLgId);

const { value, updateValue } = useControlled<DateType | undefined>(
valueProp,
Expand All @@ -55,7 +57,7 @@ export const TimeInput = forwardRef<HTMLDivElement, TimeInputProps>(
darkMode={darkMode}
baseFontSize={baseFontSize === BaseFontSize.Body1 ? 14 : baseFontSize}
>
<TimeInputDisplayProvider {...displayProps}>
<TimeInputDisplayProvider {...displayProps} lgIds={lgIds}>
<TimeInputProvider
value={value}
setValue={updateValue}
Expand Down
7 changes: 7 additions & 0 deletions packages/time-input/src/TimeInput/TimeInput.types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,13 @@ export type DisplayTimeInputProps = {
* A message to show in red underneath the input when state is `Error`
*/
errorMessage?: string;

/**
* Whether to show seconds in the input.
*
* @default true
*/
showSeconds?: boolean;
} & DarkModeProps &
AriaLabelPropsWithLabel;

Expand Down
Loading
Loading