@basic-ui/core 0.0.51 → 0.0.53

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 (104) hide show
  1. package/build/cjs/index.js +19 -3
  2. package/build/cjs/index.js.map +1 -1
  3. package/build/esm/Carousel/Carousel.d.ts +9 -0
  4. package/build/esm/Carousel/Carousel.js +38 -0
  5. package/build/esm/Carousel/Carousel.js.map +1 -0
  6. package/build/esm/Carousel/Fader.d.ts +14 -0
  7. package/build/esm/Carousel/Fader.js +76 -0
  8. package/build/esm/Carousel/Fader.js.map +1 -0
  9. package/build/esm/Carousel/FaderItem.d.ts +5 -0
  10. package/build/esm/Carousel/FaderItem.js +16 -0
  11. package/build/esm/Carousel/FaderItem.js.map +1 -0
  12. package/build/esm/Carousel/Preloader.d.ts +7 -0
  13. package/build/esm/Carousel/Preloader.js +70 -0
  14. package/build/esm/Carousel/Preloader.js.map +1 -0
  15. package/build/esm/Carousel/Slider.d.ts +14 -0
  16. package/build/esm/Carousel/Slider.js +212 -0
  17. package/build/esm/Carousel/Slider.js.map +1 -0
  18. package/build/esm/Carousel/SliderItem.d.ts +12 -0
  19. package/build/esm/Carousel/SliderItem.js +41 -0
  20. package/build/esm/Carousel/SliderItem.js.map +1 -0
  21. package/build/esm/Carousel/context.d.ts +10 -0
  22. package/build/esm/Carousel/context.js +8 -0
  23. package/build/esm/Carousel/context.js.map +1 -0
  24. package/build/esm/Carousel/getSliderParams.d.ts +9 -0
  25. package/build/esm/Carousel/getSliderParams.js +85 -0
  26. package/build/esm/Carousel/getSliderParams.js.map +1 -0
  27. package/build/esm/Carousel/index.d.ts +7 -0
  28. package/build/esm/Carousel/index.js +8 -0
  29. package/build/esm/Carousel/index.js.map +1 -0
  30. package/build/esm/Carousel/useCarouselGestures.d.ts +30 -0
  31. package/build/esm/Carousel/useCarouselGestures.js +33 -0
  32. package/build/esm/Carousel/useCarouselGestures.js.map +1 -0
  33. package/build/esm/DatePicker/DatePicker.d.ts +24 -0
  34. package/build/esm/DatePicker/DatePicker.js +101 -0
  35. package/build/esm/DatePicker/DatePicker.js.map +1 -0
  36. package/build/esm/DatePicker/DatePickerSelect.d.ts +8 -0
  37. package/build/esm/DatePicker/DatePickerSelect.js +201 -0
  38. package/build/esm/DatePicker/DatePickerSelect.js.map +1 -0
  39. package/build/esm/DatePicker/RangeDatePicker.d.ts +28 -0
  40. package/build/esm/DatePicker/RangeDatePicker.js +94 -0
  41. package/build/esm/DatePicker/RangeDatePicker.js.map +1 -0
  42. package/build/esm/DatePicker/adjustDates.d.ts +4 -0
  43. package/build/esm/DatePicker/adjustDates.js +18 -0
  44. package/build/esm/DatePicker/adjustDates.js.map +1 -0
  45. package/build/esm/DatePicker/contexts.d.ts +31 -0
  46. package/build/esm/DatePicker/contexts.js +15 -0
  47. package/build/esm/DatePicker/contexts.js.map +1 -0
  48. package/build/esm/DatePicker/dateTypes.d.ts +2 -0
  49. package/build/esm/DatePicker/dateTypes.js +2 -0
  50. package/build/esm/DatePicker/dateTypes.js.map +1 -0
  51. package/build/esm/DatePicker/hooks.d.ts +36 -0
  52. package/build/esm/DatePicker/hooks.js +98 -0
  53. package/build/esm/DatePicker/hooks.js.map +1 -0
  54. package/build/esm/DatePicker/index.d.ts +5 -0
  55. package/build/esm/DatePicker/index.js +6 -0
  56. package/build/esm/DatePicker/index.js.map +1 -0
  57. package/build/esm/Portal/Portal.d.ts +3 -2
  58. package/build/esm/Portal/Portal.js +6 -3
  59. package/build/esm/Portal/Portal.js.map +1 -1
  60. package/build/esm/Portal/PortalSelectorProvider.d.ts +8 -0
  61. package/build/esm/Portal/PortalSelectorProvider.js +13 -0
  62. package/build/esm/Portal/PortalSelectorProvider.js.map +1 -0
  63. package/build/esm/Portal/index.d.ts +1 -0
  64. package/build/esm/Portal/index.js +1 -0
  65. package/build/esm/Portal/index.js.map +1 -1
  66. package/build/esm/hooks/useControlledState.js +1 -1
  67. package/build/esm/hooks/useControlledState.js.map +1 -1
  68. package/build/esm/hooks/useId.d.ts +1 -0
  69. package/build/esm/hooks/useId.js +25 -0
  70. package/build/esm/hooks/useId.js.map +1 -0
  71. package/build/esm/utils/assignRef.d.ts +3 -0
  72. package/build/esm/utils/assignRef.js +25 -0
  73. package/build/esm/utils/assignRef.js.map +1 -0
  74. package/build/esm/utils/getCircularIndex.d.ts +1 -0
  75. package/build/esm/utils/getCircularIndex.js +8 -0
  76. package/build/esm/utils/getCircularIndex.js.map +1 -0
  77. package/build/esm/utils/rubberBandClamp.d.ts +2 -0
  78. package/build/esm/utils/rubberBandClamp.js +20 -0
  79. package/build/esm/utils/rubberBandClamp.js.map +1 -0
  80. package/build/esm/utils/wrapEvent.d.ts +3 -0
  81. package/build/esm/utils/wrapEvent.js +16 -0
  82. package/build/esm/utils/wrapEvent.js.map +1 -0
  83. package/build/tsconfig-build.tsbuildinfo +1 -1
  84. package/build/tsconfig.tsbuildinfo +7270 -0
  85. package/package.json +2 -2
  86. package/src/Portal/Portal.tsx +15 -4
  87. package/src/Portal/PortalSelectorProvider.tsx +24 -0
  88. package/src/Portal/index.ts +5 -0
  89. package/src/hooks/useControlledState.ts +3 -3
  90. package/build/esm/TimerField/clamp.d.ts +0 -1
  91. package/build/esm/TimerField/clamp.js +0 -2
  92. package/build/esm/TimerField/clamp.js.map +0 -1
  93. package/build/esm/TimerField/index.d.ts +0 -1
  94. package/build/esm/TimerField/index.js +0 -2
  95. package/build/esm/TimerField/index.js.map +0 -1
  96. package/build/esm/TimerField/useControlledState.d.ts +0 -1
  97. package/build/esm/TimerField/useControlledState.js +0 -2
  98. package/build/esm/TimerField/useControlledState.js.map +0 -1
  99. package/build/esm/TimerField/useTimerField.d.ts +0 -44
  100. package/build/esm/TimerField/useTimerField.js +0 -430
  101. package/build/esm/TimerField/useTimerField.js.map +0 -1
  102. package/build/esm/TimerField/wrapEvent.d.ts +0 -1
  103. package/build/esm/TimerField/wrapEvent.js +0 -2
  104. package/build/esm/TimerField/wrapEvent.js.map +0 -1
