@ringcentral/spring-ui 1.11.2 → 1.13.0

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 (241) hide show
  1. package/Accordion.js +90 -34
  2. package/AccordionHeader.js +72 -20
  3. package/Alert.js +120 -28
  4. package/Animation.js +2 -45
  5. package/Announcement.js +46 -35
  6. package/Autocomplete.js +1011 -580
  7. package/Avatar.js +134 -73
  8. package/AvatarGroup.js +50 -7
  9. package/Backdrop.js +45 -7
  10. package/Badge.js +77 -15
  11. package/Block.js +34 -12
  12. package/BlockHeader.js +55 -11
  13. package/BottomNavigation.js +181 -65
  14. package/BottomNavigationItem.js +93 -30
  15. package/Button.js +160 -24
  16. package/CallButton.js +53 -31
  17. package/Checkbox.js +88 -26
  18. package/Chip.js +126 -26
  19. package/CircularProgressIndicator.js +80 -8
  20. package/ClickAwayListener.js +4 -1
  21. package/ComponentsProps.js +1 -0
  22. package/DatePicker.js +611 -190
  23. package/DateUtilsContext.js +43 -25
  24. package/Dialer.js +576 -250
  25. package/Dialog.js +100 -45
  26. package/Divider.js +43 -7
  27. package/DragHandle.js +32 -6
  28. package/Drawer.js +117 -19
  29. package/Dropdown.js +154 -74
  30. package/EmptyState.js +63 -11
  31. package/FabButton.js +51 -17
  32. package/FocusTrap.js +109 -12
  33. package/FormField.js +106 -8
  34. package/FormLabel.js +81 -7
  35. package/Icon.js +1 -8
  36. package/IconButton.js +142 -26
  37. package/IconButtonGroup.js +35 -12
  38. package/InlineEditable.js +98 -44
  39. package/LinearProgressIndicator.js +73 -24
  40. package/Link.js +40 -11
  41. package/List.js +54 -9
  42. package/ListItem.js +152 -23
  43. package/ListItemText.js +44 -16
  44. package/ListNavigation.js +272 -20
  45. package/Menu.js +139 -23
  46. package/MenuActions.js +37 -12
  47. package/MenuDivider.js +34 -8
  48. package/MenuFooter.js +36 -12
  49. package/MenuHeader.js +54 -15
  50. package/MenuItem.js +402 -33
  51. package/MenuItemText.js +51 -8
  52. package/MenuList.js +87 -34
  53. package/Modal.js +345 -16
  54. package/NestedMenuContext.js +183 -11
  55. package/Option.js +32 -34
  56. package/Overlap.js +54 -7
  57. package/PageHeader.js +62 -24
  58. package/PickerTextField.js +156 -33
  59. package/Popover.js +262 -21
  60. package/Popper.js +130 -77
  61. package/PopperPaper.js +54 -8
  62. package/Portal.js +6 -1
  63. package/Radio.js +65 -21
  64. package/RadioGroup.js +56 -17
  65. package/Rating.js +223 -87
  66. package/Select.js +387 -41
  67. package/SingleFilter.js +148 -77
  68. package/Skeleton.js +68 -17
  69. package/Slider.js +168 -69
  70. package/Snackbar.js +122 -59
  71. package/SortableList.js +32 -12
  72. package/SortableListDndContext.js +69 -22
  73. package/SortableListItem.js +92 -47
  74. package/SortableVirtualizedList.js +52 -28
  75. package/SplitButton.js +124 -86
  76. package/Squircle.js +4 -7
  77. package/StatusIndicator.js +51 -9
  78. package/Step.js +63 -38
  79. package/StepButton.js +51 -23
  80. package/StepConnector.js +48 -8
  81. package/StepContent.js +68 -25
  82. package/StepIcon.js +90 -9
  83. package/StepLabel.js +90 -14
  84. package/Stepper.js +65 -23
  85. package/SubMenu.js +203 -99
  86. package/SwipeableDrawer.js +439 -194
  87. package/Switch.js +70 -23
  88. package/Tab.js +120 -57
  89. package/TabContext.js +59 -15
  90. package/TabPanel.js +40 -13
  91. package/Table.js +60 -17
  92. package/TableBody.js +42 -12
  93. package/TableCell.js +84 -50
  94. package/TableContainer.js +32 -10
  95. package/TableFooter.js +38 -10
  96. package/TableHead.js +49 -15
  97. package/TablePagination.js +153 -77
  98. package/TableRow.js +60 -21
  99. package/Tabs.js +593 -268
  100. package/Tag.js +51 -16
  101. package/Text.js +68 -37
  102. package/TextField.js +209 -29
  103. package/Textarea.js +51 -40
  104. package/TimePicker.js +490 -230
  105. package/Tooltip.js +48 -23
  106. package/Tray.js +237 -13
  107. package/TrayMenu.js +62 -41
  108. package/VirtualizedList.js +208 -109
  109. package/VirtualizedMenu.js +359 -29
  110. package/VisuallyHidden.js +29 -6
  111. package/chunks/1250.js +98 -0
  112. package/chunks/1294.js +126 -0
  113. package/chunks/2956.js +18 -0
  114. package/chunks/4476.js +460 -0
  115. package/chunks/4491.js +10 -0
  116. package/chunks/4535.js +364 -0
  117. package/chunks/5047.js +3 -0
  118. package/chunks/6335.js +24 -0
  119. package/chunks/7279.js +10 -0
  120. package/chunks/8011.js +8 -0
  121. package/chunks/8307.js +56 -0
  122. package/chunks/8467.js +8 -0
  123. package/chunks/8809.js +8 -0
  124. package/chunks/{RadioGroup.context.js → 9551.js} +12 -6
  125. package/chunks/987.js +8 -0
  126. package/index.css +2624 -2416
  127. package/index.js +245 -193
  128. package/internal/utils/index.d.ts +1 -0
  129. package/internal/utils/setRef.d.ts +2 -0
  130. package/package.json +8 -8
  131. package/src/Alert/Alert.type.d.ts +2 -1
  132. package/src/Animation/components/Fade/Fade.d.ts +4 -2
  133. package/src/Animation/components/Grow/Grow.d.ts +4 -2
  134. package/src/Animation/components/ShowHideEye/ShowHideEye.d.ts +1 -1
  135. package/src/Animation/components/SlideIn/SlideIn.d.ts +4 -2
  136. package/src/Animation/components/SlideIn/getSlideIn.d.ts +1 -1
  137. package/src/Animation/hooks/useMotionSafeTransition/useMotionSafeTransition.d.ts +2 -0
  138. package/src/Autocomplete/SuggestionList/SuggestionList.d.ts +1 -1
  139. package/src/Autocomplete/useAutocomplete.d.ts +18 -18
  140. package/src/Autocomplete/useAutocompleteTag.d.ts +18 -18
  141. package/src/Badge/Badge.d.ts +2 -1
  142. package/src/Button/Button.classes.d.ts +1 -1
  143. package/src/ComponentsProps.d.ts +111 -110
  144. package/src/DatePicker/DatePickerDataAttributes.d.ts +11 -0
  145. package/src/DatePicker/utils/DatePickerAriaLabelUtils.d.ts +2 -1
  146. package/src/DatePicker/utils/DatePickerUtils.d.ts +1 -1
  147. package/src/Dialer/DialDelete/DialDelete.d.ts +2 -2
  148. package/src/Dialer/DialPad/DialPad.d.ts +2 -2
  149. package/src/Dialer/Dialer.d.ts +4 -2
  150. package/src/Dropdown/Dropdown.type.d.ts +2 -2
  151. package/src/InlineEditable/InlineEditable.type.d.ts +2 -1
  152. package/src/ListNavigation/useListNavigation.d.ts +3 -3
  153. package/src/MenuActions/MenuActions.d.ts +2 -2
  154. package/src/MenuItem/MenuItem.type.d.ts +1 -0
  155. package/src/MenuItem/useMenuItem.d.ts +1 -1
  156. package/src/MenuItem/useVirtualizedMenuItem.d.ts +1 -1
  157. package/src/MenuList/MenuList.type.d.ts +1 -1
  158. package/src/MenuList/MenuListContext.d.ts +2 -3
  159. package/src/Modal/Modal.type.d.ts +1 -0
  160. package/src/NestedMenuContext/MenuOverlayGroupContext.d.ts +2 -2
  161. package/src/Popover/Popover.classes.d.ts +1 -1
  162. package/src/Popover/Popover.internal.d.ts +8 -0
  163. package/src/Popover/Popover.type.d.ts +1 -0
  164. package/src/Popper/Popper.type.d.ts +10 -7
  165. package/src/Rating/utils.d.ts +3 -2
  166. package/src/Select/Select.type.d.ts +7 -5
  167. package/src/Slider/Slider.d.ts +2 -2
  168. package/src/Slider/SliderThumb.d.ts +2 -1
  169. package/src/Squircle/Squircle.d.ts +1 -1
  170. package/src/StatusIndicator/StatusIndicator.d.ts +2 -1
  171. package/src/SubMenu/PopperMenu.type.d.ts +4 -1
  172. package/src/Table/Table.type.d.ts +3 -0
  173. package/src/Table/TableContext.d.ts +3 -0
  174. package/src/Table/TableRowContext.d.ts +7 -0
  175. package/src/Table/index.d.ts +1 -0
  176. package/src/TableCell/TableCell.classes.d.ts +1 -1
  177. package/src/TableFooter/TableFooter.classes.d.ts +1 -1
  178. package/src/TableFooter/TableFooter.type.d.ts +1 -0
  179. package/src/TableHead/TableHead.classes.d.ts +1 -1
  180. package/src/TableHead/TableHead.type.d.ts +1 -0
  181. package/src/TableRow/TableRow.type.d.ts +2 -0
  182. package/chunks/AccordionContext.js +0 -6
  183. package/chunks/Alert.js +0 -48
  184. package/chunks/AvatarGroup.js +0 -22
  185. package/chunks/Backdrop.js +0 -18
  186. package/chunks/Badge.js +0 -32
  187. package/chunks/BottomNavigationItem.js +0 -36
  188. package/chunks/Button.js +0 -88
  189. package/chunks/Chip.js +0 -73
  190. package/chunks/CircularProgressIndicator.js +0 -36
  191. package/chunks/Divider.js +0 -19
  192. package/chunks/DragHandle.js +0 -11
  193. package/chunks/Drawer.js +0 -32
  194. package/chunks/ExpandCollapseCaret.js +0 -24
  195. package/chunks/FormLabel.js +0 -27
  196. package/chunks/Icon.js +0 -25
  197. package/chunks/IconButtonLabel.js +0 -68
  198. package/chunks/List.js +0 -22
  199. package/chunks/ListItem.js +0 -83
  200. package/chunks/Menu.js +0 -61
  201. package/chunks/MenuDivider.js +0 -14
  202. package/chunks/MenuItemText.js +0 -17
  203. package/chunks/MenuList.js +0 -46
  204. package/chunks/Modal.js +0 -212
  205. package/chunks/Overlap.js +0 -25
  206. package/chunks/PickerTextField.js +0 -85
  207. package/chunks/Popover.js +0 -53
  208. package/chunks/PopperPaper.js +0 -15
  209. package/chunks/Select.js +0 -220
  210. package/chunks/ShowHideEye.js +0 -56
  211. package/chunks/SlideIn.js +0 -19
  212. package/chunks/SortableArrow.js +0 -73
  213. package/chunks/Squircle.js +0 -31
  214. package/chunks/StatusIndicator.js +0 -20
  215. package/chunks/StepConnector.js +0 -21
  216. package/chunks/StepIcon.js +0 -43
  217. package/chunks/StepLabel.js +0 -29
  218. package/chunks/StepperContext.js +0 -9
  219. package/chunks/TableContext.js +0 -6
  220. package/chunks/Tablelvl2Context.js +0 -6
  221. package/chunks/TabsContext.js +0 -6
  222. package/chunks/TextField.js +0 -110
  223. package/chunks/Tooltip.js +0 -217
  224. package/chunks/VirtualizedMenu.js +0 -164
  225. package/chunks/VisuallyHidden.js +0 -12
  226. package/chunks/getFade.js +0 -27
  227. package/chunks/getGrow.js +0 -70
  228. package/chunks/getSlideIn.js +0 -30
  229. package/chunks/hasContent.js +0 -3
  230. package/chunks/useAnimationFrame.js +0 -15
  231. package/chunks/useFocusTrapStack.js +0 -36
  232. package/chunks/useHelperTextId.js +0 -22
  233. package/chunks/useListNavigation.js +0 -199
  234. package/chunks/useMenuItemSelect.js +0 -273
  235. package/chunks/useMotionSafeTransition.js +0 -9
  236. package/chunks/useNestedMenuItem.js +0 -27
  237. package/chunks/useNestedParentMenu.js +0 -113
  238. package/chunks/usePrefersReducedMotion.js +0 -36
  239. package/chunks/useTooltipForceHide.js +0 -27
  240. package/chunks/useTrayNavigate.js +0 -150
  241. package/chunks/withTooltip.js +0 -15
