@elliemae/ds-time-picker 2.2.0-alpha.2 → 2.2.0-next.1

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 (40) hide show
  1. package/cjs/DSTimePicker.js +115 -100
  2. package/cjs/DSTimePickerMenu.js +33 -46
  3. package/cjs/PickerPanel.js +254 -151
  4. package/cjs/TimePickerDropdown.js +52 -73
  5. package/cjs/TimePickerImpl.js +138 -146
  6. package/cjs/TimePickerMenu.js +209 -138
  7. package/cjs/index.js +17 -40
  8. package/cjs/moveElementOnScroll.js +39 -57
  9. package/cjs/utils.js +24 -57
  10. package/esm/DSTimePicker.js +105 -71
  11. package/esm/DSTimePickerMenu.js +22 -17
  12. package/esm/PickerPanel.js +242 -120
  13. package/esm/TimePickerDropdown.js +44 -44
  14. package/esm/TimePickerImpl.js +117 -106
  15. package/esm/TimePickerMenu.js +191 -102
  16. package/esm/index.js +4 -11
  17. package/esm/moveElementOnScroll.js +34 -28
  18. package/esm/utils.js +17 -28
  19. package/package.json +7 -7
  20. package/types/PickerPanel.d.ts +0 -1
  21. package/types/TimePickerDropdown.d.ts +0 -1
  22. package/types/TimePickerImpl.d.ts +0 -1
  23. package/cjs/DSTimePicker.js.map +0 -7
  24. package/cjs/DSTimePickerMenu.js.map +0 -7
  25. package/cjs/PickerPanel.js.map +0 -7
  26. package/cjs/TimePickerDropdown.js.map +0 -7
  27. package/cjs/TimePickerImpl.js.map +0 -7
  28. package/cjs/TimePickerMenu.js.map +0 -7
  29. package/cjs/index.js.map +0 -7
  30. package/cjs/moveElementOnScroll.js.map +0 -7
  31. package/cjs/utils.js.map +0 -7
  32. package/esm/DSTimePicker.js.map +0 -7
  33. package/esm/DSTimePickerMenu.js.map +0 -7
  34. package/esm/PickerPanel.js.map +0 -7
  35. package/esm/TimePickerDropdown.js.map +0 -7
  36. package/esm/TimePickerImpl.js.map +0 -7
  37. package/esm/TimePickerMenu.js.map +0 -7
  38. package/esm/index.js.map +0 -7
  39. package/esm/moveElementOnScroll.js.map +0 -7
  40. package/esm/utils.js.map +0 -7
@@ -1,74 +1,53 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
1
+ 'use strict';
2
+
3
+ var _jsx = require('@babel/runtime/helpers/jsx');
4
+ require('react');
5
+ var dsIcons = require('@elliemae/ds-icons');
6
+ var DSButton = require('@elliemae/ds-button');
7
+ var DSPopper = require('@elliemae/ds-popper');
8
+
9
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
10
+
11
+ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
12
+ var DSButton__default = /*#__PURE__*/_interopDefaultLegacy(DSButton);
13
+ var DSPopper__default = /*#__PURE__*/_interopDefaultLegacy(DSPopper);
14
+
15
+ var _RecentDocuments;
16
+
17
+ const TimePickerDropdown = _ref => {
18
+ let {
19
+ disabled = false,
20
+ onClick,
21
+ onOpen,
22
+ isOpen,
23
+ menu,
24
+ zIndex,
25
+ blockName,
26
+ placement
27
+ } = _ref;
28
+ return /*#__PURE__*/_jsx__default["default"](DSPopper__default["default"], {
29
+ blockName: blockName,
30
+ placement: placement,
31
+ contentComponent: menu,
32
+ isOpen: isOpen,
33
+ onOpen: onOpen,
34
+ modifiers: {
35
+ preventOverflow: {
36
+ enabled: true,
37
+ padding: 0,
38
+ boundariesElement: 'window'
39
+ }
40
+ },
41
+ showArrow: false,
42
+ triggerComponent: /*#__PURE__*/_jsx__default["default"](DSButton__default["default"], {
43
+ buttonType: "secondary",
44
+ disabled: disabled,
45
+ icon: _RecentDocuments || (_RecentDocuments = /*#__PURE__*/_jsx__default["default"](dsIcons.RecentDocuments, {})),
46
+ iconSize: "s",
47
+ onClick: onClick
48
+ }),
49
+ zIndex: zIndex
50
+ });
11
51
  };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