@@ -0,0 +1,85 @@
1
+ var AnimationState;
2
+
3
+ (function (AnimationState) {
4
+ AnimationState[AnimationState["LEFT"] = -1] = "LEFT";
5
+ AnimationState[AnimationState["NONE"] = 0] = "NONE";
6
+ AnimationState[AnimationState["RIGHT"] = 1] = "RIGHT";
7
+ })(AnimationState || (AnimationState = {}));
8
+
9
+ function getAnimationState(animationEnabled, nextSlide, currentSlide, deltaX, isRTL) {
10
+ if (deltaX === 0 && (!animationEnabled || nextSlide === currentSlide)) {
11
+ return AnimationState.NONE;
12
+ }
13
+
14
+ if (deltaX < 0 || nextSlide > currentSlide && !isRTL || nextSlide < currentSlide && isRTL) {
15
+ return AnimationState.RIGHT;
16
+ }
17
+
18
+ return AnimationState.LEFT;
19
+ }
20
+
21
+ function getSlideIndex(curSlide, nextSlide, deltaX, slidesToScroll, isRTL) {
22
+ if (deltaX > 0 && !isRTL || deltaX < 0 && isRTL) {
23
+ return curSlide - slidesToScroll;
24
+ }
25
+
26
+ return Math.min(curSlide, nextSlide);
27
+ }
28
+
29
+ function getLeftOffset(animationState, itemWidth, slidesToScroll, isRTL) {
30
+ if (animationState === AnimationState.LEFT && !isRTL) {
31
+ return "".concat(-itemWidth * slidesToScroll, "%");
32
+ }
33
+
34
+ if (animationState === AnimationState.RIGHT && isRTL) {
35
+ return "".concat(itemWidth * slidesToScroll, "%");
36
+ }
37
+
38
+ return undefined;
39
+ }
40
+
41
+ function getSpringTarget(drag, deltaX, animationState, itemWidth, slidesToScroll) {
42
+ if (drag) {
43
+ return deltaX;
44
+ }
45
+
46
+ if (animationState === AnimationState.LEFT) {
47
+ return itemWidth * slidesToScroll;
48
+ }
49
+
50
+ if (animationState === AnimationState.RIGHT) {
51
+ return -itemWidth * slidesToScroll;
52
+ }
53
+
54
+ return 0;
55
+ }
56
+
57
+ export function getSlidesToScroll(curSlide, nextSlide, deltaX, itemWidth) {
58
+ var dragSlideCount = deltaX !== 0 ? 1 + Math.floor(Math.abs(deltaX) / itemWidth) : 0;
59
+ var slideCount = Math.abs(nextSlide - curSlide);
60
+ return Math.max(dragSlideCount, slideCount);
61
+ }
62
+ export function getSliderParams(numAvailableSlides, curSlide, nextSlide, slidesToShow, dragging, deltaX, isRTL) {
63
+ // The size in percentage that each slide will ocupy
64
+ var itemWidth = 100 / slidesToShow;
65
+ var animationEnabled = numAvailableSlides >= slidesToShow; // if we don't have enough children to animate, we will fulfill
66
+ // the remaining space with a padding to the right
67
+
68
+ var paddingRight = animationEnabled ? undefined : "".concat(itemWidth * (slidesToShow - numAvailableSlides), "%");
69
+ var animationState = getAnimationState(animationEnabled, nextSlide, curSlide, deltaX, isRTL);
70
+ var slidesToScroll = getSlidesToScroll(curSlide, nextSlide, deltaX, itemWidth);
71
+ var startingIndex = getSlideIndex(curSlide, nextSlide, deltaX, slidesToScroll, isRTL);
72
+ var count = slidesToShow + (animationState !== AnimationState.NONE ? slidesToScroll : 0); // shift items to the left for animation effect
73
+
74
+ var left = getLeftOffset(animationState, itemWidth, slidesToScroll, isRTL);
75
+ var targetX = getSpringTarget(dragging, deltaX, nextSlide !== curSlide ? animationState : AnimationState.NONE, itemWidth, Math.abs(nextSlide - curSlide));
76
+ return {
77
+ startingIndex: startingIndex,
78
+ count: count,
79
+ left: left,
80
+ targetX: targetX,
81
+ itemWidth: itemWidth,
82
+ paddingRight: paddingRight
83
+ };
84
+ }
85
+ //# sourceMappingURL=getSliderParams.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Carousel/getSliderParams.ts"],"names":["AnimationState","getAnimationState","animationEnabled","nextSlide","currentSlide","deltaX","isRTL","NONE","RIGHT","LEFT","getSlideIndex","curSlide","slidesToScroll","Math","min","getLeftOffset","animationState","itemWidth","undefined","getSpringTarget","drag","getSlidesToScroll","dragSlideCount","floor","abs","slideCount","max","getSliderParams","numAvailableSlides","slidesToShow","dragging","paddingRight","startingIndex","count","left","targetX"],"mappings":"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","sourcesContent":["enum AnimationState {\n LEFT = -1,\n NONE = 0,\n RIGHT = 1,\n}\n\nfunction getAnimationState(\n animationEnabled: boolean,\n nextSlide: number,\n currentSlide: number,\n deltaX: number,\n isRTL: boolean\n): AnimationState {\n if (deltaX === 0 && (!animationEnabled || nextSlide === currentSlide)) {\n return AnimationState.NONE;\n }\n\n if (\n deltaX < 0 ||\n (nextSlide > currentSlide && !isRTL) ||\n (nextSlide < currentSlide && isRTL)\n ) {\n return AnimationState.RIGHT;\n }\n\n return AnimationState.LEFT;\n}\n\nfunction getSlideIndex(\n curSlide: number,\n nextSlide: number,\n deltaX: number,\n slidesToScroll: number,\n isRTL: boolean\n) {\n if ((deltaX > 0 && !isRTL) || (deltaX < 0 && isRTL)) {\n return curSlide - slidesToScroll;\n }\n\n return Math.min(curSlide, nextSlide);\n}\n\nfunction getLeftOffset(\n animationState: AnimationState,\n itemWidth: number,\n slidesToScroll: number,\n isRTL: boolean\n) {\n if (animationState === AnimationState.LEFT && !isRTL) {\n return `${-itemWidth * slidesToScroll}%`;\n }\n if (animationState === AnimationState.RIGHT && isRTL) {\n return `${itemWidth * slidesToScroll}%`;\n }\n\n return undefined;\n}\n\nfunction getSpringTarget(\n drag: boolean,\n deltaX: number,\n animationState: AnimationState,\n itemWidth: number,\n slidesToScroll: number\n) {\n if (drag) {\n return deltaX;\n }\n if (animationState === AnimationState.LEFT) {\n return itemWidth * slidesToScroll;\n }\n if (animationState === AnimationState.RIGHT) {\n return -itemWidth * slidesToScroll;\n }\n\n return 0;\n}\n\nexport function getSlidesToScroll(\n curSlide: number,\n nextSlide: number,\n deltaX: number,\n itemWidth: number\n) {\n const dragSlideCount =\n deltaX !== 0 ? 1 + Math.floor(Math.abs(deltaX) / itemWidth) : 0;\n const slideCount = Math.abs(nextSlide - curSlide);\n\n return Math.max(dragSlideCount, slideCount);\n}\n\nexport function getSliderParams(\n numAvailableSlides: number,\n curSlide: number,\n nextSlide: number,\n slidesToShow: number,\n dragging: boolean,\n deltaX: number,\n isRTL: boolean\n) {\n // The size in percentage that each slide will ocupy\n const itemWidth = 100 / slidesToShow;\n\n const animationEnabled = numAvailableSlides >= slidesToShow;\n // if we don't have enough children to animate, we will fulfill\n // the remaining space with a padding to the right\n const paddingRight = animationEnabled\n ? undefined\n : `${itemWidth * (slidesToShow - numAvailableSlides)}%`;\n\n const animationState = getAnimationState(\n animationEnabled,\n nextSlide,\n curSlide,\n deltaX,\n isRTL\n );\n\n const slidesToScroll = getSlidesToScroll(\n curSlide,\n nextSlide,\n deltaX,\n itemWidth\n );\n\n const startingIndex = getSlideIndex(\n curSlide,\n nextSlide,\n deltaX,\n slidesToScroll,\n isRTL\n );\n const count =\n slidesToShow +\n (animationState !== AnimationState.NONE ? slidesToScroll : 0);\n\n // shift items to the left for animation effect\n const left = getLeftOffset(animationState, itemWidth, slidesToScroll, isRTL);\n\n const targetX = getSpringTarget(\n dragging,\n deltaX,\n nextSlide !== curSlide ? animationState : AnimationState.NONE,\n itemWidth,\n Math.abs(nextSlide - curSlide)\n );\n\n return { startingIndex, count, left, targetX, itemWidth, paddingRight };\n}\n"],"file":"getSliderParams.js"}
@@ -0,0 +1,7 @@
1
+ export * from './Carousel';
2
+ export * from './Slider';
3
+ export * from './Fader';
4
+ export * from './SliderItem';
5
+ export * from './FaderItem';
6
+ export * from './Preloader';
7
+ export * from './context';
@@ -0,0 +1,8 @@
1
+ export * from './Carousel';
2
+ export * from './Slider';
3
+ export * from './Fader';
4
+ export * from './SliderItem';
5
+ export * from './FaderItem';
6
+ export * from './Preloader';
7
+ export * from './context';
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Carousel/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAd;AACA,cAAc,UAAd;AACA,cAAc,SAAd;AACA,cAAc,cAAd;AACA,cAAc,aAAd;AACA,cAAc,aAAd;AACA,cAAc,WAAd","sourcesContent":["export * from './Carousel';\nexport * from './Slider';\nexport * from './Fader';\nexport * from './SliderItem';\nexport * from './FaderItem';\nexport * from './Preloader';\nexport * from './context';\n"],"file":"index.js"}
@@ -0,0 +1,30 @@
1
+ /// <reference types="react" />
2
+ import { GestureHandlersState } from '../hooks';
3
+ interface UseCarouselOptions {
4
+ onSwipeRight?: (s: GestureHandlersState) => void;
5
+ onSwipeLeft?: (s: GestureHandlersState) => void;
6
+ onDrag?: (s: GestureHandlersState) => void;
7
+ slidesToShow?: number;
8
+ isRTL?: boolean;
9
+ containerRef: React.MutableRefObject<HTMLElement | null>;
10
+ }
11
+ export declare const useCarouselGestures: (props: UseCarouselOptions) => {
12
+ state: {
13
+ target: EventTarget | null;
14
+ x: number;
15
+ xDelta: number;
16
+ xDeltaPercent: number;
17
+ xInitial: number;
18
+ xPrev: number;
19
+ xVelocity: number;
20
+ y: number;
21
+ yDelta: number;
22
+ yDeltaPercent: number;
23
+ yInitial: number;
24
+ yPrev: number;
25
+ yVelocity: number;
26
+ down: boolean;
27
+ };
28
+ handlers: import("../hooks").GestureHandlersReturn;
29
+ };
30
+ export {};
@@ -0,0 +1,33 @@
1
+ import { useGestureHandlers } from '../hooks';
2
+ export var useCarouselGestures = function useCarouselGestures(props) {
3
+ var onSwipeLeft = props.onSwipeLeft,
4
+ onSwipeRight = props.onSwipeRight,
5
+ onDrag = props.onDrag,
6
+ _props$slidesToShow = props.slidesToShow,
7
+ slidesToShow = _props$slidesToShow === void 0 ? 1 : _props$slidesToShow,
8
+ isRTL = props.isRTL,
9
+ containerRef = props.containerRef;
10
+ return useGestureHandlers(containerRef, function (state) {
11
+ var xDelta = state.xDeltaPercent,
12
+ xVelocity = state.xVelocity,
13
+ down = state.down;
14
+ var swipeLeft = onSwipeLeft;
15
+ var swipeRight = onSwipeRight;
16
+
17
+ if (isRTL) {
18
+ swipeLeft = onSwipeRight;
19
+ swipeRight = onSwipeLeft;
20
+ }
21
+
22
+ if (swipeLeft && swipeRight && !down && (Math.abs(xDelta) >= 25 / slidesToShow || Math.abs(xVelocity) >= 2.5)) {
23
+ if (xDelta < 0) {
24
+ swipeRight && swipeRight(state);
25
+ } else {
26
+ swipeLeft && swipeLeft(state);
27
+ }
28
+ }
29
+
30
+ onDrag && onDrag(state);
31
+ });
32
+ };
33
+ //# sourceMappingURL=useCarouselGestures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/Carousel/useCarouselGestures.ts"],"names":["useGestureHandlers","useCarouselGestures","props","onSwipeLeft","onSwipeRight","onDrag","slidesToShow","isRTL","containerRef","state","xDelta","xDeltaPercent","xVelocity","down","swipeLeft","swipeRight","Math","abs"],"mappings":"AAAA,SAASA,kBAAT,QAAyD,UAAzD;AAWA,OAAO,IAAMC,mBAAmB,GAAG,SAAtBA,mBAAsB,CAACC,KAAD,EAA+B;AAAA,MAE9DC,WAF8D,GAQ5DD,KAR4D,CAE9DC,WAF8D;AAAA,MAG9DC,YAH8D,GAQ5DF,KAR4D,CAG9DE,YAH8D;AAAA,MAI9DC,MAJ8D,GAQ5DH,KAR4D,CAI9DG,MAJ8D;AAAA,4BAQ5DH,KAR4D,CAK9DI,YAL8D;AAAA,MAK9DA,YAL8D,oCAK/C,CAL+C;AAAA,MAM9DC,KAN8D,GAQ5DL,KAR4D,CAM9DK,KAN8D;AAAA,MAO9DC,YAP8D,GAQ5DN,KAR4D,CAO9DM,YAP8D;AAUhE,SAAOR,kBAAkB,CAACQ,YAAD,EAAe,UAACC,KAAD,EAAW;AAAA,QAC1BC,MAD0B,GACED,KADF,CACzCE,aADyC;AAAA,QAClBC,SADkB,GACEH,KADF,CAClBG,SADkB;AAAA,QACPC,IADO,GACEJ,KADF,CACPI,IADO;AAGjD,QAAIC,SAAS,GAAGX,WAAhB;AACA,QAAIY,UAAU,GAAGX,YAAjB;;AACA,QAAIG,KAAJ,EAAW;AACTO,MAAAA,SAAS,GAAGV,YAAZ;AACAW,MAAAA,UAAU,GAAGZ,WAAb;AACD;;AAED,QACEW,SAAS,IACTC,UADA,IAEA,CAACF,IAFD,KAGCG,IAAI,CAACC,GAAL,CAASP,MAAT,KAAoB,KAAKJ,YAAzB,IAAyCU,IAAI,CAACC,GAAL,CAASL,SAAT,KAAuB,GAHjE,CADF,EAKE;AACA,UAAIF,MAAM,GAAG,CAAb,EAAgB;AACdK,QAAAA,UAAU,IAAIA,UAAU,CAACN,KAAD,CAAxB;AACD,OAFD,MAEO;AACLK,QAAAA,SAAS,IAAIA,SAAS,CAACL,KAAD,CAAtB;AACD;AACF;;AAEDJ,IAAAA,MAAM,IAAIA,MAAM,CAACI,KAAD,CAAhB;AACD,GAxBwB,CAAzB;AAyBD,CAnCM","sourcesContent":["import { useGestureHandlers, GestureHandlersState } from '../hooks';\n\ninterface UseCarouselOptions {\n onSwipeRight?: (s: GestureHandlersState) => void;\n onSwipeLeft?: (s: GestureHandlersState) => void;\n onDrag?: (s: GestureHandlersState) => void;\n slidesToShow?: number;\n isRTL?: boolean;\n containerRef: React.MutableRefObject<HTMLElement | null>;\n}\n\nexport const useCarouselGestures = (props: UseCarouselOptions) => {\n const {\n onSwipeLeft,\n onSwipeRight,\n onDrag,\n slidesToShow = 1,\n isRTL,\n containerRef,\n } = props;\n\n return useGestureHandlers(containerRef, (state) => {\n const { xDeltaPercent: xDelta, xVelocity, down } = state;\n\n let swipeLeft = onSwipeLeft;\n let swipeRight = onSwipeRight;\n if (isRTL) {\n swipeLeft = onSwipeRight;\n swipeRight = onSwipeLeft;\n }\n\n if (\n swipeLeft &&\n swipeRight &&\n !down &&\n (Math.abs(xDelta) >= 25 / slidesToShow || Math.abs(xVelocity) >= 2.5)\n ) {\n if (xDelta < 0) {\n swipeRight && swipeRight(state);\n } else {\n swipeLeft && swipeLeft(state);\n }\n }\n\n onDrag && onDrag(state);\n });\n};\n"],"file":"useCarouselGestures.js"}
@@ -0,0 +1,24 @@
1
+ import React from 'react';
2
+ import { DayNames, MonthNames } from './dateTypes';
3
+ export declare type DatePickerProps = Omit<React.HTMLAttributes<HTMLDivElement>, 'value' | 'defaultValue' | 'onChange'> & {
4
+ as?: React.ElementType<any>;
5
+ minDate?: Date;
6
+ maxDate?: Date;
7
+ dayNames?: DayNames;
8
+ monthNames?: MonthNames;
9
+ onChange?: (from: Date | null) => void;
10
+ value?: Date | null;
11
+ defaultValue?: Date | null;
12
+ type?: 'from' | 'to';
13
+ };
14
+ export declare const DatePicker: React.ForwardRefExoticComponent<Pick<React.HTMLAttributes<HTMLDivElement>, "dir" | "slot" | "style" | "title" | "children" | "onFocus" | "onBlur" | "id" | "hidden" | "defaultChecked" | "suppressContentEditableWarning" | "suppressHydrationWarning" | "accessKey" | "className" | "contentEditable" | "contextMenu" | "draggable" | "lang" | "placeholder" | "spellCheck" | "tabIndex" | "translate" | "radioGroup" | "role" | "about" | "datatype" | "inlist" | "prefix" | "property" | "resource" | "typeof" | "vocab" | "autoCapitalize" | "autoCorrect" | "autoSave" | "color" | "itemProp" | "itemScope" | "itemType" | "itemID" | "itemRef" | "results" | "security" | "unselectable" | "inputMode" | "is" | "aria-activedescendant" | "aria-atomic" | "aria-autocomplete" | "aria-busy" | "aria-checked" | "aria-colcount" | "aria-colindex" | "aria-colspan" | "aria-controls" | "aria-current" | "aria-describedby" | "aria-details" | "aria-disabled" | "aria-dropeffect" | "aria-errormessage" | "aria-expanded" | "aria-flowto" | "aria-grabbed" | "aria-haspopup" | "aria-hidden" | "aria-invalid" | "aria-keyshortcuts" | "aria-label" | "aria-labelledby" | "aria-level" | "aria-live" | "aria-modal" | "aria-multiline" | "aria-multiselectable" | "aria-orientation" | "aria-owns" | "aria-placeholder" | "aria-posinset" | "aria-pressed" | "aria-readonly" | "aria-relevant" | "aria-required" | "aria-roledescription" | "aria-rowcount" | "aria-rowindex" | "aria-rowspan" | "aria-selected" | "aria-setsize" | "aria-sort" | "aria-valuemax" | "aria-valuemin" | "aria-valuenow" | "aria-valuetext" | "dangerouslySetInnerHTML" | "onCopy" | "onCopyCapture" | "onCut" | "onCutCapture" | "onPaste" | "onPasteCapture" | "onCompositionEnd" | "onCompositionEndCapture" | "onCompositionStart" | "onCompositionStartCapture" | "onCompositionUpdate" | "onCompositionUpdateCapture" | "onFocusCapture" | "onBlurCapture" | "onChangeCapture" | "onBeforeInput" | "onBeforeInputCapture" | "onInput" | "onInputCapture" | "onReset" | "onResetCapture" | "onSubmit" | "onSubmitCapture" | "onInvalid" | "onInvalidCapture" | "onLoad" | "onLoadCapture" | "onError" | "onErrorCapture" | "onKeyDown" | "onKeyDownCapture" | "onKeyPress" | "onKeyPressCapture" | "onKeyUp" | "onKeyUpCapture" | "onAbort" | "onAbortCapture" | "onCanPlay" | "onCanPlayCapture" | "onCanPlayThrough" | "onCanPlayThroughCapture" | "onDurationChange" | "onDurationChangeCapture" | "onEmptied" | "onEmptiedCapture" | "onEncrypted" | "onEncryptedCapture" | "onEnded" | "onEndedCapture" | "onLoadedData" | "onLoadedDataCapture" | "onLoadedMetadata" | "onLoadedMetadataCapture" | "onLoadStart" | "onLoadStartCapture" | "onPause" | "onPauseCapture" | "onPlay" | "onPlayCapture" | "onPlaying" | "onPlayingCapture" | "onProgress" | "onProgressCapture" | "onRateChange" | "onRateChangeCapture" | "onSeeked" | "onSeekedCapture" | "onSeeking" | "onSeekingCapture" | "onStalled" | "onStalledCapture" | "onSuspend" | "onSuspendCapture" | "onTimeUpdate" | "onTimeUpdateCapture" | "onVolumeChange" | "onVolumeChangeCapture" | "onWaiting" | "onWaitingCapture" | "onAuxClick" | "onAuxClickCapture" | "onClick" | "onClickCapture" | "onContextMenu" | "onContextMenuCapture" | "onDoubleClick" | "onDoubleClickCapture" | "onDrag" | "onDragCapture" | "onDragEnd" | "onDragEndCapture" | "onDragEnter" | "onDragEnterCapture" | "onDragExit" | "onDragExitCapture" | "onDragLeave" | "onDragLeaveCapture" | "onDragOver" | "onDragOverCapture" | "onDragStart" | "onDragStartCapture" | "onDrop" | "onDropCapture" | "onMouseDown" | "onMouseDownCapture" | "onMouseEnter" | "onMouseLeave" | "onMouseMove" | "onMouseMoveCapture" | "onMouseOut" | "onMouseOutCapture" | "onMouseOver" | "onMouseOverCapture" | "onMouseUp" | "onMouseUpCapture" | "onSelect" | "onSelectCapture" | "onTouchCancel" | "onTouchCancelCapture" | "onTouchEnd" | "onTouchEndCapture" | "onTouchMove" | "onTouchMoveCapture" | "onTouchStart" | "onTouchStartCapture" | "onPointerDown" | "onPointerDownCapture" | "onPointerMove" | "onPointerMoveCapture" | "onPointerUp" | "onPointerUpCapture" | "onPointerCancel" | "onPointerCancelCapture" | "onPointerEnter" | "onPointerEnterCapture" | "onPointerLeave" | "onPointerLeaveCapture" | "onPointerOver" | "onPointerOverCapture" | "onPointerOut" | "onPointerOutCapture" | "onGotPointerCapture" | "onGotPointerCaptureCapture" | "onLostPointerCapture" | "onLostPointerCaptureCapture" | "onScroll" | "onScrollCapture" | "onWheel" | "onWheelCapture" | "onAnimationStart" | "onAnimationStartCapture" | "onAnimationEnd" | "onAnimationEndCapture" | "onAnimationIteration" | "onAnimationIterationCapture" | "onTransitionEnd" | "onTransitionEndCapture"> & {
15
+ as?: "symbol" | "object" | "a" | "abbr" | "address" | "area" | "article" | "aside" | "audio" | "b" | "base" | "bdi" | "bdo" | "blockquote" | "body" | "br" | "button" | "canvas" | "caption" | "cite" | "code" | "col" | "colgroup" | "data" | "datalist" | "dd" | "del" | "details" | "dfn" | "dialog" | "div" | "dl" | "dt" | "em" | "embed" | "fieldset" | "figcaption" | "figure" | "footer" | "form" | "h1" | "h2" | "h3" | "h4" | "h5" | "h6" | "head" | "header" | "hgroup" | "hr" | "html" | "i" | "iframe" | "img" | "input" | "ins" | "kbd" | "label" | "legend" | "li" | "link" | "main" | "map" | "mark" | "menu" | "meta" | "meter" | "nav" | "noscript" | "ol" | "optgroup" | "option" | "output" | "p" | "param" | "picture" | "pre" | "progress" | "q" | "rp" | "rt" | "ruby" | "s" | "samp" | "script" | "section" | "select" | "slot" | "small" | "source" | "span" | "strong" | "style" | "sub" | "summary" | "sup" | "table" | "tbody" | "td" | "template" | "textarea" | "tfoot" | "th" | "thead" | "time" | "title" | "tr" | "track" | "u" | "ul" | "var" | "video" | "wbr" | "circle" | "clipPath" | "defs" | "desc" | "ellipse" | "feBlend" | "feColorMatrix" | "feComponentTransfer" | "feComposite" | "feConvolveMatrix" | "feDiffuseLighting" | "feDisplacementMap" | "feDistantLight" | "feFlood" | "feFuncA" | "feFuncB" | "feFuncG" | "feFuncR" | "feGaussianBlur" | "feImage" | "feMerge" | "feMergeNode" | "feMorphology" | "feOffset" | "fePointLight" | "feSpecularLighting" | "feSpotLight" | "feTile" | "feTurbulence" | "filter" | "foreignObject" | "g" | "image" | "line" | "linearGradient" | "marker" | "mask" | "metadata" | "path" | "pattern" | "polygon" | "polyline" | "radialGradient" | "rect" | "stop" | "svg" | "switch" | "text" | "textPath" | "tspan" | "use" | "view" | "big" | "keygen" | "menuitem" | "noindex" | "webview" | "animate" | "animateMotion" | "animateTransform" | "feDropShadow" | "mpath" | React.ComponentClass<any, any> | React.FunctionComponent<any> | undefined;
16
+ minDate?: Date | undefined;
17
+ maxDate?: Date | undefined;
18
+ dayNames?: DayNames | undefined;
19
+ monthNames?: MonthNames | undefined;
20
+ onChange?: ((from: Date | null) => void) | undefined;
21
+ value?: Date | null | undefined;
22
+ defaultValue?: Date | null | undefined;
23
+ type?: "from" | "to" | undefined;
24
+ } & React.RefAttributes<HTMLDivElement>>;
@@ -0,0 +1,101 @@
1
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
2
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
3
+ import _extends from "@babel/runtime/helpers/esm/extends";
4
+ import React, { forwardRef, useMemo, useRef, useReducer } from 'react';
5
+ import { assignMultipleRefs } from '../utils/assignRef';
6
+ import { reducer } from './hooks';
7
+ import { useRangeDatePickerContext, DatePickerProvider } from './contexts';
8
+
9
+ /**
10
+ * Merges props from RangeDatePicker and DatePicker
11
+ */
12
+ function usePropsMerge(props) {
13
+ var context = useRangeDatePickerContext();
14
+
15
+ if (context && !props.type) {
16
+ throw new Error("<DatePicker /> as a children of <RangeDatePicker /> needs a 'type'");
17
+ }
18
+
19
+ if (!context) {
20
+ return props;
21
+ } else {
22
+ var mergedProps = _extends(_extends({}, props), {}, {
23
+ minDate: context.minDate,
24
+ maxDate: context.maxDate,
25
+ dayNames: context.dayNames,
26
+ monthNames: context.monthNames
27
+ }, props.type === 'from' ? {
28
+ value: context.from,
29
+ onChange: context.onChangeFrom
30
+ } : {
31
+ // props.type === 'to'
32
+ value: context.to,
33
+ onChange: context.onChangeTo,
34
+ minDate: context.from !== null && context.from !== undefined ? new Date(context.from.valueOf() + 86400000) : context.minDate
35
+ });
36
+
37
+ return mergedProps;
38
+ }
39
+ }
40
+
41
+ export var DatePicker = forwardRef(function DatePicker(props, ref) {
42
+ var _usePropsMerge = usePropsMerge(props),
43
+ _usePropsMerge$as = _usePropsMerge.as,
44
+ Comp = _usePropsMerge$as === void 0 ? 'div' : _usePropsMerge$as,
45
+ _usePropsMerge$minDat = _usePropsMerge.minDate,
46
+ propMinDate = _usePropsMerge$minDat === void 0 ? new Date(0) : _usePropsMerge$minDat,
47
+ _usePropsMerge$maxDat = _usePropsMerge.maxDate,
48
+ propMaxDate = _usePropsMerge$maxDat === void 0 ? new Date() : _usePropsMerge$maxDat,
49
+ dayNames = _usePropsMerge.dayNames,
50
+ monthNames = _usePropsMerge.monthNames,
51
+ onChange = _usePropsMerge.onChange,
52
+ controlledValue = _usePropsMerge.value,
53
+ defaultValue = _usePropsMerge.defaultValue,
54
+ type = _usePropsMerge.type,
55
+ rest = _objectWithoutProperties(_usePropsMerge, ["as", "minDate", "maxDate", "dayNames", "monthNames", "onChange", "value", "defaultValue", "type"]);
56
+
57
+ var datePickerRef = useRef(null);
58
+ var minDate = propMinDate,
59
+ maxDate = propMaxDate;
60
+ var onChangeRef = useRef(onChange);
61
+ onChangeRef.current = onChange;
62
+ var controlledValueRef = useRef(controlledValue);
63
+ controlledValueRef.current = controlledValue;
64
+ var initialData = {
65
+ isFocused: false,
66
+ navigationDay: -1,
67
+ navigationMonth: -1,
68
+ navigationYear: -1,
69
+ selectedDate: defaultValue !== undefined ? defaultValue : null
70
+ };
71
+
72
+ var _useReducer = useReducer(reducer, initialData),
73
+ _useReducer2 = _slicedToArray(_useReducer, 2),
74
+ state = _useReducer2[0],
75
+ dispatch = _useReducer2[1];
76
+
77
+ if (!dayNames || !monthNames) {
78
+ throw new Error('Props dayNames and monthNames not specified in <DatePicker />');
79
+ }
80
+
81
+ var contextValue = useMemo(function () {
82
+ return {
83
+ minDate: minDate,
84
+ maxDate: maxDate,
85
+ dayNames: dayNames,
86
+ monthNames: monthNames,
87
+ datePickerRef: datePickerRef,
88
+ controlledValueRef: controlledValueRef,
89
+ state: state,
90
+ dispatch: dispatch,
91
+ onChangeRef: onChangeRef
92
+ };
93
+ }, [maxDate, minDate, dayNames, monthNames, state]);
94
+ return /*#__PURE__*/React.createElement(DatePickerProvider, {
95
+ value: contextValue
96
+ }, /*#__PURE__*/React.createElement(Comp, _extends({
97
+ ref: assignMultipleRefs(ref, datePickerRef),
98
+ "data-has-focus": state.isFocused ? '' : undefined
99
+ }, rest)));
100
+ });
101
+ //# sourceMappingURL=DatePicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/DatePicker/DatePicker.tsx"],"names":["React","forwardRef","useMemo","useRef","useReducer","assignMultipleRefs","reducer","useRangeDatePickerContext","DatePickerProvider","usePropsMerge","props","context","type","Error","mergedProps","minDate","maxDate","dayNames","monthNames","value","from","onChange","onChangeFrom","to","onChangeTo","undefined","Date","valueOf","DatePicker","ref","as","Comp","propMinDate","propMaxDate","controlledValue","defaultValue","rest","datePickerRef","onChangeRef","current","controlledValueRef","initialData","isFocused","navigationDay","navigationMonth","navigationYear","selectedDate","state","dispatch","contextValue"],"mappings":"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","sourcesContent":["import React, { forwardRef, useMemo, useRef, useReducer } from 'react';\nimport { assignMultipleRefs } from '../utils/assignRef';\nimport { reducer, ReducerState } from './hooks';\nimport { DayNames, MonthNames } from './dateTypes';\nimport {\n useRangeDatePickerContext,\n DatePickerContextProps,\n DatePickerProvider,\n} from './contexts';\n\nexport type DatePickerProps = Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'value' | 'defaultValue' | 'onChange'\n> & {\n as?: React.ElementType<any>;\n minDate?: Date;\n maxDate?: Date;\n dayNames?: DayNames;\n monthNames?: MonthNames;\n onChange?: (from: Date | null) => void;\n value?: Date | null;\n defaultValue?: Date | null;\n type?: 'from' | 'to';\n};\n\n/**\n * Merges props from RangeDatePicker and DatePicker\n */\nfunction usePropsMerge(props: DatePickerProps) {\n const context = useRangeDatePickerContext();\n if (context && !props.type) {\n throw new Error(\n \"<DatePicker /> as a children of <RangeDatePicker /> needs a 'type'\"\n );\n }\n\n if (!context) {\n return props;\n } else {\n const mergedProps = {\n ...props,\n minDate: context.minDate,\n maxDate: context.maxDate,\n dayNames: context.dayNames,\n monthNames: context.monthNames,\n ...(props.type === 'from'\n ? {\n value: context.from,\n onChange: context.onChangeFrom,\n }\n : {\n // props.type === 'to'\n value: context.to,\n onChange: context.onChangeTo,\n minDate:\n context.from !== null && context.from !== undefined\n ? new Date(context.from.valueOf() + 86400000)\n : context.minDate,\n }),\n };\n\n return mergedProps;\n }\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n function DatePicker(props, ref) {\n const {\n as: Comp = 'div',\n minDate: propMinDate = new Date(0),\n maxDate: propMaxDate = new Date(),\n dayNames,\n monthNames,\n onChange,\n value: controlledValue,\n defaultValue,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n type, // just to avoid passing it to DOM\n ...rest\n } = usePropsMerge(props);\n const datePickerRef = useRef<HTMLDivElement | null>(null);\n const minDate = propMinDate,\n maxDate = propMaxDate;\n\n const onChangeRef = useRef(onChange);\n onChangeRef.current = onChange;\n\n const controlledValueRef = useRef(controlledValue);\n controlledValueRef.current = controlledValue;\n\n const initialData: ReducerState = {\n isFocused: false,\n navigationDay: -1,\n navigationMonth: -1,\n navigationYear: -1,\n selectedDate: defaultValue !== undefined ? defaultValue : null,\n };\n const [state, dispatch] = useReducer(reducer, initialData);\n\n if (!dayNames || !monthNames) {\n throw new Error(\n 'Props dayNames and monthNames not specified in <DatePicker />'\n );\n }\n\n const contextValue: DatePickerContextProps = useMemo(\n () => ({\n minDate,\n maxDate,\n dayNames,\n monthNames,\n datePickerRef,\n controlledValueRef,\n state,\n dispatch,\n onChangeRef,\n }),\n [maxDate, minDate, dayNames, monthNames, state]\n );\n\n return (\n <DatePickerProvider value={contextValue}>\n <Comp\n ref={assignMultipleRefs(ref, datePickerRef)}\n data-has-focus={state.isFocused ? '' : undefined}\n {...rest}\n />\n </DatePickerProvider>\n );\n }\n);\n"],"file":"DatePicker.js"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ export interface DatePickerSelectProps extends React.SelectHTMLAttributes<HTMLSelectElement> {
3
+ groupType?: 'from' | 'to';
4
+ type: 'month_year' | 'day';
5
+ emptyOption?: string;
6
+ as?: React.ElementType<any>;
7
+ }
8
+ export declare const DatePickerSelect: React.ForwardRefExoticComponent<DatePickerSelectProps & React.RefAttributes<unknown>>;
@@ -0,0 +1,201 @@
1
+ import _extends from "@babel/runtime/helpers/esm/extends";
2
+ import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
3
+ import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties";
4
+ import React, { forwardRef, memo } from 'react';
5
+ import { wrapEvent } from '../utils/wrapEvent';
6
+ import { useInnerFocus, SET_DATE } from './hooks';
7
+ import { useDatePickerContext } from './contexts';
8
+ import { NAVIGATE } from '../ComboBox/hooks';
9
+ import { differenceInCalendarMonths, addMonths, getDaysInMonth, setDate } from 'date-fns';
10
+ var MonthYearOptions = memo(function (_ref) {
11
+ var minDate = _ref.minDate,
12
+ maxDate = _ref.maxDate,
13
+ monthNames = _ref.monthNames,
14
+ emptyOption = _ref.emptyOption;
15
+ var ret = [/*#__PURE__*/React.createElement("option", {
16
+ key: 'empty',
17
+ value: "",
18
+ disabled: true
19
+ }, emptyOption)];
20
+ var diff = differenceInCalendarMonths(maxDate, minDate);
21
+
22
+ for (var i = 0; i <= diff; i++) {
23
+ var date = addMonths(minDate, i);
24
+ var year = date.getFullYear();
25
+ var month = date.getMonth();
26
+ ret.push( /*#__PURE__*/React.createElement("option", {
27
+ key: "".concat(year, "_").concat(month),
28
+ value: "".concat(year, "-").concat(month)
29
+ }, monthNames[month], " ", year));
30
+ }
31
+
32
+ return /*#__PURE__*/React.createElement(React.Fragment, null, ret);
33
+ });
34
+ var DayOptions = memo(function (_ref2) {
35
+ var _ref2$date = _ref2.date,
36
+ date = _ref2$date === void 0 ? new Date(0) : _ref2$date,
37
+ dayNames = _ref2.dayNames,
38
+ minDate = _ref2.minDate,
39
+ emptyOption = _ref2.emptyOption;
40
+
41
+ if (!date) {
42
+ return null;
43
+ }
44
+
45
+ var ret = [/*#__PURE__*/React.createElement("option", {
46
+ key: 'empty',
47
+ value: "",
48
+ disabled: true
49
+ }, emptyOption)];
50
+
51
+ for (var day = 1; day <= getDaysInMonth(date); day++) {
52
+ var newDate = setDate(date, day);
53
+ ret.push( /*#__PURE__*/React.createElement("option", {
54
+ key: "day_".concat(day),
55
+ value: "".concat(day),
56
+ disabled: newDate.valueOf() < minDate.valueOf()
57
+ }, (newDate.getDay(), dayNames[newDate.getDay()]), " ", day));
58
+ }
59
+
60
+ return /*#__PURE__*/React.createElement(React.Fragment, null, ret);
61
+ });
62
+ export var DatePickerSelect = forwardRef(function DatePicker(_ref3, ref) {
63
+ var _ref3$as = _ref3.as,
64
+ Comp = _ref3$as === void 0 ? 'select' : _ref3$as,
65
+ type = _ref3.type,
66
+ onFocus = _ref3.onFocus,
67
+ onBlur = _ref3.onBlur,
68
+ onChange = _ref3.onChange,
69
+ children = _ref3.children,
70
+ _ref3$emptyOption = _ref3.emptyOption,
71
+ emptyOption = _ref3$emptyOption === void 0 ? '' : _ref3$emptyOption,
72
+ rest = _objectWithoutProperties(_ref3, ["as", "type", "onFocus", "onBlur", "onChange", "children", "emptyOption"]);
73
+
74
+ var _useDatePickerContext = useDatePickerContext(),
75
+ minDate = _useDatePickerContext.minDate,
76
+ maxDate = _useDatePickerContext.maxDate,
77
+ monthNames = _useDatePickerContext.monthNames,
78
+ onChangeRef = _useDatePickerContext.onChangeRef,
79
+ dayNames = _useDatePickerContext.dayNames,
80
+ dispatch = _useDatePickerContext.dispatch,
81
+ controlledValueRef = _useDatePickerContext.controlledValueRef,
82
+ data = _useDatePickerContext.state;
83
+
84
+ var _useInnerFocus = useInnerFocus(),
85
+ handleFocus = _useInnerFocus.handleFocus,
86
+ handleBlur = _useInnerFocus.handleBlur;
87
+
88
+ var stateSelectedDate = data.selectedDate;
89
+ var year = data.navigationYear,
90
+ month = data.navigationMonth,
91
+ day = data.navigationDay;
92
+ var selectedDate = controlledValueRef.current !== undefined ? controlledValueRef.current : stateSelectedDate;
93
+
94
+ var handleChange = function handleChange(e) {
95
+ var nextState = {
96
+ year: year,
97
+ month: month,
98
+ day: day
99
+ };
100
+
101
+ switch (type) {
102
+ case 'month_year':
103
+ {
104
+ nextState.year = -1;
105
+ nextState.month = -1;
106
+ nextState.day = -1;
107
+
108
+ if (e.target.value) {
109
+ var _e$target$value$split = e.target.value.split('-'),
110
+ _e$target$value$split2 = _slicedToArray(_e$target$value$split, 2),
111
+ yearStr = _e$target$value$split2[0],
112
+ monthStr = _e$target$value$split2[1];
113
+
114
+ nextState.year = parseInt(yearStr, 10);
115
+ nextState.month = parseInt(monthStr, 10);
116
+ nextState.day = -1;
117
+ }
118
+
119
+ dispatch(_extends({
120
+ type: NAVIGATE
121
+ }, nextState));
122
+ break;
123
+ }
124
+
125
+ case 'day':
126
+ {
127
+ nextState.day = -1;
128
+
129
+ if (e.target.value) {
130
+ nextState.day = parseInt(e.target.value, 10);
131
+ }
132
+
133
+ var nextDate = undefined;
134
+
135
+ if (nextState.day !== -1) {
136
+ if (nextState.year >= 0 && nextState.month >= 0) {
137
+ nextDate = new Date(Date.UTC(nextState.year, nextState.month, nextState.day));
138
+ } else if (selectedDate !== null) {
139
+ nextDate = new Date(Date.UTC(selectedDate.getFullYear(), selectedDate.getMonth(), nextState.day));
140
+ }
141
+ }
142
+
143
+ if (nextDate !== undefined) {
144
+ onChangeRef.current && onChangeRef.current(nextDate);
145
+ dispatch({
146
+ type: SET_DATE,
147
+ selectedDate: nextDate
148
+ });
149
+ } else {
150
+ dispatch(_extends({
151
+ type: NAVIGATE
152
+ }, nextState));
153
+ }
154
+
155
+ break;
156
+ }
157
+ }
158
+ };
159
+
160
+ if (year < 0 && month < 0 && day <= 0 && selectedDate !== null) {
161
+ year = selectedDate.getFullYear();
162
+ month = selectedDate.getMonth();
163
+ day = selectedDate.getDate();
164
+ }
165
+
166
+ var value = '';
167
+ var disabled = false;
168
+
169
+ if (type === 'month_year') {
170
+ if (month >= 0 && year >= 0) {
171
+ value = "".concat(year, "-").concat(month);
172
+ }
173
+ } else if (type === 'day') {
174
+ disabled = month < 0 || year < 0;
175
+
176
+ if (day > 0) {
177
+ value = "".concat(day);
178
+ }
179
+ }
180
+
181
+ return /*#__PURE__*/React.createElement(Comp, _extends({
182
+ ref: ref,
183
+ onFocus: wrapEvent(onFocus, handleFocus),
184
+ onBlur: wrapEvent(onBlur, handleBlur),
185
+ onChange: wrapEvent(onChange, handleChange),
186
+ value: value,
187
+ disabled: disabled,
188
+ "data-has-selected": value !== '' ? '' : undefined
189
+ }, rest), type === 'month_year' ? /*#__PURE__*/React.createElement(MonthYearOptions, {
190
+ minDate: minDate,
191
+ maxDate: maxDate,
192
+ monthNames: monthNames,
193
+ emptyOption: emptyOption
194
+ }) : type === 'day' ? /*#__PURE__*/React.createElement(DayOptions, {
195
+ date: month >= 0 && year >= 0 ? new Date(Date.UTC(year, month, 15)) : undefined,
196
+ dayNames: dayNames,
197
+ minDate: minDate,
198
+ emptyOption: emptyOption
199
+ }) : null);
200
+ });
201
+ //# sourceMappingURL=DatePickerSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/DatePicker/DatePickerSelect.tsx"],"names":["React","forwardRef","memo","wrapEvent","useInnerFocus","SET_DATE","useDatePickerContext","NAVIGATE","differenceInCalendarMonths","addMonths","getDaysInMonth","setDate","MonthYearOptions","minDate","maxDate","monthNames","emptyOption","ret","diff","i","date","year","getFullYear","month","getMonth","push","DayOptions","Date","dayNames","day","newDate","valueOf","getDay","DatePickerSelect","DatePicker","ref","as","Comp","type","onFocus","onBlur","onChange","children","rest","onChangeRef","dispatch","controlledValueRef","data","state","handleFocus","handleBlur","stateSelectedDate","selectedDate","navigationYear","navigationMonth","navigationDay","current","undefined","handleChange","e","nextState","target","value","split","yearStr","monthStr","parseInt","nextDate","UTC","getDate","disabled"],"mappings":"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","sourcesContent":["import React, { forwardRef, memo } from 'react';\nimport { wrapEvent } from '../utils/wrapEvent';\nimport { useInnerFocus, SET_DATE } from './hooks';\nimport { DayNames, MonthNames } from './dateTypes';\nimport { useDatePickerContext } from './contexts';\nimport { NAVIGATE } from '../ComboBox/hooks';\nimport {\n differenceInCalendarMonths,\n addMonths,\n getDaysInMonth,\n setDate,\n} from 'date-fns';\n\nexport interface DatePickerSelectProps\n extends React.SelectHTMLAttributes<HTMLSelectElement> {\n groupType?: 'from' | 'to';\n type: 'month_year' | 'day';\n emptyOption?: string;\n\n as?: React.ElementType<any>;\n}\n\nconst MonthYearOptions = memo(\n ({\n minDate,\n maxDate,\n monthNames,\n emptyOption,\n }: {\n minDate: Date;\n maxDate: Date;\n monthNames: MonthNames;\n emptyOption: string;\n }) => {\n const ret = [\n <option key={'empty'} value=\"\" disabled>\n {emptyOption}\n </option>,\n ];\n\n const diff = differenceInCalendarMonths(maxDate, minDate);\n for (let i = 0; i <= diff; i++) {\n const date = addMonths(minDate, i);\n const year = date.getFullYear();\n const month = date.getMonth();\n\n ret.push(\n <option key={`${year}_${month}`} value={`${year}-${month}`}>\n {monthNames[month]} {year}\n </option>\n );\n }\n\n return <>{ret}</>;\n }\n);\n\nconst DayOptions = memo(\n ({\n date = new Date(0),\n dayNames,\n minDate,\n emptyOption,\n }: {\n date: Date | undefined;\n dayNames: DayNames;\n minDate: Date;\n emptyOption: string;\n }) => {\n if (!date) {\n return null;\n }\n\n const ret = [\n <option key={'empty'} value=\"\" disabled>\n {emptyOption}\n </option>,\n ];\n\n for (let day = 1; day <= getDaysInMonth(date); day++) {\n const newDate = setDate(date, day);\n ret.push(\n <option\n key={`day_${day}`}\n value={`${day}`}\n disabled={newDate.valueOf() < minDate.valueOf()}\n >\n {(newDate.getDay(), dayNames[newDate.getDay()])} {day}\n </option>\n );\n }\n\n return <>{ret}</>;\n }\n);\n\nexport const DatePickerSelect = forwardRef(function DatePicker(\n {\n as: Comp = 'select',\n type,\n onFocus,\n onBlur,\n onChange,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n children,\n emptyOption = '',\n ...rest\n }: DatePickerSelectProps,\n ref\n) {\n const {\n minDate,\n maxDate,\n monthNames,\n onChangeRef,\n dayNames,\n dispatch,\n controlledValueRef,\n state: data,\n } = useDatePickerContext();\n const { handleFocus, handleBlur } = useInnerFocus();\n\n const { selectedDate: stateSelectedDate } = data;\n let {\n navigationYear: year,\n navigationMonth: month,\n navigationDay: day,\n } = data;\n\n const selectedDate =\n controlledValueRef.current !== undefined\n ? controlledValueRef.current\n : stateSelectedDate;\n\n const handleChange = (e: React.ChangeEvent<HTMLSelectElement>) => {\n const nextState = {\n year,\n month,\n day,\n };\n\n switch (type) {\n case 'month_year': {\n nextState.year = -1;\n nextState.month = -1;\n nextState.day = -1;\n\n if (e.target.value) {\n const [yearStr, monthStr] = e.target.value.split('-');\n nextState.year = parseInt(yearStr, 10);\n nextState.month = parseInt(monthStr, 10);\n nextState.day = -1;\n }\n\n dispatch({ type: NAVIGATE, ...nextState });\n break;\n }\n case 'day': {\n nextState.day = -1;\n if (e.target.value) {\n nextState.day = parseInt(e.target.value, 10);\n }\n\n let nextDate: Date | undefined = undefined;\n if (nextState.day !== -1) {\n if (nextState.year >= 0 && nextState.month >= 0) {\n nextDate = new Date(\n Date.UTC(nextState.year, nextState.month, nextState.day)\n );\n } else if (selectedDate !== null) {\n nextDate = new Date(\n Date.UTC(\n selectedDate.getFullYear(),\n selectedDate.getMonth(),\n nextState.day\n )\n );\n }\n }\n\n if (nextDate !== undefined) {\n onChangeRef.current && onChangeRef.current(nextDate);\n dispatch({ type: SET_DATE, selectedDate: nextDate });\n } else {\n dispatch({ type: NAVIGATE, ...nextState });\n }\n break;\n }\n }\n };\n\n if (year < 0 && month < 0 && day <= 0 && selectedDate !== null) {\n year = selectedDate.getFullYear();\n month = selectedDate.getMonth();\n day = selectedDate.getDate();\n }\n\n let value = '';\n let disabled = false;\n if (type === 'month_year') {\n if (month >= 0 && year >= 0) {\n value = `${year}-${month}`;\n }\n } else if (type === 'day') {\n disabled = month < 0 || year < 0;\n if (day > 0) {\n value = `${day}`;\n }\n }\n\n return (\n <Comp\n ref={ref}\n onFocus={wrapEvent(onFocus, handleFocus)}\n onBlur={wrapEvent(onBlur, handleBlur)}\n onChange={wrapEvent(onChange, handleChange)}\n value={value}\n disabled={disabled}\n data-has-selected={value !== '' ? '' : undefined}\n {...rest}\n >\n {type === 'month_year' ? (\n <MonthYearOptions\n minDate={minDate}\n maxDate={maxDate}\n monthNames={monthNames}\n emptyOption={emptyOption}\n />\n ) : type === 'day' ? (\n <DayOptions\n date={\n month >= 0 && year >= 0\n ? new Date(Date.UTC(year, month, 15))\n : undefined\n }\n dayNames={dayNames}\n minDate={minDate}\n emptyOption={emptyOption}\n />\n ) : null}\n </Comp>\n );\n});\n"],"file":"DatePickerSelect.js"}