@cerebruminc/cerebellum 16.1.1-beta.dangerous.fe9f73b → 16.2.0

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 (80) hide show
  1. package/lib/cjs/ColorPickerInput-CBPI8IJ-.js +187 -0
  2. package/lib/cjs/ColorPickerInput-CBPI8IJ-.js.map +1 -0
  3. package/lib/cjs/ColorPickerInput.cjs +25 -0
  4. package/lib/cjs/ColorPickerInput.cjs.map +1 -0
  5. package/lib/cjs/DatePicker.cjs +1 -1
  6. package/lib/cjs/Form.cjs +7 -4
  7. package/lib/cjs/Form.cjs.map +1 -1
  8. package/lib/cjs/FormFieldTypeEnum.cjs +5 -0
  9. package/lib/cjs/FormFieldTypeEnum.cjs.map +1 -1
  10. package/lib/cjs/FormSeparator.cjs +3 -1
  11. package/lib/cjs/FormSeparator.cjs.map +1 -1
  12. package/lib/cjs/{FormStyles-CxgYRZOl.js → FormStyles-CM25rbhG.js} +38 -21
  13. package/lib/cjs/{FormStyles-CxgYRZOl.js.map → FormStyles-CM25rbhG.js.map} +1 -1
  14. package/lib/cjs/FormWrapper.cjs +3 -1
  15. package/lib/cjs/FormWrapper.cjs.map +1 -1
  16. package/lib/cjs/{FormikContainer-CY2nLsAs.js → FormikContainer-DVL86Jri.js} +33 -3
  17. package/lib/cjs/{FormikContainer-CY2nLsAs.js.map → FormikContainer-DVL86Jri.js.map} +1 -1
  18. package/lib/cjs/InlineColorPickerInput.cjs +25 -0
  19. package/lib/cjs/InlineColorPickerInput.cjs.map +1 -0
  20. package/lib/cjs/{InlineDatePicker-DFv_uHo9.js → InlineDatePicker-B7DTwvhv.js} +344 -176
  21. package/lib/cjs/InlineDatePicker-B7DTwvhv.js.map +1 -0
  22. package/lib/cjs/InlineDatePicker.cjs +1 -1
  23. package/lib/cjs/TitleGroup.cjs +3 -1
  24. package/lib/cjs/TitleGroup.cjs.map +1 -1
  25. package/lib/cjs/cerebellumTheme.cjs +5 -0
  26. package/lib/cjs/cerebellumTheme.cjs.map +1 -1
  27. package/lib/cjs/index.cjs +9 -3
  28. package/lib/cjs/index.cjs.map +1 -1
  29. package/lib/cjs/validateColorContrast.cjs +53 -0
  30. package/lib/cjs/validateColorContrast.cjs.map +1 -0
  31. package/lib/cjs/validateColorContrastWithMessage.cjs +10 -0
  32. package/lib/cjs/validateColorContrastWithMessage.cjs.map +1 -0
  33. package/lib/esm/ColorPickerInput-S8X2gIA5.js +180 -0
  34. package/lib/esm/ColorPickerInput-S8X2gIA5.js.map +1 -0
  35. package/lib/esm/ColorPickerInput.js +18 -0
  36. package/lib/esm/ColorPickerInput.js.map +1 -0
  37. package/lib/esm/DatePicker.js +1 -1
  38. package/lib/esm/Form.js +7 -5
  39. package/lib/esm/Form.js.map +1 -1
  40. package/lib/esm/FormFieldTypeEnum.js +5 -1
  41. package/lib/esm/FormFieldTypeEnum.js.map +1 -1
  42. package/lib/esm/FormSeparator.js +3 -1
  43. package/lib/esm/FormSeparator.js.map +1 -1
  44. package/lib/esm/{FormStyles-BQJPyTS0.js → FormStyles-CyqyMC1o.js} +39 -22
  45. package/lib/esm/{FormStyles-BQJPyTS0.js.map → FormStyles-CyqyMC1o.js.map} +1 -1
  46. package/lib/esm/FormWrapper.js +3 -1
  47. package/lib/esm/FormWrapper.js.map +1 -1
  48. package/lib/esm/{FormikContainer-SJPYfIkF.js → FormikContainer-uI5oe1px.js} +34 -4
  49. package/lib/esm/{FormikContainer-SJPYfIkF.js.map → FormikContainer-uI5oe1px.js.map} +1 -1
  50. package/lib/esm/InlineColorPickerInput.js +18 -0
  51. package/lib/esm/InlineColorPickerInput.js.map +1 -0
  52. package/lib/esm/{InlineDatePicker-ClVBWEzW.js → InlineDatePicker-BuxjkoV0.js} +345 -177
  53. package/lib/esm/InlineDatePicker-BuxjkoV0.js.map +1 -0
  54. package/lib/esm/InlineDatePicker.js +1 -1
  55. package/lib/esm/TitleGroup.js +3 -1
  56. package/lib/esm/TitleGroup.js.map +1 -1
  57. package/lib/esm/cerebellumTheme.js +5 -0
  58. package/lib/esm/cerebellumTheme.js.map +1 -1
  59. package/lib/esm/index.js +6 -4
  60. package/lib/esm/index.js.map +1 -1
  61. package/lib/esm/validateColorContrast.js +50 -0
  62. package/lib/esm/validateColorContrast.js.map +1 -0
  63. package/lib/esm/validateColorContrastWithMessage.js +3 -0
  64. package/lib/esm/validateColorContrastWithMessage.js.map +1 -0
  65. package/lib/types/src/components/ColorPickerInput/ColorPickerInput.d.ts +3 -0
  66. package/lib/types/src/components/ColorPickerInput/InlineColorPickerInput.d.ts +3 -0
  67. package/lib/types/src/components/ColorPickerInput/index.d.ts +3 -0
  68. package/lib/types/src/components/ColorPickerInput/types.d.ts +48 -0
  69. package/lib/types/src/components/Form/fields/ColorPickerField/ColorPickerField.d.ts +4 -0
  70. package/lib/types/src/components/Form/fields/ColorPickerField/index.d.ts +1 -0
  71. package/lib/types/src/components/Form/fields/index.d.ts +2 -1
  72. package/lib/types/src/components/Form/index.d.ts +3 -3
  73. package/lib/types/src/components/Form/mocks/fields.d.ts +62 -0
  74. package/lib/types/src/components/Form/types.d.ts +36 -2
  75. package/lib/types/src/helpers/colorValidators.d.ts +19 -0
  76. package/lib/types/src/index.d.ts +5 -1
  77. package/lib/types/src/theme.d.ts +6 -0
  78. package/package.json +1 -1
  79. package/lib/cjs/InlineDatePicker-DFv_uHo9.js.map +0 -1
  80. package/lib/esm/InlineDatePicker-ClVBWEzW.js.map +0 -1
@@ -7521,34 +7521,40 @@ function isShadowRoot(value) {
7521
7521
  }
7522
7522
  return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot;
7523
7523
  }
7524
+ const invalidOverflowDisplayValues = /*#__PURE__*/new Set(['inline', 'contents']);
7524
7525
  function isOverflowElement(element) {
7525
7526
  const {
7526
7527
  overflow,
7527
7528
  overflowX,
7528
7529
  overflowY,
7529
7530
  display
7530
- } = getComputedStyle(element);
7531
- return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !['inline', 'contents'].includes(display);
7531
+ } = getComputedStyle$1(element);
7532
+ return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display);
7532
7533
  }
7534
+ const tableElements = /*#__PURE__*/new Set(['table', 'td', 'th']);
7533
7535
  function isTableElement(element) {
7534
- return ['table', 'td', 'th'].includes(getNodeName(element));
7536
+ return tableElements.has(getNodeName(element));
7535
7537
  }
