@elliemae/ds-time-picker 3.16.0-next.2 → 3.16.0-next.21

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 (43) hide show
  1. package/dist/cjs/DSTimePicker.js +43 -21
  2. package/dist/cjs/DSTimePicker.js.map +2 -2
  3. package/dist/cjs/DSTimePickerMenu.js +5 -1
  4. package/dist/cjs/DSTimePickerMenu.js.map +2 -2
  5. package/dist/cjs/PickerPanel.js +10 -2
  6. package/dist/cjs/PickerPanel.js.map +2 -2
  7. package/dist/cjs/TimePickerDropdown.js +4 -0
  8. package/dist/cjs/TimePickerDropdown.js.map +1 -1
  9. package/dist/cjs/TimePickerImpl.js +8 -3
  10. package/dist/cjs/TimePickerImpl.js.map +2 -2
  11. package/dist/cjs/TimePickerMenu.js +13 -2
  12. package/dist/cjs/TimePickerMenu.js.map +2 -2
  13. package/dist/cjs/index.js +9 -5
  14. package/dist/cjs/index.js.map +2 -2
  15. package/dist/cjs/moveElementOnScroll.js +4 -0
  16. package/dist/cjs/moveElementOnScroll.js.map +1 -1
  17. package/dist/cjs/package.json +7 -0
  18. package/dist/cjs/utils.js +4 -0
  19. package/dist/cjs/utils.js.map +1 -1
  20. package/dist/esm/DSTimePicker.js +20 -2
  21. package/dist/esm/DSTimePicker.js.map +2 -2
  22. package/dist/esm/DSTimePickerMenu.js +1 -1
  23. package/dist/esm/DSTimePickerMenu.js.map +1 -1
  24. package/dist/esm/PickerPanel.js +6 -2
  25. package/dist/esm/PickerPanel.js.map +2 -2
  26. package/dist/esm/TimePickerImpl.js +5 -4
  27. package/dist/esm/TimePickerImpl.js.map +2 -2
  28. package/dist/esm/TimePickerMenu.js +9 -2
  29. package/dist/esm/TimePickerMenu.js.map +2 -2
  30. package/dist/esm/index.js +5 -5
  31. package/dist/esm/index.js.map +1 -1
  32. package/dist/esm/package.json +7 -0
  33. package/dist/esm/utils.js.map +1 -1
  34. package/package.json +14 -13
  35. package/dist/types/DSTimePicker.d.ts +0 -86
  36. package/dist/types/DSTimePickerMenu.d.ts +0 -3
  37. package/dist/types/PickerPanel.d.ts +0 -25
  38. package/dist/types/TimePickerDropdown.d.ts +0 -24
  39. package/dist/types/TimePickerImpl.d.ts +0 -34
  40. package/dist/types/TimePickerMenu.d.ts +0 -19
  41. package/dist/types/index.d.ts +0 -5
  42. package/dist/types/moveElementOnScroll.d.ts +0 -13
  43. package/dist/types/utils.d.ts +0 -8
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/moveElementOnScroll.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
4
  "sourcesContent": ["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", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,SAAS,oBACd,SACA;AAAA,EACE;AAAA,EACA,MAAM;AAAA,EACN,MAAM,QAAQ;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW,MAAM;AAAA,EACjB,cAAc,MAAM;AACtB,GACA;AACA,MAAI,SAAS;AACb,MAAI,MAAM;AACV,MAAI,UAAU;AAGd,QAAM,eAAgB,WAAY;AAChC,WACE,OAAO,yBACP,OAAO,+BACP,OAAO,4BACP,OAAO,0BACP,OAAO,2BACP,SAAU,MAAM;AACd,aAAO,WAAW,MAAM,MAAO,EAAE;AAAA,IACnC;AAAA,EAEJ,EAAG;AAEH,WAAS,SAAS;AAChB,aAAS;AACT,UAAM,SAAS,MAAM,WAAW;AAChC,eAAW;AAEX,QAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACzB,mBAAa,MAAM;AACjB,iBAAS,SAAS,KAAK;AACvB,eAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,kBAAY,GAAG;AACf,eAAS;AAAA,IACX;AAAA,EACF;AAEA,WAAS,UAAU,GAAG;AACpB,MAAE,eAAe;AACjB,QAAI,QAAQ,EAAE,SAAS,EAAE;AACzB,QAAI,UAAU,QAAW;AAEvB,cAAQ,CAAC,EAAE;AACX,eAAS,KAAK;AAAA,IAChB;AAEA,WAAO,CAAC,QAAQ;AAChB,UAAM,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC;AACtC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAAA,EACF;AAEA,YAAU,iBAAiB,cAAc,WAAW,KAAK;AACzD,YAAU,iBAAiB,kBAAkB,WAAW,KAAK;AAE7D,SAAO;AAAA,IACL,aAAa,MAAM;AACjB,gBAAU,oBAAoB,cAAc,SAAS;AACrD,gBAAU,oBAAoB,kBAAkB,SAAS;AAAA,IAC3D;AAAA,IACA,gBAAgB,CAAC,WAAW;AAC1B,YAAM,CAAC;AACP,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAEA,IAAO,8BAAQ;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,SAAS,oBACd,SACA;AAAA,EACE;AAAA,EACA,MAAM;AAAA,EACN,MAAM,QAAQ;AAAA,EACd,QAAQ;AAAA,EACR,SAAS;AAAA,EACT,WAAW,MAAM;AAAA,EACjB,cAAc,MAAM;AACtB,GACA;AACA,MAAI,SAAS;AACb,MAAI,MAAM;AACV,MAAI,UAAU;AAGd,QAAM,eAAgB,WAAY;AAChC,WACE,OAAO,yBACP,OAAO,+BACP,OAAO,4BACP,OAAO,0BACP,OAAO,2BACP,SAAU,MAAM;AACd,aAAO,WAAW,MAAM,MAAO,EAAE;AAAA,IACnC;AAAA,EAEJ,EAAG;AAEH,WAAS,SAAS;AAChB,aAAS;AACT,UAAM,SAAS,MAAM,WAAW;AAChC,eAAW;AAEX,QAAI,KAAK,IAAI,KAAK,IAAI,KAAK;AACzB,mBAAa,MAAM;AACjB,iBAAS,SAAS,KAAK;AACvB,eAAO;AAAA,MACT,CAAC;AAAA,IACH,OAAO;AACL,kBAAY,GAAG;AACf,eAAS;AAAA,IACX;AAAA,EACF;AAEA,WAAS,UAAU,GAAG;AACpB,MAAE,eAAe;AACjB,QAAI,QAAQ,EAAE,SAAS,EAAE;AACzB,QAAI,UAAU,QAAW;AAEvB,cAAQ,CAAC,EAAE;AACX,eAAS,KAAK;AAAA,IAChB;AAEA,WAAO,CAAC,QAAQ;AAChB,UAAM,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,GAAG,CAAC;AACtC,QAAI,CAAC,QAAQ;AACX,aAAO;AAAA,IACT;AAAA,EACF;AAEA,YAAU,iBAAiB,cAAc,WAAW,KAAK;AACzD,YAAU,iBAAiB,kBAAkB,WAAW,KAAK;AAE7D,SAAO;AAAA,IACL,aAAa,MAAM;AACjB,gBAAU,oBAAoB,cAAc,SAAS;AACrD,gBAAU,oBAAoB,kBAAkB,SAAS;AAAA,IAC3D;AAAA,IACA,gBAAgB,CAAC,WAAW;AAC1B,YAAM,CAAC;AACP,gBAAU,CAAC;AAAA,IACb;AAAA,EACF;AACF;AAEA,IAAO,8BAAQ;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "commonjs",
3
+ "sideEffects": [
4
+ "*.css",
5
+ "*.scss"
6
+ ]
7
+ }
package/dist/cjs/utils.js CHANGED
@@ -18,6 +18,10 @@ var __copyProps = (to, from, except, desc) => {
18
18
  return to;
19
19
  };
