@elliemae/ds-time-picker 2.2.2-rc.1 → 2.3.0-alpha.10

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/dist/cjs/DSTimePicker.js +106 -0
  2. package/dist/cjs/DSTimePicker.js.map +7 -0
  3. package/dist/cjs/DSTimePickerMenu.js +48 -0
  4. package/dist/cjs/DSTimePickerMenu.js.map +7 -0
  5. package/dist/cjs/PickerPanel.js +299 -0
  6. package/dist/cjs/PickerPanel.js.map +7 -0
  7. package/dist/cjs/TimePickerDropdown.js +74 -0
  8. package/dist/cjs/TimePickerDropdown.js.map +7 -0
  9. package/dist/cjs/TimePickerImpl.js +183 -0
  10. package/dist/cjs/TimePickerImpl.js.map +7 -0
  11. package/dist/cjs/TimePickerMenu.js +241 -0
  12. package/dist/cjs/TimePickerMenu.js.map +7 -0
  13. package/dist/cjs/index.js +40 -0
  14. package/dist/cjs/index.js.map +7 -0
  15. package/dist/cjs/moveElementOnScroll.js +93 -0
  16. package/dist/cjs/moveElementOnScroll.js.map +7 -0
  17. package/dist/cjs/utils.js +71 -0
  18. package/dist/cjs/utils.js.map +7 -0
  19. package/dist/esm/DSTimePicker.js +77 -0
  20. package/dist/esm/DSTimePicker.js.map +7 -0
  21. package/dist/esm/DSTimePickerMenu.js +19 -0
  22. package/dist/esm/DSTimePickerMenu.js.map +7 -0
  23. package/dist/esm/PickerPanel.js +270 -0
  24. package/dist/esm/PickerPanel.js.map +7 -0
  25. package/dist/esm/TimePickerDropdown.js +45 -0
  26. package/dist/esm/TimePickerDropdown.js.map +7 -0
  27. package/dist/esm/TimePickerImpl.js +154 -0
  28. package/dist/esm/TimePickerImpl.js.map +7 -0
  29. package/dist/esm/TimePickerMenu.js +212 -0
  30. package/dist/esm/TimePickerMenu.js.map +7 -0
  31. package/dist/esm/index.js +11 -0
  32. package/dist/esm/index.js.map +7 -0
  33. package/dist/esm/moveElementOnScroll.js +64 -0
  34. package/dist/esm/moveElementOnScroll.js.map +7 -0
  35. package/dist/esm/utils.js +42 -0
  36. package/dist/esm/utils.js.map +7 -0
  37. package/{types → dist/types}/DSTimePicker.d.ts +0 -0
  38. package/{types → dist/types}/DSTimePickerMenu.d.ts +0 -0
  39. package/{types → dist/types}/PickerPanel.d.ts +1 -0
  40. package/{types → dist/types}/TimePickerDropdown.d.ts +1 -0
  41. package/{types → dist/types}/TimePickerImpl.d.ts +1 -0
  42. package/{types → dist/types}/TimePickerMenu.d.ts +0 -0
  43. package/{types → dist/types}/index.d.ts +0 -0
  44. package/{types → dist/types}/moveElementOnScroll.d.ts +0 -0
  45. package/{types → dist/types}/utils.d.ts +0 -0
  46. package/package.json +40 -38
  47. package/cjs/DSTimePicker.js +0 -121
  48. package/cjs/DSTimePickerMenu.js +0 -35
  49. package/cjs/PickerPanel.js +0 -402
  50. package/cjs/TimePickerDropdown.js +0 -53
  51. package/cjs/TimePickerImpl.js +0 -175
  52. package/cjs/TimePickerMenu.js +0 -312
  53. package/cjs/index.js +0 -17
  54. package/cjs/moveElementOnScroll.js +0 -75
  55. package/cjs/utils.js +0 -38
  56. package/esm/DSTimePicker.js +0 -111
  57. package/esm/DSTimePickerMenu.js +0 -24
  58. package/esm/PickerPanel.js +0 -392
  59. package/esm/TimePickerDropdown.js +0 -45
  60. package/esm/TimePickerImpl.js +0 -165
  61. package/esm/TimePickerMenu.js +0 -301
  62. package/esm/index.js +0 -4
  63. package/esm/moveElementOnScroll.js +0 -70
  64. package/esm/utils.js +0 -31
