@elliemae/ds-time-picker 2.3.0-alpha.8 → 2.3.0-next.2

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 (64) hide show
  1. package/cjs/DSTimePicker.js +121 -0
  2. package/cjs/DSTimePickerMenu.js +35 -0
  3. package/cjs/PickerPanel.js +402 -0
  4. package/cjs/TimePickerDropdown.js +53 -0
  5. package/cjs/TimePickerImpl.js +175 -0
  6. package/cjs/TimePickerMenu.js +312 -0
  7. package/cjs/index.js +17 -0
  8. package/cjs/moveElementOnScroll.js +75 -0
  9. package/cjs/utils.js +38 -0
  10. package/esm/DSTimePicker.js +111 -0
  11. package/esm/DSTimePickerMenu.js +24 -0
  12. package/esm/PickerPanel.js +392 -0
  13. package/esm/TimePickerDropdown.js +45 -0
  14. package/esm/TimePickerImpl.js +165 -0
  15. package/esm/TimePickerMenu.js +301 -0
  16. package/esm/index.js +4 -0
  17. package/esm/moveElementOnScroll.js +70 -0
  18. package/esm/utils.js +31 -0
  19. package/package.json +38 -40
  20. package/types/DSTimePicker.d.ts +162 -0
  21. package/types/DSTimePickerMenu.d.ts +4 -0
  22. package/types/PickerPanel.d.ts +24 -0
  23. package/types/TimePickerDropdown.d.ts +25 -0
  24. package/types/TimePickerImpl.d.ts +35 -0
  25. package/types/TimePickerMenu.d.ts +19 -0
  26. package/types/index.d.ts +5 -0
  27. package/types/moveElementOnScroll.d.ts +13 -0
  28. package/types/utils.d.ts +8 -0
  29. package/dist/cjs/DSTimePicker.js +0 -106
  30. package/dist/cjs/DSTimePicker.js.map +0 -7
  31. package/dist/cjs/DSTimePickerMenu.js +0 -48
  32. package/dist/cjs/DSTimePickerMenu.js.map +0 -7
  33. package/dist/cjs/PickerPanel.js +0 -299
  34. package/dist/cjs/PickerPanel.js.map +0 -7
  35. package/dist/cjs/TimePickerDropdown.js +0 -74
  36. package/dist/cjs/TimePickerDropdown.js.map +0 -7
  37. package/dist/cjs/TimePickerImpl.js +0 -183
  38. package/dist/cjs/TimePickerImpl.js.map +0 -7
  39. package/dist/cjs/TimePickerMenu.js +0 -241
  40. package/dist/cjs/TimePickerMenu.js.map +0 -7
  41. package/dist/cjs/index.js +0 -40
  42. package/dist/cjs/index.js.map +0 -7
  43. package/dist/cjs/moveElementOnScroll.js +0 -93
  44. package/dist/cjs/moveElementOnScroll.js.map +0 -7
  45. package/dist/cjs/utils.js +0 -71
  46. package/dist/cjs/utils.js.map +0 -7
  47. package/dist/esm/DSTimePicker.js +0 -77
  48. package/dist/esm/DSTimePicker.js.map +0 -7
  49. package/dist/esm/DSTimePickerMenu.js +0 -19
  50. package/dist/esm/DSTimePickerMenu.js.map +0 -7
  51. package/dist/esm/PickerPanel.js +0 -270
  52. package/dist/esm/PickerPanel.js.map +0 -7
  53. package/dist/esm/TimePickerDropdown.js +0 -45
  54. package/dist/esm/TimePickerDropdown.js.map +0 -7
  55. package/dist/esm/TimePickerImpl.js +0 -154
  56. package/dist/esm/TimePickerImpl.js.map +0 -7
  57. package/dist/esm/TimePickerMenu.js +0 -212
  58. package/dist/esm/TimePickerMenu.js.map +0 -7
  59. package/dist/esm/index.js +0 -11
  60. package/dist/esm/index.js.map +0 -7
  61. package/dist/esm/moveElementOnScroll.js +0 -64
  62. package/dist/esm/moveElementOnScroll.js.map +0 -7
  63. package/dist/esm/utils.js +0 -42
  64. package/dist/esm/utils.js.map +0 -7
