@utilitywarehouse/hearth-react-native 0.36.1 → 0.36.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (226) hide show
  1. package/SKILL.md +27 -16
  2. package/build/components/Accordion/Accordion.d.ts +4 -0
  3. package/build/components/Accordion/Accordion.js +4 -0
  4. package/build/components/Accordion/Accordion.props.d.ts +2 -0
  5. package/build/components/Alert/Alert.d.ts +4 -0
  6. package/build/components/Alert/Alert.js +4 -0
  7. package/build/components/Avatar/Avatar.d.ts +4 -0
  8. package/build/components/Avatar/Avatar.js +4 -0
  9. package/build/components/Badge/Badge.d.ts +4 -0
  10. package/build/components/Badge/Badge.js +4 -0
  11. package/build/components/Badge/Badge.props.d.ts +19 -0
  12. package/build/components/Banner/Banner.d.ts +5 -0
  13. package/build/components/Banner/Banner.js +5 -0
  14. package/build/components/Banner/BannerIllustration.d.ts +4 -0
  15. package/build/components/Banner/BannerIllustration.js +4 -0
  16. package/build/components/Banner/BannerImage.d.ts +4 -0
  17. package/build/components/Banner/BannerImage.js +4 -0
  18. package/build/components/BodyText/BodyText.d.ts +4 -0
  19. package/build/components/BodyText/BodyText.js +4 -0
  20. package/build/components/BottomSheet/BottomSheet.d.ts +6 -0
  21. package/build/components/BottomSheet/BottomSheet.js +6 -0
  22. package/build/components/BottomSheet/BottomSheet.props.d.ts +2 -0
  23. package/build/components/Box/Box.d.ts +4 -0
  24. package/build/components/Box/Box.js +4 -0
  25. package/build/components/Box/Box.props.d.ts +2 -0
  26. package/build/components/Button/Button.d.ts +4 -0
  27. package/build/components/Button/Button.js +4 -0
  28. package/build/components/Button/Button.props.d.ts +129 -0
  29. package/build/components/Card/Card.d.ts +4 -0
  30. package/build/components/Card/Card.js +4 -0
  31. package/build/components/Card/Card.props.d.ts +19 -1
  32. package/build/components/Card/CardAction/CardAction.d.ts +4 -0
  33. package/build/components/Card/CardAction/CardAction.js +4 -0
  34. package/build/components/Card/CardAction/CardAction.props.d.ts +23 -0
  35. package/build/components/Card/CardPressHandler.d.ts +8 -3
  36. package/build/components/Card/CardPressHandler.js +3 -0
  37. package/build/components/Carousel/Carousel.d.ts +3 -0
  38. package/build/components/Carousel/Carousel.js +3 -0
  39. package/build/components/Carousel/Carousel.props.d.ts +37 -0
  40. package/build/components/Center/Center.d.ts +3 -0
  41. package/build/components/Center/Center.js +3 -0
  42. package/build/components/Checkbox/Checkbox.d.ts +3 -0
  43. package/build/components/Checkbox/Checkbox.js +3 -0
  44. package/build/components/Checkbox/Checkbox.props.d.ts +20 -0
  45. package/build/components/Checkbox/CheckboxGroup.d.ts +3 -0
  46. package/build/components/Checkbox/CheckboxGroup.js +3 -0
  47. package/build/components/Checkbox/CheckboxGroup.props.d.ts +24 -0
  48. package/build/components/Combobox/Combobox.d.ts +3 -0
  49. package/build/components/Combobox/Combobox.js +3 -0
  50. package/build/components/Container/Container.d.ts +3 -0
  51. package/build/components/Container/Container.js +3 -0
  52. package/build/components/CurrencyInput/CurrencyInput.d.ts +3 -0
  53. package/build/components/CurrencyInput/CurrencyInput.js +3 -0
  54. package/build/components/CurrencyInput/CurrencyInput.props.d.ts +25 -0
  55. package/build/components/DateInput/DateInput.d.ts +4 -0
  56. package/build/components/DateInput/DateInput.js +4 -0
  57. package/build/components/DateInput/DateInput.props.d.ts +3 -0
  58. package/build/components/DatePicker/DatePicker.context.d.ts +1 -0
  59. package/build/components/DatePicker/DatePicker.d.ts +14 -0
  60. package/build/components/DatePicker/DatePicker.js +31 -0
  61. package/build/components/DatePicker/DatePicker.props.d.ts +78 -0
  62. package/build/components/DatePicker/DatePickerFooter.js +6 -2
  63. package/build/components/DatePickerInput/DatePickerInput.d.ts +5 -1
  64. package/build/components/DatePickerInput/DatePickerInput.js +15 -5
  65. package/build/components/DatePickerInput/DatePickerInput.props.d.ts +28 -0
  66. package/build/components/DescriptionList/DescriptionList.d.ts +4 -0
  67. package/build/components/DescriptionList/DescriptionList.js +4 -0
  68. package/build/components/DescriptionList/DescriptionList.props.d.ts +4 -0
  69. package/build/components/DetailText/DetailText.d.ts +4 -0
  70. package/build/components/DetailText/DetailText.js +4 -0
  71. package/build/components/Divider/Divider.d.ts +4 -0
  72. package/build/components/Divider/Divider.js +4 -0
  73. package/build/components/Divider/Divider.props.d.ts +10 -0
  74. package/build/components/Expandable/Expandable.d.ts +5 -0
  75. package/build/components/Expandable/Expandable.js +5 -0
  76. package/build/components/ExpandableCard/ExpandableCard.d.ts +4 -0
  77. package/build/components/ExpandableCard/ExpandableCard.js +4 -0
  78. package/build/components/Flex/Flex.d.ts +4 -0
  79. package/build/components/Flex/Flex.js +4 -0
  80. package/build/components/Flex/Flex.props.d.ts +20 -0
  81. package/build/components/FormField/FormField.d.ts +5 -0
  82. package/build/components/FormField/FormField.js +5 -0
  83. package/build/components/FormField/FormField.props.d.ts +24 -0
  84. package/build/components/Grid/Grid.d.ts +4 -0
  85. package/build/components/Grid/Grid.js +4 -0
  86. package/build/components/HTMLElements/ListItem.d.ts +5 -0
  87. package/build/components/HTMLElements/OrderedList.d.ts +10 -0
  88. package/build/components/HTMLElements/OrderedList.js +4 -0
  89. package/build/components/HTMLElements/UnorderedList.d.ts +10 -0
  90. package/build/components/HTMLElements/UnorderedList.js +4 -0
  91. package/build/components/Heading/Heading.d.ts +4 -0
  92. package/build/components/Heading/Heading.js +4 -0
  93. package/build/components/HighlightBanner/HighlightBanner.d.ts +5 -0
  94. package/build/components/HighlightBanner/HighlightBanner.js +5 -0
  95. package/build/components/HighlightBanner/HighlightBanner.props.d.ts +14 -0
  96. package/build/components/HighlightBanner/HighlightBannerImage.d.ts +4 -0
  97. package/build/components/HighlightBanner/HighlightBannerImage.js +4 -0
  98. package/build/components/Icon/Icon.d.ts +4 -0
  99. package/build/components/Icon/Icon.js +4 -0
  100. package/build/components/Icon/Icon.props.d.ts +8 -0
  101. package/build/components/IconButton/IconButton.d.ts +5 -0
  102. package/build/components/IconButton/IconButton.js +5 -0
  103. package/build/components/IconButton/IconButton.props.d.ts +9 -0
  104. package/build/components/IconContainer/IconContainer.d.ts +4 -0
  105. package/build/components/IconContainer/IconContainer.js +4 -0
  106. package/build/components/IndicatorIconButton/IndicatorIconButton.d.ts +6 -0
  107. package/build/components/IndicatorIconButton/IndicatorIconButton.js +6 -0
  108. package/build/components/InlineLink/InlineLink.d.ts +1 -0
  109. package/build/components/InlineLink/InlineLink.js +1 -0
  110. package/build/components/InlineLink/InlineLink.props.d.ts +4 -0
  111. package/build/components/Input/Input.d.ts +5 -0
  112. package/build/components/Input/Input.js +5 -0
  113. package/build/components/Input/Input.props.d.ts +54 -0
  114. package/build/components/Link/Link.d.ts +5 -0
  115. package/build/components/Link/Link.js +5 -0
  116. package/build/components/Link/Link.props.d.ts +15 -0
  117. package/build/components/List/List.d.ts +1 -0
  118. package/build/components/List/List.js +1 -0
  119. package/build/components/List/List.props.d.ts +8 -0
  120. package/build/components/Menu/Menu.d.ts +1 -0
  121. package/build/components/Menu/Menu.js +1 -0
  122. package/build/components/Modal/Modal.d.ts +5 -0
  123. package/build/components/Modal/Modal.js +5 -0
  124. package/build/components/Modal/Modal.props.d.ts +6 -0
  125. package/build/components/Modal/Modal.shared.types.d.ts +32 -0
  126. package/build/components/Modal/ModalImage.d.ts +1 -0
  127. package/build/components/Modal/ModalImage.js +1 -0
  128. package/build/components/NavModal/NavModal.d.ts +8 -0
  129. package/build/components/NavModal/NavModal.js +8 -0
  130. package/build/components/NavModal/NavModal.props.d.ts +10 -0
  131. package/build/components/Pagination/Pagination.d.ts +5 -0
  132. package/build/components/Pagination/Pagination.js +5 -0
  133. package/build/components/PillGroup/Pill.d.ts +1 -0
  134. package/build/components/PillGroup/Pill.js +1 -0
  135. package/build/components/PillGroup/PillGroup.d.ts +5 -0
  136. package/build/components/PillGroup/PillGroup.js +5 -0
  137. package/build/components/ProgressBar/ProgressBar.d.ts +5 -0
  138. package/build/components/ProgressBar/ProgressBar.js +5 -0
  139. package/build/components/ProgressBar/ProgressBar.props.d.ts +4 -0
  140. package/build/components/ProgressStepper/ProgressStep.d.ts +13 -0
  141. package/build/components/ProgressStepper/ProgressStep.js +5 -0
  142. package/build/components/ProgressStepper/ProgressStepper.d.ts +5 -0
  143. package/build/components/ProgressStepper/ProgressStepper.js +5 -0
  144. package/build/components/Radio/Radio.d.ts +5 -0
  145. package/build/components/Radio/Radio.js +5 -0
  146. package/build/components/Radio/Radio.props.d.ts +17 -0
  147. package/build/components/Radio/RadioGroup.d.ts +5 -0
  148. package/build/components/Radio/RadioGroup.js +5 -0
  149. package/build/components/Radio/RadioGroup.props.d.ts +25 -0
  150. package/build/components/RadioCard/RadioCard.d.ts +10 -0
  151. package/build/components/RadioCard/RadioCard.js +10 -0
  152. package/build/components/RadioCard/RadioCard.props.d.ts +14 -0
  153. package/build/components/RadioCard/RadioCardGroup.d.ts +4 -0
  154. package/build/components/RadioCard/RadioCardGroup.js +4 -0
  155. package/build/components/RadioCard/RadioCardGroup.props.d.ts +17 -0
  156. package/build/components/Rating/Rating.d.ts +5 -0
  157. package/build/components/Rating/Rating.js +5 -0
  158. package/build/components/Roundel/Roundel.d.ts +1 -0
  159. package/build/components/Roundel/Roundel.js +1 -0
  160. package/build/components/SectionHeader/SectionHeader.d.ts +1 -0
  161. package/build/components/SectionHeader/SectionHeader.js +1 -0
  162. package/build/components/SectionHeader/SectionHeader.props.d.ts +7 -0
  163. package/build/components/SegmentedControl/SegmentedControl.d.ts +5 -0
  164. package/build/components/SegmentedControl/SegmentedControl.js +5 -0
  165. package/build/components/Select/Select.d.ts +5 -0
  166. package/build/components/Select/Select.js +5 -0
  167. package/build/components/Skeleton/Skeleton.d.ts +1 -0
  168. package/build/components/Skeleton/Skeleton.js +1 -0
  169. package/build/components/Skeleton/Skeleton.props.d.ts +4 -0
  170. package/build/components/Spinner/Spinner.d.ts +4 -0
  171. package/build/components/Spinner/Spinner.js +8 -0
  172. package/build/components/Spinner/Spinner.props.d.ts +5 -0
  173. package/build/components/Spinner/Spinner.web.d.ts +4 -0
  174. package/build/components/Spinner/Spinner.web.js +8 -0
  175. package/build/components/StepperInput/StepperInput.d.ts +4 -0
  176. package/build/components/StepperInput/StepperInput.js +4 -0
  177. package/build/components/StepperInput/StepperInput.props.d.ts +44 -0
  178. package/build/components/Switch/Switch.d.ts +4 -0
  179. package/build/components/Switch/Switch.js +4 -0
  180. package/build/components/Switch/Switch.props.d.ts +5 -0
  181. package/build/components/Table/Table.d.ts +4 -0
  182. package/build/components/Table/Table.js +4 -0
  183. package/build/components/Table/Table.props.d.ts +6 -0
  184. package/build/components/Table/TableHeader.d.ts +3 -0
  185. package/build/components/Table/TableHeader.js +3 -0
  186. package/build/components/Table/TableHeaderCell.d.ts +6 -0
  187. package/build/components/Table/TableHeaderCell.js +3 -0
  188. package/build/components/Tabs/Tabs.d.ts +5 -0
  189. package/build/components/Tabs/Tabs.js +5 -0
  190. package/build/components/Textarea/Textarea.d.ts +6 -0
  191. package/build/components/Textarea/Textarea.js +6 -0
  192. package/build/components/Textarea/Textarea.props.d.ts +14 -0
  193. package/build/components/TimePicker/TimePicker.d.ts +5 -0
  194. package/build/components/TimePicker/TimePicker.js +14 -1
  195. package/build/components/TimePicker/TimePickerView.js +5 -19
  196. package/build/components/TimePicker/TimePickerWheel.web.js +11 -2
  197. package/build/components/TimePicker/utils.d.ts +9 -0
  198. package/build/components/TimePicker/utils.js +30 -0
  199. package/build/components/TimePicker/utils.test.d.ts +1 -0
  200. package/build/components/TimePicker/utils.test.js +31 -0
  201. package/build/components/TimePickerInput/TimePickerInput.d.ts +6 -1
  202. package/build/components/TimePickerInput/TimePickerInput.js +16 -5
  203. package/build/components/TimePickerInput/TimePickerInput.props.d.ts +35 -0
  204. package/build/components/Timeline/Timeline.d.ts +5 -0
  205. package/build/components/Timeline/Timeline.js +5 -0
  206. package/build/components/Timeline/TimelineItem.d.ts +4 -0
  207. package/build/components/Timeline/TimelineItem.js +4 -0
  208. package/build/components/Toast/Toast.context.d.ts +4 -0
  209. package/build/components/Toast/Toast.context.js +4 -0
  210. package/build/components/Toast/Toast.props.d.ts +7 -0
  211. package/build/components/ToggleButton/ToggleButton.d.ts +4 -0
  212. package/build/components/ToggleButton/ToggleButton.js +4 -0
  213. package/build/components/ToggleButton/ToggleButton.props.d.ts +6 -0
  214. package/build/components/ToggleButtonCard/ToggleButtonCard.d.ts +8 -0
  215. package/build/components/ToggleButtonCard/ToggleButtonCard.js +8 -0
  216. package/build/components/ToggleButtonCard/ToggleButtonCard.props.d.ts +9 -0
  217. package/build/components/ToggleButtonCard/ToggleButtonCardGroup.props.d.ts +15 -0
  218. package/build/components/UnstyledIconButton/UnstyledIconButton.d.ts +5 -0
  219. package/build/components/UnstyledIconButton/UnstyledIconButton.js +5 -0
  220. package/build/components/UnstyledIconButton/UnstyledIconButton.props.d.ts +17 -0
  221. package/build/components/VerificationInput/VerificationInput.d.ts +4 -0
  222. package/build/components/VerificationInput/VerificationInput.js +4 -0
  223. package/package.json +8 -5
  224. package/public/llms/components/date-picker.md +7 -1
  225. package/public/llms/components/time-picker.md +1 -0
  226. package/public/llms/docs/introduction.md +1 -1
