box-ui-elements 15.0.0-beta.21 → 15.0.0-beta.25

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 (102) hide show
  1. package/dist/explorer.css +1 -1
  2. package/dist/explorer.js +12 -12
  3. package/dist/openwith.js +7 -7
  4. package/dist/picker.js +7 -7
  5. package/dist/preview.css +1 -1
  6. package/dist/preview.js +11 -11
  7. package/dist/sharing.css +1 -1
  8. package/dist/sharing.js +15 -15
  9. package/dist/sidebar.css +1 -1
  10. package/dist/sidebar.js +11 -11
  11. package/dist/uploader.js +6 -6
  12. package/es/components/date-picker/AccessiblePikaday.js +8 -0
  13. package/es/components/date-picker/AccessiblePikaday.js.map +1 -1
  14. package/es/components/date-picker/DatePicker.js +54 -26
  15. package/es/components/date-picker/DatePicker.js.map +1 -1
  16. package/es/components/date-picker/DatePicker.scss +12 -16
  17. package/es/components/date-picker/_pikaday.scss +8 -1
  18. package/es/components/flyout/Flyout.js +1 -1
  19. package/es/components/flyout/Flyout.js.flow +1 -1
  20. package/es/components/flyout/Flyout.js.map +1 -1
  21. package/es/components/media-query/constants.js +26 -0
  22. package/es/components/media-query/constants.js.flow +31 -0
  23. package/es/components/media-query/constants.js.map +1 -0
  24. package/es/components/media-query/index.js +3 -0
  25. package/es/components/media-query/index.js.flow +4 -0
  26. package/es/components/media-query/index.js.map +1 -0
  27. package/es/components/media-query/stories/MediaQuery.stories.js +37 -0
  28. package/es/components/media-query/stories/MediaQuery.stories.js.flow +80 -0
  29. package/es/components/media-query/stories/MediaQuery.stories.js.map +1 -0
  30. package/es/components/media-query/types.js +2 -0
  31. package/es/components/media-query/types.js.flow +29 -0
  32. package/es/components/media-query/types.js.map +1 -0
  33. package/es/components/media-query/useMediaQuery.js +91 -0
  34. package/es/components/media-query/useMediaQuery.js.flow +97 -0
  35. package/es/components/media-query/useMediaQuery.js.map +1 -0
  36. package/es/components/media-query/withMediaQuery.js +21 -0
  37. package/es/components/media-query/withMediaQuery.js.flow +23 -0
  38. package/es/components/media-query/withMediaQuery.js.map +1 -0
  39. package/es/features/classification/constants.js +2 -1
  40. package/es/features/classification/constants.js.flow +2 -0
  41. package/es/features/classification/constants.js.map +1 -1
  42. package/es/features/classification/flowTypes.js.flow +5 -0
  43. package/es/features/classification/flowTypes.js.map +1 -1
  44. package/es/features/classification/security-controls/SecurityControls.js +1 -2
  45. package/es/features/classification/security-controls/SecurityControls.js.flow +1 -2
  46. package/es/features/classification/security-controls/SecurityControls.js.map +1 -1
  47. package/es/features/classification/security-controls/messages.js +8 -0
  48. package/es/features/classification/security-controls/messages.js.flow +10 -0
  49. package/es/features/classification/security-controls/messages.js.map +1 -1
  50. package/es/features/classification/security-controls/utils.js +45 -35
  51. package/es/features/classification/security-controls/utils.js.flow +32 -27
  52. package/es/features/classification/security-controls/utils.js.map +1 -1
  53. package/i18n/bn-IN.js +2 -0
  54. package/i18n/da-DK.js +2 -0
  55. package/i18n/de-DE.js +2 -0
  56. package/i18n/en-AU.js +2 -0
  57. package/i18n/en-CA.js +2 -0
  58. package/i18n/en-GB.js +2 -0
  59. package/i18n/en-US.js +2 -0
  60. package/i18n/en-US.properties +4 -0
  61. package/i18n/en-x-pseudo.js +2 -0
  62. package/i18n/es-419.js +2 -0
  63. package/i18n/es-ES.js +2 -0
  64. package/i18n/fi-FI.js +2 -0
  65. package/i18n/fr-CA.js +2 -0
  66. package/i18n/fr-FR.js +2 -0
  67. package/i18n/hi-IN.js +2 -0
  68. package/i18n/it-IT.js +2 -0
  69. package/i18n/ja-JP.js +2 -0
  70. package/i18n/ko-KR.js +2 -0
  71. package/i18n/nb-NO.js +2 -0
  72. package/i18n/nl-NL.js +2 -0
  73. package/i18n/pl-PL.js +2 -0
  74. package/i18n/pt-BR.js +2 -0
  75. package/i18n/ru-RU.js +2 -0
  76. package/i18n/sv-SE.js +2 -0
  77. package/i18n/tr-TR.js +2 -0
  78. package/i18n/zh-CN.js +2 -0
  79. package/i18n/zh-TW.js +2 -0
  80. package/package.json +3 -1
  81. package/src/__mocks__/pikaday.js +1 -0
  82. package/src/components/date-picker/AccessiblePikaday.ts +6 -0
  83. package/src/components/date-picker/DatePicker.scss +12 -16
  84. package/src/components/date-picker/DatePicker.tsx +46 -24
  85. package/src/components/date-picker/__tests__/DatePicker.test.tsx +41 -0
  86. package/src/components/date-picker/_pikaday.scss +8 -1
  87. package/src/components/flyout/Flyout.js +1 -1
  88. package/src/components/media-query/__tests__/useMediaQuery.test.js +48 -0
  89. package/src/components/media-query/__tests__/withMediaQuery.test.js +29 -0
  90. package/src/components/media-query/constants.js +31 -0
  91. package/src/components/media-query/index.js +4 -0
  92. package/src/components/media-query/stories/MediaQuery.stories.js +80 -0
  93. package/src/components/media-query/stories/MediaQuery.stories.md +29 -0
  94. package/src/components/media-query/types.js +29 -0
  95. package/src/components/media-query/useMediaQuery.js +97 -0
  96. package/src/components/media-query/withMediaQuery.js +23 -0
  97. package/src/features/classification/constants.js +2 -0
  98. package/src/features/classification/flowTypes.js +5 -0
  99. package/src/features/classification/security-controls/SecurityControls.js +1 -2
  100. package/src/features/classification/security-controls/__tests__/utils.test.js +33 -18
  101. package/src/features/classification/security-controls/messages.js +10 -0
  102. package/src/features/classification/security-controls/utils.js +32 -27
@@ -48,6 +48,12 @@ function (_Pikaday) {
48
48
 
49
49
  if (_this.isVisible() && !_this.el.contains(event.target)) {
50
50
  _this.hide();
51
+
52
+ var currentFocusEl = document.activeElement;
53
+
54
+ if (_this.accessibleFieldEl && currentFocusEl && currentFocusEl.tabIndex < 0) {
55
+ _this.accessibleFieldEl.focus();
56
+ }
51
57
  }
52
58
  });
53
59
 
