@elliemae/ds-time-picker 2.3.1 → 3.0.0-alpha.3

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 +60 -0
  4. package/dist/cjs/DSTimePickerMenu.js.map +7 -0
  5. package/dist/cjs/PickerPanel.js +313 -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 +210 -0
  10. package/dist/cjs/TimePickerImpl.js.map +7 -0
  11. package/dist/cjs/TimePickerMenu.js +258 -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 +33 -0
  22. package/dist/esm/DSTimePickerMenu.js.map +7 -0
  23. package/dist/esm/PickerPanel.js +286 -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 +183 -0
  28. package/dist/esm/TimePickerImpl.js.map +7 -0
  29. package/dist/esm/TimePickerMenu.js +231 -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/package.json +46 -37
  38. package/cjs/DSTimePicker.js +0 -121
  39. package/cjs/DSTimePickerMenu.js +0 -35
  40. package/cjs/PickerPanel.js +0 -402
  41. package/cjs/TimePickerDropdown.js +0 -53
  42. package/cjs/TimePickerImpl.js +0 -175
  43. package/cjs/TimePickerMenu.js +0 -312
  44. package/cjs/index.js +0 -17
  45. package/cjs/moveElementOnScroll.js +0 -75
  46. package/cjs/utils.js +0 -38
  47. package/esm/DSTimePicker.js +0 -111
  48. package/esm/DSTimePickerMenu.js +0 -24
  49. package/esm/PickerPanel.js +0 -392
  50. package/esm/TimePickerDropdown.js +0 -45
  51. package/esm/TimePickerImpl.js +0 -165
  52. package/esm/TimePickerMenu.js +0 -301
  53. package/esm/index.js +0 -4
  54. package/esm/moveElementOnScroll.js +0 -70
  55. package/esm/utils.js +0 -31
  56. package/types/DSTimePicker.d.ts +0 -162
  57. package/types/DSTimePickerMenu.d.ts +0 -4
  58. package/types/PickerPanel.d.ts +0 -24
  59. package/types/TimePickerDropdown.d.ts +0 -25
  60. package/types/TimePickerImpl.d.ts +0 -35
  61. package/types/TimePickerMenu.d.ts +0 -19
  62. package/types/index.d.ts +0 -5
  63. package/types/moveElementOnScroll.d.ts +0 -13
  64. package/types/utils.d.ts +0 -8