package/TimePicker.js CHANGED
@@ -1,79 +1,92 @@
1
- import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { createContext, useContext, forwardRef, useRef, useLayoutEffect, useState, useMemo } from 'react';
3
- import { useFocusVisible, useForkRef, combineProps, runKeyHandler, useEventCallback } from '@ringcentral/spring-base';
4
- import { CaretUpMd, CaretDownMd, RecentMd } from '@ringcentral/spring-icon';
5
- import { I as Icon } from './chunks/Icon.js';
6
- import { I as IconButton } from './chunks/IconButtonLabel.js';
7
- import clsx from 'clsx';
8
- import { useThemeProps, useClassesWithMode } from '@ringcentral/spring-theme';
9
- import { P as PickerTextField } from './chunks/PickerTextField.js';
10
- import '@mui/base';
11
- import './chunks/Squircle.js';
12
- import './chunks/withTooltip.js';
13
- import './chunks/Tooltip.js';
14
- import 'framer-motion';
15
- import './chunks/usePrefersReducedMotion.js';
16
- import './chunks/getFade.js';
17
- import './Popper.js';
18
- import '@floating-ui/react-dom';
19
- import './chunks/Modal.js';
20
- import './chunks/useFocusTrapStack.js';
21
- import './chunks/Backdrop.js';
22
- import './chunks/PopperPaper.js';
23
- import './chunks/Popover.js';
24
- import './chunks/getGrow.js';
25
- import './chunks/useHelperTextId.js';
26
- import './chunks/TextField.js';
27
- import './chunks/ShowHideEye.js';
28
- import './chunks/useMotionSafeTransition.js';
29
- import './chunks/VisuallyHidden.js';
30
-
31
- const TimePickerClassesContext = createContext(() => '');
32
- const useTimePickerClasses = () => useContext(TimePickerClassesContext);
33
-
34
- const TimeButton = forwardRef((props, ref) => {
1
+ import { jsx, jsxs } from "react/jsx-runtime";
2
+ import { createContext, forwardRef, useContext, useLayoutEffect, useMemo, useRef, useState } from "react";
3
+ import { combineProps, runKeyHandler, useEventCallback, useFocusVisible, useForkRef } from "@ringcentral/spring-base";
4
+ import { CaretDownMd, CaretUpMd, RecentMd } from "@ringcentral/spring-icon";
5
+ import clsx from "clsx";
6
+ import { useClassesWithMode, useThemeProps } from "@ringcentral/spring-theme";
7
+ import { Icon as Icon_Icon } from "./chunks/8307.js";
8
+ import { IconButton as IconButton_IconButton } from "./IconButton.js";
9
+ import { PickerTextField as PickerTextField_PickerTextField } from "./PickerTextField.js";
10
+
11
+
12
+
13
+
14
+
15
+
16
+
17
+
18
+
19
+
20
+
21
+ const TimePickerClassesContext = createContext(()=>'');
22
+ const useTimePickerClasses = ()=>useContext(TimePickerClassesContext);
23
+
24
+
25
+
26
+
27
+
28
+
29
+
30
+ const TimeButton = /*#__PURE__*/ forwardRef((props, ref)=>{
35
31
  const { value, selected, disabled, children, onFocus, onBlur, className, ...rest } = props;
36
32
  const cls = useTimePickerClasses();
37
33
  const { focusVisible, focusVisibleHandlers, focusVisibleRef } = useFocusVisible();
38
34
  const handleRef = useForkRef(ref, focusVisibleRef);
39
- return (jsx("button", { ref: handleRef, className: clsx(className, cls('time-button', {
35
+ return /*#__PURE__*/ jsx("button", {
36
+ ref: handleRef,
37
+ className: clsx(className, cls('time-button', {
40
38
  selected,
41
39
  disabled,
42
- focusVisible,
43
- })), ...rest, ...combineProps({ onBlur, onFocus }, focusVisibleHandlers), children: children }));
40
+ focusVisible
41
+ })),
42
+ ...rest,
43
+ ...combineProps({
44
+ onBlur,
45
+ onFocus
46
+ }, focusVisibleHandlers),
47
+ type: "button",
48
+ children: children
49
+ });
44
50
  });
45
51
  TimeButton.displayName = 'SuiTimeButton';
46
52
 
53
+
47
54
  function isClick(event) {
48
55
  return event.type === 'click';
49
56
  }
50
57
 
51
- var TIME_SYSTEM_TEXT;
52
- (function (TIME_SYSTEM_TEXT) {
58
+ var constant_TIME_SYSTEM_TEXT = /*#__PURE__*/ function(TIME_SYSTEM_TEXT) {
53
59
  TIME_SYSTEM_TEXT["PM"] = "PM";
54
60
  TIME_SYSTEM_TEXT["AM"] = "AM";
55
- })(TIME_SYSTEM_TEXT || (TIME_SYSTEM_TEXT = {}));
61
+ return TIME_SYSTEM_TEXT;
62
+ }(constant_TIME_SYSTEM_TEXT || {});
56
63
  const K_ENTER = 'Enter';
57
64
  const K_SPACE = ' ';
58
65
 
59
- const parseNumber = (value, isTwelveHourSystem) => {
66
+
67
+
68
+ const parseNumber = (value, isTwelveHourSystem)=>{
60
69
  const count = isTwelveHourSystem ? value % 12 : value;
61
- if (isTwelveHourSystem && count === 0)
62
- return 12;
70
+ if (isTwelveHourSystem && count === 0) return 12;
63
71
  return count;
64
72
  };
65
- const parseNumberToString = (value, isTwelveHourSystem) => {
73
+ const parseNumberToString = (value, isTwelveHourSystem)=>{
66
74
  const count = parseNumber(value, isTwelveHourSystem);
67
75
  return pad(count);
68
76
  };
69
- const pad = (num, size = 2) => {
77
+ /** add miss zero */ const pad = (num, size = 2)=>{
70
78
  let s = `${num}`;
71
- while (s.length < size) {
79
+ while(s.length < size){
72
80
  s = `0${s}`;
73
81
  }
74
82
  return s;
75
83
  };
76
- const getFormattedTime = ({ hour, minute, period }, isTwelveHourSystem) => {
84
+ /**
85
+ * get formatted time hh:mm
86
+ * @param option `{hour, min, period}`
87
+ * @param isTwelveHourSystem boolean
88
+ * @returns `hh:mm AM` or `hh:mm PM` or `hh:mm`
89
+ */ const getFormattedTime = ({ hour, minute, period }, isTwelveHourSystem)=>{
77
90
  const formattedHour = parseNumberToString(hour, isTwelveHourSystem);
78
91
  const formattedMinute = parseNumberToString(minute);
79
92
  const periodText = isTwelveHourSystem ? ` ${period}` : '';
@@ -84,12 +97,11 @@ const HOUR_MINUTES = 60;
84
97
  const TIME_GAP = 15;
85
98
  const ONE_HOUR = HOUR_MINUTES * HOUR_MINUTES * 1000;
86
99
  const ONE_MINUTE = HOUR_MINUTES * 1000;
87
- const buildConsecutiveNumberToArray = (min, max) => {
100
+ const buildConsecutiveNumberToArray = (min, max)=>{
88
101
  const array = [];
89
- if (min > max)
90
- return array;
102
+ if (min > max) return array;
91
103
  let count = min;
92
- while (count <= max) {
104
+ while(count <= max){
93
105
  array.push(count);
94
106
  count++;
95
107
  }
@@ -97,69 +109,89 @@ const buildConsecutiveNumberToArray = (min, max) => {
97
109
  };
98
110
  const twelveHourSystemSource = buildConsecutiveNumberToArray(0, 11);
99
111
  const twentyFourHourSystemSource = buildConsecutiveNumberToArray(0, 23);
100
- const minuteSource = [0, 15, 30, 45];
112
+ const minuteSource = [
113
+ 0,
114
+ 15,
115
+ 30,
116
+ 45
117
+ ];
101
118
  const lastMinute = 45;
102
- const getTimestampFromDate = (date) => {
119
+ /**
120
+ * hour and minute timestamp
121
+ */ const getTimestampFromDate = (date)=>{
103
122
  return date.getHours() * ONE_HOUR + date.getMinutes() * ONE_MINUTE;
104
123
  };
105
- const getHourAndMinute = (times) => {
124
+ /**
125
+ * hour and minute number
126
+ */ const getHourAndMinute = (times)=>{
106
127
  if (times === null) {
107
128
  return {
108
129
  hour: 0,
109
- minute: 0,
130
+ minute: 0
110
131
  };
111
132
  }
112
133
  const minute = times % ONE_HOUR;
113
134
  const hour = (times - minute) / ONE_HOUR;
114
135
  return {
115
136
  hour,
116
- minute: Math.floor(minute / ONE_MINUTE),
137
+ minute: Math.floor(minute / ONE_MINUTE)
117
138
  };
118
139
  };
119
- function getTimestamp(nowTime) {
140
+ /**
141
+ * get timestamp from date or timestamp
142
+ *
143
+ * if nowTime is number, it must be hour and minute timestamp
144
+ */ function getTimestamp(nowTime) {
120
145
  return nowTime instanceof Date ? getTimestampFromDate(nowTime) : nowTime;
121
146
  }
122
- const getTimestampFromHourAndMin = (option) => {
147
+ /**
148
+ * hour and min object to timestamp
149
+ */ const getTimestampFromHourAndMin = (option)=>{
123
150
  return option.hour * ONE_HOUR + option.minute * ONE_MINUTE;
124
151
  };
125
- function getPeriod(currHour) {
126
- return currHour >= HALF_DAY_HOURS ? TIME_SYSTEM_TEXT.PM : TIME_SYSTEM_TEXT.AM;
152
+ /**
153
+ * get period, `PM` or `AM`
154
+ */ function getPeriod(currHour) {
155
+ return currHour >= HALF_DAY_HOURS ? constant_TIME_SYSTEM_TEXT.PM : constant_TIME_SYSTEM_TEXT.AM;
127
156
  }
128
- const getRecoupHour = (currHour, period) => {
129
- switch (period) {
130
- case TIME_SYSTEM_TEXT.PM:
157
+ const getRecoupHour = (currHour, period)=>{
158
+ switch(period){
159
+ case constant_TIME_SYSTEM_TEXT.PM:
131
160
  if (currHour < HALF_DAY_HOURS) {
132
161
  return HALF_DAY_HOURS;
133
162
  }
134
163
  break;
135
- case TIME_SYSTEM_TEXT.AM:
164
+ case constant_TIME_SYSTEM_TEXT.AM:
165
+ // FIXME
166
+ // oxlint-disable-next-line sonarjs/no-collapsible-if
136
167
  if (currHour < HALF_DAY_HOURS) {
137
168
  if (currHour >= HALF_DAY_HOURS) {
138
169
  return -HALF_DAY_HOURS;
139
170
  }
140
171
  }
141
172
  break;
173
+ default:
174
+ break;
142
175
  }
143
176
  return 0;
144
177
  };
145
178
 
146
- const getDateBeginning = () => {
179
+
180
+
181
+ const getDateBeginning = ()=>{
147
182
  const date = new Date();
148
183
  date.setHours(0, 0, 0, 0);
149
184
  return date;
150
185
  };
151
- class TimeBoundary {
152
- _hour = undefined;
153
- value;
154
- timeGap;
186
+ /**
187
+ * get target time boundary, what time is nearest time with that timeGap
188
+ */ class TimeBoundary {
155
189
  get hour() {
156
190
  return this._hour;
157
191
  }
158
- _minute = undefined;
159
192
  get minute() {
160
193
  return this._minute;
161
194
  }
162
- _date = undefined;
163
195
  get date() {
164
196
  return this._date;
165
197
  }
@@ -169,15 +201,17 @@ class TimeBoundary {
169
201
  }
170
202
  this._date = value;
171
203
  }
172
- timestamp = 0;
173
- constructor(value, direction, timeGap) {
204
+ constructor(value, direction, timeGap){
205
+ this._hour = undefined;
206
+ this._minute = undefined;
207
+ this._date = undefined;
208
+ this.timestamp = 0;
174
209
  this.value = value;
175
210
  this.timeGap = timeGap;
176
211
  if (value) {
177
212
  if (direction === 'after') {
178
213
  this.getAfterNearTime();
179
- }
180
- else {
214
+ } else {
181
215
  this.getBeforeNearTime();
182
216
  }
183
217
  this.date = new Date(getDateBeginning().setHours(this.hour, this.minute, 0, 0));
@@ -188,12 +222,13 @@ class TimeBoundary {
188
222
  let hour = time.getHours();
189
223
  let minute = time.getMinutes();
190
224
  const partCount = Math.ceil(minute / this.timeGap);
191
- if (partCount >= HOUR_MINUTES / this.timeGap) {
225
+ // when time is the latest or more, add one hour
226
+ if (partCount >= (/* inlined export .HOUR_MINUTES */60) / this.timeGap) {
192
227
  hour++;
193
228
  minute = 0;
194
229
  }
195
230
  this._hour = hour;
196
- this._minute = (partCount * this.timeGap) % HOUR_MINUTES;
231
+ this._minute = partCount * this.timeGap % (/* inlined export .HOUR_MINUTES */60);
197
232
  }
198
233
  getBeforeNearTime() {
199
234
  const time = this.getDateTime();
@@ -210,7 +245,7 @@ class TimeBoundary {
210
245
  return date;
211
246
  }
212
247
  }
213
- const getRangeBoundary = ({ min, max, gap = TIME_GAP, }) => {
248
+ const getRangeBoundary = ({ min, max, gap = (/* inlined export .TIME_GAP */15) })=>{
214
249
  if (min !== undefined && max !== undefined) {
215
250
  const minTimestamp = getTimestamp(min);
216
251
  const maxTimestamp = getTimestamp(max);
@@ -220,59 +255,76 @@ const getRangeBoundary = ({ min, max, gap = TIME_GAP, }) => {
220
255
  }
221
256
  return {
222
257
  min: new TimeBoundary(min, 'after', gap),
223
- max: new TimeBoundary(max, 'before', gap),
258
+ max: new TimeBoundary(max, 'before', gap)
224
259
  };
225
260
  };
226
261
 
227
- function getNumberPickerBoundary(currentHour, { range, isTwelveHourSystem }) {
228
- const currentIsPM = currentHour >= HALF_DAY_HOURS;
262
+
263
+ /**
264
+ * get range from current hour
265
+ */ function getNumberPickerBoundary(currentHour, { range, isTwelveHourSystem }) {
266
+ const currentIsPM = currentHour >= (/* inlined export .HALF_DAY_HOURS */12);
229
267
  let maxHour = range.max.hour ?? 23;
230
- let maxMinute = range.max.minute ?? lastMinute;
268
+ let maxMinute = range.max.minute ?? (/* inlined export .lastMinute */45);
231
269
  let minHour = range.min.hour ?? 0;
232
270
  let minMinute = range.min.minute ?? 0;
233
271
  if (isTwelveHourSystem) {
234
272
  if (currentIsPM) {
235
- if (minHour < HALF_DAY_HOURS) {
273
+ if (minHour < (/* inlined export .HALF_DAY_HOURS */12)) {
236
274
  minHour = 0;
237
275
  minMinute = 0;
238
276
  }
239
- }
240
- else if (maxHour >= HALF_DAY_HOURS) {
277
+ } else if (maxHour >= (/* inlined export .HALF_DAY_HOURS */12)) {
241
278
  maxHour = 11;
242
- maxMinute = lastMinute;
279
+ maxMinute = (/* inlined export .lastMinute */45);
243
280
  }
244
281
  }
245
- if (maxMinute !== lastMinute && currentHour < maxHour) {
246
- maxMinute = lastMinute;
282
+ if (maxMinute !== (/* inlined export .lastMinute */45) && currentHour < maxHour) {
283
+ maxMinute = (/* inlined export .lastMinute */45);
247
284
  }
248
285
  if (minMinute !== 0 && currentHour > minHour) {
249
286
  minMinute = 0;
250
287
  }
251
288
  if (isTwelveHourSystem) {
252
- maxHour = maxHour % HALF_DAY_HOURS;
253
- minHour = minHour % HALF_DAY_HOURS;
289
+ maxHour = maxHour % (/* inlined export .HALF_DAY_HOURS */12);
290
+ minHour = minHour % (/* inlined export .HALF_DAY_HOURS */12);
254
291
  }
255
292
  return {
256
293
  hour: {
257
294
  min: minHour,
258
- max: maxHour,
295
+ max: maxHour
259
296
  },
260
297
  minute: {
261
298
  min: minMinute,
262
- max: maxMinute,
263
- },
299
+ max: maxMinute
300
+ }
264
301
  };
265
302
  }
266
303
 
267
- const NumberPicker = forwardRef((props, ref) => {
304
+
305
+
306
+
307
+
308
+
309
+
310
+
311
+
312
+
313
+
314
+
315
+
316
+
317
+
318
+ const NumberPicker = /*#__PURE__*/ forwardRef((props, ref)=>{
268
319
  const { onClick, value, onChange: onUpdate, onKeyDown, source, min, max, step, renderValue, getScreenReaderLabel, autoFocus, ...rest } = props;
269
320
  const { focusVisible, focusVisibleHandlers, focusVisibleRef } = useFocusVisible();
270
321
  const pickerRef = useRef(null);
271
322
  const handlePickerRef = useForkRef(pickerRef, focusVisibleRef);
272
- useLayoutEffect(() => {
323
+ useLayoutEffect(()=>{
273
324
  if (autoFocus) {
274
325
  pickerRef.current?.focus();
275
326
  }
327
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
276
328
  }, []);
277
329
  const index = Math.floor(value / step);
278
330
  const isFirst = index === 0;
@@ -281,179 +333,347 @@ const NumberPicker = forwardRef((props, ref) => {
281
333
  const latestValue = source[source.length - 1];
282
334
  const decreaseValue = isFirst ? latestValue : source[index - 1];
283
335
  const increaseValue = isLatest ? firstValue : source[index + 1];
284
- const decreaseDisabled = isFirst
285
- ? !!(max !== undefined && latestValue > max)
286
- : !!(min !== undefined && decreaseValue < min);
287
- const increaseDisabled = isLatest
288
- ? !!(min !== undefined && firstValue < min)
289
- : !!(max !== undefined && increaseValue > max);
290
- const showValue = (() => {
336
+ const decreaseDisabled = isFirst ? !!(max !== undefined && latestValue > max) : !!(min !== undefined && decreaseValue < min);
337
+ const increaseDisabled = isLatest ? !!(min !== undefined && firstValue < min) : !!(max !== undefined && increaseValue > max);
338
+ const showValue = (()=>{
291
339
  if (renderValue) {
292
340
  return renderValue(value);
293
341
  }
294
342
  return pad(value);
295
343
  })();
296
344
  const label = getScreenReaderLabel?.(showValue);
297
- const handleKeyDown = (event) => {
345
+ const handleKeyDown = (event)=>{
298
346
  runKeyHandler(event, {
299
- ArrowUp: () => {
347
+ ArrowUp: ()=>{
300
348
  if (increaseDisabled) {
301
349
  return;
302
350
  }
303
351
  onUpdate(increaseValue, 'arrowKey');
304
352
  },
305
- ArrowDown: () => {
353
+ ArrowDown: ()=>{
306
354
  if (decreaseDisabled) {
307
355
  return;
308
356
  }
309
357
  onUpdate(decreaseValue, 'arrowKey');
310
- },
358
+ }
311
359
  });
312
360
  onKeyDown?.(event);
313
361
  };
314
362
  const cls = useTimePickerClasses();
315
- return (jsxs("div", { tabIndex: 0, className: cls('number-picker', { focusVisible }), onKeyDown: handleKeyDown, "aria-live": "assertive", "aria-label": label, ref: handlePickerRef, ...focusVisibleHandlers, ...rest, children: [jsx(IconButton, { shape: 'squircle', variant: 'contained', background: false, color: 'secondary', size: "small", tabIndex: -1, disabled: increaseDisabled, onClick: () => {
363
+ return /*#__PURE__*/ jsxs("div", {
364
+ tabIndex: 0,
365
+ className: cls('number-picker', {
366
+ focusVisible
367
+ }),
368
+ onKeyDown: handleKeyDown,
369
+ "aria-live": "assertive",
370
+ "aria-label": label,
371
+ ref: handlePickerRef,
372
+ ...focusVisibleHandlers,
373
+ ...rest,
374
+ children: [
375
+ /*#__PURE__*/ jsx(IconButton_IconButton, {
376
+ shape: 'squircle',
377
+ variant: 'contained',
378
+ background: false,
379
+ color: 'secondary',
380
+ size: "small",
381
+ tabIndex: -1,
382
+ disabled: increaseDisabled,
383
+ onClick: ()=>{
316
384
  onUpdate(increaseValue, 'arrowButton');
317
- }, "data-sui-number-picker-previous": true, "aria-label": "Arrow Up", children: jsx(Icon, { size: "medium", symbol: CaretUpMd }) }), jsx(TimeButton, { tabIndex: -1, onClick: onClick, "data-sui-number-picker-text": true, children: showValue }), jsx(IconButton, { shape: 'squircle', variant: 'contained', background: false, color: 'secondary', size: "small", tabIndex: -1, disabled: decreaseDisabled, onClick: () => {
385
+ },
386
+ "data-sui-number-picker-previous": true,
387
+ "aria-label": "Arrow Up",
388
+ children: /*#__PURE__*/ jsx(Icon_Icon, {
389
+ size: "medium",
390
+ symbol: CaretUpMd
391
+ })
392
+ }),
393
+ /*#__PURE__*/ jsx(TimeButton, {
394
+ tabIndex: -1,
395
+ onClick: onClick,
396
+ "data-sui-number-picker-text": true,
397
+ children: showValue
398
+ }),
399
+ /*#__PURE__*/ jsx(IconButton_IconButton, {
400
+ shape: 'squircle',
401
+ variant: 'contained',
402
+ background: false,
403
+ color: 'secondary',
404
+ size: "small",
405
+ tabIndex: -1,
406
+ disabled: decreaseDisabled,
407
+ onClick: ()=>{
318
408
  onUpdate(decreaseValue, 'arrowButton');
319
- }, "data-sui-number-picker-next": true, "aria-label": "Arrow Down", children: jsx(Icon, { size: "medium", symbol: CaretDownMd }) })] }));
409
+ },
410
+ "data-sui-number-picker-next": true,
411
+ "aria-label": "Arrow Down",
412
+ children: /*#__PURE__*/ jsx(Icon_Icon, {
413
+ size: "medium",
414
+ symbol: CaretDownMd
415
+ })
416
+ })
417
+ ]
418
+ });
320
419
  });
321
420
  NumberPicker.displayName = 'SuiNumberPicker';
322
421
 
323
- const SelectionView = (props) => {
324
- const { source, onConfirm, value, min: minProp, max: maxProp, isTwelveHourSystem, viewType, } = props;
325
- const min = minProp !== undefined && isTwelveHourSystem
326
- ? minProp % HALF_DAY_HOURS
327
- : minProp;
328
- const max = maxProp !== undefined && isTwelveHourSystem
329
- ? maxProp % HALF_DAY_HOURS
330
- : maxProp;
422
+
423
+
424
+
425
+
426
+
427
+
428
+
429
+
430
+
431
+ const SelectionView = (props)=>{
432
+ const { source, onConfirm, value, min: minProp, max: maxProp, isTwelveHourSystem, viewType } = props;
433
+ const min = minProp !== undefined && isTwelveHourSystem ? minProp % (/* inlined export .HALF_DAY_HOURS */12) : minProp;
434
+ const max = maxProp !== undefined && isTwelveHourSystem ? maxProp % (/* inlined export .HALF_DAY_HOURS */12) : maxProp;
331
435
  const showValue = parseNumberToString(value, isTwelveHourSystem);
332
436
  const cls = useTimePickerClasses();
333
- return (jsx("div", { className: cls(`${viewType}-selection-view`, 'picker-view'), children: source.map((v) => {
334
- const disabled = !!((max !== undefined && v > max) ||
335
- (min !== undefined && v < min));
437
+ return /*#__PURE__*/ jsx("div", {
438
+ className: cls(`${viewType}-selection-view`, 'picker-view'),
439
+ children: source.map((v)=>{
440
+ const disabled = !!(max !== undefined && v > max || min !== undefined && v < min);
336
441
  const itemShowValue = parseNumberToString(v, isTwelveHourSystem);
337
- const confirm = () => {
338
- if (disabled)
339
- return;
442
+ const confirm = ()=>{
443
+ if (disabled) return;
340
444
  onConfirm(v);
341
445
  };
342
- return (jsx(TimeButton, { disabled: disabled, onClick: confirm, selected: itemShowValue === showValue, "data-sui-time-button": itemShowValue, children: itemShowValue }, v));
343
- }) }));
446
+ return /*#__PURE__*/ jsx(TimeButton, {
447
+ disabled: disabled,
448
+ onClick: confirm,
449
+ selected: itemShowValue === showValue,
450
+ "data-sui-time-button": itemShowValue,
451
+ children: itemShowValue
452
+ }, v);
453
+ })
454
+ });
344
455
  };
345
456
  SelectionView.displayName = 'SuiSelectionView';
346
457
 
347
- const ToggleText = forwardRef(({ onChange: onUpdate, value, disabled, getScreenReaderLabel, ...rest }, ref) => {
458
+
459
+
460
+
461
+
462
+
463
+
464
+
465
+
466
+
467
+
468
+ const ToggleText = /*#__PURE__*/ forwardRef(({ onChange: onUpdate, value, disabled, getScreenReaderLabel, ...rest }, ref)=>{
348
469
  const label = getScreenReaderLabel?.(value);
349
- const nextValue = value === TIME_SYSTEM_TEXT.AM ? TIME_SYSTEM_TEXT.PM : TIME_SYSTEM_TEXT.AM;
350
- const handleClick = useEventCallback((event) => {
351
- if (disabled || !isClick(event))
352
- return;
470
+ const nextValue = value === constant_TIME_SYSTEM_TEXT.AM ? constant_TIME_SYSTEM_TEXT.PM : constant_TIME_SYSTEM_TEXT.AM;
471
+ const handleClick = useEventCallback((event)=>{
472
+ if (disabled || !isClick(event)) return;
353
473
  onUpdate(nextValue, 'arrowButton');
354
474
  });
355
- const handleToggleKeyDown = useEventCallback((event) => {
475
+ const handleToggleKeyDown = useEventCallback((event)=>{
356
476
  if (disabled) {
357
477
  return;
358
478
  }
359
- const togglePeriod = () => {
479
+ const togglePeriod = ()=>{
360
480
  onUpdate(nextValue, 'arrowKey');
361
481
  };
362
482
  runKeyHandler(event, {
363
483
  ArrowUp: togglePeriod,
364
- ArrowDown: togglePeriod,
484
+ ArrowDown: togglePeriod
365
485
  });
366
486
  });
367
- return (jsx(TimeButton, { onClick: handleClick, onKeyDown: handleToggleKeyDown, disabled: disabled, "aria-live": "assertive", "aria-label": label, ...rest, children: value }));
487
+ return /*#__PURE__*/ jsx(TimeButton, {
488
+ onClick: handleClick,
489
+ onKeyDown: handleToggleKeyDown,
490
+ disabled: disabled,
491
+ "aria-live": "assertive",
492
+ "aria-label": label,
493
+ ...rest,
494
+ children: value
495
+ });
368
496
  });
369
497
  ToggleText.displayName = 'SuiToggleText';
370
498
 
371
- const PickerView = (props) => {
372
- const { isTwelveHourSystem, selectionShowType, onSelectionShowTypeChange, screenReaderProps, defaultValue, onChange, range, afterDraftConfirm, } = props;
499
+
500
+
501
+
502
+
503
+
504
+
505
+
506
+
507
+
508
+
509
+ const PickerView = (props)=>{
510
+ const { isTwelveHourSystem, selectionShowType, onSelectionShowTypeChange, screenReaderProps, defaultValue, onChange, range, afterDraftConfirm } = props;
373
511
  const [value, setValue] = useState(defaultValue);
374
- const handleChange = (toValue, onlyInnerState) => {
512
+ const handleChange = (toValue, onlyInnerState)=>{
375
513
  const resultValue = {
376
514
  hour: toValue.hour ?? value.hour,
377
515
  minute: toValue.minute ?? value.minute,
378
- period: toValue.period ?? value.period,
516
+ period: toValue.period ?? value.period
379
517
  };
380
518
  setValue(resultValue);
381
519
  if (!onlyInnerState) {
382
520
  onChange(resultValue);
383
521
  }
384
522
  };
385
- const boundary = useMemo(() => {
386
- const originHour = value.hour +
387
- (isTwelveHourSystem && value.period === TIME_SYSTEM_TEXT.PM ? 12 : 0);
523
+ // get boundary must use current show value
524
+ const boundary = useMemo(()=>{
525
+ const originHour = value.hour + (isTwelveHourSystem && value.period === constant_TIME_SYSTEM_TEXT.PM ? 12 : 0);
388
526
  return getNumberPickerBoundary(originHour, {
389
527
  range,
390
- isTwelveHourSystem,
528
+ isTwelveHourSystem
391
529
  });
392
- }, [range, value, isTwelveHourSystem]);
393
- useLayoutEffect(() => {
530
+ }, [
531
+ range,
532
+ value,
533
+ isTwelveHourSystem
534
+ ]);
535
+ // reset pickerValue if pickerValue is out of range
536
+ useLayoutEffect(()=>{
394
537
  const { hour, minute, period } = value;
395
538
  if (hour > boundary.hour.max || minute > boundary.minute.max) {
396
539
  handleChange({
397
540
  hour: boundary.hour.max,
398
541
  minute: boundary.minute.max,
399
- period,
542
+ period
400
543
  }, true);
401
- }
402
- else if (hour < boundary.hour.min || minute < boundary.minute.min) {
544
+ } else if (hour < boundary.hour.min || minute < boundary.minute.min) {
403
545
  handleChange({
404
546
  hour: boundary.hour.min,
405
547
  minute: boundary.minute.min,
406
- period,
548
+ period
407
549
  }, true);
408
550
  }
409
- }, [boundary, value]);
551
+ // ignore `handleChange`
552
+ // oxlint-disable-next-line react-hooks/exhaustive-deps
553
+ }, [
554
+ boundary,
555
+ value
556
+ ]);
410
557
  const isHourView = selectionShowType === 'hour';
411
- const { getHourPickerAriaLabel, getMinutePickerAriaLabel, getPeriodToggleAriaLabel, } = screenReaderProps;
412
- const toggleTextDisabled = useMemo(() => {
413
- return Boolean(range.min.hour &&
414
- (range.min.hour >= HALF_DAY_HOURS ||
415
- (range.max.hour &&
416
- range.min.hour < HALF_DAY_HOURS &&
417
- range.max.hour < HALF_DAY_HOURS)));
418
- }, [range.max.hour, range.min.hour]);
558
+ const { getHourPickerAriaLabel, getMinutePickerAriaLabel, getPeriodToggleAriaLabel } = screenReaderProps;
559
+ const toggleTextDisabled = useMemo(()=>{
560
+ return Boolean(range.min.hour && // * min is pm time
561
+ (range.min.hour >= (/* inlined export .HALF_DAY_HOURS */12) || range.max.hour && // * min and max in same AM period
562
+ range.min.hour < (/* inlined export .HALF_DAY_HOURS */12) && range.max.hour < (/* inlined export .HALF_DAY_HOURS */12)));
563
+ }, [
564
+ range.max.hour,
565
+ range.min.hour
566
+ ]);
419
567
  const cls = useTimePickerClasses();
420
- return selectionShowType === 'none' ? (jsxs("div", { className: cls('main-view', 'picker-view', {
421
- 'twelve-hour': isTwelveHourSystem,
422
- }), onKeyDown: (event) => {
423
- const confirm = () => {
568
+ return selectionShowType === 'none' ? /*#__PURE__*/ jsxs("div", {
569
+ className: cls('main-view', 'picker-view', {
570
+ 'twelve-hour': isTwelveHourSystem
571
+ }),
572
+ onKeyDown: (event)=>{
573
+ const confirm = ()=>{
424
574
  onChange(value);
425
575
  afterDraftConfirm();
426
576
  };
427
577
  runKeyHandler(event, {
428
578
  Enter: confirm,
429
- ' ': confirm,
579
+ ' ': confirm
430
580
  });
431
- }, children: [jsx(NumberPicker, { onClick: () => onSelectionShowTypeChange('hour'), value: value.hour, ...boundary.hour, onChange: (hour, reason) => {
432
- handleChange({ hour }, reason === 'arrowKey');
433
- }, step: 1, source: isTwelveHourSystem
434
- ? twelveHourSystemSource
435
- : twentyFourHourSystemSource, renderValue: (hourValue) => {
581
+ },
582
+ children: [
583
+ /*#__PURE__*/ jsx(NumberPicker, {
584
+ onClick: ()=>onSelectionShowTypeChange('hour'),
585
+ value: value.hour,
586
+ ...boundary.hour,
587
+ onChange: (hour, reason)=>{
588
+ handleChange({
589
+ hour
590
+ }, reason === 'arrowKey');
591
+ },
592
+ step: 1,
593
+ source: isTwelveHourSystem ? twelveHourSystemSource : twentyFourHourSystemSource,
594
+ renderValue: (hourValue)=>{
436
595
  return parseNumberToString(hourValue, isTwelveHourSystem);
437
- }, "data-sui-picker-hour": true, autoFocus: true, getScreenReaderLabel: getHourPickerAriaLabel }), jsx("div", { children: ":" }), jsx(NumberPicker, { ...boundary.minute, onChange: (minute, reason) => handleChange({ minute }, reason === 'arrowKey'), onClick: () => onSelectionShowTypeChange('minute'), value: value.minute, source: minuteSource, step: TIME_GAP, "data-sui-picker-minute": true, getScreenReaderLabel: getMinutePickerAriaLabel }), isTwelveHourSystem && (jsx(ToggleText, { disabled: toggleTextDisabled, onChange: (period, reason) => handleChange({ period }, reason === 'arrowKey'), value: value.period, getScreenReaderLabel: getPeriodToggleAriaLabel }))] })) : (jsx(SelectionView, { ...(isHourView ? boundary.hour : boundary.minute), viewType: selectionShowType, source: isHourView
438
- ? isTwelveHourSystem
439
- ? twelveHourSystemSource
440
- : twentyFourHourSystemSource
441
- : minuteSource, isTwelveHourSystem: isHourView && isTwelveHourSystem, value: isHourView ? value.hour : value.minute, onConfirm: (toValue) => {
442
- handleChange(isHourView ? { hour: toValue } : { minute: toValue }, false);
596
+ },
597
+ "data-sui-picker-hour": true,
598
+ autoFocus: true,
599
+ getScreenReaderLabel: getHourPickerAriaLabel
600
+ }),
601
+ /*#__PURE__*/ jsx("div", {
602
+ children: ":"
603
+ }),
604
+ /*#__PURE__*/ jsx(NumberPicker, {
605
+ ...boundary.minute,
606
+ onChange: (minute, reason)=>handleChange({
607
+ minute
608
+ }, reason === 'arrowKey'),
609
+ onClick: ()=>onSelectionShowTypeChange('minute'),
610
+ value: value.minute,
611
+ source: minuteSource,
612
+ step: (/* inlined export .TIME_GAP */15),
613
+ "data-sui-picker-minute": true,
614
+ getScreenReaderLabel: getMinutePickerAriaLabel
615
+ }),
616
+ isTwelveHourSystem && /*#__PURE__*/ jsx(ToggleText, {
617
+ disabled: toggleTextDisabled,
618
+ onChange: (period, reason)=>handleChange({
619
+ period
620
+ }, reason === 'arrowKey'),
621
+ value: value.period,
622
+ getScreenReaderLabel: getPeriodToggleAriaLabel
623
+ })
624
+ ]
625
+ }) : /*#__PURE__*/ jsx(SelectionView, {
626
+ ...isHourView ? boundary.hour : boundary.minute,
627
+ viewType: selectionShowType,
628
+ source: isHourView ? isTwelveHourSystem ? twelveHourSystemSource : twentyFourHourSystemSource : minuteSource,
629
+ isTwelveHourSystem: isHourView && isTwelveHourSystem,
630
+ value: isHourView ? value.hour : value.minute,
631
+ onConfirm: (toValue)=>{
632
+ handleChange(isHourView ? {
633
+ hour: toValue
634
+ } : {
635
+ minute: toValue
636
+ }, false);
443
637
  onSelectionShowTypeChange('none');
444
- }, "data-sui-picker-selection-view": selectionShowType }));
638
+ },
639
+ "data-sui-picker-selection-view": selectionShowType
640
+ });
445
641
  };
446
642
 
447
- var TimePicker$1 = {"sui-time-picker-picker-root":"sui-time-picker-picker-root","sui-time-picker-time-button":"sui-time-picker-time-button","sui-focus-visible":"sui-focus-visible","sui-selected":"sui-selected","sui-disabled":"sui-disabled","sui-time-picker-number-picker":"sui-time-picker-number-picker","sui-time-picker-picker-view":"sui-time-picker-picker-view","sui-time-picker-main-view":"sui-time-picker-main-view","sui-time-picker-twelve-hour":"sui-time-picker-twelve-hour","sui-time-picker-minute-selection-view":"sui-time-picker-minute-selection-view","sui-time-picker-hour-selection-view":"sui-time-picker-hour-selection-view","sui-compact":"sui-compact"};
448
643
 
449
- const TimePicker = forwardRef((inProps, ref) => {
450
- const props = useThemeProps({ props: inProps, name: 'TimePicker' });
644
+
645
+
646
+
647
+
648
+
649
+ // extracted by css-extract-rspack-plugin
650
+ /* export default */ var TimePicker = ({"sui-time-picker-picker-root":"sui-time-picker-picker-root","sui-time-picker-time-button":"sui-time-picker-time-button","sui-focus-visible":"sui-focus-visible","sui-selected":"sui-selected","sui-disabled":"sui-disabled","sui-time-picker-number-picker":"sui-time-picker-number-picker","sui-time-picker-picker-view":"sui-time-picker-picker-view","sui-time-picker-main-view":"sui-time-picker-main-view","sui-time-picker-twelve-hour":"sui-time-picker-twelve-hour","sui-time-picker-minute-selection-view":"sui-time-picker-minute-selection-view","sui-time-picker-hour-selection-view":"sui-time-picker-hour-selection-view","sui-compact":"sui-compact"});
651
+
652
+ /* oxlint-disable @typescript-eslint/no-non-null-assertion */
653
+
654
+
655
+
656
+
657
+
658
+
659
+
660
+
661
+
662
+ const TimePicker_TimePicker = /*#__PURE__*/ forwardRef((inProps, ref)=>{
663
+ const props = useThemeProps({
664
+ props: inProps,
665
+ name: 'TimePicker'
666
+ });
451
667
  const { isTwelveHourSystem = false, value, onChange, disabled, min, max, onKeyDown, onClear, PopoverProps, classes, defaultPickerValue = null, clearBtn = true, dateMode = false, screenReaderProps = {
452
- getHourPickerAriaLabel: (hour) => `Hour: ${hour}, use up and down arrow keys to change hour time by 1`,
453
- getMinutePickerAriaLabel: (minute) => `Minute: ${minute}, use up and down arrow keys to change minutes time by 15 minutes`,
454
- getPeriodToggleAriaLabel: (period) => `${period}, use up or down arrow keys to switch between AM or PM`,
668
+ getHourPickerAriaLabel: (hour)=>`Hour: ${hour}, use up and down arrow keys to change hour time by 1`,
669
+ getMinutePickerAriaLabel: (minute)=>`Minute: ${minute}, use up and down arrow keys to change minutes time by 15 minutes`,
670
+ getPeriodToggleAriaLabel: (period)=>`${period}, use up or down arrow keys to switch between AM or PM`
455
671
  }, className, ...rest } = props;
456
- const cls = useClassesWithMode('time-picker', classes, className, ['main-view', 'hour-selection-view', 'minute-selection-view']);
672
+ const cls = useClassesWithMode('time-picker', classes, className, [
673
+ 'main-view',
674
+ 'hour-selection-view',
675
+ 'minute-selection-view'
676
+ ]);
457
677
  const actionRef = useRef(null);
458
678
  const [selectionShowType, setSelectionType] = useState('none');
459
679
  const pickerValue = value ?? defaultPickerValue;
@@ -461,101 +681,141 @@ const TimePicker = forwardRef((inProps, ref) => {
461
681
  const textFieldTimestamp = getTimestamp(value);
462
682
  const { hour: textFieldHour } = getHourAndMinute(textFieldTimestamp);
463
683
  const textFieldPeriod = getPeriod(textFieldHour);
464
- const formattedTime = textFieldTimestamp === null
465
- ? ''
466
- : getFormattedTime({
467
- ...getHourAndMinute(textFieldTimestamp),
468
- period: textFieldPeriod,
469
- }, isTwelveHourSystem);
684
+ const formattedTime = textFieldTimestamp === null ? '' : getFormattedTime({
685
+ ...getHourAndMinute(textFieldTimestamp),
686
+ period: textFieldPeriod
687
+ }, isTwelveHourSystem);
470
688
  const pickerTimestamp = getTimestamp(pickerValue);
471
689
  const { hour: originPickerHour, minute: originPickerMinute } = getHourAndMinute(pickerTimestamp);
472
690
  const pickerPeriod = getPeriod(originPickerHour);
473
- const pickerHour = isTwelveHourSystem
474
- ? originPickerHour % HALF_DAY_HOURS
475
- : originPickerHour;
691
+ const pickerHour = isTwelveHourSystem ? originPickerHour % (/* inlined export .HALF_DAY_HOURS */12) : originPickerHour;
476
692
  const pickerMinute = originPickerMinute;
477
- const range = useMemo(() => {
478
- return getRangeBoundary({ min, max });
479
- }, [max, min]);
480
- const handleChange = useEventCallback((toValue) => {
481
- const update = (toValue) => {
693
+ const range = useMemo(()=>{
694
+ return getRangeBoundary({
695
+ min,
696
+ max
697
+ });
698
+ }, [
699
+ max,
700
+ min
701
+ ]);
702
+ const handleChange = useEventCallback((toValue)=>{
703
+ const update = (toValue)=>{
482
704
  onChange?.(toValue);
483
705
  };
484
706
  if (isDateMode) {
485
707
  update(toValue);
486
- }
487
- else {
708
+ } else {
709
+ // * when time is zero emit null
488
710
  update(toValue ? getTimestamp(toValue) : null);
489
711
  }
490
712
  });
491
- const getInitialDate = useEventCallback(() => {
713
+ const getInitialDate = useEventCallback(()=>{
492
714
  const date = value !== null ? new Date(value) : new Date();
493
715
  date.setHours(originPickerHour, originPickerMinute, 0, 0);
494
716
  return date;
495
717
  });
496
- const updateTime = (option) => {
497
- const { hour = originPickerHour, minute = originPickerMinute, period = pickerPeriod, } = option;
498
- const recoupHour = isTwelveHourSystem && pickerPeriod === TIME_SYSTEM_TEXT.PM
499
- ? HALF_DAY_HOURS
500
- : 0;
718
+ const updateTime = (option)=>{
719
+ const { hour = originPickerHour, minute = originPickerMinute, period = pickerPeriod } = option;
720
+ const recoupHour = isTwelveHourSystem && pickerPeriod === constant_TIME_SYSTEM_TEXT.PM ? (/* inlined export .HALF_DAY_HOURS */12) : 0;
501
721
  const time = getInitialDate();
502
722
  time.setMinutes(minute);
503
723
  time.setHours(hour + recoupHour);
504
724
  if (isTwelveHourSystem) {
505
725
  const currHour = time.getHours();
506
- if (period === TIME_SYSTEM_TEXT.PM) {
507
- if (currHour < HALF_DAY_HOURS) {
508
- time.setHours(currHour + HALF_DAY_HOURS);
726
+ if (period === constant_TIME_SYSTEM_TEXT.PM) {
727
+ if (currHour < (/* inlined export .HALF_DAY_HOURS */12)) {
728
+ time.setHours(currHour + (/* inlined export .HALF_DAY_HOURS */12));
509
729
  }
510
- }
511
- else if (currHour >= HALF_DAY_HOURS) {
512
- time.setHours(currHour - HALF_DAY_HOURS);
730
+ } else if (currHour >= (/* inlined export .HALF_DAY_HOURS */12)) {
731
+ time.setHours(currHour - (/* inlined export .HALF_DAY_HOURS */12));
513
732
  }
514
733
  }
515
734
  const toTimestamp = getTimestamp(time);
516
735
  if (range.max.date && toTimestamp > range.max.timestamp) {
517
736
  time.setHours(range.max.hour);
518
737
  time.setMinutes(range.max.minute);
519
- }
520
- else if (range.min.date && toTimestamp < range.min.timestamp) {
738
+ } else if (range.min.date && toTimestamp < range.min.timestamp) {
521
739
  time.setHours(range.min.hour);
522
740
  time.setMinutes(range.min.minute);
523
741
  }
524
742
  handleChange(time);
525
743
  };
526
- useLayoutEffect(() => {
527
- if (textFieldTimestamp === null)
528
- return;
744
+ // reset value if value is out of range
745
+ useLayoutEffect(()=>{
746
+ if (textFieldTimestamp === null) return;
529
747
  const time = getInitialDate();
530
748
  if (range.max.date && textFieldTimestamp > range.max.timestamp) {
531
749
  time.setHours(range.max.hour);
532
750
  time.setMinutes(range.max.minute);
533
751
  handleChange(time);
534
- }
535
- else if (range.min.date && textFieldTimestamp < range.min.timestamp) {
752
+ } else if (range.min.date && textFieldTimestamp < range.min.timestamp) {
536
753
  time.setHours(range.min.hour);
537
754
  time.setMinutes(range.min.minute);
538
755
  handleChange(time);
539
756
  }
540
- }, [range, handleChange, getInitialDate, textFieldTimestamp]);
541
- return (jsx(TimePickerClassesContext.Provider, { value: cls, children: jsx(PickerTextField, { ref: ref, variant: "standard", className: cls('root'), action: actionRef, onClear: (e) => {
757
+ }, [
758
+ range,
759
+ handleChange,
760
+ getInitialDate,
761
+ textFieldTimestamp
762
+ ]);
763
+ return /*#__PURE__*/ jsx(TimePickerClassesContext.Provider, {
764
+ value: cls,
765
+ children: /*#__PURE__*/ jsx(PickerTextField_PickerTextField, {
766
+ ref: ref,
767
+ variant: "standard",
768
+ className: cls('root'),
769
+ action: actionRef,
770
+ onClear: (e)=>{
542
771
  onClear?.(e);
543
772
  handleChange(null);
544
- }, value: formattedTime, disabled: disabled, PopoverProps: combineProps({
545
- onExitComplete: () => {
773
+ },
774
+ value: formattedTime,
775
+ disabled: disabled,
776
+ PopoverProps: combineProps({
777
+ onExitComplete: ()=>{
546
778
  setSelectionType('none');
547
- },
548
- PopperProps: {
549
- offset: 4,
550
- },
551
- }, PopoverProps), endIconSymbol: RecentMd, clearBtn: clearBtn, ...rest, children: jsx(PickerView, { isTwelveHourSystem: isTwelveHourSystem, onChange: updateTime, afterDraftConfirm: () => {
779
+ }
780
+ }, PopoverProps),
781
+ endIconSymbol: RecentMd,
782
+ clearBtn: clearBtn,
783
+ ...rest,
784
+ children: /*#__PURE__*/ jsx(PickerView, {
785
+ isTwelveHourSystem: isTwelveHourSystem,
786
+ onChange: updateTime,
787
+ afterDraftConfirm: ()=>{
552
788
  actionRef.current?.close();
553
- }, defaultValue: {
789
+ },
790
+ defaultValue: {
554
791
  hour: pickerHour,
555
792
  minute: pickerMinute,
556
- period: pickerPeriod,
557
- }, onSelectionShowTypeChange: setSelectionType, range: range, screenReaderProps: screenReaderProps, selectionShowType: selectionShowType }) }) }));
793
+ period: pickerPeriod
794
+ },
795
+ onSelectionShowTypeChange: setSelectionType,
796
+ range: range,
797
+ screenReaderProps: screenReaderProps,
798
+ selectionShowType: selectionShowType
799
+ })
800
+ })
801
+ });
558
802
  });
559
- TimePicker.displayName = 'SuiTimePicker';
803
+ TimePicker_TimePicker.displayName = 'SuiTimePicker';
804
+
805
+
806
+
807
+
808
+
809
+
810
+
811
+
812
+
813
+
814
+
815
+
816
+
817
+
818
+
819
+
560
820
 
561
- export { HALF_DAY_HOURS, HOUR_MINUTES, K_ENTER, K_SPACE, NumberPicker, ONE_HOUR, PickerView, SelectionView, TIME_GAP, TIME_SYSTEM_TEXT, TimeBoundary, TimeButton, TimePicker, TimePickerClassesContext, ToggleText, getFormattedTime, getHourAndMinute, getNumberPickerBoundary, getPeriod, getRangeBoundary, getRecoupHour, getTimestamp, getTimestampFromDate, getTimestampFromHourAndMin, isClick, lastMinute, minuteSource, pad, parseNumber, parseNumberToString, TimePicker$1 as timePickerStyle, twelveHourSystemSource, twentyFourHourSystemSource, useTimePickerClasses };
821
+ export { HALF_DAY_HOURS, HOUR_MINUTES, K_ENTER, K_SPACE, NumberPicker, ONE_HOUR, PickerView, SelectionView, TIME_GAP, TimeBoundary, TimeButton, TimePicker as timePickerStyle, TimePickerClassesContext, TimePicker_TimePicker as TimePicker, ToggleText, constant_TIME_SYSTEM_TEXT as TIME_SYSTEM_TEXT, getFormattedTime, getHourAndMinute, getNumberPickerBoundary, getPeriod, getRangeBoundary, getRecoupHour, getTimestamp, getTimestampFromDate, getTimestampFromHourAndMin, isClick, lastMinute, minuteSource, pad, parseNumber, parseNumberToString, twelveHourSystemSource, twentyFourHourSystemSource, useTimePickerClasses };