@atlaskit/datetime-picker 17.6.5 → 17.8.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 (149) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/date-picker/package.json +17 -0
  3. package/date-time-picker/package.json +17 -0
  4. package/dist/cjs/components/date-picker.js +20 -15
  5. package/dist/cjs/components/date-time-picker-class.js +7 -9
  6. package/dist/cjs/components/date-time-picker-fc.js +468 -7
  7. package/dist/cjs/components/time-picker.js +11 -8
  8. package/dist/cjs/entry-points/date-picker.js +13 -0
  9. package/dist/cjs/entry-points/date-time-picker.js +13 -0
  10. package/dist/cjs/entry-points/time-picker.js +13 -0
  11. package/dist/cjs/entry-points/types.js +1 -0
  12. package/dist/cjs/internal/convert-to24hr-time.js +66 -0
  13. package/dist/cjs/internal/default-date-format.js +7 -0
  14. package/dist/cjs/internal/default-times.js +7 -0
  15. package/dist/cjs/internal/empty-component.js +12 -0
  16. package/dist/cjs/internal/format-date-time-zone-into-iso.js +15 -0
  17. package/dist/cjs/internal/format-date.js +39 -0
  18. package/dist/cjs/internal/{date-picker-migration.js → get-parsed-iso.js} +4 -48
  19. package/dist/cjs/internal/get-placeholder.js +32 -0
  20. package/dist/cjs/internal/get-safe-calendar-value.js +18 -0
  21. package/dist/cjs/internal/get-short-iso-string.js +13 -0
  22. package/dist/cjs/internal/is-date-disabled.js +29 -0
  23. package/dist/cjs/internal/is-valid.js +39 -0
  24. package/dist/cjs/internal/pad-two.js +9 -0
  25. package/dist/cjs/internal/parse-date.js +31 -20
  26. package/dist/cjs/internal/parse-time.js +6 -102
  27. package/dist/cjs/internal/placeholder-date-time.js +9 -0
  28. package/dist/cjs/internal/remove-spacer.js +9 -0
  29. package/dist/es2019/components/date-picker.js +9 -4
  30. package/dist/es2019/components/date-time-picker-class.js +4 -6
  31. package/dist/es2019/components/date-time-picker-fc.js +451 -5
  32. package/dist/es2019/components/time-picker.js +5 -2
  33. package/dist/es2019/entry-points/date-picker.js +1 -0
  34. package/dist/es2019/entry-points/date-time-picker.js +1 -0
  35. package/dist/es2019/entry-points/time-picker.js +1 -0
  36. package/dist/es2019/entry-points/types.js +0 -0
  37. package/dist/es2019/internal/convert-to24hr-time.js +60 -0
  38. package/dist/es2019/internal/default-date-format.js +1 -0
  39. package/dist/es2019/internal/default-times.js +1 -0
  40. package/dist/es2019/internal/empty-component.js +4 -0
  41. package/dist/es2019/internal/format-date-time-zone-into-iso.js +9 -0
  42. package/dist/es2019/internal/format-date.js +34 -0
  43. package/dist/es2019/internal/{date-picker-migration.js → get-parsed-iso.js} +2 -54
  44. package/dist/es2019/internal/get-placeholder.js +28 -0
  45. package/dist/es2019/internal/get-safe-calendar-value.js +11 -0
  46. package/dist/es2019/internal/get-short-iso-string.js +6 -0
  47. package/dist/es2019/internal/is-date-disabled.js +25 -0
  48. package/dist/es2019/internal/is-valid.js +33 -0
  49. package/dist/es2019/internal/pad-two.js +3 -0
  50. package/dist/es2019/internal/parse-date.js +33 -18
  51. package/dist/es2019/internal/parse-time.js +3 -96
  52. package/dist/es2019/internal/placeholder-date-time.js +3 -0
  53. package/dist/es2019/internal/remove-spacer.js +3 -0
  54. package/dist/esm/components/date-picker.js +9 -4
  55. package/dist/esm/components/date-time-picker-class.js +4 -6
  56. package/dist/esm/components/date-time-picker-fc.js +468 -7
  57. package/dist/esm/components/time-picker.js +5 -2
  58. package/dist/esm/entry-points/date-picker.js +1 -0
  59. package/dist/esm/entry-points/date-time-picker.js +1 -0
  60. package/dist/esm/entry-points/time-picker.js +1 -0
  61. package/dist/esm/entry-points/types.js +0 -0
  62. package/dist/esm/internal/convert-to24hr-time.js +60 -0
  63. package/dist/esm/internal/default-date-format.js +1 -0
  64. package/dist/esm/internal/default-times.js +1 -0
  65. package/dist/esm/internal/empty-component.js +6 -0
  66. package/dist/esm/internal/format-date-time-zone-into-iso.js +9 -0
  67. package/dist/esm/internal/format-date.js +32 -0
  68. package/dist/esm/internal/{date-picker-migration.js → get-parsed-iso.js} +2 -46
  69. package/dist/esm/internal/get-placeholder.js +26 -0
  70. package/dist/esm/internal/get-safe-calendar-value.js +11 -0
  71. package/dist/esm/internal/get-short-iso-string.js +6 -0
  72. package/dist/esm/internal/is-date-disabled.js +23 -0
  73. package/dist/esm/internal/is-valid.js +33 -0
  74. package/dist/esm/internal/pad-two.js +3 -0
  75. package/dist/esm/internal/parse-date.js +31 -18
  76. package/dist/esm/internal/parse-time.js +3 -96
  77. package/dist/esm/internal/placeholder-date-time.js +3 -0
  78. package/dist/esm/internal/remove-spacer.js +3 -0
  79. package/dist/types/components/date-time-picker-class.d.ts +0 -2
  80. package/dist/types/components/date-time-picker-fc.d.ts +4 -2
  81. package/dist/types/entry-points/date-picker.d.ts +2 -0
  82. package/dist/types/entry-points/date-time-picker.d.ts +1 -0
  83. package/dist/types/entry-points/time-picker.d.ts +1 -0
  84. package/dist/types/entry-points/types.d.ts +1 -0
  85. package/dist/types/internal/convert-to24hr-time.d.ts +7 -0
  86. package/dist/types/internal/default-date-format.d.ts +1 -0
  87. package/dist/types/internal/default-times.d.ts +1 -0
  88. package/dist/types/internal/empty-component.d.ts +4 -0
  89. package/dist/types/internal/format-date-time-zone-into-iso.d.ts +4 -0
  90. package/dist/{types-ts4.5/internal/date-picker-migration.d.ts → types/internal/format-date.d.ts} +0 -28
  91. package/dist/types/internal/get-parsed-iso.d.ts +20 -0
  92. package/dist/types/internal/get-placeholder.d.ts +22 -0
  93. package/dist/types/internal/get-safe-calendar-value.d.ts +1 -0
  94. package/dist/types/internal/get-short-iso-string.d.ts +1 -0
  95. package/dist/types/internal/is-date-disabled.d.ts +20 -0
  96. package/dist/types/internal/is-valid.d.ts +1 -0
  97. package/dist/types/internal/pad-two.d.ts +1 -0
  98. package/dist/types/internal/parse-date.d.ts +26 -5
  99. package/dist/types/internal/parse-time.d.ts +0 -9
  100. package/dist/types/internal/placeholder-date-time.d.ts +1 -0
  101. package/dist/types/internal/remove-spacer.d.ts +1 -0
  102. package/dist/types-ts4.5/components/date-time-picker-class.d.ts +0 -2
  103. package/dist/types-ts4.5/components/date-time-picker-fc.d.ts +4 -2
  104. package/dist/types-ts4.5/entry-points/date-picker.d.ts +2 -0
  105. package/dist/types-ts4.5/entry-points/date-time-picker.d.ts +1 -0
  106. package/dist/types-ts4.5/entry-points/time-picker.d.ts +1 -0
  107. package/dist/types-ts4.5/entry-points/types.d.ts +1 -0
  108. package/dist/types-ts4.5/internal/convert-to24hr-time.d.ts +7 -0
  109. package/dist/types-ts4.5/internal/default-date-format.d.ts +1 -0
  110. package/dist/types-ts4.5/internal/default-times.d.ts +1 -0
  111. package/dist/types-ts4.5/internal/empty-component.d.ts +4 -0
  112. package/dist/types-ts4.5/internal/format-date-time-zone-into-iso.d.ts +4 -0
  113. package/dist/{types/internal/date-picker-migration.d.ts → types-ts4.5/internal/format-date.d.ts} +0 -28
  114. package/dist/types-ts4.5/internal/get-parsed-iso.d.ts +20 -0
  115. package/dist/types-ts4.5/internal/get-placeholder.d.ts +22 -0
  116. package/dist/types-ts4.5/internal/get-safe-calendar-value.d.ts +1 -0
  117. package/dist/types-ts4.5/internal/get-short-iso-string.d.ts +1 -0
  118. package/dist/types-ts4.5/internal/is-date-disabled.d.ts +20 -0
  119. package/dist/types-ts4.5/internal/is-valid.d.ts +1 -0
  120. package/dist/types-ts4.5/internal/pad-two.d.ts +1 -0
  121. package/dist/types-ts4.5/internal/parse-date.d.ts +26 -5
  122. package/dist/types-ts4.5/internal/parse-time.d.ts +0 -9
  123. package/dist/types-ts4.5/internal/placeholder-date-time.d.ts +1 -0
  124. package/dist/types-ts4.5/internal/remove-spacer.d.ts +1 -0
  125. package/package.json +11 -14
  126. package/time-picker/package.json +17 -0
  127. package/types/package.json +5 -5
  128. package/dist/cjs/components/date-time-picker-fc-new.js +0 -479
  129. package/dist/cjs/components/date-time-picker-fc-old.js +0 -370
  130. package/dist/cjs/internal/index.js +0 -31
  131. package/dist/es2019/components/date-time-picker-fc-new.js +0 -456
  132. package/dist/es2019/components/date-time-picker-fc-old.compiled.css +0 -6
  133. package/dist/es2019/components/date-time-picker-fc-old.js +0 -336
  134. package/dist/es2019/internal/index.js +0 -20
  135. package/dist/esm/components/date-time-picker-fc-new.compiled.css +0 -6
  136. package/dist/esm/components/date-time-picker-fc-new.js +0 -473
  137. package/dist/esm/components/date-time-picker-fc-old.compiled.css +0 -6
  138. package/dist/esm/components/date-time-picker-fc-old.js +0 -364
  139. package/dist/esm/internal/index.js +0 -22
  140. package/dist/types/components/date-time-picker-fc-new.d.ts +0 -6
  141. package/dist/types/components/date-time-picker-fc-old.d.ts +0 -6
  142. package/dist/types/internal/index.d.ts +0 -10
  143. package/dist/types-ts4.5/components/date-time-picker-fc-new.d.ts +0 -6
  144. package/dist/types-ts4.5/components/date-time-picker-fc-old.d.ts +0 -6
  145. package/dist/types-ts4.5/internal/index.d.ts +0 -10
  146. package/offerings.json +0 -98
  147. /package/dist/cjs/components/{date-time-picker-fc-new.compiled.css → date-time-picker-fc.compiled.css} +0 -0
  148. /package/dist/{cjs/components/date-time-picker-fc-old.compiled.css → es2019/components/date-time-picker-fc.compiled.css} +0 -0
  149. /package/dist/{es2019/components/date-time-picker-fc-new.compiled.css → esm/components/date-time-picker-fc.compiled.css} +0 -0