@@ -57,6 +63,8 @@ function (_Pikaday) {
57
63
  // https://github.com/Pikaday/Pikaday/blob/master/pikaday.js#L695-L703
58
64
 
59
65
  if (_this.accessibleFieldEl) {
66
+ _this.el.classList.add('is-bound');
67
+
60
68
  document.body.appendChild(_this.el);
61
69
 
62
70
  _this.accessibleFieldEl.addEventListener('blur', _this.handleBlur);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/date-picker/AccessiblePikaday.ts"],"names":["Pikaday","AccessiblePikaday","options","hide","event","isVisible","datePickerButtonEl","contains","target","el","accessibleFieldEl","document","body","appendChild","addEventListener","handleBlur","handleClickOutside","adjustPosition","removeEventListener"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,OAAP,MAAwC,SAAxC;;AAOA;IACMC,iB;;;;;AAKF,6BAAYC,OAAZ,EAA+C;AAAA;;AAAA;;AAC3C,2FAAMA,OAAN;;AAD2C,iEAiBlC,YAAM;AACf,YAAKC,IAAL;AACH,KAnB8C;;AAAA,yEAqB1B,UAACC,KAAD,EAAuB;AACxC,UACI,MAAKC,SAAL,MACA,MAAKC,kBADL,IAEA,MAAKA,kBAAL,CAAwBC,QAAxB,CAAiCH,KAAK,CAACI,MAAvC,CAHJ,EAIE;AACE;AACH;;AAED,UAAI,MAAKH,SAAL,MAAoB,CAAC,MAAKI,EAAL,CAAQF,QAAR,CAAiBH,KAAK,CAACI,MAAvB,CAAzB,EAAwE;AACpE,cAAKL,IAAL;AACH;AACJ,KAjC8C;;AAE3C,UAAKO,iBAAL,GAAyBR,OAAO,CAACQ,iBAAjC;AACA,UAAKJ,kBAAL,GAA0BJ,OAAO,CAACI,kBAAlC,CAH2C,CAK3C;AACA;AACA;;AACA,QAAI,MAAKI,iBAAT,EAA4B;AACxBC,MAAAA,QAAQ,CAACC,IAAT,CAAcC,WAAd,CAA0B,MAAKJ,EAA/B;;AAEA,YAAKC,iBAAL,CAAuBI,gBAAvB,CAAwC,MAAxC,EAAgD,MAAKC,UAArD;;AAEA,YAAKZ,IAAL;AACH;;AAd0C;AAe9C;;;;2BAoBM;AACH;;AACA,UAAI,KAAKO,iBAAT,EAA4B;AACxBC,QAAAA,QAAQ,CAACG,gBAAT,CAA0B,OAA1B,EAAmC,KAAKE,kBAAxC,EAA4D,IAA5D;AACA,aAAKC,cAAL;AACH;AACJ;;;2BAEM;AACH;;AACA,UAAI,KAAKP,iBAAT,EAA4B;AACxBC,QAAAA,QAAQ,CAACO,mBAAT,CAA6B,OAA7B,EAAsC,KAAKF,kBAA3C;AACH;AACJ;;;8BAES;AACN;;AACA,UAAI,KAAKN,iBAAT,EAA4B;AACxB,aAAKA,iBAAL,CAAuBQ,mBAAvB,CAA2C,MAA3C,EAAmD,KAAKH,UAAxD;AACAJ,QAAAA,QAAQ,CAACO,mBAAT,CAA6B,OAA7B,EAAsC,KAAKF,kBAA3C;AACH;AACJ;;;;EA7D2BhB,O;;AAgEhC,eAAeC,iBAAf","sourcesContent":["import Pikaday, { PikadayOptions } from 'pikaday';\n\nexport interface AccessiblePikadayOptions extends PikadayOptions {\n accessibleFieldEl?: HTMLElement | null | undefined;\n datePickerButtonEl?: HTMLElement | null | undefined;\n}\n\n// An extended version of Pikaday to work when `isAccessible` prop is `true`\nclass AccessiblePikaday extends Pikaday {\n accessibleFieldEl: HTMLElement | null | undefined;\n\n datePickerButtonEl: HTMLElement | null | undefined;\n\n constructor(options: AccessiblePikadayOptions) {\n super(options);\n this.accessibleFieldEl = options.accessibleFieldEl;\n this.datePickerButtonEl = options.datePickerButtonEl;\n\n // Override behavior as if `options.field` and `options.bound` were set.\n // See https://github.com/Pikaday/Pikaday/blob/master/pikaday.js#L671\n // https://github.com/Pikaday/Pikaday/blob/master/pikaday.js#L695-L703\n if (this.accessibleFieldEl) {\n document.body.appendChild(this.el);\n\n this.accessibleFieldEl.addEventListener('blur', this.handleBlur);\n\n this.hide();\n }\n }\n\n handleBlur = () => {\n this.hide();\n };\n\n handleClickOutside = (event: MouseEvent) => {\n if (\n this.isVisible() &&\n this.datePickerButtonEl &&\n this.datePickerButtonEl.contains(event.target as HTMLElement)\n ) {\n return;\n }\n\n if (this.isVisible() && !this.el.contains(event.target as HTMLElement)) {\n this.hide();\n }\n };\n\n show() {\n super.show();\n if (this.accessibleFieldEl) {\n document.addEventListener('click', this.handleClickOutside, true);\n this.adjustPosition();\n }\n }\n\n hide() {\n super.hide();\n if (this.accessibleFieldEl) {\n document.removeEventListener('click', this.handleClickOutside);\n }\n }\n\n destroy() {\n super.destroy();\n if (this.accessibleFieldEl) {\n this.accessibleFieldEl.removeEventListener('blur', this.handleBlur);\n document.removeEventListener('click', this.handleClickOutside);\n }\n }\n}\n\nexport default AccessiblePikaday;\n"],"file":"AccessiblePikaday.js"}
1
+ {"version":3,"sources":["../../../src/components/date-picker/AccessiblePikaday.ts"],"names":["Pikaday","AccessiblePikaday","options","hide","event","isVisible","datePickerButtonEl","contains","target","el","currentFocusEl","document","activeElement","accessibleFieldEl","tabIndex","focus","classList","add","body","appendChild","addEventListener","handleBlur","handleClickOutside","adjustPosition","removeEventListener"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAAA,OAAOA,OAAP,MAAwC,SAAxC;;AAOA;IACMC,iB;;;;;AAKF,6BAAYC,OAAZ,EAA+C;AAAA;;AAAA;;AAC3C,2FAAMA,OAAN;;AAD2C,iEAkBlC,YAAM;AACf,YAAKC,IAAL;AACH,KApB8C;;AAAA,yEAsB1B,UAACC,KAAD,EAAuB;AACxC,UACI,MAAKC,SAAL,MACA,MAAKC,kBADL,IAEA,MAAKA,kBAAL,CAAwBC,QAAxB,CAAiCH,KAAK,CAACI,MAAvC,CAHJ,EAIE;AACE;AACH;;AAED,UAAI,MAAKH,SAAL,MAAoB,CAAC,MAAKI,EAAL,CAAQF,QAAR,CAAiBH,KAAK,CAACI,MAAvB,CAAzB,EAAwE;AACpE,cAAKL,IAAL;;AAEA,YAAMO,cAAc,GAAGC,QAAQ,CAACC,aAAhC;;AACA,YAAI,MAAKC,iBAAL,IAA0BH,cAA1B,IAA4CA,cAAc,CAACI,QAAf,GAA0B,CAA1E,EAA6E;AACzE,gBAAKD,iBAAL,CAAuBE,KAAvB;AACH;AACJ;AACJ,KAvC8C;;AAE3C,UAAKF,iBAAL,GAAyBX,OAAO,CAACW,iBAAjC;AACA,UAAKP,kBAAL,GAA0BJ,OAAO,CAACI,kBAAlC,CAH2C,CAK3C;AACA;AACA;;AACA,QAAI,MAAKO,iBAAT,EAA4B;AACxB,YAAKJ,EAAL,CAAQO,SAAR,CAAkBC,GAAlB,CAAsB,UAAtB;;AACAN,MAAAA,QAAQ,CAACO,IAAT,CAAcC,WAAd,CAA0B,MAAKV,EAA/B;;AAEA,YAAKI,iBAAL,CAAuBO,gBAAvB,CAAwC,MAAxC,EAAgD,MAAKC,UAArD;;AAEA,YAAKlB,IAAL;AACH;;AAf0C;AAgB9C;;;;2BAyBM;AACH;;AACA,UAAI,KAAKU,iBAAT,EAA4B;AACxBF,QAAAA,QAAQ,CAACS,gBAAT,CAA0B,OAA1B,EAAmC,KAAKE,kBAAxC,EAA4D,IAA5D;AACA,aAAKC,cAAL;AACH;AACJ;;;2BAEM;AACH;;AACA,UAAI,KAAKV,iBAAT,EAA4B;AACxBF,QAAAA,QAAQ,CAACa,mBAAT,CAA6B,OAA7B,EAAsC,KAAKF,kBAA3C;AACH;AACJ;;;8BAES;AACN;;AACA,UAAI,KAAKT,iBAAT,EAA4B;AACxB,aAAKA,iBAAL,CAAuBW,mBAAvB,CAA2C,MAA3C,EAAmD,KAAKH,UAAxD;AACAV,QAAAA,QAAQ,CAACa,mBAAT,CAA6B,OAA7B,EAAsC,KAAKF,kBAA3C;AACH;AACJ;;;;EAnE2BtB,O;;AAsEhC,eAAeC,iBAAf","sourcesContent":["import Pikaday, { PikadayOptions } from 'pikaday';\n\nexport interface AccessiblePikadayOptions extends PikadayOptions {\n accessibleFieldEl?: HTMLElement | null | undefined;\n datePickerButtonEl?: HTMLElement | null | undefined;\n}\n\n// An extended version of Pikaday to work when `isAccessible` prop is `true`\nclass AccessiblePikaday extends Pikaday {\n accessibleFieldEl: HTMLElement | null | undefined;\n\n datePickerButtonEl: HTMLElement | null | undefined;\n\n constructor(options: AccessiblePikadayOptions) {\n super(options);\n this.accessibleFieldEl = options.accessibleFieldEl;\n this.datePickerButtonEl = options.datePickerButtonEl;\n\n // Override behavior as if `options.field` and `options.bound` were set.\n // See https://github.com/Pikaday/Pikaday/blob/master/pikaday.js#L671\n // https://github.com/Pikaday/Pikaday/blob/master/pikaday.js#L695-L703\n if (this.accessibleFieldEl) {\n this.el.classList.add('is-bound');\n document.body.appendChild(this.el);\n\n this.accessibleFieldEl.addEventListener('blur', this.handleBlur);\n\n this.hide();\n }\n }\n\n handleBlur = () => {\n this.hide();\n };\n\n handleClickOutside = (event: MouseEvent) => {\n if (\n this.isVisible() &&\n this.datePickerButtonEl &&\n this.datePickerButtonEl.contains(event.target as HTMLElement)\n ) {\n return;\n }\n\n if (this.isVisible() && !this.el.contains(event.target as HTMLElement)) {\n this.hide();\n\n const currentFocusEl = document.activeElement as HTMLElement;\n if (this.accessibleFieldEl && currentFocusEl && currentFocusEl.tabIndex < 0) {\n this.accessibleFieldEl.focus();\n }\n }\n };\n\n show() {\n super.show();\n if (this.accessibleFieldEl) {\n document.addEventListener('click', this.handleClickOutside, true);\n this.adjustPosition();\n }\n }\n\n hide() {\n super.hide();\n if (this.accessibleFieldEl) {\n document.removeEventListener('click', this.handleClickOutside);\n }\n }\n\n destroy() {\n super.destroy();\n if (this.accessibleFieldEl) {\n this.accessibleFieldEl.removeEventListener('blur', this.handleBlur);\n document.removeEventListener('click', this.handleClickOutside);\n }\n }\n}\n\nexport default AccessiblePikaday;\n"],"file":"AccessiblePikaday.js"}
@@ -34,9 +34,7 @@ import uniqueId from 'lodash/uniqueId'; // @ts-ignore flow import
34
34
  import { RESIN_TAG_TARGET } from '../../common/variables';
35
35
  import Alert16 from '../../icon/fill/Alert16';
36
36
  import Calendar16 from '../../icon/fill/Calendar16';
37
- import ClearBadge16 from '../../icon/fill/ClearBadge16'; // @ts-ignore flow import
38
-
39
- import Browser from '../../utils/Browser';
37
+ import ClearBadge16 from '../../icon/fill/ClearBadge16';
40
38
  import AccessiblePikaday from './AccessiblePikaday';
41
39
  import { ButtonType } from '../button';
42
40
  import Label from '../label';
@@ -168,6 +166,7 @@ function (_React$Component) {
168
166
  var _this$props = _this.props,
169
167
  onChange = _this$props.onChange,
170
168
  isAccessible = _this$props.isAccessible;
169
+ var isDateInputInvalid = _this.state.isDateInputInvalid;
171
170
 
172
171
  if (onChange) {
173
172
  var formattedDate = _this.formatValue(date);
@@ -184,8 +183,17 @@ function (_React$Component) {
184
183
 
185
184
  if (_this.datePicker && _this.datePicker.isVisible()) {
186
185
  _this.datePicker.hide();
186
+
187
+ _this.focusDatePicker();
187
188
  }
188
189
  }
190
+
191
+ if (isDateInputInvalid) {
192
+ _this.setState({
193
+ isDateInputInvalid: false,
194
+ showDateInputError: false
195
+ });
196
+ }
189
197
  });
190
198
 
191
199
  _defineProperty(_assertThisInitialized(_this), "datePicker", null);
@@ -195,7 +203,7 @@ function (_React$Component) {
195
203
  _defineProperty(_assertThisInitialized(_this), "shouldStayClosed", false);
196
204
 
197
205
  _defineProperty(_assertThisInitialized(_this), "focusDatePicker", function () {
198
- // By default, this will open the datepicker too
206
+ // This also opens the date picker when isAccessible is disabled
199
207
  if (_this.dateInputEl) {
200
208
  _this.dateInputEl.focus();
201
209
  }
@@ -288,7 +296,7 @@ function (_React$Component) {
288
296
 
289
297
  if (parsedDate) {
290
298
  if (minDate && parsedDate < minDate || maxDate && parsedDate > maxDate) {
291
- _this.datePicker.setDate(null, true);
299
+ _this.datePicker.setDate(null);
292
300
 
293
301
  _this.setState({
294
302
  isDateInputInvalid: true
@@ -343,7 +351,7 @@ function (_React$Component) {
343
351
 
344
352
  if (onBlur) {
345
353
  onBlur(event);
346
- } // Since we Fire parent onChange event if isTextInputAllowed
354
+ } // Since we fire parent onChange event if isTextInputAllowed,
347
355
  // fire it on blur if the user typed a correct date format
348
356
 
349
357
 
@@ -382,6 +390,8 @@ function (_React$Component) {
382
390
 
383
391
  if (_this.datePicker.isVisible()) {
384
392
  _this.datePicker.hide();
393
+
394
+ _this.focusDatePicker();
385
395
  } else {
386
396
  _this.datePicker.show();
387
397
  }
@@ -435,13 +445,19 @@ function (_React$Component) {
435
445
  });
436
446
 
437
447
  _defineProperty(_assertThisInitialized(_this), "clearDate", function (event) {
438
- event.preventDefault(); // so datepicker doesn't open after clearing
448
+ // Prevents the date picker from opening after clearing
449
+ event.preventDefault();
450
+ var isAccessible = _this.props.isAccessible;
439
451
 
440
452
  if (_this.datePicker) {
441
453
  _this.datePicker.setDate(null);
442
454
  }
443
455
 
444
456
  _this.onSelectHandler(null);
457
+
458
+ if (isAccessible) {
459
+ _this.focusDatePicker();
460
+ }
445
461
  });
446
462
 
447
463
  _defineProperty(_assertThisInitialized(_this), "shouldUseAccessibleFallback", function () {
@@ -472,7 +488,7 @@ function (_React$Component) {
472
488
 
473
489
  var accessibleAttrs = isAccessible ? {
474
490
  'aria-hidden': true,
475
- tabindex: -1
491
+ tabIndex: -1
476
492
  } : {};
477
493
  return React.createElement(PlainButton, _extends({
478
494
  "aria-label": formatMessage(messages.chooseDate),
@@ -670,6 +686,8 @@ function (_React$Component) {
670
686
  isRequired = _this$props11.isRequired,
671
687
  isTextInputAllowed = _this$props11.isTextInputAllowed,
672
688
  label = _this$props11.label,
689
+ maxDate = _this$props11.maxDate,
690
+ minDate = _this$props11.minDate,
673
691
  name = _this$props11.name,
674
692
  onFocus = _this$props11.onFocus,
675
693
  placeholder = _this$props11.placeholder,
@@ -678,10 +696,10 @@ function (_React$Component) {
678
696
  var isDateInputInvalid = this.state.isDateInputInvalid;
679
697
  var formatMessage = intl.formatMessage;
680
698
  var errorMessage = error || this.getDateInputError();
681
- var hasError = !!errorMessage;
699
+ var hasError = !!errorMessage || isDateInputInvalid;
700
+ var hasValue = !!value || isDateInputInvalid;
682
701
  var classes = classNames(className, 'date-picker-wrapper', {
683
- 'is-accessible': isAccessible,
684
- 'show-clear-btn': !!value,
702
+ 'show-clear-btn': isClearable && hasValue && !isDisabled,
685
703
  'show-error': hasError
686
704
  });
687
705
  var ariaAttrs = {
@@ -716,20 +734,32 @@ function (_React$Component) {
716
734
  } else if (isTextInputAllowed || isAccessible && !this.canUseDateInputType) {
717
735
  onChangeAttr = {};
718
736
  } else {
737
+ // Fixes prop type error about read-only field
738
+ // Not adding readOnly so constraint validation works
719
739
  onChangeAttr = {
720
740
  onChange: noop
721
741
  };
722
- } // "name" prop is required for pattern validation to be surfaced on form submit. See components/form-elements/form/Form.js
723
- // "title" prop is shown during constraint validation as a description of the pattern
724
- // See https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern#usability
742
+ }
725
743
 
744
+ var additionalAttrs;
726
745
 
727
- var additionalAttrs = isAccessible && !this.canUseDateInputType ? {
728
- name: name,
729
- pattern: ISO_DATE_FORMAT_PATTERN.source,
730
- title: 'YYYY-MM-DD'
731
- } : {};
732
- /* fixes proptype error about readonly field (not adding readonly so constraint validation works) */
746
+ if (isAccessible && this.canUseDateInputType) {
747
+ additionalAttrs = {
748
+ max: this.formatDisplayDateType(maxDate) || '9999-12-31',
749
+ min: this.formatDisplayDateType(minDate) || '0001-01-01'
750
+ };
751
+ } else if (isAccessible && !this.canUseDateInputType) {
752
+ // "name" prop is required for pattern validation to be surfaced on form submit. See components/form-elements/form/Form.js
753
+ // "title" prop is shown during constraint validation as a description of the pattern
754
+ // See https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern#usability
755
+ additionalAttrs = {
756
+ name: name,
757
+ pattern: ISO_DATE_FORMAT_PATTERN.source,
758
+ title: 'YYYY-MM-DD'
759
+ };
760
+ } else {
761
+ additionalAttrs = {};
762
+ }
733
763
 
734
764
  return React.createElement("div", {
735
765
  className: classes
@@ -744,7 +774,7 @@ function (_React$Component) {
744
774
  className: "date-picker-description"
745
775
  }, description), React.createElement(Tooltip, {
746
776
  className: "date-picker-error-tooltip",
747
- isShown: hasError,
777
+ isShown: !!errorMessage,
748
778
  position: errorTooltipPosition,
749
779
  text: errorMessage || '',
750
780
  theme: TooltipTheme.ERROR
@@ -772,14 +802,12 @@ function (_React$Component) {
772
802
  id: this.errorMessageID,
773
803
  className: "accessibility-hidden",
774
804
  role: "alert"
775
- }, errorMessage))), isClearable && !!value && !isDisabled ? React.createElement(PlainButton, {
805
+ }, errorMessage))), isClearable && hasValue && !isDisabled ? React.createElement(PlainButton, {
776
806
  "aria-label": formatMessage(messages.dateClearButton),
777
- className: classNames('date-picker-clear-btn', {
778
- 'is-hidden': isAccessible && Browser.isFirefox()
779
- }),
807
+ className: "date-picker-clear-btn",
780
808
  onClick: this.clearDate,
781
809
  type: ButtonType.BUTTON
782
- }, React.createElement(ClearBadge16, null)) : null, errorMessage || isDateInputInvalid ? React.createElement(Alert16, {
810
+ }, React.createElement(ClearBadge16, null)) : null, hasError ? React.createElement(Alert16, {
783
811
  className: "date-picker-icon-alert",
784
812
  title: React.createElement(FormattedMessage, messages.iconAlertText)
785
813
  }) : null, this.renderCalendarButton(), React.createElement("input", {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../src/components/date-picker/DatePicker.tsx"],"names":["React","defineMessages","injectIntl","FormattedMessage","classNames","noop","range","uniqueId","RESIN_TAG_TARGET","Alert16","Calendar16","ClearBadge16","Browser","AccessiblePikaday","ButtonType","Label","PlainButton","Tooltip","TooltipPosition","TooltipTheme","convertDateToUnixMidnightTime","messages","previousMonth","nextMonth","iconAlertText","dateClearButton","chooseDate","dateInputRangeError","dateInputMaxError","dateInputMinError","TOGGLE_DELAY_MS","ENTER_KEY","ESCAPE_KEY","TAB_KEY","ISO_DATE_FORMAT_PATTERN","DateFormat","convertUTCToLocal","date","dateString","toUTCString","dateStringWithoutTimeZone","slice","Date","getFormattedDate","format","utcDate","ISO_STRING_DATE_FORMAT","toISOString","LOCALE_DATE_STRING_DATE_FORMAT","toLocaleDateString","UTC_TIME_DATE_FORMAT","UTC_ISO_STRING_DATE_FORMAT","getTime","localesWhereWeekStartsOnSunday","DatePicker","isDateInputInvalid","showDateInputError","props","onChange","isAccessible","formattedDate","formatValue","dateInputEl","datePicker","value","toString","isVisible","hide","focus","intl","maxDate","minDate","state","formatMessage","dateInputError","maxLocaleDate","minLocaleDate","event","isKeyboardInputAllowed","isTextInputAllowed","stopPropagation","key","preventDefault","canUseDateInputType","target","parsedDate","parseDisplayDateType","setDate","setState","onBlur","nextActiveElement","relatedTarget","document","activeElement","datePickerButtonEl","shouldStayClosed","setTimeout","inputDate","dateInputElVal","getDate","onSelectHandler","isDisabled","show","focusDatePicker","displayFormat","formatDate","test","dateFormat","createElement","type","e","isAlwaysVisible","accessibleAttrs","tabindex","ref","handleButtonClick","BUTTON","customInput","yearRange","defaultValue","shouldUseAccessibleFallback","year","getFullYear","i18n","months","map","month","weekdays","weekday","weekdaysShort","datePickerConfig","bound","blurFieldOnSelect","setDefaultDate","defaultDate","undefined","field","firstDay","includes","locale","position","showDaysInNextAndPreviousMonths","onSelect","formatDisplay","trigger","accessibleFieldEl","parse","formatDisplayDateType","keyboardInput","updateDateInputValue","nextProps","nextValue","nextMinDate","nextMaxDate","selectedDate","setMinDate","gotoDate","setMaxDate","destroy","className","description","error","errorTooltipPosition","hideLabel","hideOptionalLabel","inputProps","isClearable","isRequired","label","name","onFocus","placeholder","resinTarget","errorMessage","getDateInputError","hasError","classes","ariaAttrs","errorMessageID","descriptionID","resinTargetAttr","valueAttr","onChangeAttr","handleOnChange","additionalAttrs","pattern","source","title","ERROR","cloneElement","disabled","required","handleInputBlur","handleOnClick","handleInputKeyDown","isFirefox","clearDate","renderCalendarButton","Component","UNIX_TIME_DATE_FORMAT","BOTTOM_LEFT","DatePickerBase"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { defineMessages, injectIntl, FormattedMessage, WrappedComponentProps } from 'react-intl';\n\nimport classNames from 'classnames';\nimport noop from 'lodash/noop';\nimport range from 'lodash/range';\nimport uniqueId from 'lodash/uniqueId';\n\n// @ts-ignore flow import\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport Alert16 from '../../icon/fill/Alert16';\nimport Calendar16 from '../../icon/fill/Calendar16';\nimport ClearBadge16 from '../../icon/fill/ClearBadge16';\n// @ts-ignore flow import\nimport Browser from '../../utils/Browser';\n\nimport AccessiblePikaday, { AccessiblePikadayOptions } from './AccessiblePikaday';\nimport { ButtonType } from '../button';\nimport Label from '../label';\nimport PlainButton from '../plain-button';\nimport Tooltip, { TooltipPosition, TooltipTheme } from '../tooltip';\n\n// @ts-ignore flow import\nimport { convertDateToUnixMidnightTime } from '../../utils/datetime';\n\nimport './DatePicker.scss';\n\nconst messages = defineMessages({\n previousMonth: {\n defaultMessage: 'Previous Month',\n description: 'Previous month button for a date picker calendar',\n id: 'boxui.base.previousMonth',\n },\n nextMonth: {\n defaultMessage: 'Next Month',\n description: 'Next month button for a date picker calendar',\n id: 'boxui.base.nextMonth',\n },\n iconAlertText: {\n defaultMessage: 'Invalid Date',\n description: 'Date entered is invalid',\n id: 'boxui.datePicker.iconAlertText',\n },\n dateClearButton: {\n defaultMessage: 'Clear Date',\n description: 'Button for clearing date picker',\n id: 'boxui.datePicker.dateClearButton',\n },\n chooseDate: {\n defaultMessage: 'Choose Date',\n description: 'Button for opening date picker',\n id: 'boxui.datePicker.chooseDate',\n },\n dateInputRangeError: {\n defaultMessage: 'Please enter a date between {minLocaleDate} and {maxLocaleDate}',\n description: 'Error message when date is out of the minimum and maximum range',\n id: 'boxui.datePicker.dateInputRangeError',\n },\n dateInputMaxError: {\n defaultMessage: 'Please enter a date before {maxLocaleDate}',\n description: 'Error message when date is later than the maximum date',\n id: 'boxui.datePicker.dateInputMaxError',\n },\n dateInputMinError: {\n defaultMessage: 'Please enter a date after {minLocaleDate}',\n description: 'Error message when date is earlier than the minimum date',\n id: 'boxui.datePicker.dateInputMinError',\n },\n});\n\nconst TOGGLE_DELAY_MS = 300;\nconst ENTER_KEY = 'Enter';\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\n\nconst ISO_DATE_FORMAT_PATTERN = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\n\nexport enum DateFormat {\n ISO_STRING_DATE_FORMAT = 'isoString',\n LOCALE_DATE_STRING_DATE_FORMAT = 'localeDateString',\n UTC_TIME_DATE_FORMAT = 'utcTime',\n UNIX_TIME_DATE_FORMAT = 'unixTime',\n UTC_ISO_STRING_DATE_FORMAT = 'utcISOString',\n}\n\n/**\n * Converts date from being relative to GMT, to being relative to browser\n * timezone. E.g., Thu Jun 29 2017 00:00:00 GMT =>\n * Thu Jun 29 2017 00:00:00 GMT-0700 (PDT)\n * @param {Date} date UTC date\n * @returns {Date} date Local date\n */\nfunction convertUTCToLocal(date: Date) {\n const dateString = date.toUTCString();\n // Remove ` GMT` from the timestamp string\n const dateStringWithoutTimeZone = dateString.slice(0, -4);\n return new Date(dateStringWithoutTimeZone);\n}\n\nfunction getFormattedDate(date: Date | null, format: DateFormat) {\n if (!date) {\n return '';\n }\n\n let utcDate;\n\n switch (format) {\n case DateFormat.ISO_STRING_DATE_FORMAT:\n return date.toISOString();\n case DateFormat.LOCALE_DATE_STRING_DATE_FORMAT:\n return date.toLocaleDateString();\n case DateFormat.UTC_TIME_DATE_FORMAT:\n return convertDateToUnixMidnightTime(date);\n case DateFormat.UTC_ISO_STRING_DATE_FORMAT:\n utcDate = new Date(convertDateToUnixMidnightTime(date));\n return utcDate.toISOString();\n default:\n return date.getTime();\n }\n}\n\nconst localesWhereWeekStartsOnSunday = ['en-US', 'en-CA', 'jp-JP'];\n\nexport interface DatePickerProps extends WrappedComponentProps {\n /** Add a css class to the component */\n className?: string;\n /** Custom input field */\n customInput?: React.ReactElement;\n /** The format of the date value for form submit */\n dateFormat?: DateFormat;\n /** Some optional description */\n description?: React.ReactNode;\n /**\n * The format of the date displayed in the input field\n * @deprecated, will no longer be supported with accessible mode enabled (isAccessible = true)\n */\n displayFormat?: Object;\n /** Error message */\n error?: React.ReactNode;\n /** Position of error message tooltip */\n errorTooltipPosition?: TooltipPosition;\n /** Whether to show or hide the field's label */\n hideLabel?: boolean;\n /** Whether show or hide the 'Optional' label */\n hideOptionalLabel?: boolean;\n /** Props that will be applied on the input element */\n inputProps?: Object;\n /** Does the date input meet accessibility standards */\n isAccessible?: boolean;\n /** Is the calendar always visible */\n isAlwaysVisible?: boolean;\n /** Is input clearable */\n isClearable?: boolean;\n /** Is input disabled */\n isDisabled?: boolean;\n /** Is input required */\n isRequired?: boolean;\n /** Enables pikaday's default keyboard input support */\n isKeyboardInputAllowed?: boolean;\n /** Is user allowed to manually input a value (WARNING: this doesn't work with internationalization) */\n isTextInputAllowed?: boolean;\n /** Label displayed for the text input */\n label: React.ReactNode;\n /** The maximum date allowed to be selected */\n maxDate?: Date;\n /** The minimum date allowed to be selected */\n minDate?: Date;\n /** Name of the text input */\n name?: string;\n /** Called when input loses focus */\n onBlur?: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;\n /** Called when input is changed, passed the selected Date */\n onChange?: Function;\n /** Called when input receives focus */\n onFocus?: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;\n /** Placeholder for the text input */\n placeholder?: string;\n /** Resin tag */\n resinTarget?: string;\n /** Date to set the input */\n value?: Date | null;\n /** Number of years, or an array containing an upper and lower range */\n yearRange?: number | Array<number>;\n}\n\ninterface DatePickerState {\n /** Is the date input invalid */\n isDateInputInvalid: boolean;\n /** Shows error message tooltip for invalid date input */\n showDateInputError: boolean;\n}\n\nclass DatePicker extends React.Component<DatePickerProps, DatePickerState> {\n static defaultProps = {\n className: '',\n dateFormat: DateFormat.UNIX_TIME_DATE_FORMAT,\n displayFormat: {},\n error: '',\n errorTooltipPosition: TooltipPosition.BOTTOM_LEFT,\n inputProps: {},\n isClearable: true,\n isKeyboardInputAllowed: false,\n isTextInputAllowed: false,\n yearRange: 10,\n };\n\n state = {\n isDateInputInvalid: false,\n showDateInputError: false,\n };\n\n errorMessageID = uniqueId('errorMessage');\n\n descriptionID = uniqueId('description');\n\n componentDidMount() {\n const {\n customInput,\n dateFormat,\n intl,\n isAccessible,\n isAlwaysVisible,\n isTextInputAllowed,\n maxDate,\n minDate,\n onChange,\n value,\n yearRange,\n } = this.props;\n const { formatDate, formatMessage } = intl;\n const { nextMonth, previousMonth } = messages;\n let defaultValue = value;\n\n if (isAccessible && this.shouldUseAccessibleFallback()) {\n this.canUseDateInputType = false;\n }\n\n // When date format is utcTime, initial date needs to be converted from being relative to GMT to being\n // relative to browser timezone\n if (dateFormat === DateFormat.UTC_TIME_DATE_FORMAT && value) {\n defaultValue = convertUTCToLocal(value);\n\n if (onChange) {\n const formattedDate = this.formatValue(defaultValue);\n onChange(defaultValue, formattedDate);\n }\n }\n // Make sure the DST detection algorithm in browsers is up-to-date\n const year = new Date().getFullYear();\n\n const i18n = {\n previousMonth: formatMessage(previousMonth),\n nextMonth: formatMessage(nextMonth),\n months: range(12).map(month => formatDate(new Date(year, month, 15), { month: 'long' })),\n // weekdays must start with Sunday, so array of dates below is May 1st-8th, 2016\n weekdays: range(1, 8).map(date => formatDate(new Date(2016, 4, date), { weekday: 'long' })),\n weekdaysShort: range(1, 8).map(date => formatDate(new Date(2016, 4, date), { weekday: 'narrow' })),\n };\n\n // If \"bound\" is true (default), the DatePicker will be appended at the end of the document, with absolute positioning\n // If \"bound\" is false, the DatePicker will be appended to the DOM right after the input, with relative positioning\n const datePickerConfig: AccessiblePikadayOptions = {\n bound: !customInput,\n blurFieldOnSelect: false, // Available in pikaday > 1.5.1\n setDefaultDate: true,\n defaultDate: defaultValue === null ? undefined : defaultValue,\n field: this.dateInputEl,\n firstDay: localesWhereWeekStartsOnSunday.includes(intl.locale) ? 0 : 1,\n maxDate,\n minDate,\n position: 'bottom left',\n i18n,\n showDaysInNextAndPreviousMonths: true,\n onSelect: this.onSelectHandler,\n yearRange,\n toString: this.formatDisplay,\n };\n\n if (isAccessible) {\n if (this.canUseDateInputType) {\n delete datePickerConfig.field;\n datePickerConfig.trigger = this.dateInputEl;\n datePickerConfig.accessibleFieldEl = this.dateInputEl;\n datePickerConfig.datePickerButtonEl = this.datePickerButtonEl;\n }\n\n datePickerConfig.parse = this.parseDisplayDateType;\n datePickerConfig.toString = this.formatDisplayDateType;\n datePickerConfig.keyboardInput = false;\n }\n\n this.datePicker = new AccessiblePikaday(datePickerConfig);\n\n if (isTextInputAllowed) {\n this.updateDateInputValue(this.formatDisplay(defaultValue));\n }\n\n if (isAlwaysVisible) {\n this.datePicker.show();\n this.datePicker.hide = noop;\n }\n }\n\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps: DatePickerProps) {\n if (!this.datePicker) return;\n\n const { value: nextValue = null, minDate: nextMinDate = null, maxDate: nextMaxDate = null } = nextProps;\n const { value, minDate, maxDate, isTextInputAllowed } = this.props;\n const selectedDate = this.datePicker && this.datePicker.getDate();\n\n // only set date when props change\n if (\n (nextValue && !value) ||\n (!nextValue && value) ||\n (nextValue && value && nextValue.getTime() !== value.getTime())\n ) {\n this.datePicker.setDate(nextValue);\n }\n // If text input is allowed the dateInputEl will act as an uncontrolled input and\n // we need to set formatted value manually.\n if (isTextInputAllowed) {\n this.updateDateInputValue(this.formatDisplay(nextValue));\n }\n if (\n (nextMinDate && !minDate) ||\n (nextMinDate && minDate) ||\n (nextMinDate && minDate && nextMinDate.getTime() !== minDate.getTime())\n ) {\n this.datePicker.setMinDate(nextMinDate);\n\n if (selectedDate && selectedDate < nextMinDate) {\n this.datePicker.gotoDate(nextMinDate);\n }\n }\n if (\n (nextMaxDate && !maxDate) ||\n (!nextMaxDate && maxDate) ||\n (nextMaxDate && maxDate && nextMaxDate.getTime() !== maxDate.getTime())\n ) {\n this.datePicker.setMaxDate(nextMaxDate);\n\n if (selectedDate && nextMaxDate && selectedDate > nextMaxDate) {\n this.datePicker.gotoDate(nextMaxDate);\n }\n }\n }\n\n componentWillUnmount() {\n if (this.datePicker) {\n this.datePicker.destroy();\n }\n }\n\n onSelectHandler = (date: Date | null = null) => {\n const { onChange, isAccessible } = this.props;\n if (onChange) {\n const formattedDate = this.formatValue(date);\n onChange(date, formattedDate);\n }\n\n if (isAccessible) {\n if (this.dateInputEl && this.datePicker) {\n // Required because Pikaday instance is unbound\n // See https://github.com/Pikaday/Pikaday#usage\n this.dateInputEl.value = this.datePicker.toString();\n }\n if (this.datePicker && this.datePicker.isVisible()) {\n this.datePicker.hide();\n }\n }\n };\n\n updateDateInputValue(value: string) {\n if (this.dateInputEl) {\n this.dateInputEl.value = value;\n }\n }\n\n dateInputEl: HTMLInputElement | null | undefined;\n\n datePicker: Pikaday | null = null;\n\n datePickerButtonEl: HTMLButtonElement | HTMLDivElement | null | undefined;\n\n // Used to detect when a fallback is necessary when isAccessible is enabled\n canUseDateInputType = true;\n\n // Used to prevent bad sequences of hide/show when toggling the datepicker button\n shouldStayClosed = false;\n\n focusDatePicker = () => {\n // By default, this will open the datepicker too\n if (this.dateInputEl) {\n this.dateInputEl.focus();\n }\n };\n\n getDateInputError = () => {\n const { intl, maxDate = null, minDate = null } = this.props;\n const { showDateInputError } = this.state;\n const { formatMessage } = intl;\n\n if (!showDateInputError) return '';\n\n let dateInputError = '';\n const maxLocaleDate = getFormattedDate(maxDate, DateFormat.LOCALE_DATE_STRING_DATE_FORMAT);\n const minLocaleDate = getFormattedDate(minDate, DateFormat.LOCALE_DATE_STRING_DATE_FORMAT);\n\n if (maxLocaleDate && minLocaleDate) {\n dateInputError = formatMessage(messages.dateInputRangeError, { maxLocaleDate, minLocaleDate });\n } else if (maxLocaleDate) {\n dateInputError = formatMessage(messages.dateInputMaxError, { maxLocaleDate });\n } else if (minLocaleDate) {\n dateInputError = formatMessage(messages.dateInputMinError, { minLocaleDate });\n }\n\n return dateInputError;\n };\n\n handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { isKeyboardInputAllowed, isTextInputAllowed, isAccessible } = this.props;\n\n if (!isKeyboardInputAllowed && this.datePicker && this.datePicker.isVisible()) {\n event.stopPropagation();\n }\n\n // Stops up/down arrow & spacebar from moving page scroll position since pikaday does not preventDefault correctly\n if (!(isTextInputAllowed || isAccessible) && event.key !== TAB_KEY) {\n event.preventDefault();\n }\n\n if ((isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) && event.key === ENTER_KEY) {\n event.preventDefault();\n }\n\n // Stops enter & spacebar from opening up the browser's default date picker\n if (isAccessible && (event.key === ENTER_KEY || event.key === ' ')) {\n event.preventDefault();\n }\n\n if (event.key === ENTER_KEY || event.key === ESCAPE_KEY || event.key === ' ') {\n // Since pikaday auto-selects when you move the select box, enter/space don't do anything but close the date picker\n if (this.datePicker && this.datePicker.isVisible()) {\n this.datePicker.hide();\n }\n }\n };\n\n handleOnChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { isAccessible, maxDate, minDate, onChange } = this.props;\n const { isDateInputInvalid } = this.state;\n\n if (!isAccessible || !this.canUseDateInputType) {\n return;\n }\n\n if (this.datePicker && this.datePicker.isVisible()) {\n event.stopPropagation();\n }\n\n const { value } = event.target;\n if (this.datePicker && value) {\n const parsedDate = this.parseDisplayDateType(value);\n\n if (parsedDate) {\n if ((minDate && parsedDate < minDate) || (maxDate && parsedDate > maxDate)) {\n this.datePicker.setDate(null, true);\n this.setState({ isDateInputInvalid: true });\n return;\n }\n // Reset the error styling on valid date input\n if (isDateInputInvalid) {\n this.setState({ isDateInputInvalid: false, showDateInputError: false });\n }\n } else {\n this.setState({ isDateInputInvalid: true });\n }\n\n // Set date so Pikaday date picker value stays in sync with input\n this.datePicker.setDate(parsedDate, true);\n\n if (onChange) {\n const formattedDate = this.formatValue(parsedDate);\n onChange(parsedDate, formattedDate);\n }\n } else if (isDateInputInvalid) {\n this.setState({ isDateInputInvalid: false, showDateInputError: false });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { isAccessible, isTextInputAllowed, onBlur } = this.props;\n const { isDateInputInvalid } = this.state;\n const nextActiveElement = event.relatedTarget || document.activeElement;\n\n // This is mostly here to cancel out the pikaday hide() on blur\n if (\n this.datePicker &&\n this.datePicker.isVisible() &&\n nextActiveElement &&\n nextActiveElement === this.datePickerButtonEl\n ) {\n this.shouldStayClosed = true;\n setTimeout(() => {\n this.shouldStayClosed = false;\n }, TOGGLE_DELAY_MS);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n\n // Since we Fire parent onChange event if isTextInputAllowed\n // fire it on blur if the user typed a correct date format\n let inputDate: Date | null | undefined = null;\n\n if (this.dateInputEl) {\n let dateInputElVal = null;\n if (isAccessible && !this.canUseDateInputType) {\n dateInputElVal = this.parseDisplayDateType(this.dateInputEl.value);\n }\n inputDate = new Date(dateInputElVal || this.dateInputEl.value);\n }\n\n if ((isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) && inputDate && inputDate.getDate()) {\n this.onSelectHandler(inputDate);\n }\n\n if (isAccessible && isDateInputInvalid) this.setState({ showDateInputError: true });\n };\n\n handleButtonClick = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const { isAccessible, isDisabled } = this.props;\n\n if (isAccessible) {\n if (isDisabled || !this.datePicker) {\n return;\n }\n\n if (this.datePicker.isVisible()) {\n this.datePicker.hide();\n } else {\n this.datePicker.show();\n }\n return;\n }\n\n if (!this.shouldStayClosed) {\n this.focusDatePicker();\n }\n };\n\n handleOnClick = (event: React.SyntheticEvent<HTMLInputElement>) => {\n const { isAccessible } = this.props;\n\n if (isAccessible) {\n // Suppress Firefox default behavior: clicking on input type \"date\"\n // opens the browser date picker.\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n formatDisplay = (date?: Date | null): string => {\n const { displayFormat, intl } = this.props;\n return date ? intl.formatDate(date, displayFormat) : '';\n };\n\n formatDisplayDateType = (date?: Date | null): string => {\n // Input type \"date\" only accepts the format YYYY-MM-DD\n return date ? getFormattedDate(date, DateFormat.UTC_ISO_STRING_DATE_FORMAT).slice(0, 10) : '';\n };\n\n parseDisplayDateType = (dateString?: string | null): Date | null => {\n if (dateString && ISO_DATE_FORMAT_PATTERN.test(dateString)) {\n // Calling new Date('YYYY-MM-DD') without 'T00:00:00' yields undesired results:\n // E.g. new Date('2017-06-01') => May 31 2017\n // E.g. new Date('2017-06-01T00:00:00') => June 01 2017\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#parameters\n return new Date(`${dateString}T00:00:00`);\n }\n return null;\n };\n\n formatValue = (date: Date | null): string | number => {\n const { dateFormat } = this.props;\n return dateFormat ? getFormattedDate(date, dateFormat) : '';\n };\n\n clearDate = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n event.preventDefault(); // so datepicker doesn't open after clearing\n if (this.datePicker) {\n this.datePicker.setDate(null);\n }\n this.onSelectHandler(null);\n };\n\n /** Determines whether a new date input falls back to a text input or not */\n shouldUseAccessibleFallback = (): boolean => {\n const test = document.createElement('input');\n\n try {\n test.type = 'date';\n } catch (e) {\n // no-op\n }\n\n // If date input falls back to text input, show the fallback\n return test.type === 'text';\n };\n\n renderCalendarButton = () => {\n const { intl, isAccessible, isAlwaysVisible, isDisabled } = this.props;\n const { formatMessage } = intl;\n\n if (isAlwaysVisible) {\n return null;\n }\n\n // De-emphasizing the Pikaday date picker because it does not meet accessibility standards\n // Screenreaders & navigating via keyboard will no longer pick up on this element\n const accessibleAttrs = isAccessible ? { 'aria-hidden': true, tabindex: -1 } : {};\n\n return (\n <PlainButton\n aria-label={formatMessage(messages.chooseDate)}\n className=\"date-picker-open-btn\"\n getDOMRef={ref => {\n this.datePickerButtonEl = ref;\n }}\n isDisabled={isDisabled}\n onClick={this.handleButtonClick}\n type={ButtonType.BUTTON}\n {...accessibleAttrs}\n >\n <Calendar16 />\n </PlainButton>\n );\n };\n\n render() {\n const {\n className,\n customInput,\n description,\n error,\n errorTooltipPosition,\n hideLabel,\n hideOptionalLabel,\n inputProps,\n intl,\n isAccessible,\n isClearable,\n isDisabled,\n isRequired,\n isTextInputAllowed,\n label,\n name,\n onFocus,\n placeholder,\n resinTarget,\n value,\n } = this.props;\n const { isDateInputInvalid } = this.state;\n const { formatMessage } = intl;\n\n const errorMessage = error || this.getDateInputError();\n const hasError = !!errorMessage;\n\n const classes = classNames(className, 'date-picker-wrapper', {\n 'is-accessible': isAccessible,\n 'show-clear-btn': !!value,\n 'show-error': hasError,\n });\n\n const ariaAttrs = {\n 'aria-invalid': hasError,\n 'aria-required': isRequired,\n 'aria-errormessage': this.errorMessageID,\n 'aria-describedby': description ? this.descriptionID : undefined,\n };\n\n const resinTargetAttr = resinTarget ? { [RESIN_TAG_TARGET]: resinTarget } : {};\n\n let valueAttr;\n if (isAccessible) {\n valueAttr = { defaultValue: this.formatDisplayDateType(value) };\n } else if (isTextInputAllowed) {\n valueAttr = { defaultValue: this.formatDisplay(value) };\n } else {\n valueAttr = { value: this.formatDisplay(value) };\n }\n let onChangeAttr;\n if (isAccessible && this.canUseDateInputType) {\n onChangeAttr = { onChange: this.handleOnChange };\n } else if (isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) {\n onChangeAttr = {};\n } else {\n onChangeAttr = { onChange: noop };\n }\n\n // \"name\" prop is required for pattern validation to be surfaced on form submit. See components/form-elements/form/Form.js\n // \"title\" prop is shown during constraint validation as a description of the pattern\n // See https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern#usability\n const additionalAttrs =\n isAccessible && !this.canUseDateInputType\n ? { name, pattern: ISO_DATE_FORMAT_PATTERN.source, title: 'YYYY-MM-DD' }\n : {};\n\n /* fixes proptype error about readonly field (not adding readonly so constraint validation works) */\n return (\n <div className={classes}>\n <span className=\"date-picker-icon-holder\">\n <Label hideLabel={hideLabel} showOptionalText={!hideOptionalLabel && !isRequired} text={label}>\n <>\n {!!description && (\n <div id={this.descriptionID} className=\"date-picker-description\">\n {description}\n </div>\n )}\n <Tooltip\n className=\"date-picker-error-tooltip\"\n isShown={hasError}\n position={errorTooltipPosition}\n text={errorMessage || ''}\n theme={TooltipTheme.ERROR}\n >\n {customInput ? (\n React.cloneElement(customInput, {\n disabled: isDisabled,\n ref: (ref: HTMLInputElement) => {\n this.dateInputEl = ref;\n },\n required: isRequired,\n ...resinTargetAttr,\n ...ariaAttrs,\n })\n ) : (\n <input\n ref={ref => {\n this.dateInputEl = ref;\n }}\n className=\"date-picker-input\"\n disabled={isDisabled}\n onBlur={this.handleInputBlur}\n onClick={this.handleOnClick}\n placeholder={placeholder || formatMessage(messages.chooseDate)}\n required={isRequired}\n type={isAccessible && this.canUseDateInputType ? 'date' : 'text'}\n {...onChangeAttr}\n onFocus={onFocus}\n onKeyDown={this.handleInputKeyDown}\n {...resinTargetAttr}\n {...ariaAttrs}\n {...inputProps}\n {...valueAttr}\n {...additionalAttrs}\n />\n )}\n </Tooltip>\n <span id={this.errorMessageID} className=\"accessibility-hidden\" role=\"alert\">\n {errorMessage}\n </span>\n </>\n </Label>\n {isClearable && !!value && !isDisabled ? (\n <PlainButton\n aria-label={formatMessage(messages.dateClearButton)}\n className={classNames('date-picker-clear-btn', {\n 'is-hidden': isAccessible && Browser.isFirefox(),\n })}\n onClick={this.clearDate}\n type={ButtonType.BUTTON}\n >\n <ClearBadge16 />\n </PlainButton>\n ) : null}\n {errorMessage || isDateInputInvalid ? (\n <Alert16\n className=\"date-picker-icon-alert\"\n title={<FormattedMessage {...messages.iconAlertText} />}\n />\n ) : null}\n {this.renderCalendarButton()}\n <input\n className=\"date-picker-unix-time-input\"\n name={name}\n readOnly\n type=\"hidden\"\n value={value ? this.formatValue(value) : ''}\n />\n </span>\n </div>\n );\n }\n}\n\nexport { DatePicker as DatePickerBase };\nexport default injectIntl(DatePicker);\n"],"file":"DatePicker.js"}
1
+ {"version":3,"sources":["../../../src/components/date-picker/DatePicker.tsx"],"names":["React","defineMessages","injectIntl","FormattedMessage","classNames","noop","range","uniqueId","RESIN_TAG_TARGET","Alert16","Calendar16","ClearBadge16","AccessiblePikaday","ButtonType","Label","PlainButton","Tooltip","TooltipPosition","TooltipTheme","convertDateToUnixMidnightTime","messages","previousMonth","nextMonth","iconAlertText","dateClearButton","chooseDate","dateInputRangeError","dateInputMaxError","dateInputMinError","TOGGLE_DELAY_MS","ENTER_KEY","ESCAPE_KEY","TAB_KEY","ISO_DATE_FORMAT_PATTERN","DateFormat","convertUTCToLocal","date","dateString","toUTCString","dateStringWithoutTimeZone","slice","Date","getFormattedDate","format","utcDate","ISO_STRING_DATE_FORMAT","toISOString","LOCALE_DATE_STRING_DATE_FORMAT","toLocaleDateString","UTC_TIME_DATE_FORMAT","UTC_ISO_STRING_DATE_FORMAT","getTime","localesWhereWeekStartsOnSunday","DatePicker","isDateInputInvalid","showDateInputError","props","onChange","isAccessible","state","formattedDate","formatValue","dateInputEl","datePicker","value","toString","isVisible","hide","focusDatePicker","setState","focus","intl","maxDate","minDate","formatMessage","dateInputError","maxLocaleDate","minLocaleDate","event","isKeyboardInputAllowed","isTextInputAllowed","stopPropagation","key","preventDefault","canUseDateInputType","target","parsedDate","parseDisplayDateType","setDate","onBlur","nextActiveElement","relatedTarget","document","activeElement","datePickerButtonEl","shouldStayClosed","setTimeout","inputDate","dateInputElVal","getDate","onSelectHandler","isDisabled","show","displayFormat","formatDate","test","dateFormat","createElement","type","e","isAlwaysVisible","accessibleAttrs","tabIndex","ref","handleButtonClick","BUTTON","customInput","yearRange","defaultValue","shouldUseAccessibleFallback","year","getFullYear","i18n","months","map","month","weekdays","weekday","weekdaysShort","datePickerConfig","bound","blurFieldOnSelect","setDefaultDate","defaultDate","undefined","field","firstDay","includes","locale","position","showDaysInNextAndPreviousMonths","onSelect","formatDisplay","trigger","accessibleFieldEl","parse","formatDisplayDateType","keyboardInput","updateDateInputValue","nextProps","nextValue","nextMinDate","nextMaxDate","selectedDate","setMinDate","gotoDate","setMaxDate","destroy","className","description","error","errorTooltipPosition","hideLabel","hideOptionalLabel","inputProps","isClearable","isRequired","label","name","onFocus","placeholder","resinTarget","errorMessage","getDateInputError","hasError","hasValue","classes","ariaAttrs","errorMessageID","descriptionID","resinTargetAttr","valueAttr","onChangeAttr","handleOnChange","additionalAttrs","max","min","pattern","source","title","ERROR","cloneElement","disabled","required","handleInputBlur","handleOnClick","handleInputKeyDown","clearDate","renderCalendarButton","Component","UNIX_TIME_DATE_FORMAT","BOTTOM_LEFT","DatePickerBase"],"mappings":"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","sourcesContent":["import * as React from 'react';\nimport { defineMessages, injectIntl, FormattedMessage, WrappedComponentProps } from 'react-intl';\n\nimport classNames from 'classnames';\nimport noop from 'lodash/noop';\nimport range from 'lodash/range';\nimport uniqueId from 'lodash/uniqueId';\n\n// @ts-ignore flow import\nimport { RESIN_TAG_TARGET } from '../../common/variables';\nimport Alert16 from '../../icon/fill/Alert16';\nimport Calendar16 from '../../icon/fill/Calendar16';\nimport ClearBadge16 from '../../icon/fill/ClearBadge16';\n\nimport AccessiblePikaday, { AccessiblePikadayOptions } from './AccessiblePikaday';\nimport { ButtonType } from '../button';\nimport Label from '../label';\nimport PlainButton from '../plain-button';\nimport Tooltip, { TooltipPosition, TooltipTheme } from '../tooltip';\n\n// @ts-ignore flow import\nimport { convertDateToUnixMidnightTime } from '../../utils/datetime';\n\nimport './DatePicker.scss';\n\nconst messages = defineMessages({\n previousMonth: {\n defaultMessage: 'Previous Month',\n description: 'Previous month button for a date picker calendar',\n id: 'boxui.base.previousMonth',\n },\n nextMonth: {\n defaultMessage: 'Next Month',\n description: 'Next month button for a date picker calendar',\n id: 'boxui.base.nextMonth',\n },\n iconAlertText: {\n defaultMessage: 'Invalid Date',\n description: 'Date entered is invalid',\n id: 'boxui.datePicker.iconAlertText',\n },\n dateClearButton: {\n defaultMessage: 'Clear Date',\n description: 'Button for clearing date picker',\n id: 'boxui.datePicker.dateClearButton',\n },\n chooseDate: {\n defaultMessage: 'Choose Date',\n description: 'Button for opening date picker',\n id: 'boxui.datePicker.chooseDate',\n },\n dateInputRangeError: {\n defaultMessage: 'Please enter a date between {minLocaleDate} and {maxLocaleDate}',\n description: 'Error message when date is out of the minimum and maximum range',\n id: 'boxui.datePicker.dateInputRangeError',\n },\n dateInputMaxError: {\n defaultMessage: 'Please enter a date before {maxLocaleDate}',\n description: 'Error message when date is later than the maximum date',\n id: 'boxui.datePicker.dateInputMaxError',\n },\n dateInputMinError: {\n defaultMessage: 'Please enter a date after {minLocaleDate}',\n description: 'Error message when date is earlier than the minimum date',\n id: 'boxui.datePicker.dateInputMinError',\n },\n});\n\nconst TOGGLE_DELAY_MS = 300;\nconst ENTER_KEY = 'Enter';\nconst ESCAPE_KEY = 'Escape';\nconst TAB_KEY = 'Tab';\n\nconst ISO_DATE_FORMAT_PATTERN = /^\\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;\n\nexport enum DateFormat {\n ISO_STRING_DATE_FORMAT = 'isoString',\n LOCALE_DATE_STRING_DATE_FORMAT = 'localeDateString',\n UTC_TIME_DATE_FORMAT = 'utcTime',\n UNIX_TIME_DATE_FORMAT = 'unixTime',\n UTC_ISO_STRING_DATE_FORMAT = 'utcISOString',\n}\n\n/**\n * Converts date from being relative to GMT, to being relative to browser\n * timezone. E.g., Thu Jun 29 2017 00:00:00 GMT =>\n * Thu Jun 29 2017 00:00:00 GMT-0700 (PDT)\n * @param {Date} date UTC date\n * @returns {Date} date Local date\n */\nfunction convertUTCToLocal(date: Date) {\n const dateString = date.toUTCString();\n // Remove ` GMT` from the timestamp string\n const dateStringWithoutTimeZone = dateString.slice(0, -4);\n return new Date(dateStringWithoutTimeZone);\n}\n\nfunction getFormattedDate(date: Date | null, format: DateFormat) {\n if (!date) {\n return '';\n }\n\n let utcDate;\n\n switch (format) {\n case DateFormat.ISO_STRING_DATE_FORMAT:\n return date.toISOString();\n case DateFormat.LOCALE_DATE_STRING_DATE_FORMAT:\n return date.toLocaleDateString();\n case DateFormat.UTC_TIME_DATE_FORMAT:\n return convertDateToUnixMidnightTime(date);\n case DateFormat.UTC_ISO_STRING_DATE_FORMAT:\n utcDate = new Date(convertDateToUnixMidnightTime(date));\n return utcDate.toISOString();\n default:\n return date.getTime();\n }\n}\n\nconst localesWhereWeekStartsOnSunday = ['en-US', 'en-CA', 'jp-JP'];\n\nexport interface DatePickerProps extends WrappedComponentProps {\n /** Add a css class to the component */\n className?: string;\n /** Custom input field */\n customInput?: React.ReactElement;\n /** The format of the date value for form submit */\n dateFormat?: DateFormat;\n /** Some optional description */\n description?: React.ReactNode;\n /**\n * The format of the date displayed in the input field\n * @deprecated, will no longer be supported with accessible mode enabled (isAccessible = true)\n */\n displayFormat?: Object;\n /** Error message */\n error?: React.ReactNode;\n /** Position of error message tooltip */\n errorTooltipPosition?: TooltipPosition;\n /** Whether to show or hide the field's label */\n hideLabel?: boolean;\n /** Whether show or hide the 'Optional' label */\n hideOptionalLabel?: boolean;\n /** Props that will be applied on the input element */\n inputProps?: Object;\n /** Does the date input meet accessibility standards */\n isAccessible?: boolean;\n /** Is the calendar always visible */\n isAlwaysVisible?: boolean;\n /** Is input clearable */\n isClearable?: boolean;\n /** Is input disabled */\n isDisabled?: boolean;\n /** Is input required */\n isRequired?: boolean;\n /** Enables pikaday's default keyboard input support */\n isKeyboardInputAllowed?: boolean;\n /** Is user allowed to manually input a value (WARNING: this doesn't work with internationalization) */\n isTextInputAllowed?: boolean;\n /** Label displayed for the text input */\n label: React.ReactNode;\n /** The maximum date allowed to be selected */\n maxDate?: Date;\n /** The minimum date allowed to be selected */\n minDate?: Date;\n /** Name of the text input */\n name?: string;\n /** Called when input loses focus */\n onBlur?: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;\n /** Called when input is changed, passed the selected Date */\n onChange?: Function;\n /** Called when input receives focus */\n onFocus?: ((event: React.FocusEvent<HTMLInputElement>) => void) | undefined;\n /** Placeholder for the text input */\n placeholder?: string;\n /** Resin tag */\n resinTarget?: string;\n /** Date to set the input */\n value?: Date | null;\n /** Number of years, or an array containing an upper and lower range */\n yearRange?: number | Array<number>;\n}\n\ninterface DatePickerState {\n /** Is the date input invalid */\n isDateInputInvalid: boolean;\n /** Shows error message tooltip for invalid date input */\n showDateInputError: boolean;\n}\n\nclass DatePicker extends React.Component<DatePickerProps, DatePickerState> {\n static defaultProps = {\n className: '',\n dateFormat: DateFormat.UNIX_TIME_DATE_FORMAT,\n displayFormat: {},\n error: '',\n errorTooltipPosition: TooltipPosition.BOTTOM_LEFT,\n inputProps: {},\n isClearable: true,\n isKeyboardInputAllowed: false,\n isTextInputAllowed: false,\n yearRange: 10,\n };\n\n state = {\n isDateInputInvalid: false,\n showDateInputError: false,\n };\n\n errorMessageID = uniqueId('errorMessage');\n\n descriptionID = uniqueId('description');\n\n componentDidMount() {\n const {\n customInput,\n dateFormat,\n intl,\n isAccessible,\n isAlwaysVisible,\n isTextInputAllowed,\n maxDate,\n minDate,\n onChange,\n value,\n yearRange,\n } = this.props;\n const { formatDate, formatMessage } = intl;\n const { nextMonth, previousMonth } = messages;\n let defaultValue = value;\n\n if (isAccessible && this.shouldUseAccessibleFallback()) {\n this.canUseDateInputType = false;\n }\n\n // When date format is utcTime, initial date needs to be converted from being relative to GMT to being\n // relative to browser timezone\n if (dateFormat === DateFormat.UTC_TIME_DATE_FORMAT && value) {\n defaultValue = convertUTCToLocal(value);\n\n if (onChange) {\n const formattedDate = this.formatValue(defaultValue);\n onChange(defaultValue, formattedDate);\n }\n }\n // Make sure the DST detection algorithm in browsers is up-to-date\n const year = new Date().getFullYear();\n\n const i18n = {\n previousMonth: formatMessage(previousMonth),\n nextMonth: formatMessage(nextMonth),\n months: range(12).map(month => formatDate(new Date(year, month, 15), { month: 'long' })),\n // weekdays must start with Sunday, so array of dates below is May 1st-8th, 2016\n weekdays: range(1, 8).map(date => formatDate(new Date(2016, 4, date), { weekday: 'long' })),\n weekdaysShort: range(1, 8).map(date => formatDate(new Date(2016, 4, date), { weekday: 'narrow' })),\n };\n\n // If \"bound\" is true (default), the DatePicker will be appended at the end of the document, with absolute positioning\n // If \"bound\" is false, the DatePicker will be appended to the DOM right after the input, with relative positioning\n const datePickerConfig: AccessiblePikadayOptions = {\n bound: !customInput,\n blurFieldOnSelect: false, // Available in pikaday > 1.5.1\n setDefaultDate: true,\n defaultDate: defaultValue === null ? undefined : defaultValue,\n field: this.dateInputEl,\n firstDay: localesWhereWeekStartsOnSunday.includes(intl.locale) ? 0 : 1,\n maxDate,\n minDate,\n position: 'bottom left',\n i18n,\n showDaysInNextAndPreviousMonths: true,\n onSelect: this.onSelectHandler,\n yearRange,\n toString: this.formatDisplay,\n };\n\n if (isAccessible) {\n if (this.canUseDateInputType) {\n delete datePickerConfig.field;\n datePickerConfig.trigger = this.dateInputEl;\n datePickerConfig.accessibleFieldEl = this.dateInputEl;\n datePickerConfig.datePickerButtonEl = this.datePickerButtonEl;\n }\n\n datePickerConfig.parse = this.parseDisplayDateType;\n datePickerConfig.toString = this.formatDisplayDateType;\n datePickerConfig.keyboardInput = false;\n }\n\n this.datePicker = new AccessiblePikaday(datePickerConfig);\n\n if (isTextInputAllowed) {\n this.updateDateInputValue(this.formatDisplay(defaultValue));\n }\n\n if (isAlwaysVisible) {\n this.datePicker.show();\n this.datePicker.hide = noop;\n }\n }\n\n // eslint-disable-next-line camelcase\n UNSAFE_componentWillReceiveProps(nextProps: DatePickerProps) {\n if (!this.datePicker) return;\n\n const { value: nextValue = null, minDate: nextMinDate = null, maxDate: nextMaxDate = null } = nextProps;\n const { value, minDate, maxDate, isTextInputAllowed } = this.props;\n const selectedDate = this.datePicker && this.datePicker.getDate();\n\n // only set date when props change\n if (\n (nextValue && !value) ||\n (!nextValue && value) ||\n (nextValue && value && nextValue.getTime() !== value.getTime())\n ) {\n this.datePicker.setDate(nextValue);\n }\n // If text input is allowed the dateInputEl will act as an uncontrolled input and\n // we need to set formatted value manually.\n if (isTextInputAllowed) {\n this.updateDateInputValue(this.formatDisplay(nextValue));\n }\n if (\n (nextMinDate && !minDate) ||\n (nextMinDate && minDate) ||\n (nextMinDate && minDate && nextMinDate.getTime() !== minDate.getTime())\n ) {\n this.datePicker.setMinDate(nextMinDate);\n\n if (selectedDate && selectedDate < nextMinDate) {\n this.datePicker.gotoDate(nextMinDate);\n }\n }\n if (\n (nextMaxDate && !maxDate) ||\n (!nextMaxDate && maxDate) ||\n (nextMaxDate && maxDate && nextMaxDate.getTime() !== maxDate.getTime())\n ) {\n this.datePicker.setMaxDate(nextMaxDate);\n\n if (selectedDate && nextMaxDate && selectedDate > nextMaxDate) {\n this.datePicker.gotoDate(nextMaxDate);\n }\n }\n }\n\n componentWillUnmount() {\n if (this.datePicker) {\n this.datePicker.destroy();\n }\n }\n\n onSelectHandler = (date: Date | null = null) => {\n const { onChange, isAccessible } = this.props;\n const { isDateInputInvalid } = this.state;\n\n if (onChange) {\n const formattedDate = this.formatValue(date);\n onChange(date, formattedDate);\n }\n\n if (isAccessible) {\n if (this.dateInputEl && this.datePicker) {\n // Required because Pikaday instance is unbound\n // See https://github.com/Pikaday/Pikaday#usage\n this.dateInputEl.value = this.datePicker.toString();\n }\n if (this.datePicker && this.datePicker.isVisible()) {\n this.datePicker.hide();\n this.focusDatePicker();\n }\n }\n\n if (isDateInputInvalid) {\n this.setState({ isDateInputInvalid: false, showDateInputError: false });\n }\n };\n\n updateDateInputValue(value: string) {\n if (this.dateInputEl) {\n this.dateInputEl.value = value;\n }\n }\n\n dateInputEl: HTMLInputElement | null | undefined;\n\n datePicker: Pikaday | null = null;\n\n datePickerButtonEl: HTMLButtonElement | HTMLDivElement | null | undefined;\n\n // Used to detect when a fallback is necessary when isAccessible is enabled\n canUseDateInputType = true;\n\n // Used to prevent bad sequences of hide/show when toggling the datepicker button\n shouldStayClosed = false;\n\n focusDatePicker = () => {\n // This also opens the date picker when isAccessible is disabled\n if (this.dateInputEl) {\n this.dateInputEl.focus();\n }\n };\n\n getDateInputError = () => {\n const { intl, maxDate = null, minDate = null } = this.props;\n const { showDateInputError } = this.state;\n const { formatMessage } = intl;\n\n if (!showDateInputError) return '';\n\n let dateInputError = '';\n const maxLocaleDate = getFormattedDate(maxDate, DateFormat.LOCALE_DATE_STRING_DATE_FORMAT);\n const minLocaleDate = getFormattedDate(minDate, DateFormat.LOCALE_DATE_STRING_DATE_FORMAT);\n\n if (maxLocaleDate && minLocaleDate) {\n dateInputError = formatMessage(messages.dateInputRangeError, { maxLocaleDate, minLocaleDate });\n } else if (maxLocaleDate) {\n dateInputError = formatMessage(messages.dateInputMaxError, { maxLocaleDate });\n } else if (minLocaleDate) {\n dateInputError = formatMessage(messages.dateInputMinError, { minLocaleDate });\n }\n\n return dateInputError;\n };\n\n handleInputKeyDown = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { isKeyboardInputAllowed, isTextInputAllowed, isAccessible } = this.props;\n\n if (!isKeyboardInputAllowed && this.datePicker && this.datePicker.isVisible()) {\n event.stopPropagation();\n }\n\n // Stops up/down arrow & spacebar from moving page scroll position since pikaday does not preventDefault correctly\n if (!(isTextInputAllowed || isAccessible) && event.key !== TAB_KEY) {\n event.preventDefault();\n }\n\n if ((isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) && event.key === ENTER_KEY) {\n event.preventDefault();\n }\n\n // Stops enter & spacebar from opening up the browser's default date picker\n if (isAccessible && (event.key === ENTER_KEY || event.key === ' ')) {\n event.preventDefault();\n }\n\n if (event.key === ENTER_KEY || event.key === ESCAPE_KEY || event.key === ' ') {\n // Since pikaday auto-selects when you move the select box, enter/space don't do anything but close the date picker\n if (this.datePicker && this.datePicker.isVisible()) {\n this.datePicker.hide();\n }\n }\n };\n\n handleOnChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { isAccessible, maxDate, minDate, onChange } = this.props;\n const { isDateInputInvalid } = this.state;\n\n if (!isAccessible || !this.canUseDateInputType) {\n return;\n }\n\n if (this.datePicker && this.datePicker.isVisible()) {\n event.stopPropagation();\n }\n\n const { value } = event.target;\n if (this.datePicker && value) {\n const parsedDate = this.parseDisplayDateType(value);\n\n if (parsedDate) {\n if ((minDate && parsedDate < minDate) || (maxDate && parsedDate > maxDate)) {\n this.datePicker.setDate(null);\n this.setState({ isDateInputInvalid: true });\n return;\n }\n // Reset the error styling on valid date input\n if (isDateInputInvalid) {\n this.setState({ isDateInputInvalid: false, showDateInputError: false });\n }\n } else {\n this.setState({ isDateInputInvalid: true });\n }\n\n // Set date so Pikaday date picker value stays in sync with input\n this.datePicker.setDate(parsedDate, true);\n\n if (onChange) {\n const formattedDate = this.formatValue(parsedDate);\n onChange(parsedDate, formattedDate);\n }\n } else if (isDateInputInvalid) {\n this.setState({ isDateInputInvalid: false, showDateInputError: false });\n }\n };\n\n handleInputBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n const { isAccessible, isTextInputAllowed, onBlur } = this.props;\n const { isDateInputInvalid } = this.state;\n const nextActiveElement = event.relatedTarget || document.activeElement;\n\n // This is mostly here to cancel out the pikaday hide() on blur\n if (\n this.datePicker &&\n this.datePicker.isVisible() &&\n nextActiveElement &&\n nextActiveElement === this.datePickerButtonEl\n ) {\n this.shouldStayClosed = true;\n setTimeout(() => {\n this.shouldStayClosed = false;\n }, TOGGLE_DELAY_MS);\n }\n\n if (onBlur) {\n onBlur(event);\n }\n\n // Since we fire parent onChange event if isTextInputAllowed,\n // fire it on blur if the user typed a correct date format\n let inputDate: Date | null | undefined = null;\n\n if (this.dateInputEl) {\n let dateInputElVal = null;\n if (isAccessible && !this.canUseDateInputType) {\n dateInputElVal = this.parseDisplayDateType(this.dateInputEl.value);\n }\n inputDate = new Date(dateInputElVal || this.dateInputEl.value);\n }\n\n if ((isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) && inputDate && inputDate.getDate()) {\n this.onSelectHandler(inputDate);\n }\n\n if (isAccessible && isDateInputInvalid) this.setState({ showDateInputError: true });\n };\n\n handleButtonClick = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n event.preventDefault();\n event.stopPropagation();\n const { isAccessible, isDisabled } = this.props;\n\n if (isAccessible) {\n if (isDisabled || !this.datePicker) {\n return;\n }\n\n if (this.datePicker.isVisible()) {\n this.datePicker.hide();\n this.focusDatePicker();\n } else {\n this.datePicker.show();\n }\n return;\n }\n\n if (!this.shouldStayClosed) {\n this.focusDatePicker();\n }\n };\n\n handleOnClick = (event: React.SyntheticEvent<HTMLInputElement>) => {\n const { isAccessible } = this.props;\n\n if (isAccessible) {\n // Suppress Firefox default behavior: clicking on input type \"date\"\n // opens the browser date picker.\n event.preventDefault();\n event.stopPropagation();\n }\n };\n\n formatDisplay = (date?: Date | null): string => {\n const { displayFormat, intl } = this.props;\n return date ? intl.formatDate(date, displayFormat) : '';\n };\n\n formatDisplayDateType = (date?: Date | null): string => {\n // Input type \"date\" only accepts the format YYYY-MM-DD\n return date ? getFormattedDate(date, DateFormat.UTC_ISO_STRING_DATE_FORMAT).slice(0, 10) : '';\n };\n\n parseDisplayDateType = (dateString?: string | null): Date | null => {\n if (dateString && ISO_DATE_FORMAT_PATTERN.test(dateString)) {\n // Calling new Date('YYYY-MM-DD') without 'T00:00:00' yields undesired results:\n // E.g. new Date('2017-06-01') => May 31 2017\n // E.g. new Date('2017-06-01T00:00:00') => June 01 2017\n // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/Date#parameters\n return new Date(`${dateString}T00:00:00`);\n }\n return null;\n };\n\n formatValue = (date: Date | null): string | number => {\n const { dateFormat } = this.props;\n return dateFormat ? getFormattedDate(date, dateFormat) : '';\n };\n\n clearDate = (event: React.SyntheticEvent<HTMLButtonElement>) => {\n // Prevents the date picker from opening after clearing\n event.preventDefault();\n const { isAccessible } = this.props;\n\n if (this.datePicker) {\n this.datePicker.setDate(null);\n }\n this.onSelectHandler(null);\n\n if (isAccessible) {\n this.focusDatePicker();\n }\n };\n\n /** Determines whether a new date input falls back to a text input or not */\n shouldUseAccessibleFallback = (): boolean => {\n const test = document.createElement('input');\n\n try {\n test.type = 'date';\n } catch (e) {\n // no-op\n }\n\n // If date input falls back to text input, show the fallback\n return test.type === 'text';\n };\n\n renderCalendarButton = () => {\n const { intl, isAccessible, isAlwaysVisible, isDisabled } = this.props;\n const { formatMessage } = intl;\n\n if (isAlwaysVisible) {\n return null;\n }\n\n // De-emphasizing the Pikaday date picker because it does not meet accessibility standards\n // Screenreaders & navigating via keyboard will no longer pick up on this element\n const accessibleAttrs = isAccessible ? { 'aria-hidden': true, tabIndex: -1 } : {};\n\n return (\n <PlainButton\n aria-label={formatMessage(messages.chooseDate)}\n className=\"date-picker-open-btn\"\n getDOMRef={ref => {\n this.datePickerButtonEl = ref;\n }}\n isDisabled={isDisabled}\n onClick={this.handleButtonClick}\n type={ButtonType.BUTTON}\n {...accessibleAttrs}\n >\n <Calendar16 />\n </PlainButton>\n );\n };\n\n render() {\n const {\n className,\n customInput,\n description,\n error,\n errorTooltipPosition,\n hideLabel,\n hideOptionalLabel,\n inputProps,\n intl,\n isAccessible,\n isClearable,\n isDisabled,\n isRequired,\n isTextInputAllowed,\n label,\n maxDate,\n minDate,\n name,\n onFocus,\n placeholder,\n resinTarget,\n value,\n } = this.props;\n const { isDateInputInvalid } = this.state;\n const { formatMessage } = intl;\n\n const errorMessage = error || this.getDateInputError();\n const hasError = !!errorMessage || isDateInputInvalid;\n const hasValue = !!value || isDateInputInvalid;\n\n const classes = classNames(className, 'date-picker-wrapper', {\n 'show-clear-btn': isClearable && hasValue && !isDisabled,\n 'show-error': hasError,\n });\n\n const ariaAttrs = {\n 'aria-invalid': hasError,\n 'aria-required': isRequired,\n 'aria-errormessage': this.errorMessageID,\n 'aria-describedby': description ? this.descriptionID : undefined,\n };\n\n const resinTargetAttr = resinTarget ? { [RESIN_TAG_TARGET]: resinTarget } : {};\n\n let valueAttr;\n if (isAccessible) {\n valueAttr = { defaultValue: this.formatDisplayDateType(value) };\n } else if (isTextInputAllowed) {\n valueAttr = { defaultValue: this.formatDisplay(value) };\n } else {\n valueAttr = { value: this.formatDisplay(value) };\n }\n\n let onChangeAttr;\n if (isAccessible && this.canUseDateInputType) {\n onChangeAttr = { onChange: this.handleOnChange };\n } else if (isTextInputAllowed || (isAccessible && !this.canUseDateInputType)) {\n onChangeAttr = {};\n } else {\n // Fixes prop type error about read-only field\n // Not adding readOnly so constraint validation works\n onChangeAttr = { onChange: noop };\n }\n\n let additionalAttrs;\n if (isAccessible && this.canUseDateInputType) {\n additionalAttrs = {\n max: this.formatDisplayDateType(maxDate) || '9999-12-31',\n min: this.formatDisplayDateType(minDate) || '0001-01-01',\n };\n } else if (isAccessible && !this.canUseDateInputType) {\n // \"name\" prop is required for pattern validation to be surfaced on form submit. See components/form-elements/form/Form.js\n // \"title\" prop is shown during constraint validation as a description of the pattern\n // See https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/pattern#usability\n additionalAttrs = { name, pattern: ISO_DATE_FORMAT_PATTERN.source, title: 'YYYY-MM-DD' };\n } else {\n additionalAttrs = {};\n }\n\n return (\n <div className={classes}>\n <span className=\"date-picker-icon-holder\">\n <Label hideLabel={hideLabel} showOptionalText={!hideOptionalLabel && !isRequired} text={label}>\n <>\n {!!description && (\n <div id={this.descriptionID} className=\"date-picker-description\">\n {description}\n </div>\n )}\n <Tooltip\n className=\"date-picker-error-tooltip\"\n isShown={!!errorMessage}\n position={errorTooltipPosition}\n text={errorMessage || ''}\n theme={TooltipTheme.ERROR}\n >\n {customInput ? (\n React.cloneElement(customInput, {\n disabled: isDisabled,\n ref: (ref: HTMLInputElement) => {\n this.dateInputEl = ref;\n },\n required: isRequired,\n ...resinTargetAttr,\n ...ariaAttrs,\n })\n ) : (\n <input\n ref={ref => {\n this.dateInputEl = ref;\n }}\n className=\"date-picker-input\"\n disabled={isDisabled}\n onBlur={this.handleInputBlur}\n onClick={this.handleOnClick}\n placeholder={placeholder || formatMessage(messages.chooseDate)}\n required={isRequired}\n type={isAccessible && this.canUseDateInputType ? 'date' : 'text'}\n {...onChangeAttr}\n onFocus={onFocus}\n onKeyDown={this.handleInputKeyDown}\n {...resinTargetAttr}\n {...ariaAttrs}\n {...inputProps}\n {...valueAttr}\n {...additionalAttrs}\n />\n )}\n </Tooltip>\n <span id={this.errorMessageID} className=\"accessibility-hidden\" role=\"alert\">\n {errorMessage}\n </span>\n </>\n </Label>\n {isClearable && hasValue && !isDisabled ? (\n <PlainButton\n aria-label={formatMessage(messages.dateClearButton)}\n className=\"date-picker-clear-btn\"\n onClick={this.clearDate}\n type={ButtonType.BUTTON}\n >\n <ClearBadge16 />\n </PlainButton>\n ) : null}\n {hasError ? (\n <Alert16\n className=\"date-picker-icon-alert\"\n title={<FormattedMessage {...messages.iconAlertText} />}\n />\n ) : null}\n {this.renderCalendarButton()}\n <input\n className=\"date-picker-unix-time-input\"\n name={name}\n readOnly\n type=\"hidden\"\n value={value ? this.formatValue(value) : ''}\n />\n </span>\n </div>\n );\n }\n}\n\nexport { DatePicker as DatePickerBase };\nexport default injectIntl(DatePicker);\n"],"file":"DatePicker.js"}
@@ -23,10 +23,11 @@
23
23
  }
24
24
 
25
25
  .date-picker-input {
26
+ min-width: 160px;
26
27
  height: 32px;
27
28
  margin-top: 5px;
28
29
  margin-bottom: 0;
29
- padding-right: 30px;
30
+ padding-right: 6px;
30
31
  text-overflow: ellipsis;
31
32
 
32
33
  &::-webkit-calendar-picker-indicator {
@@ -45,6 +46,7 @@
45
46
  right: 7px;
46
47
  bottom: 8px;
47
48
  display: inline-flex;
49
+ background-color: $white;
48
50
  }
49
51
 
50
52
  .date-picker-open-btn:hover {
@@ -68,10 +70,6 @@
68
70
  transition: fill linear .1s;
69
71
  fill: $bdl-gray-50;
70
72
  }
71
-
72
- &.is-hidden {
73
- opacity: 0;
74
- }
75
73
  }
76
74
 
77
75
  > .date-picker-clear-btn:hover,
@@ -105,21 +103,19 @@
105
103
  }
106
104
  }
107
105
 
108
- &.show-clear-btn.show-error {
109
- .date-picker-clear-btn,
110
- .date-picker-clear-btn:hover,
111
- .date-picker-clear-btn:active {
112
- right: 25px;
113
- }
114
-
106
+ &.show-error {
115
107
  .date-picker-input {
116
- padding-right: 50px;
108
+ border-color: $bdl-watermelon-red;
117
109
  }
118
110
  }
119
111
 
120
- &.is-accessible {
121
- .date-picker-input {
122
- min-width: 135px;
112
+ &.show-clear-btn.show-error {
113
+ .date-picker-clear-btn {
114
+ right: 25px;
115
+ }
116
+
117
+ .date-picker-icon-alert {
118
+ right: 42px;
123
119
  }
124
120
  }
125
121
  }
@@ -22,8 +22,15 @@
22
22
 
23
23
  &.is-bound {
24
24
  position: absolute;
25
- margin-top: 5px;
26
25
  box-shadow: 0 2px 6px 0 rgba(0, 0, 0, .1);
26
+
27
+ &.bottom-aligned {
28
+ margin-top: 5px;
29
+ }
30
+
31
+ &.top-aligned {
32
+ margin-top: -5px;
33
+ }
27
34
  }
28
35
  }
29
36
 
@@ -337,7 +337,7 @@ function (_React$Component) {
337
337
  onMouseEnter: this.handleButtonHover,
338
338
  onMouseLeave: this.handleButtonHoverLeave,
339
339
  role: 'button',
340
- tabindex: '0',
340
+ tabIndex: '0',
341
341
  'aria-haspopup': 'true',
342
342
  'aria-expanded': isVisible ? 'true' : 'false'
343
343
  };
@@ -389,7 +389,7 @@ class Flyout extends React.Component<Props, State> {
389
389
  onMouseEnter: this.handleButtonHover,
390
390
  onMouseLeave: this.handleButtonHoverLeave,
391
391
  role: 'button',
392
- tabindex: '0',
392
+ tabIndex: '0',
393
393
  'aria-haspopup': 'true',
394
394
  'aria-expanded': isVisible ? 'true' : 'false',
395
395
  };