- }
18
- return target;
19
- };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var TimePickerDropdown_exports = {};
29
- __export(TimePickerDropdown_exports, {
30
- TimePickerDropdown: () => TimePickerDropdown,
31
- default: () => TimePickerDropdown_default
32
- });
33
- var React = __toESM(require("react"));
34
- var import_react = __toESM(require("react"));
35
- var import_prop_types = __toESM(require("prop-types"));
36
- var import_ds_icons = __toESM(require("@elliemae/ds-icons"));
37
- var import_ds_button = __toESM(require("@elliemae/ds-button"));
38
- var import_ds_popper = __toESM(require("@elliemae/ds-popper"));
39
- const TimePickerDropdown = ({ disabled = false, onClick, onOpen, isOpen, menu, zIndex, blockName, placement }) => /* @__PURE__ */ import_react.default.createElement(import_ds_popper.DSPopper, {
40
- blockName,
41
- placement,
42
- contentComponent: menu,
43
- isOpen,
44
- onOpen,
45
- modifiers: {
46
- preventOverflow: {
47
- enabled: true,
48
- padding: 0,
49
- boundariesElement: "window"
50
- }
51
- },
52
- showArrow: false,
53
- triggerComponent: /* @__PURE__ */ import_react.default.createElement(import_ds_button.DSButton, {
54
- buttonType: "secondary",
55
- disabled,
56
- icon: /* @__PURE__ */ import_react.default.createElement(import_ds_icons.RecentDocuments, null),
57
- iconSize: "s",
58
- onClick
59
- }),
60
- zIndex
61
- });
62
- TimePickerDropdown.propTypes = {
63
- onClick: import_prop_types.default.func,
64
- onOpen: import_prop_types.default.func,
65
- disabled: import_prop_types.default.bool,
66
- isOpen: import_prop_types.default.bool,
67
- menu: import_prop_types.default.element,
68
- blockName: import_prop_types.default.string,
69
- placement: import_prop_types.default.string,
70
- zIndex: import_prop_types.default.number
71
- };
72
- var TimePickerDropdown_default = TimePickerDropdown;
73
- module.exports = __toCommonJS(TimePickerDropdown_exports);
74
- //# sourceMappingURL=TimePickerDropdown.js.map
52
+
53
+ module.exports = TimePickerDropdown;
@@ -1,183 +1,175 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __markAsModule = (target) => __defProp(target, "__esModule", { value: true });
8
- var __export = (target, all) => {
9
- for (var name in all)
10
- __defProp(target, name, { get: all[name], enumerable: true });
11
- };
12
- var __reExport = (target, module2, copyDefault, desc) => {
13
- if (module2 && typeof module2 === "object" || typeof module2 === "function") {
14
- for (let key of __getOwnPropNames(module2))
15
- if (!__hasOwnProp.call(target, key) && (copyDefault || key !== "default"))
16
- __defProp(target, key, { get: () => module2[key], enumerable: !(desc = __getOwnPropDesc(module2, key)) || desc.enumerable });
17
- }
18
- return target;
19
- };
20
- var __toESM = (module2, isNodeMode) => {
21
- return __reExport(__markAsModule(__defProp(module2 != null ? __create(__getProtoOf(module2)) : {}, "default", !isNodeMode && module2 && module2.__esModule ? { get: () => module2.default, enumerable: true } : { value: module2, enumerable: true })), module2);
22
- };
23
- var __toCommonJS = /* @__PURE__ */ ((cache) => {
24
- return (module2, temp) => {
25
- return cache && cache.get(module2) || (temp = __reExport(__markAsModule({}), module2, 1), cache && cache.set(module2, temp), temp);
1
+ 'use strict';
2
+
3
+ var _objectWithoutProperties = require('@babel/runtime/helpers/objectWithoutProperties');
4
+ var _jsx = require('@babel/runtime/helpers/jsx');
5
+ var _defineProperty = require('@babel/runtime/helpers/defineProperty');
6
+ require('core-js/modules/web.dom-collections.iterator.js');
7
+ require('core-js/modules/esnext.async-iterator.filter.js');
8
+ require('core-js/modules/esnext.iterator.constructor.js');
9
+ require('core-js/modules/esnext.iterator.filter.js');
10
+ require('core-js/modules/esnext.async-iterator.for-each.js');
11
+ require('core-js/modules/esnext.iterator.for-each.js');
12
+ var React = require('react');
13
+ var moment = require('moment');
14
+ var memoizeOne = require('memoize-one');
15
+ var dsUtilities = require('@elliemae/ds-utilities');
16
+ var dsClassnames = require('@elliemae/ds-classnames');
17
+ var dsForm = require('@elliemae/ds-form');
18
+ var TimePickerMenu = require('./TimePickerMenu.js');
19
+ var TimePickerDropdown = require('./TimePickerDropdown.js');
20
+ var utils = require('./utils.js');
21
+ var jsxRuntime = require('react/jsx-runtime');
22
+
23
+ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
24
+
25
+ var _objectWithoutProperties__default = /*#__PURE__*/_interopDefaultLegacy(_objectWithoutProperties);
26
+ var _jsx__default = /*#__PURE__*/_interopDefaultLegacy(_jsx);
27
+ var _defineProperty__default = /*#__PURE__*/_interopDefaultLegacy(_defineProperty);
28
+ var moment__default = /*#__PURE__*/_interopDefaultLegacy(moment);
29
+ var memoizeOne__default = /*#__PURE__*/_interopDefaultLegacy(memoizeOne);
30
+
31
+ const _excluded = ["onChange"];
32
+
33
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
34
+
35
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty__default["default"](target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
36
+ const blockName = 'time-picker';
37
+ const TimePickerContainer = dsClassnames.aggregatedClasses(dsForm.DSInputGroup)(blockName, null, _ref => {
38
+ let {
39
+ isMenuOpened
40
+ } = _ref;
41
+ return {
42
+ isMenuOpened
26
43
  };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var TimePickerImpl_exports = {};
29
- __export(TimePickerImpl_exports, {
30
- TimePickerImpl: () => TimePickerImpl,
31
- default: () => TimePickerImpl_default
32
44
  });
33
- var React = __toESM(require("react"));
34
- var import_react = __toESM(require("react"));
35
- var import_prop_types = __toESM(require("prop-types"));
36
- var import_moment = __toESM(require("moment"));
37
- var import_memoize_one = __toESM(require("memoize-one"));
38
- var import_ds_utilities = __toESM(require("@elliemae/ds-utilities"));
39
- var import_ds_classnames = __toESM(require("@elliemae/ds-classnames"));
40
- var import_ds_form = __toESM(require("@elliemae/ds-form"));
41
- var import_TimePickerMenu = __toESM(require("./TimePickerMenu"));
42
- var import_TimePickerDropdown = __toESM(require("./TimePickerDropdown"));
43
- var import_utils = __toESM(require("./utils"));
44
- const blockName = "time-picker";
45
- const TimePickerContainer = (0, import_ds_classnames.aggregatedClasses)(import_ds_form.DSInputGroup)(blockName, null, ({ isMenuOpened }) => ({
46
- isMenuOpened
47
- }));
48
- const TimePickerImpl = ({
49
- value,
50
- onChange,
51
- onOpen,
52
- format,
53
- disabled,
54
- hasHeader,
55
- hasHeaderDisplay,
56
- className,
57
- containerProps,
58
- placement,
59
- zIndex,
60
- disabledTimes,
61
- minutesInterval
62
- }) => {
63
- const [time, setTime] = (0, import_react.useState)();
64
- const [isMenuOpened, setIsMenuOpened] = (0, import_react.useState)(false);
65
- const [focusedColumn, setFocusedColumn] = (0, import_react.useState)(null);
66
- const timePickerRef = (0, import_react.useRef)();
67
- (0, import_react.useEffect)(() => {
68
- if ((0, import_moment.default)(value).isValid())
69
- setTime((0, import_moment.default)(value));
70
- else if (value === null)
71
- setTime(void 0);
45
+
46
+ const TimePickerImpl = _ref2 => {
47
+ let {
48
+ value,
49
+ onChange,
50
+ onOpen,
51
+ format,
52
+ disabled,
53
+ hasHeader,
54
+ hasHeaderDisplay,
55
+ className,
56
+ containerProps,
57
+ placement,
58
+ zIndex,
59
+ disabledTimes,
60
+ minutesInterval
61
+ } = _ref2;
62
+ const [time, setTime] = React.useState();
63
+ const [isMenuOpened, setIsMenuOpened] = React.useState(false);
64
+ const [focusedColumn, setFocusedColumn] = React.useState(null);
65
+ const timePickerRef = React.useRef();
66
+ React.useEffect(() => {
67
+ if (moment__default["default"](value).isValid()) setTime(moment__default["default"](value));else if (value === null) setTime(undefined);
72
68
  }, [value]);
73
- (0, import_react.useEffect)(() => {
74
- window.addEventListener("click", handleClickOutside, false);
75
- return () => window.removeEventListener("click", handleClickOutside, false);
69
+ React.useEffect(() => {
70
+ window.addEventListener('click', handleClickOutside, false);
71
+ return () => window.removeEventListener('click', handleClickOutside, false);
76
72
  }, []);
77
- (0, import_react.useEffect)(() => {
78
- window.addEventListener("keydown", handleKeyDown, false);
79
- return () => window.removeEventListener("keydown", handleKeyDown, false);
73
+ React.useEffect(() => {
74
+ window.addEventListener('keydown', handleKeyDown, false);
75
+ return () => window.removeEventListener('keydown', handleKeyDown, false);
80
76
  }, []);
81
- (0, import_react.useEffect)(() => {
82
- if (isMenuOpened)
83
- handleChangeFocus();
77
+ React.useEffect(() => {
78
+ if (isMenuOpened) handleChangeFocus();
84
79
  }, [isMenuOpened]);
80
+
85
81
  const handleClickOutside = () => {
86
- if (isMenuOpened)
87
- setIsMenuOpened(false);
82
+ if (isMenuOpened) setIsMenuOpened(false);
88
83
  };
89
- const handleKeyDown = (event) => {
90
- const { key } = event;
91
- const menuOpenKeys = ["Escape", " ", "Enter"];
92
- if (menuOpenKeys.includes(key))
93
- setIsMenuOpened(false);
84
+
85
+ const handleKeyDown = event => {
86
+ const {
87
+ key
88
+ } = event;
89
+ const menuOpenKeys = ['Escape', ' ', 'Enter'];
90
+ if (menuOpenKeys.includes(key)) setIsMenuOpened(false);
94
91
  };
92
+
95
93
  const handleChangeFocus = () => {
96
- const [firstColumn] = document.getElementsByClassName("em-ds-time-picker-panel");
94
+ const [firstColumn] = document.getElementsByClassName('em-ds-time-picker-panel');
95
+
97
96
  if (firstColumn && !focusedColumn) {
98
97
  setFocusedColumn(firstColumn);
99
98
  firstColumn.focus();
100
99
  }
101
100
  };
102
- const handlePickerChange = (newTime) => {
103
- setTime((0, import_moment.default)(newTime));
104
- onChange((0, import_moment.default)(newTime));
101
+
102
+ const handlePickerChange = newTime => {
103
+ setTime(moment__default["default"](newTime));
104
+ onChange(moment__default["default"](newTime));
105
105
  };
106
- const handleInputChange = (newTime) => {
106
+
107
+ const handleInputChange = newTime => {
107
108
  setTime(newTime);
108
109
  onChange(newTime);
109
110
  };
110
- const handleMenuOpen = (isOpen) => {
111
+
112
+ const handleMenuOpen = isOpen => {
111
113
  onOpen(isOpen);
112
114
  setIsMenuOpened(isOpen);
113
- if (!isOpen)
114
- setFocusedColumn(null);
115
+ if (!isOpen) setFocusedColumn(null);
115
116
  };
116
- const getVisibleTimePanels = (0, import_memoize_one.default)((format2) => (0, import_ds_utilities.getVisibleTimeByFormat)(format2));
117
- const timePickerBlockName = (0, import_ds_classnames.convertPropToCssClassName)(blockName);
117
+
118
+ const getVisibleTimePanels = memoizeOne__default["default"](format => dsUtilities.getVisibleTimeByFormat(format));
119
+ const timePickerBlockName = dsClassnames.convertPropToCssClassName(blockName);
118
120
  const visiblePanels = getVisibleTimePanels(format);
119
121
  const disabledTimeRange = disabledTimes && {
120
- from: (0, import_utils.convertTimeString)(disabledTimes.from),
121
- to: (0, import_utils.convertTimeString)(disabledTimes.to)
122
+ from: utils.convertTimeString(disabledTimes.from),
123
+ to: utils.convertTimeString(disabledTimes.to)
122
124
  };
123
- return /* @__PURE__ */ import_react.default.createElement(TimePickerContainer, {
124
- className: `${className} variant-${!disabled ? "default" : "disabled"}`,
125
- containerProps,
126
- disabled,
127
- rightAddon: /* @__PURE__ */ import_react.default.createElement(import_TimePickerDropdown.TimePickerDropdown, {
125
+ return /*#__PURE__*/_jsx__default["default"](TimePickerContainer, {
126
+ className: "".concat(className, " variant-").concat(!disabled ? 'default' : 'disabled'),
127
+ containerProps: containerProps,
128
+ disabled: disabled,
129
+ rightAddon: /*#__PURE__*/_jsx__default["default"](TimePickerDropdown, {
128
130
  blockName: timePickerBlockName,
129
- disabled,
131
+ disabled: disabled,
130
132
  isOpen: isMenuOpened,
131
- zIndex,
132
- placement,
133
+ zIndex: zIndex,
134
+ placement: placement,
133
135
  onOpen: handleMenuOpen,
134
- onClick: (e) => {
136
+ onClick: e => {
135
137
  e.preventDefault();
136
138
  handleMenuOpen(!isMenuOpened);
137
139
  },
138
- menu: /* @__PURE__ */ import_react.default.createElement("div", {
139
- ref: timePickerRef
140
- }, /* @__PURE__ */ import_react.default.createElement(import_TimePickerMenu.TimePickerMenu, {
141
- disabled,
142
- disabledTimes: disabledTimeRange,
143
- format,
144
- hasHeader,
145
- hasHeaderDisplay,
146
- onTimeChange: handlePickerChange,
147
- minutesInterval,
148
- time,
149
- ...visiblePanels
150
- }))
140
+ menu: /*#__PURE__*/jsxRuntime.jsx("div", {
141
+ ref: timePickerRef,
142
+ children: /*#__PURE__*/jsxRuntime.jsx(TimePickerMenu.TimePickerMenu, _objectSpread({
143
+ disabled: disabled,
144
+ disabledTimes: disabledTimeRange,
145
+ format: format,
146
+ hasHeader: hasHeader,
147
+ hasHeaderDisplay: hasHeaderDisplay,
148
+ onTimeChange: handlePickerChange,
149
+ minutesInterval: minutesInterval,
150
+ time: time
151
+ }, visiblePanels))
152
+ })
151
153
  })
152
- }, /* @__PURE__ */ import_react.default.createElement(import_ds_form.DSInput, {
153
- customInputType: ({ onChange: handleChange, ...restInputProps }) => /* @__PURE__ */ import_react.default.createElement(import_ds_form.TimeInputImpl, {
154
- clearable: true,
155
- disabled,
156
- format,
157
- onChange: handleChange,
158
- ...restInputProps
159
- }),
154
+ }, void 0, /*#__PURE__*/_jsx__default["default"](dsForm.DSInput, {
155
+ customInputType: _ref3 => {
156
+ let {
157
+ onChange: handleChange
158
+ } = _ref3,
159
+ restInputProps = _objectWithoutProperties__default["default"](_ref3, _excluded);
160
+
161
+ return /*#__PURE__*/jsxRuntime.jsx(dsForm.TimeInputImpl, _objectSpread({
162
+ clearable: true,
163
+ disabled: disabled,
164
+ format: format,
165
+ onChange: handleChange
166
+ }, restInputProps));
167
+ },
160
168
  isShowElipsisActive: false,
161
- disabled,
169
+ disabled: disabled,
162
170
  onChange: handleInputChange,
163
171
  value: time
164
172
  }));
165
173
  };
166
- TimePickerImpl.propTypes = {
167
- value: import_prop_types.default.instanceOf(Date, import_moment.default),
168
- onChange: import_prop_types.default.func,
169
- onOpen: import_prop_types.default.func,
170
- format: import_prop_types.default.string,
171
- disabled: import_prop_types.default.bool,
172
- hasHeader: import_prop_types.default.bool,
173
- hasHeaderDisplay: import_prop_types.default.bool,
174
- className: import_prop_types.default.string,
175
- containerProps: import_prop_types.default.object,
176
- placement: import_prop_types.default.string,
177
- zIndex: import_prop_types.default.number,
178
- disabledTimes: import_prop_types.default.object,
179
- minutesInterval: import_prop_types.default.number
180
- };
181
- var TimePickerImpl_default = TimePickerImpl;
182
- module.exports = __toCommonJS(TimePickerImpl_exports);
183
- //# sourceMappingURL=TimePickerImpl.js.map
174
+
175
+ module.exports = TimePickerImpl;