@atlaskit/datetime-picker 17.8.8 → 17.9.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 (38) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/components/date-picker.js +1 -1
  3. package/dist/cjs/components/date-time-picker.js +502 -9
  4. package/dist/cjs/components/time-picker.js +1 -1
  5. package/dist/cjs/internal/date-time-picker-container.compiled.css +1 -1
  6. package/dist/cjs/internal/date-time-picker-container.js +1 -1
  7. package/dist/cjs/internal/get-parsed-iso.js +2 -2
  8. package/dist/es2019/components/date-picker.js +1 -1
  9. package/dist/es2019/components/date-time-picker.js +485 -6
  10. package/dist/es2019/components/time-picker.js +1 -1
  11. package/dist/es2019/internal/date-time-picker-container.compiled.css +1 -1
  12. package/dist/es2019/internal/date-time-picker-container.js +1 -1
  13. package/dist/es2019/internal/get-parsed-iso.js +2 -2
  14. package/dist/esm/components/date-picker.js +1 -1
  15. package/dist/esm/components/date-time-picker.js +502 -8
  16. package/dist/esm/components/time-picker.js +1 -1
  17. package/dist/esm/internal/date-time-picker-container.compiled.css +1 -1
  18. package/dist/esm/internal/date-time-picker-container.js +1 -1
  19. package/dist/esm/internal/get-parsed-iso.js +2 -2
  20. package/dist/types/components/date-time-picker.d.ts +14 -30
  21. package/dist/types-ts4.5/components/date-time-picker.d.ts +14 -30
  22. package/package.json +6 -12
  23. package/dist/cjs/components/date-time-picker-class.compiled.css +0 -19
  24. package/dist/cjs/components/date-time-picker-class.js +0 -408
  25. package/dist/cjs/components/date-time-picker-fc.js +0 -484
  26. package/dist/es2019/components/date-time-picker-class.compiled.css +0 -19
  27. package/dist/es2019/components/date-time-picker-class.js +0 -373
  28. package/dist/es2019/components/date-time-picker-fc.js +0 -461
  29. package/dist/esm/components/date-time-picker-class.compiled.css +0 -19
  30. package/dist/esm/components/date-time-picker-class.js +0 -405
  31. package/dist/esm/components/date-time-picker-fc.js +0 -478
  32. package/dist/types/components/date-time-picker-class.d.ts +0 -82
  33. package/dist/types/components/date-time-picker-fc.d.ts +0 -13
  34. package/dist/types-ts4.5/components/date-time-picker-class.d.ts +0 -82
  35. package/dist/types-ts4.5/components/date-time-picker-fc.d.ts +0 -13
  36. /package/dist/cjs/components/{date-time-picker-fc.compiled.css → date-time-picker.compiled.css} +0 -0
  37. /package/dist/es2019/components/{date-time-picker-fc.compiled.css → date-time-picker.compiled.css} +0 -0
  38. /package/dist/esm/components/{date-time-picker-fc.compiled.css → date-time-picker.compiled.css} +0 -0