@@ -0,0 +1,183 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
3
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
4
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
5
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
6
+ var __spreadValues = (a, b) => {
7
+ for (var prop in b || (b = {}))
8
+ if (__hasOwnProp.call(b, prop))
9
+ __defNormalProp(a, prop, b[prop]);
10
+ if (__getOwnPropSymbols)
11
+ for (var prop of __getOwnPropSymbols(b)) {
12
+ if (__propIsEnum.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ }
15
+ return a;
16
+ };
17
+ var __objRest = (source, exclude) => {
18
+ var target = {};
19
+ for (var prop in source)
20
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
21
+ target[prop] = source[prop];
22
+ if (source != null && __getOwnPropSymbols)
23
+ for (var prop of __getOwnPropSymbols(source)) {
24
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
25
+ target[prop] = source[prop];
26
+ }
27
+ return target;
28
+ };
29
+ import * as React from "react";
30
+ import React2, { useState, useEffect, useRef } from "react";
31
+ import PropTypes from "prop-types";
32
+ import moment from "moment";
33
+ import memoizeOne from "memoize-one";
34
+ import { getVisibleTimeByFormat } from "@elliemae/ds-utilities";
35
+ import { aggregatedClasses, convertPropToCssClassName } from "@elliemae/ds-classnames";
36
+ import { DSInput, DSInputGroup, TimeInputImpl } from "@elliemae/ds-form";
37
+ import { TimePickerMenu } from "./TimePickerMenu";
38
+ import { TimePickerDropdown } from "./TimePickerDropdown";
39
+ import { convertTimeString } from "./utils";
40
+ const blockName = "time-picker";
41
+ const TimePickerContainer = aggregatedClasses(DSInputGroup)(blockName, null, ({ isMenuOpened }) => ({
42
+ isMenuOpened
43
+ }));
44
+ const TimePickerImpl = ({
45
+ value,
46
+ onChange,
47
+ onOpen,
48
+ format,
49
+ disabled,
50
+ hasHeader,
51
+ hasHeaderDisplay,
52
+ className,
53
+ containerProps,
54
+ placement,
55
+ zIndex,
56
+ disabledTimes,
57
+ minutesInterval
58
+ }) => {
59
+ const [time, setTime] = useState();
60
+ const [isMenuOpened, setIsMenuOpened] = useState(false);
61
+ const [focusedColumn, setFocusedColumn] = useState(null);
62
+ const timePickerRef = useRef();
63
+ useEffect(() => {
64
+ if (moment(value).isValid())
65
+ setTime(moment(value));
66
+ else if (value === null)
67
+ setTime(void 0);
68
+ }, [value]);
69
+ useEffect(() => {
70
+ window.addEventListener("click", handleClickOutside, false);
71
+ return () => window.removeEventListener("click", handleClickOutside, false);
72
+ }, []);
73
+ useEffect(() => {
74
+ window.addEventListener("keydown", handleKeyDown, false);
75
+ return () => window.removeEventListener("keydown", handleKeyDown, false);
76
+ }, []);
77
+ useEffect(() => {
78
+ if (isMenuOpened)
79
+ handleChangeFocus();
80
+ }, [isMenuOpened]);
81
+ const handleClickOutside = () => {
82
+ if (isMenuOpened)
83
+ setIsMenuOpened(false);
84
+ };
85
+ const handleKeyDown = (event) => {
86
+ const { key } = event;
87
+ const menuOpenKeys = ["Escape", " ", "Enter"];
88
+ if (menuOpenKeys.includes(key))
89
+ setIsMenuOpened(false);
90
+ };
91
+ const handleChangeFocus = () => {
92
+ const [firstColumn] = document.getElementsByClassName("em-ds-time-picker-panel");
93
+ if (firstColumn && !focusedColumn) {
94
+ setFocusedColumn(firstColumn);
95
+ firstColumn.focus();
96
+ }
97
+ };
98
+ const handlePickerChange = (newTime) => {
99
+ setTime(moment(newTime));
100
+ onChange(moment(newTime));
101
+ };
102
+ const handleInputChange = (newTime) => {
103
+ setTime(newTime);
104
+ onChange(newTime);
105
+ };
106
+ const handleMenuOpen = (isOpen) => {
107
+ onOpen(isOpen);
108
+ setIsMenuOpened(isOpen);
109
+ if (!isOpen)
110
+ setFocusedColumn(null);
111
+ };
112
+ const getVisibleTimePanels = memoizeOne((format2) => getVisibleTimeByFormat(format2));
113
+ const timePickerBlockName = convertPropToCssClassName(blockName);
114
+ const visiblePanels = getVisibleTimePanels(format);
115
+ const disabledTimeRange = disabledTimes && {
116
+ from: convertTimeString(disabledTimes.from),
117
+ to: convertTimeString(disabledTimes.to)
118
+ };
119
+ return /* @__PURE__ */ React2.createElement(TimePickerContainer, {
120
+ className: `${className} variant-${!disabled ? "default" : "disabled"}`,
121
+ containerProps,
122
+ disabled,
123
+ rightAddon: /* @__PURE__ */ React2.createElement(TimePickerDropdown, {
124
+ blockName: timePickerBlockName,
125
+ disabled,
126
+ isOpen: isMenuOpened,
127
+ zIndex,
128
+ placement,
129
+ onOpen: handleMenuOpen,
130
+ onClick: (e) => {
131
+ e.preventDefault();
132
+ handleMenuOpen(!isMenuOpened);
133
+ },
134
+ menu: /* @__PURE__ */ React2.createElement("div", {
135
+ ref: timePickerRef
136
+ }, /* @__PURE__ */ React2.createElement(TimePickerMenu, __spreadValues({
137
+ disabled,
138
+ disabledTimes: disabledTimeRange,
139
+ format,
140
+ hasHeader,
141
+ hasHeaderDisplay,
142
+ onTimeChange: handlePickerChange,
143
+ minutesInterval,
144
+ time
145
+ }, visiblePanels)))
146
+ })
147
+ }, /* @__PURE__ */ React2.createElement(DSInput, {
148
+ customInputType: (_a) => {
149
+ var _b = _a, { onChange: handleChange } = _b, restInputProps = __objRest(_b, ["onChange"]);
150
+ return /* @__PURE__ */ React2.createElement(TimeInputImpl, __spreadValues({
151
+ clearable: true,
152
+ disabled,
153
+ format,
154
+ onChange: handleChange
155
+ }, restInputProps));
156
+ },
157
+ isShowElipsisActive: false,
158
+ disabled,
159
+ onChange: handleInputChange,
160
+ value: time
161
+ }));
162
+ };
163
+ TimePickerImpl.propTypes = {
164
+ value: PropTypes.instanceOf(Date, moment),
165
+ onChange: PropTypes.func,
166
+ onOpen: PropTypes.func,
167
+ format: PropTypes.string,
168
+ disabled: PropTypes.bool,
169
+ hasHeader: PropTypes.bool,
170
+ hasHeaderDisplay: PropTypes.bool,
171
+ className: PropTypes.string,
172
+ containerProps: PropTypes.object,
173
+ placement: PropTypes.string,
174
+ zIndex: PropTypes.number,
175
+ disabledTimes: PropTypes.object,
176
+ minutesInterval: PropTypes.number
177
+ };
178
+ var TimePickerImpl_default = TimePickerImpl;
179
+ export {
180
+ TimePickerImpl,
181
+ TimePickerImpl_default as default
182
+ };
183
+ //# 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,231 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __defProps = Object.defineProperties;
3
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
+ var __spreadValues = (a, b) => {
9
+ for (var prop in b || (b = {}))
10
+ if (__hasOwnProp.call(b, prop))
11
+ __defNormalProp(a, prop, b[prop]);
12
+ if (__getOwnPropSymbols)
13
+ for (var prop of __getOwnPropSymbols(b)) {
14
+ if (__propIsEnum.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ }
17
+ return a;
18
+ };
19
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
+ import * as React from "react";
21
+ import React2, { Component } from "react";
22
+ import PropTypes from "prop-types";
23
+ import { aggregatedClasses } from "@elliemae/ds-classnames";
24
+ import moment from "moment";
25
+ import { range, addLeadingZeros } from "@elliemae/ds-utilities";
26
+ import { isAM } from "./utils";
27
+ import { PickerPanel } from "./PickerPanel";
28
+ const blockName = "time-picker-menu";
29
+ const TimePickerContainer = aggregatedClasses("div")(blockName);
30
+ const TimePickerHeader = aggregatedClasses("div")(blockName, "header");
31
+ const TimePickerPanelContainer = aggregatedClasses("div")(blockName, "panel-container");
32
+ const generateOption = (format) => (option) => ({
33
+ value: option,
34
+ label: typeof format === "function" ? format(option) : option
35
+ });
36
+ class TimePickerMenu extends Component {
37
+ constructor(props) {
38
+ super(props);
39
+ this.renderHeader = () => {
40
+ const { time } = this.state;
41
+ return /* @__PURE__ */ React2.createElement(TimePickerHeader, null, time.format("hh:mma"));
42
+ };
43
+ this.state = {
44
+ time: moment(props.time || "", props.format) || moment()
45
+ };
46
+ }
47
+ static getDerivedStateFromProps(props, state) {
48
+ if (props.time) {
49
+ return __spreadProps(__spreadValues({}, state), { time: moment(props.time) });
50
+ }
51
+ return __spreadProps(__spreadValues({}, state), { time: void 0 });
52
+ }
53
+ componentDidMount() {
54
+ const { time } = this.state;
55
+ this.setState({ time });
56
+ }
57
+ handleMinuteChange(value) {
58
+ const { time } = this.state;
59
+ this.updateTime(time.minute(value));
60
+ }
61
+ handleHoursChange(value) {
62
+ const { time } = this.state;
63
+ const { use12Hours } = this.props;
64
+ let nextHour = value;
65
+ if (use12Hours) {
66
+ if (!isAM(time)) {
67
+ nextHour = value % 12 + 12;
68
+ }
69
+ }
70
+ this.updateTime(time.hour(nextHour));
71
+ }
72
+ handleSecondsChange(value) {
73
+ const { time } = this.state;
74
+ this.updateTime(time.second(value));
75
+ }
76
+ handleAMPMChange(value) {
77
+ const { time } = this.state;
78
+ const hour = time.hour();
79
+ const nextHour = value.toLowerCase() === "am" ? hour % 12 : hour % 12 + 12;
80
+ this.updateTime(time.hour(nextHour));
81
+ }
82
+ updateTime(time) {
83
+ const { onTimeChange } = this.props;
84
+ onTimeChange(time);
85
+ this.setState({ time });
86
+ }
87
+ renderHoursPanel() {
88
+ const { time } = this.state;
89
+ const { showHours, use12Hours, format, hasHeader, disabledTimes } = this.props;
90
+ if (!showHours)
91
+ return null;
92
+ const hour = time.hour();
93
+ let selectedHour = use12Hours ? hour % 12 || 12 : hour;
94
+ if (disabledTimes) {
95
+ const { from, to } = disabledTimes;
96
+ if (hour > from.hour && hour < to.hour) {
97
+ if (to.hour < 24) {
98
+ const toFormatted = to.hour % 12 || 12;
99
+ if (selectedHour !== toFormatted)
100
+ this.handleHoursChange(toFormatted);
101
+ selectedHour = toFormatted;
102
+ } else if (from) {
103
+ selectedHour = (from.hour - 1) % 12 || 12;
104
+ }
105
+ }
106
+ }
107
+ const meridiem = hour >= 12 ? "PM" : "AM";
108
+ const withLeadingZeros = format.indexOf("hh") > -1;
109
+ const rangeHours = use12Hours ? range(1, 13) : range(24);
110
+ const hoursOptions = rangeHours.map(generateOption(withLeadingZeros && addLeadingZeros(2)));
111
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
112
+ type: "hour",
113
+ time,
114
+ meridiem,
115
+ hasHeader,
116
+ header: "H",
117
+ onChange: this.handleHoursChange,
118
+ options: hoursOptions,
119
+ selected: selectedHour,
120
+ disabledTimes
121
+ });
122
+ }
123
+ renderMinutesPanel() {
124
+ const { time } = this.state;
125
+ const { showMinutes, format, hasHeader, disabledTimes, minutesInterval } = this.props;
126
+ if (!showMinutes)
127
+ return null;
128
+ const withLeadingZeros = format.indexOf("mm") > -1;
129
+ const rangeMinutes = range(0, 60, minutesInterval).map(generateOption(withLeadingZeros && addLeadingZeros(2)));
130
+ let selectedMinute = time.minute();
131
+ const selectedHour = time.hour();
132
+ if (disabledTimes) {
133
+ const { from, to } = disabledTimes;
134
+ if (selectedHour <= to.hour && selectedHour > from.hour) {
135
+ if (to) {
136
+ if (selectedMinute < to.min)
137
+ this.handleMinuteChange(to.min);
138
+ } else if (from) {
139
+ if (selectedMinute > from.min)
140
+ this.handleMinuteChange(from.min - 1);
141
+ }
142
+ } else {
143
+ selectedMinute = time.minute();
144
+ }
145
+ }
146
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
147
+ type: "minutes",
148
+ time,
149
+ hasHeader,
150
+ header: "M",
151
+ onChange: this.handleMinuteChange,
152
+ options: rangeMinutes,
153
+ selected: selectedMinute,
154
+ disabledTimes
155
+ });
156
+ }
157
+ renderSecondsPanel() {
158
+ const { time } = this.state;
159
+ const { showSeconds, format, hasHeader } = this.props;
160
+ if (!showSeconds)
161
+ return null;
162
+ const withLeadingZeros = format.indexOf("ss") > -1;
163
+ const rangeSeconds = range(60).map(generateOption(withLeadingZeros && addLeadingZeros(2)));
164
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
165
+ type: "seconds",
166
+ hasHeader,
167
+ header: "S",
168
+ onChange: this.handleSecondsChange,
169
+ options: rangeSeconds,
170
+ selected: time.second()
171
+ });
172
+ }
173
+ renderAMPMPanel() {
174
+ const { time } = this.state;
175
+ const { use12Hours, hasHeader, disabledTimes } = this.props;
176
+ if (!use12Hours)
177
+ return null;
178
+ let meridiemSelected = !isAM(time) ? "pm" : "am";
179
+ if (disabledTimes && disabledTimes.to && meridiemSelected === "am") {
180
+ meridiemSelected = disabledTimes.to.hour >= 12 ? "pm" : "am";
181
+ if (meridiemSelected === "am" && time.hour() > 12) {
182
+ this.handleAMPMChange("am");
183
+ }
184
+ if (meridiemSelected === "pm" && time.hour() <= 12) {
185
+ this.handleAMPMChange("pm");
186
+ }
187
+ }
188
+ return /* @__PURE__ */ React2.createElement(PickerPanel, {
189
+ type: "meridiem",
190
+ hasHeader,
191
+ header: "",
192
+ onChange: this.handleAMPMChange,
193
+ options: [
194
+ { value: "am", label: "am" },
195
+ { value: "pm", label: "pm" }
196
+ ],
197
+ selected: meridiemSelected,
198
+ disabledTimes
199
+ });
200
+ }
201
+ render() {
202
+ const { hasHeaderDisplay } = this.props;
203
+ return /* @__PURE__ */ React2.createElement(TimePickerContainer, null, hasHeaderDisplay && this.renderHeader(), /* @__PURE__ */ React2.createElement(TimePickerPanelContainer, null, this.renderHoursPanel(), this.renderMinutesPanel(), this.renderSecondsPanel(), this.renderAMPMPanel()));
204
+ }
205
+ }
206
+ TimePickerMenu.defaultProps = {
207
+ time: moment(),
208
+ hasHeader: false,
209
+ use12Hours: true,
210
+ showSeconds: true,
211
+ showMinutes: true,
212
+ showHours: true,
213
+ disabledTimes: void 0,
214
+ onTimeChange: () => null
215
+ };
216
+ TimePickerMenu.propTypes = {
217
+ time: PropTypes.instanceOf(moment),
218
+ hasHeader: PropTypes.bool,
219
+ use12Hours: PropTypes.bool,
220
+ showSeconds: PropTypes.bool,
221
+ showMinutes: PropTypes.bool,
222
+ showHours: PropTypes.bool,
223
+ onTimeChange: PropTypes.func,
224
+ disabledTimes: PropTypes.object
225
+ };
226
+ var TimePickerMenu_default = TimePickerMenu;
227
+ export {
228
+ TimePickerMenu,
229
+ TimePickerMenu_default as default
230
+ };
231
+ //# 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
+ }