@@ -1,14 +1,78 @@
1
+ /* date-time-picker-fc.tsx generated by @compiled/babel-plugin v0.39.1 */
1
2
  "use strict";
2
3
 
3
4
  var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
5
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
6
  Object.defineProperty(exports, "__esModule", {
5
7
  value: true
6
8
  });
7
9
  exports.default = void 0;
8
- var _platformFeatureFlags = require("@atlaskit/platform-feature-flags");
9
- var _ffComponent = require("../internal/ff-component");
10
- var _dateTimePickerFcNew = _interopRequireDefault(require("./date-time-picker-fc-new"));
11
- var _dateTimePickerFcOld = _interopRequireDefault(require("./date-time-picker-fc-old"));
10
+ require("./date-time-picker-fc.compiled.css");
11
+ var _runtime = require("@compiled/react/runtime");
12
+ var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
13
+ var _objectWithoutProperties2 = _interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));
14
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
15
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
16
+ var _react = _interopRequireWildcard(require("react"));
17
+ var _dateFns = require("date-fns");
18
+ var _analyticsNext = require("@atlaskit/analytics-next");
19
+ var _new = require("@atlaskit/button/new");
20
+ var _crossCircle = _interopRequireDefault(require("@atlaskit/icon/core/cross-circle"));
21
+ var _compiled = require("@atlaskit/primitives/compiled");
22
+ var _select = require("@atlaskit/select");
23
+ var _dateTimePickerContainer = require("../internal/date-time-picker-container");
24
+ var _formatDateTimeZoneIntoIso = require("../internal/format-date-time-zone-into-iso");
25
+ var _parseTokens = require("../internal/parse-tokens");
26
+ var _datePicker = _interopRequireDefault(require("./date-picker"));
27
+ var _timePicker = _interopRequireDefault(require("./time-picker"));
28
+ var _excluded = ["selectProps"],
29
+ _excluded2 = ["selectProps"];
30
+ function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
31
+ 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; }
32
+ 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) { (0, _defineProperty2.default)(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; } /// <reference types="node" />
33
+ // for typing `process`
34
+ // oxlint-disable-next-line @atlassian/no-restricted-imports
35
+ var packageName = "@atlaskit/datetime-picker";
36
+ var packageVersion = "17.7.0";
37
+ var analyticsAttributes = {
38
+ componentName: 'dateTimePicker',
39
+ packageName: packageName,
40
+ packageVersion: packageVersion
41
+ };
42
+ var compiledStyles = {
43
+ datePickerContainerStyles: "_i0dl1ssb _16jlkb7n _1o9zidpf",
44
+ timePickerContainerStyles: "_i0dl1ssb _16jlkb7n",
45
+ iconContainerStyles: "_1e0c1txw _4cvr1h6o _i0dl1kw7"
46
+ };
47
+
48
+ // react-select overrides (via @atlaskit/select).
49
+ var styles = {
50
+ control: function control(style) {
51
+ return _objectSpread(_objectSpread({}, style), {}, {
52
+ backgroundColor: 'transparent',
53
+ border: 2,
54
+ borderRadius: 0,
55
+ paddingLeft: 0,
56
+ ':hover': {
57
+ backgroundColor: 'transparent',
58
+ cursor: 'inherit'
59
+ }
60
+ });
61
+ }
62
+ };
63
+
64
+ /**
65
+ * Two action types keep the reducer focused:
66
+ *
67
+ * - APPLY: used by user-interaction handlers. The handler computes the full
68
+ * next state (including the new ISO value) and applies it atomically. This
69
+ * guarantees a single re-render with no cascades regardless of React version.
70
+ *
71
+ * - SET_VALUE: used by the `providedValue` prop effect. The reducer owns all
72
+ * parsing logic for external value changes, including the empty-string case
73
+ * that the previous useState approach missed.
74
+ */
75
+
12
76
  /**
13
77
  * __Date time picker__
14
78
  *
@@ -18,6 +82,403 @@ var _dateTimePickerFcOld = _interopRequireDefault(require("./date-time-picker-fc
18
82
  * - [Code](https://atlassian.design/components/datetime-picker/code)
19
83
  * - [Usage](https://atlassian.design/components/datetime-picker/usage)
20
84
  */
21
- var _default = exports.default = (0, _ffComponent.componentWithCondition)(function () {
22
- return (0, _platformFeatureFlags.fg)('dst-a11y_fix-dtp-value-calculation');
23
- }, _dateTimePickerFcNew.default, _dateTimePickerFcOld.default);
85
+ var DateTimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
86
+ var ariaDescribedBy = _ref2['aria-describedby'],
87
+ _ref2$appearance = _ref2.appearance,
88
+ appearance = _ref2$appearance === void 0 ? 'default' : _ref2$appearance,
89
+ _ref2$autoFocus = _ref2.autoFocus,
90
+ autoFocus = _ref2$autoFocus === void 0 ? false : _ref2$autoFocus,
91
+ _ref2$clearControlLab = _ref2.clearControlLabel,
92
+ clearControlLabel = _ref2$clearControlLab === void 0 ? 'clear' : _ref2$clearControlLab,
93
+ _ref2$datePickerProps = _ref2.datePickerProps,
94
+ datePickerPropsWithSelectProps = _ref2$datePickerProps === void 0 ? {} : _ref2$datePickerProps,
95
+ _ref2$defaultValue = _ref2.defaultValue,
96
+ defaultValue = _ref2$defaultValue === void 0 ? '' : _ref2$defaultValue,
97
+ _ref2$id = _ref2.id,
98
+ id = _ref2$id === void 0 ? '' : _ref2$id,
99
+ _ref2$innerProps = _ref2.innerProps,
100
+ innerProps = _ref2$innerProps === void 0 ? {} : _ref2$innerProps,
101
+ _ref2$isDisabled = _ref2.isDisabled,
102
+ isDisabled = _ref2$isDisabled === void 0 ? false : _ref2$isDisabled,
103
+ _ref2$isInvalid = _ref2.isInvalid,
104
+ isInvalid = _ref2$isInvalid === void 0 ? false : _ref2$isInvalid,
105
+ _ref2$isRequired = _ref2.isRequired,
106
+ isRequired = _ref2$isRequired === void 0 ? false : _ref2$isRequired,
107
+ _ref2$name = _ref2.name,
108
+ name = _ref2$name === void 0 ? '' : _ref2$name,
109
+ _ref2$onBlur = _ref2.onBlur,
110
+ onBlur = _ref2$onBlur === void 0 ? function (_event) {} : _ref2$onBlur,
111
+ _ref2$onChange = _ref2.onChange,
112
+ onChangeProp = _ref2$onChange === void 0 ? function (_value) {} : _ref2$onChange,
113
+ _ref2$onFocus = _ref2.onFocus,
114
+ onFocus = _ref2$onFocus === void 0 ? function (_event) {} : _ref2$onFocus,
115
+ providedParseValue = _ref2.parseValue,
116
+ _ref2$spacing = _ref2.spacing,
117
+ spacing = _ref2$spacing === void 0 ? 'default' : _ref2$spacing,
118
+ _ref2$locale = _ref2.locale,
119
+ locale = _ref2$locale === void 0 ? 'en-US' : _ref2$locale,
120
+ testId = _ref2.testId,
121
+ _ref2$timePickerProps = _ref2.timePickerProps,
122
+ timePickerPropsWithSelectProps = _ref2$timePickerProps === void 0 ? {} : _ref2$timePickerProps,
123
+ providedValue = _ref2.value;
124
+ var _useState = (0, _react.useState)(false),
125
+ _useState2 = (0, _slicedToArray2.default)(_useState, 2),
126
+ isFocused = _useState2[0],
127
+ setIsFocused = _useState2[1];
128
+
129
+ /**
130
+ * Defined inside the component so the reducer closes over `providedParseValue`
131
+ * without needing to smuggle it through every action payload. React always
132
+ * calls the reducer from the latest render, so stale-closure is not a concern.
133
+ */
134
+ var reducer = function reducer(state, action) {
135
+ switch (action.type) {
136
+ case 'APPLY':
137
+ return action.payload;
138
+ case 'SET_VALUE':
139
+ {
140
+ var newValue = action.payload;
141
+
142
+ // Explicit empty-string handling: clear all sub-fields so the date
143
+ // and time pickers visually reset when a controlled value is cleared.
144
+ if (!newValue) {
145
+ return {
146
+ value: '',
147
+ dateValue: '',
148
+ timeValue: '',
149
+ zoneValue: ''
150
+ };
151
+ }
152
+ if (providedParseValue) {
153
+ var _parsed = providedParseValue(newValue, state.dateValue, state.timeValue, state.zoneValue);
154
+ return _parsed ? _objectSpread({
155
+ value: newValue
156
+ }, _parsed) : {
157
+ value: newValue,
158
+ dateValue: state.dateValue,
159
+ timeValue: state.timeValue,
160
+ zoneValue: state.zoneValue
161
+ };
162
+ }
163
+ var parsed = (0, _dateFns.parseISO)(newValue);
164
+ return (0, _dateFns.isValid)(parsed) ? {
165
+ value: newValue,
166
+ dateValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('YYYY-MM-DD')),
167
+ timeValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('HH:mm')),
168
+ zoneValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('ZZ'))
169
+ } : {
170
+ value: newValue,
171
+ dateValue: '',
172
+ timeValue: '',
173
+ zoneValue: ''
174
+ };
175
+ }
176
+ default:
177
+ return state;
178
+ }
179
+ };
180
+ var _useReducer = (0, _react.useReducer)(reducer, null, function () {
181
+ var initialValue = providedValue || defaultValue || '';
182
+ var initialDate = (datePickerPropsWithSelectProps === null || datePickerPropsWithSelectProps === void 0 ? void 0 : datePickerPropsWithSelectProps.defaultValue) || '';
183
+ var initialTime = (timePickerPropsWithSelectProps === null || timePickerPropsWithSelectProps === void 0 ? void 0 : timePickerPropsWithSelectProps.defaultValue) || '';
184
+ if (!initialValue) {
185
+ return {
186
+ value: '',
187
+ dateValue: initialDate,
188
+ timeValue: initialTime,
189
+ zoneValue: ''
190
+ };
191
+ }
192
+ if (providedParseValue) {
193
+ var _parsed2 = providedParseValue(initialValue, initialDate, initialTime, '');
194
+ return _parsed2 ? _objectSpread({
195
+ value: initialValue
196
+ }, _parsed2) : {
197
+ value: initialValue,
198
+ dateValue: initialDate,
199
+ timeValue: initialTime,
200
+ zoneValue: ''
201
+ };
202
+ }
203
+ var parsed = (0, _dateFns.parseISO)(initialValue);
204
+ return (0, _dateFns.isValid)(parsed) ? {
205
+ value: initialValue,
206
+ dateValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('YYYY-MM-DD')),
207
+ timeValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('HH:mm')),
208
+ zoneValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('ZZ'))
209
+ } : {
210
+ value: initialValue,
211
+ dateValue: initialDate,
212
+ timeValue: initialTime,
213
+ zoneValue: ''
214
+ };
215
+ }),
216
+ _useReducer2 = (0, _slicedToArray2.default)(_useReducer, 2),
217
+ dtState = _useReducer2[0],
218
+ dispatch = _useReducer2[1];
219
+ (0, _react.useEffect)(function () {
220
+ if (providedValue !== undefined) {
221
+ dispatch({
222
+ type: 'SET_VALUE',
223
+ payload: providedValue
224
+ });
225
+ }
226
+ // eslint-disable-next-line react-hooks/exhaustive-deps
227
+ }, [providedValue]);
228
+ var parseValue = (0, _react.useCallback)(function (value, providedDateValue, providedTimeValue, providedZoneValue) {
229
+ if (providedParseValue) {
230
+ var parsedFromFn = providedParseValue(value, providedDateValue, providedTimeValue, providedZoneValue);
231
+ // This handles cases found in Jira where the parse function actually does
232
+ // nothing and returns undefined. The previous `getSafeState` function
233
+ // just spread the values over the state, but if it returned `undefined`,
234
+ // it would just rely on the previous state values. Considering this is
235
+ // what is input to this function anyway, this is a safe way to handle
236
+ // this, colocate the behavior, and not rely on `getSafeState`.
237
+ return parsedFromFn || {
238
+ dateValue: providedDateValue,
239
+ timeValue: providedTimeValue,
240
+ zoneValue: providedZoneValue
241
+ };
242
+ }
243
+ var parsed = (0, _dateFns.parseISO)(value);
244
+ return (0, _dateFns.isValid)(parsed) ? {
245
+ dateValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('YYYY-MM-DD')),
246
+ timeValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('HH:mm')),
247
+ zoneValue: (0, _dateFns.format)(parsed, (0, _parseTokens.convertTokens)('ZZ'))
248
+ } : {
249
+ dateValue: dtState.dateValue,
250
+ timeValue: dtState.timeValue,
251
+ zoneValue: dtState.zoneValue
252
+ };
253
+ }, [providedParseValue, dtState.dateValue, dtState.timeValue, dtState.zoneValue]);
254
+ var onDateBlur = function onDateBlur(event) {
255
+ setIsFocused(false);
256
+ onBlur(event);
257
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onBlur) {
258
+ datePickerPropsWithSelectProps.onBlur(event);
259
+ }
260
+ };
261
+ var onTimeBlur = function onTimeBlur(event) {
262
+ setIsFocused(false);
263
+ onBlur(event);
264
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onBlur) {
265
+ timePickerPropsWithSelectProps.onBlur(event);
266
+ }
267
+ };
268
+ var onDateFocus = function onDateFocus(event) {
269
+ setIsFocused(false);
270
+ onFocus(event);
271
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onFocus) {
272
+ datePickerPropsWithSelectProps.onFocus(event);
273
+ }
274
+ };
275
+ var onTimeFocus = function onTimeFocus(event) {
276
+ setIsFocused(false);
277
+ onFocus(event);
278
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onFocus) {
279
+ timePickerPropsWithSelectProps.onFocus(event);
280
+ }
281
+ };
282
+ var onDateChange = function onDateChange(newDateValue) {
283
+ var parsedValues = parseValue(dtState.value, newDateValue, dtState.timeValue, dtState.zoneValue);
284
+ onValueChange({
285
+ providedDateValue: newDateValue,
286
+ providedTimeValue: parsedValues.timeValue,
287
+ providedZoneValue: parsedValues.zoneValue
288
+ });
289
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
290
+ datePickerPropsWithSelectProps.onChange(newDateValue);
291
+ }
292
+ };
293
+ var onTimeChange = function onTimeChange(newTimeValue) {
294
+ var parsedValues = parseValue(dtState.value, dtState.dateValue, newTimeValue, dtState.zoneValue);
295
+ onValueChange({
296
+ providedDateValue: parsedValues.dateValue,
297
+ providedTimeValue: newTimeValue,
298
+ providedZoneValue: parsedValues.zoneValue
299
+ });
300
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
301
+ timePickerPropsWithSelectProps.onChange(newTimeValue);
302
+ }
303
+ };
304
+ var onClear = function onClear() {
305
+ var parsedValues = parseValue(dtState.value, dtState.dateValue, dtState.timeValue, dtState.zoneValue);
306
+ onValueChange({
307
+ providedDateValue: '',
308
+ providedTimeValue: '',
309
+ providedZoneValue: parsedValues.zoneValue
310
+ });
311
+ if (datePickerPropsWithSelectProps !== null && datePickerPropsWithSelectProps !== void 0 && datePickerPropsWithSelectProps.onChange) {
312
+ datePickerPropsWithSelectProps.onChange('');
313
+ }
314
+ if (timePickerPropsWithSelectProps !== null && timePickerPropsWithSelectProps !== void 0 && timePickerPropsWithSelectProps.onChange) {
315
+ timePickerPropsWithSelectProps.onChange('');
316
+ }
317
+ };
318
+ var onChangePropWithAnalytics = (0, _analyticsNext.usePlatformLeafEventHandler)(_objectSpread({
319
+ fn: onChangeProp,
320
+ action: 'selectedDate',
321
+ actionSubject: 'datePicker'
322
+ }, analyticsAttributes));
323
+ var onValueChange = function onValueChange(_ref3) {
324
+ var providedDateValue = _ref3.providedDateValue,
325
+ providedTimeValue = _ref3.providedTimeValue,
326
+ providedZoneValue = _ref3.providedZoneValue;
327
+ if (providedDateValue && providedTimeValue) {
328
+ var isoValue = (0, _formatDateTimeZoneIntoIso.formatDateTimeZoneIntoIso)(providedDateValue, providedTimeValue, providedZoneValue);
329
+ var _parseValue = parseValue(isoValue, providedDateValue, providedTimeValue, providedZoneValue),
330
+ parsedZone = _parseValue.zoneValue;
331
+ var valueWithValidZone = (0, _formatDateTimeZoneIntoIso.formatDateTimeZoneIntoIso)(providedDateValue, providedTimeValue, parsedZone);
332
+ dispatch({
333
+ type: 'APPLY',
334
+ payload: {
335
+ value: valueWithValidZone,
336
+ dateValue: providedDateValue,
337
+ timeValue: providedTimeValue,
338
+ zoneValue: parsedZone
339
+ }
340
+ });
341
+ onChangePropWithAnalytics(valueWithValidZone);
342
+ // If the date or time value was cleared when there is an existing datetime value, then clear the value.
343
+ } else if (dtState.value) {
344
+ dispatch({
345
+ type: 'APPLY',
346
+ payload: {
347
+ value: '',
348
+ dateValue: providedDateValue,
349
+ timeValue: providedTimeValue,
350
+ zoneValue: providedZoneValue
351
+ }
352
+ });
353
+ onChangePropWithAnalytics('');
354
+ } else {
355
+ dispatch({
356
+ type: 'APPLY',
357
+ payload: {
358
+ value: '',
359
+ dateValue: providedDateValue,
360
+ timeValue: providedTimeValue,
361
+ zoneValue: providedZoneValue
362
+ }
363
+ });
364
+ }
365
+ };
366
+ var datePickerSelectProps = datePickerPropsWithSelectProps.selectProps,
367
+ datePickerProps = (0, _objectWithoutProperties2.default)(datePickerPropsWithSelectProps, _excluded);
368
+ var datePickerAriaDescribedBy = datePickerProps['aria-describedby'] || ariaDescribedBy;
369
+ var datePickerLabel = datePickerProps.label || 'Date';
370
+ var mergedDatePickerSelectProps = _objectSpread(_objectSpread({}, datePickerSelectProps), {}, {
371
+ styles: (0, _select.mergeStyles)(styles, datePickerSelectProps === null || datePickerSelectProps === void 0 ? void 0 : datePickerSelectProps.styles)
372
+ });
373
+ var timePickerSelectProps = timePickerPropsWithSelectProps.selectProps,
374
+ timePickerProps = (0, _objectWithoutProperties2.default)(timePickerPropsWithSelectProps, _excluded2);
375
+ var timePickerAriaDescribedBy = timePickerProps['aria-describedby'] || ariaDescribedBy;
376
+ var timePickerLabel = timePickerProps.label || 'Time';
377
+ var mergedTimePickerSelectProps = _objectSpread(_objectSpread({}, timePickerSelectProps), {}, {
378
+ styles: (0, _select.mergeStyles)(styles, timePickerSelectProps === null || timePickerSelectProps === void 0 ? void 0 : timePickerSelectProps.styles)
379
+ });
380
+
381
+ // Render DateTimePicker's IconContainer when a value has been filled
382
+ // Don't use Date or TimePicker's because they can't be customised
383
+ var isClearable = Boolean(dtState.dateValue || dtState.timeValue);
384
+ return /*#__PURE__*/_react.default.createElement(_dateTimePickerContainer.DateTimePickerContainer, {
385
+ appearance: appearance,
386
+ isDisabled: isDisabled,
387
+ isFocused: isFocused,
388
+ isInvalid: isInvalid,
389
+ testId: testId,
390
+ innerProps: innerProps
391
+ }, /*#__PURE__*/_react.default.createElement("input", {
392
+ name: name,
393
+ type: "hidden",
394
+ value: dtState.value,
395
+ "data-testid": testId && "".concat(testId, "--input")
396
+ }), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
397
+ xcss: compiledStyles.datePickerContainerStyles
398
+ }, /*#__PURE__*/_react.default.createElement(_datePicker.default, {
399
+ appearance: appearance,
400
+ "aria-describedby": datePickerAriaDescribedBy,
401
+ autoFocus: datePickerProps.autoFocus || autoFocus,
402
+ dateFormat: datePickerProps.dateFormat,
403
+ defaultIsOpen: datePickerProps.defaultIsOpen,
404
+ defaultValue: datePickerProps.defaultValue,
405
+ disabled: datePickerProps.disabled,
406
+ disabledDateFilter: datePickerProps.disabledDateFilter,
407
+ formatDisplayLabel: datePickerProps.formatDisplayLabel,
408
+ hideIcon: datePickerProps.hideIcon || true,
409
+ icon: datePickerProps.icon,
410
+ id: datePickerProps.id || id,
411
+ innerProps: datePickerProps.innerProps,
412
+ inputLabel: datePickerProps.inputLabel,
413
+ inputLabelId: datePickerProps.inputLabelId,
414
+ isDisabled: datePickerProps.isDisabled || isDisabled,
415
+ isInvalid: datePickerProps.isInvalid || isInvalid,
416
+ isOpen: datePickerProps.isOpen,
417
+ isRequired: datePickerProps.isRequired || isRequired,
418
+ label: datePickerLabel,
419
+ locale: datePickerProps.locale || locale,
420
+ maxDate: datePickerProps.maxDate,
421
+ minDate: datePickerProps.minDate,
422
+ name: datePickerProps.name,
423
+ nextMonthLabel: datePickerProps.nextMonthLabel,
424
+ onBlur: onDateBlur,
425
+ onChange: onDateChange,
426
+ onFocus: onDateFocus,
427
+ openCalendarLabel: datePickerProps.openCalendarLabel,
428
+ parseInputValue: datePickerProps.parseInputValue,
429
+ placeholder: datePickerProps.placeholder,
430
+ previousMonthLabel: datePickerProps.previousMonthLabel,
431
+ selectProps: mergedDatePickerSelectProps,
432
+ shouldShowCalendarButton: datePickerProps.shouldShowCalendarButton,
433
+ spacing: datePickerProps.spacing || spacing,
434
+ testId: testId && "".concat(testId, "--datepicker") || datePickerProps.testId,
435
+ value: dtState.dateValue,
436
+ weekStartDay: datePickerProps.weekStartDay
437
+ })), /*#__PURE__*/_react.default.createElement(_compiled.Box, {
438
+ xcss: compiledStyles.timePickerContainerStyles
439
+ }, /*#__PURE__*/_react.default.createElement(_timePicker.default, {
440
+ appearance: timePickerProps.appearance || appearance,
441
+ "aria-describedby": timePickerAriaDescribedBy,
442
+ autoFocus: timePickerProps.autoFocus,
443
+ defaultIsOpen: timePickerProps.defaultIsOpen,
444
+ defaultValue: timePickerProps.defaultValue,
445
+ formatDisplayLabel: timePickerProps.formatDisplayLabel,
446
+ hideIcon: timePickerProps.hideIcon || true,
447
+ id: timePickerProps.id,
448
+ innerProps: timePickerProps.innerProps,
449
+ isDisabled: timePickerProps.isDisabled || isDisabled,
450
+ isInvalid: timePickerProps.isInvalid || isInvalid,
451
+ isOpen: timePickerProps.isOpen,
452
+ isRequired: timePickerProps.isRequired || isRequired,
453
+ label: timePickerLabel,
454
+ locale: timePickerProps.locale || locale,
455
+ name: timePickerProps.name,
456
+ onBlur: onTimeBlur,
457
+ onChange: onTimeChange,
458
+ onFocus: onTimeFocus,
459
+ parseInputValue: timePickerProps.parseInputValue,
460
+ placeholder: timePickerProps.placeholder,
461
+ selectProps: mergedTimePickerSelectProps,
462
+ spacing: timePickerProps.spacing || spacing,
463
+ testId: timePickerProps.testId || testId && "".concat(testId, "--timepicker"),
464
+ timeFormat: timePickerProps.timeFormat,
465
+ timeIsEditable: timePickerProps.timeIsEditable,
466
+ times: timePickerProps.times,
467
+ value: dtState.timeValue
468
+ })), isClearable && !isDisabled ? /*#__PURE__*/_react.default.createElement(_compiled.Inline, {
469
+ xcss: compiledStyles.iconContainerStyles
470
+ }, /*#__PURE__*/_react.default.createElement(_new.IconButton, {
471
+ appearance: "subtle",
472
+ label: clearControlLabel,
473
+ icon: function icon(iconProps) {
474
+ return /*#__PURE__*/_react.default.createElement(_crossCircle.default, (0, _extends2.default)({}, iconProps, {
475
+ color: "var(--ds-text-subtlest, #6B6E76)",
476
+ size: "small"
477
+ }));
478
+ },
479
+ onClick: onClear,
480
+ testId: testId && "".concat(testId, "--icon--container"),
481
+ tabIndex: -1
482
+ })) : null);
483
+ });
484
+ var _default = exports.default = DateTimePicker;
@@ -16,17 +16,20 @@ var _analyticsNext = require("@atlaskit/analytics-next");
16
16
  var _noop = _interopRequireDefault(require("@atlaskit/ds-lib/noop"));