@@ -2,20 +2,37 @@ import { ComponentType, ReactNode } from 'react';
2
2
  import type { PressableProps, ViewProps } from 'react-native';
3
3
  import { IconContainerProps } from '../../IconContainer';
4
4
  export interface CardActionBaseProps extends Omit<PressableProps, 'children'> {
5
+ /** Shows a loading skeleton in place of the content. */
5
6
  loading?: boolean;
7
+ /** Disables interaction with the action. */
6
8
  disabled?: boolean;
9
+ /** Size of the heading text.
10
+ * @default 'md'
11
+ */
7
12
  size?: 'md' | 'lg';
8
13
  }
9
14
  export interface CardActionContentProps {
15
+ /** Main heading text; required unless `children` is used. */
10
16
  heading: string;
17
+ /** Secondary text shown below the heading. */
11
18
  helperText?: string;
19
+ /** Badge rendered alongside the action. */
12
20
  badge?: ReactNode;
21
+ /** Position of the badge relative to the heading and helper text.
22
+ * @default 'bottom'
23
+ */
13
24
  badgePosition?: 'bottom' | 'middle' | 'right' | 'top';
25
+ /** Wraps the leading icon in a styled container.
26
+ * @default true
27
+ */
14
28
  iconContainer?: boolean;
29
+ /** Visual variant of the icon container. */
15
30
  iconContainerVariant?: IconContainerProps['variant'];
31
+ /** Semantic colour family used for the icon container's surface. */
16
32
  iconContainerColor?: IconContainerProps['color'];
17
33
  }