@@ -1,7 +1,486 @@
1
- import { fg } from '@atlaskit/platform-feature-flags';
2
- import { componentWithCondition } from '../internal/ff-component';
3
- import DateTimePickerOld from './date-time-picker-class';
4
- import DateTimePickerNew from './date-time-picker-fc';
5
- const DateTimePicker = componentWithCondition(() => fg('dst-date-time-picker-use-functional-component'), DateTimePickerNew, DateTimePickerOld);
6
- // eslint-disable-next-line @repo/internal/react/require-jsdoc
1
+ /* date-time-picker.tsx generated by @compiled/babel-plugin v0.39.1 */
2
+ import _extends from "@babel/runtime/helpers/extends";
3
+ import "./date-time-picker.compiled.css";
4
+ import { ax, ix } from "@compiled/react/runtime";
5
+ /// <reference types="node" />
6
+ // for typing `process`
7
+
8
+ import React, { forwardRef, useCallback, useEffect, useReducer, useRef, useState } from 'react';
9
+
10
+ // oxlint-disable-next-line @atlassian/no-restricted-imports
11
+ import { format, isValid, parseISO } from 'date-fns';
12
+ import { usePlatformLeafEventHandler } from '@atlaskit/analytics-next';
13
+ import { IconButton } from '@atlaskit/button/new';
14
+ import SelectClearIcon from '@atlaskit/icon/core/cross-circle';
15
+ import { Box, Inline } from '@atlaskit/primitives/compiled';
16
+ import { mergeStyles } from '@atlaskit/select';
17
+ import { DateTimePickerContainer } from '../internal/date-time-picker-container';
18
+ import { formatDateTimeZoneIntoIso } from '../internal/format-date-time-zone-into-iso';
19
+ import { convertTokens } from '../internal/parse-tokens';
20
+ import DatePicker from './date-picker';
21
+ import TimePicker from './time-picker';
22
+ const packageName = "@atlaskit/datetime-picker";
23
+ const packageVersion = "17.8.9";
24
+ const analyticsAttributes = {
25
+ componentName: 'dateTimePicker',
26
+ packageName,
27
+ packageVersion
28
+ };
29
+ const compiledStyles = {
30
+ datePickerContainerStyles: "_i0dl1ssb _16jlkb7n _1o9zidpf",
31
+ timePickerContainerStyles: "_i0dl1ssb _16jlkb7n",
32
+ iconContainerStyles: "_1e0c1txw _4cvr1h6o _i0dl1kw7"
33
+ };
34
+
35
+ // react-select overrides (via @atlaskit/select).
36
+ const styles = {
37
+ control: style => ({
38
+ ...style,
39
+ backgroundColor: 'transparent',
40
+ border: 2,
41
+ borderRadius: 0,
42
+ paddingLeft: 0,
43
+ ':hover': {
44
+ backgroundColor: 'transparent',
45
+ cursor: 'inherit'
46
+ }
47
+ })
48
+ };
49
+
50
+ /**
51
+ * Two action types keep the reducer focused:
52
+ *
53
+ * - APPLY: used by user-interaction handlers. The handler computes the full
54
+ * next state (including the new ISO value) and applies it atomically. This
55
+ * guarantees a single re-render with no cascades regardless of React version.
56
+ *
57
+ * - SET_VALUE: used by the `providedValue` prop effect. The reducer owns all
58
+ * parsing logic for external value changes, including the empty-string case
59
+ * that the previous useState approach missed.
60
+ */
61
+
62
+ export const datePickerDefaultAriaLabel = 'Date';
63
+ export const timePickerDefaultAriaLabel = 'Time';
64
+
65
+ /**
66
+ * __Date time picker__
67
+ *
68
+ * A date time picker allows the user to select an associated date and time.
69
+ *
70
+ * - [Examples](https://atlassian.design/components/datetime-picker/examples)
71
+ * - [Code](https://atlassian.design/components/datetime-picker/code)
72
+ * - [Usage](https://atlassian.design/components/datetime-picker/usage)
73
+ */
74
+ const DateTimePicker = /*#__PURE__*/forwardRef(({
75
+ 'aria-describedby': ariaDescribedBy,
76
+ appearance = 'default',
77
+ autoFocus = false,
78
+ clearControlLabel = 'clear',
79
+ datePickerProps: datePickerPropsWithSelectProps = {},
80
+ defaultValue = '',
81
+ id = '',
82
+ innerProps = {},
83
+ isDisabled = false,
84
+ isInvalid = false,
85
+ isRequired = false,
86
+ name = '',
87
+ // These disables are here for proper typing when used as defaults. They
88
+ // should *not* use the `noop` function.
89
+ /* eslint-disable @repo/internal/react/use-noop */
90
+ onBlur = _event => {},
91
+ onChange: onChangeProp = _value => {},
92
+ onFocus = _event => {},
93
+ /* eslint-enable @repo/internal/react/use-noop */
94
+ parseValue: providedParseValue,
95
+ spacing = 'default',
96
+ locale = 'en-US',
97
+ testId,
98
+ timePickerProps: timePickerPropsWithSelectProps = {},
99
+ value: providedValue
100
+ }, ref) => {
101
+ const [isFocused, setIsFocused] = useState(false);
102
+
103
+ /**
104
+ * Defined inside the component so the reducer closes over `providedParseValue`
105
+ * without needing to smuggle it through every action payload. React always
106
+ * calls the reducer from the latest render, so stale-closure is not a concern.
107
+ */
108
+ const reducer = (state, action) => {
109
+ switch (action.type) {
110
+ case 'APPLY':
111
+ return action.payload;
112
+ case 'SET_VALUE':
113
+ {
114
+ const newValue = action.payload;
115
+
116
+ // Explicit empty-string handling: clear all sub-fields so the date
117
+ // and time pickers visually reset when a controlled value is cleared.
118
+ if (!newValue) {
119
+ return {
120
+ value: '',
121
+ dateValue: '',
122
+ timeValue: '',
123
+ zoneValue: ''
124
+ };
125
+ }
126
+ if (providedParseValue) {
127
+ const parsed = providedParseValue(newValue, state.dateValue, state.timeValue, state.zoneValue);
128
+ return parsed ? {
129
+ value: newValue,
130
+ ...parsed
131
+ } : {
132
+ value: newValue,
133
+ dateValue: state.dateValue,
134
+ timeValue: state.timeValue,
135
+ zoneValue: state.zoneValue
136
+ };
137
+ }
138
+ const parsed = parseISO(newValue);
139
+ return isValid(parsed) ? {
140
+ value: newValue,
141
+ dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
142
+ timeValue: format(parsed, convertTokens('HH:mm')),
143
+ zoneValue: format(parsed, convertTokens('ZZ'))
144
+ } : {
145
+ value: newValue,
146
+ dateValue: '',
147
+ timeValue: '',
148
+ zoneValue: ''
149
+ };
150
+ }
151
+ default:
152
+ return state;
153
+ }
154
+ };
155
+ const [dtState, dispatch] = useReducer(reducer, null, () => {
156
+ var _ref;
157
+ const initialValue = (_ref = providedValue !== null && providedValue !== void 0 ? providedValue : defaultValue) !== null && _ref !== void 0 ? _ref : '';
158
+ const initialDate = (datePickerPropsWithSelectProps === null || datePickerPropsWithSelectProps === void 0 ? void 0 : datePickerPropsWithSelectProps.defaultValue) || '';
159
+ const initialTime = (timePickerPropsWithSelectProps === null || timePickerPropsWithSelectProps === void 0 ? void 0 : timePickerPropsWithSelectProps.defaultValue) || '';
160
+ if (!initialValue) {
161
+ return {
162
+ value: '',
163
+ dateValue: initialDate,
164
+ timeValue: initialTime,
165
+ zoneValue: ''
166
+ };
167
+ }
168
+ if (providedParseValue) {
169
+ const parsed = providedParseValue(initialValue, initialDate, initialTime, '');
170
+ return parsed ? {
171
+ value: initialValue,
172
+ ...parsed
173
+ } : {
174
+ value: initialValue,
175
+ dateValue: initialDate,
176
+ timeValue: initialTime,
177
+ zoneValue: ''
178
+ };
179
+ }
180
+ const parsed = parseISO(initialValue);
181
+ return isValid(parsed) ? {
182
+ value: initialValue,
183
+ dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
184
+ timeValue: format(parsed, convertTokens('HH:mm')),
185
+ zoneValue: format(parsed, convertTokens('ZZ'))
186
+ } : {
187
+ value: initialValue,
188
+ dateValue: initialDate,
189
+ timeValue: initialTime,
190
+ zoneValue: ''
191
+ };
192
+ });
193
+
194
+ // if a previously controlled value becomes undefined, it clears the reducer
195
+ // state so the hidden input no longer keeps the stale ISO timestamp.
196
+ // Without this, components that try to clear their components by providing
197
+ // `undefined` to the `value` prop will not clear the hidden input and will
198
+ // cause unexpected issues.
199
+ const hasReceivedProvidedValue = useRef(providedValue !== undefined);
200
+ // We don't want to set the state on the first render, as it would
201
+ // needlessly be a duplicate.
202
+ const isFirstRender = useRef(true);
203
+ useEffect(() => {
204
+ if (isFirstRender.current) {
205
+ isFirstRender.current = false;
206
+ return;
207
+ }
208
+ if (providedValue !== undefined) {
209
+ hasReceivedProvidedValue.current = true;
210
+ dispatch({
211
+ type: 'SET_VALUE',
212
+ payload: providedValue
213
+ });
214
+ } else if (hasReceivedProvidedValue.current) {
215
+ hasReceivedProvidedValue.current = false;
216
+ dispatch({
217
+ type: 'SET_VALUE',
218
+ payload: ''
219
+ });
220
+ }
221
+ }, [providedValue]);
222
+ const parseValue = useCallback((value, providedDateValue, providedTimeValue, providedZoneValue) => {
223
+ if (providedParseValue) {
224
+ const parsedFromFn = providedParseValue(value, providedDateValue, providedTimeValue, providedZoneValue);
225
+ // This handles cases found in Jira where the parse function actually does
226
+ // nothing and returns undefined. The previous `getSafeState` function
227
+ // just spread the values over the state, but if it returned `undefined`,
228
+ // it would just rely on the previous state values. Considering this is
229
+ // what is input to this function anyway, this is a safe way to handle
230
+ // this, colocate the behavior, and not rely on `getSafeState`.
231
+ return parsedFromFn || {
232
+ dateValue: providedDateValue,
233
+ timeValue: providedTimeValue,
234
+ zoneValue: providedZoneValue
235
+ };
236
+ }
237
+ const parsed = parseISO(value);
238
+ return isValid(parsed) ? {
239
+ dateValue: format(parsed, convertTokens('YYYY-MM-DD')),
240
+ timeValue: format(parsed, convertTokens('HH:mm')),
241
+ zoneValue: format(parsed, convertTokens('ZZ'))
242
+ } : {
243
+ dateValue: dtState.dateValue,
244
+ timeValue: dtState.timeValue,
245
+ zoneValue: dtState.zoneValue
246
+ };
247
+ }, [providedParseValue, dtState.dateValue, dtState.timeValue, dtState.zoneValue]);
248
+ const onDateBlur = event => {
249
+ setIsFocused(false);
250
+ onBlur(event);
251
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onBlur) {
252
+ datePickerPropsWithSelectProps.onBlur(event);
253
+ }
254
+ };
255
+ const onTimeBlur = event => {
256
+ setIsFocused(false);
257
+ onBlur(event);
258
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onBlur) {
259
+ timePickerPropsWithSelectProps.onBlur(event);
260
+ }
261
+ };
262
+ const onDateFocus = event => {
263
+ setIsFocused(false);
264
+ onFocus(event);
265
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onFocus) {
266
+ datePickerPropsWithSelectProps.onFocus(event);
267
+ }
268
+ };
269
+ const onTimeFocus = event => {
270
+ setIsFocused(false);
271
+ onFocus(event);
272
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onFocus) {
273
+ timePickerPropsWithSelectProps.onFocus(event);
274
+ }
275
+ };
276
+ const onDateChange = newDateValue => {
277
+ const parsedValues = parseValue(dtState.value, newDateValue, dtState.timeValue, dtState.zoneValue);
278
+ onValueChange({
279
+ providedDateValue: newDateValue,
280
+ providedTimeValue: parsedValues.timeValue,
281
+ providedZoneValue: parsedValues.zoneValue
282
+ });
283
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
284
+ datePickerPropsWithSelectProps.onChange(newDateValue);
285
+ }
286
+ };
287
+ const onTimeChange = newTimeValue => {
288
+ const parsedValues = parseValue(dtState.value, dtState.dateValue, newTimeValue, dtState.zoneValue);
289
+ onValueChange({
290
+ providedDateValue: parsedValues.dateValue,
291
+ providedTimeValue: newTimeValue,
292
+ providedZoneValue: parsedValues.zoneValue
293
+ });
294
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
295
+ timePickerPropsWithSelectProps.onChange(newTimeValue);
296
+ }
297
+ };
298
+ const onClear = () => {
299
+ const parsedValues = parseValue(dtState.value, dtState.dateValue, dtState.timeValue, dtState.zoneValue);
300
+ onValueChange({
301
+ providedDateValue: '',
302
+ providedTimeValue: '',
303
+ providedZoneValue: parsedValues.zoneValue
304
+ });
305
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
306
+ datePickerPropsWithSelectProps.onChange('');
307
+ }
308
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
309
+ timePickerPropsWithSelectProps.onChange('');
310
+ }
311
+ };
312
+ const onChangePropWithAnalytics = usePlatformLeafEventHandler({
313
+ fn: onChangeProp,
314
+ action: 'selectedDate',
315
+ actionSubject: 'dateTimePicker',
316
+ ...analyticsAttributes
317
+ });
318
+ const onValueChange = ({
319
+ providedDateValue,
320
+ providedTimeValue,
321
+ providedZoneValue
322
+ }) => {
323
+ if (providedDateValue && providedTimeValue) {
324
+ const isoValue = formatDateTimeZoneIntoIso(providedDateValue, providedTimeValue, providedZoneValue);
325
+ const {
326
+ zoneValue: parsedZone
327
+ } = parseValue(isoValue, providedDateValue, providedTimeValue, providedZoneValue);
328
+ const valueWithValidZone = formatDateTimeZoneIntoIso(providedDateValue, providedTimeValue, parsedZone);
329
+ dispatch({
330
+ type: 'APPLY',
331
+ payload: {
332
+ value: valueWithValidZone,
333
+ dateValue: providedDateValue,
334
+ timeValue: providedTimeValue,
335
+ zoneValue: parsedZone
336
+ }
337
+ });
338
+ onChangePropWithAnalytics(valueWithValidZone);
339
+ // If the date or time value was cleared when there is an existing datetime value, then clear the value.
340
+ } else if (dtState.value) {
341
+ dispatch({
342
+ type: 'APPLY',
343
+ payload: {
344
+ value: '',
345
+ dateValue: providedDateValue,
346
+ timeValue: providedTimeValue,
347
+ zoneValue: providedZoneValue
348
+ }
349
+ });
350
+ onChangePropWithAnalytics('');
351
+ } else {
352
+ dispatch({
353
+ type: 'APPLY',
354
+ payload: {
355
+ value: '',
356
+ dateValue: providedDateValue,
357
+ timeValue: providedTimeValue,
358
+ zoneValue: providedZoneValue
359
+ }
360
+ });
361
+ }
362
+ };
363
+ const {
364
+ selectProps: datePickerSelectProps,
365
+ ...datePickerProps
366
+ } = datePickerPropsWithSelectProps;
367
+ const datePickerAriaDescribedBy = datePickerProps['aria-describedby'] || ariaDescribedBy;
368
+ const datePickerLabel = datePickerProps.label || 'Date';
369
+ const mergedDatePickerSelectProps = {
370
+ ...datePickerSelectProps,
371
+ styles: mergeStyles(styles, datePickerSelectProps === null || datePickerSelectProps === void 0 ? void 0 : datePickerSelectProps.styles)
372
+ };
373
+ const {
374
+ selectProps: timePickerSelectProps,
375
+ ...timePickerProps
376
+ } = timePickerPropsWithSelectProps;
377
+ const timePickerAriaDescribedBy = timePickerProps['aria-describedby'] || ariaDescribedBy;
378
+ const timePickerLabel = timePickerProps.label || 'Time';
379
+ const mergedTimePickerSelectProps = {
380
+ ...timePickerSelectProps,
381
+ styles: mergeStyles(styles, timePickerSelectProps === null || timePickerSelectProps === void 0 ? void 0 : timePickerSelectProps.styles)
382
+ };
383
+
384
+ // Render DateTimePicker's IconContainer when a value has been filled
385
+ // Don't use Date or TimePicker's because they can't be customised
386
+ const isClearable = Boolean(dtState.dateValue || dtState.timeValue);
387
+ return /*#__PURE__*/React.createElement(DateTimePickerContainer, {
388
+ appearance: appearance,
389
+ isDisabled: isDisabled,
390
+ isFocused: isFocused,
391
+ isInvalid: isInvalid,
392
+ testId: testId,
393
+ innerProps: innerProps,
394
+ ref: ref
395
+ }, /*#__PURE__*/React.createElement("input", {
396
+ name: name,
397
+ type: "hidden",
398
+ value: dtState.value,
399
+ "data-testid": testId && `${testId}--input`
400
+ }), /*#__PURE__*/React.createElement(Box, {
401
+ xcss: compiledStyles.datePickerContainerStyles
402
+ }, /*#__PURE__*/React.createElement(DatePicker, {
403
+ appearance: appearance,
404
+ "aria-describedby": datePickerAriaDescribedBy,
405
+ autoFocus: datePickerProps.autoFocus || autoFocus,
406
+ dateFormat: datePickerProps.dateFormat,
407
+ defaultIsOpen: datePickerProps.defaultIsOpen,
408
+ defaultValue: datePickerProps.defaultValue,
409
+ disabled: datePickerProps.disabled,
410
+ disabledDateFilter: datePickerProps.disabledDateFilter,
411
+ formatDisplayLabel: datePickerProps.formatDisplayLabel,
412
+ hideIcon: datePickerProps.hideIcon || true,
413
+ icon: datePickerProps.icon,
414
+ id: datePickerProps.id || id,
415
+ innerProps: datePickerProps.innerProps,
416
+ inputLabel: datePickerProps.inputLabel,
417
+ inputLabelId: datePickerProps.inputLabelId,
418
+ isDisabled: datePickerProps.isDisabled || isDisabled,
419
+ isInvalid: datePickerProps.isInvalid || isInvalid,
420
+ isOpen: datePickerProps.isOpen,
421
+ isRequired: datePickerProps.isRequired || isRequired,
422
+ label: datePickerLabel,
423
+ locale: datePickerProps.locale || locale,
424
+ maxDate: datePickerProps.maxDate,
425
+ minDate: datePickerProps.minDate,
426
+ name: datePickerProps.name,
427
+ nextMonthLabel: datePickerProps.nextMonthLabel,
428
+ onBlur: onDateBlur,
429
+ onChange: onDateChange,
430
+ onFocus: onDateFocus,
431
+ openCalendarLabel: datePickerProps.openCalendarLabel,
432
+ parseInputValue: datePickerProps.parseInputValue,
433
+ placeholder: datePickerProps.placeholder,
434
+ previousMonthLabel: datePickerProps.previousMonthLabel,
435
+ selectProps: mergedDatePickerSelectProps,
436
+ shouldShowCalendarButton: datePickerProps.shouldShowCalendarButton,
437
+ spacing: datePickerProps.spacing || spacing,
438
+ testId: testId && `${testId}--datepicker` || datePickerProps.testId,
439
+ value: dtState.dateValue,
440
+ weekStartDay: datePickerProps.weekStartDay
441
+ })), /*#__PURE__*/React.createElement(Box, {
442
+ xcss: compiledStyles.timePickerContainerStyles
443
+ }, /*#__PURE__*/React.createElement(TimePicker, {
444
+ appearance: timePickerProps.appearance || appearance,
445
+ "aria-describedby": timePickerAriaDescribedBy,
446
+ autoFocus: timePickerProps.autoFocus,
447
+ defaultIsOpen: timePickerProps.defaultIsOpen,
448
+ defaultValue: timePickerProps.defaultValue,
449
+ formatDisplayLabel: timePickerProps.formatDisplayLabel,
450
+ hideIcon: timePickerProps.hideIcon || true,
451
+ id: timePickerProps.id,
452
+ innerProps: timePickerProps.innerProps,
453
+ isDisabled: timePickerProps.isDisabled || isDisabled,
454
+ isInvalid: timePickerProps.isInvalid || isInvalid,
455
+ isOpen: timePickerProps.isOpen,
456
+ isRequired: timePickerProps.isRequired || isRequired,
457
+ label: timePickerLabel,
458
+ locale: timePickerProps.locale || locale,
459
+ name: timePickerProps.name,
460
+ onBlur: onTimeBlur,
461
+ onChange: onTimeChange,
462
+ onFocus: onTimeFocus,
463
+ parseInputValue: timePickerProps.parseInputValue,
464
+ placeholder: timePickerProps.placeholder,
465
+ selectProps: mergedTimePickerSelectProps,
466
+ spacing: timePickerProps.spacing || spacing,
467
+ testId: timePickerProps.testId || testId && `${testId}--timepicker`,
468
+ timeFormat: timePickerProps.timeFormat,
469
+ timeIsEditable: timePickerProps.timeIsEditable,
470
+ times: timePickerProps.times,
471
+ value: dtState.timeValue
472
+ })), isClearable && !isDisabled ? /*#__PURE__*/React.createElement(Inline, {
473
+ xcss: compiledStyles.iconContainerStyles
474
+ }, /*#__PURE__*/React.createElement(IconButton, {
475
+ appearance: "subtle",
476
+ label: clearControlLabel,
477
+ icon: iconProps => /*#__PURE__*/React.createElement(SelectClearIcon, _extends({}, iconProps, {
478
+ color: "var(--ds-text-subtlest, #6B6E76)",
479
+ size: "small"
480
+ })),
481
+ onClick: onClear,
482
+ testId: testId && `${testId}--icon--container`,
483
+ tabIndex: -1
484
+ })) : null);
485
+ });
7
486
  export default DateTimePicker;