@@ -0,0 +1,154 @@
1
+ import * as React from "react";
2
+ import React2, { useState, useEffect, useRef } from "react";
3
+ import PropTypes from "prop-types";
4
+ import moment from "moment";
5
+ import memoizeOne from "memoize-one";
6
+ import { getVisibleTimeByFormat } from "@elliemae/ds-utilities";
7
+ import { aggregatedClasses, convertPropToCssClassName } from "@elliemae/ds-classnames";
8
+ import { DSInput, DSInputGroup, TimeInputImpl } from "@elliemae/ds-form";
9
+ import { TimePickerMenu } from "./TimePickerMenu";
10
+ import { TimePickerDropdown } from "./TimePickerDropdown";
11
+ import { convertTimeString } from "./utils";
12
+ const blockName = "time-picker";
13
+ const TimePickerContainer = aggregatedClasses(DSInputGroup)(blockName, null, ({ isMenuOpened }) => ({
14
+ isMenuOpened
15
+ }));
16
+ const TimePickerImpl = ({
17
+ value,
18
+ onChange,
19
+ onOpen,
20
+ format,
21
+ disabled,
22
+ hasHeader,
23
+ hasHeaderDisplay,
24
+ className,
25
+ containerProps,
26
+ placement,
27
+ zIndex,
28
+ disabledTimes,
29
+ minutesInterval
30
+ }) => {
31
+ const [time, setTime] = useState();
32
+ const [isMenuOpened, setIsMenuOpened] = useState(false);
33
+ const [focusedColumn, setFocusedColumn] = useState(null);
34
+ const timePickerRef = useRef();
35
+ useEffect(() => {
36
+ if (moment(value).isValid())
37
+ setTime(moment(value));
38
+ else if (value === null)
39
+ setTime(void 0);
40
+ }, [value]);
41
+ useEffect(() => {
42
+ window.addEventListener("click", handleClickOutside, false);
43
+ return () => window.removeEventListener("click", handleClickOutside, false);
44
+ }, []);
45
+ useEffect(() => {
46
+ window.addEventListener("keydown", handleKeyDown, false);
47
+ return () => window.removeEventListener("keydown", handleKeyDown, false);
48
+ }, []);
49
+ useEffect(() => {
50
+ if (isMenuOpened)
51
+ handleChangeFocus();
52
+ }, [isMenuOpened]);
53
+ const handleClickOutside = () => {
54
+ if (isMenuOpened)
55
+ setIsMenuOpened(false);
56
+ };
57
+ const handleKeyDown = (event) => {
58
+ const { key } = event;
59
+ const menuOpenKeys = ["Escape", " ", "Enter"];
60
+ if (menuOpenKeys.includes(key))
61
+ setIsMenuOpened(false);
62
+ };
63
+ const handleChangeFocus = () => {
64
+ const [firstColumn] = document.getElementsByClassName("em-ds-time-picker-panel");
65
+ if (firstColumn && !focusedColumn) {
66
+ setFocusedColumn(firstColumn);
67
+ firstColumn.focus();
68
+ }
69
+ };
70
+ const handlePickerChange = (newTime) => {
71
+ setTime(moment(newTime));
72
+ onChange(moment(newTime));
73
+ };
74
+ const handleInputChange = (newTime) => {
75
+ setTime(newTime);
76
+ onChange(newTime);
77
+ };
78
+ const handleMenuOpen = (isOpen) => {
79
+ onOpen(isOpen);
80
+ setIsMenuOpened(isOpen);
81
+ if (!isOpen)
82
+ setFocusedColumn(null);
83
+ };
84
+ const getVisibleTimePanels = memoizeOne((format2) => getVisibleTimeByFormat(format2));
85
+ const timePickerBlockName = convertPropToCssClassName(blockName);
86
+ const visiblePanels = getVisibleTimePanels(format);
87
+ const disabledTimeRange = disabledTimes && {
88
+ from: convertTimeString(disabledTimes.from),
89
+ to: convertTimeString(disabledTimes.to)
90
+ };
91
+ return /* @__PURE__ */ React2.createElement(TimePickerContainer, {
92
+ className: `${className} variant-${!disabled ? "default" : "disabled"}`,
93
+ containerProps,
94
+ disabled,
95
+ rightAddon: /* @__PURE__ */ React2.createElement(TimePickerDropdown, {
96
+ blockName: timePickerBlockName,
97
+ disabled,
98
+ isOpen: isMenuOpened,
99
+ zIndex,
100
+ placement,
101
+ onOpen: handleMenuOpen,
102
+ onClick: (e) => {
103
+ e.preventDefault();
104
+ handleMenuOpen(!isMenuOpened);
105
+ },
106
+ menu: /* @__PURE__ */ React2.createElement("div", {
107
+ ref: timePickerRef
108
+ }, /* @__PURE__ */ React2.createElement(TimePickerMenu, {
109
+ disabled,
110
+ disabledTimes: disabledTimeRange,
111
+ format,
112
+ hasHeader,
113
+ hasHeaderDisplay,
114
+ onTimeChange: handlePickerChange,
115
+ minutesInterval,
116
+ time,
117
+ ...visiblePanels
118
+ }))
119
+ })
120
+ }, /* @__PURE__ */ React2.createElement(DSInput, {
121
+ customInputType: ({ onChange: handleChange, ...restInputProps }) => /* @__PURE__ */ React2.createElement(TimeInputImpl, {
122
+ clearable: true,
123
+ disabled,
124
+ format,
125
+ onChange: handleChange,
126
+ ...restInputProps
127
+ }),
128
+ isShowElipsisActive: false,
129
+ disabled,
130
+ onChange: handleInputChange,
131
+ value: time
132
+ }));
133
+ };
134
+ TimePickerImpl.propTypes = {
135
+ value: PropTypes.instanceOf(Date, moment),
136
+ onChange: PropTypes.func,
137
+ onOpen: PropTypes.func,
138
+ format: PropTypes.string,
139
+ disabled: PropTypes.bool,
140
+ hasHeader: PropTypes.bool,
141
+ hasHeaderDisplay: PropTypes.bool,
142
+ className: PropTypes.string,
143
+ containerProps: PropTypes.object,
144
+ placement: PropTypes.string,
145
+ zIndex: PropTypes.number,
146
+ disabledTimes: PropTypes.object,
147
+ minutesInterval: PropTypes.number
148
+ };
149
+ var TimePickerImpl_default = TimePickerImpl;
150
+ export {
151
+ TimePickerImpl,
152
+ TimePickerImpl_default as default
153
+ };
154
+ //# sourceMappingURL=TimePickerImpl.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/TimePickerImpl.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,212 @@
1
+ import * as React from "react";
2
+ import React2, { Component } from "react";
3
+ import PropTypes from "prop-types";
4
+ import { aggregatedClasses } from "@elliemae/ds-classnames";
5
+ import moment from "moment";
6
+ import { range, addLeadingZeros } from "@elliemae/ds-utilities";
7
+ import { isAM } from "./utils";
8
+ import { PickerPanel } from "./PickerPanel";
9
+ const blockName = "time-picker-menu";
10
+ const TimePickerContainer = aggregatedClasses("div")(blockName);
11
+ const TimePickerHeader = aggregatedClasses("div")(blockName, "header");
12
+ const TimePickerPanelContainer = aggregatedClasses("div")(blockName, "panel-container");
13
+ const generateOption = (format) => (option) => ({
14
+ value: option,
15
+ label: typeof format === "function" ? format(option) : option
16
+ });
17
+ class TimePickerMenu extends Component {
18
+ constructor(props) {
19
+ super(props);
20
+ this.renderHeader = () => {
21
+ const { time } = this.state;
22
+ return /* @__PURE__ */ React2.createElement(TimePickerHeader, null, time.format("hh:mma"));
23
+ };
24
+ this.state = {
25
+ time: moment(props.time || "", props.format) || moment()
26
+ };
27
+ }
28
+ static getDerivedStateFromProps(props, state) {
29
+ if (props.time) {
30
+ return { ...state, time: moment(props.time) };
31
+ }
32
+ return { ...state, time: void 0 };
33
+ }
34
+ componentDidMount() {
35
+ const { time } = this.state;
36
+ this.setState({ time });
37
+ }
38
+ handleMinuteChange(value) {
39
+ const { time } = this.state;
40
+ this.updateTime(time.minute(value));
41
+ }
42
+ handleHoursChange(value) {
43
+ const { time } = this.state;
44
+ const { use12Hours } = this.props;
45
+ let nextHour = value;
46
+ if (use12Hours) {
47
+ if (!isAM(time)) {
48
+ nextHour = value % 12 + 12;
49
+ }
50
+ }
51
+ this.updateTime(time.hour(nextHour));
52
+ }
53
+ handleSecondsChange(value) {
54
+ const { time } = this.state;
55
+ this.updateTime(time.second(value));
56
+ }
57
+ handleAMPMChange(value) {
58
+ const { time } = this.state;
59
+ const hour = time.hour();
60
+ const nextHour = value.toLowerCase() === "am" ? hour % 12 : hour % 12 + 12;
61
+ this.updateTime(time.hour(nextHour));
62
+ }
63
+ updateTime(time) {
64
+ const { onTimeChange } = this.props;
65
+ onTimeChange(time);
66
+ this.setState({ time });
67
+ }
68
+ renderHoursPanel() {
69
+ const { time } = this.state;
70
+ const { showHours, use12Hours, format, hasHeader, disabledTimes } = this.props;
71
+ if (!showHours)
72
+ return null;
73
+ const hour = time.hour();
74
+ let selectedHour = use12Hours ? hour % 12 || 12 : hour;
75
+ if (disabledTimes) {
76
+ const { from, to } = disabledTimes;
77
+ if (hour > from.hour && hour < to.hour) {
78
+ if (to.hour < 24) {
79
+ const toFormatted = to.hour % 12 || 12;
80
+ if (selectedHour !== toFormatted)
81
+ this.handleHoursChange(toFormatted);
82
+ selectedHour = toFormatted;
83
+ } else if (from) {
84
+ selectedHour = (from.hour - 1) % 12 || 12;
85
+ }
86
+ }
87
+ }
88
+ const meridiem = hour >= 12 ? "PM" : "AM";
89
+ const withLeadingZeros = format.indexOf("hh") > -1;
90
+ const rangeHours = use12Hours ? range(1, 13) : range(24);
91
+ const hoursOptions = rangeHours.map(generateOption(withLeadingZeros && addLeadingZeros(2)));
92
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
93
+ type: "hour",
94
+ time,
95
+ meridiem,
96
+ hasHeader,
97
+ header: "H",
98
+ onChange: this.handleHoursChange,
99
+ options: hoursOptions,
100
+ selected: selectedHour,
101
+ disabledTimes
102
+ });
103
+ }
104
+ renderMinutesPanel() {
105
+ const { time } = this.state;
106
+ const { showMinutes, format, hasHeader, disabledTimes, minutesInterval } = this.props;
107
+ if (!showMinutes)
108
+ return null;
109
+ const withLeadingZeros = format.indexOf("mm") > -1;
110
+ const rangeMinutes = range(0, 60, minutesInterval).map(generateOption(withLeadingZeros && addLeadingZeros(2)));
111
+ let selectedMinute = time.minute();
112
+ const selectedHour = time.hour();
113
+ if (disabledTimes) {
114
+ const { from, to } = disabledTimes;
115
+ if (selectedHour <= to.hour && selectedHour > from.hour) {
116
+ if (to) {
117
+ if (selectedMinute < to.min)
118
+ this.handleMinuteChange(to.min);
119
+ } else if (from) {
120
+ if (selectedMinute > from.min)
121
+ this.handleMinuteChange(from.min - 1);
122
+ }
123
+ } else {
124
+ selectedMinute = time.minute();
125
+ }
126
+ }
127
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
128
+ type: "minutes",
129
+ time,
130
+ hasHeader,
131
+ header: "M",
132
+ onChange: this.handleMinuteChange,
133
+ options: rangeMinutes,
134
+ selected: selectedMinute,
135
+ disabledTimes
136
+ });
137
+ }
138
+ renderSecondsPanel() {
139
+ const { time } = this.state;
140
+ const { showSeconds, format, hasHeader } = this.props;
141
+ if (!showSeconds)
142
+ return null;
143
+ const withLeadingZeros = format.indexOf("ss") > -1;
144
+ const rangeSeconds = range(60).map(generateOption(withLeadingZeros && addLeadingZeros(2)));
145
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
146
+ type: "seconds",
147
+ hasHeader,
148
+ header: "S",
149
+ onChange: this.handleSecondsChange,
150
+ options: rangeSeconds,
151
+ selected: time.second()
152
+ });
153
+ }
154
+ renderAMPMPanel() {
155
+ const { time } = this.state;
156
+ const { use12Hours, hasHeader, disabledTimes } = this.props;
157
+ if (!use12Hours)
158
+ return null;
159
+ let meridiemSelected = !isAM(time) ? "pm" : "am";
160
+ if (disabledTimes && disabledTimes.to && meridiemSelected === "am") {
161
+ meridiemSelected = disabledTimes.to.hour >= 12 ? "pm" : "am";
162
+ if (meridiemSelected === "am" && time.hour() > 12) {
163
+ this.handleAMPMChange("am");
164
+ }
165
+ if (meridiemSelected === "pm" && time.hour() <= 12) {
166
+ this.handleAMPMChange("pm");
167
+ }
168
+ }
169
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
170
+ type: "meridiem",
171
+ hasHeader,
172
+ header: "",
173
+ onChange: this.handleAMPMChange,
174
+ options: [
175
+ { value: "am", label: "am" },
176
+ { value: "pm", label: "pm" }
177
+ ],
178
+ selected: meridiemSelected,
179
+ disabledTimes
180
+ });
181
+ }
182
+ render() {
183
+ const { hasHeaderDisplay } = this.props;
184
+ return /* @__PURE__ */ React2.createElement(TimePickerContainer, null, hasHeaderDisplay && this.renderHeader(), /* @__PURE__ */ React2.createElement(TimePickerPanelContainer, null, this.renderHoursPanel(), this.renderMinutesPanel(), this.renderSecondsPanel(), this.renderAMPMPanel()));
185
+ }
186
+ }
187
+ TimePickerMenu.defaultProps = {
188
+ time: moment(),
189
+ hasHeader: false,
190
+ use12Hours: true,
191
+ showSeconds: true,
192
+ showMinutes: true,
193
+ showHours: true,
194
+ disabledTimes: void 0,
195
+ onTimeChange: () => null
196
+ };
197
+ TimePickerMenu.propTypes = {
198
+ time: PropTypes.instanceOf(moment),
199
+ hasHeader: PropTypes.bool,
200
+ use12Hours: PropTypes.bool,
201
+ showSeconds: PropTypes.bool,
202
+ showMinutes: PropTypes.bool,
203
+ showHours: PropTypes.bool,
204
+ onTimeChange: PropTypes.func,
205
+ disabledTimes: PropTypes.object
206
+ };
207
+ var TimePickerMenu_default = TimePickerMenu;
208
+ export {
209
+ TimePickerMenu,
210
+ TimePickerMenu_default as default
211
+ };
212
+ //# sourceMappingURL=TimePickerMenu.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/TimePickerMenu.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "/* 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\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"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,11 @@
1
+ import * as React from "react";
2
+ export * from "./DSTimePicker";
3
+ export * from "./TimePickerMenu";
4
+ export * from "./DSTimePickerMenu";
5
+ import { convertTimeString } from "./utils";
6
+ import { default as default2 } from "./DSTimePicker";
7
+ export {
8
+ convertTimeString,
9
+ default2 as default
10
+ };
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/index.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './DSTimePicker';\nexport * from './TimePickerMenu';\nexport * from './DSTimePickerMenu';\n\nexport { convertTimeString } from './utils'; // this is an exception, we should move utils to shared tho?\n\nexport { default } from './DSTimePicker';\n"],
5
+ "mappings": "AAAA;ACAA;AACA;AACA;AAEA;AAEA;",
6
+ "names": []
7
+ }
@@ -0,0 +1,64 @@
1
+ import * as React from "react";
2
+ function MoveElementOnScroll(element, {
3
+ container,
4
+ min = 0,
5
+ max = element.offsetHeight,
6
+ speed = 1,
7
+ smooth = 2,
8
+ onUpdate = () => null,
9
+ onEndScroll = () => null
10
+ }) {
11
+ let moving = false;
12
+ let pos = min;
13
+ let lastPos = pos;
14
+ const requestFrame = function() {
15
+ return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(func) {
16
+ window.setTimeout(func, 1e3 / 50);
17
+ };
18
+ }();
19
+ function update() {
20
+ moving = true;
21
+ const delta = (pos - lastPos) / smooth;
22
+ lastPos += delta;
23
+ if (Math.abs(delta) > 0.7) {
24
+ requestFrame(() => {
25
+ onUpdate(lastPos, delta);
26
+ update();
27
+ });
28
+ } else {
29
+ onEndScroll(pos);
30
+ moving = false;
31
+ }
32
+ }
33
+ function scrolling(e) {
34
+ e.preventDefault();
35
+ let delta = e.delta || e.wheelDelta;
36
+ if (delta === void 0) {
37
+ delta = -e.detail;
38
+ delta *= 10 * speed;
39
+ }
40
+ pos += -delta * speed;
41
+ pos = Math.max(min, Math.min(pos, max));
42
+ if (!moving) {
43
+ update();
44
+ }
45
+ }
46
+ container.addEventListener("mousewheel", scrolling, false);
47
+ container.addEventListener("DOMMouseScroll", scrolling, false);
48
+ return {
49
+ unsubscribe: () => {
50
+ container.removeEventListener("mousewheel", scrolling);
51
+ container.removeEventListener("DOMMouseScroll", scrolling);
52
+ },
53
+ updatePosition: (newPos) => {
54
+ pos = -newPos;
55
+ lastPos = -pos;
56
+ }
57
+ };
58
+ }
59
+ var moveElementOnScroll_default = MoveElementOnScroll;
60
+ export {
61
+ MoveElementOnScroll,
62
+ moveElementOnScroll_default as default
63
+ };
64
+ //# sourceMappingURL=moveElementOnScroll.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/moveElementOnScroll.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export function MoveElementOnScroll(\n element,\n {\n container,\n min = 0,\n max = element.offsetHeight,\n speed = 1,\n smooth = 2,\n onUpdate = () => null,\n onEndScroll = () => null,\n },\n) {\n let moving = false;\n let pos = min;\n let lastPos = pos;\n\n // todo: move this to utils if we finally need it\n const requestFrame = (function() {\n return (\n window.requestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.oRequestAnimationFrame ||\n window.msRequestAnimationFrame ||\n function(func) {\n window.setTimeout(func, 1000 / 50);\n }\n );\n })();\n\n function update() {\n moving = true;\n const delta = (pos - lastPos) / smooth;\n lastPos += delta;\n\n if (Math.abs(delta) > 0.7) {\n requestFrame(() => {\n onUpdate(lastPos, delta);\n update();\n });\n } else {\n onEndScroll(pos);\n moving = false;\n }\n }\n\n function scrolling(e) {\n e.preventDefault(); // disable default scrolling\n let delta = e.delta || e.wheelDelta;\n if (delta === undefined) {\n // for firefox\n delta = -e.detail;\n delta *= 10 * speed;\n }\n\n pos += -delta * speed;\n pos = Math.max(min, Math.min(pos, max)); // limit scrolling\n if (!moving) {\n update();\n }\n }\n\n container.addEventListener('mousewheel', scrolling, false);\n container.addEventListener('DOMMouseScroll', scrolling, false);\n\n return {\n unsubscribe: () => {\n container.removeEventListener('mousewheel', scrolling);\n container.removeEventListener('DOMMouseScroll', scrolling);\n },\n updatePosition: newPos => {\n pos = -newPos;\n lastPos = -pos;\n },\n };\n}\n\nexport default MoveElementOnScroll;\n"],
5
+ "mappings": "AAAA;ACAO,6BACL,SACA;AAAA,EACE;AAAA,EACA,MAAM;AAAA,EACN,MAAM,QAAQ;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW,MAAM;AAAA,EACjB,cAAc,MAAM;AAAA,GAEtB;AACA,MAAI,SAAS;AACb,MAAI,MAAM;AACV,MAAI,UAAU;AAGd,QAAM,eAAgB,WAAW;AAC/B,WACE,OAAO,yBACP,OAAO,+BACP,OAAO,4BACP,OAAO,0BACP,OAAO,2BACP,SAAS,MAAM;AACb,aAAO,WAAW,MAAM,MAAO;AAAA;AAAA;AAKrC,oBAAkB;AAChB,aAAS;AACT,UAAM,QAAS,OAAM,WAAW;AAChC,eAAW;AAEX,QAAI,KAAK,IAAI,SAAS,KAAK;AACzB,mBAAa,MAAM;AACjB,iBAAS,SAAS;AAClB;AAAA;AAAA,WAEG;AACL,kBAAY;AACZ,eAAS;AAAA;AAAA;AAIb,qBAAmB,GAAG;AACpB,MAAE;AACF,QAAI,QAAQ,EAAE,SAAS,EAAE;AACzB,QAAI,UAAU,QAAW;AAEvB,cAAQ,CAAC,EAAE;AACX,eAAS,KAAK;AAAA;AAGhB,WAAO,CAAC,QAAQ;AAChB,UAAM,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK;AAClC,QAAI,CAAC,QAAQ;AACX;AAAA;AAAA;AAIJ,YAAU,iBAAiB,cAAc,WAAW;AACpD,YAAU,iBAAiB,kBAAkB,WAAW;AAExD,SAAO;AAAA,IACL,aAAa,MAAM;AACjB,gBAAU,oBAAoB,cAAc;AAC5C,gBAAU,oBAAoB,kBAAkB;AAAA;AAAA,IAElD,gBAAgB,YAAU;AACxB,YAAM,CAAC;AACP,gBAAU,CAAC;AAAA;AAAA;AAAA;AAKjB,IAAO,8BAAQ;",
6
+ "names": []
7
+ }
@@ -0,0 +1,42 @@
1
+ import * as React from "react";
2
+ const validateIndex = (index, options) => {
3
+ if (index < 0)
4
+ return 0;
5
+ if (index >= options.length)
6
+ return options.length - 1;
7
+ return index;
8
+ };
9
+ const getOptionIndex = (options, selectedOption, valueProperty = "value") => {
10
+ const index = options.findIndex((option) => option[valueProperty] === selectedOption);
11
+ return validateIndex(index, options);
12
+ };
13
+ const isAM = (time) => time && time.hour() < 12;
14
+ const convertTimeString = (string) => {
15
+ if (!string)
16
+ return null;
17
+ let meridiem = "AM";
18
+ if (string.toUpperCase().includes("PM"))
19
+ meridiem = "PM";
20
+ const arr = string.split(":");
21
+ let hour = parseInt(arr[0], 10);
22
+ if (meridiem === "PM" && hour !== 12)
23
+ hour += 12;
24
+ if (meridiem === "AM" && hour === 12)
25
+ hour = 0;
26
+ if (meridiem === "PM" && hour === 12)
27
+ hour = 12;
28
+ const min = parseInt(arr[1], 10);
29
+ const sec = parseInt(arr[2], 10);
30
+ return {
31
+ hour,
32
+ min,
33
+ sec
34
+ };
35
+ };
36
+ export {
37
+ convertTimeString,
38
+ getOptionIndex,
39
+ isAM,
40
+ validateIndex
41
+ };
42
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/utils.tsx"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export const validateIndex = (index, options) => {\n if (index < 0) return 0;\n if (index >= options.length) return options.length - 1;\n return index;\n};\n\nexport const getOptionIndex = (\n options,\n selectedOption,\n valueProperty = 'value',\n) => {\n const index = options.findIndex(\n (option) => option[valueProperty] === selectedOption,\n );\n return validateIndex(index, options);\n};\n\nexport const isAM = (time) => time && time.hour() < 12;\n\nexport const convertTimeString = (string) => {\n if (!string) return null;\n let meridiem = 'AM';\n if (string.toUpperCase().includes('PM')) meridiem = 'PM';\n\n const arr = string.split(':');\n let hour = parseInt(arr[0], 10);\n if (meridiem === 'PM' && hour !== 12) hour += 12; // formats to 24\n if (meridiem === 'AM' && hour === 12) hour = 0;\n if (meridiem === 'PM' && hour === 12) hour = 12;\n\n const min = parseInt(arr[1], 10);\n const sec = parseInt(arr[2], 10);\n\n return {\n hour,\n min,\n sec,\n };\n};\n"],
5
+ "mappings": "AAAA;ACAO,MAAM,gBAAgB,CAAC,OAAO,YAAY;AAC/C,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,SAAS,QAAQ;AAAQ,WAAO,QAAQ,SAAS;AACrD,SAAO;AAAA;AAGF,MAAM,iBAAiB,CAC5B,SACA,gBACA,gBAAgB,YACb;AACH,QAAM,QAAQ,QAAQ,UACpB,CAAC,WAAW,OAAO,mBAAmB;AAExC,SAAO,cAAc,OAAO;AAAA;AAGvB,MAAM,OAAO,CAAC,SAAS,QAAQ,KAAK,SAAS;AAE7C,MAAM,oBAAoB,CAAC,WAAW;AAC3C,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,cAAc,SAAS;AAAO,eAAW;AAEpD,QAAM,MAAM,OAAO,MAAM;AACzB,MAAI,OAAO,SAAS,IAAI,IAAI;AAC5B,MAAI,aAAa,QAAQ,SAAS;AAAI,YAAQ;AAC9C,MAAI,aAAa,QAAQ,SAAS;AAAI,WAAO;AAC7C,MAAI,aAAa,QAAQ,SAAS;AAAI,WAAO;AAE7C,QAAM,MAAM,SAAS,IAAI,IAAI;AAC7B,QAAM,MAAM,SAAS,IAAI,IAAI;AAE7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA;AAAA;",
6
+ "names": []
7
+ }
File without changes
File without changes
@@ -22,3 +22,4 @@ export default class PickerPanel extends Component {
22
22
  renderHeader: () => JSX.Element;
23
23
  render(): JSX.Element;
24
24
  }
25
+ export { PickerPanel };
@@ -22,4 +22,5 @@ declare const TimePickerDropdown: {
22
22
  zIndex: PropTypes.Requireable<number>;
23
23
  };
24
24
  };
25
+ export { TimePickerDropdown };
25
26
  export default TimePickerDropdown;
@@ -32,4 +32,5 @@ declare const TimePickerImpl: {
32
32
  minutesInterval: PropTypes.Requireable<number>;
33
33
  };
34
34
  };
35
+ export { TimePickerImpl };
35
36
  export default TimePickerImpl;
File without changes
File without changes
File without changes
File without changes