18
34
  export interface CardActionWithChildren extends CardActionBaseProps {
35
+ /** Custom content rendered in place of the built-in heading, helper text, and icon slots. */
19
36
  children: ViewProps['children'];
20
37
  heading?: never;
21
38
  helperText?: never;
@@ -31,12 +48,14 @@ export interface CardActionWithChildren extends CardActionBaseProps {
31
48
  }
32
49
  type CardActionWithLeadingContent = CardActionBaseProps & CardActionContentProps & {
33
50
  children?: never;
51
+ /** Custom content displayed at the start of the action, typically an icon. */
34
52
  leadingContent: ViewProps['children'];
35
53
  leadingIcon?: never;
36
54
  };
37
55
  type CardActionWithLeadingIcon = CardActionBaseProps & CardActionContentProps & {
38
56
  children?: never;
39
57
  leadingContent?: never;
58
+ /** Icon displayed at the start of the action. */
40
59
  leadingIcon: ComponentType;
41
60
  };
42
61
  type CardActionWithNoLeading = CardActionBaseProps & CardActionContentProps & {
@@ -46,11 +65,15 @@ type CardActionWithNoLeading = CardActionBaseProps & CardActionContentProps & {
46
65
  };
47
66
  type CardActionLeadingVariants = CardActionWithLeadingContent | CardActionWithLeadingIcon | CardActionWithNoLeading;
48
67
  type CardActionWithTrailingContent = CardActionLeadingVariants & {
68
+ /** Custom content displayed at the end of the action, typically an icon. */
49
69
  trailingContent: ViewProps['children'];
50
70
  trailingIcon?: never;
51
71
  };
52
72
  type CardActionWithTrailingIcon = CardActionLeadingVariants & {
53
73
  trailingContent?: never;
74
+ /** Icon displayed at the end of the action.
75
+ * @default ChevronRightSmallIcon
76
+ */
54
77
  trailingIcon: ComponentType;
55
78
  };
56
79
  type CardActionWithNoTrailing = CardActionLeadingVariants & {
@@ -1,8 +1,13 @@
1
1
  import { PropsWithChildren } from 'react';
2
+ interface CardPressHandlerOwnProps {
3
+ /** The handler to inherit from the child component when the `Card` is pressed. */
4
+ handlerToInherit?: string;
5
+ }
6
+ /**
7
+ * Wraps a child component so it inherits the `Card`'s pressed state, letting the child show an active appearance when the `Card` is pressed.
8
+ */
2
9
  declare const CardPressHandler: {
3
- ({ children }: PropsWithChildren<{
4
- handlerToInherit?: string;
5
- }>): import("react").JSX.Element;
10
+ ({ children }: PropsWithChildren<CardPressHandlerOwnProps>): import("react").JSX.Element;
6
11
  displayName: string;
7
12
  };
8
13
  export default CardPressHandler;
@@ -2,6 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useMemo } from 'react';
3
3
  import { useCardContext } from './Card.context';
4
4
  import { CardPressHandlerContext } from './CardPressHandler.context';
5
+ /**
6
+ * Wraps a child component so it inherits the `Card`'s pressed state, letting the child show an active appearance when the `Card` is pressed.
7
+ */
5
8
  const CardPressHandler = ({ children }) => {
6
9
  const { pressed } = useCardContext();
7
10
  const context = useMemo(() => ({
@@ -1,4 +1,7 @@
1
1
  import { CarouselProps } from './Carousel.props';
2
+ /**
3
+ * Displays a horizontally scrollable series of `CarouselItem`s, such as images, articles, or products, with built-in pagination controls.
4
+ */
2
5
  declare const Carousel: {
3
6
  ({ centered, children, disabled, inactiveItemOpacity, itemWidth, onSnapToItem, showOverflow, style, width, itemsStyle, activeIndex: initialActiveIndex, showControls, showNavigation, controlsStyle, controlsItemStyle, controlsActiveItemStyle, controlsAccessibilityHidden, inverted, ref, ...props }: CarouselProps): import("react").JSX.Element;
4
7
  displayName: string;
@@ -5,6 +5,9 @@ import { StyleSheet } from 'react-native-unistyles';
5
5
  import CarouselContext from './Carousel.context';
6
6
  import { CarouselControls } from './CarouselControls';
7
7
  import { CarouselItem } from './CarouselItem';
8
+ /**
9
+ * Displays a horizontally scrollable series of `CarouselItem`s, such as images, articles, or products, with built-in pagination controls.
10
+ */
8
11
  const Carousel = ({ centered = false, children, disabled = false, inactiveItemOpacity = 1, itemWidth, onSnapToItem, showOverflow = false, style, width, itemsStyle, activeIndex: initialActiveIndex = 0, showControls = true, showNavigation = false, controlsStyle, controlsItemStyle, controlsActiveItemStyle, controlsAccessibilityHidden = true, inverted = false, ref, ...props }) => {
9
12
  const [activeIndex, setActiveIndex] = useState(initialActiveIndex);
10
13
  const [, setNumItems] = useState(0);
@@ -26,24 +26,61 @@ export interface CarouselItemProps extends ViewProps {
26
26
  width?: number;
27
27
  }
28
28
  export interface CarouselProps extends Omit<FlatListProps<ReactElement<CarouselItemProps>>, 'accessibilityActions' | 'accessibilityLabel' | 'accessibilityRole' | 'accessible' | 'bounces' | 'children' | 'data' | 'decelerationRate' | 'getItemLayout' | 'horizontal' | 'pagingEnabled' | 'onAccessibilityAction' | 'onViewableItemsChanged' | 'overScrollMode' | 'renderItem' | 'showsHorizontalScrollIndicator' | 'snapToInterval' | 'snapToAlignment' | 'viewabilityConfig' | 'style'> {
29
+ /** Sets the initial active item index.
30
+ * @default 0
31
+ */
29
32
  activeIndex?: number;
33
+ /** Centers items within the viewport, revealing partial adjacent items when used with `itemWidth`.
34
+ * @default false
35
+ */
30
36
  centered?: boolean;
37
+ /** Disables scrolling and interaction with the carousel.
38
+ * @default false
39
+ */
31
40
  disabled?: boolean;
41
+ /** Opacity applied to items outside the active viewport, for use with `showOverflow`.
42
+ * @default 1
43
+ */
32
44
  inactiveItemOpacity?: number;
45
+ /** Width of each carousel item, if different from `width`. */
33
46
  itemWidth?: number;
47
+ /** Called each time a new item becomes active in the viewport. */
34
48
  onSnapToItem?: (index: number) => void;
49
+ /** Reveals items that sit outside the carousel viewport.
50
+ * @default false
51
+ */
35
52
  showOverflow?: boolean;
53
+ /** Width of the carousel viewport. */
36
54
  width: number;
55
+ /** The `CarouselItem` elements to render. */
37
56
  children?: ViewProps['children'];
57
+ /** Style applied to the scrollable list of items. */
38
58
  itemsStyle?: FlatListProps<ReactElement<CarouselItemProps>>['style'];
59
+ /** Style applied to the carousel's outer container. */
39
60
  style?: ViewStyle;
61
+ /** Shows the built-in pagination controls.
62
+ * @default true
63
+ */
40
64
  showControls?: boolean;
65
+ /** Shows previous/next navigation buttons in the controls.
66
+ * @default false
67
+ */
41
68
  showNavigation?: boolean;
69
+ /** Style applied to the pagination controls container. */
42
70
  controlsStyle?: ViewProps['style'];
71
+ /** Style applied to each pagination dot. */
43
72
  controlsItemStyle?: ViewProps['style'];
73
+ /** Style applied to the active pagination dot. */
44
74
  controlsActiveItemStyle?: ViewProps['style'];
75
+ /** Hides the pagination controls from screen readers.
76
+ * @default true
77
+ */
45
78
  controlsAccessibilityHidden?: boolean;
79
+ /** Forwarded ref exposing `scrollToIndex` and `scrollToOffset` methods. */
46
80
  ref?: React.Ref<CarouselRef>;
81
+ /** Inverts the carousel control colours, for use on brand-coloured backgrounds.
82
+ * @default false
83
+ */
47
84
  inverted?: boolean;
48
85
  }
49
86
  export interface CarouselProviderProps {
@@ -1,4 +1,7 @@
1
1
  import BoxProps from '../Box/Box.props';
2
+ /**
3
+ * Centers its children both horizontally and vertically, for building simple centered layouts.
4
+ */
2
5
  declare const Center: {
3
6
  ({ children, ...props }: BoxProps): import("react").JSX.Element;
4
7
  displayName: string;
@@ -1,5 +1,8 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { Box } from '../Box';
3
+ /**
4
+ * Centers its children both horizontally and vertically, for building simple centered layouts.
5
+ */
3
6
  const Center = ({ children, ...props }) => (_jsx(Box, { alignItems: "center", justifyContent: "center", ...props, children: children }));
4
7
  Center.displayName = 'Center';
5
8
  export default Center;
@@ -9,6 +9,9 @@ declare const CheckboxIcon: import("react").ForwardRefExoticComponent<import("re
9
9
  forceMount?: boolean;
10
10
  }>;
11
11
  declare const CheckboxLabel: import("react").ForwardRefExoticComponent<import("react").RefAttributes<import("../Label/Label.props").default> & Omit<import("../Label/Label.props").default, "ref">>;
12
+ /**
13
+ * Lets a user select one or more options from a list, with an optional label, helper text, and validation state.
14
+ */
12
15
  declare const Checkbox: {
13
16
  ({ children, label, disabled, checked, helperIcon, helperText, badge, invalidText, validText, validationStatus: validation, showValidationIcon, type, image, value, ...props }: CheckboxProps): import("react").JSX.Element;
14
17
  displayName: string;
@@ -25,6 +25,9 @@ CheckboxGroup.displayName = 'CheckboxGroup';
25
25
  CheckboxIndicator.displayName = 'CheckboxIndicator';
26
26
  CheckboxIcon.displayName = 'CheckboxIcon';
27
27
  CheckboxLabel.displayName = 'CheckboxLabel';
28
+ /**
29
+ * Lets a user select one or more options from a list, with an optional label, helper text, and validation state.
30
+ */
28
31
  const Checkbox = ({ children, label, disabled, checked, helperIcon, helperText, badge, invalidText, validText, validationStatus: validation, showValidationIcon, type = 'default', image, value, ...props }) => {
29
32
  const { validationStatus: fieldValidationStatus } = useFormFieldContext();
30
33
  const { validationStatus: groupValidationStatus, type: groupType } = useCheckboxGroupContext();
@@ -1,18 +1,28 @@
1
1
  import type { ComponentType, ReactNode } from 'react';
2
2
  import type { PressableProps, ViewProps } from 'react-native';
3
3
  type CheckboxBaseProps = {
4
+ /** Called with the new checked state when the checkbox is toggled. */
4
5
  onChange?: (isSelected: boolean) => void;
5
6
  disabled?: boolean;
7
+ /** The validation status of the checkbox. */
6
8
  validationStatus?: 'valid' | 'invalid' | 'initial';
9
+ /** The visual style of the checkbox.
10
+ * @default 'default'
11
+ */
7
12
  type?: 'default' | 'tile';
8
13
  } & ({
14
+ /** The value returned on form submission when the checkbox is checked. */
9
15
  value?: string | number | boolean;
16
+ /** Whether the checkbox is checked. */
10
17
  checked: boolean;
11
18
  } | {
19
+ /** The value returned on form submission when the checkbox is checked. */
12
20
  value: string | number | boolean;
21
+ /** Whether the checkbox is checked. */
13
22
  checked?: boolean;
14
23
  }) & Omit<PressableProps, 'children'>;
15
24
  type CheckboxWithChildrenProps = {
25
+ /** Custom content to render in place of the default label, helper text, and validation content. */
16
26
  children: ViewProps['children'];
17
27
  label?: never;
18
28
  helperText?: never;
@@ -25,13 +35,23 @@ type CheckboxWithChildrenProps = {
25
35
  } & CheckboxBaseProps;
26
36
  type CheckboxWithoutChildrenProps = {
27
37
  children?: never;
38
+ /** The label to display next to the checkbox. */
28
39
  label?: string;
40
+ /** The helper text to display below the checkbox. */
29
41
  helperText?: string;
42
+ /** The icon to display next to the helper text. */
30
43
  helperIcon?: ComponentType;
44
+ /** The badge to display below the helper text. */
31
45
  badge?: ReactNode;
46
+ /** The text to display below the checkbox when `validationStatus` is `'invalid'`. */
32
47
  invalidText?: string;
48
+ /** The text to display below the checkbox when `validationStatus` is `'valid'`. */
33
49
  validText?: string;
50
+ /** Whether to show the validation icon.
51
+ * @default true
52
+ */
34
53
  showValidationIcon?: boolean;
54
+ /** The image to display next to the label. */
35
55
  image?: ReactNode;
36
56
  } & CheckboxBaseProps;
37
57
  type CheckboxProps = CheckboxWithChildrenProps | CheckboxWithoutChildrenProps;
@@ -1,5 +1,8 @@
1
1
  import React from 'react';
2
2
  import CheckboxGroupProps from './CheckboxGroup.props';
3
+ /**
4
+ * Groups multiple `Checkbox` components together, sharing a common label, helper text, and validation state.
5
+ */
3
6
  declare const CheckboxGroup: {
4
7
  ({ children, disabled, readonly, onChange, onValueChange, validationStatus, label, labelVariant, helperText, invalidText, validText, showValidationIcon, helperIcon, type, direction, gap, ...props }: CheckboxGroupProps): React.JSX.Element;
5
8
  displayName: string;
@@ -7,6 +7,9 @@ import { Label } from '../Label';
7
7
  import { CheckboxGroup as CheckboxGroupComponent } from './Checkbox';
8
8
  import { CheckboxGroupContext } from './CheckboxGroup.context';
9
9
  import CheckboxGroupTextContent from './CheckboxGroupTextContent';
10
+ /**
11
+ * Groups multiple `Checkbox` components together, sharing a common label, helper text, and validation state.
12
+ */
10
13
  const CheckboxGroup = ({ children, disabled, readonly, onChange, onValueChange, validationStatus, label, labelVariant = 'body', helperText, invalidText, validText, showValidationIcon = true, helperIcon, type, direction = 'column', gap, ...props }) => {
11
14
  const value = useMemo(() => ({ disabled, validationStatus, type, direction }), [disabled, validationStatus, type, direction]);
12
15
  const showHeader = !!label || !!helperText || !!invalidText || !!validText;
@@ -2,24 +2,48 @@ import { ComponentType } from 'react';
2
2
  import { ViewProps } from 'react-native';
3
3
  import { space } from '../../tokens';
4
4
  interface CheckboxGroupProps extends ViewProps {
5
+ /** Disables every checkbox in the group. */
5
6
  disabled?: boolean;
7
+ /** The selected values in the group. */
6
8
  value?: Array<string>;
9
+ /** Called with the full array of selected values when any checkbox in the group is checked or unchecked. */
7
10
  onValueChange?: (value: Array<string>) => void;
8
11
  /**
12
+ * Called with the full array of selected values when any checkbox in the group is checked or unchecked.
9
13
  * @deprecated Use `onValueChange` instead.
10
14
  */
11
15
  onChange?: (value: Array<string>) => void;
16
+ /** Marks every checkbox in the group as read-only. */
12
17
  readonly?: boolean;
18
+ /** The validation status of the checkbox group. */
13
19
  validationStatus?: 'valid' | 'invalid' | 'initial';
20
+ /** The label to display above the checkbox group. */
14
21
  label?: string;
22
+ /** The variant of the label text.
23
+ * @default 'body'
24
+ */
15
25
  labelVariant?: 'heading' | 'body';
26
+ /** The helper text to display below the checkbox group. */
16
27
  helperText?: string;
28
+ /** Whether to show the validation icon.
29
+ * @default true
30
+ */
17
31
  showValidationIcon?: boolean;
32
+ /** The text to display below the checkbox group when `validationStatus` is `'invalid'`. */
18
33
  invalidText?: string;
34
+ /** The text to display below the checkbox group when `validationStatus` is `'valid'`. */
19
35
  validText?: string;
36
+ /** The icon to display next to the helper text. */
20
37
  helperIcon?: ComponentType;
38
+ /** The type of checkbox rendered by the group's children.
39
+ * @default 'default'
40
+ */
21
41
  type?: 'default' | 'tile';
42
+ /** The layout direction of the checkboxes in the group.
43
+ * @default 'column'
44
+ */
22
45
  direction?: 'row' | 'column';
46
+ /** The gap between the checkbox group items. */
23
47
  gap?: keyof typeof space;
24
48
  }
25
49
  export default CheckboxGroupProps;
@@ -1,5 +1,8 @@
1
1
  import React from 'react';
2
2
  import ComboboxProps from './Combobox.props';
3
+ /**
4
+ * A searchable select field that opens a bottom sheet for choosing a single option from a list.
5
+ */
3
6
  declare const Combobox: {
4
7
  ({ options, value, onValueChange, inputValue, onInputValueChange, label, labelVariant, placeholder, searchPlaceholder, disabled, validationStatus, helperText, helperIcon, invalidText, validText, required, children, bottomSheetProps, menuHeading, noOptionsFoundText, listProps, loading, readonly, getValueLabel, filterOption, ...rest }: ComboboxProps): React.JSX.Element;
5
8
  displayName: string;
@@ -18,6 +18,9 @@ import { ComboboxContext } from './Combobox.context';
18
18
  import { defaultFilterOption } from './Combobox.utils';
19
19
  import ComboboxOption from './ComboboxOption';
20
20
  const DEFAULT_SNAP_POINTS = ['25%', '40%', '80%'];
21
+ /**
22
+ * A searchable select field that opens a bottom sheet for choosing a single option from a list.
23
+ */
21
24
  const Combobox = ({ options = [], value, onValueChange, inputValue, onInputValueChange, label, labelVariant = 'body', placeholder = 'Search', searchPlaceholder = 'Search', disabled = false, validationStatus = 'initial', helperText, helperIcon, invalidText, validText, required = true, children, bottomSheetProps, menuHeading, noOptionsFoundText = 'No options found', listProps, loading = false, readonly = false, getValueLabel, filterOption, ...rest }) => {
22
25
  const formFieldContext = useFormFieldContext();
23
26
  const validationStatusFromContext = formFieldContext?.validationStatus ?? validationStatus;
@@ -1,4 +1,7 @@
1
1
  import type ContainerProps from './Container.props';
2
+ /**
3
+ * Applies the design system's responsive layout margin, padding, and spacing tokens to its content.
4
+ */
2
5
  declare const Container: {
3
6
  ({ style, children, spacing, space, ...props }: ContainerProps): import("react").JSX.Element;
4
7
  displayName: string;
@@ -2,6 +2,9 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { View } from 'react-native';
3
3
  import { StyleSheet } from 'react-native-unistyles';
4
4
  import { useStyleProps } from '../../hooks';
5
+ /**
6
+ * Applies the design system's responsive layout margin, padding, and spacing tokens to its content.
7
+ */
5
8
  const Container = ({ style, children, spacing = 'md', space, ...props }) => {
6
9
  const { computedStyles, remainingProps } = useStyleProps(props);
7
10
  styles.useVariants({ spacing: space ?? spacing });
@@ -1,4 +1,7 @@
1
1
  import type CurrencyInputProps from './CurrencyInput.props';
2
+ /**
3
+ * An input specialised for entering monetary amounts, showing a currency symbol prefix and a decimal keypad where supported.
4
+ */
2
5
  declare const CurrencyInput: {
3
6
  ({ validationStatus, disabled, focused, readonly, placeholder, inBottomSheet, required, disableGroupSeparator, value, onChangeText, label, labelVariant, helperText, helperIcon, validText, invalidText, ref, ...rest }: CurrencyInputProps): import("react").JSX.Element;
4
7
  displayName: string;
@@ -4,6 +4,9 @@ import { StyleSheet } from 'react-native-unistyles';
4
4
  import { formatThousands } from '../../utils';
5
5
  import { DetailText } from '../DetailText';
6
6
  import { Input, InputField, InputSlot } from '../Input';
7
+ /**
8
+ * An input specialised for entering monetary amounts, showing a currency symbol prefix and a decimal keypad where supported.
9
+ */
7
10
  const CurrencyInput = ({ validationStatus = 'initial', disabled, focused, readonly, placeholder, inBottomSheet = false, required = true, disableGroupSeparator = false, value, onChangeText, label, labelVariant = 'body', helperText, helperIcon, validText, invalidText, ref, ...rest }) => {
8
11
  const defaultFormat = '0.00';
9
12
  const getPlaceholder = placeholder ?? defaultFormat;
@@ -1,21 +1,46 @@
1
1
  import type { Ref } from 'react';
2
2
  import type { TextInput, TextInputProps, ViewProps } from 'react-native';
3
3
  export interface CurrencyInputBaseProps {
4
+ /** Ref to the underlying text input. */
4
5
  ref?: Ref<TextInput>;
6
+ /** Disables the input.
7
+ * @default false
8
+ */
5
9
  disabled?: boolean;
10
+ /** Validation styling state.
11
+ * @default 'initial'
12
+ */
6
13
  validationStatus?: 'initial' | 'valid' | 'invalid';
14
+ /** Makes the input read-only.
15
+ * @default false
16
+ */
7
17
  readonly?: boolean;
18
+ /** Forces the focused visual state.
19
+ * @default false
20
+ */
8
21
  focused?: boolean;
9
22
  placeholder?: string;
23
+ /** Renders using `BottomSheetTextInput` for use inside a bottom sheet.
24
+ * @default false
25
+ */
10
26
  inBottomSheet?: boolean;
27
+ /** Whether the input is required. */
11
28
  required?: boolean;
12
29
  /** When not specifically disabled, the numeric value is automatically formatted with thousand separators (e.g. 1234 -> 1,234). */
13
30
  disableGroupSeparator?: boolean;
31
+ /** The label for the input. */
14
32
  label?: string;
33
+ /** The variant of the label text.
34
+ * @default 'body'
35
+ */
15
36
  labelVariant?: 'heading' | 'body';
37
+ /** Helper text to display below the input. */
16
38
  helperText?: string;
39
+ /** Icon to display alongside the helper text. */
17
40
  helperIcon?: React.ComponentType;
41
+ /** Text to display below the input when `validationStatus` is `'valid'`. */
18
42
  validText?: string;
43
+ /** Text to display below the input when `validationStatus` is `'invalid'`. */
19
44
  invalidText?: string;
20
45
  }
21
46
  export type CurrencyInputProps = CurrencyInputBaseProps & Omit<TextInputProps, 'children'> & ViewProps;
@@ -1,4 +1,8 @@
1
1
  import type { DateInputProps } from './DateInput.props';
2
+ /**
3
+ * Lets users enter a date manually across separate day, month, and year segments, with the option to show only the segments needed.
4
+ * Integrates with the design system's form field styling, validation states, and helper text.
5
+ */
2
6
  declare const DateInput: {
3
7
  ({ label, helperText, helperIcon, validationStatus, validText, invalidText, disabled, readonly, required, hideDay, hideMonth, hideYear, dayPlaceholder, monthPlaceholder, yearPlaceholder, dayValue, monthValue, yearValue, dayRef, monthRef, yearRef, onDayChange, onMonthChange, onYearChange, onDayFocus, onMonthFocus, onYearFocus, onDayBlur, onMonthBlur, onYearBlur, inputLabelStyle, inputContainerStyle, inputStyle, ...props }: DateInputProps): import("react").JSX.Element;
4
8
  displayName: string;
@@ -3,6 +3,10 @@ import { View } from 'react-native';
3
3
  import { StyleSheet } from 'react-native-unistyles';
4
4
  import { FormField } from '../FormField';
5
5
  import DateInputSegment from './DateInputSegment';
6
+ /**
7
+ * Lets users enter a date manually across separate day, month, and year segments, with the option to show only the segments needed.
8
+ * Integrates with the design system's form field styling, validation states, and helper text.
9
+ */
6
10
  const DateInput = ({ label, helperText, helperIcon, validationStatus = 'initial', validText, invalidText, disabled, readonly, required, hideDay = false, hideMonth = false, hideYear = false, dayPlaceholder = 'DD', monthPlaceholder = 'MM', yearPlaceholder = 'YYYY', dayValue, monthValue, yearValue, dayRef, monthRef, yearRef, onDayChange, onMonthChange, onYearChange, onDayFocus, onMonthFocus, onYearFocus, onDayBlur, onMonthBlur, onYearBlur, inputLabelStyle, inputContainerStyle, inputStyle, ...props }) => {
7
11
  return (_jsx(FormField, { label: label, helperText: helperText, helperIcon: helperIcon, validationStatus: validationStatus, validText: validText, invalidText: invalidText, disabled: disabled, readonly: readonly, required: required, style: styles.wrap, ...props, children: _jsxs(View, { style: styles.container, children: [!hideDay && (_jsx(DateInputSegment, { label: "Day", placeholder: dayPlaceholder, value: dayValue, inputRef: dayRef, onChange: onDayChange, onFocus: onDayFocus, onBlur: onDayBlur, disabled: disabled, required: required, readonly: readonly, validationStatus: validationStatus, maxLength: 2, testID: "date-input-day", inputContainerStyle: inputContainerStyle, inputStyle: inputStyle, inputLabelStyle: inputLabelStyle })), !hideMonth && (_jsx(DateInputSegment, { label: "Month", placeholder: monthPlaceholder, value: monthValue, inputRef: monthRef, onChange: onMonthChange, onFocus: onMonthFocus, onBlur: onMonthBlur, disabled: disabled, required: required, readonly: readonly, validationStatus: validationStatus, maxLength: 2, testID: "date-input-month", inputContainerStyle: inputContainerStyle, inputStyle: inputStyle, inputLabelStyle: inputLabelStyle })), !hideYear && (_jsx(DateInputSegment, { label: "Year", placeholder: yearPlaceholder, value: yearValue, inputRef: yearRef, onChange: onYearChange, onFocus: onYearFocus, onBlur: onYearBlur, disabled: disabled, required: required, readonly: readonly, validationStatus: validationStatus, maxLength: 4, testID: "date-input-year", inputContainerStyle: inputContainerStyle, inputStyle: inputStyle, inputLabelStyle: inputLabelStyle }))] }) }));
8
12
  };
@@ -90,8 +90,11 @@ export interface DateInputProps extends FormFieldBaseProps {
90
90
  * Callback fired when the year segment loses focus.
91
91
  */
92
92
  onYearBlur?: TextInputProps['onBlur'];
93
+ /** Custom style for each input segment's container. */
93
94
  inputContainerStyle?: ViewProps['style'];
95
+ /** Custom style for each input segment's text input. */
94
96
  inputStyle?: ViewProps['style'];
97
+ /** Custom style for each input segment's label. */
95
98
  inputLabelStyle?: LabelProps['style'];
96
99
  }
97
100
  export interface DateInputSegmentProps {
@@ -13,6 +13,7 @@ export interface DatePickerContextType extends DatePickerBaseProps {
13
13
  onSelectYear: (year: number) => void;
14
14
  onChangeMonth: (value: number) => void;
15
15
  onChangeYear: (value: number) => void;
16
+ onConfirm: () => void;
16
17
  closeDatePicker: () => void;
17
18
  }
18
19
  export declare const DatePickerContext: import("react").Context<DatePickerContextType>;
@@ -1,19 +1,33 @@
1
1
  import type { DatePickerBaseProps, DateType, MultiChange, RangeChange, SingleChange } from './DatePicker.props';
2
2
  export interface DatePickerSingleProps extends DatePickerBaseProps {
3
+ /** Controls whether the picker returns a single date, a date range, or multiple dates. */
3
4
  mode: 'single';
5
+ /** The selected date, used in single mode. */
4
6
  date?: DateType;
7
+ /** Called after a selection changes. */
5
8
  onChange?: SingleChange;
6
9
  }
7
10
  export interface DatePickerRangeProps extends DatePickerBaseProps {
11
+ /** Controls whether the picker returns a single date, a date range, or multiple dates. */
8
12
  mode: 'range';
13
+ /** Start of the selected range, used in range mode. */
9
14
  startDate?: DateType;
15
+ /** End of the selected range, used in range mode. */
10
16
  endDate?: DateType;
17
+ /** Called after a selection changes. */
11
18
  onChange?: RangeChange;
12
19
  }
13
20
  export interface DatePickerMultipleProps extends DatePickerBaseProps {
21
+ /** Controls whether the picker returns a single date, a date range, or multiple dates. */
14
22
  mode: 'multiple';
23
+ /** The selected dates, used in multiple mode. */
15
24
  dates?: DateType[];
25
+ /** Called after a selection changes. */
16
26
  onChange?: MultiChange;
17
27
  }
28
+ /**
29
+ * Presents a calendar in a bottom sheet so people can choose a single date, a date range, or multiple dates without leaving the current screen.
30
+ * Supports locale, time zone, and availability rules such as enabled, disabled, minimum, and maximum dates.
31
+ */
18
32
  declare const DateTimePicker: (props: DatePickerSingleProps | DatePickerRangeProps | DatePickerMultipleProps) => import("react").JSX.Element;
19
33
  export default DateTimePicker;
@@ -20,6 +20,10 @@ dayjs.extend(localizedFormat);
20
20
  dayjs.extend(utc);
21
21
  dayjs.extend(timezone);
22
22
  dayjs.extend(duration);
23
+ /**
24
+ * Presents a calendar in a bottom sheet so people can choose a single date, a date range, or multiple dates without leaving the current screen.
25
+ * Supports locale, time zone, and availability rules such as enabled, disabled, minimum, and maximum dates.
26
+ */
23
27
  const DateTimePicker = (props) => {
24
28
  // eslint-disable-next-line @typescript-eslint/prefer-as-const
25
29
  const numerals = 'latn';
@@ -151,6 +155,9 @@ const DateTimePicker = (props) => {
151
155
  }, initialState);
152
156
  const stateRef = useRef(state);
153
157
  stateRef.current = state;
158
+ // Tracks whether a selection was made since the sheet last opened, so Ok doesn't
159
+ // re-emit onChange for a value it already just committed via onSelectDate.
160
+ const hasChangedRef = useRef(false);
154
161
  useEffect(() => {
155
162
  const newState = {
156
163
  ...initialState,
@@ -234,6 +241,7 @@ const DateTimePicker = (props) => {
234
241
  dispatch({ type: CalendarActionKind.SET_CALENDAR_VIEW, payload: view });
235
242
  }, []);
236
243
  const onSelectDate = useCallback((selectedDate) => {
244
+ hasChangedRef.current = true;
237
245
  if (onChange) {
238
246
  if (mode === 'single') {
239
247
  const newDate = timePicker
@@ -332,6 +340,26 @@ const DateTimePicker = (props) => {
332
340
  }
333
341
  }
334
342
  }, [mode, timePicker, min, max, timeZone]);
343
+ const onConfirm = useCallback(() => {
344
+ if (!onChange || hasChangedRef.current)
345
+ return;
346
+ const current = stateRef.current;
347
+ if (mode === 'single' && current.date) {
348
+ onChange({ date: dayjs(current.date).toDate() });
349
+ }
350
+ else if (mode === 'range' && current.startDate) {
351
+ onChange({
352
+ startDate: dayjs(current.startDate).toDate(),
353
+ endDate: current.endDate ? dayjs(current.endDate).toDate() : current.endDate,
354
+ });
355
+ }
356
+ else if (mode === 'multiple' && current.dates?.length) {
357
+ onChange({
358
+ dates: current.dates.map(item => dayjs(item).toDate()),
359
+ change: 'updated',
360
+ });
361
+ }
362
+ }, [mode, onChange]);
335
363
  // set the active displayed month
336
364
  const onSelectMonth = useCallback((value) => {
337
365
  const currentMonth = dayjs(stateRef.current.currentDate).month();
@@ -445,6 +473,7 @@ const DateTimePicker = (props) => {
445
473
  onSelectYear,
446
474
  onChangeMonth,
447
475
  onChangeYear,
476
+ onConfirm,
448
477
  onCancel,
449
478
  }), [
450
479
  setCalendarView,
@@ -453,6 +482,7 @@ const DateTimePicker = (props) => {
453
482
  onSelectYear,
454
483
  onChangeMonth,
455
484
  onChangeYear,
485
+ onConfirm,
456
486
  onCancel,
457
487
  ]);
458
488
  const memoizedValue = useMemo(() => ({
@@ -462,6 +492,7 @@ const DateTimePicker = (props) => {
462
492
  }), [state, baseContextValue, handlerContextValue]);
463
493
  const handleChange = useCallback((index) => {
464
494
  if (index > -1) {
495
+ hasChangedRef.current = false;
465
496
  // Add a small delay to ensure the bottom sheet is fully rendered
466
497
  setTimeout(() => {
467
498
  // Announce to screen readers