20
20
  var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
21
25
  isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
22
26
  mod
23
27
  ));
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/utils.tsx", "../../../../scripts/build/transpile/react-shim.js"],
4
4
  "sourcesContent": ["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 = (options, selectedOption, valueProperty = 'value') => {\n const index = options.findIndex((option) => option[valueProperty] === selectedOption);\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", "import * as React from 'react';\nexport { React };\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,gBAAgB,CAAC,OAAO,YAAY;AAC/C,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,SAAS,QAAQ;AAAQ,WAAO,QAAQ,SAAS;AACrD,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAClF,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,mBAAmB,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEO,MAAM,OAAO,CAAC,SAAS,QAAQ,KAAK,KAAK,IAAI;AAE7C,MAAM,oBAAoB,CAAC,WAAW;AAC3C,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,YAAY,EAAE,SAAS,IAAI;AAAG,eAAW;AAEpD,QAAM,MAAM,OAAO,MAAM,GAAG;AAC5B,MAAI,OAAO,SAAS,IAAI,IAAI,EAAE;AAC9B,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,EAAE;AAC/B,QAAM,MAAM,SAAS,IAAI,IAAI,EAAE;AAE/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ACAA,YAAuB;ADAhB,MAAM,gBAAgB,CAAC,OAAO,YAAY;AAC/C,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,SAAS,QAAQ;AAAQ,WAAO,QAAQ,SAAS;AACrD,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAClF,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,aAAa,MAAM,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEO,MAAM,OAAO,CAAC,SAAS,QAAQ,KAAK,KAAK,IAAI;AAE7C,MAAM,oBAAoB,CAAC,WAAW;AAC3C,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,YAAY,EAAE,SAAS,IAAI;AAAG,eAAW;AAEpD,QAAM,MAAM,OAAO,MAAM,GAAG;AAC5B,MAAI,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAC9B,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,CAAC,GAAG,EAAE;AAC/B,QAAM,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE;AAE/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,8 @@
1
1
  import * as React from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { PropTypes, describe } from "@elliemae/ds-utilities";
3
+ import { PropTypes, describe } from "@elliemae/ds-props-helpers";
4
4
  import Moment from "moment";
5
- import TimePickerImpl from "./TimePickerImpl";
5
+ import TimePickerImpl from "./TimePickerImpl.js";
6
6
  const DSTimePicker = ({
7
7
  containerProps = {},
8
8
  innerRef,
@@ -49,23 +49,41 @@ DSTimePicker.defaultProps = {
49
49
  format: "hh:mm:ss A"
50
50
  };
51
51
  const props = {
52
+ /** a11y label */
52
53
  "aria-label": PropTypes.string.description("a11y label"),
54
+ /** inject props to time picker wrapper */
53
55
  containerProps: PropTypes.object.description("inject props to time picker wrapper"),
56
+ /** Whether the time picker is disabled or not */
54
57
  disabled: PropTypes.bool.description("Whether the time picker is disabled or not"),
58
+ /** Time picker value */
55
59
  value: PropTypes.instanceOf(Moment).description("Time picker value"),
60
+ /** Time format (hh:mm:ss, H:m:s) */
56
61
  format: PropTypes.string.description("Time format (hh:mm:ss, H:m:s)"),
62
+ /** toggle header style */
57
63
  hasHeader: PropTypes.bool.description("toggle header style"),
64
+ /** toggle header display */
58
65
  hasHeaderDisplay: PropTypes.bool.description("toggle header display"),
66
+ /** Handler when time picker value changes */
59
67
  onChange: PropTypes.func.description("Handler when time picker value changes"),
68
+ /** Handler when the time picker menu opens */
60
69
  onOpen: PropTypes.func.description("Handler when the time picker menu opens"),
70
+ /** Whether the time picker menu is opened or not */
61
71
  isOpen: PropTypes.bool.description("Whether the time picker menu is opened or not"),
72
+ /** ref for time picker input */
62
73
  innerRef: PropTypes.func.description("ref for time picker input"),
74
+ /** Enable to clear the time picker value */
63
75
  clearable: PropTypes.bool.description("Enable to clear the time picker value"),
76
+ /** class for time picker */
64
77
  className: PropTypes.string.description("class for time picker"),
78
+ /** style object */
65
79
  style: PropTypes.object.description("style object"),
80
+ /** z index for menu */
66
81
  zIndex: PropTypes.number.description("z index for menu"),
82
+ /** DSPopper placement */
67
83
  placement: PropTypes.string.description("DSPopper placement"),
84
+ /** disabled time */
68
85
  disabledTimes: PropTypes.object.description("disabled time"),
86
+ /** steps for the picker */
69
87
  minutesInterval: PropTypes.number.description("steps for the picker")
70
88
  };
71
89
  DSTimePicker.propTypes = props;
@@ -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 '@elliemae/ds-utilities';\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('inject props to time picker wrapper'),\n /** Whether the time picker is disabled or not */\n disabled: PropTypes.bool.description('Whether the time picker is disabled or not'),\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('Handler when time picker value changes'),\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('Whether the time picker menu is opened or not'),\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('Enable to clear the time picker value'),\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;\nDSTimePicker.displayName = 'DSTimePicker';\nconst DSTimePickerWithSchema = describe(DSTimePicker);\nDSTimePickerWithSchema.propTypes = props;\n\nexport { DSTimePicker, DSTimePickerWithSchema };\nexport default DSTimePicker;\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACyBrB;AAxBF,SAAS,WAAW,gBAAgB;AACpC,OAAO,YAAY;AACnB,OAAO,oBAAoB;AAE3B,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;AACpB,MACE;AAAA,EAAC;AAAA;AAAA,IACC,KAAK;AAAA,IACL,cAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AACF;AAGF,aAAa,eAAe;AAAA,EAC1B,QAAQ;AACV;AAEA,MAAM,QAAQ;AAAA,EAEZ,cAAc,UAAU,OAAO,YAAY,YAAY;AAAA,EAEvD,gBAAgB,UAAU,OAAO,YAAY,qCAAqC;AAAA,EAElF,UAAU,UAAU,KAAK,YAAY,4CAA4C;AAAA,EAEjF,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,YAAY,wCAAwC;AAAA,EAE7E,QAAQ,UAAU,KAAK,YAAY,yCAAyC;AAAA,EAE5E,QAAQ,UAAU,KAAK,YAAY,+CAA+C;AAAA,EAElF,UAAU,UAAU,KAAK,YAAY,2BAA2B;AAAA,EAEhE,WAAW,UAAU,KAAK,YAAY,uCAAuC;AAAA,EAE7E,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,aAAa,cAAc;AAC3B,MAAM,yBAAyB,SAAS,YAAY;AACpD,uBAAuB,YAAY;AAGnC,IAAO,uBAAQ;",
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { PropTypes, describe } from '@elliemae/ds-props-helpers';\nimport Moment from 'moment';\nimport TimePickerImpl from './TimePickerImpl.js';\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('inject props to time picker wrapper'),\n /** Whether the time picker is disabled or not */\n disabled: PropTypes.bool.description('Whether the time picker is disabled or not'),\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('Handler when time picker value changes'),\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('Whether the time picker menu is opened or not'),\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('Enable to clear the time picker value'),\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;\nDSTimePicker.displayName = 'DSTimePicker';\nconst DSTimePickerWithSchema = describe(DSTimePicker);\nDSTimePickerWithSchema.propTypes = props;\n\nexport { DSTimePicker, DSTimePickerWithSchema };\nexport default DSTimePicker;\n"],
5
+ "mappings": "AAAA,YAAY,WAAW;ACyBrB;AAxBF,SAAS,WAAW,gBAAgB;AACpC,OAAO,YAAY;AACnB,OAAO,oBAAoB;AAE3B,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;AACpB,MACE;AAAA,EAAC;AAAA;AAAA,IACC,KAAK;AAAA,IACL,cAAY;AAAA,IACZ;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA;AACF;AAGF,aAAa,eAAe;AAAA,EAC1B,QAAQ;AACV;AAEA,MAAM,QAAQ;AAAA;AAAA,EAEZ,cAAc,UAAU,OAAO,YAAY,YAAY;AAAA;AAAA,EAEvD,gBAAgB,UAAU,OAAO,YAAY,qCAAqC;AAAA;AAAA,EAElF,UAAU,UAAU,KAAK,YAAY,4CAA4C;AAAA;AAAA,EAEjF,OAAO,UAAU,WAAW,MAAM,EAAE,YAAY,mBAAmB;AAAA;AAAA,EAEnE,QAAQ,UAAU,OAAO,YAAY,+BAA+B;AAAA;AAAA,EAEpE,WAAW,UAAU,KAAK,YAAY,qBAAqB;AAAA;AAAA,EAE3D,kBAAkB,UAAU,KAAK,YAAY,uBAAuB;AAAA;AAAA,EAEpE,UAAU,UAAU,KAAK,YAAY,wCAAwC;AAAA;AAAA,EAE7E,QAAQ,UAAU,KAAK,YAAY,yCAAyC;AAAA;AAAA,EAE5E,QAAQ,UAAU,KAAK,YAAY,+CAA+C;AAAA;AAAA,EAElF,UAAU,UAAU,KAAK,YAAY,2BAA2B;AAAA;AAAA,EAEhE,WAAW,UAAU,KAAK,YAAY,uCAAuC;AAAA;AAAA,EAE7E,WAAW,UAAU,OAAO,YAAY,uBAAuB;AAAA;AAAA,EAE/D,OAAO,UAAU,OAAO,YAAY,cAAc;AAAA;AAAA,EAElD,QAAQ,UAAU,OAAO,YAAY,kBAAkB;AAAA;AAAA,EAEvD,WAAW,UAAU,OAAO,YAAY,oBAAoB;AAAA;AAAA,EAE5D,eAAe,UAAU,OAAO,YAAY,eAAe;AAAA;AAAA,EAE3D,iBAAiB,UAAU,OAAO,YAAY,sBAAsB;AACtE;AAEA,aAAa,YAAY;AACzB,aAAa,cAAc;AAC3B,MAAM,yBAAyB,SAAS,YAAY;AACpD,uBAAuB,YAAY;AAGnC,IAAO,uBAAQ;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,7 @@
1
1
  import * as React from "react";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { styled } from "@elliemae/ds-system";
4
- import TimePickerMenu from "./TimePickerMenu";
4
+ import TimePickerMenu from "./TimePickerMenu.js";
5
5
  const DSTimePickerMenuWrapper = styled.div`
6
6
  display: flex;
7
7
  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 '@elliemae/ds-system';\nimport TimePickerMenu from './TimePickerMenu';\n\nconst DSTimePickerMenuWrapper = styled.div`\n display: flex;\n height: 18.6rem;\n`;\nconst DSTimePickerMenu = (props) => (\n <DSTimePickerMenuWrapper>\n <TimePickerMenu {...props} />\n </DSTimePickerMenuWrapper>\n);\nexport { DSTimePickerMenu };\nexport default DSTimePickerMenu;\n"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "import React from 'react';\nimport { styled } from '@elliemae/ds-system';\nimport TimePickerMenu from './TimePickerMenu.js';\n\nconst DSTimePickerMenuWrapper = styled.div`\n display: flex;\n height: 18.6rem;\n`;\nconst DSTimePickerMenu = (props) => (\n <DSTimePickerMenuWrapper>\n <TimePickerMenu {...props} />\n </DSTimePickerMenuWrapper>\n);\nexport { DSTimePickerMenu };\nexport default DSTimePickerMenu;\n"],
5
5
  "mappings": "AAAA,YAAY,WAAW;ACUnB;AATJ,SAAS,cAAc;AACvB,OAAO,oBAAoB;AAE3B,MAAM,0BAA0B,OAAO;AAAA;AAAA;AAAA;AAIvC,MAAM,mBAAmB,CAAC,UACxB,oBAAC,2BACC,8BAAC,kBAAgB,GAAG,OAAO,GAC7B;AAGF,IAAO,2BAAQ;",
6
6
  "names": []
7
7
  }
@@ -6,8 +6,8 @@ import { aggregatedClasses } from "@elliemae/ds-classnames";
6
6
  import memoizeOne from "memoize-one";
7
7
  import { ChevronSmallUp, ChevronSmallDown } from "@elliemae/ds-icons";
8
8
  import { DSButton } from "@elliemae/ds-button";
9
- import { MoveElementOnScroll } from "./moveElementOnScroll";
10
- import { validateIndex } from "./utils";
9
+ import { MoveElementOnScroll } from "./moveElementOnScroll.js";
10
+ import { validateIndex } from "./utils.js";
11
11
  const blockName = "time-picker-panel";
12
12
  const Container = aggregatedClasses("div")(blockName, null, ({ scrolling }) => ({ scrolling }));
13
13
  const Wrapper = aggregatedClasses("div")(blockName, "wrapper");
@@ -50,6 +50,7 @@ class PickerPanel extends Component {
50
50
  this.state = {
51
51
  selectedOption: props.selected,
52
52
  activeIndex: 0,
53
+ // eslint-disable-next-line react/no-unused-state
53
54
  prevProps: {}
54
55
  };
55
56
  this.getOptionValue = this.getOptionValue.bind(this);
@@ -125,6 +126,8 @@ class PickerPanel extends Component {
125
126
  }
126
127
  );
127
128
  }
129
+ // TODO: this needs a refactor from de FocusGroup
130
+ // eslint-disable-next-line max-statements
128
131
  handleKeyDown(e) {
129
132
  const { activeIndex } = this.state;
130
133
  const { options } = this.props;
@@ -293,6 +296,7 @@ PickerPanel.defaultProps = {
293
296
  valueProperty: "value",
294
297
  labelProperty: "label",
295
298
  numberItemsOnScreen: 5,
299
+ // this number should be impair
296
300
  options: [],
297
301
  arrowStep: 1
298
302
  };
@@ -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 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": "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",
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.js';\nimport { validateIndex } from './utils.js';\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": "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",
6
6
  "names": ["React"]
7
7
  }
@@ -4,12 +4,12 @@ import { useState, useEffect, useRef } from "react";
4
4
  import PropTypes from "prop-types";
5
5
  import moment from "moment";
6
6
  import memoizeOne from "memoize-one";
7
- import { getVisibleTimeByFormat } from "@elliemae/ds-utilities";
7
+ import { getVisibleTimeByFormat, useDeprecateComponent } from "@elliemae/ds-utilities";
8
8
  import { aggregatedClasses, convertPropToCssClassName } from "@elliemae/ds-classnames";
9
9
  import { DSInput, DSInputGroup, TimeInputImpl } from "@elliemae/ds-form";
10
- import TimePickerMenu from "./TimePickerMenu";
11
- import TimePickerDropdown from "./TimePickerDropdown";
12
- import { convertTimeString } from "./utils";
10
+ import TimePickerMenu from "./TimePickerMenu.js";
11
+ import TimePickerDropdown from "./TimePickerDropdown.js";
12
+ import { convertTimeString } from "./utils.js";
13
13
  const blockName = "time-picker";
14
14
  const TimePickerContainer = aggregatedClasses(DSInputGroup)(blockName, null, ({ isMenuOpened }) => ({
15
15
  isMenuOpened
@@ -29,6 +29,7 @@ const TimePickerImpl = ({
29
29
  disabledTimes,
30
30
  minutesInterval
31
31
  }) => {
32
+ useDeprecateComponent({ componentName: "ds-time-picker", version: "TBD Date: 2023 Q3" });
32
33
  const [time, setTime] = useState();
33
34
  const [isMenuOpened, setIsMenuOpened] = useState(false);
34
35
  const [focusedColumn, setFocusedColumn] = useState(null);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 default TimePickerImpl;\n"],
5
- "mappings": "AAAA,YAAY,WAAW;ACuHT;AArHd,SAAgB,UAAU,WAAW,cAAc;AACnD,OAAO,eAAe;AACtB,OAAO,YAAY;AACnB,OAAO,gBAAgB;AACvB,SAAS,8BAA8B;AACvC,SAAS,mBAAmB,iCAAiC;AAC7D,SAAS,SAAS,cAAc,qBAAqB;AACrD,OAAO,oBAAoB;AAC3B,OAAO,wBAAwB;AAC/B,SAAS,yBAAyB;AAElC,MAAM,YAAY;AAElB,MAAM,sBAAsB,kBAAkB,YAAY,EAAE,WAAW,MAAM,CAAC,EAAE,aAAa,OAAO;AAAA,EAClG;AACF,EAAE;AAEF,MAAM,iBAAiB,CAAC;AAAA,EACtB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,MAAM;AACJ,QAAM,CAAC,MAAM,OAAO,IAAI,SAAS;AACjC,QAAM,CAAC,cAAc,eAAe,IAAI,SAAS,KAAK;AACtD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,IAAI;AACvD,QAAM,gBAAgB,OAAO;AAC7B,YAAU,MAAM;AACd,QAAI,OAAO,KAAK,EAAE,QAAQ;AAAG,cAAQ,OAAO,KAAK,CAAC;AAAA,aACzC,UAAU;AAAM,cAAQ,MAAS;AAAA,EAC5C,GAAG,CAAC,KAAK,CAAC;AAEV,YAAU,MAAM;AACd,WAAO,iBAAiB,SAAS,oBAAoB,KAAK;AAC1D,WAAO,MAAM,OAAO,oBAAoB,SAAS,oBAAoB,KAAK;AAAA,EAC5E,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,WAAO,iBAAiB,WAAW,eAAe,KAAK;AACvD,WAAO,MAAM,OAAO,oBAAoB,WAAW,eAAe,KAAK;AAAA,EACzE,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,QAAI;AAAc,wBAAkB;AAAA,EACtC,GAAG,CAAC,YAAY,CAAC;AAEjB,QAAM,qBAAqB,MAAM;AAC/B,QAAI;AAAc,sBAAgB,KAAK;AAAA,EACzC;AAEA,QAAM,gBAAgB,CAAC,UAAU;AAC/B,UAAM,EAAE,IAAI,IAAI;AAChB,UAAM,eAAe,CAAC,UAAU,KAAK,OAAO;AAC5C,QAAI,aAAa,SAAS,GAAG;AAAG,sBAAgB,KAAK;AAAA,EACvD;AAEA,QAAM,oBAAoB,MAAM;AAC9B,UAAM,CAAC,WAAW,IAAI,SAAS,uBAAuB,yBAAyB;AAC/E,QAAI,eAAe,CAAC,eAAe;AACjC,uBAAiB,WAAW;AAC5B,kBAAY,MAAM;AAAA,IACpB;AAAA,EACF;AAEA,QAAM,qBAAqB,CAAC,YAAY;AACtC,YAAQ,OAAO,OAAO,CAAC;AACvB,aAAS,OAAO,OAAO,CAAC;AAAA,EAC1B;AAEA,QAAM,oBAAoB,CAAC,YAAY;AACrC,YAAQ,OAAO;AACf,aAAS,OAAO;AAAA,EAClB;AAEA,QAAM,iBAAiB,CAAC,WAAW;AACjC,WAAO,MAAM;AACb,oBAAgB,MAAM;AACtB,QAAI,CAAC;AAAQ,uBAAiB,IAAI;AAAA,EACpC;AAEA,QAAM,uBAAuB,WAAW,CAACA,YAAW,uBAAuBA,OAAM,CAAC;AAClF,QAAM,sBAAsB,0BAA0B,SAAS;AAC/D,QAAM,gBAAgB,qBAAqB,MAAM;AAEjD,QAAM,oBAAoB,iBAAiB;AAAA,IACzC,MAAM,kBAAkB,cAAc,IAAI;AAAA,IAC1C,IAAI,kBAAkB,cAAc,EAAE;AAAA,EACxC;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,WAAW,GAAG,qBAAqB,CAAC,WAAW,YAAY;AAAA,MAC3D;AAAA,MACA;AAAA,MACA,YACE;AAAA,QAAC;AAAA;AAAA,UACC,WAAW;AAAA,UACX;AAAA,UACA,QAAQ;AAAA,UACR;AAAA,UACA;AAAA,UACA,QAAQ;AAAA,UACR,SAAS,CAAC,MAAM;AACd,cAAE,eAAe;AACjB,2BAAe,CAAC,YAAY;AAAA,UAC9B;AAAA,UACA,MACE,oBAAC,SAAI,KAAK,eACR;AAAA,YAAC;AAAA;AAAA,cACC;AAAA,cACA,eAAe;AAAA,cACf;AAAA,cACA;AAAA,cACA;AAAA,cACA,cAAc;AAAA,cACd;AAAA,cACA;AAAA,cACC,GAAG;AAAA;AAAA,UACN,GACF;AAAA;AAAA,MAEJ;AAAA,MAGF;AAAA,QAAC;AAAA;AAAA,UACC,iBAAiB,CAAC,EAAE,UAAU,iBAAiB,eAAe,MAC5D,oBAAC,iBAAc,WAAS,MAAC,UAAoB,QAAgB,UAAU,cAAe,GAAG,gBAAgB;AAAA,UAE3G,qBAAqB;AAAA,UACrB;AAAA,UACA,UAAU;AAAA,UACV,OAAO;AAAA;AAAA,MACT;AAAA;AAAA,EACF;AAEJ;AAEA,eAAe,YAAY;AAAA,EACzB,OAAO,UAAU,WAAW,MAAM,MAAM;AAAA,EACxC,UAAU,UAAU;AAAA,EACpB,QAAQ,UAAU;AAAA,EAClB,QAAQ,UAAU;AAAA,EAClB,UAAU,UAAU;AAAA,EACpB,WAAW,UAAU;AAAA,EACrB,kBAAkB,UAAU;AAAA,EAC5B,WAAW,UAAU;AAAA,EACrB,gBAAgB,UAAU;AAAA,EAC1B,WAAW,UAAU;AAAA,EACrB,QAAQ,UAAU;AAAA,EAClB,eAAe,UAAU;AAAA,EACzB,iBAAiB,UAAU;AAC7B;AAEA,IAAO,yBAAQ;",
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, useDeprecateComponent } from '@elliemae/ds-utilities';\nimport { aggregatedClasses, convertPropToCssClassName } from '@elliemae/ds-classnames';\nimport { DSInput, DSInputGroup, TimeInputImpl } from '@elliemae/ds-form';\nimport TimePickerMenu from './TimePickerMenu.js';\nimport TimePickerDropdown from './TimePickerDropdown.js';\nimport { convertTimeString } from './utils.js';\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 useDeprecateComponent({ componentName: 'ds-time-picker', version: 'TBD Date: 2023 Q3' });\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 default TimePickerImpl;\n"],
5
+ "mappings": "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",
6
6
  "names": ["format"]
7
7
  }
@@ -5,8 +5,8 @@ import PropTypes from "prop-types";
5
5
  import { aggregatedClasses } from "@elliemae/ds-classnames";
6
6
  import moment from "moment";
7
7
  import { range, addLeadingZeros } from "@elliemae/ds-utilities";
8
- import { isAM } from "./utils";
9
- import PickerPanel from "./PickerPanel";
8
+ import { isAM } from "./utils.js";
9
+ import PickerPanel from "./PickerPanel.js";
10
10
  const blockName = "time-picker-menu";
11
11
  const TimePickerContainer = aggregatedClasses("div")(blockName);
12
12
  const TimePickerHeader = aggregatedClasses("div")(blockName, "header");
@@ -226,12 +226,19 @@ TimePickerMenu.defaultProps = {
226
226
  onTimeChange: () => null
227
227
  };
228
228
  TimePickerMenu.propTypes = {
229
+ /** Time value */
229
230
  time: PropTypes.instanceOf(moment),
231
+ /** If the menu has header or not */
230
232
  hasHeader: PropTypes.bool,
233
+ /** Whether to use the 12 hours format */
231
234
  use12Hours: PropTypes.bool,
235
+ /** Whether show 'seconds' or not */
232
236
  showSeconds: PropTypes.bool,
237
+ /** Whether show 'minutes' or not */
233
238
  showMinutes: PropTypes.bool,
239
+ /** Whether show 'hours' or not */
234
240
  showHours: PropTypes.bool,
241
+ /** Handler when time changes */
235
242
  onTimeChange: PropTypes.func,
236
243
  disabledTimes: PropTypes.object
237
244
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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 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"],
5
- "mappings": "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",
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.js';\nimport PickerPanel from './PickerPanel.js';\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"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
package/dist/esm/index.js CHANGED
@@ -1,9 +1,9 @@
1
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";
2
+ export * from "./DSTimePicker.js";
3
+ export * from "./TimePickerMenu.js";
4
+ export * from "./DSTimePickerMenu.js";
5
+ import { convertTimeString } from "./utils.js";
6
+ import { default as default2 } from "./DSTimePicker.js";
7
7
  export {
8
8
  convertTimeString,
9
9
  default2 as default
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
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"],
4
+ "sourcesContent": ["import * as React from 'react';\nexport { React };\n", "export * from './DSTimePicker.js';\nexport * from './TimePickerMenu.js';\nexport * from './DSTimePickerMenu.js';\n\nexport { convertTimeString } from './utils.js'; // this is an exception, we should move utils to shared tho?\n\nexport { default } from './DSTimePicker.js';\n"],
5
5
  "mappings": "AAAA,YAAY,WAAW;ACAvB,cAAc;AACd,cAAc;AACd,cAAc;AAEd,SAAS,yBAAyB;AAElC,SAAS,WAAAA,gBAAe;",
6
6
  "names": ["default"]
7
7
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "type": "module",
3
+ "sideEffects": [
4
+ "*.css",
5
+ "*.scss"
6
+ ]
7
+ }
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../scripts/build/transpile/react-shim.js", "../../src/utils.tsx"],
4
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 = (options, selectedOption, valueProperty = 'value') => {\n const index = options.findIndex((option) => option[valueProperty] === selectedOption);\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,YAAY,WAAW;ACAhB,MAAM,gBAAgB,CAAC,OAAO,YAAY;AAC/C,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,SAAS,QAAQ;AAAQ,WAAO,QAAQ,SAAS;AACrD,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAClF,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,mBAAmB,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEO,MAAM,OAAO,CAAC,SAAS,QAAQ,KAAK,KAAK,IAAI;AAE7C,MAAM,oBAAoB,CAAC,WAAW;AAC3C,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,YAAY,EAAE,SAAS,IAAI;AAAG,eAAW;AAEpD,QAAM,MAAM,OAAO,MAAM,GAAG;AAC5B,MAAI,OAAO,SAAS,IAAI,IAAI,EAAE;AAC9B,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,EAAE;AAC/B,QAAM,MAAM,SAAS,IAAI,IAAI,EAAE;AAE/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
5
+ "mappings": "AAAA,YAAY,WAAW;ACAhB,MAAM,gBAAgB,CAAC,OAAO,YAAY;AAC/C,MAAI,QAAQ;AAAG,WAAO;AACtB,MAAI,SAAS,QAAQ;AAAQ,WAAO,QAAQ,SAAS;AACrD,SAAO;AACT;AAEO,MAAM,iBAAiB,CAAC,SAAS,gBAAgB,gBAAgB,YAAY;AAClF,QAAM,QAAQ,QAAQ,UAAU,CAAC,WAAW,OAAO,aAAa,MAAM,cAAc;AACpF,SAAO,cAAc,OAAO,OAAO;AACrC;AAEO,MAAM,OAAO,CAAC,SAAS,QAAQ,KAAK,KAAK,IAAI;AAE7C,MAAM,oBAAoB,CAAC,WAAW;AAC3C,MAAI,CAAC;AAAQ,WAAO;AACpB,MAAI,WAAW;AACf,MAAI,OAAO,YAAY,EAAE,SAAS,IAAI;AAAG,eAAW;AAEpD,QAAM,MAAM,OAAO,MAAM,GAAG;AAC5B,MAAI,OAAO,SAAS,IAAI,CAAC,GAAG,EAAE;AAC9B,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,CAAC,GAAG,EAAE;AAC/B,QAAM,MAAM,SAAS,IAAI,CAAC,GAAG,EAAE;AAE/B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliemae/ds-time-picker",
3
- "version": "3.16.0-next.2",
3
+ "version": "3.16.0-next.21",
4
4
  "license": "MIT",
5
5
  "description": "ICE MT - Dimsum - Time Picker",
6
6
  "files": [
@@ -68,18 +68,19 @@
68
68
  },
69
69
  "dependencies": {
70
70
  "memoize-one": "~6.0.0",
71
- "moment": "~2.29.1",
71
+ "moment": "~2.29.4",
72
72
  "prop-types": "~15.8.1",
73
- "@elliemae/ds-button": "3.16.0-next.2",
74
- "@elliemae/ds-classnames": "3.16.0-next.2",
75
- "@elliemae/ds-form": "3.16.0-next.2",
76
- "@elliemae/ds-icons": "3.16.0-next.2",
77
- "@elliemae/ds-popper": "3.16.0-next.2",
78
- "@elliemae/ds-system": "3.16.0-next.2",
79
- "@elliemae/ds-utilities": "3.16.0-next.2"
73
+ "@elliemae/ds-button": "3.16.0-next.21",
74
+ "@elliemae/ds-classnames": "3.16.0-next.21",
75
+ "@elliemae/ds-form": "3.16.0-next.21",
76
+ "@elliemae/ds-icons": "3.16.0-next.21",
77
+ "@elliemae/ds-popper": "3.16.0-next.21",
78
+ "@elliemae/ds-props-helpers": "3.16.0-next.21",
79
+ "@elliemae/ds-system": "3.16.0-next.21",
80
+ "@elliemae/ds-utilities": "3.16.0-next.21"
80
81
  },
81
82
  "devDependencies": {
82
- "styled-components": "~5.3.6"
83
+ "styled-components": "~5.3.9"
83
84
  },
84
85
  "peerDependencies": {
85
86
  "lodash": "^4.17.21",
@@ -95,10 +96,10 @@
95
96
  "dev": "cross-env NODE_ENV=development node ../../scripts/build/build.mjs --watch",
96
97
  "test": "node ../../scripts/testing/test.mjs",
97
98
  "lint": "node ../../scripts/lint.mjs",
98
- "eslint:fix": "eslint --ext='.js,.jsx,.test.js,.ts,.tsx' --fix --config='../../.eslintrc.js' src/",
99
- "dts": "node ../../scripts/dts.mjs",
99
+ "eslint:fix": "exit 0",
100
+ "dts": "exit 0",
100
101
  "build": "cross-env NODE_ENV=production node ../../scripts/build/build.mjs",
101
- "dev:build": "pnpm --filter {.}... build && pnpm --filter {.}... dts",
102
+ "dev:build": "pnpm --filter {.}... build",
102
103
  "dev:install": "pnpm --filter {.}... i --no-lockfile && pnpm run dev:build",
103
104
  "checkDeps": "npx -yes ../ds-codemods check-missing-packages --projectFolderPath=\"./\" --ignorePackagesGlobPattern=\"\" --ignoreFilesGlobPattern=\"**/test-ables/*,**/tests/*\""
104
105
  }