@@ -17,7 +17,7 @@ import { convertTokens } from '../internal/parse-tokens';
17
17
  import { placeholderDatetime } from '../internal/placeholder-date-time';
18
18
  import { makeSingleValue } from '../internal/single-value';
19
19
  const packageName = "@atlaskit/datetime-picker";
20
- const packageVersion = "17.8.7";
20
+ const packageVersion = "17.8.9";
21
21
  const defaultTimeFormat = 'h:mma';
22
22
  const menuStyles = {
23
23
  /* Need to remove default absolute positioning as that causes issues with position fixed */
@@ -8,9 +8,9 @@
8
8
  ._1h6d1v1w{border-color:var(--ds-border-focused,#4688ec)}
9
9
  ._1h6dbk0g{border-color:var(--ds-border-disabled,#0515240f)}._16qsvyy1{box-shadow:inset 0 0 0 var(--ds-border-width,1px) var(--ds-border-focused,#4688ec)}
10
10
  ._1e0c1txw{display:flex}
11
+ ._bfhk187o{background-color:var(--ds-background-disabled,#0515240f)}
11
12
  ._bfhk1j28{background-color:transparent}
12
13
  ._bfhk1j9a{background-color:var(--ds-background-input,#fff)}
13
- ._bfhkby5v{background-color:var(--ds-background-disabled,#17171708)}
14
14
  ._bfhkr01l{background-color:var(--ds-background-input-pressed,#fff)}
15
15
  ._4cvx1bqt:hover{border-color:var(--ds-border-danger,#e2483d)}
16
16
  ._4cvx1j28:hover{border-color:transparent}
@@ -36,6 +36,6 @@ export const DateTimePickerContainer = /*#__PURE__*/forwardRef(({
36
36
  return /*#__PURE__*/React.createElement("div", _extends({}, innerProps, {
37
37
  "data-testid": testId,
38
38
  ref: ref,
39
- className: ax(["_2rko12b0 _v564r5cv _1e0c1txw _bfhk1j9a _d0altlke", fg('platform-dst-shape-theme-default') && "_2rko1qi0", "_19itno8c", isDisabled && "_1h6dbk0g _bfhkby5v _d0al73ad", isFocused && "_bfhkr01l", appearance === 'subtle' && isFocused && "_1h6d1j28 _bfhkr01l", appearance === 'subtle' && !isFocused && "_1h6d1j28 _bfhk1j28", isFocused && "_1h6d1v1w _16qsvyy1", isInvalid && "_1h6d1bqt", notFocusedOrIsDisabled && isInvalid && "_4cvx1bqt _irr3l4ek", notFocusedOrIsDisabled && !isInvalid && "_4cvxrsbi _irr3l4ek", appearance === 'none' && "_1h6d1j28 _bfhk1j28 _4cvx1j28 _irr31j28"])
39
+ className: ax(["_2rko12b0 _v564r5cv _1e0c1txw _bfhk1j9a _d0altlke", fg('platform-dst-shape-theme-default') && "_2rko1qi0", "_19itno8c", isDisabled && "_1h6dbk0g _bfhk187o _d0al73ad", isFocused && "_bfhkr01l", appearance === 'subtle' && isFocused && "_1h6d1j28 _bfhkr01l", appearance === 'subtle' && !isFocused && "_1h6d1j28 _bfhk1j28", isFocused && "_1h6d1v1w _16qsvyy1", isInvalid && "_1h6d1bqt", notFocusedOrIsDisabled && isInvalid && "_4cvx1bqt _irr3l4ek", notFocusedOrIsDisabled && !isInvalid && "_4cvxrsbi _irr3l4ek", appearance === 'none' && "_1h6d1j28 _bfhk1j28 _4cvx1j28 _irr31j28"])
40
40
  }), children);
41
41
  });
@@ -28,8 +28,8 @@ export const getParsedISO = di => {
28
28
  const parsedDate = parseInt(date, 10);
29
29
  const parsedMonth = parseInt(month, 10);
30
30
  const parsedYear = parseInt(year, 10);
31
- const lastDayInMonth = lastDayOfMonth(new Date(parsedYear, parsedMonth - 1) // This needs to be -1, because the Date constructor expects an index of the given month
32
- ).getDate();
31
+ const lastDayInMonth = lastDayOfMonth(new Date(parsedYear, parsedMonth - 1 // This needs to be -1, because the Date constructor expects an index of the given month
32
+ )).getDate();
33
33
  if (lastDayInMonth < parsedDate) {
34
34
  newIso = `${parsedYear}-${padToTwo(parsedMonth)}-${padToTwo(lastDayInMonth)}`;
35
35
  } else {
@@ -37,7 +37,7 @@ import { MenuTopLayer } from '../internal/menu-top-layer';
37
37
  import { parseDate } from '../internal/parse-date';
38
38
  import { makeSingleValue } from '../internal/single-value';
39
39
  var packageName = "@atlaskit/datetime-picker";
40
- var packageVersion = "17.8.7";
40
+ var packageVersion = "17.8.9";
41
41
  var styles = {
42
42
  pickerContainerStyle: "_kqswh2mm",
43
43
  dropdownIndicatorStyles: "_1ul91k8s _1tke1k8s _1e0c1txw _4cvr1h6o _1bah1h6o",