@hitachivantara/uikit-react-core 3.63.0 → 3.64.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 (110) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/dist/SimpleGrid/SimpleGrid.d.ts +17 -0
  3. package/dist/SimpleGrid/SimpleGrid.js +73 -0
  4. package/dist/SimpleGrid/SimpleGrid.js.map +1 -0
  5. package/dist/SimpleGrid/index.d.ts +2 -0
  6. package/dist/SimpleGrid/index.js +16 -0
  7. package/dist/SimpleGrid/index.js.map +1 -0
  8. package/dist/SimpleGrid/styles.js +99 -0
  9. package/dist/SimpleGrid/styles.js.map +1 -0
  10. package/dist/TimePicker/PeriodPicker/PeriodPicker.js +112 -0
  11. package/dist/TimePicker/PeriodPicker/PeriodPicker.js.map +1 -0
  12. package/dist/TimePicker/PeriodPicker/index.js +21 -0
  13. package/dist/TimePicker/PeriodPicker/index.js.map +1 -0
  14. package/dist/TimePicker/PeriodPicker/styles.js +32 -0
  15. package/dist/TimePicker/PeriodPicker/styles.js.map +1 -0
  16. package/dist/TimePicker/TimePicker.d.ts +140 -0
  17. package/dist/TimePicker/TimePicker.js +748 -0
  18. package/dist/TimePicker/TimePicker.js.map +1 -0
  19. package/dist/TimePicker/UnitTimePicker/UnitTimePicker.js +243 -0
  20. package/dist/TimePicker/UnitTimePicker/UnitTimePicker.js.map +1 -0
  21. package/dist/TimePicker/UnitTimePicker/index.js +21 -0
  22. package/dist/TimePicker/UnitTimePicker/index.js.map +1 -0
  23. package/dist/TimePicker/UnitTimePicker/styles.js +75 -0
  24. package/dist/TimePicker/UnitTimePicker/styles.js.map +1 -0
  25. package/dist/TimePicker/enums.js +43 -0
  26. package/dist/TimePicker/enums.js.map +1 -0
  27. package/dist/TimePicker/index.d.ts +2 -0
  28. package/dist/TimePicker/index.js +16 -0
  29. package/dist/TimePicker/index.js.map +1 -0
  30. package/dist/TimePicker/styles.js +134 -0
  31. package/dist/TimePicker/styles.js.map +1 -0
  32. package/dist/TimePicker/timePickerConverter.js +90 -0
  33. package/dist/TimePicker/timePickerConverter.js.map +1 -0
  34. package/dist/TimePicker/timePickerFormatter.js +81 -0
  35. package/dist/TimePicker/timePickerFormatter.js.map +1 -0
  36. package/dist/TimePicker/timePickerUtils.js +39 -0
  37. package/dist/TimePicker/timePickerUtils.js.map +1 -0
  38. package/dist/legacy/SimpleGrid/SimpleGrid.d.ts +17 -0
  39. package/dist/legacy/SimpleGrid/SimpleGrid.js +59 -0
  40. package/dist/legacy/SimpleGrid/SimpleGrid.js.map +1 -0
  41. package/dist/legacy/SimpleGrid/index.d.ts +2 -0
  42. package/dist/legacy/SimpleGrid/index.js +2 -0
  43. package/dist/legacy/SimpleGrid/index.js.map +1 -0
  44. package/dist/legacy/SimpleGrid/styles.js +81 -0
  45. package/dist/legacy/SimpleGrid/styles.js.map +1 -0
  46. package/dist/legacy/TimePicker/PeriodPicker/PeriodPicker.js +78 -0
  47. package/dist/legacy/TimePicker/PeriodPicker/PeriodPicker.js.map +1 -0
  48. package/dist/legacy/TimePicker/PeriodPicker/index.js +7 -0
  49. package/dist/legacy/TimePicker/PeriodPicker/index.js.map +1 -0
  50. package/dist/legacy/TimePicker/PeriodPicker/styles.js +24 -0
  51. package/dist/legacy/TimePicker/PeriodPicker/styles.js.map +1 -0
  52. package/dist/legacy/TimePicker/TimePicker.d.ts +140 -0
  53. package/dist/legacy/TimePicker/TimePicker.js +696 -0
  54. package/dist/legacy/TimePicker/TimePicker.js.map +1 -0
  55. package/dist/legacy/TimePicker/UnitTimePicker/UnitTimePicker.js +206 -0
  56. package/dist/legacy/TimePicker/UnitTimePicker/UnitTimePicker.js.map +1 -0
  57. package/dist/legacy/TimePicker/UnitTimePicker/index.js +7 -0
  58. package/dist/legacy/TimePicker/UnitTimePicker/index.js.map +1 -0
  59. package/dist/legacy/TimePicker/UnitTimePicker/styles.js +58 -0
  60. package/dist/legacy/TimePicker/UnitTimePicker/styles.js.map +1 -0
  61. package/dist/legacy/TimePicker/enums.js +33 -0
  62. package/dist/legacy/TimePicker/enums.js.map +1 -0
  63. package/dist/legacy/TimePicker/index.d.ts +2 -0
  64. package/dist/legacy/TimePicker/index.js +2 -0
  65. package/dist/legacy/TimePicker/index.js.map +1 -0
  66. package/dist/legacy/TimePicker/styles.js +117 -0
  67. package/dist/legacy/TimePicker/styles.js.map +1 -0
  68. package/dist/legacy/TimePicker/timePickerConverter.js +71 -0
  69. package/dist/legacy/TimePicker/timePickerConverter.js.map +1 -0
  70. package/dist/legacy/TimePicker/timePickerFormatter.js +66 -0
  71. package/dist/legacy/TimePicker/timePickerFormatter.js.map +1 -0
  72. package/dist/legacy/TimePicker/timePickerUtils.js +29 -0
  73. package/dist/legacy/TimePicker/timePickerUtils.js.map +1 -0
  74. package/dist/modern/SimpleGrid/SimpleGrid.d.ts +17 -0
  75. package/dist/modern/SimpleGrid/SimpleGrid.js +60 -0
  76. package/dist/modern/SimpleGrid/SimpleGrid.js.map +1 -0
  77. package/dist/modern/SimpleGrid/index.d.ts +2 -0
  78. package/dist/modern/SimpleGrid/index.js +2 -0
  79. package/dist/modern/SimpleGrid/index.js.map +1 -0
  80. package/dist/modern/SimpleGrid/styles.js +68 -0
  81. package/dist/modern/SimpleGrid/styles.js.map +1 -0
  82. package/dist/modern/TimePicker/PeriodPicker/PeriodPicker.js +75 -0
  83. package/dist/modern/TimePicker/PeriodPicker/PeriodPicker.js.map +1 -0
  84. package/dist/modern/TimePicker/PeriodPicker/index.js +7 -0
  85. package/dist/modern/TimePicker/PeriodPicker/index.js.map +1 -0
  86. package/dist/modern/TimePicker/PeriodPicker/styles.js +22 -0
  87. package/dist/modern/TimePicker/PeriodPicker/styles.js.map +1 -0
  88. package/dist/modern/TimePicker/TimePicker.d.ts +140 -0
  89. package/dist/modern/TimePicker/TimePicker.js +659 -0
  90. package/dist/modern/TimePicker/TimePicker.js.map +1 -0
  91. package/dist/modern/TimePicker/UnitTimePicker/UnitTimePicker.js +191 -0
  92. package/dist/modern/TimePicker/UnitTimePicker/UnitTimePicker.js.map +1 -0
  93. package/dist/modern/TimePicker/UnitTimePicker/index.js +7 -0
  94. package/dist/modern/TimePicker/UnitTimePicker/index.js.map +1 -0
  95. package/dist/modern/TimePicker/UnitTimePicker/styles.js +49 -0
  96. package/dist/modern/TimePicker/UnitTimePicker/styles.js.map +1 -0
  97. package/dist/modern/TimePicker/enums.js +32 -0
  98. package/dist/modern/TimePicker/enums.js.map +1 -0
  99. package/dist/modern/TimePicker/index.d.ts +2 -0
  100. package/dist/modern/TimePicker/index.js +2 -0
  101. package/dist/modern/TimePicker/index.js.map +1 -0
  102. package/dist/modern/TimePicker/styles.js +108 -0
  103. package/dist/modern/TimePicker/styles.js.map +1 -0
  104. package/dist/modern/TimePicker/timePickerConverter.js +66 -0
  105. package/dist/modern/TimePicker/timePickerConverter.js.map +1 -0
  106. package/dist/modern/TimePicker/timePickerFormatter.js +65 -0
  107. package/dist/modern/TimePicker/timePickerFormatter.js.map +1 -0
  108. package/dist/modern/TimePicker/timePickerUtils.js +27 -0
  109. package/dist/modern/TimePicker/timePickerUtils.js.map +1 -0
  110. package/package.json +4 -4