@@ -1,299 +0,0 @@
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);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var PickerPanel_exports = {};
29
- __export(PickerPanel_exports, {
30
- PickerPanel: () => PickerPanel,
31
- default: () => PickerPanel
32
- });
33
- var React = __toESM(require("react"));
34
- var import_react = __toESM(require("react"));
35
- var import_lodash = require("lodash");
36
- var import_ds_classnames = require("@elliemae/ds-classnames");
37
- var import_memoize_one = __toESM(require("memoize-one"));
38
- var import_ds_icons = require("@elliemae/ds-icons");
39
- var import_ds_button = require("@elliemae/ds-button");
40
- var import_moveElementOnScroll = require("./moveElementOnScroll");
41
- var import_utils = require("./utils");
42
- const blockName = "time-picker-panel";
43
- const Container = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, null, ({ scrolling }) => ({ scrolling }));
44
- const Wrapper = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "wrapper");
45
- const PickerItemListContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item-list-container");
46
- const PickerItemList = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item-list");
47
- const PickerHeader = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "header");
48
- const PickerItemContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "item", ({ selected, disabled }) => ({
49
- selected,
50
- disabled
51
- }));
52
- const PickerSelectedOptionSelected = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "selected-container");
53
- const SelectedCircle = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "selected-circle");
54
- const ArrowButtonContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "arrow-container");
55
- const getOptionIndex = (options, selectedOption, valueProperty = "value") => {
56
- const index = options.findIndex((option) => option[valueProperty] === selectedOption);
57
- return (0, import_utils.validateIndex)(index, options);
58
- };
59
- const arrowProps = {
60
- buttonType: "text",
61
- fluidHeight: true,
62
- fluidWidth: true,
63
- size: "s"
64
- };
65
- class PickerPanel extends import_react.Component {
66
- constructor(props) {
67
- super(props);
68
- this.computeContainerTranslation = (0, import_memoize_one.default)((index) => {
69
- const { options, valueProperty } = this.props;
70
- const { selectedOption, scrolling } = this.state;
71
- const selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);
72
- const listYPosition = this.minYListPosition - selectedOptionIndex * this.optionHeight;
73
- if (this.scrollHandler && !scrolling)
74
- this.scrollHandler.updatePosition(listYPosition);
75
- return listYPosition;
76
- });
77
- this.renderHeader = () => {
78
- const { header } = this.props;
79
- return /* @__PURE__ */ import_react.default.createElement(PickerHeader, null, header);
80
- };
81
- this.pickerListContainerRef = import_react.default.createRef();
82
- this.pickerListRef = import_react.default.createRef();
83
- this.pickerItemRef = import_react.default.createRef();
84
- this.selectedOptionRef = import_react.default.createRef();
85
- this.state = {
86
- selectedOption: props.selected,
87
- activeIndex: 0,
88
- prevProps: {}
89
- };
90
- }
91
- componentDidMount() {
92
- this.computeSizes();
93
- const pickerListContainerEl = this.pickerListContainerRef.current;
94
- const pickerListEl = this.pickerListRef.current;
95
- this.scrollHandler = new import_moveElementOnScroll.MoveElementOnScroll(pickerListEl, {
96
- container: pickerListContainerEl,
97
- min: -this.minYListPosition,
98
- max: this.maxYListPosition,
99
- onUpdate: (pos, delta) => {
100
- const { options } = this.props;
101
- const index = options.length - -Math.floor((pos - this.maxYListPosition) / this.optionHeight) + (delta > 0 ? 1 : -1);
102
- this.moveTo(index, true);
103
- },
104
- onEndScroll: () => {
105
- this.setState({ scrolling: false });
106
- }
107
- });
108
- this.computeContainerTranslation();
109
- }
110
- componentWillUnmount() {
111
- this.scrollHandler.unsubscribe();
112
- }
113
- static getDerivedStateFromProps(nextProps, { prevProps }) {
114
- const { selected, valueProperty, options } = nextProps;
115
- if (selected !== prevProps.selected) {
116
- return {
117
- selectedOption: selected,
118
- activeIndex: getOptionIndex(options, selected, valueProperty),
119
- prevProps: nextProps
120
- };
121
- }
122
- return null;
123
- }
124
- getOptionValue(option) {
125
- const { valueProperty } = this.props;
126
- return option[valueProperty];
127
- }
128
- getOptionLabel(option) {
129
- const { labelProperty } = this.props;
130
- return option[labelProperty];
131
- }
132
- computeSizes() {
133
- const { options, numberItemsOnScreen } = this.props;
134
- const { offsetHeight: optionHeight } = this.pickerItemRef.current;
135
- this.optionHeight = optionHeight;
136
- this.listHeight = this.optionHeight * numberItemsOnScreen;
137
- this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;
138
- this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));
139
- }
140
- handleOptionSelect(optionValue, index, scrolling) {
141
- const { onChange } = this.props;
142
- this.setState((state) => ({
143
- ...state,
144
- scrolling,
145
- selectedOption: optionValue,
146
- activeIndex: index
147
- }), () => {
148
- onChange(optionValue, index);
149
- });
150
- }
151
- handleKeyDown(e) {
152
- const { activeIndex } = this.state;
153
- const { options } = this.props;
154
- const [firstColumn, ...restColumns] = document.getElementsByClassName("em-ds-time-picker-panel");
155
- const [lastColumn] = restColumns.slice(-1);
156
- const [prev] = document.getElementsByClassName("DayPickerNavigation_button");
157
- const focusedElement = document.activeElement;
158
- switch (e.key) {
159
- case "Home":
160
- this.moveTo(0);
161
- break;
162
- case "End":
163
- this.moveTo(options.length - 1);
164
- break;
165
- case "ArrowUp":
166
- this.moveTo(activeIndex - 1);
167
- break;
168
- case "ArrowDown":
169
- this.moveTo(activeIndex + 1);
170
- break;
171
- case "Tab": {
172
- e.preventDefault();
173
- if (prev && focusedElement === lastColumn) {
174
- prev.focus();
175
- } else if (focusedElement === lastColumn) {
176
- firstColumn.focus();
177
- } else {
178
- const position = (0, import_lodash.findIndex)(restColumns, focusedElement);
179
- restColumns[position + 1].focus();
180
- }
181
- break;
182
- }
183
- default:
184
- break;
185
- }
186
- }
187
- moveTo(index, scrolling) {
188
- const { options } = this.props;
189
- const { selectedOption } = this.state;
190
- const validIndex = (0, import_utils.validateIndex)(index, options);
191
- const option = options[validIndex];
192
- const optionValue = this.getOptionValue(option);
193
- if (selectedOption !== optionValue && option.disabled !== true) {
194
- this.handleOptionSelect(optionValue, validIndex, scrolling);
195
- }
196
- }
197
- handleStepMoveUp() {
198
- const { activeIndex } = this.state;
199
- const { arrowStep, options } = this.props;
200
- const supposedPos = activeIndex - arrowStep;
201
- const nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;
202
- const nextValidOption = options.find((op) => !op.disabled);
203
- this.moveTo(nextPos, true, nextValidOption);
204
- }
205
- handleStepMoveDown() {
206
- const { activeIndex } = this.state;
207
- const { arrowStep, options } = this.props;
208
- const supposedPos = activeIndex + arrowStep;
209
- const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;
210
- this.moveTo(nextPos);
211
- }
212
- render() {
213
- const { options, hasHeader, type, time, meridiem, disabledTimes } = this.props;
214
- const { selectedOption, activeIndex, scrolling } = this.state;
215
- const listYPosition = this.computeContainerTranslation(activeIndex);
216
- return /* @__PURE__ */ import_react.default.createElement(Wrapper, null, hasHeader && this.renderHeader(), /* @__PURE__ */ import_react.default.createElement(Container, {
217
- classProps: { scrolling },
218
- onKeyDown: this.handleKeyDown,
219
- tabIndex: 0
220
- }, /* @__PURE__ */ import_react.default.createElement(PickerSelectedOptionSelected, {
221
- innerRef: this.selectedOptionRef
222
- }, /* @__PURE__ */ import_react.default.createElement(SelectedCircle, null)), /* @__PURE__ */ import_react.default.createElement(ArrowButtonContainer, null, /* @__PURE__ */ import_react.default.createElement(import_ds_button.DSButton, {
223
- ...arrowProps,
224
- "aria-label": "Chevron Up",
225
- "data-testid": `${type}-chevron-up`,
226
- disabled: activeIndex <= 0,
227
- icon: /* @__PURE__ */ import_react.default.createElement(import_ds_icons.ChevronSmallUp, null),
228
- onClick: this.handleStepMoveUp,
229
- tabIndex: -1
230
- })), /* @__PURE__ */ import_react.default.createElement(PickerItemListContainer, {
231
- innerRef: this.pickerListContainerRef,
232
- style: {
233
- height: this.listHeight
234
- }
235
- }, /* @__PURE__ */ import_react.default.createElement(PickerItemList, {
236
- "data-testid": `${type}-list`,
237
- innerRef: this.pickerListRef,
238
- style: {
239
- transform: `translateY(${listYPosition}px)`
240
- }
241
- }, options.map((option, index) => {
242
- const value = this.getOptionValue(option);
243
- const label = this.getOptionLabel(option);
244
- let valueFormatted;
245
- if (meridiem === "AM")
246
- valueFormatted = value;
247
- else if (meridiem === "PM" && value === 12)
248
- valueFormatted = value;
249
- else if (meridiem === "PM")
250
- valueFormatted = value + 12;
251
- let disabled = false;
252
- if (disabledTimes) {
253
- const { from, to } = disabledTimes;
254
- if (type === "hour" && valueFormatted >= from?.hour && valueFormatted < to?.hour || type === "minutes" && value >= from?.min && value < to?.min) {
255
- disabled = true;
256
- }
257
- if (type === "minutes" && (time?.hour() > to?.hour || time?.hour() < from?.hour)) {
258
- disabled = false;
259
- }
260
- if (label === "am" && from?.hour == 0 && to?.hour >= 12) {
261
- disabled = true;
262
- }
263
- if (label === "pm" && to?.hour == 24) {
264
- disabled = true;
265
- }
266
- }
267
- option.disabled = disabled;
268
- return /* @__PURE__ */ import_react.default.createElement(PickerItemContainer, {
269
- key: value,
270
- classProps: {
271
- selected: selectedOption ? value === selectedOption : index === 0,
272
- disabled
273
- },
274
- innerRef: this.pickerItemRef,
275
- onClick: () => {
276
- if (!disabled)
277
- this.handleOptionSelect(value, index);
278
- }
279
- }, label);
280
- }))), /* @__PURE__ */ import_react.default.createElement(ArrowButtonContainer, null, /* @__PURE__ */ import_react.default.createElement(import_ds_button.DSButton, {
281
- ...arrowProps,
282
- "aria-label": "Chevron Down",
283
- "data-testid": `${type}-chevron-down`,
284
- disabled: activeIndex >= options.length - 1,
285
- icon: /* @__PURE__ */ import_react.default.createElement(import_ds_icons.ChevronSmallDown, null),
286
- onClick: this.handleStepMoveDown,
287
- tabIndex: -1
288
- }))));
289
- }
290
- }
291
- PickerPanel.defaultProps = {
292
- valueProperty: "value",
293
- labelProperty: "label",
294
- numberItemsOnScreen: 5,
295
- options: [],
296
- arrowStep: 1
297
- };
298
- module.exports = __toCommonJS(PickerPanel_exports);
299
- //# sourceMappingURL=PickerPanel.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/PickerPanel.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable eqeqeq */\n/* eslint-disable react/prop-types */\n/* eslint-disable complexity */\n/* eslint-disable max-lines */\nimport React, { Component } from 'react';\nimport { findIndex } from 'lodash';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport memoizeOne from 'memoize-one';\nimport { ChevronSmallUp, ChevronSmallDown } from '@elliemae/ds-icons';\nimport { DSButton } from '@elliemae/ds-button';\nimport { MoveElementOnScroll } from './moveElementOnScroll';\nimport { validateIndex } from './utils';\n\nconst blockName = 'time-picker-panel';\n\nconst Container = aggregatedClasses('div')(blockName, null, ({ scrolling }) => ({ scrolling }));\nconst Wrapper = aggregatedClasses('div')(blockName, 'wrapper');\nconst PickerItemListContainer = aggregatedClasses('div')(blockName, 'item-list-container');\nconst PickerItemList = aggregatedClasses('div')(blockName, 'item-list');\nconst PickerHeader = aggregatedClasses('div')(blockName, 'header');\nconst PickerItemContainer = aggregatedClasses('div')(blockName, 'item', ({ selected, disabled }) => ({\n selected,\n disabled,\n}));\nconst PickerSelectedOptionSelected = aggregatedClasses('div')(blockName, 'selected-container');\nconst SelectedCircle = aggregatedClasses('div')(blockName, 'selected-circle');\nconst ArrowButtonContainer = aggregatedClasses('div')(blockName, 'arrow-container');\n\nconst getOptionIndex = (options, selectedOption, valueProperty = 'value') => {\n const index = options.findIndex((option) => option[valueProperty] === selectedOption);\n return validateIndex(index, options);\n};\n\nconst arrowProps = {\n buttonType: 'text',\n fluidHeight: true,\n fluidWidth: true,\n size: 's',\n};\n\nexport default class PickerPanel extends Component {\n computeContainerTranslation = memoizeOne((index) => {\n const { options, valueProperty } = this.props;\n const { selectedOption, scrolling } = this.state;\n\n const selectedOptionIndex = index || getOptionIndex(options, selectedOption, valueProperty);\n const listYPosition = this.minYListPosition - selectedOptionIndex * this.optionHeight;\n\n if (this.scrollHandler && !scrolling) this.scrollHandler.updatePosition(listYPosition);\n\n return listYPosition;\n });\n\n constructor(props) {\n super(props);\n this.pickerListContainerRef = React.createRef();\n this.pickerListRef = React.createRef();\n this.pickerItemRef = React.createRef();\n this.selectedOptionRef = React.createRef();\n\n this.state = {\n selectedOption: props.selected,\n activeIndex: 0,\n // eslint-disable-next-line react/no-unused-state\n prevProps: {},\n };\n }\n\n componentDidMount() {\n this.computeSizes();\n const pickerListContainerEl = this.pickerListContainerRef.current;\n const pickerListEl = this.pickerListRef.current;\n\n this.scrollHandler = new MoveElementOnScroll(pickerListEl, {\n container: pickerListContainerEl,\n min: -this.minYListPosition,\n max: this.maxYListPosition,\n onUpdate: (pos, delta) => {\n const { options } = this.props;\n const index =\n options.length - -Math.floor((pos - this.maxYListPosition) / this.optionHeight) + (delta > 0 ? 1 : -1);\n this.moveTo(index, true);\n },\n onEndScroll: () => {\n this.setState({ scrolling: false });\n },\n });\n this.computeContainerTranslation();\n }\n\n componentWillUnmount() {\n this.scrollHandler.unsubscribe();\n }\n\n static getDerivedStateFromProps(nextProps, { prevProps }) {\n const { selected, valueProperty, options } = nextProps;\n if (selected !== prevProps.selected) {\n return {\n selectedOption: selected,\n activeIndex: getOptionIndex(options, selected, valueProperty),\n prevProps: nextProps,\n };\n }\n return null;\n }\n\n getOptionValue(option) {\n const { valueProperty } = this.props;\n return option[valueProperty];\n }\n\n getOptionLabel(option) {\n const { labelProperty } = this.props;\n return option[labelProperty];\n }\n\n computeSizes() {\n const { options, numberItemsOnScreen } = this.props;\n const { offsetHeight: optionHeight } = this.pickerItemRef.current;\n\n this.optionHeight = optionHeight;\n this.listHeight = this.optionHeight * numberItemsOnScreen;\n\n this.minYListPosition = this.listHeight / 2 - this.optionHeight / 2;\n this.maxYListPosition = this.optionHeight * (options.length - Math.ceil(numberItemsOnScreen / 2));\n }\n\n handleOptionSelect(optionValue, index, scrolling) {\n const { onChange } = this.props;\n this.setState(\n (state) => ({\n ...state,\n scrolling,\n selectedOption: optionValue,\n activeIndex: index,\n }),\n () => {\n onChange(optionValue, index);\n },\n );\n }\n\n // TODO: this needs a refactor from de FocusGroup\n // eslint-disable-next-line max-statements\n handleKeyDown(e) {\n const { activeIndex } = this.state;\n const { options } = this.props;\n const [firstColumn, ...restColumns] = document.getElementsByClassName('em-ds-time-picker-panel');\n const [lastColumn] = restColumns.slice(-1);\n const [prev] = document.getElementsByClassName('DayPickerNavigation_button');\n const focusedElement = document.activeElement;\n\n switch (e.key) {\n case 'Home':\n this.moveTo(0);\n break;\n case 'End':\n this.moveTo(options.length - 1);\n break;\n case 'ArrowUp':\n this.moveTo(activeIndex - 1);\n break;\n case 'ArrowDown':\n this.moveTo(activeIndex + 1);\n break;\n case 'Tab': {\n e.preventDefault();\n // If it is DateTimePicker, move focus to prev arrow element\n if (prev && focusedElement === lastColumn) {\n prev.focus();\n } else if (focusedElement === lastColumn) {\n firstColumn.focus();\n } else {\n const position = findIndex(restColumns, focusedElement);\n restColumns[position + 1].focus();\n }\n break;\n }\n default:\n break;\n }\n }\n\n moveTo(index, scrolling) {\n const { options } = this.props;\n const { selectedOption } = this.state;\n const validIndex = validateIndex(index, options);\n const option = options[validIndex];\n const optionValue = this.getOptionValue(option);\n if (selectedOption !== optionValue && option.disabled !== true) {\n this.handleOptionSelect(optionValue, validIndex, scrolling);\n }\n // TO-DO: if date disabled, add nextValidOption selection\n }\n\n handleStepMoveUp() {\n const { activeIndex } = this.state;\n const { arrowStep, options } = this.props;\n const supposedPos = activeIndex - arrowStep;\n const nextPos = supposedPos >= 0 ? supposedPos : activeIndex - 1;\n\n const nextValidOption = options.find((op) => !op.disabled);\n this.moveTo(nextPos, true, nextValidOption);\n }\n\n handleStepMoveDown() {\n const { activeIndex } = this.state;\n const { arrowStep, options } = this.props;\n const supposedPos = activeIndex + arrowStep;\n const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;\n this.moveTo(nextPos);\n }\n\n renderHeader = () => {\n const { header } = this.props;\n\n return <PickerHeader>{header}</PickerHeader>;\n };\n\n render() {\n const { options, hasHeader, type, time, meridiem, disabledTimes } = this.props;\n const { selectedOption, activeIndex, scrolling } = this.state;\n\n const listYPosition = this.computeContainerTranslation(activeIndex);\n\n return (\n <Wrapper>\n {hasHeader && this.renderHeader()}\n <Container classProps={{ scrolling }} onKeyDown={this.handleKeyDown} tabIndex={0}>\n <PickerSelectedOptionSelected innerRef={this.selectedOptionRef}>\n <SelectedCircle />\n </PickerSelectedOptionSelected>\n <ArrowButtonContainer>\n <DSButton\n {...arrowProps}\n aria-label=\"Chevron Up\"\n data-testid={`${type}-chevron-up`}\n disabled={activeIndex <= 0}\n icon={<ChevronSmallUp />}\n onClick={this.handleStepMoveUp}\n tabIndex={-1}\n />\n </ArrowButtonContainer>\n <PickerItemListContainer\n innerRef={this.pickerListContainerRef}\n style={{\n height: this.listHeight,\n }}\n >\n <PickerItemList\n data-testid={`${type}-list`}\n innerRef={this.pickerListRef}\n style={{\n transform: `translateY(${listYPosition}px)`,\n }}\n >\n {options.map((option, index) => {\n const value = this.getOptionValue(option);\n const label = this.getOptionLabel(option);\n let valueFormatted;\n if (meridiem === 'AM') valueFormatted = value;\n else if (meridiem === 'PM' && value === 12) valueFormatted = value;\n else if (meridiem === 'PM') valueFormatted = value + 12;\n\n let disabled = false;\n if (disabledTimes) {\n const { from, to } = disabledTimes;\n if (\n (type === 'hour' && valueFormatted >= from?.hour && valueFormatted < to?.hour) ||\n (type === 'minutes' && value >= from?.min && value < to?.min)\n ) {\n disabled = true;\n }\n if (type === 'minutes' && (time?.hour() > to?.hour || time?.hour() < from?.hour)) {\n disabled = false;\n }\n if (label === 'am' && from?.hour == 0 && to?.hour >= 12) {\n disabled = true;\n }\n if (label === 'pm' && to?.hour == 24) {\n disabled = true;\n }\n }\n\n option.disabled = disabled;\n\n return (\n <PickerItemContainer\n key={value}\n classProps={{\n selected: selectedOption ? value === selectedOption : index === 0,\n disabled,\n }}\n innerRef={this.pickerItemRef}\n onClick={() => {\n if (!disabled) this.handleOptionSelect(value, index);\n }}\n >\n {label}\n </PickerItemContainer>\n );\n })}\n </PickerItemList>\n </PickerItemListContainer>\n <ArrowButtonContainer>\n <DSButton\n {...arrowProps}\n aria-label=\"Chevron Down\"\n data-testid={`${type}-chevron-down`}\n disabled={activeIndex >= options.length - 1}\n icon={<ChevronSmallDown />}\n onClick={this.handleStepMoveDown}\n tabIndex={-1}\n />\n </ArrowButtonContainer>\n </Container>\n </Wrapper>\n );\n }\n}\n\nPickerPanel.defaultProps = {\n valueProperty: 'value',\n labelProperty: 'label',\n numberItemsOnScreen: 5, // this number should be impair\n options: [],\n arrowStep: 1,\n};\n\nexport { PickerPanel };", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,74 +0,0 @@
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);
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 = require("@elliemae/ds-icons");
37
- var import_ds_button = require("@elliemae/ds-button");
38
- var import_ds_popper = 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
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/TimePickerDropdown.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["import React from 'react';\nimport PropTypes from 'prop-types';\nimport { RecentDocuments } from '@elliemae/ds-icons';\nimport { DSButton } from '@elliemae/ds-button';\nimport { DSPopper } from '@elliemae/ds-popper';\n\nconst TimePickerDropdown = ({ disabled = false, onClick, onOpen, isOpen, menu, zIndex, blockName, placement }) => (\n <DSPopper\n blockName={blockName}\n placement={placement}\n contentComponent={menu}\n isOpen={isOpen}\n onOpen={onOpen}\n modifiers={{\n preventOverflow: {\n enabled: true,\n padding: 0,\n boundariesElement: 'window',\n },\n }}\n showArrow={false}\n triggerComponent={\n <DSButton buttonType=\"secondary\" disabled={disabled} icon={<RecentDocuments />} iconSize=\"s\" onClick={onClick} />\n }\n zIndex={zIndex}\n />\n);\n\nTimePickerDropdown.propTypes = {\n onClick: PropTypes.func,\n onOpen: PropTypes.func,\n disabled: PropTypes.bool,\n isOpen: PropTypes.bool,\n menu: PropTypes.element,\n blockName: PropTypes.string,\n placement: PropTypes.string,\n zIndex: PropTypes.number,\n};\n\nexport { TimePickerDropdown };\nexport default TimePickerDropdown;\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAvB,mBAAkB;AAClB,wBAAsB;AACtB,sBAAgC;AAChC,uBAAyB;AACzB,uBAAyB;AAEzB,MAAM,qBAAqB,CAAC,EAAE,WAAW,OAAO,SAAS,QAAQ,QAAQ,MAAM,QAAQ,WAAW,gBAChG,mDAAC,2BAAD;AAAA,EACE;AAAA,EACA;AAAA,EACA,kBAAkB;AAAA,EAClB;AAAA,EACA;AAAA,EACA,WAAW;AAAA,IACT,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,SAAS;AAAA,MACT,mBAAmB;AAAA;AAAA;AAAA,EAGvB,WAAW;AAAA,EACX,kBACE,mDAAC,2BAAD;AAAA,IAAU,YAAW;AAAA,IAAY;AAAA,IAAoB,MAAM,mDAAC,iCAAD;AAAA,IAAqB,UAAS;AAAA,IAAI;AAAA;AAAA,EAE/F;AAAA;AAIJ,mBAAmB,YAAY;AAAA,EAC7B,SAAS,0BAAU;AAAA,EACnB,QAAQ,0BAAU;AAAA,EAClB,UAAU,0BAAU;AAAA,EACpB,QAAQ,0BAAU;AAAA,EAClB,MAAM,0BAAU;AAAA,EAChB,WAAW,0BAAU;AAAA,EACrB,WAAW,0BAAU;AAAA,EACrB,QAAQ,0BAAU;AAAA;AAIpB,IAAO,6BAAQ;",
6
- "names": []
7
- }
@@ -1,183 +0,0 @@
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);
26
- };
27
- })(typeof WeakMap !== "undefined" ? /* @__PURE__ */ new WeakMap() : 0);
28
- var TimePickerImpl_exports = {};
29
- __export(TimePickerImpl_exports, {
30
- TimePickerImpl: () => TimePickerImpl,
31
- default: () => TimePickerImpl_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_moment = __toESM(require("moment"));
37
- var import_memoize_one = __toESM(require("memoize-one"));
38
- var import_ds_utilities = require("@elliemae/ds-utilities");
39
- var import_ds_classnames = require("@elliemae/ds-classnames");
40
- var import_ds_form = require("@elliemae/ds-form");
41
- var import_TimePickerMenu = require("./TimePickerMenu");
42
- var import_TimePickerDropdown = require("./TimePickerDropdown");
43
- var import_utils = 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);
72
- }, [value]);
73
- (0, import_react.useEffect)(() => {
74
- window.addEventListener("click", handleClickOutside, false);
75
- return () => window.removeEventListener("click", handleClickOutside, false);
76
- }, []);
77
- (0, import_react.useEffect)(() => {
78
- window.addEventListener("keydown", handleKeyDown, false);
79
- return () => window.removeEventListener("keydown", handleKeyDown, false);
80
- }, []);
81
- (0, import_react.useEffect)(() => {
82
- if (isMenuOpened)
83
- handleChangeFocus();
84
- }, [isMenuOpened]);
85
- const handleClickOutside = () => {
86
- if (isMenuOpened)
87
- setIsMenuOpened(false);
88
- };
89
- const handleKeyDown = (event) => {
90
- const { key } = event;
91
- const menuOpenKeys = ["Escape", " ", "Enter"];
92
- if (menuOpenKeys.includes(key))
93
- setIsMenuOpened(false);
94
- };
95
- const handleChangeFocus = () => {
96
- const [firstColumn] = document.getElementsByClassName("em-ds-time-picker-panel");
97
- if (firstColumn && !focusedColumn) {
98
- setFocusedColumn(firstColumn);
99
- firstColumn.focus();
100
- }
101
- };
102
- const handlePickerChange = (newTime) => {
103
- setTime((0, import_moment.default)(newTime));
104
- onChange((0, import_moment.default)(newTime));
105
- };
106
- const handleInputChange = (newTime) => {
107
- setTime(newTime);
108
- onChange(newTime);
109
- };
110
- const handleMenuOpen = (isOpen) => {
111
- onOpen(isOpen);
112
- setIsMenuOpened(isOpen);
113
- if (!isOpen)
114
- setFocusedColumn(null);
115
- };
116
- const getVisibleTimePanels = (0, import_memoize_one.default)((format2) => (0, import_ds_utilities.getVisibleTimeByFormat)(format2));
117
- const timePickerBlockName = (0, import_ds_classnames.convertPropToCssClassName)(blockName);
118
- const visiblePanels = getVisibleTimePanels(format);
119
- const disabledTimeRange = disabledTimes && {
120
- from: (0, import_utils.convertTimeString)(disabledTimes.from),
121
- to: (0, import_utils.convertTimeString)(disabledTimes.to)
122
- };
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, {
128
- blockName: timePickerBlockName,
129
- disabled,
130
- isOpen: isMenuOpened,
131
- zIndex,
132
- placement,
133
- onOpen: handleMenuOpen,
134
- onClick: (e) => {
135
- e.preventDefault();
136
- handleMenuOpen(!isMenuOpened);
137
- },
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
- }))
151
- })
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
- }),
160
- isShowElipsisActive: false,
161
- disabled,
162
- onChange: handleInputChange,
163
- value: time
164
- }));
165
- };
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
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/TimePickerImpl.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
- "sourcesContent": ["/* eslint-disable max-lines */\n/* eslint-disable no-shadow */\nimport React, { useState, useEffect, useRef } from 'react';\nimport PropTypes from 'prop-types';\nimport moment from 'moment';\nimport memoizeOne from 'memoize-one';\nimport { getVisibleTimeByFormat } from '@elliemae/ds-utilities';\nimport { aggregatedClasses, convertPropToCssClassName } from '@elliemae/ds-classnames';\nimport { DSInput, DSInputGroup, TimeInputImpl } from '@elliemae/ds-form';\nimport { TimePickerMenu } from './TimePickerMenu';\nimport { TimePickerDropdown } from './TimePickerDropdown';\nimport { convertTimeString } from './utils';\n\nconst blockName = 'time-picker';\n\nconst TimePickerContainer = aggregatedClasses(DSInputGroup)(blockName, null, ({ isMenuOpened }) => ({\n isMenuOpened,\n}));\n\nconst TimePickerImpl = ({\n value,\n onChange,\n onOpen,\n format,\n disabled,\n hasHeader,\n hasHeaderDisplay,\n className,\n containerProps,\n placement,\n zIndex,\n disabledTimes,\n minutesInterval,\n}) => {\n const [time, setTime] = useState();\n const [isMenuOpened, setIsMenuOpened] = useState(false);\n const [focusedColumn, setFocusedColumn] = useState(null);\n const timePickerRef = useRef();\n useEffect(() => {\n if (moment(value).isValid()) setTime(moment(value));\n else if (value === null) setTime(undefined);\n }, [value]);\n\n useEffect(() => {\n window.addEventListener('click', handleClickOutside, false);\n return () => window.removeEventListener('click', handleClickOutside, false);\n }, []);\n\n useEffect(() => {\n window.addEventListener('keydown', handleKeyDown, false);\n return () => window.removeEventListener('keydown', handleKeyDown, false);\n }, []);\n\n useEffect(() => {\n if (isMenuOpened) handleChangeFocus();\n }, [isMenuOpened]);\n\n const handleClickOutside = () => {\n if (isMenuOpened) setIsMenuOpened(false);\n };\n\n const handleKeyDown = (event) => {\n const { key } = event;\n const menuOpenKeys = ['Escape', ' ', 'Enter'];\n if (menuOpenKeys.includes(key)) setIsMenuOpened(false);\n };\n\n const handleChangeFocus = () => {\n const [firstColumn] = document.getElementsByClassName('em-ds-time-picker-panel');\n if (firstColumn && !focusedColumn) {\n setFocusedColumn(firstColumn);\n firstColumn.focus();\n }\n };\n\n const handlePickerChange = (newTime) => {\n setTime(moment(newTime));\n onChange(moment(newTime));\n };\n\n const handleInputChange = (newTime) => {\n setTime(newTime);\n onChange(newTime);\n };\n\n const handleMenuOpen = (isOpen) => {\n onOpen(isOpen);\n setIsMenuOpened(isOpen);\n if (!isOpen) setFocusedColumn(null);\n };\n\n const getVisibleTimePanels = memoizeOne((format) => getVisibleTimeByFormat(format));\n const timePickerBlockName = convertPropToCssClassName(blockName);\n const visiblePanels = getVisibleTimePanels(format);\n\n const disabledTimeRange = disabledTimes && {\n from: convertTimeString(disabledTimes.from),\n to: convertTimeString(disabledTimes.to),\n };\n\n return (\n <TimePickerContainer\n className={`${className} variant-${!disabled ? 'default' : 'disabled'}`}\n containerProps={containerProps}\n disabled={disabled}\n rightAddon={\n <TimePickerDropdown\n blockName={timePickerBlockName}\n disabled={disabled}\n isOpen={isMenuOpened}\n zIndex={zIndex}\n placement={placement}\n onOpen={handleMenuOpen}\n onClick={(e) => {\n e.preventDefault();\n handleMenuOpen(!isMenuOpened);\n }}\n menu={\n <div ref={timePickerRef}>\n <TimePickerMenu\n disabled={disabled}\n disabledTimes={disabledTimeRange}\n format={format}\n hasHeader={hasHeader}\n hasHeaderDisplay={hasHeaderDisplay}\n onTimeChange={handlePickerChange}\n minutesInterval={minutesInterval}\n time={time}\n {...visiblePanels}\n />\n </div>\n }\n />\n }\n >\n <DSInput\n customInputType={({ onChange: handleChange, ...restInputProps }) => (\n <TimeInputImpl clearable disabled={disabled} format={format} onChange={handleChange} {...restInputProps} />\n )}\n isShowElipsisActive={false}\n disabled={disabled}\n onChange={handleInputChange}\n value={time}\n />\n </TimePickerContainer>\n );\n};\n\nTimePickerImpl.propTypes = {\n value: PropTypes.instanceOf(Date, moment),\n onChange: PropTypes.func,\n onOpen: PropTypes.func,\n format: PropTypes.string,\n disabled: PropTypes.bool,\n hasHeader: PropTypes.bool,\n hasHeaderDisplay: PropTypes.bool,\n className: PropTypes.string,\n containerProps: PropTypes.object,\n placement: PropTypes.string,\n zIndex: PropTypes.number,\n disabledTimes: PropTypes.object,\n minutesInterval: PropTypes.number,\n};\n\nexport { TimePickerImpl };\nexport default TimePickerImpl;\n", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": "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",
6
- "names": []
7
- }