@elliemae/ds-time-picker 3.0.0-next.39 → 3.0.0-next.42
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.
- package/dist/cjs/DSTimePicker.js +2 -2
- package/dist/cjs/DSTimePicker.js.map +2 -2
- package/dist/cjs/DSTimePickerMenu.js +2 -2
- package/dist/cjs/DSTimePickerMenu.js.map +2 -2
- package/dist/cjs/PickerPanel.js +49 -40
- package/dist/cjs/PickerPanel.js.map +2 -2
- package/dist/cjs/TimePickerDropdown.js +4 -5
- package/dist/cjs/TimePickerDropdown.js.map +2 -2
- package/dist/cjs/TimePickerImpl.js +4 -5
- package/dist/cjs/TimePickerImpl.js.map +2 -2
- package/dist/cjs/TimePickerMenu.js +113 -103
- package/dist/cjs/TimePickerMenu.js.map +2 -2
- package/dist/esm/DSTimePicker.js +1 -1
- package/dist/esm/DSTimePicker.js.map +1 -1
- package/dist/esm/DSTimePickerMenu.js +1 -1
- package/dist/esm/DSTimePickerMenu.js.map +1 -1
- package/dist/esm/PickerPanel.js +49 -40
- package/dist/esm/PickerPanel.js.map +2 -2
- package/dist/esm/TimePickerDropdown.js +2 -3
- package/dist/esm/TimePickerDropdown.js.map +2 -2
- package/dist/esm/TimePickerImpl.js +2 -3
- package/dist/esm/TimePickerImpl.js.map +2 -2
- package/dist/esm/TimePickerMenu.js +111 -101
- package/dist/esm/TimePickerMenu.js.map +2 -2
- package/package.json +7 -7
|
@@ -54,7 +54,7 @@ var import_ds_classnames = require("@elliemae/ds-classnames");
|
|
|
54
54
|
var import_moment = __toESM(require("moment"));
|
|
55
55
|
var import_ds_utilities = require("@elliemae/ds-utilities");
|
|
56
56
|
var import_utils = require("./utils");
|
|
57
|
-
var import_PickerPanel = require("./PickerPanel");
|
|
57
|
+
var import_PickerPanel = __toESM(require("./PickerPanel"));
|
|
58
58
|
const blockName = "time-picker-menu";
|
|
59
59
|
const TimePickerContainer = (0, import_ds_classnames.aggregatedClasses)("div")(blockName);
|
|
60
60
|
const TimePickerHeader = (0, import_ds_classnames.aggregatedClasses)("div")(blockName, "header");
|
|
@@ -66,106 +66,6 @@ const generateOption = (format) => (option) => ({
|
|
|
66
66
|
class TimePickerMenu extends import_react.Component {
|
|
67
67
|
constructor(props) {
|
|
68
68
|
super(props);
|
|
69
|
-
this.handleMinuteChange = (value) => {
|
|
70
|
-
const { time } = this.state;
|
|
71
|
-
this.updateTime(time.minute(value));
|
|
72
|
-
};
|
|
73
|
-
this.handleHoursChange = (value) => {
|
|
74
|
-
const { time } = this.state;
|
|
75
|
-
const { use12Hours } = this.props;
|
|
76
|
-
let nextHour = value;
|
|
77
|
-
if (use12Hours) {
|
|
78
|
-
if (!(0, import_utils.isAM)(time)) {
|
|
79
|
-
nextHour = value % 12 + 12;
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
this.updateTime(time.hour(nextHour));
|
|
83
|
-
};
|
|
84
|
-
this.handleSecondsChange = (value) => {
|
|
85
|
-
const { time } = this.state;
|
|
86
|
-
this.updateTime(time.second(value));
|
|
87
|
-
};
|
|
88
|
-
this.handleAMPMChange = (value) => {
|
|
89
|
-
const { time } = this.state;
|
|
90
|
-
const hour = time.hour();
|
|
91
|
-
const nextHour = value.toLowerCase() === "am" ? hour % 12 : hour % 12 + 12;
|
|
92
|
-
this.updateTime(time.hour(nextHour));
|
|
93
|
-
};
|
|
94
|
-
this.updateTime = (time) => {
|
|
95
|
-
const { onTimeChange } = this.props;
|
|
96
|
-
onTimeChange(time);
|
|
97
|
-
this.setState({ time });
|
|
98
|
-
};
|
|
99
|
-
this.renderHoursPanel = () => {
|
|
100
|
-
const { time } = this.state;
|
|
101
|
-
const { showHours, use12Hours, format, hasHeader, disabledTimes } = this.props;
|
|
102
|
-
if (!showHours)
|
|
103
|
-
return null;
|
|
104
|
-
const hour = time.hour();
|
|
105
|
-
let selectedHour = use12Hours ? hour % 12 || 12 : hour;
|
|
106
|
-
if (disabledTimes) {
|
|
107
|
-
const { from, to } = disabledTimes;
|
|
108
|
-
if (hour > from.hour && hour < to.hour) {
|
|
109
|
-
if (to.hour < 24) {
|
|
110
|
-
const toFormatted = to.hour % 12 || 12;
|
|
111
|
-
if (selectedHour !== toFormatted)
|
|
112
|
-
this.handleHoursChange(toFormatted);
|
|
113
|
-
selectedHour = toFormatted;
|
|
114
|
-
} else if (from) {
|
|
115
|
-
selectedHour = (from.hour - 1) % 12 || 12;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
}
|
|
119
|
-
const meridiem = hour >= 12 ? "PM" : "AM";
|
|
120
|
-
const withLeadingZeros = format.indexOf("hh") > -1;
|
|
121
|
-
const rangeHours = use12Hours ? (0, import_ds_utilities.range)(1, 13) : (0, import_ds_utilities.range)(24);
|
|
122
|
-
const hoursOptions = rangeHours.map(generateOption(withLeadingZeros && (0, import_ds_utilities.addLeadingZeros)(2)));
|
|
123
|
-
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.PickerPanel, {
|
|
124
|
-
type: "hour",
|
|
125
|
-
time,
|
|
126
|
-
meridiem,
|
|
127
|
-
hasHeader,
|
|
128
|
-
header: "H",
|
|
129
|
-
onChange: this.handleHoursChange,
|
|
130
|
-
options: hoursOptions,
|
|
131
|
-
selected: selectedHour,
|
|
132
|
-
disabledTimes
|
|
133
|
-
});
|
|
134
|
-
};
|
|
135
|
-
this.renderMinutesPanel = () => {
|
|
136
|
-
const { time } = this.state;
|
|
137
|
-
const { showMinutes, format, hasHeader, disabledTimes, minutesInterval } = this.props;
|
|
138
|
-
if (!showMinutes)
|
|
139
|
-
return null;
|
|
140
|
-
const withLeadingZeros = format.indexOf("mm") > -1;
|
|
141
|
-
const rangeMinutes = (0, import_ds_utilities.range)(0, 60, minutesInterval).map(generateOption(withLeadingZeros && (0, import_ds_utilities.addLeadingZeros)(2)));
|
|
142
|
-
let selectedMinute = time.minute();
|
|
143
|
-
const selectedHour = time.hour();
|
|
144
|
-
if (disabledTimes) {
|
|
145
|
-
const { from, to } = disabledTimes;
|
|
146
|
-
if (selectedHour <= to.hour && selectedHour > from.hour) {
|
|
147
|
-
if (to) {
|
|
148
|
-
if (selectedMinute < to.min)
|
|
149
|
-
this.handleMinuteChange(to.min);
|
|
150
|
-
} else if (from) {
|
|
151
|
-
if (selectedMinute > from.min)
|
|
152
|
-
this.handleMinuteChange(from.min - 1);
|
|
153
|
-
}
|
|
154
|
-
} else {
|
|
155
|
-
selectedMinute = time.minute();
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.PickerPanel, {
|
|
159
|
-
type: "minutes",
|
|
160
|
-
time,
|
|
161
|
-
hasHeader,
|
|
162
|
-
header: "M",
|
|
163
|
-
onChange: this.handleMinuteChange,
|
|
164
|
-
options: rangeMinutes,
|
|
165
|
-
selected: selectedMinute,
|
|
166
|
-
disabledTimes
|
|
167
|
-
});
|
|
168
|
-
};
|
|
169
69
|
this.renderHeader = () => {
|
|
170
70
|
const { time } = this.state;
|
|
171
71
|
return /* @__PURE__ */ import_react.default.createElement(TimePickerHeader, null, time.format("hh:mma"));
|
|
@@ -173,6 +73,16 @@ class TimePickerMenu extends import_react.Component {
|
|
|
173
73
|
this.state = {
|
|
174
74
|
time: (0, import_moment.default)(props.time || "", props.format) || (0, import_moment.default)()
|
|
175
75
|
};
|
|
76
|
+
this.handleMinuteChange = this.handleMinuteChange.bind(this);
|
|
77
|
+
this.handleHoursChange = this.handleHoursChange.bind(this);
|
|
78
|
+
this.handleSecondsChange = this.handleSecondsChange.bind(this);
|
|
79
|
+
this.handleAMPMChange = this.handleAMPMChange.bind(this);
|
|
80
|
+
this.updateTime = this.updateTime.bind(this);
|
|
81
|
+
this.renderHoursPanel = this.renderHoursPanel.bind(this);
|
|
82
|
+
this.renderMinutesPanel = this.renderMinutesPanel.bind(this);
|
|
83
|
+
this.renderSecondsPanel = this.renderSecondsPanel.bind(this);
|
|
84
|
+
this.renderAMPMPanel = this.renderAMPMPanel.bind(this);
|
|
85
|
+
this.renderHeader = this.renderHeader.bind(this);
|
|
176
86
|
}
|
|
177
87
|
static getDerivedStateFromProps(props, state) {
|
|
178
88
|
if (props.time) {
|
|
@@ -184,6 +94,106 @@ class TimePickerMenu extends import_react.Component {
|
|
|
184
94
|
const { time } = this.state;
|
|
185
95
|
this.setState({ time });
|
|
186
96
|
}
|
|
97
|
+
handleMinuteChange(value) {
|
|
98
|
+
const { time } = this.state;
|
|
99
|
+
this.updateTime(time.minute(value));
|
|
100
|
+
}
|
|
101
|
+
handleHoursChange(value) {
|
|
102
|
+
const { time } = this.state;
|
|
103
|
+
const { use12Hours } = this.props;
|
|
104
|
+
let nextHour = value;
|
|
105
|
+
if (use12Hours) {
|
|
106
|
+
if (!(0, import_utils.isAM)(time)) {
|
|
107
|
+
nextHour = value % 12 + 12;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
this.updateTime(time.hour(nextHour));
|
|
111
|
+
}
|
|
112
|
+
handleSecondsChange(value) {
|
|
113
|
+
const { time } = this.state;
|
|
114
|
+
this.updateTime(time.second(value));
|
|
115
|
+
}
|
|
116
|
+
handleAMPMChange(value) {
|
|
117
|
+
const { time } = this.state;
|
|
118
|
+
const hour = time.hour();
|
|
119
|
+
const nextHour = value.toLowerCase() === "am" ? hour % 12 : hour % 12 + 12;
|
|
120
|
+
this.updateTime(time.hour(nextHour));
|
|
121
|
+
}
|
|
122
|
+
updateTime(time) {
|
|
123
|
+
const { onTimeChange } = this.props;
|
|
124
|
+
onTimeChange(time);
|
|
125
|
+
this.setState({ time });
|
|
126
|
+
}
|
|
127
|
+
renderHoursPanel() {
|
|
128
|
+
const { time } = this.state;
|
|
129
|
+
const { showHours, use12Hours, format, hasHeader, disabledTimes } = this.props;
|
|
130
|
+
if (!showHours)
|
|
131
|
+
return null;
|
|
132
|
+
const hour = time.hour();
|
|
133
|
+
let selectedHour = use12Hours ? hour % 12 || 12 : hour;
|
|
134
|
+
if (disabledTimes) {
|
|
135
|
+
const { from, to } = disabledTimes;
|
|
136
|
+
if (hour > from.hour && hour < to.hour) {
|
|
137
|
+
if (to.hour < 24) {
|
|
138
|
+
const toFormatted = to.hour % 12 || 12;
|
|
139
|
+
if (selectedHour !== toFormatted)
|
|
140
|
+
this.handleHoursChange(toFormatted);
|
|
141
|
+
selectedHour = toFormatted;
|
|
142
|
+
} else if (from) {
|
|
143
|
+
selectedHour = (from.hour - 1) % 12 || 12;
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
const meridiem = hour >= 12 ? "PM" : "AM";
|
|
148
|
+
const withLeadingZeros = format.indexOf("hh") > -1;
|
|
149
|
+
const rangeHours = use12Hours ? (0, import_ds_utilities.range)(1, 13) : (0, import_ds_utilities.range)(24);
|
|
150
|
+
const hoursOptions = rangeHours.map(generateOption(withLeadingZeros && (0, import_ds_utilities.addLeadingZeros)(2)));
|
|
151
|
+
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.default, {
|
|
152
|
+
type: "hour",
|
|
153
|
+
time,
|
|
154
|
+
meridiem,
|
|
155
|
+
hasHeader,
|
|
156
|
+
header: "H",
|
|
157
|
+
onChange: this.handleHoursChange,
|
|
158
|
+
options: hoursOptions,
|
|
159
|
+
selected: selectedHour,
|
|
160
|
+
disabledTimes
|
|
161
|
+
});
|
|
162
|
+
}
|
|
163
|
+
renderMinutesPanel() {
|
|
164
|
+
const { time } = this.state;
|
|
165
|
+
const { showMinutes, format, hasHeader, disabledTimes, minutesInterval } = this.props;
|
|
166
|
+
if (!showMinutes)
|
|
167
|
+
return null;
|
|
168
|
+
const withLeadingZeros = format.indexOf("mm") > -1;
|
|
169
|
+
const rangeMinutes = (0, import_ds_utilities.range)(0, 60, minutesInterval).map(generateOption(withLeadingZeros && (0, import_ds_utilities.addLeadingZeros)(2)));
|
|
170
|
+
let selectedMinute = time.minute();
|
|
171
|
+
const selectedHour = time.hour();
|
|
172
|
+
if (disabledTimes) {
|
|
173
|
+
const { from, to } = disabledTimes;
|
|
174
|
+
if (selectedHour <= to.hour && selectedHour > from.hour) {
|
|
175
|
+
if (to) {
|
|
176
|
+
if (selectedMinute < to.min)
|
|
177
|
+
this.handleMinuteChange(to.min);
|
|
178
|
+
} else if (from) {
|
|
179
|
+
if (selectedMinute > from.min)
|
|
180
|
+
this.handleMinuteChange(from.min - 1);
|
|
181
|
+
}
|
|
182
|
+
} else {
|
|
183
|
+
selectedMinute = time.minute();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.default, {
|
|
187
|
+
type: "minutes",
|
|
188
|
+
time,
|
|
189
|
+
hasHeader,
|
|
190
|
+
header: "M",
|
|
191
|
+
onChange: this.handleMinuteChange,
|
|
192
|
+
options: rangeMinutes,
|
|
193
|
+
selected: selectedMinute,
|
|
194
|
+
disabledTimes
|
|
195
|
+
});
|
|
196
|
+
}
|
|
187
197
|
renderSecondsPanel() {
|
|
188
198
|
const { time } = this.state;
|
|
189
199
|
const { showSeconds, format, hasHeader } = this.props;
|
|
@@ -191,7 +201,7 @@ class TimePickerMenu extends import_react.Component {
|
|
|
191
201
|
return null;
|
|
192
202
|
const withLeadingZeros = format.indexOf("ss") > -1;
|
|
193
203
|
const rangeSeconds = (0, import_ds_utilities.range)(60).map(generateOption(withLeadingZeros && (0, import_ds_utilities.addLeadingZeros)(2)));
|
|
194
|
-
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.
|
|
204
|
+
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.default, {
|
|
195
205
|
type: "seconds",
|
|
196
206
|
hasHeader,
|
|
197
207
|
header: "S",
|
|
@@ -215,7 +225,7 @@ class TimePickerMenu extends import_react.Component {
|
|
|
215
225
|
this.handleAMPMChange("pm");
|
|
216
226
|
}
|
|
217
227
|
}
|
|
218
|
-
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.
|
|
228
|
+
return /* @__PURE__ */ import_react.default.createElement(import_PickerPanel.default, {
|
|
219
229
|
type: "meridiem",
|
|
220
230
|
hasHeader,
|
|
221
231
|
header: "",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/TimePickerMenu.tsx", "../../../../scripts/build/transpile/react-shim.js"],
|
|
4
|
-
"sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport moment from 'moment';\nimport { range, addLeadingZeros } from '@elliemae/ds-utilities';\nimport { isAM } from './utils';\nimport
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADGvB,mBAAiC;AACjC,wBAAsB;AACtB,2BAAkC;AAClC,oBAAmB;AACnB,0BAAuC;AACvC,mBAAqB;AACrB,
|
|
4
|
+
"sourcesContent": ["/* eslint-disable complexity */\n/* eslint-disable max-lines */\n/* eslint-disable react/prop-types */\nimport React, { Component } from 'react';\nimport PropTypes from 'prop-types';\nimport { aggregatedClasses } from '@elliemae/ds-classnames';\nimport moment from 'moment';\nimport { range, addLeadingZeros } from '@elliemae/ds-utilities';\nimport { isAM } from './utils';\nimport PickerPanel from './PickerPanel';\n\nconst blockName = 'time-picker-menu';\n\nconst TimePickerContainer = aggregatedClasses('div')(blockName);\nconst TimePickerHeader = aggregatedClasses('div')(blockName, 'header');\nconst TimePickerPanelContainer = aggregatedClasses('div')(blockName, 'panel-container');\n\nconst generateOption = (format) => (option) => ({\n value: option,\n label: typeof format === 'function' ? format(option) : option,\n});\n\nclass TimePickerMenu extends Component {\n constructor(props) {\n super(props);\n this.state = {\n time: moment(props.time || '', props.format) || moment(),\n };\n\n this.handleMinuteChange = this.handleMinuteChange.bind(this);\n this.handleHoursChange = this.handleHoursChange.bind(this);\n this.handleSecondsChange = this.handleSecondsChange.bind(this);\n this.handleAMPMChange = this.handleAMPMChange.bind(this);\n this.updateTime = this.updateTime.bind(this);\n this.renderHoursPanel = this.renderHoursPanel.bind(this);\n this.renderMinutesPanel = this.renderMinutesPanel.bind(this);\n this.renderSecondsPanel = this.renderSecondsPanel.bind(this);\n this.renderAMPMPanel = this.renderAMPMPanel.bind(this);\n this.renderHeader = this.renderHeader.bind(this);\n }\n\n static getDerivedStateFromProps(props, state) {\n if (props.time) {\n return { ...state, time: moment(props.time) };\n }\n return { ...state, time: undefined };\n }\n\n componentDidMount() {\n const { time } = this.state;\n this.setState({ time });\n }\n\n handleMinuteChange(value) {\n const { time } = this.state;\n this.updateTime(time.minute(value));\n }\n\n handleHoursChange(value) {\n const { time } = this.state;\n const { use12Hours } = this.props;\n let nextHour = value;\n if (use12Hours) {\n if (!isAM(time)) {\n nextHour = (value % 12) + 12;\n }\n }\n this.updateTime(time.hour(nextHour));\n }\n\n handleSecondsChange(value) {\n const { time } = this.state;\n this.updateTime(time.second(value));\n }\n\n handleAMPMChange(value) {\n const { time } = this.state;\n const hour = time.hour();\n const nextHour = value.toLowerCase() === 'am' ? hour % 12 : (hour % 12) + 12;\n this.updateTime(time.hour(nextHour));\n }\n\n updateTime(time) {\n const { onTimeChange } = this.props;\n onTimeChange(time);\n this.setState({ time });\n }\n\n renderHoursPanel() {\n const { time } = this.state;\n const { showHours, use12Hours, format, hasHeader, disabledTimes } = this.props;\n if (!showHours) return null;\n\n const hour = time.hour(); // in 24 format\n let selectedHour = use12Hours ? hour % 12 || 12 : hour;\n if (disabledTimes) {\n const { from, to } = disabledTimes;\n if (hour > from.hour && hour < to.hour) {\n if (to.hour < 24) {\n const toFormatted = to.hour % 12 || 12;\n if (selectedHour !== toFormatted) this.handleHoursChange(toFormatted);\n selectedHour = toFormatted;\n } else if (from) {\n selectedHour = (from.hour - 1) % 12 || 12;\n }\n }\n }\n\n const meridiem = hour >= 12 ? 'PM' : 'AM';\n const withLeadingZeros = format.indexOf('hh') > -1;\n const rangeHours = use12Hours ? range(1, 13) : range(24);\n const hoursOptions = rangeHours.map(generateOption(withLeadingZeros && addLeadingZeros(2)));\n return (\n <PickerPanel\n type=\"hour\"\n time={time}\n meridiem={meridiem}\n hasHeader={hasHeader}\n header=\"H\"\n onChange={this.handleHoursChange}\n options={hoursOptions}\n selected={selectedHour}\n disabledTimes={disabledTimes}\n />\n );\n }\n\n renderMinutesPanel() {\n const { time } = this.state;\n const { showMinutes, format, hasHeader, disabledTimes, minutesInterval } = this.props;\n if (!showMinutes) return null;\n const withLeadingZeros = format.indexOf('mm') > -1;\n const rangeMinutes = range(0, 60, minutesInterval).map(generateOption(withLeadingZeros && addLeadingZeros(2)));\n\n let selectedMinute = time.minute();\n const selectedHour = time.hour();\n\n if (disabledTimes) {\n const { from, to } = disabledTimes;\n if (selectedHour <= to.hour && selectedHour > from.hour) {\n if (to) {\n if (selectedMinute < to.min) this.handleMinuteChange(to.min);\n } else if (from) {\n if (selectedMinute > from.min) this.handleMinuteChange(from.min - 1);\n }\n } else {\n selectedMinute = time.minute();\n }\n }\n\n return (\n <PickerPanel\n type=\"minutes\"\n time={time}\n hasHeader={hasHeader}\n header=\"M\"\n onChange={this.handleMinuteChange}\n options={rangeMinutes}\n selected={selectedMinute}\n disabledTimes={disabledTimes}\n />\n );\n }\n\n renderSecondsPanel() {\n const { time } = this.state;\n const { showSeconds, format, hasHeader } = this.props;\n if (!showSeconds) return null;\n const withLeadingZeros = format.indexOf('ss') > -1;\n const rangeSeconds = range(60).map(generateOption(withLeadingZeros && addLeadingZeros(2)));\n return (\n <PickerPanel\n type=\"seconds\"\n hasHeader={hasHeader}\n header=\"S\"\n onChange={this.handleSecondsChange}\n options={rangeSeconds}\n selected={time.second()}\n />\n );\n }\n\n renderAMPMPanel() {\n const { time } = this.state;\n const { use12Hours, hasHeader, disabledTimes } = this.props;\n if (!use12Hours) return null;\n\n let meridiemSelected = !isAM(time) ? 'pm' : 'am';\n if (disabledTimes && disabledTimes.to && meridiemSelected === 'am') {\n meridiemSelected = disabledTimes.to.hour >= 12 ? 'pm' : 'am';\n if (meridiemSelected === 'am' && time.hour() > 12) {\n this.handleAMPMChange('am');\n }\n\n if (meridiemSelected === 'pm' && time.hour() <= 12) {\n this.handleAMPMChange('pm');\n }\n }\n\n return (\n <PickerPanel\n type=\"meridiem\"\n hasHeader={hasHeader}\n header=\"\"\n onChange={this.handleAMPMChange}\n options={[\n { value: 'am', label: 'am' },\n { value: 'pm', label: 'pm' },\n ]}\n selected={meridiemSelected}\n disabledTimes={disabledTimes}\n />\n );\n }\n\n renderHeader = () => {\n const { time } = this.state;\n return <TimePickerHeader>{time.format('hh:mma')}</TimePickerHeader>;\n };\n\n render() {\n const { hasHeaderDisplay } = this.props;\n\n return (\n <TimePickerContainer>\n {hasHeaderDisplay && this.renderHeader()}\n <TimePickerPanelContainer>\n {this.renderHoursPanel()}\n {this.renderMinutesPanel()}\n {this.renderSecondsPanel()}\n {this.renderAMPMPanel()}\n </TimePickerPanelContainer>\n </TimePickerContainer>\n );\n }\n}\n\nTimePickerMenu.defaultProps = {\n time: moment(),\n hasHeader: false,\n use12Hours: true,\n showSeconds: true,\n showMinutes: true,\n showHours: true,\n disabledTimes: undefined,\n onTimeChange: () => null,\n};\n\nTimePickerMenu.propTypes = {\n /** Time value */\n time: PropTypes.instanceOf(moment),\n /** If the menu has header or not */\n hasHeader: PropTypes.bool,\n /** Whether to use the 12 hours format */\n use12Hours: PropTypes.bool,\n /** Whether show 'seconds' or not */\n showSeconds: PropTypes.bool,\n /** Whether show 'minutes' or not */\n showMinutes: PropTypes.bool,\n /** Whether show 'hours' or not */\n showHours: PropTypes.bool,\n /** Handler when time changes */\n onTimeChange: PropTypes.func,\n disabledTimes: PropTypes.object,\n};\n\nexport { TimePickerMenu };\nexport default TimePickerMenu;\n", "import * as React from 'react';\nexport { React };\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/esm/DSTimePicker.js
CHANGED
|
@@ -2,7 +2,7 @@ import * as React from "react";
|
|
|
2
2
|
import React2 from "react";
|
|
3
3
|
import { PropTypes, describe } from "react-desc";
|
|
4
4
|
import Moment from "moment";
|
|
5
|
-
import
|
|
5
|
+
import TimePickerImpl from "./TimePickerImpl";
|
|
6
6
|
const DSTimePicker = ({
|
|
7
7
|
containerProps = {},
|
|
8
8
|
innerRef,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/DSTimePicker.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { PropTypes, describe } from 'react-desc';\nimport Moment from 'moment';\nimport
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { PropTypes, describe } from 'react-desc';\nimport Moment from 'moment';\nimport TimePickerImpl from './TimePickerImpl';\n\nconst DSTimePicker = ({\n containerProps = {},\n innerRef,\n className = '',\n disabled = false,\n value = '',\n format,\n style = {},\n onChange = () => null,\n onOpen = () => null,\n isOpen = undefined,\n clearable = false,\n hasHeader = true,\n hasHeaderDisplay = false,\n 'aria-label': ariaLabel,\n zIndex = 'auto',\n placement = 'bottom',\n disabledTimes,\n minutesInterval = 1,\n}) => (\n <TimePickerImpl\n ref={innerRef}\n aria-label={ariaLabel}\n className={className}\n clearable={clearable}\n containerProps={containerProps}\n disabled={disabled}\n format={format}\n hasHeader={hasHeader}\n hasHeaderDisplay={hasHeaderDisplay}\n isOpen={isOpen}\n onChange={onChange}\n onOpen={onOpen}\n placement={placement}\n style={style}\n value={value}\n zIndex={zIndex}\n minutesInterval={minutesInterval}\n disabledTimes={disabledTimes}\n />\n);\n\nDSTimePicker.defaultProps = {\n format: 'hh:mm:ss A',\n};\n\nconst props = {\n /** a11y label */\n 'aria-label': PropTypes.string.description('a11y label'),\n /** inject props to time picker wrapper */\n containerProps: PropTypes.object.description(\n 'inject props to time picker wrapper',\n ),\n /** Whether the time picker is disabled or not */\n disabled: PropTypes.bool.description(\n 'Whether the time picker is disabled or not',\n ),\n /** Time picker value */\n value: PropTypes.instanceOf(Moment).description('Time picker value'),\n /** Time format (hh:mm:ss, H:m:s) */\n format: PropTypes.string.description('Time format (hh:mm:ss, H:m:s)'),\n /** toggle header style */\n hasHeader: PropTypes.bool.description('toggle header style'),\n /** toggle header display */\n hasHeaderDisplay: PropTypes.bool.description('toggle header display'),\n /** Handler when time picker value changes */\n onChange: PropTypes.func.description(\n 'Handler when time picker value changes',\n ),\n /** Handler when the time picker menu opens */\n onOpen: PropTypes.func.description('Handler when the time picker menu opens'),\n /** Whether the time picker menu is opened or not */\n isOpen: PropTypes.bool.description(\n 'Whether the time picker menu is opened or not',\n ),\n /** ref for time picker input */\n innerRef: PropTypes.func.description('ref for time picker input'),\n /** Enable to clear the time picker value */\n clearable: PropTypes.bool.description(\n 'Enable to clear the time picker value',\n ),\n /** class for time picker */\n className: PropTypes.string.description('class for time picker'),\n /** style object */\n style: PropTypes.object.description('style object'),\n /** z index for menu */\n zIndex: PropTypes.number.description('z index for menu'),\n /** DSPopper placement */\n placement: PropTypes.string.description('DSPopper placement'),\n /** disabled time */\n disabledTimes: PropTypes.object.description('disabled time'),\n /** steps for the picker */\n minutesInterval: PropTypes.number.description('steps for the picker'),\n};\n\nDSTimePicker.propTypes = props;\nconst DSTimePickerWithSchema = describe(DSTimePicker);\nDSTimePickerWithSchema.propTypes = props;\n\nexport { DSTimePicker, DSTimePickerWithSchema };\nexport default DSTimePicker;\n"],
|
|
5
5
|
"mappings": "AAAA;ACAA;AACA;AACA;AACA;AAEA,MAAM,eAAe,CAAC;AAAA,EACpB,iBAAiB,CAAC;AAAA,EAClB;AAAA,EACA,YAAY;AAAA,EACZ,WAAW;AAAA,EACX,QAAQ;AAAA,EACR;AAAA,EACA,QAAQ,CAAC;AAAA,EACT,WAAW,MAAM;AAAA,EACjB,SAAS,MAAM;AAAA,EACf,SAAS;AAAA,EACT,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,mBAAmB;AAAA,EACnB,cAAc;AAAA,EACd,SAAS;AAAA,EACT,YAAY;AAAA,EACZ;AAAA,EACA,kBAAkB;AAAA,MAElB,qCAAC;AAAA,EACC,KAAK;AAAA,EACL,cAAY;AAAA,EACZ;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,CACF;AAGF,aAAa,eAAe;AAAA,EAC1B,QAAQ;AACV;AAEA,MAAM,QAAQ;AAAA,EAEZ,cAAc,UAAU,OAAO,YAAY,YAAY;AAAA,EAEvD,gBAAgB,UAAU,OAAO,YAC/B,qCACF;AAAA,EAEA,UAAU,UAAU,KAAK,YACvB,4CACF;AAAA,EAEA,OAAO,UAAU,WAAW,MAAM,EAAE,YAAY,mBAAmB;AAAA,EAEnE,QAAQ,UAAU,OAAO,YAAY,+BAA+B;AAAA,EAEpE,WAAW,UAAU,KAAK,YAAY,qBAAqB;AAAA,EAE3D,kBAAkB,UAAU,KAAK,YAAY,uBAAuB;AAAA,EAEpE,UAAU,UAAU,KAAK,YACvB,wCACF;AAAA,EAEA,QAAQ,UAAU,KAAK,YAAY,yCAAyC;AAAA,EAE5E,QAAQ,UAAU,KAAK,YACrB,+CACF;AAAA,EAEA,UAAU,UAAU,KAAK,YAAY,2BAA2B;AAAA,EAEhE,WAAW,UAAU,KAAK,YACxB,uCACF;AAAA,EAEA,WAAW,UAAU,OAAO,YAAY,uBAAuB;AAAA,EAE/D,OAAO,UAAU,OAAO,YAAY,cAAc;AAAA,EAElD,QAAQ,UAAU,OAAO,YAAY,kBAAkB;AAAA,EAEvD,WAAW,UAAU,OAAO,YAAY,oBAAoB;AAAA,EAE5D,eAAe,UAAU,OAAO,YAAY,eAAe;AAAA,EAE3D,iBAAiB,UAAU,OAAO,YAAY,sBAAsB;AACtE;AAEA,aAAa,YAAY;AACzB,MAAM,yBAAyB,SAAS,YAAY;AACpD,uBAAuB,YAAY;AAGnC,IAAO,uBAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -17,7 +17,7 @@ var __spreadValues = (a, b) => {
|
|
|
17
17
|
import * as React from "react";
|
|
18
18
|
import React2 from "react";
|
|
19
19
|
import styled from "styled-components";
|
|
20
|
-
import
|
|
20
|
+
import TimePickerMenu from "./TimePickerMenu";
|
|
21
21
|
const DSTimePickerMenuWrapper = styled.div`
|
|
22
22
|
display: flex;
|
|
23
23
|
height: 18.6rem;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/DSTimePickerMenu.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport styled from 'styled-components';\nimport
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport styled from 'styled-components';\nimport TimePickerMenu from './TimePickerMenu';\n\nconst DSTimePickerMenuWrapper = styled.div`\n display: flex;\n height: 18.6rem;\n`;\nfunction DSTimePickerMenu(props) {\n return (\n <DSTimePickerMenuWrapper>\n <TimePickerMenu {...props} />\n </DSTimePickerMenuWrapper>\n );\n}\nexport { DSTimePickerMenu };\nexport default DSTimePickerMenu;\n"],
|
|
5
5
|
"mappings": ";;;;;;;;;;;;;;;;AAAA;ACAA;AACA;AACA;AAEA,MAAM,0BAA0B,OAAO;AAAA;AAAA;AAAA;AAIvC,0BAA0B,OAAO;AAC/B,SACE,qCAAC,+BACC,qCAAC,mCAAmB,MAAO,CAC7B;AAEJ;AAEA,IAAO,2BAAQ;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
package/dist/esm/PickerPanel.js
CHANGED
|
@@ -61,46 +61,6 @@ class PickerPanel extends Component {
|
|
|
61
61
|
this.scrollHandler.updatePosition(listYPosition);
|
|
62
62
|
return listYPosition;
|
|
63
63
|
});
|
|
64
|
-
this.handleKeyDown = (e) => {
|
|
65
|
-
const { activeIndex } = this.state;
|
|
66
|
-
const { options } = this.props;
|
|
67
|
-
const [firstColumn, ...restColumns] = document.getElementsByClassName("em-ds-time-picker-panel");
|
|
68
|
-
const [lastColumn] = restColumns.slice(-1);
|
|
69
|
-
const [prev] = document.getElementsByClassName("DayPickerNavigation_button");
|
|
70
|
-
const focusedElement = document.activeElement;
|
|
71
|
-
switch (e.key) {
|
|
72
|
-
case "Home":
|
|
73
|
-
this.moveTo(0);
|
|
74
|
-
break;
|
|
75
|
-
case "End":
|
|
76
|
-
this.moveTo(options.length - 1);
|
|
77
|
-
break;
|
|
78
|
-
case "ArrowUp":
|
|
79
|
-
this.moveTo(activeIndex - 1);
|
|
80
|
-
break;
|
|
81
|
-
case "ArrowDown":
|
|
82
|
-
this.moveTo(activeIndex + 1);
|
|
83
|
-
break;
|
|
84
|
-
case "Tab": {
|
|
85
|
-
e.preventDefault();
|
|
86
|
-
if (prev && focusedElement === lastColumn) {
|
|
87
|
-
prev.focus();
|
|
88
|
-
} else if (focusedElement === lastColumn) {
|
|
89
|
-
firstColumn.focus();
|
|
90
|
-
} else {
|
|
91
|
-
const position = findIndex(restColumns, focusedElement);
|
|
92
|
-
restColumns[position + 1].focus();
|
|
93
|
-
}
|
|
94
|
-
break;
|
|
95
|
-
}
|
|
96
|
-
default:
|
|
97
|
-
break;
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
this.renderHeader = () => {
|
|
101
|
-
const { header } = this.props;
|
|
102
|
-
return /* @__PURE__ */ React2.createElement(PickerHeader, null, header);
|
|
103
|
-
};
|
|
104
64
|
this.pickerListContainerRef = React2.createRef();
|
|
105
65
|
this.pickerListRef = React2.createRef();
|
|
106
66
|
this.pickerItemRef = React2.createRef();
|
|
@@ -110,6 +70,15 @@ class PickerPanel extends Component {
|
|
|
110
70
|
activeIndex: 0,
|
|
111
71
|
prevProps: {}
|
|
112
72
|
};
|
|
73
|
+
this.getOptionValue = this.getOptionValue.bind(this);
|
|
74
|
+
this.getOptionLabel = this.getOptionLabel.bind(this);
|
|
75
|
+
this.computeSizes = this.computeSizes.bind(this);
|
|
76
|
+
this.handleOptionSelect = this.handleOptionSelect.bind(this);
|
|
77
|
+
this.handleKeyDown = this.handleKeyDown.bind(this);
|
|
78
|
+
this.moveTo = this.moveTo.bind(this);
|
|
79
|
+
this.handleStepMoveUp = this.handleStepMoveUp.bind(this);
|
|
80
|
+
this.handleStepMoveDown = this.handleStepMoveDown.bind(this);
|
|
81
|
+
this.renderHeader = this.renderHeader.bind(this);
|
|
113
82
|
}
|
|
114
83
|
componentDidMount() {
|
|
115
84
|
this.computeSizes();
|
|
@@ -170,6 +139,42 @@ class PickerPanel extends Component {
|
|
|
170
139
|
onChange(optionValue, index);
|
|
171
140
|
});
|
|
172
141
|
}
|
|
142
|
+
handleKeyDown(e) {
|
|
143
|
+
const { activeIndex } = this.state;
|
|
144
|
+
const { options } = this.props;
|
|
145
|
+
const [firstColumn, ...restColumns] = document.getElementsByClassName("em-ds-time-picker-panel");
|
|
146
|
+
const [lastColumn] = restColumns.slice(-1);
|
|
147
|
+
const [prev] = document.getElementsByClassName("DayPickerNavigation_button");
|
|
148
|
+
const focusedElement = document.activeElement;
|
|
149
|
+
switch (e.key) {
|
|
150
|
+
case "Home":
|
|
151
|
+
this.moveTo(0);
|
|
152
|
+
break;
|
|
153
|
+
case "End":
|
|
154
|
+
this.moveTo(options.length - 1);
|
|
155
|
+
break;
|
|
156
|
+
case "ArrowUp":
|
|
157
|
+
this.moveTo(activeIndex - 1);
|
|
158
|
+
break;
|
|
159
|
+
case "ArrowDown":
|
|
160
|
+
this.moveTo(activeIndex + 1);
|
|
161
|
+
break;
|
|
162
|
+
case "Tab": {
|
|
163
|
+
e.preventDefault();
|
|
164
|
+
if (prev && focusedElement === lastColumn) {
|
|
165
|
+
prev.focus();
|
|
166
|
+
} else if (focusedElement === lastColumn) {
|
|
167
|
+
firstColumn.focus();
|
|
168
|
+
} else {
|
|
169
|
+
const position = findIndex(restColumns, focusedElement);
|
|
170
|
+
restColumns[position + 1].focus();
|
|
171
|
+
}
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
default:
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
173
178
|
moveTo(index, scrolling) {
|
|
174
179
|
const { options } = this.props;
|
|
175
180
|
const { selectedOption } = this.state;
|
|
@@ -195,6 +200,10 @@ class PickerPanel extends Component {
|
|
|
195
200
|
const nextPos = supposedPos <= options.length ? supposedPos : activeIndex + 1;
|
|
196
201
|
this.moveTo(nextPos);
|
|
197
202
|
}
|
|
203
|
+
renderHeader() {
|
|
204
|
+
const { header } = this.props;
|
|
205
|
+
return /* @__PURE__ */ React2.createElement(PickerHeader, null, header);
|
|
206
|
+
}
|
|
198
207
|
render() {
|
|
199
208
|
const { options, hasHeader, type, time, meridiem, disabledTimes } = this.props;
|
|
200
209
|
const { selectedOption, activeIndex, scrolling } = this.state;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/PickerPanel.tsx"],
|
|
4
|
-
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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 };"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,YAAY;AAElB,MAAM,YAAY,kBAAkB,KAAK,EAAE,WAAW,MAAM,CAAC,EAAE,gBAAiB,GAAE,UAAU,EAAE;AAC9F,MAAM,UAAU,kBAAkB,KAAK,EAAE,WAAW,SAAS;AAC7D,MAAM,0BAA0B,kBAAkB,KAAK,EAAE,WAAW,qBAAqB;AACzF,MAAM,iBAAiB,kBAAkB,KAAK,EAAE,WAAW,WAAW;AACtE,MAAM,eAAe,kBAAkB,KAAK,EAAE,WAAW,QAAQ;AACjE,MAAM,sBAAsB,kBAAkB,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,UAAU,eAAgB;AAAA,EACnG;AAAA,EACA;AACF,EAAE;AACF,MAAM,+BAA+B,kBAAkB,KAAK,EAAE,WAAW,oBAAoB;AAC7F,MAAM,iBAAiB,kBAAkB,KAAK,EAAE,WAAW,iBAAiB;AAC5E,MAAM,uBAAuB,kBAAkB,KAAK,EAAE,WAAW,iBAAiB;AAElF,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAC3E,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,mBAAmB,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEA,MAAM,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,MAAM;AACR;AAEA,MAAO,oBAAkC,UAAU;AAAA,EAajD,YAAY,OAAO;AACjB,UAAM,KAAK;AAbb,uCAA8B,WAAW,CAAC,UAAU;AAClD,YAAM,EAAE,SAAS,kBAAkB,KAAK;AACxC,YAAM,EAAE,gBAAgB,cAAc,KAAK;AAE3C,YAAM,sBAAsB,SAAS,eAAe,SAAS,gBAAgB,aAAa;AAC1F,YAAM,gBAAgB,KAAK,mBAAmB,sBAAsB,KAAK;AAEzE,UAAI,KAAK,iBAAiB,CAAC;AAAW,aAAK,cAAc,eAAe,aAAa;AAErF,aAAO;AAAA,IACT,CAAC;
|
|
4
|
+
"sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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 this.getOptionValue = this.getOptionValue.bind(this);\n this.getOptionLabel = this.getOptionLabel.bind(this);\n this.computeSizes = this.computeSizes.bind(this);\n this.handleOptionSelect = this.handleOptionSelect.bind(this);\n this.handleKeyDown = this.handleKeyDown.bind(this);\n this.moveTo = this.moveTo.bind(this);\n this.handleStepMoveUp = this.handleStepMoveUp.bind(this);\n this.handleStepMoveDown = this.handleStepMoveDown.bind(this);\n this.renderHeader = this.renderHeader.bind(this);\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 };\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;ACIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA,MAAM,YAAY;AAElB,MAAM,YAAY,kBAAkB,KAAK,EAAE,WAAW,MAAM,CAAC,EAAE,gBAAiB,GAAE,UAAU,EAAE;AAC9F,MAAM,UAAU,kBAAkB,KAAK,EAAE,WAAW,SAAS;AAC7D,MAAM,0BAA0B,kBAAkB,KAAK,EAAE,WAAW,qBAAqB;AACzF,MAAM,iBAAiB,kBAAkB,KAAK,EAAE,WAAW,WAAW;AACtE,MAAM,eAAe,kBAAkB,KAAK,EAAE,WAAW,QAAQ;AACjE,MAAM,sBAAsB,kBAAkB,KAAK,EAAE,WAAW,QAAQ,CAAC,EAAE,UAAU,eAAgB;AAAA,EACnG;AAAA,EACA;AACF,EAAE;AACF,MAAM,+BAA+B,kBAAkB,KAAK,EAAE,WAAW,oBAAoB;AAC7F,MAAM,iBAAiB,kBAAkB,KAAK,EAAE,WAAW,iBAAiB;AAC5E,MAAM,uBAAuB,kBAAkB,KAAK,EAAE,WAAW,iBAAiB;AAElF,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAC3E,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,mBAAmB,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEA,MAAM,aAAa;AAAA,EACjB,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,MAAM;AACR;AAEA,MAAO,oBAAkC,UAAU;AAAA,EAajD,YAAY,OAAO;AACjB,UAAM,KAAK;AAbb,uCAA8B,WAAW,CAAC,UAAU;AAClD,YAAM,EAAE,SAAS,kBAAkB,KAAK;AACxC,YAAM,EAAE,gBAAgB,cAAc,KAAK;AAE3C,YAAM,sBAAsB,SAAS,eAAe,SAAS,gBAAgB,aAAa;AAC1F,YAAM,gBAAgB,KAAK,mBAAmB,sBAAsB,KAAK;AAEzE,UAAI,KAAK,iBAAiB,CAAC;AAAW,aAAK,cAAc,eAAe,aAAa;AAErF,aAAO;AAAA,IACT,CAAC;AAIC,SAAK,yBAAyB,OAAM,UAAU;AAC9C,SAAK,gBAAgB,OAAM,UAAU;AACrC,SAAK,gBAAgB,OAAM,UAAU;AACrC,SAAK,oBAAoB,OAAM,UAAU;AAEzC,SAAK,QAAQ;AAAA,MACX,gBAAgB,MAAM;AAAA,MACtB,aAAa;AAAA,MAEb,WAAW,CAAC;AAAA,IACd;AAEA,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,iBAAiB,KAAK,eAAe,KAAK,IAAI;AACnD,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAC/C,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,gBAAgB,KAAK,cAAc,KAAK,IAAI;AACjD,SAAK,SAAS,KAAK,OAAO,KAAK,IAAI;AACnC,SAAK,mBAAmB,KAAK,iBAAiB,KAAK,IAAI;AACvD,SAAK,qBAAqB,KAAK,mBAAmB,KAAK,IAAI;AAC3D,SAAK,eAAe,KAAK,aAAa,KAAK,IAAI;AAAA,EACjD;AAAA,EAEA,oBAAoB;AAClB,SAAK,aAAa;AAClB,UAAM,wBAAwB,KAAK,uBAAuB;AAC1D,UAAM,eAAe,KAAK,cAAc;AAExC,SAAK,gBAAgB,IAAI,oBAAoB,cAAc;AAAA,MACzD,WAAW;AAAA,MACX,KAAK,CAAC,KAAK;AAAA,MACX,KAAK,KAAK;AAAA,MACV,UAAU,CAAC,KAAK,UAAU;AACxB,cAAM,EAAE,YAAY,KAAK;AACzB,cAAM,QACJ,QAAQ,SAAS,CAAC,KAAK,MAAO,OAAM,KAAK,oBAAoB,KAAK,YAAY,IAAK,SAAQ,IAAI,IAAI;AACrG,aAAK,OAAO,OAAO,IAAI;AAAA,MACzB;AAAA,MACA,aAAa,MAAM;AACjB,aAAK,SAAS,EAAE,WAAW,MAAM,CAAC;AAAA,MACpC;AAAA,IACF,CAAC;AACD,SAAK,4BAA4B;AAAA,EACnC;AAAA,EAEA,uBAAuB;AACrB,SAAK,cAAc,YAAY;AAAA,EACjC;AAAA,SAEO,yBAAyB,WAAW,EAAE,aAAa;AACxD,UAAM,EAAE,UAAU,eAAe,YAAY;AAC7C,QAAI,aAAa,UAAU,UAAU;AACnC,aAAO;AAAA,QACL,gBAAgB;AAAA,QAChB,aAAa,eAAe,SAAS,UAAU,aAAa;AAAA,QAC5D,WAAW;AAAA,MACb;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEA,eAAe,QAAQ;AACrB,UAAM,EAAE,kBAAkB,KAAK;AAC/B,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,eAAe,QAAQ;AACrB,UAAM,EAAE,kBAAkB,KAAK;AAC/B,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,eAAe;AACb,UAAM,EAAE,SAAS,wBAAwB,KAAK;AAC9C,UAAM,EAAE,cAAc,iBAAiB,KAAK,cAAc;AAE1D,SAAK,eAAe;AACpB,SAAK,aAAa,KAAK,eAAe;AAEtC,SAAK,mBAAmB,KAAK,aAAa,IAAI,KAAK,eAAe;AAClE,SAAK,mBAAmB,KAAK,eAAgB,SAAQ,SAAS,KAAK,KAAK,sBAAsB,CAAC;AAAA,EACjG;AAAA,EAEA,mBAAmB,aAAa,OAAO,WAAW;AAChD,UAAM,EAAE,aAAa,KAAK;AAC1B,SAAK,SACH,CAAC,UAAW,iCACP,QADO;AAAA,MAEV;AAAA,MACA,gBAAgB;AAAA,MAChB,aAAa;AAAA,IACf,IACA,MAAM;AACJ,eAAS,aAAa,KAAK;AAAA,IAC7B,CACF;AAAA,EACF;AAAA,EAIA,cAAc,GAAG;AACf,UAAM,EAAE,gBAAgB,KAAK;AAC7B,UAAM,EAAE,YAAY,KAAK;AACzB,UAAM,CAAC,gBAAgB,eAAe,SAAS,uBAAuB,yBAAyB;AAC/F,UAAM,CAAC,cAAc,YAAY,MAAM,EAAE;AACzC,UAAM,CAAC,QAAQ,SAAS,uBAAuB,4BAA4B;AAC3E,UAAM,iBAAiB,SAAS;AAEhC,YAAQ,EAAE;AAAA,WACH;AACH,aAAK,OAAO,CAAC;AACb;AAAA,WACG;AACH,aAAK,OAAO,QAAQ,SAAS,CAAC;AAC9B;AAAA,WACG;AACH,aAAK,OAAO,cAAc,CAAC;AAC3B;AAAA,WACG;AACH,aAAK,OAAO,cAAc,CAAC;AAC3B;AAAA,WACG,OAAO;AACV,UAAE,eAAe;AAEjB,YAAI,QAAQ,mBAAmB,YAAY;AACzC,eAAK,MAAM;AAAA,QACb,WAAW,mBAAmB,YAAY;AACxC,sBAAY,MAAM;AAAA,QACpB,OAAO;AACL,gBAAM,WAAW,UAAU,aAAa,cAAc;AACtD,sBAAY,WAAW,GAAG,MAAM;AAAA,QAClC;AACA;AAAA,MACF;AAAA;AAEE;AAAA;AAAA,EAEN;AAAA,EAEA,OAAO,OAAO,WAAW;AACvB,UAAM,EAAE,YAAY,KAAK;AACzB,UAAM,EAAE,mBAAmB,KAAK;AAChC,UAAM,aAAa,cAAc,OAAO,OAAO;AAC/C,UAAM,SAAS,QAAQ;AACvB,UAAM,cAAc,KAAK,eAAe,MAAM;AAC9C,QAAI,mBAAmB,eAAe,OAAO,aAAa,MAAM;AAC9D,WAAK,mBAAmB,aAAa,YAAY,SAAS;AAAA,IAC5D;AAAA,EAEF;AAAA,EAEA,mBAAmB;AACjB,UAAM,EAAE,gBAAgB,KAAK;AAC7B,UAAM,EAAE,WAAW,YAAY,KAAK;AACpC,UAAM,cAAc,cAAc;AAClC,UAAM,UAAU,eAAe,IAAI,cAAc,cAAc;AAE/D,UAAM,kBAAkB,QAAQ,KAAK,CAAC,OAAO,CAAC,GAAG,QAAQ;AACzD,SAAK,OAAO,SAAS,MAAM,eAAe;AAAA,EAC5C;AAAA,EAEA,qBAAqB;AACnB,UAAM,EAAE,gBAAgB,KAAK;AAC7B,UAAM,EAAE,WAAW,YAAY,KAAK;AACpC,UAAM,cAAc,cAAc;AAClC,UAAM,UAAU,eAAe,QAAQ,SAAS,cAAc,cAAc;AAC5E,SAAK,OAAO,OAAO;AAAA,EACrB;AAAA,EAEA,eAAe;AACb,UAAM,EAAE,WAAW,KAAK;AAExB,WAAO,qCAAC,oBAAc,MAAO;AAAA,EAC/B;AAAA,EAEA,SAAS;AACP,UAAM,EAAE,SAAS,WAAW,MAAM,MAAM,UAAU,kBAAkB,KAAK;AACzE,UAAM,EAAE,gBAAgB,aAAa,cAAc,KAAK;AAExD,UAAM,gBAAgB,KAAK,4BAA4B,WAAW;AAElE,WACE,qCAAC,eACE,aAAa,KAAK,aAAa,GAChC,qCAAC;AAAA,MAAU,YAAY,EAAE,UAAU;AAAA,MAAG,WAAW,KAAK;AAAA,MAAe,UAAU;AAAA,OAC7E,qCAAC;AAAA,MAA6B,UAAU,KAAK;AAAA,OAC3C,qCAAC,oBAAe,CAClB,GACA,qCAAC,4BACC,qCAAC,2CACK,aADL;AAAA,MAEC,cAAW;AAAA,MACX,eAAa,GAAG;AAAA,MAChB,UAAU,eAAe;AAAA,MACzB,MAAM,qCAAC,oBAAe;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,UAAU;AAAA,MACZ,CACF,GACA,qCAAC;AAAA,MACC,UAAU,KAAK;AAAA,MACf,OAAO;AAAA,QACL,QAAQ,KAAK;AAAA,MACf;AAAA,OAEA,qCAAC;AAAA,MACC,eAAa,GAAG;AAAA,MAChB,UAAU,KAAK;AAAA,MACf,OAAO;AAAA,QACL,WAAW,cAAc;AAAA,MAC3B;AAAA,OAEC,QAAQ,IAAI,CAAC,QAAQ,UAAU;AAC9B,YAAM,QAAQ,KAAK,eAAe,MAAM;AACxC,YAAM,QAAQ,KAAK,eAAe,MAAM;AACxC,UAAI;AACJ,UAAI,aAAa;AAAM,yBAAiB;AAAA,eAC/B,aAAa,QAAQ,UAAU;AAAI,yBAAiB;AAAA,eACpD,aAAa;AAAM,yBAAiB,QAAQ;AAErD,UAAI,WAAW;AACf,UAAI,eAAe;AACjB,cAAM,EAAE,MAAM,OAAO;AACrB,YACG,SAAS,UAAU,kBAAkB,MAAM,QAAQ,iBAAiB,IAAI,QACxE,SAAS,aAAa,SAAS,MAAM,OAAO,QAAQ,IAAI,KACzD;AACA,qBAAW;AAAA,QACb;AACA,YAAI,SAAS,aAAc,OAAM,KAAK,IAAI,IAAI,QAAQ,MAAM,KAAK,IAAI,MAAM,OAAO;AAChF,qBAAW;AAAA,QACb;AACA,YAAI,UAAU,QAAQ,MAAM,QAAQ,KAAK,IAAI,QAAQ,IAAI;AACvD,qBAAW;AAAA,QACb;AACA,YAAI,UAAU,QAAQ,IAAI,QAAQ,IAAI;AACpC,qBAAW;AAAA,QACb;AAAA,MACF;AAEA,aAAO,WAAW;AAElB,aACE,qCAAC;AAAA,QACC,KAAK;AAAA,QACL,YAAY;AAAA,UACV,UAAU,iBAAiB,UAAU,iBAAiB,UAAU;AAAA,UAChE;AAAA,QACF;AAAA,QACA,UAAU,KAAK;AAAA,QACf,SAAS,MAAM;AACb,cAAI,CAAC;AAAU,iBAAK,mBAAmB,OAAO,KAAK;AAAA,QACrD;AAAA,SAEC,KACH;AAAA,IAEJ,CAAC,CACH,CACF,GACA,qCAAC,4BACC,qCAAC,2CACK,aADL;AAAA,MAEC,cAAW;AAAA,MACX,eAAa,GAAG;AAAA,MAChB,UAAU,eAAe,QAAQ,SAAS;AAAA,MAC1C,MAAM,qCAAC,sBAAiB;AAAA,MACxB,SAAS,KAAK;AAAA,MACd,UAAU;AAAA,MACZ,CACF,CACF,CACF;AAAA,EAEJ;AACF;AAEA,YAAY,eAAe;AAAA,EACzB,eAAe;AAAA,EACf,eAAe;AAAA,EACf,qBAAqB;AAAA,EACrB,SAAS,CAAC;AAAA,EACV,WAAW;AACb;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -2,8 +2,8 @@ import * as React from "react";
|
|
|
2
2
|
import React2 from "react";
|
|
3
3
|
import PropTypes from "prop-types";
|
|
4
4
|
import { RecentDocuments } from "@elliemae/ds-icons";
|
|
5
|
-
import
|
|
6
|
-
import
|
|
5
|
+
import DSButton from "@elliemae/ds-button";
|
|
6
|
+
import DSPopper from "@elliemae/ds-popper";
|
|
7
7
|
const TimePickerDropdown = ({ disabled = false, onClick, onOpen, isOpen, menu, zIndex, blockName, placement }) => /* @__PURE__ */ React2.createElement(DSPopper, {
|
|
8
8
|
blockName,
|
|
9
9
|
placement,
|
|
@@ -39,7 +39,6 @@ TimePickerDropdown.propTypes = {
|
|
|
39
39
|
};
|
|
40
40
|
var TimePickerDropdown_default = TimePickerDropdown;
|
|
41
41
|
export {
|
|
42
|
-
TimePickerDropdown,
|
|
43
42
|
TimePickerDropdown_default as default
|
|
44
43
|
};
|
|
45
44
|
//# sourceMappingURL=TimePickerDropdown.js.map
|