17
17
  var _locale = require("@atlaskit/locale");
18
18
  var _select = _interopRequireWildcard(require("@atlaskit/select"));
19
- var _internal = require("../internal");
19
+ var _defaultTimes = require("../internal/default-times");
20
+ var _emptyComponent = require("../internal/empty-component");
20
21
  var _fixedLayerMenu = require("../internal/fixed-layer-menu");
21
22
  var _parseTime = _interopRequireDefault(require("../internal/parse-time"));
22
23
  var _parseTokens = require("../internal/parse-tokens");
24
+ var _placeholderDateTime = require("../internal/placeholder-date-time");
23
25
  var _singleValue = require("../internal/single-value");
24
26
  var _excluded = ["styles"];
25
27
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function _interopRequireWildcard(e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != _typeof(e) && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (var _t in e) "default" !== _t && {}.hasOwnProperty.call(e, _t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, _t)) && (i.get || i.set) ? o(f, _t, i) : f[_t] = e[_t]); return f; })(e, t); }
26
28
  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; }
27
29
  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) { (0, _defineProperty2.default)(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; } // oxlint-disable-next-line @atlassian/no-restricted-imports
28
30
  var packageName = "@atlaskit/datetime-picker";
29
- var packageVersion = "17.6.5";
31
+ var packageVersion = "17.7.0";
32
+ var defaultTimeFormat = 'h:mma';
30
33
  var menuStyles = {
31
34
  /* Need to remove default absolute positioning as that causes issues with position fixed */
32
35
  position: 'static',
@@ -102,7 +105,7 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
102
105
  _ref2$timeIsEditable = _ref2.timeIsEditable,
103
106
  timeIsEditable = _ref2$timeIsEditable === void 0 ? false : _ref2$timeIsEditable,
104
107
  _ref2$times = _ref2.times,
105
- times = _ref2$times === void 0 ? _internal.defaultTimes : _ref2$times,
108
+ times = _ref2$times === void 0 ? _defaultTimes.defaultTimes : _ref2$times,
106
109
  providedValue = _ref2.value;
107
110
  var _useState = (0, _react.useState)(null),
108
111
  _useState2 = (0, _slicedToArray2.default)(_useState, 2),
@@ -168,7 +171,7 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
168
171
  if (timeIsEditable) {
169
172
  var sanitizedInput;
170
173
  try {
171
- sanitizedInput = parseInputValue(inputValue, timeFormat || _internal.defaultTimeFormat);
174
+ sanitizedInput = parseInputValue(inputValue, timeFormat || defaultTimeFormat);
172
175
  } catch (_unused) {
173
176
  return; // do nothing, the main validation should happen in the form
174
177
  }
@@ -239,7 +242,7 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
239
242
  */
240
243
  var formatTime = function formatTime(time) {
241
244
  if (formatDisplayLabel) {
242
- return formatDisplayLabel(time, timeFormat || _internal.defaultTimeFormat);
245
+ return formatDisplayLabel(time, timeFormat || defaultTimeFormat);
243
246
  }
244
247
  var date = (0, _parseTime.default)(time);
245
248
  if (!(date instanceof Date)) {
@@ -277,11 +280,11 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
277
280
  lang: locale
278
281
  });
279
282
  var selectComponents = _objectSpread({
280
- DropdownIndicator: _internal.EmptyComponent,
283
+ DropdownIndicator: _emptyComponent.EmptyComponent,
281
284
  Menu: _fixedLayerMenu.FixedLayerMenu,
282
285
  SingleValue: SingleValue
283
286
  }, hideIcon && {
284
- ClearIndicator: _internal.EmptyComponent
287
+ ClearIndicator: _emptyComponent.EmptyComponent
285
288
  });
286
289
  var renderIconContainer = Boolean(!hideIcon && value);
287
290
 
@@ -338,7 +341,7 @@ var TimePicker = /*#__PURE__*/(0, _react.forwardRef)(function (_ref2, _ref) {
338
341
  onFocus: onFocus,
339
342
  onMenuOpen: onMenuOpen,
340
343
  onMenuClose: onMenuClose,
341
- placeholder: placeholder || l10n.formatTime(_internal.placeholderDatetime)
344
+ placeholder: placeholder || l10n.formatTime(_placeholderDateTime.placeholderDatetime)
342
345
  // @ts-ignore - Type mismatch with styles config - workaround for help-center local consumption
343
346
  ,
344
347
  styles: mergedStyles,
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _datePicker.default;
11
+ }
12
+ });
13
+ var _datePicker = _interopRequireDefault(require("../components/date-picker"));
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _dateTimePicker.default;
11
+ }
12
+ });
13
+ var _dateTimePicker = _interopRequireDefault(require("../components/date-time-picker"));
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ Object.defineProperty(exports, "default", {
8
+ enumerable: true,
9
+ get: function get() {
10
+ return _timePicker.default;
11
+ }
12
+ });
13
+ var _timePicker = _interopRequireDefault(require("../components/time-picker"));
@@ -0,0 +1 @@
1
+ "use strict";
@@ -0,0 +1,66 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.convertTo24hrTime = convertTo24hrTime;
7
+ var map24 = {
8
+ '12': '12',
9
+ '01': '13',
10
+ '02': '14',
11
+ '03': '15',
12
+ '04': '16',
13
+ '05': '17',
14
+ '06': '18',
15
+ '07': '19',
16
+ '08': '20',
17
+ '09': '21',
18
+ '10': '22',
19
+ '11': '23'
20
+ };
21
+ function formatSemi24(time) {
22
+ if (time.length === 1) {
23
+ return "0".concat(time, "00");
24
+ }
25
+ if (time.length === 2) {
26
+ return "".concat(time, "00");
27
+ }
28
+ if (time.length === 3 || time.length === 5) {
29
+ return "0".concat(time);
30
+ }
31
+ return time;
32
+ }
33
+ function checkHour(hour, meridiem) {
34
+ if (hour > '24') {
35
+ return null;
36
+ }
37
+ if (hour === '12' && meridiem === 'a') {
38
+ return '00';
39
+ }
40
+ if (hour < '12' && meridiem === 'p') {
41
+ return map24[hour];
42
+ }
43
+ return hour;
44
+ }
45
+ function checkMinuteSecond(value) {
46
+ if (value > '59') {
47
+ return null;
48
+ }
49
+ return value;
50
+ }
51
+ function convertTo24hrTime(time) {
52
+ var timeArray = time.toLowerCase().split(/(p|a)/i);
53
+ var meridiem = timeArray[1];
54
+ var semi24 = formatSemi24(timeArray[0].trim());
55
+ var hour = checkHour(semi24.substring(0, 2), meridiem);
56
+ var minute = checkMinuteSecond(semi24.substring(2, 4));
57
+ var seconds = semi24.length === 6 && checkMinuteSecond(semi24.substring(4, 6));
58
+ if (!hour || !minute) {
59
+ return null;
60
+ }
61
+ return {
62
+ hour: parseInt(hour, 10),
63
+ minute: parseInt(minute, 10),
64
+ seconds: parseInt(seconds || '0', 10) || 0
65
+ };
66
+ }