@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.
- package/build/cjs/index.js +19 -3
- package/build/cjs/index.js.map +1 -1
- package/build/esm/Carousel/Carousel.d.ts +9 -0
- package/build/esm/Carousel/Carousel.js +38 -0
- package/build/esm/Carousel/Carousel.js.map +1 -0
- package/build/esm/Carousel/Fader.d.ts +14 -0
- package/build/esm/Carousel/Fader.js +76 -0
- package/build/esm/Carousel/Fader.js.map +1 -0
- package/build/esm/Carousel/FaderItem.d.ts +5 -0
- package/build/esm/Carousel/FaderItem.js +16 -0
- package/build/esm/Carousel/FaderItem.js.map +1 -0
- package/build/esm/Carousel/Preloader.d.ts +7 -0
- package/build/esm/Carousel/Preloader.js +70 -0
- package/build/esm/Carousel/Preloader.js.map +1 -0
- package/build/esm/Carousel/Slider.d.ts +14 -0
- package/build/esm/Carousel/Slider.js +212 -0
- package/build/esm/Carousel/Slider.js.map +1 -0
- package/build/esm/Carousel/SliderItem.d.ts +12 -0
- package/build/esm/Carousel/SliderItem.js +41 -0
- package/build/esm/Carousel/SliderItem.js.map +1 -0
- package/build/esm/Carousel/context.d.ts +10 -0
- package/build/esm/Carousel/context.js +8 -0
- package/build/esm/Carousel/context.js.map +1 -0
- package/build/esm/Carousel/getSliderParams.d.ts +9 -0
- package/build/esm/Carousel/getSliderParams.js +85 -0
- package/build/esm/Carousel/getSliderParams.js.map +1 -0
- package/build/esm/Carousel/index.d.ts +7 -0
- package/build/esm/Carousel/index.js +8 -0
- package/build/esm/Carousel/index.js.map +1 -0
- package/build/esm/Carousel/useCarouselGestures.d.ts +30 -0
- package/build/esm/Carousel/useCarouselGestures.js +33 -0
- package/build/esm/Carousel/useCarouselGestures.js.map +1 -0
- package/build/esm/DatePicker/DatePicker.d.ts +24 -0
- package/build/esm/DatePicker/DatePicker.js +101 -0
- package/build/esm/DatePicker/DatePicker.js.map +1 -0
- package/build/esm/DatePicker/DatePickerSelect.d.ts +8 -0
- package/build/esm/DatePicker/DatePickerSelect.js +201 -0
- package/build/esm/DatePicker/DatePickerSelect.js.map +1 -0
- package/build/esm/DatePicker/RangeDatePicker.d.ts +28 -0
- package/build/esm/DatePicker/RangeDatePicker.js +94 -0
- package/build/esm/DatePicker/RangeDatePicker.js.map +1 -0
- package/build/esm/DatePicker/adjustDates.d.ts +4 -0
- package/build/esm/DatePicker/adjustDates.js +18 -0
- package/build/esm/DatePicker/adjustDates.js.map +1 -0
- package/build/esm/DatePicker/contexts.d.ts +31 -0
- package/build/esm/DatePicker/contexts.js +15 -0
- package/build/esm/DatePicker/contexts.js.map +1 -0
- package/build/esm/DatePicker/dateTypes.d.ts +2 -0
- package/build/esm/DatePicker/dateTypes.js +2 -0
- package/build/esm/DatePicker/dateTypes.js.map +1 -0
- package/build/esm/DatePicker/hooks.d.ts +36 -0
- package/build/esm/DatePicker/hooks.js +98 -0
- package/build/esm/DatePicker/hooks.js.map +1 -0
- package/build/esm/DatePicker/index.d.ts +5 -0
- package/build/esm/DatePicker/index.js +6 -0
- package/build/esm/DatePicker/index.js.map +1 -0
- package/build/esm/Portal/Portal.d.ts +3 -2
- package/build/esm/Portal/Portal.js +6 -3
- package/build/esm/Portal/Portal.js.map +1 -1
- package/build/esm/Portal/PortalSelectorProvider.d.ts +8 -0
- package/build/esm/Portal/PortalSelectorProvider.js +13 -0
- package/build/esm/Portal/PortalSelectorProvider.js.map +1 -0
- package/build/esm/Portal/index.d.ts +1 -0
- package/build/esm/Portal/index.js +1 -0
- package/build/esm/Portal/index.js.map +1 -1
- package/build/esm/hooks/useControlledState.js +1 -1
- package/build/esm/hooks/useControlledState.js.map +1 -1
- package/build/esm/hooks/useId.d.ts +1 -0
- package/build/esm/hooks/useId.js +25 -0
- package/build/esm/hooks/useId.js.map +1 -0
- package/build/esm/utils/assignRef.d.ts +3 -0
- package/build/esm/utils/assignRef.js +25 -0
- package/build/esm/utils/assignRef.js.map +1 -0
- package/build/esm/utils/getCircularIndex.d.ts +1 -0
- package/build/esm/utils/getCircularIndex.js +8 -0
- package/build/esm/utils/getCircularIndex.js.map +1 -0
- package/build/esm/utils/rubberBandClamp.d.ts +2 -0
- package/build/esm/utils/rubberBandClamp.js +20 -0
- package/build/esm/utils/rubberBandClamp.js.map +1 -0
- package/build/esm/utils/wrapEvent.d.ts +3 -0
- package/build/esm/utils/wrapEvent.js +16 -0
- package/build/esm/utils/wrapEvent.js.map +1 -0
- package/build/tsconfig-build.tsbuildinfo +1 -1
- package/build/tsconfig.tsbuildinfo +7270 -0
- package/package.json +2 -2
- package/src/Portal/Portal.tsx +15 -4
- package/src/Portal/PortalSelectorProvider.tsx +24 -0
- package/src/Portal/index.ts +5 -0
- package/src/hooks/useControlledState.ts +3 -3
- package/build/esm/TimerField/clamp.d.ts +0 -1
- package/build/esm/TimerField/clamp.js +0 -2
- package/build/esm/TimerField/clamp.js.map +0 -1
- package/build/esm/TimerField/index.d.ts +0 -1
- package/build/esm/TimerField/index.js +0 -2
- package/build/esm/TimerField/index.js.map +0 -1
- package/build/esm/TimerField/useControlledState.d.ts +0 -1
- package/build/esm/TimerField/useControlledState.js +0 -2
- package/build/esm/TimerField/useControlledState.js.map +0 -1
- package/build/esm/TimerField/useTimerField.d.ts +0 -44
- package/build/esm/TimerField/useTimerField.js +0 -430
- package/build/esm/TimerField/useTimerField.js.map +0 -1
- package/build/esm/TimerField/wrapEvent.d.ts +0 -1
- package/build/esm/TimerField/wrapEvent.js +0 -2
- 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 @@
|
|
|
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"}
|