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