7538
+ const topLayerSelectors = [':popover-open', ':modal'];
7536
7539
  function isTopLayer(element) {
7537
- return [':popover-open', ':modal'].some(selector => {
7540
+ return topLayerSelectors.some(selector => {
7538
7541
  try {
7539
7542
  return element.matches(selector);
7540
- } catch (e) {
7543
+ } catch (_e) {
7541
7544
  return false;
7542
7545
  }
7543
7546
  });
7544
7547
  }
7548
+ const transformProperties = ['transform', 'translate', 'scale', 'rotate', 'perspective'];
7549
+ const willChangeValues = ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'];
7550
+ const containValues = ['paint', 'layout', 'strict', 'content'];
7545
7551
  function isContainingBlock(elementOrCss) {
7546
7552
  const webkit = isWebKit();
7547
- const css = isElement(elementOrCss) ? getComputedStyle(elementOrCss) : elementOrCss;
7553
+ const css = isElement(elementOrCss) ? getComputedStyle$1(elementOrCss) : elementOrCss;
7548
7554
 
7549
7555
  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
7550
7556
  // https://drafts.csswg.org/css-transforms-2/#individual-transforms
7551
- return ['transform', 'translate', 'scale', 'rotate', 'perspective'].some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || ['transform', 'translate', 'scale', 'rotate', 'perspective', 'filter'].some(value => (css.willChange || '').includes(value)) || ['paint', 'layout', 'strict', 'content'].some(value => (css.contain || '').includes(value));
7557
+ return transformProperties.some(value => css[value] ? css[value] !== 'none' : false) || (css.containerType ? css.containerType !== 'normal' : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== 'none' : false) || !webkit && (css.filter ? css.filter !== 'none' : false) || willChangeValues.some(value => (css.willChange || '').includes(value)) || containValues.some(value => (css.contain || '').includes(value));
7552
7558
  }
7553
7559
  function getContainingBlock(element) {
7554
7560
  let currentNode = getParentNode(element);
@@ -7566,10 +7572,11 @@ function isWebKit() {
7566
7572
  if (typeof CSS === 'undefined' || !CSS.supports) return false;
7567
7573
  return CSS.supports('-webkit-backdrop-filter', 'none');
7568
7574
  }
7575
+ const lastTraversableNodeNames = /*#__PURE__*/new Set(['html', 'body', '#document']);
7569
7576
  function isLastTraversableNode(node) {
7570
- return ['html', 'body', '#document'].includes(getNodeName(node));
7577
+ return lastTraversableNodeNames.has(getNodeName(node));
7571
7578
  }
7572
- function getComputedStyle(element) {
7579
+ function getComputedStyle$1(element) {
7573
7580
  return getWindow(element).getComputedStyle(element);
7574
7581
  }
7575
7582
  function getNodeScroll(element) {
@@ -7671,8 +7678,9 @@ function getOppositeAxis(axis) {
7671
7678
  function getAxisLength(axis) {
7672
7679
  return axis === 'y' ? 'height' : 'width';
7673
7680
  }
7681
+ const yAxisSides = /*#__PURE__*/new Set(['top', 'bottom']);
7674
7682
  function getSideAxis(placement) {
7675
- return ['top', 'bottom'].includes(getSide(placement)) ? 'y' : 'x';
7683
+ return yAxisSides.has(getSide(placement)) ? 'y' : 'x';
7676
7684
  }
7677
7685
  function getAlignmentAxis(placement) {
7678
7686
  return getOppositeAxis(getSideAxis(placement));
@@ -7697,19 +7705,19 @@ function getExpandedPlacements(placement) {
7697
7705
  function getOppositeAlignmentPlacement(placement) {
7698
7706
  return placement.replace(/start|end/g, alignment => oppositeAlignmentMap[alignment]);
7699
7707
  }
7708
+ const lrPlacement = ['left', 'right'];
7709
+ const rlPlacement = ['right', 'left'];
7710
+ const tbPlacement = ['top', 'bottom'];
7711
+ const btPlacement = ['bottom', 'top'];
7700
7712
  function getSideList(side, isStart, rtl) {
7701
- const lr = ['left', 'right'];
7702
- const rl = ['right', 'left'];
7703
- const tb = ['top', 'bottom'];
7704
- const bt = ['bottom', 'top'];
7705
7713
  switch (side) {
7706
7714
  case 'top':
7707
7715
  case 'bottom':
7708
- if (rtl) return isStart ? rl : lr;
7709
- return isStart ? lr : rl;
7716
+ if (rtl) return isStart ? rlPlacement : lrPlacement;
7717
+ return isStart ? lrPlacement : rlPlacement;
7710
7718
  case 'left':
7711
7719
  case 'right':
7712
- return isStart ? tb : bt;
7720
+ return isStart ? tbPlacement : btPlacement;
7713
7721
  default:
7714
7722
  return [];
7715
7723
  }
@@ -8161,7 +8169,7 @@ const flip$2 = function (options) {
8161
8169
  if (!ignoreCrossAxisOverflow ||
8162
8170
  // We leave the current main axis only if every placement on that axis
8163
8171
  // overflows the main axis.
8164
- overflowsData.every(d => d.overflows[0] > 0 && getSideAxis(d.placement) === initialSideAxis)) {
8172
+ overflowsData.every(d => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) {
8165
8173
  // Try next placement and re-run the lifecycle.
8166
8174
  return {
8167
8175
  data: {
@@ -8218,6 +8226,8 @@ const flip$2 = function (options) {
8218
8226
  };
8219
8227
  };
8220
8228
 
8229
+ const originSides = /*#__PURE__*/new Set(['left', 'top']);
8230
+
8221
8231
  // For type backwards-compatibility, the `OffsetOptions` type was also
8222
8232
  // Derivable.
8223
8233
 
@@ -8231,7 +8241,7 @@ async function convertValueToCoords(state, options) {
8231
8241
  const side = getSide(placement);
8232
8242
  const alignment = getAlignment(placement);
8233
8243
  const isVertical = getSideAxis(placement) === 'y';
8234
- const mainAxisMulti = ['left', 'top'].includes(side) ? -1 : 1;
8244
+ const mainAxisMulti = originSides.has(side) ? -1 : 1;
8235
8245
  const crossAxisMulti = rtl && isVertical ? -1 : 1;
8236
8246
  const rawValue = evaluate(options, state);
8237
8247
 
@@ -8303,7 +8313,7 @@ const offset$2 = function (options) {
8303
8313
  };
8304
8314
 
8305
8315
  function getCssDimensions(element) {
8306
- const css = getComputedStyle(element);
8316
+ const css = getComputedStyle$1(element);
8307
8317
  // In testing environments, the `width` and `height` properties are empty
8308
8318
  // strings for SVG elements, returning NaN. Fallback to `0` in this case.
8309
8319
  let width = parseFloat(css.width) || 0;
@@ -8408,7 +8418,7 @@ function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetPar
8408
8418
  while (currentIFrame && offsetParent && offsetWin !== currentWin) {
8409
8419
  const iframeScale = getScale(currentIFrame);
8410
8420
  const iframeRect = currentIFrame.getBoundingClientRect();
8411
- const css = getComputedStyle(currentIFrame);
8421
+ const css = getComputedStyle$1(currentIFrame);
8412
8422
  const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x;
8413
8423
  const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y;
8414
8424
  x *= iframeScale.x;
@@ -8439,14 +8449,9 @@ function getWindowScrollBarX(element, rect) {
8439
8449
  return rect.left + leftScroll;
8440
8450
  }
8441
8451
 
8442
- function getHTMLOffset(documentElement, scroll, ignoreScrollbarX) {
8443
- if (ignoreScrollbarX === void 0) {
8444
- ignoreScrollbarX = false;
8445
- }
8452
+ function getHTMLOffset(documentElement, scroll) {
8446
8453
  const htmlRect = documentElement.getBoundingClientRect();
8447
- const x = htmlRect.left + scroll.scrollLeft - (ignoreScrollbarX ? 0 :
8448
- // RTL <body> scrollbar.
8449
- getWindowScrollBarX(documentElement, htmlRect));
8454
+ const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect);
8450
8455
  const y = htmlRect.top + scroll.scrollTop;
8451
8456
  return {
8452
8457
  x,
@@ -8485,7 +8490,7 @@ function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) {
8485
8490
  offsets.y = offsetRect.y + offsetParent.clientTop;
8486
8491
  }
8487
8492
  }
8488
- const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll, true) : createCoords(0);
8493
+ const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0);
8489
8494
  return {
8490
8495
  width: rect.width * scale.x,
8491
8496
  height: rect.height * scale.y,
@@ -8508,7 +8513,7 @@ function getDocumentRect(element) {
8508
8513
  const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight);
8509
8514
  let x = -scroll.scrollLeft + getWindowScrollBarX(element);
8510
8515
  const y = -scroll.scrollTop;
8511
- if (getComputedStyle(body).direction === 'rtl') {
8516
+ if (getComputedStyle$1(body).direction === 'rtl') {
8512
8517
  x += max(html.clientWidth, body.clientWidth) - width;
8513
8518
  }
8514
8519
  return {
@@ -8519,6 +8524,10 @@ function getDocumentRect(element) {
8519
8524
  };
8520
8525
  }
8521
8526
 
8527
+ // Safety check: ensure the scrollbar space is reasonable in case this
8528
+ // calculation is affected by unusual styles.
8529
+ // Most scrollbars leave 15-18px of space.
8530
+ const SCROLLBAR_MAX = 25;
8522
8531
  function getViewportRect(element, strategy) {
8523
8532
  const win = getWindow(element);
8524
8533
  const html = getDocumentElement(element);
@@ -8536,6 +8545,24 @@ function getViewportRect(element, strategy) {
8536
8545
  y = visualViewport.offsetTop;
8537
8546
  }
8538
8547
  }
8548
+ const windowScrollbarX = getWindowScrollBarX(html);
8549
+ // <html> `overflow: hidden` + `scrollbar-gutter: stable` reduces the
8550
+ // visual width of the <html> but this is not considered in the size
8551
+ // of `html.clientWidth`.
8552
+ if (windowScrollbarX <= 0) {
8553
+ const doc = html.ownerDocument;
8554
+ const body = doc.body;
8555
+ const bodyStyles = getComputedStyle(body);
8556
+ const bodyMarginInline = doc.compatMode === 'CSS1Compat' ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0;
8557
+ const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline);
8558
+ if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) {
8559
+ width -= clippingStableScrollbarWidth;
8560
+ }
8561
+ } else if (windowScrollbarX <= SCROLLBAR_MAX) {
8562
+ // If the <body> scrollbar is on the left, the width needs to be extended
8563
+ // by the scrollbar amount so there isn't extra space on the right.
8564
+ width += windowScrollbarX;
8565
+ }
8539
8566
  return {
8540
8567
  width,
8541
8568
  height,
@@ -8544,6 +8571,7 @@ function getViewportRect(element, strategy) {
8544
8571
  };
8545
8572
  }
8546
8573
 
8574
+ const absoluteOrFixed = /*#__PURE__*/new Set(['absolute', 'fixed']);
8547
8575
  // Returns the inner client rect, subtracting scrollbars if present.
8548
8576
  function getInnerBoundingClientRect(element, strategy) {
8549
8577
  const clientRect = getBoundingClientRect(element, true, strategy === 'fixed');
@@ -8585,7 +8613,7 @@ function hasFixedPositionAncestor(element, stopNode) {
8585
8613
  if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) {
8586
8614
  return false;
8587
8615
  }
8588
- return getComputedStyle(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
8616
+ return getComputedStyle$1(parentNode).position === 'fixed' || hasFixedPositionAncestor(parentNode, stopNode);
8589
8617
  }
8590
8618
 
8591
8619
  // A "clipping ancestor" is an `overflow` element with the characteristic of
@@ -8598,17 +8626,17 @@ function getClippingElementAncestors(element, cache) {
8598
8626
  }
8599
8627
  let result = getOverflowAncestors(element, [], false).filter(el => isElement(el) && getNodeName(el) !== 'body');
8600
8628
  let currentContainingBlockComputedStyle = null;
8601
- const elementIsFixed = getComputedStyle(element).position === 'fixed';
8629
+ const elementIsFixed = getComputedStyle$1(element).position === 'fixed';
8602
8630
  let currentNode = elementIsFixed ? getParentNode(element) : element;
8603
8631
 
8604
8632
  // https://developer.mozilla.org/en-US/docs/Web/CSS/Containing_block#identifying_the_containing_block
8605
8633
  while (isElement(currentNode) && !isLastTraversableNode(currentNode)) {
8606
- const computedStyle = getComputedStyle(currentNode);
8634
+ const computedStyle = getComputedStyle$1(currentNode);
8607
8635
  const currentNodeIsContaining = isContainingBlock(currentNode);
8608
8636
  if (!currentNodeIsContaining && computedStyle.position === 'fixed') {
8609
8637
  currentContainingBlockComputedStyle = null;
8610
8638
  }
8611
- const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && ['absolute', 'fixed'].includes(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
8639
+ const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === 'static' && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode);
8612
8640
  if (shouldDropCurrentNode) {
8613
8641
  // Drop non-containing blocks.
8614
8642
  result = result.filter(ancestor => ancestor !== currentNode);
@@ -8704,11 +8732,11 @@ function getRectRelativeToOffsetParent(element, offsetParent, strategy) {
8704
8732
  }
8705
8733
 
8706
8734
  function isStaticPositioned(element) {
8707
- return getComputedStyle(element).position === 'static';
8735
+ return getComputedStyle$1(element).position === 'static';
8708
8736
  }
8709
8737
 
8710
8738
  function getTrueOffsetParent(element, polyfill) {
8711
- if (!isHTMLElement(element) || getComputedStyle(element).position === 'fixed') {
8739
+ if (!isHTMLElement(element) || getComputedStyle$1(element).position === 'fixed') {
8712
8740
  return null;
8713
8741
  }
8714
8742
  if (polyfill) {
@@ -8769,7 +8797,7 @@ const getElementRects = async function (data) {
8769
8797
  };
8770
8798
 
8771
8799
  function isRTL(element) {
8772
- return getComputedStyle(element).direction === 'rtl';
8800
+ return getComputedStyle$1(element).direction === 'rtl';
8773
8801
  }
8774
8802
 
8775
8803
  const platform = {
@@ -9409,7 +9437,7 @@ const FloatingArrow = /*#__PURE__*/React__namespace.forwardRef(function Floating
9409
9437
  // https://github.com/floating-ui/floating-ui/issues/2932
9410
9438
  index$1(() => {
9411
9439
  if (!floating) return;
9412
- const isRTL = getComputedStyle(floating).direction === 'rtl';
9440
+ const isRTL = getComputedStyle$1(floating).direction === 'rtl';
9413
9441
  if (isRTL) {
9414
9442
  setIsRTL(true);
9415
9443
  }
@@ -9668,7 +9696,7 @@ function useFloating(options) {
9668
9696
  }
9669
9697
 
9670
9698
  /*!
9671
- react-datepicker v8.4.0
9699
+ react-datepicker v8.8.0
9672
9700
  https://github.com/Hacker0x01/react-datepicker
9673
9701
  Released under the MIT License.
9674
9702
  */
@@ -9903,12 +9931,13 @@ var DATE_RANGE_SEPARATOR = " - ";
9903
9931
  * @returns - The formatted date range or an empty string.
9904
9932
  */
9905
9933
  function safeDateRangeFormat(startDate, endDate, props) {
9906
- if (!startDate) {
9934
+ if (!startDate && !endDate) {
9907
9935
  return "";
9908
9936
  }
9909
- var formattedStartDate = safeDateFormat(startDate, props);
9937
+ var formattedStartDate = startDate ? safeDateFormat(startDate, props) : "";
9910
9938
  var formattedEndDate = endDate ? safeDateFormat(endDate, props) : "";
9911
- return "".concat(formattedStartDate).concat(DATE_RANGE_SEPARATOR).concat(formattedEndDate);
9939
+ var dateRangeSeparator = props.rangeSeparator || DATE_RANGE_SEPARATOR;
9940
+ return "".concat(formattedStartDate).concat(dateRangeSeparator).concat(formattedEndDate);
9912
9941
  }
9913
9942
  /**
9914
9943
  * Safely formats multiple dates.
@@ -10244,7 +10273,10 @@ function getQuarterShortInLocale(quarter, locale) {
10244
10273
  * @returns - Returns true if the day is disabled, false otherwise.
10245
10274
  */
10246
10275
  function isDayDisabled(day, _a) {
10247
- var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, excludeDateIntervals = _b.excludeDateIntervals, includeDates = _b.includeDates, includeDateIntervals = _b.includeDateIntervals, filterDate = _b.filterDate;
10276
+ var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, excludeDateIntervals = _b.excludeDateIntervals, includeDates = _b.includeDates, includeDateIntervals = _b.includeDateIntervals, filterDate = _b.filterDate, disabled = _b.disabled;
10277
+ if (disabled) {
10278
+ return true;
10279
+ }
10248
10280
  return (isOutOfBounds(day, { minDate: minDate, maxDate: maxDate }) ||
10249
10281
  (excludeDates &&
10250
10282
  excludeDates.some(function (excludeDate) {
@@ -10344,7 +10376,10 @@ function isMonthYearDisabled(date, _a) {
10344
10376
  false);
10345
10377
  }
10346
10378
  function isQuarterDisabled(quarter, _a) {
10347
- var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates, filterDate = _b.filterDate;
10379
+ var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates, filterDate = _b.filterDate, disabled = _b.disabled;
10380
+ if (disabled) {
10381
+ return true;
10382
+ }
10348
10383
  return (isOutOfBounds(quarter, { minDate: minDate, maxDate: maxDate }) ||
10349
10384
  (excludeDates === null || excludeDates === void 0 ? void 0 : excludeDates.some(function (excludeDate) {
10350
10385
  return isSameQuarter(quarter, excludeDate instanceof Date ? excludeDate : excludeDate.date);
@@ -10366,7 +10401,10 @@ function isYearInRange(year, start, end) {
10366
10401
  return startYear <= year && endYear >= year;
10367
10402
  }
10368
10403
  function isYearDisabled(year, _a) {
10369
- var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates, filterDate = _b.filterDate;
10404
+ var _b = _a === void 0 ? {} : _a, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates, filterDate = _b.filterDate, disabled = _b.disabled;
10405
+ if (disabled) {
10406
+ return true;
10407
+ }
10370
10408
  var date = new Date(year, 0, 1);
10371
10409
  return (isOutOfBounds(date, {
10372
10410
  minDate: minDate ? startOfYear(minDate) : undefined,
@@ -10956,6 +10994,7 @@ var Day = /** @class */ (function (_super) {
10956
10994
  includeDateIntervals: _this.props.includeDateIntervals,
10957
10995
  includeDates: _this.props.includeDates,
10958
10996
  filterDate: _this.props.filterDate,
10997
+ disabled: _this.props.disabled,
10959
10998
  });
10960
10999
  };
10961
11000
  _this.isExcluded = function () {
@@ -11010,7 +11049,7 @@ var Day = /** @class */ (function (_super) {
11010
11049
  };
11011
11050
  _this.isInSelectingRange = function () {
11012
11051
  var _a;
11013
- var _b = _this.props, day = _b.day, selectsStart = _b.selectsStart, selectsEnd = _b.selectsEnd, selectsRange = _b.selectsRange, selectsDisabledDaysInRange = _b.selectsDisabledDaysInRange, startDate = _b.startDate, endDate = _b.endDate;
11052
+ var _b = _this.props, day = _b.day, selectsStart = _b.selectsStart, selectsEnd = _b.selectsEnd, selectsRange = _b.selectsRange, selectsDisabledDaysInRange = _b.selectsDisabledDaysInRange, startDate = _b.startDate, swapRange = _b.swapRange, endDate = _b.endDate;
11014
11053
  var selectingDate = (_a = _this.props.selectingDate) !== null && _a !== void 0 ? _a : _this.props.preSelection;
11015
11054
  if (!(selectsStart || selectsEnd || selectsRange) ||
11016
11055
  !selectingDate ||
@@ -11027,11 +11066,16 @@ var Day = /** @class */ (function (_super) {
11027
11066
  (isAfter(selectingDate, startDate) || isEqual(selectingDate, startDate))) {
11028
11067
  return isDayInRange(day, startDate, selectingDate);
11029
11068
  }
11030
- if (selectsRange &&
11031
- startDate &&
11032
- !endDate &&
11033
- (isAfter(selectingDate, startDate) || isEqual(selectingDate, startDate))) {
11034
- return isDayInRange(day, startDate, selectingDate);
11069
+ if (selectsRange && startDate && !endDate) {
11070
+ if (isEqual(selectingDate, startDate)) {
11071
+ return isDayInRange(day, startDate, selectingDate);
11072
+ }
11073
+ if (isAfter(selectingDate, startDate)) {
11074
+ return isDayInRange(day, startDate, selectingDate);
11075
+ }
11076
+ if (swapRange && isBefore(selectingDate, startDate)) {
11077
+ return isDayInRange(day, selectingDate, startDate);
11078
+ }
11035
11079
  }
11036
11080
  return false;
11037
11081
  };
@@ -11040,28 +11084,33 @@ var Day = /** @class */ (function (_super) {
11040
11084
  if (!_this.isInSelectingRange()) {
11041
11085
  return false;
11042
11086
  }
11043
- var _b = _this.props, day = _b.day, startDate = _b.startDate, selectsStart = _b.selectsStart;
11087
+ var _b = _this.props, day = _b.day, startDate = _b.startDate, selectsStart = _b.selectsStart, swapRange = _b.swapRange, selectsRange = _b.selectsRange;
11044
11088
  var selectingDate = (_a = _this.props.selectingDate) !== null && _a !== void 0 ? _a : _this.props.preSelection;
11045
11089
  if (selectsStart) {
11046
11090
  return isSameDay(day, selectingDate);
11047
11091
  }
11048
- else {
11049
- return isSameDay(day, startDate);
11092
+ if (selectsRange && swapRange && startDate && selectingDate) {
11093
+ return isSameDay(day, isBefore(selectingDate, startDate) ? selectingDate : startDate);
11050
11094
  }
11095
+ return isSameDay(day, startDate);
11051
11096
  };
11052
11097
  _this.isSelectingRangeEnd = function () {
11053
11098
  var _a;
11054
11099
  if (!_this.isInSelectingRange()) {
11055
11100
  return false;
11056
11101
  }
11057
- var _b = _this.props, day = _b.day, endDate = _b.endDate, selectsEnd = _b.selectsEnd, selectsRange = _b.selectsRange;
11102
+ var _b = _this.props, day = _b.day, endDate = _b.endDate, selectsEnd = _b.selectsEnd, selectsRange = _b.selectsRange, swapRange = _b.swapRange, startDate = _b.startDate;
11058
11103
  var selectingDate = (_a = _this.props.selectingDate) !== null && _a !== void 0 ? _a : _this.props.preSelection;
11059
- if (selectsEnd || selectsRange) {
11104
+ if (selectsEnd) {
11060
11105
  return isSameDay(day, selectingDate);
11061
11106
  }
11062
- else {
11063
- return isSameDay(day, endDate);
11107
+ if (selectsRange && swapRange && startDate && selectingDate) {
11108
+ return isSameDay(day, isBefore(selectingDate, startDate) ? startDate : selectingDate);
11109
+ }
11110
+ if (selectsRange) {
11111
+ return isSameDay(day, selectingDate);
11064
11112
  }
11113
+ return isSameDay(day, endDate);
11065
11114
  };
11066
11115
  _this.isRangeStart = function () {
11067
11116
  var _a = _this.props, day = _a.day, startDate = _a.startDate, endDate = _a.endDate;
@@ -11182,7 +11231,7 @@ var Day = /** @class */ (function (_super) {
11182
11231
  };
11183
11232
  _this.render = function () { return (
11184
11233
  // TODO: Use <option> instead of the "option" role to ensure accessibility across all devices.
11185
- React__namespace.default.createElement("div", { ref: _this.dayEl, className: _this.getClassNames(_this.props.day), onKeyDown: _this.handleOnKeyDown, onClick: _this.handleClick, onMouseEnter: !_this.props.usePointerEvent ? _this.handleMouseEnter : undefined, onPointerEnter: _this.props.usePointerEvent ? _this.handleMouseEnter : undefined, tabIndex: _this.getTabIndex(), "aria-label": _this.getAriaLabel(), role: "option", title: _this.getTitle(), "aria-disabled": _this.isDisabled(), "aria-current": _this.isCurrentDay() ? "date" : undefined, "aria-selected": _this.isSelected() || _this.isInRange() },
11234
+ React__namespace.default.createElement("div", { ref: _this.dayEl, className: _this.getClassNames(_this.props.day), onKeyDown: _this.handleOnKeyDown, onClick: _this.handleClick, onMouseEnter: !_this.props.usePointerEvent ? _this.handleMouseEnter : undefined, onPointerEnter: _this.props.usePointerEvent ? _this.handleMouseEnter : undefined, tabIndex: _this.getTabIndex(), "aria-label": _this.getAriaLabel(), role: "gridcell", title: _this.getTitle(), "aria-disabled": _this.isDisabled(), "aria-current": _this.isCurrentDay() ? "date" : undefined, "aria-selected": _this.isSelected() || _this.isInRange() },
11186
11235
  _this.renderDayContents(),
11187
11236
  _this.getTitle() !== "" && (React__namespace.default.createElement("span", { className: "overlay" }, _this.getTitle())))); };
11188
11237
  return _this;
@@ -11320,7 +11369,7 @@ var WeekNumber = /** @class */ (function (_super) {
11320
11369
  "react-datepicker__week-number--clickable": !!onClick && !isWeekDisabled,
11321
11370
  "react-datepicker__week-number--selected": !!onClick && isSameDay(this.props.date, this.props.selected),
11322
11371
  };
11323
- return (React__namespace.default.createElement("div", { ref: this.weekNumberEl, className: clsx(weekNumberClasses), "aria-label": "".concat(ariaLabelPrefix, " ").concat(this.props.weekNumber), onClick: this.handleClick, onKeyDown: this.handleOnKeyDown, tabIndex: this.getTabIndex() }, weekNumber));
11372
+ return (React__namespace.default.createElement("div", { ref: this.weekNumberEl, className: clsx(weekNumberClasses), "aria-label": "".concat(ariaLabelPrefix, " ").concat(this.props.weekNumber), onClick: this.handleClick, onKeyDown: this.handleOnKeyDown, tabIndex: this.getTabIndex(), role: "gridcell" }, weekNumber));
11324
11373
  };
11325
11374
  return WeekNumber;
11326
11375
  }(React.Component));
@@ -11429,7 +11478,10 @@ var Week = /** @class */ (function (_super) {
11429
11478
  "react-datepicker__week--selected": isSameDay(this.startOfWeek(), this.props.selected),
11430
11479
  "react-datepicker__week--keyboard-selected": this.isKeyboardSelected(),
11431
11480
  };
11432
- return React__namespace.default.createElement("div", { className: clsx(weekNumberClasses) }, this.renderDays());
11481
+ var customWeekClassName = this.props.weekClassName
11482
+ ? this.props.weekClassName(this.startOfWeek())
11483
+ : undefined;
11484
+ return (React__namespace.default.createElement("div", { className: clsx(weekNumberClasses, customWeekClassName), role: "row" }, this.renderDays()));
11433
11485
  };
11434
11486
  return Week;
11435
11487
  }(React.Component));
@@ -11590,6 +11642,7 @@ var Month$1 = /** @class */ (function (_super) {
11590
11642
  includeDateIntervals: _this.props.includeDateIntervals,
11591
11643
  includeDates: _this.props.includeDates,
11592
11644
  filterDate: _this.props.filterDate,
11645
+ disabled: _this.props.disabled,
11593
11646
  });
11594
11647
  };
11595
11648
  _this.isExcluded = function (day) {
@@ -11957,8 +12010,14 @@ var Month$1 = /** @class */ (function (_super) {
11957
12010
  };
11958
12011
  _this.isMonthDisabledForLabelDate = function (month) {
11959
12012
  var _a;
11960
- var _b = _this.props, day = _b.day, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates;
12013
+ var _b = _this.props, day = _b.day, disabled = _b.disabled, minDate = _b.minDate, maxDate = _b.maxDate, excludeDates = _b.excludeDates, includeDates = _b.includeDates;
11961
12014
  var labelDate = setMonth(day, month);
12015
+ if (disabled) {
12016
+ return {
12017
+ isDisabled: true,
12018
+ labelDate: setMonth(day, month),
12019
+ };
12020
+ }
11962
12021
  return {
11963
12022
  isDisabled: (_a = ((minDate || maxDate || excludeDates || includeDates) &&
11964
12023
  isMonthDisabled(labelDate, _this.props))) !== null && _a !== void 0 ? _a : false,
@@ -12029,8 +12088,13 @@ var Month$1 = /** @class */ (function (_super) {
12029
12088
  return "".concat(prefix, " ").concat(formatDate(labelDate, "MMMM yyyy", locale));
12030
12089
  };
12031
12090
  _this.getQuarterClassNames = function (q) {
12032
- var _a = _this.props, day = _a.day, startDate = _a.startDate, endDate = _a.endDate, selected = _a.selected, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, preSelection = _a.preSelection, disabledKeyboardNavigation = _a.disabledKeyboardNavigation;
12033
- var isDisabled = (minDate || maxDate || excludeDates || includeDates || filterDate) &&
12091
+ var _a = _this.props, day = _a.day, startDate = _a.startDate, endDate = _a.endDate, selected = _a.selected, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, preSelection = _a.preSelection, disabledKeyboardNavigation = _a.disabledKeyboardNavigation, disabled = _a.disabled;
12092
+ var isDisabled = (minDate ||
12093
+ maxDate ||
12094
+ excludeDates ||
12095
+ includeDates ||
12096
+ filterDate ||
12097
+ disabled) &&
12034
12098
  isQuarterDisabled(setQuarter(day, q), _this.props);
12035
12099
  return clsx("react-datepicker__quarter-text", "react-datepicker__quarter-".concat(q), {
12036
12100
  "react-datepicker__quarter-text--disabled": isDisabled,
@@ -12119,11 +12183,14 @@ var Month$1 = /** @class */ (function (_super) {
12119
12183
  var formattedAriaLabelPrefix = ariaLabelPrefix
12120
12184
  ? ariaLabelPrefix.trim() + " "
12121
12185
  : "";
12122
- return (React__namespace.default.createElement("div", { className: this.getClassNames(), onMouseLeave: !this.props.usePointerEvent ? this.handleMouseLeave : undefined, onPointerLeave: this.props.usePointerEvent ? this.handleMouseLeave : undefined, "aria-label": "".concat(formattedAriaLabelPrefix).concat(formatDate(day, "MMMM, yyyy", this.props.locale)), role: "listbox" }, showMonthYearPicker
12123
- ? this.renderMonths()
12124
- : showQuarterYearPicker
12125
- ? this.renderQuarters()
12126
- : this.renderWeeks()));
12186
+ var shouldUseListboxRole = showMonthYearPicker || showQuarterYearPicker;
12187
+ if (shouldUseListboxRole) {
12188
+ return (React__namespace.default.createElement("div", { className: this.getClassNames(), onMouseLeave: !this.props.usePointerEvent ? this.handleMouseLeave : undefined, onPointerLeave: this.props.usePointerEvent ? this.handleMouseLeave : undefined, "aria-label": "".concat(formattedAriaLabelPrefix).concat(formatDate(day, "MMMM, yyyy", this.props.locale)), role: "listbox" }, showMonthYearPicker ? this.renderMonths() : this.renderQuarters()));
12189
+ }
12190
+ // For regular calendar view, use table structure
12191
+ return (React__namespace.default.createElement("div", { role: "table" },
12192
+ this.props.dayNamesHeader && (React__namespace.default.createElement("div", { role: "rowgroup" }, this.props.dayNamesHeader)),
12193
+ React__namespace.default.createElement("div", { className: this.getClassNames(), onMouseLeave: !this.props.usePointerEvent ? this.handleMouseLeave : undefined, onPointerLeave: this.props.usePointerEvent ? this.handleMouseLeave : undefined, "aria-label": "".concat(formattedAriaLabelPrefix).concat(formatDate(day, "MMMM, yyyy", this.props.locale)), role: "rowgroup" }, this.renderWeeks())));
12127
12194
  };
12128
12195
  return Month;
12129
12196
  }(React.Component));
@@ -12132,11 +12199,40 @@ var MonthDropdownOptions = /** @class */ (function (_super) {
12132
12199
  __extends(MonthDropdownOptions, _super);
12133
12200
  function MonthDropdownOptions() {
12134
12201
  var _this = _super !== null && _super.apply(this, arguments) || this;
12202
+ _this.monthOptionButtonsRef = {};
12135
12203
  _this.isSelectedMonth = function (i) { return _this.props.month === i; };
12204
+ _this.handleOptionKeyDown = function (i, e) {
12205
+ var _a;
12206
+ switch (e.key) {
12207
+ case "Enter":
12208
+ e.preventDefault();
12209
+ _this.onChange(i);
12210
+ break;
12211
+ case "Escape":
12212
+ e.preventDefault();
12213
+ _this.props.onCancel();
12214
+ break;
12215
+ case "ArrowUp":
12216
+ case "ArrowDown": {
12217
+ e.preventDefault();
12218
+ var newMonth = (i + (e.key === "ArrowUp" ? -1 : 1) + _this.props.monthNames.length) %
12219
+ _this.props.monthNames.length;
12220
+ (_a = _this.monthOptionButtonsRef[newMonth]) === null || _a === void 0 ? void 0 : _a.focus();
12221
+ break;
12222
+ }
12223
+ }
12224
+ };
12136
12225
  _this.renderOptions = function () {
12137
- return _this.props.monthNames.map(function (month, i) { return (React__namespace.default.createElement("div", { className: _this.isSelectedMonth(i)
12226
+ // Clear refs to prevent memory leaks on re-render
12227
+ _this.monthOptionButtonsRef = {};
12228
+ return _this.props.monthNames.map(function (month, i) { return (React__namespace.default.createElement("div", { ref: function (el) {
12229
+ _this.monthOptionButtonsRef[i] = el;
12230
+ if (_this.isSelectedMonth(i)) {
12231
+ el === null || el === void 0 ? void 0 : el.focus();
12232
+ }
12233
+ }, role: "button", tabIndex: 0, className: _this.isSelectedMonth(i)
12138
12234
  ? "react-datepicker__month-option react-datepicker__month-option--selected_month"
12139
- : "react-datepicker__month-option", key: month, onClick: _this.onChange.bind(_this, i), "aria-selected": _this.isSelectedMonth(i) ? "true" : undefined },
12235
+ : "react-datepicker__month-option", key: month, onClick: _this.onChange.bind(_this, i), onKeyDown: _this.handleOptionKeyDown.bind(_this, i), "aria-selected": _this.isSelectedMonth(i) ? "true" : undefined },
12140
12236
  _this.isSelectedMonth(i) ? (React__namespace.default.createElement("span", { className: "react-datepicker__month-option--selected" }, "\u2713")) : (""),
12141
12237
  month)); });
12142
12238
  };
@@ -12161,7 +12257,7 @@ var MonthDropdown = /** @class */ (function (_super) {
12161
12257
  return monthNames.map(function (m, i) { return (React__namespace.default.createElement("option", { key: m, value: i }, m)); });
12162
12258
  };
12163
12259
  _this.renderSelectMode = function (monthNames) { return (React__namespace.default.createElement("select", { value: _this.props.month, className: "react-datepicker__month-select", onChange: function (e) { return _this.onChange(parseInt(e.target.value)); } }, _this.renderSelectOptions(monthNames))); };
12164
- _this.renderReadView = function (visible, monthNames) { return (React__namespace.default.createElement("div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: _this.toggleDropdown },
12260
+ _this.renderReadView = function (visible, monthNames) { return (React__namespace.default.createElement("button", { key: "read", type: "button", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__month-read-view", onClick: _this.toggleDropdown },
12165
12261
  React__namespace.default.createElement("span", { className: "react-datepicker__month-read-view--down-arrow" }),
12166
12262
  React__namespace.default.createElement("span", { className: "react-datepicker__month-read-view--selected-month" }, monthNames[_this.props.month]))); };
12167
12263
  _this.renderDropdown = function (monthNames) { return (React__namespace.default.createElement(MonthDropdownOptions, _assign({ key: "dropdown" }, _this.props, { monthNames: monthNames, onChange: _this.onChange, onCancel: _this.toggleDropdown }))); };
@@ -12649,19 +12745,20 @@ var Year$1 = /** @class */ (function (_super) {
12649
12745
  return isSameYear(_year, endDate !== null && endDate !== void 0 ? endDate : null);
12650
12746
  };
12651
12747
  _this.isKeyboardSelected = function (y) {
12652
- if (_this.props.date === undefined ||
12653
- _this.props.selected == null ||
12748
+ if (_this.props.disabledKeyboardNavigation ||
12749
+ _this.props.date === undefined ||
12654
12750
  _this.props.preSelection == null) {
12655
12751
  return;
12656
12752
  }
12657
- var _a = _this.props, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate;
12753
+ var _a = _this.props, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, selected = _a.selected;
12658
12754
  var date = getStartOfYear(setYear(_this.props.date, y));
12659
12755
  var isDisabled = (minDate || maxDate || excludeDates || includeDates || filterDate) &&
12660
12756
  isYearDisabled(y, _this.props);
12661
- return (!_this.props.disabledKeyboardNavigation &&
12662
- !_this.props.inline &&
12663
- !isSameDay(date, getStartOfYear(_this.props.selected)) &&
12664
- isSameDay(date, getStartOfYear(_this.props.preSelection)) &&
12757
+ var isSelectedDay = !!selected && isSameDay(date, getStartOfYear(selected));
12758
+ var isKeyboardSelectedDay = isSameDay(date, getStartOfYear(_this.props.preSelection));
12759
+ return (!_this.props.inline &&
12760
+ !isSelectedDay &&
12761
+ isKeyboardSelectedDay &&
12665
12762
  !isDisabled);
12666
12763
  };
12667
12764
  _this.isSelectedYear = function (year) {
@@ -12756,10 +12853,15 @@ var Year$1 = /** @class */ (function (_super) {
12756
12853
  handleOnKeyDown && handleOnKeyDown(event);
12757
12854
  };
12758
12855
  _this.getYearClassNames = function (y) {
12759
- var _a = _this.props, date = _a.date, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, yearClassName = _a.yearClassName;
12856
+ var _a = _this.props, date = _a.date, disabled = _a.disabled, minDate = _a.minDate, maxDate = _a.maxDate, excludeDates = _a.excludeDates, includeDates = _a.includeDates, filterDate = _a.filterDate, yearClassName = _a.yearClassName;
12760
12857
  return clsx("react-datepicker__year-text", "react-datepicker__year-".concat(y), date ? yearClassName === null || yearClassName === void 0 ? void 0 : yearClassName(setYear(date, y)) : undefined, {
12761
12858
  "react-datepicker__year-text--selected": _this.isSelectedYear(y),
12762
- "react-datepicker__year-text--disabled": (minDate || maxDate || excludeDates || includeDates || filterDate) &&
12859
+ "react-datepicker__year-text--disabled": (minDate ||
12860
+ maxDate ||
12861
+ excludeDates ||
12862
+ includeDates ||
12863
+ filterDate ||
12864
+ disabled) &&
12763
12865
  isYearDisabled(y, _this.props),
12764
12866
  "react-datepicker__year-text--keyboard-selected": _this.isKeyboardSelected(y),
12765
12867
  "react-datepicker__year-text--range-start": _this.isRangeStart(y),
@@ -12847,11 +12949,42 @@ var YearDropdownOptions = /** @class */ (function (_super) {
12847
12949
  __extends(YearDropdownOptions, _super);
12848
12950
  function YearDropdownOptions(props) {
12849
12951
  var _this = _super.call(this, props) || this;
12952
+ _this.yearOptionButtonsRef = {};
12953
+ _this.handleOptionKeyDown = function (year, e) {
12954
+ var _a;
12955
+ switch (e.key) {
12956
+ case "Enter":
12957
+ e.preventDefault();
12958
+ _this.onChange(year);
12959
+ break;
12960
+ case "Escape":
12961
+ e.preventDefault();
12962
+ _this.props.onCancel();
12963
+ break;
12964
+ case "ArrowUp":
12965
+ case "ArrowDown": {
12966
+ e.preventDefault();
12967
+ var newYear = year + (e.key === "ArrowUp" ? 1 : -1);
12968
+ // Add bounds checking to ensure the year exists in our refs
12969
+ if (_this.yearOptionButtonsRef[newYear]) {
12970
+ (_a = _this.yearOptionButtonsRef[newYear]) === null || _a === void 0 ? void 0 : _a.focus();
12971
+ }
12972
+ break;
12973
+ }
12974
+ }
12975
+ };
12850
12976
  _this.renderOptions = function () {
12977
+ // Clear refs to prevent memory leaks on re-render
12978
+ _this.yearOptionButtonsRef = {};
12851
12979
  var selectedYear = _this.props.year;
12852
- var options = _this.state.yearsList.map(function (year) { return (React__namespace.default.createElement("div", { className: selectedYear === year
12980
+ var options = _this.state.yearsList.map(function (year) { return (React__namespace.default.createElement("div", { ref: function (el) {
12981
+ _this.yearOptionButtonsRef[year] = el;
12982
+ if (year === selectedYear) {
12983
+ el === null || el === void 0 ? void 0 : el.focus();
12984
+ }
12985
+ }, role: "button", tabIndex: 0, className: selectedYear === year
12853
12986
  ? "react-datepicker__year-option react-datepicker__year-option--selected_year"
12854
- : "react-datepicker__year-option", key: year, onClick: _this.onChange.bind(_this, year), "aria-selected": selectedYear === year ? "true" : undefined },
12987
+ : "react-datepicker__year-option", key: year, onClick: _this.onChange.bind(_this, year), onKeyDown: _this.handleOptionKeyDown.bind(_this, year), "aria-selected": selectedYear === year ? "true" : undefined },
12855
12988
  selectedYear === year ? (React__namespace.default.createElement("span", { className: "react-datepicker__year-option--selected" }, "\u2713")) : (""),
12856
12989
  year)); });
12857
12990
  var minYear = _this.props.minDate ? getYear(_this.props.minDate) : null;
@@ -12946,9 +13079,7 @@ var YearDropdown = /** @class */ (function (_super) {
12946
13079
  _this.onChange(parseInt(event.target.value));
12947
13080
  };
12948
13081
  _this.renderSelectMode = function () { return (React__namespace.default.createElement("select", { value: _this.props.year, className: "react-datepicker__year-select", onChange: _this.onSelectChange }, _this.renderSelectOptions())); };
12949
- _this.renderReadView = function (visible) { return (React__namespace.default.createElement("div", { key: "read", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: function (event) {
12950
- return _this.toggleDropdown(event);
12951
- } },
13082
+ _this.renderReadView = function (visible) { return (React__namespace.default.createElement("button", { key: "read", type: "button", style: { visibility: visible ? "visible" : "hidden" }, className: "react-datepicker__year-read-view", onClick: _this.toggleDropdown },
12952
13083
  React__namespace.default.createElement("span", { className: "react-datepicker__year-read-view--down-arrow" }),
12953
13084
  React__namespace.default.createElement("span", { className: "react-datepicker__year-read-view--selected-year" }, _this.props.year))); };
12954
13085
  _this.renderDropdown = function () { return (React__namespace.default.createElement(YearDropdownOptions, _assign({ key: "dropdown" }, _this.props, { onChange: _this.onChange, onCancel: _this.toggleDropdown }))); };
@@ -13010,6 +13141,7 @@ var DROPDOWN_FOCUS_CLASSNAMES = [
13010
13141
  "react-datepicker__month-select",
13011
13142
  "react-datepicker__month-year-select",
13012
13143
  ];
13144
+ var OUTSIDE_CLICK_IGNORE_CLASS = "react-datepicker-ignore-onclickoutside";
13013
13145
  var isDropdownSelect = function (element) {
13014
13146
  var classNames = (element.className || "").split(/\s+/);
13015
13147
  return DROPDOWN_FOCUS_CLASSNAMES.some(function (testClassname) { return classNames.indexOf(testClassname) >= 0; });
@@ -13158,10 +13290,13 @@ var Calendar = /** @class */ (function (_super) {
13158
13290
  };
13159
13291
  _this.header = function (date) {
13160
13292
  if (date === void 0) { date = _this.state.date; }
13293
+ var disabled = _this.props.disabled;
13161
13294
  var startOfWeek = getStartOfWeek(date, _this.props.locale, _this.props.calendarStartDay);
13162
13295
  var dayNames = [];
13163
13296
  if (_this.props.showWeekNumbers) {
13164
- dayNames.push(React__namespace.default.createElement("div", { key: "W", className: "react-datepicker__day-name" }, _this.props.weekLabel || "#"));
13297
+ dayNames.push(React__namespace.default.createElement("div", { key: "W", className: "react-datepicker__day-name ".concat(disabled ? "react-datepicker__day-name--disabled" : ""), role: "columnheader" },
13298
+ React__namespace.default.createElement("span", { className: "react-datepicker__sr-only" }, "Week number"),
13299
+ React__namespace.default.createElement("span", { "aria-hidden": "true" }, _this.props.weekLabel || "#")));
13165
13300
  }
13166
13301
  return dayNames.concat([0, 1, 2, 3, 4, 5, 6].map(function (offset) {
13167
13302
  var day = addDays(startOfWeek, offset);
@@ -13169,7 +13304,9 @@ var Calendar = /** @class */ (function (_super) {
13169
13304
  var weekDayClassName = _this.props.weekDayClassName
13170
13305
  ? _this.props.weekDayClassName(day)
13171
13306
  : undefined;
13172
- return (React__namespace.default.createElement("div", { key: offset, "aria-label": formatDate(day, "EEEE", _this.props.locale), className: clsx("react-datepicker__day-name", weekDayClassName) }, weekDayName));
13307
+ return (React__namespace.default.createElement("div", { key: offset, role: "columnheader", className: clsx("react-datepicker__day-name", weekDayClassName, disabled ? "react-datepicker__day-name--disabled" : "") },
13308
+ React__namespace.default.createElement("span", { className: "react-datepicker__sr-only" }, formatDate(day, "EEEE", _this.props.locale)),
13309
+ React__namespace.default.createElement("span", { "aria-hidden": "true" }, weekDayName)));
13173
13310
  }));
13174
13311
  };
13175
13312
  _this.formatWeekday = function (day, locale) {
@@ -13207,6 +13344,9 @@ var Calendar = /** @class */ (function (_super) {
13207
13344
  var fromMonthDate = subMonths(_this.state.date, monthSelectedIn);
13208
13345
  var allPrevDaysDisabled;
13209
13346
  switch (true) {
13347
+ case _this.props.disabled:
13348
+ allPrevDaysDisabled = true;
13349
+ break;
13210
13350
  case _this.props.showMonthYearPicker:
13211
13351
  allPrevDaysDisabled = yearDisabledBefore(_this.state.date, _this.props);
13212
13352
  break;
@@ -13274,6 +13414,9 @@ var Calendar = /** @class */ (function (_super) {
13274
13414
  }
13275
13415
  var allNextDaysDisabled;
13276
13416
  switch (true) {
13417
+ case _this.props.disabled:
13418
+ allNextDaysDisabled = true;
13419
+ break;
13277
13420
  case _this.props.showMonthYearPicker:
13278
13421
  allNextDaysDisabled = yearDisabledAfter(_this.state.date, _this.props);
13279
13422
  break;
@@ -13374,6 +13517,7 @@ var Calendar = /** @class */ (function (_super) {
13374
13517
  }
13375
13518
  return (React__namespace.default.createElement("div", { className: "react-datepicker__today-button", onClick: _this.handleTodayButtonClick }, _this.props.todayButton));
13376
13519
  };
13520
+ _this.renderDayNamesHeader = function (monthDate) { return (React__namespace.default.createElement("div", { className: "react-datepicker__day-names", role: "row" }, _this.header(monthDate))); };
13377
13521
  _this.renderDefaultHeader = function (_a) {
13378
13522
  var monthDate = _a.monthDate, i = _a.i;
13379
13523
  return (React__namespace.default.createElement("div", { className: "react-datepicker__header ".concat(_this.props.showTimeSelect
@@ -13383,8 +13527,7 @@ var Calendar = /** @class */ (function (_super) {
13383
13527
  React__namespace.default.createElement("div", { className: "react-datepicker__header__dropdown react-datepicker__header__dropdown--".concat(_this.props.dropdownMode), onFocus: _this.handleDropdownFocus },
13384
13528
  _this.renderMonthDropdown(i !== 0),
13385
13529
  _this.renderMonthYearDropdown(i !== 0),
13386
- _this.renderYearDropdown(i !== 0)),
13387
- React__namespace.default.createElement("div", { className: "react-datepicker__day-names" }, _this.header(monthDate))));
13530
+ _this.renderYearDropdown(i !== 0))));
13388
13531
  };
13389
13532
  _this.renderCustomHeader = function (headerArgs) {
13390
13533
  var _a, _b;
@@ -13393,16 +13536,20 @@ var Calendar = /** @class */ (function (_super) {
13393
13536
  _this.props.showTimeSelectOnly) {
13394
13537
  return null;
13395
13538
  }
13539
+ var _c = _this.props, showYearPicker = _c.showYearPicker, yearItemNumber = _c.yearItemNumber;
13540
+ var visibleYearsRange;
13541
+ if (showYearPicker) {
13542
+ var _d = getYearsPeriod(monthDate, yearItemNumber), startYear = _d.startPeriod, endYear = _d.endPeriod;
13543
+ visibleYearsRange = {
13544
+ startYear: startYear,
13545
+ endYear: endYear,
13546
+ };
13547
+ }
13396
13548
  var prevMonthButtonDisabled = monthDisabledBefore(_this.state.date, _this.props);
13397
13549
  var nextMonthButtonDisabled = monthDisabledAfter(_this.state.date, _this.props);
13398
13550
  var prevYearButtonDisabled = yearDisabledBefore(_this.state.date, _this.props);
13399
13551
  var nextYearButtonDisabled = yearDisabledAfter(_this.state.date, _this.props);
13400
- var showDayNames = !_this.props.showMonthYearPicker &&
13401
- !_this.props.showQuarterYearPicker &&
13402
- !_this.props.showYearPicker;
13403
- return (React__namespace.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--custom", onFocus: _this.props.onDropdownFocus }, (_b = (_a = _this.props).renderCustomHeader) === null || _b === void 0 ? void 0 :
13404
- _b.call(_a, _assign(_assign({}, _this.state), { customHeaderCount: i, monthDate: monthDate, changeMonth: _this.changeMonth, changeYear: _this.changeYear, decreaseMonth: _this.decreaseMonth, increaseMonth: _this.increaseMonth, decreaseYear: _this.decreaseYear, increaseYear: _this.increaseYear, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, prevYearButtonDisabled: prevYearButtonDisabled, nextYearButtonDisabled: nextYearButtonDisabled })),
13405
- showDayNames && (React__namespace.default.createElement("div", { className: "react-datepicker__day-names" }, _this.header(monthDate)))));
13552
+ return (React__namespace.default.createElement("div", { className: "react-datepicker__header react-datepicker__header--custom", onFocus: _this.props.onDropdownFocus }, (_b = (_a = _this.props).renderCustomHeader) === null || _b === void 0 ? void 0 : _b.call(_a, _assign(_assign(_assign({}, _this.state), (showYearPicker && { visibleYearsRange: visibleYearsRange })), { customHeaderCount: i, monthDate: monthDate, changeMonth: _this.changeMonth, changeYear: _this.changeYear, decreaseMonth: _this.decreaseMonth, increaseMonth: _this.increaseMonth, decreaseYear: _this.decreaseYear, increaseYear: _this.increaseYear, prevMonthButtonDisabled: prevMonthButtonDisabled, nextMonthButtonDisabled: nextMonthButtonDisabled, prevYearButtonDisabled: prevYearButtonDisabled, nextYearButtonDisabled: nextYearButtonDisabled }))));
13406
13553
  };
13407
13554
  _this.renderYearHeader = function (_a) {
13408
13555
  var monthDate = _a.monthDate;
@@ -13450,7 +13597,7 @@ var Calendar = /** @class */ (function (_super) {
13450
13597
  _this.monthContainer = div !== null && div !== void 0 ? div : undefined;
13451
13598
  }, className: "react-datepicker__month-container" },
13452
13599
  _this.renderHeader({ monthDate: monthDate, i: i }),
13453
- React__namespace.default.createElement(Month$1, _assign({}, Calendar.defaultProps, _this.props, { containerRef: _this.containerRef, ariaLabelPrefix: _this.props.monthAriaLabelPrefix, day: monthDate, onDayClick: _this.handleDayClick, handleOnKeyDown: _this.props.handleOnDayKeyDown, handleOnMonthKeyDown: _this.props.handleOnKeyDown, onDayMouseEnter: _this.handleDayMouseEnter, onMouseLeave: _this.handleMonthMouseLeave, orderInDisplay: i, selectingDate: _this.state.selectingDate, monthShowsDuplicateDaysEnd: monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: monthShowsDuplicateDaysStart }))));
13600
+ React__namespace.default.createElement(Month$1, _assign({}, Calendar.defaultProps, _this.props, { containerRef: _this.containerRef, ariaLabelPrefix: _this.props.monthAriaLabelPrefix, day: monthDate, onDayClick: _this.handleDayClick, handleOnKeyDown: _this.props.handleOnDayKeyDown, handleOnMonthKeyDown: _this.props.handleOnKeyDown, onDayMouseEnter: _this.handleDayMouseEnter, onMouseLeave: _this.handleMonthMouseLeave, orderInDisplay: i, selectingDate: _this.state.selectingDate, monthShowsDuplicateDaysEnd: monthShowsDuplicateDaysEnd, monthShowsDuplicateDaysStart: monthShowsDuplicateDaysStart, dayNamesHeader: _this.renderDayNamesHeader(monthDate) }))));
13454
13601
  }
13455
13602
  return monthList;
13456
13603
  };
@@ -13521,6 +13668,7 @@ var Calendar = /** @class */ (function (_super) {
13521
13668
  return {
13522
13669
  monthsShown: 1,
13523
13670
  forceShowMonthNavigation: false,
13671
+ outsideClickIgnoreClass: OUTSIDE_CLICK_IGNORE_CLASS,
13524
13672
  timeCaption: "Time",
13525
13673
  previousYearButtonLabel: "Previous Year",
13526
13674
  nextYearButtonLabel: "Next Year",
@@ -13754,7 +13902,7 @@ var TabLoop = /** @class */ (function (_super) {
13754
13902
  * @returns A new component with floating behavior.
13755
13903
  */
13756
13904
  function withFloating(Component) {
13757
- var WithFloating = function (props) {
13905
+ function WithFloating(props) {
13758
13906
  var _a;
13759
13907
  var hidePopper = typeof props.hidePopper === "boolean" ? props.hidePopper : true;
13760
13908
  var arrowRef = React.useRef(null);
@@ -13765,51 +13913,35 @@ function withFloating(Component) {
13765
13913
  ], ((_a = props.popperModifiers) !== null && _a !== void 0 ? _a : []), true) }, props.popperProps));
13766
13914
  var componentProps = _assign(_assign({}, props), { hidePopper: hidePopper, popperProps: _assign(_assign({}, floatingProps), { arrowRef: arrowRef }) });
13767
13915
  return React__namespace.default.createElement(Component, _assign({}, componentProps));
13768
- };
13916
+ }
13917
+ WithFloating.displayName = "withFloating(".concat(Component.displayName || Component.name || "Component", ")");
13769
13918
  return WithFloating;
13770
13919
  }
13771
13920
 
13772
13921
  // Exported for testing purposes
13773
- var PopperComponent = /** @class */ (function (_super) {
13774
- __extends(PopperComponent, _super);
13775
- function PopperComponent() {
13776
- return _super !== null && _super.apply(this, arguments) || this;
13777
- }
13778
- Object.defineProperty(PopperComponent, "defaultProps", {
13779
- get: function () {
13780
- return {
13781
- hidePopper: true,
13782
- };
13783
- },
13784
- enumerable: false,
13785
- configurable: true
13786
- });
13787
- PopperComponent.prototype.render = function () {
13788
- var _a = this.props, className = _a.className, wrapperClassName = _a.wrapperClassName, _b = _a.hidePopper, hidePopper = _b === void 0 ? PopperComponent.defaultProps.hidePopper : _b, popperComponent = _a.popperComponent, targetComponent = _a.targetComponent, enableTabLoop = _a.enableTabLoop, popperOnKeyDown = _a.popperOnKeyDown, portalId = _a.portalId, portalHost = _a.portalHost, popperProps = _a.popperProps, showArrow = _a.showArrow;
13789
- var popper = undefined;
13790
- if (!hidePopper) {
13791
- var classes = clsx("react-datepicker-popper", className);
13792
- popper = (React__namespace.default.createElement(TabLoop, { enableTabLoop: enableTabLoop },
13793
- React__namespace.default.createElement("div", { ref: popperProps.refs.setFloating, style: popperProps.floatingStyles, className: classes, "data-placement": popperProps.placement, onKeyDown: popperOnKeyDown },
13794
- popperComponent,
13795
- showArrow && (React__namespace.default.createElement(FloatingArrow, { ref: popperProps.arrowRef, context: popperProps.context, fill: "currentColor", strokeWidth: 1, height: 8, width: 16, style: { transform: "translateY(-1px)" }, className: "react-datepicker__triangle" })))));
13796
- }
13797
- if (this.props.popperContainer) {
13798
- popper = React.createElement(this.props.popperContainer, {}, popper);
13799
- }
13800
- if (portalId && !hidePopper) {
13801
- popper = (React__namespace.default.createElement(Portal, { portalId: portalId, portalHost: portalHost }, popper));
13802
- }
13803
- var wrapperClasses = clsx("react-datepicker-wrapper", wrapperClassName);
13804
- return (React__namespace.default.createElement(React__namespace.default.Fragment, null,
13805
- React__namespace.default.createElement("div", { ref: popperProps.refs.setReference, className: wrapperClasses }, targetComponent),
13806
- popper));
13807
- };
13808
- return PopperComponent;
13809
- }(React.Component));
13922
+ var PopperComponent = function (props) {
13923
+ var className = props.className, wrapperClassName = props.wrapperClassName, _a = props.hidePopper, hidePopper = _a === void 0 ? true : _a, popperComponent = props.popperComponent, targetComponent = props.targetComponent, enableTabLoop = props.enableTabLoop, popperOnKeyDown = props.popperOnKeyDown, portalId = props.portalId, portalHost = props.portalHost, popperProps = props.popperProps, showArrow = props.showArrow;
13924
+ var popper = undefined;
13925
+ if (!hidePopper) {
13926
+ var classes = clsx("react-datepicker-popper", className);
13927
+ popper = (React__namespace.default.createElement(TabLoop, { enableTabLoop: enableTabLoop },
13928
+ React__namespace.default.createElement("div", { ref: popperProps.refs.setFloating, style: popperProps.floatingStyles, className: classes, "data-placement": popperProps.placement, onKeyDown: popperOnKeyDown },
13929
+ popperComponent,
13930
+ showArrow && (React__namespace.default.createElement(FloatingArrow, { ref: popperProps.arrowRef, context: popperProps.context, fill: "currentColor", strokeWidth: 1, height: 8, width: 16, style: { transform: "translateY(-1px)" }, className: "react-datepicker__triangle" })))));
13931
+ }
13932
+ if (props.popperContainer) {
13933
+ popper = React.createElement(props.popperContainer, {}, popper);
13934
+ }
13935
+ if (portalId && !hidePopper) {
13936
+ popper = (React__namespace.default.createElement(Portal, { portalId: portalId, portalHost: portalHost }, popper));
13937
+ }
13938
+ var wrapperClasses = clsx("react-datepicker-wrapper", wrapperClassName);
13939
+ return (React__namespace.default.createElement(React__namespace.default.Fragment, null,
13940
+ React__namespace.default.createElement("div", { ref: popperProps.refs.setReference, className: wrapperClasses }, targetComponent),
13941
+ popper));
13942
+ };
13810
13943
  var PopperComponent$1 = withFloating(PopperComponent);
13811
13944
 
13812
- var outsideClickIgnoreClass = "react-datepicker-ignore-onclickoutside";
13813
13945
  // Compares dates year+month combinations
13814
13946
  function hasPreSelectionChanged(date1, date2) {
13815
13947
  if (date1 && date2) {
@@ -13875,6 +14007,35 @@ var DatePicker = /** @class */ (function (_super) {
13875
14007
  wasHidden: false,
13876
14008
  };
13877
14009
  };
14010
+ _this.getInputValue = function () {
14011
+ var _a;
14012
+ var _b = _this.props, locale = _b.locale, startDate = _b.startDate, endDate = _b.endDate, rangeSeparator = _b.rangeSeparator, selected = _b.selected, selectedDates = _b.selectedDates, selectsMultiple = _b.selectsMultiple, selectsRange = _b.selectsRange, value = _b.value;
14013
+ var dateFormat = (_a = _this.props.dateFormat) !== null && _a !== void 0 ? _a : DatePicker.defaultProps.dateFormat;
14014
+ var inputValue = _this.state.inputValue;
14015
+ if (typeof value === "string") {
14016
+ return value;
14017
+ }
14018
+ else if (typeof inputValue === "string") {
14019
+ return inputValue;
14020
+ }
14021
+ else if (selectsRange) {
14022
+ return safeDateRangeFormat(startDate, endDate, {
14023
+ dateFormat: dateFormat,
14024
+ locale: locale,
14025
+ rangeSeparator: rangeSeparator,
14026
+ });
14027
+ }
14028
+ else if (selectsMultiple) {
14029
+ return safeMultipleDatesFormat(selectedDates !== null && selectedDates !== void 0 ? selectedDates : [], {
14030
+ dateFormat: dateFormat,
14031
+ locale: locale,
14032
+ });
14033
+ }
14034
+ return safeDateFormat(selected, {
14035
+ dateFormat: dateFormat,
14036
+ locale: locale,
14037
+ });
14038
+ };
13878
14039
  _this.resetHiddenStatus = function () {
13879
14040
  _this.setState(_assign(_assign({}, _this.state), { wasHidden: false }));
13880
14041
  };
@@ -13974,11 +14135,15 @@ var DatePicker = /** @class */ (function (_super) {
13974
14135
  _this.handleDropdownFocus = function () {
13975
14136
  _this.cancelFocusInput();
13976
14137
  };
14138
+ _this.resetInputValue = function () {
14139
+ _this.setState(_assign(_assign({}, _this.state), { inputValue: null }));
14140
+ };
13977
14141
  _this.handleBlur = function (event) {
13978
14142
  var _a, _b;
13979
14143
  if (!_this.state.open || _this.props.withPortal || _this.props.showTimeInput) {
13980
14144
  (_b = (_a = _this.props).onBlur) === null || _b === void 0 ? void 0 : _b.call(_a, event);
13981
14145
  }
14146
+ _this.resetInputValue();
13982
14147
  if (_this.state.open && _this.props.open === false) {
13983
14148
  _this.setOpen(false);
13984
14149
  }
@@ -14019,11 +14184,17 @@ var DatePicker = /** @class */ (function (_super) {
14019
14184
  var strictParsing = (_b = _this.props.strictParsing) !== null && _b !== void 0 ? _b : DatePicker.defaultProps.strictParsing;
14020
14185
  var value = (event === null || event === void 0 ? void 0 : event.target) instanceof HTMLInputElement ? event.target.value : "";
14021
14186
  if (selectsRange) {
14187
+ var rangeSeparator = _this.props.rangeSeparator;
14188
+ var trimmedRangeSeparator = rangeSeparator.trim();
14022
14189
  var _g = value
14023
- .split(dateFormat.includes("-") ? DATE_RANGE_SEPARATOR : "-", 2)
14190
+ .split(dateFormat.includes(trimmedRangeSeparator)
14191
+ ? rangeSeparator
14192
+ : trimmedRangeSeparator, 2)
14024
14193
  .map(function (val) { return val.trim(); }), valueStart = _g[0], valueEnd = _g[1];
14025
14194
  var startDateNew = parseDate(valueStart !== null && valueStart !== void 0 ? valueStart : "", dateFormat, _this.props.locale, strictParsing);
14026
- var endDateNew = parseDate(valueEnd !== null && valueEnd !== void 0 ? valueEnd : "", dateFormat, _this.props.locale, strictParsing);
14195
+ var endDateNew = startDateNew
14196
+ ? parseDate(valueEnd !== null && valueEnd !== void 0 ? valueEnd : "", dateFormat, _this.props.locale, strictParsing)
14197
+ : null;
14027
14198
  var startChanged = (startDate === null || startDate === void 0 ? void 0 : startDate.getTime()) !== (startDateNew === null || startDateNew === void 0 ? void 0 : startDateNew.getTime());
14028
14199
  var endChanged = (endDate === null || endDate === void 0 ? void 0 : endDate.getTime()) !== (endDateNew === null || endDateNew === void 0 ? void 0 : endDateNew.getTime());
14029
14200
  if (!startChanged && !endChanged) {
@@ -14047,15 +14218,26 @@ var DatePicker = /** @class */ (function (_super) {
14047
14218
  }
14048
14219
  };
14049
14220
  _this.handleSelect = function (date, event, monthSelectedIn) {
14221
+ var _a;
14050
14222
  if (_this.props.readOnly)
14051
14223
  return;
14052
- if (_this.props.shouldCloseOnSelect && !_this.props.showTimeSelect) {
14224
+ var _b = _this.props, selectsRange = _b.selectsRange, startDate = _b.startDate, endDate = _b.endDate, locale = _b.locale, swapRange = _b.swapRange;
14225
+ var dateFormat = (_a = _this.props.dateFormat) !== null && _a !== void 0 ? _a : DatePicker.defaultProps.dateFormat;
14226
+ var isDateSelectionComplete = !selectsRange ||
14227
+ (startDate && !endDate && (swapRange || !isDateBefore(date, startDate)));
14228
+ if (_this.props.shouldCloseOnSelect &&
14229
+ !_this.props.showTimeSelect &&
14230
+ isDateSelectionComplete) {
14053
14231
  // Preventing onFocus event to fix issue
14054
14232
  // https://github.com/Hacker0x01/react-datepicker/issues/628
14055
14233
  _this.sendFocusBackToInput();
14056
14234
  }
14057
14235
  if (_this.props.onChangeRaw) {
14058
- _this.props.onChangeRaw(event);
14236
+ var formattedDate = safeDateFormat(date, {
14237
+ dateFormat: dateFormat,
14238
+ locale: locale,
14239
+ });
14240
+ _this.props.onChangeRaw(event, { date: date, formattedDate: formattedDate });
14059
14241
  }
14060
14242
  _this.setSelected(date, event, false, monthSelectedIn);
14061
14243
  if (_this.props.showDateSelect) {
@@ -14064,16 +14246,8 @@ var DatePicker = /** @class */ (function (_super) {
14064
14246
  if (!_this.props.shouldCloseOnSelect || _this.props.showTimeSelect) {
14065
14247
  _this.setPreSelection(date);
14066
14248
  }
14067
- else if (!_this.props.inline) {
14068
- if (!_this.props.selectsRange) {
14069
- _this.setOpen(false);
14070
- }
14071
- var _a = _this.props, startDate = _a.startDate, endDate = _a.endDate;
14072
- if (startDate &&
14073
- !endDate &&
14074
- (_this.props.swapRange || !isDateBefore(date, startDate))) {
14075
- _this.setOpen(false);
14076
- }
14249
+ else if (isDateSelectionComplete) {
14250
+ _this.setOpen(false);
14077
14251
  }
14078
14252
  };
14079
14253
  // setSelected is called either from handleChange (user typed date into textbox and it was parsed) or handleSelect (user selected date from calendar using mouse or keyboard)
@@ -14138,6 +14312,7 @@ var DatePicker = /** @class */ (function (_super) {
14138
14312
  if (selectsRange) {
14139
14313
  var noRanges = !startDate && !endDate;
14140
14314
  var hasStartRange = startDate && !endDate;
14315
+ var hasOnlyEndRange = !startDate && !!endDate;
14141
14316
  var isRangeFilled = startDate && endDate;
14142
14317
  if (noRanges) {
14143
14318
  onChange === null || onChange === void 0 ? void 0 : onChange([changedDate, null], event);
@@ -14158,6 +14333,14 @@ var DatePicker = /** @class */ (function (_super) {
14158
14333
  onChange === null || onChange === void 0 ? void 0 : onChange([startDate, changedDate], event);
14159
14334
  }
14160
14335
  }
14336
+ else if (hasOnlyEndRange) {
14337
+ if (changedDate && isDateBefore(changedDate, endDate)) {
14338
+ onChange === null || onChange === void 0 ? void 0 : onChange([changedDate, endDate], event);
14339
+ }
14340
+ else {
14341
+ onChange === null || onChange === void 0 ? void 0 : onChange([changedDate, null], event);
14342
+ }
14343
+ }
14161
14344
  if (isRangeFilled) {
14162
14345
  onChange === null || onChange === void 0 ? void 0 : onChange([changedDate, null], event);
14163
14346
  }
@@ -14531,10 +14714,12 @@ var DatePicker = /** @class */ (function (_super) {
14531
14714
  }
14532
14715
  return (React__namespace.default.createElement(Calendar, _assign({ showMonthYearDropdown: undefined, ref: function (elem) {
14533
14716
  _this.calendar = elem;
14534
- } }, _this.props, _this.state, { setOpen: _this.setOpen, dateFormat: (_a = _this.props.dateFormatCalendar) !== null && _a !== void 0 ? _a : DatePicker.defaultProps.dateFormatCalendar, onSelect: _this.handleSelect, onClickOutside: _this.handleCalendarClickOutside, holidays: getHolidaysMap(_this.modifyHolidays()), outsideClickIgnoreClass: outsideClickIgnoreClass, onDropdownFocus: _this.handleDropdownFocus, onTimeChange: _this.handleTimeChange, className: _this.props.calendarClassName, container: _this.props.calendarContainer, handleOnKeyDown: _this.props.onKeyDown, handleOnDayKeyDown: _this.onDayKeyDown, setPreSelection: _this.setPreSelection, dropdownMode: (_b = _this.props.dropdownMode) !== null && _b !== void 0 ? _b : DatePicker.defaultProps.dropdownMode }), _this.props.children));
14717
+ } }, _this.props, _this.state, { setOpen: _this.setOpen, dateFormat: (_a = _this.props.dateFormatCalendar) !== null && _a !== void 0 ? _a : DatePicker.defaultProps.dateFormatCalendar, onSelect: _this.handleSelect, onClickOutside: _this.handleCalendarClickOutside, holidays: getHolidaysMap(_this.modifyHolidays()), outsideClickIgnoreClass: _this.props.outsideClickIgnoreClass, onDropdownFocus: _this.handleDropdownFocus, onTimeChange: _this.handleTimeChange, className: _this.props.calendarClassName, container: _this.props.calendarContainer, handleOnKeyDown: _this.props.onKeyDown, handleOnDayKeyDown: _this.onDayKeyDown, setPreSelection: _this.setPreSelection, dropdownMode: (_b = _this.props.dropdownMode) !== null && _b !== void 0 ? _b : DatePicker.defaultProps.dropdownMode }), _this.props.children));
14535
14718
  };
14536
14719
  _this.renderAriaLiveRegion = function () {
14537
- var _a = _this.props, _b = _a.dateFormat, dateFormat = _b === void 0 ? DatePicker.defaultProps.dateFormat : _b, locale = _a.locale;
14720
+ var _a;
14721
+ var locale = _this.props.locale;
14722
+ var dateFormat = (_a = _this.props.dateFormat) !== null && _a !== void 0 ? _a : DatePicker.defaultProps.dateFormat;
14538
14723
  var isContainsTime = _this.props.showTimeInput || _this.props.showTimeSelect;
14539
14724
  var longDateFormat = isContainsTime ? "PPPPp" : "PPPP";
14540
14725
  var ariaLiveMessage;
@@ -14577,36 +14762,17 @@ var DatePicker = /** @class */ (function (_super) {
14577
14762
  };
14578
14763
  _this.renderDateInput = function () {
14579
14764
  var _a, _b;
14580
- var _c;
14581
14765
  var className = clsx(_this.props.className, (_a = {},
14582
- _a[outsideClickIgnoreClass] = _this.state.open,
14766
+ _a[_this.props.outsideClickIgnoreClass ||
14767
+ DatePicker.defaultProps.outsideClickIgnoreClass] = _this.state.open,
14583
14768
  _a));
14584
14769
  var customInput = _this.props.customInput || React__namespace.default.createElement("input", { type: "text" });
14585
14770
  var customInputRef = _this.props.customInputRef || "ref";
14586
- var _d = _this.props, _e = _d.dateFormat, dateFormat = _e === void 0 ? DatePicker.defaultProps.dateFormat : _e, locale = _d.locale;
14587
- var inputValue = typeof _this.props.value === "string"
14588
- ? _this.props.value
14589
- : typeof _this.state.inputValue === "string"
14590
- ? _this.state.inputValue
14591
- : _this.props.selectsRange
14592
- ? safeDateRangeFormat(_this.props.startDate, _this.props.endDate, {
14593
- dateFormat: dateFormat,
14594
- locale: locale,
14595
- })
14596
- : _this.props.selectsMultiple
14597
- ? safeMultipleDatesFormat((_c = _this.props.selectedDates) !== null && _c !== void 0 ? _c : [], {
14598
- dateFormat: dateFormat,
14599
- locale: locale,
14600
- })
14601
- : safeDateFormat(_this.props.selected, {
14602
- dateFormat: dateFormat,
14603
- locale: locale,
14604
- });
14605
14771
  return React.cloneElement(customInput, (_b = {},
14606
14772
  _b[customInputRef] = function (input) {
14607
14773
  _this.input = input;
14608
14774
  },
14609
- _b.value = inputValue,
14775
+ _b.value = _this.getInputValue(),
14610
14776
  _b.onBlur = _this.handleBlur,
14611
14777
  _b.onChange = _this.handleChange,
14612
14778
  _b.onClick = _this.onInputClick,
@@ -14659,7 +14825,9 @@ var DatePicker = /** @class */ (function (_super) {
14659
14825
  dropdownMode: "scroll",
14660
14826
  preventOpenOnFocus: false,
14661
14827
  monthsShown: 1,
14828
+ outsideClickIgnoreClass: OUTSIDE_CLICK_IGNORE_CLASS,
14662
14829
  readOnly: false,
14830
+ rangeSeparator: DATE_RANGE_SEPARATOR,
14663
14831
  withPortal: false,
14664
14832
  selectsDisabledDaysInRange: false,
14665
14833
  shouldCloseOnSelect: true,
@@ -15175,4 +15343,4 @@ exports.DatePickerGroup = DatePickerGroup;
15175
15343
  exports.HelperText = HelperText;
15176
15344
  exports.InlineDatePicker = InlineDatePicker;
15177
15345
  exports.ValidationText = ValidationText;
15178
- //# sourceMappingURL=InlineDatePicker-DFv_uHo9.js.map
15346
+ //# sourceMappingURL=InlineDatePicker-B7DTwvhv.js.map