@@ -0,0 +1,659 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
+ const _excluded = ["classes", "className", "id", "name", "required", "disabled", "label", "aria-label", "aria-labelledby", "description", "aria-describedby", "onChange", "status", "statusMessage", "aria-errormessage", "placeholder", "hoursPlaceholder", "minutesPlaceholder", "secondsPlaceholder", "value", "defaultValue", "timeFormat", "locale", "disableDefaultValue", "onToggle", "hours", "minutes", "seconds", "period", "disablePortal", "escapeWithReference", "dropdownProps"];
5
+
6
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
7
+
8
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
9
+
10
+ import "core-js/modules/web.dom-collections.iterator.js";
11
+ import React, { useState, useEffect, useRef, useMemo } from "react";
12
+ import PropTypes from "prop-types";
13
+ import clsx from "clsx";
14
+ import { withStyles } from "@material-ui/core";
15
+ import { Time as TimeIcon } from "@hitachivantara/uikit-react-icons";
16
+ import { HvFormElement, HvBaseDropdown, HvLabel, HvWarningText, HvInfoMessage, setId, useUniqueId, useControlled, useLocale, HvTypography, useSavedState } from "..";
17
+ import { TimePickerUnits, TimeFormat, PeriodPickerOptions } from "./enums";
18
+ import { getFormattedTime, getTimeFormatForLocale } from "./timePickerFormatter";
19
+ import { getHoursForTimeFormat, getTimeWithFormat24 } from "./timePickerConverter";
20
+ import UnitTimePicker from "./UnitTimePicker";
21
+ import PeriodPicker from "./PeriodPicker";
22
+ import styles from "./styles";
23
+
24
+ const setFocusToContent = containerRef => {
25
+ var _containerRef$getElem;
26
+
27
+ containerRef === null || containerRef === void 0 ? void 0 : (_containerRef$getElem = containerRef.getElementsByTagName("input")[0]) === null || _containerRef$getElem === void 0 ? void 0 : _containerRef$getElem.focus();
28
+ };
29
+
30
+ const timeIsEqual = (timeA, timeB) => {
31
+ return timeA === timeB || timeA == null && timeB == null || timeA != null && timeB != null && timeA.hours === timeB.hours && timeA.minutes === timeB.minutes && timeA.seconds === timeB.seconds && timeA.period === timeB.period;
32
+ };
33
+
34
+ const timeIsValid = (time, timeFormat) => {
35
+ const hourInputState = (time === null || time === void 0 ? void 0 : time.hours) != null && time.hours !== "" && time.hours >= 0 && (timeFormat === TimeFormat.H24 && time.hours <= 24 || timeFormat === TimeFormat.H12 && time.hours <= 12);
36
+ const minutesInputState = (time === null || time === void 0 ? void 0 : time.minutes) != null && time.minutes !== "" && time.minutes >= 0 && time.minutes <= 59;
37
+ const secondsInputState = (time === null || time === void 0 ? void 0 : time.seconds) != null && time.seconds !== "" && time.seconds >= 0 && time.seconds <= 59;
38
+ return hourInputState && minutesInputState && secondsInputState;
39
+ };
40
+ /**
41
+ * A TimePicker component used to choose the time.
42
+ */
43
+
44
+
45
+ const HvTimePicker = _ref => {
46
+ let {
47
+ classes,
48
+ className,
49
+ id,
50
+ name,
51
+ required = false,
52
+ disabled = false,
53
+ label,
54
+ "aria-label": ariaLabel,
55
+ "aria-labelledby": ariaLabelledBy,
56
+ description,
57
+ "aria-describedby": ariaDescribedBy,
58
+ onChange,
59
+ status,
60
+ statusMessage,
61
+ "aria-errormessage": ariaErrorMessage,
62
+ placeholder,
63
+ hoursPlaceholder = "hh",
64
+ minutesPlaceholder = "mm",
65
+ secondsPlaceholder = "ss",
66
+ value: valueProp,
67
+ defaultValue: defaultValueProp,
68
+ timeFormat: chosenTimeFormat,
69
+ locale: localeProp,
70
+ disableDefaultValue,
71
+ onToggle: onToggleCallback,
72
+ // deprecated properties:
73
+ hours = new Date().getHours(),
74
+ minutes = new Date().getMinutes(),
75
+ seconds = 0,
76
+ period: chosenTimePeriod,
77
+ // misc properties:
78
+ disablePortal = true,
79
+ escapeWithReference = true,
80
+ dropdownProps
81
+ } = _ref,
82
+ others = _objectWithoutProperties(_ref, _excluded);
83
+
84
+ // #region STATE
85
+ const elementId = useUniqueId(id, "hvtimepicker");
86
+ const localeFromProvider = useLocale();
87
+ const locale = localeProp || localeFromProvider;
88
+ const timeFormat = useMemo(() => chosenTimeFormat != null ? chosenTimeFormat.toString() : getTimeFormatForLocale(locale), [chosenTimeFormat, locale]);
89
+ const [value, setValue, rollbackValue, lastValidValue] = useSavedState(() => {
90
+ // fallback to the deprecated properties
91
+ // we shouldn't do that when promoting to core
92
+ // as it makes impossible to start with an empty value
93
+ const defaultValue = defaultValueProp !== null && defaultValueProp !== void 0 ? defaultValueProp : disableDefaultValue ? null : {
94
+ hours,
95
+ minutes,
96
+ seconds
97
+ };
98
+ const v = valueProp !== null && valueProp !== void 0 ? valueProp : defaultValue;
99
+ return v != null ? {
100
+ hours: (v === null || v === void 0 ? void 0 : v.hours) != null ? getHoursForTimeFormat(v.hours, timeFormat) : null,
101
+ minutes: v === null || v === void 0 ? void 0 : v.minutes,
102
+ seconds: v === null || v === void 0 ? void 0 : v.seconds,
103
+ period: timeFormat === TimeFormat.H12 ? chosenTimePeriod !== null && chosenTimePeriod !== void 0 ? chosenTimePeriod : (v === null || v === void 0 ? void 0 : v.hours) == null || v.hours < 12 ? PeriodPickerOptions.AM : PeriodPickerOptions.PM : null
104
+ } : null;
105
+ });
106
+ const [validationMessage] = useControlled(statusMessage, "Required");
107
+ const [validationState, setValidationState] = useControlled(status, "standBy");
108
+ const [isOpen, setOpen] = useState(false); // #endregion
109
+ // #region SIDE EFFECTS
110
+
111
+ const firstRender = useRef(true);
112
+ const currentValue = useRef(value);
113
+ useEffect(() => {
114
+ currentValue.current = value;
115
+ });
116
+ const currentTimeFormat = useRef(timeFormat);
117
+ useEffect(() => {
118
+ currentTimeFormat.current = timeFormat;
119
+ });
120
+ useEffect(() => {
121
+ // allow external changes to the time format (via timeFormat or locale properties)
122
+ if (!firstRender.current && currentValue.current != null) {
123
+ const to12 = timeFormat === TimeFormat.H12;
124
+ let {
125
+ hours: h,
126
+ period: p
127
+ } = currentValue.current;
128
+
129
+ if (to12) {
130
+ if (h == null || h < 12) {
131
+ p = PeriodPickerOptions.AM;
132
+ } else {
133
+ p = PeriodPickerOptions.PM;
134
+
135
+ if (h > 12) {
136
+ h -= 12;
137
+ }
138
+ }
139
+ } else {
140
+ if (p === PeriodPickerOptions.AM) {
141
+ if (h === 12) {
142
+ h = 0;
143
+ }
144
+ } else if (h < 12) {
145
+ h += 12;
146
+ }
147
+
148
+ p = undefined;
149
+ }
150
+
151
+ setValue({
152
+ hours: h,
153
+ minutes: currentValue.current.minutes,
154
+ seconds: currentValue.current.seconds,
155
+ period: p
156
+ }, true);
157
+ }
158
+ }, [setValue, timeFormat]);
159
+ useEffect(() => {
160
+ // allow control of value property
161
+ if (!firstRender.current) {
162
+ const dayPeriod = (valueProp === null || valueProp === void 0 ? void 0 : valueProp.hours) == null || valueProp.hours < 12 ? PeriodPickerOptions.AM : PeriodPickerOptions.PM;
163
+ setValue(valueProp != null ? {
164
+ hours: (valueProp === null || valueProp === void 0 ? void 0 : valueProp.hours) != null ? getHoursForTimeFormat(valueProp.hours, currentTimeFormat.current) : null,
165
+ minutes: valueProp === null || valueProp === void 0 ? void 0 : valueProp.minutes,
166
+ seconds: valueProp === null || valueProp === void 0 ? void 0 : valueProp.seconds,
167
+ period: currentTimeFormat.current === TimeFormat.H12 ? dayPeriod : null
168
+ } : null, true);
169
+ }
170
+ }, [setValue, valueProp]);
171
+ useEffect(() => {
172
+ // on close, make sure to restore the last valid value
173
+ // (in the case the user closed with some time part invalid)
174
+ if (!firstRender.current && !isOpen) {
175
+ rollbackValue();
176
+ }
177
+ }, [isOpen, rollbackValue]);
178
+ useEffect(() => {
179
+ // run validations on each render
180
+ // (except on the first, remaining in the standBy/untouched state)
181
+ if (!firstRender.current) {
182
+ setValidationState(() => {
183
+ // this will only run if status is uncontrolled
184
+ if (required && lastValidValue == null) {
185
+ return "invalid";
186
+ }
187
+
188
+ return "valid";
189
+ });
190
+ }
191
+ });
192
+ useEffect(() => {
193
+ firstRender.current = false;
194
+ }, []); // #endregion
195
+ // #region EVENT HANDLERS
196
+
197
+ const handleTimeChange = updatedTimeObject => {
198
+ if (!timeIsEqual(value, updatedTimeObject)) {
199
+ const valid = timeIsValid(updatedTimeObject, timeFormat); // the value only is commited if valid
200
+
201
+ setValue(updatedTimeObject, valid);
202
+
203
+ if (valid) {
204
+ // always output in 24h format
205
+ onChange === null || onChange === void 0 ? void 0 : onChange(getTimeWithFormat24(updatedTimeObject, timeFormat));
206
+ }
207
+ }
208
+ };
209
+ /**
210
+ * Handles the change of the hours value
211
+ * @param {Number} hours - selected hours
212
+ * @memberof HvTimePicker
213
+ */
214
+
215
+
216
+ const handleHoursChange = updatedHours => {
217
+ const newSelectedTime = _objectSpread(_objectSpread({}, value), {}, {
218
+ hours: updatedHours
219
+ });
220
+
221
+ handleTimeChange(newSelectedTime);
222
+ };
223
+ /**
224
+ * Handles the change of the minutes value
225
+ * @param {Number} minutes - selected minutes
226
+ * @memberof HvTimePicker
227
+ */
228
+
229
+
230
+ const handleMinutesChange = updatedMinutes => {
231
+ const newSelectedTime = _objectSpread(_objectSpread({}, value), {}, {
232
+ minutes: updatedMinutes
233
+ });
234
+
235
+ handleTimeChange(newSelectedTime);
236
+ };
237
+ /**
238
+ * Handles the change of the seconds value
239
+ * @param {Number} seconds - selected seconds
240
+ * @memberof HvTimePicker
241
+ */
242
+
243
+
244
+ const handleSecondsChange = updatedSeconds => {
245
+ const newSelectedTime = _objectSpread(_objectSpread({}, value), {}, {
246
+ seconds: updatedSeconds
247
+ });
248
+
249
+ handleTimeChange(newSelectedTime);
250
+ };
251
+ /**
252
+ * Handles the change of the period (am/pm)
253
+ * @param {String} period - selected period
254
+ * @memberof HvTimePicker
255
+ */
256
+
257
+
258
+ const handleChangePeriod = updatedPeriod => {
259
+ const newSelectedTime = _objectSpread(_objectSpread({}, value), {}, {
260
+ period: updatedPeriod
261
+ });
262
+
263
+ handleTimeChange(newSelectedTime);
264
+ };
265
+
266
+ const onToggle = (evt, open) => {
267
+ /*
268
+ If evt is null this toggle wasn't triggered by the user.
269
+ instead it was triggered by the baseDropdown useEffect after
270
+ the change of the expanded property.
271
+ */
272
+ if (evt === null) return;
273
+ onToggleCallback === null || onToggleCallback === void 0 ? void 0 : onToggleCallback(evt, open);
274
+ setOpen(open);
275
+ }; // #endregion
276
+
277
+
278
+ const hasLabels = label != null;
279
+ const hasDescription = description != null; // the error message area will only be created if:
280
+ // - an external element that provides an error message isn't identified via aria-errormessage AND
281
+ // - both status and statusMessage properties are being controlled OR
282
+ // - status is uncontrolled and required is true
283
+
284
+ const canShowError = ariaErrorMessage == null && (status !== undefined && statusMessage !== undefined || status === undefined && required);
285
+ const isStateInvalid = validationState === "invalid";
286
+ let errorMessageId;
287
+
288
+ if (isStateInvalid) {
289
+ errorMessageId = canShowError ? setId(elementId, "error") : ariaErrorMessage;
290
+ }
291
+
292
+ return /*#__PURE__*/React.createElement(HvFormElement, _extends({
293
+ id: id,
294
+ name: name,
295
+ locale: locale,
296
+ required: required,
297
+ disabled: disabled,
298
+ status: validationState,
299
+ classes: {
300
+ root: classes.formElementRoot
301
+ },
302
+ className: clsx(className, classes.root)
303
+ }, others), (hasLabels || hasDescription) && /*#__PURE__*/React.createElement("div", {
304
+ className: classes.labelContainer
305
+ }, hasLabels && /*#__PURE__*/React.createElement(HvLabel, {
306
+ id: setId(elementId, "label"),
307
+ label: label,
308
+ className: classes.label
309
+ }), hasDescription && /*#__PURE__*/React.createElement(HvInfoMessage, {
310
+ id: setId(elementId, "description"),
311
+ className: classes.description
312
+ }, description)), /*#__PURE__*/React.createElement(HvBaseDropdown, _extends({
313
+ id: setId(elementId, "timepicker-dropdown"),
314
+ role: "combobox",
315
+ placeholder: lastValidValue != null ? getFormattedTime(lastValidValue, timeFormat) : /*#__PURE__*/React.createElement(HvTypography, {
316
+ variant: "placeholderText"
317
+ }, placeholder),
318
+ classes: {
319
+ placeholder: disabled ? classes.dropdownPlaceholderDisabled : classes.dropdownPlaceholder,
320
+ header: isStateInvalid ? classes.dropdownHeaderInvalid : undefined,
321
+ headerOpen: classes.dropdownHeaderOpen
322
+ },
323
+ variableWidth: true,
324
+ placement: "right",
325
+ adornment: /*#__PURE__*/React.createElement(TimeIcon, {
326
+ color: disabled ? "atmo5" : "acce1",
327
+ className: classes.iconBaseRoot
328
+ }),
329
+ expanded: isOpen,
330
+ onToggle: onToggle,
331
+ onContainerCreation: setFocusToContent,
332
+ "aria-haspopup": "dialog",
333
+ "aria-label": ariaLabel,
334
+ "aria-labelledby": [label && setId(elementId, "label"), ariaLabelledBy].join(" ").trim() || undefined,
335
+ "aria-invalid": isStateInvalid ? true : undefined,
336
+ "aria-errormessage": errorMessageId,
337
+ "aria-describedby": [description && setId(elementId, "description"), ariaDescribedBy].join(" ").trim() || undefined,
338
+ disablePortal: disablePortal,
339
+ disabled: disabled,
340
+ popperProps: {
341
+ modifiers: [{
342
+ name: "preventOverflow",
343
+ enabled: escapeWithReference
344
+ }]
345
+ }
346
+ }, dropdownProps), /*#__PURE__*/React.createElement("div", {
347
+ className: classes.timePopperContainer
348
+ }, /*#__PURE__*/React.createElement(UnitTimePicker, {
349
+ id: setId(elementId, "hours"),
350
+ placeholder: hoursPlaceholder,
351
+ unit: timeFormat === TimeFormat.H24 ? TimePickerUnits.HOUR_24.type : TimePickerUnits.HOUR_12.type,
352
+ unitValue: value === null || value === void 0 ? void 0 : value.hours,
353
+ onChangeUnitTimeValue: handleHoursChange
354
+ }), /*#__PURE__*/React.createElement("span", {
355
+ className: classes.separator
356
+ }, ":"), /*#__PURE__*/React.createElement(UnitTimePicker, {
357
+ id: setId(elementId, "minutes"),
358
+ placeholder: minutesPlaceholder,
359
+ unit: TimePickerUnits.MINUTE.type,
360
+ unitValue: value === null || value === void 0 ? void 0 : value.minutes,
361
+ onChangeUnitTimeValue: handleMinutesChange
362
+ }), /*#__PURE__*/React.createElement("span", {
363
+ className: classes.separator
364
+ }, ":"), /*#__PURE__*/React.createElement(UnitTimePicker, {
365
+ id: setId(elementId, "seconds"),
366
+ placeholder: secondsPlaceholder,
367
+ unit: TimePickerUnits.SECOND.type,
368
+ unitValue: value === null || value === void 0 ? void 0 : value.seconds,
369
+ onChangeUnitTimeValue: handleSecondsChange
370
+ }), timeFormat === TimeFormat.H12 && /*#__PURE__*/React.createElement(PeriodPicker, {
371
+ onChangePeriod: handleChangePeriod,
372
+ period: value === null || value === void 0 ? void 0 : value.period
373
+ }))), canShowError && /*#__PURE__*/React.createElement(HvWarningText, {
374
+ id: setId(elementId, "error"),
375
+ disableBorder: true,
376
+ className: classes.error
377
+ }, validationMessage));
378
+ };
379
+
380
+ process.env.NODE_ENV !== "production" ? HvTimePicker.propTypes = {
381
+ /**
382
+ * A Jss Object used to override or extend the styles applied to the input/popper
383
+ */
384
+ classes: PropTypes.shape({
385
+ /**
386
+ * Styles applied to the root element.
387
+ */
388
+ root: PropTypes.string,
389
+
390
+ /**
391
+ * Styles applied to the input.
392
+ */
393
+ input: PropTypes.string,
394
+
395
+ /**
396
+ * Styles applied to the label.
397
+ */
398
+ label: PropTypes.string,
399
+
400
+ /**
401
+ * Styles applied to the timePopperContainer.
402
+ */
403
+ timePopperContainer: PropTypes.string,
404
+
405
+ /**
406
+ * Styles applied to the separator.
407
+ */
408
+ separator: PropTypes.string,
409
+
410
+ /**
411
+ * Styles applied to the period container.
412
+ */
413
+ periodContainer: PropTypes.string,
414
+
415
+ /**
416
+ * Styles applied to the form element.
417
+ */
418
+ formElementRoot: PropTypes.string,
419
+
420
+ /**
421
+ * Styles applied to the dropdown placeholder.
422
+ */
423
+ dropdownPlaceholder: PropTypes.string,
424
+
425
+ /**
426
+ * Styles applied to the icon base.
427
+ */
428
+ iconBaseRoot: PropTypes.string,
429
+
430
+ /**
431
+ * Styles applied to the error area.
432
+ */
433
+ error: PropTypes.string,
434
+
435
+ /**
436
+ * Styles applied to the container of the labels elements.
437
+ */
438
+ labelContainer: PropTypes.string,
439
+
440
+ /**
441
+ * Styles applied to the icon information text.
442
+ */
443
+ description: PropTypes.string,
444
+
445
+ /**
446
+ * Styles applied to the dropdown when invalid information text.
447
+ */
448
+ dropdownHeaderInvalid: PropTypes.string,
449
+
450
+ /**
451
+ * Styles applied to the dropdown text when invalid.
452
+ */
453
+ dropdownPlaceholderDisabled: PropTypes.string,
454
+
455
+ /**
456
+ * Styles applied to the dropdown border when invalid.
457
+ */
458
+ dropdownHeaderOpen: PropTypes.string
459
+ }).isRequired,
460
+
461
+ /**
462
+ * Class names to be applied.
463
+ */
464
+ className: PropTypes.string,
465
+
466
+ /**
467
+ * Id to be applied to the form element root node.
468
+ */
469
+ id: PropTypes.string,
470
+
471
+ /**
472
+ * The form element name.
473
+ */
474
+ name: PropTypes.string,
475
+
476
+ /**
477
+ * The value of the form element.
478
+ */
479
+ value: PropTypes.shape({
480
+ hours: PropTypes.number,
481
+ minutes: PropTypes.number,
482
+ seconds: PropTypes.number,
483
+ period: PropTypes.string
484
+ }),
485
+
486
+ /**
487
+ * When uncontrolled, defines the initial input value.
488
+ */
489
+ defaultValue: PropTypes.shape({
490
+ hours: PropTypes.number,
491
+ minutes: PropTypes.number,
492
+ seconds: PropTypes.number,
493
+ period: PropTypes.string
494
+ }),
495
+
496
+ /**
497
+ * Indicates that user input is required on the form element.
498
+ */
499
+ required: PropTypes.bool,
500
+
501
+ /**
502
+ * Indicates that the form element is disabled.
503
+ */
504
+ disabled: PropTypes.bool,
505
+
506
+ /**
507
+ * The label of the form element.
508
+ *
509
+ * The form element must be labeled for accessibility reasons.
510
+ * If not provided, an aria-label or aria-labelledby must be provided instead.
511
+ */
512
+ label: PropTypes.string,
513
+
514
+ /**
515
+ * @ignore
516
+ */
517
+ "aria-label": PropTypes.string,
518
+
519
+ /**
520
+ * @ignore
521
+ */
522
+ "aria-labelledby": PropTypes.string,
523
+
524
+ /**
525
+ * Provide additional descriptive text for the form element.
526
+ */
527
+ description: PropTypes.node,
528
+
529
+ /**
530
+ * @ignore
531
+ */
532
+ "aria-describedby": PropTypes.string,
533
+
534
+ /**
535
+ * The placeholder value when no time is selected.
536
+ */
537
+ placeholder: PropTypes.string,
538
+
539
+ /**
540
+ * The placeholder of the hours input.
541
+ */
542
+ hoursPlaceholder: PropTypes.string,
543
+
544
+ /**
545
+ * The placeholder of the minutes input.
546
+ */
547
+ minutesPlaceholder: PropTypes.string,
548
+
549
+ /**
550
+ * The placeholder of the seconds input.
551
+ */
552
+ secondsPlaceholder: PropTypes.string,
553
+
554
+ /**
555
+ * The status of the form element.
556
+ *
557
+ * Valid is correct, invalid is incorrect and standBy means no validations have run.
558
+ *
559
+ * When uncontrolled and unspecified it will default to "standBy" and change to either "valid"
560
+ * or "invalid" after any change to the state.
561
+ */
562
+ status: PropTypes.oneOf(["standBy", "valid", "invalid"]),
563
+
564
+ /**
565
+ * The error message to show when the validation status is "invalid".
566
+ *
567
+ * Defaults to "Required" when the status is uncontrolled and no `aria-errormessage` is provided.
568
+ */
569
+ statusMessage: PropTypes.node,
570
+
571
+ /**
572
+ * Identifies the element that provides an error message for the time picker.
573
+ *
574
+ * Will only be used when the validation status is invalid.
575
+ */
576
+ "aria-errormessage": PropTypes.string,
577
+
578
+ /**
579
+ * If the time should be presented in 12 or 24 hour format.
580
+ * If undefined, the component will use a format according to the passed locale.
581
+ * If defined, it will "override" the default value given by the locale
582
+ */
583
+ timeFormat: PropTypes.oneOf([TimeFormat.H12, TimeFormat.H24, 12, 24, undefined]),
584
+
585
+ /**
586
+ * Locale that will provide the time format(12 or 24 hour format)
587
+ * It is "overwritten" by the timeFormat prop
588
+ */
589
+ locale: PropTypes.string,
590
+
591
+ /**
592
+ * Callback function to be triggered when the input value is changed.
593
+ * It is invoked with a object param with the following props:
594
+ * - hours (in a 24h format)
595
+ * - minutes
596
+ * - seconds
597
+ * - period
598
+ *
599
+ * It is always invoked with the hours in a 24h format
600
+ */
601
+ onChange: PropTypes.func,
602
+
603
+ /**
604
+ * Callback called when dropdown changes the expanded state.
605
+ *
606
+ * @param {object} event The event source of the callback.
607
+ * @param {boolean} open If the dropdown new state is open (`true`) or closed (`false`).
608
+ */
609
+ onToggle: PropTypes.func,
610
+
611
+ /**
612
+ * Allow starting with an empty value by not defaulting to the current time.
613
+ * This should become the default behavior when the component is promoted to core.
614
+ */
615
+ disableDefaultValue: PropTypes.bool,
616
+
617
+ /**
618
+ * Default value for the hours picker
619
+ * @deprecated use defaultValue instead
620
+ */
621
+ hours: PropTypes.number,
622
+
623
+ /**
624
+ * Default value for the minutes picker
625
+ * @deprecated use defaultValue instead
626
+ */
627
+ minutes: PropTypes.number,
628
+
629
+ /**
630
+ * Default value for the seconds picker
631
+ * @deprecated use defaultValue instead
632
+ */
633
+ seconds: PropTypes.number,
634
+
635
+ /**
636
+ * Default value for the period picker
637
+ * @deprecated use defaultValue instead
638
+ */
639
+ period: PropTypes.string,
640
+
641
+ /**
642
+ * Disable the portal behavior. The children stay within it's parent DOM hierarchy.
643
+ */
644
+ disablePortal: PropTypes.bool,
645
+
646
+ /**
647
+ * Sets if the calendar container should follow the date picker input out of the screen or stay visible.
648
+ */
649
+ escapeWithReference: PropTypes.bool,
650
+
651
+ /**
652
+ * Extra properties to be passed to the timepicker dropdown.
653
+ */
654
+ dropdownProps: PropTypes.instanceOf(Object)
655
+ } : void 0;
656
+ export default withStyles(styles, {
657
+ name: "HvTimePicker"
658
+ })(HvTimePicker);
659
+ //# sourceMappingURL=TimePicker.js.map