@koine/react 2.0.0-beta.74 → 2.0.0-beta.76
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/FaviconTags.js +1 -5
- package/Meta.js +1 -5
- package/NoJs.js +1 -7
- package/Polymorphic.js +1 -1
- package/calendar/CalendarDaygridCell.js +1 -42
- package/calendar/CalendarDaygridNav.js +1 -22
- package/calendar/CalendarDaygridTable.js +1 -50
- package/calendar/CalendarLegend.js +1 -4
- package/calendar/calendar-api-google.js +1 -90
- package/calendar/types.js +1 -1
- package/calendar/useCalendar.js +1 -175
- package/calendar/useDateLocale.js +1 -16
- package/calendar/utils.js +1 -172
- package/calendar.js +1 -7
- package/{components → cjs}/FaviconTags.d.ts +1 -0
- package/cjs/FaviconTags.js +1 -0
- package/{components → cjs}/Meta.d.ts +1 -0
- package/cjs/Meta.js +1 -0
- package/{components → cjs}/NoJs.d.ts +1 -0
- package/cjs/NoJs.js +1 -0
- package/cjs/Polymorphic.js +1 -0
- package/cjs/calendar/CalendarDaygridCell.d.ts +35 -0
- package/cjs/calendar/CalendarDaygridCell.js +1 -0
- package/cjs/calendar/CalendarDaygridNav.d.ts +27 -0
- package/cjs/calendar/CalendarDaygridNav.js +1 -0
- package/cjs/calendar/CalendarDaygridTable.d.ts +25 -0
- package/cjs/calendar/CalendarDaygridTable.js +1 -0
- package/cjs/calendar/CalendarLegend.d.ts +18 -0
- package/cjs/calendar/CalendarLegend.js +1 -0
- package/cjs/calendar/calendar-api-google.d.ts +10 -0
- package/cjs/calendar/calendar-api-google.js +1 -0
- package/cjs/calendar/types.d.ts +62 -0
- package/cjs/calendar/types.js +1 -0
- package/cjs/calendar/useCalendar.d.ts +35 -0
- package/cjs/calendar/useCalendar.js +1 -0
- package/cjs/calendar/useDateLocale.d.ts +2 -0
- package/cjs/calendar/useDateLocale.js +1 -0
- package/cjs/calendar/utils.d.ts +11 -0
- package/cjs/calendar/utils.js +1 -0
- package/cjs/calendar.d.ts +7 -0
- package/cjs/calendar.js +1 -0
- package/{utils → cjs}/classed.d.ts +2 -2
- package/cjs/classed.js +1 -0
- package/{utils → cjs}/createUseMediaQueryWidth.d.ts +1 -1
- package/cjs/createUseMediaQueryWidth.js +1 -0
- package/{utils → cjs}/extendComponent.d.ts +1 -1
- package/cjs/extendComponent.js +1 -0
- package/cjs/forms/antispam.d.ts +27 -0
- package/cjs/forms/antispam.js +1 -0
- package/cjs/forms.d.ts +1 -0
- package/cjs/forms.js +1 -0
- package/{hooks → cjs}/index.d.ts +9 -0
- package/cjs/index.js +1 -0
- package/{utils → cjs}/mergeRefs.d.ts +1 -0
- package/cjs/mergeRefs.js +1 -0
- package/cjs/package.json +31 -0
- package/cjs/types.d.ts +2 -0
- package/cjs/types.js +1 -0
- package/{hooks → cjs}/useAsyncFn.d.ts +1 -1
- package/cjs/useAsyncFn.js +1 -0
- package/{hooks → cjs}/useFirstMountState.d.ts +1 -0
- package/cjs/useFirstMountState.js +1 -0
- package/{hooks → cjs}/useFixedOffset.d.ts +1 -0
- package/cjs/useFixedOffset.js +1 -0
- package/{hooks → cjs}/useFocus.d.ts +1 -0
- package/cjs/useFocus.js +1 -0
- package/{hooks → cjs}/useInterval.d.ts +1 -0
- package/cjs/useInterval.js +1 -0
- package/cjs/useIsomorphicLayoutEffect.d.ts +3 -0
- package/cjs/useIsomorphicLayoutEffect.js +1 -0
- package/{hooks → cjs}/useKeyUp.d.ts +1 -0
- package/cjs/useKeyUp.js +1 -0
- package/{hooks → cjs}/useMeasure.d.ts +1 -1
- package/cjs/useMeasure.js +1 -0
- package/{hooks → cjs}/useMountedState.d.ts +1 -0
- package/cjs/useMountedState.js +1 -0
- package/{hooks → cjs}/useNavigateAway.d.ts +1 -0
- package/cjs/useNavigateAway.js +1 -0
- package/{hooks → cjs}/usePrevious.d.ts +1 -0
- package/cjs/usePrevious.js +1 -0
- package/{hooks → cjs}/usePreviousRef.d.ts +1 -0
- package/cjs/usePreviousRef.js +1 -0
- package/{hooks → cjs}/useReveal.d.ts +1 -0
- package/cjs/useReveal.js +1 -0
- package/{hooks → cjs}/useScrollPosition.d.ts +1 -1
- package/cjs/useScrollPosition.js +1 -0
- package/{hooks → cjs}/useScrollThreshold.d.ts +1 -0
- package/cjs/useScrollThreshold.js +1 -0
- package/{hooks → cjs}/useScrollTo.d.ts +1 -0
- package/cjs/useScrollTo.js +1 -0
- package/{hooks → cjs}/useSmoothScroll.d.ts +1 -0
- package/cjs/useSmoothScroll.js +1 -0
- package/{hooks → cjs}/useSpinDelay.d.ts +1 -0
- package/cjs/useSpinDelay.js +1 -0
- package/{hooks → cjs}/useTraceUpdate.d.ts +1 -0
- package/cjs/useTraceUpdate.js +1 -0
- package/{hooks → cjs}/useUpdateEffect.d.ts +1 -0
- package/cjs/useUpdateEffect.js +1 -0
- package/{hooks → cjs}/useWindowSize.d.ts +1 -0
- package/cjs/useWindowSize.js +1 -0
- package/classed.d.ts +1 -1
- package/classed.js +1 -41
- package/createUseMediaQueryWidth.js +1 -38
- package/extendComponent.js +1 -9
- package/forms/antispam.js +1 -29
- package/forms.js +1 -1
- package/index.js +1 -26
- package/mergeRefs.js +1 -13
- package/package.json +172 -15
- package/types.js +1 -1
- package/useAsyncFn.js +1 -26
- package/useFirstMountState.js +1 -10
- package/useFixedOffset.js +1 -42
- package/useFocus.js +1 -9
- package/useInterval.js +1 -20
- package/useIsomorphicLayoutEffect.d.ts +2 -2
- package/useIsomorphicLayoutEffect.js +1 -4
- package/useKeyUp.js +1 -16
- package/useMeasure.js +1 -119
- package/useMountedState.js +1 -13
- package/useNavigateAway.js +1 -25
- package/usePrevious.js +1 -9
- package/usePreviousRef.js +1 -9
- package/useReveal.js +1 -42
- package/useScrollPosition.js +1 -58
- package/useScrollThreshold.js +1 -26
- package/useScrollTo.js +1 -18
- package/useSmoothScroll.js +1 -32
- package/useSpinDelay.js +1 -36
- package/useTraceUpdate.js +1 -17
- package/useUpdateEffect.js +1 -11
- package/useWindowSize.js +1 -20
- package/README.md +0 -1
- package/calendar.cjs.d.ts +0 -1
- package/calendar.cjs.default.js +0 -1
- package/calendar.cjs.js +0 -62
- package/calendar.cjs.mjs +0 -2
- package/calendar.esm.js +0 -35
- package/components/FaviconTags.js +0 -4
- package/components/Meta.js +0 -4
- package/components/NoJs.js +0 -6
- package/forms.cjs.d.ts +0 -1
- package/forms.cjs.default.js +0 -1
- package/forms.cjs.js +0 -11
- package/forms.cjs.mjs +0 -2
- package/forms.esm.js +0 -6
- package/hooks/index.js +0 -19
- package/hooks/useAsyncFn.js +0 -25
- package/hooks/useFirstMountState.js +0 -9
- package/hooks/useFixedOffset.js +0 -41
- package/hooks/useFocus.js +0 -8
- package/hooks/useInterval.js +0 -19
- package/hooks/useIsomorphicLayoutEffect.d.ts +0 -2
- package/hooks/useIsomorphicLayoutEffect.js +0 -3
- package/hooks/useKeyUp.js +0 -15
- package/hooks/useMeasure.js +0 -118
- package/hooks/useMountedState.js +0 -12
- package/hooks/useNavigateAway.js +0 -24
- package/hooks/usePrevious.js +0 -8
- package/hooks/usePreviousRef.js +0 -8
- package/hooks/useReveal.js +0 -41
- package/hooks/useScrollPosition.js +0 -57
- package/hooks/useScrollThreshold.js +0 -25
- package/hooks/useScrollTo.js +0 -17
- package/hooks/useSmoothScroll.js +0 -31
- package/hooks/useSpinDelay.js +0 -35
- package/hooks/useTraceUpdate.js +0 -16
- package/hooks/useUpdateEffect.js +0 -10
- package/hooks/useWindowSize.js +0 -19
- package/index.cjs.d.ts +0 -1
- package/index.cjs.default.js +0 -1
- package/index.cjs.js +0 -87
- package/index.cjs.mjs +0 -2
- package/index.esm.js +0 -58
- package/utils/Polymorphic.js +0 -1
- package/utils/classed.js +0 -40
- package/utils/createUseMediaQueryWidth.js +0 -37
- package/utils/extendComponent.js +0 -8
- package/utils/index.d.ts +0 -5
- package/utils/index.js +0 -4
- package/utils/mergeRefs.js +0 -12
- /package/{utils → cjs}/Polymorphic.d.ts +0 -0
package/useMeasure.js
CHANGED
|
@@ -1,119 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { debounce, noop } from "@koine/utils";
|
|
3
|
-
import { listenResizeDebounced, listenScrollDebounced, off, on, } from "@koine/dom";
|
|
4
|
-
let observer;
|
|
5
|
-
let findScrollContainers = (element) => {
|
|
6
|
-
const result = [];
|
|
7
|
-
if (!element || element === document.body)
|
|
8
|
-
return result;
|
|
9
|
-
const { overflow, overflowX, overflowY } = window.getComputedStyle(element);
|
|
10
|
-
if ([overflow, overflowX, overflowY].some((prop) => prop === "auto" || prop === "scroll"))
|
|
11
|
-
result.push(element);
|
|
12
|
-
return [...result, ...findScrollContainers(element.parentElement)];
|
|
13
|
-
};
|
|
14
|
-
const keys = [
|
|
15
|
-
"x",
|
|
16
|
-
"y",
|
|
17
|
-
"top",
|
|
18
|
-
"bottom",
|
|
19
|
-
"left",
|
|
20
|
-
"right",
|
|
21
|
-
"width",
|
|
22
|
-
"height",
|
|
23
|
-
];
|
|
24
|
-
const areBoundsEqual = (a, b) => keys.every((key) => a[key] === b[key]);
|
|
25
|
-
export let useMeasure = (options) => {
|
|
26
|
-
const { scroll = false } = options || {};
|
|
27
|
-
const [bounds, setBounds] = useState({
|
|
28
|
-
left: 0,
|
|
29
|
-
top: 0,
|
|
30
|
-
width: 0,
|
|
31
|
-
height: 0,
|
|
32
|
-
bottom: 0,
|
|
33
|
-
right: 0,
|
|
34
|
-
x: 0,
|
|
35
|
-
y: 0,
|
|
36
|
-
});
|
|
37
|
-
const state = useRef([
|
|
38
|
-
null,
|
|
39
|
-
null,
|
|
40
|
-
null,
|
|
41
|
-
bounds,
|
|
42
|
-
]);
|
|
43
|
-
const mounted = useRef(false);
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
mounted.current = true;
|
|
46
|
-
return () => void (mounted.current = false);
|
|
47
|
-
}, []);
|
|
48
|
-
const [forceRefresh, , scrollChange] = useMemo(() => {
|
|
49
|
-
const callback = (..._args) => {
|
|
50
|
-
const [element, , , lastBounds] = state.current;
|
|
51
|
-
if (!element)
|
|
52
|
-
return;
|
|
53
|
-
const size = element.getBoundingClientRect();
|
|
54
|
-
Object.freeze(size);
|
|
55
|
-
if (mounted.current && !areBoundsEqual(lastBounds, size)) {
|
|
56
|
-
state.current[3] = size;
|
|
57
|
-
setBounds(size);
|
|
58
|
-
}
|
|
59
|
-
};
|
|
60
|
-
const debouncedCallback = debounce(callback);
|
|
61
|
-
return [callback, debouncedCallback, debouncedCallback];
|
|
62
|
-
}, [setBounds]);
|
|
63
|
-
function removeListeners() {
|
|
64
|
-
const [, scrollContainers, resizeObserver] = state.current;
|
|
65
|
-
if (scrollContainers) {
|
|
66
|
-
scrollContainers.forEach((element) => off(element, "scroll", scrollChange));
|
|
67
|
-
state.current[1] = null;
|
|
68
|
-
}
|
|
69
|
-
if (resizeObserver) {
|
|
70
|
-
resizeObserver.disconnect();
|
|
71
|
-
state.current[2] = null;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
function addListeners() {
|
|
75
|
-
const [element, scrollContainers] = state.current;
|
|
76
|
-
if (!element)
|
|
77
|
-
return;
|
|
78
|
-
if (!observer && ResizeObserver) {
|
|
79
|
-
observer = new ResizeObserver(scrollChange);
|
|
80
|
-
state.current[2] = observer;
|
|
81
|
-
observer.observe(element);
|
|
82
|
-
if (scroll && scrollContainers) {
|
|
83
|
-
scrollContainers.forEach((scrollContainer) => on(scrollContainer, "scroll", scrollChange, {
|
|
84
|
-
capture: true,
|
|
85
|
-
passive: true,
|
|
86
|
-
}));
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
const ref = (node) => {
|
|
91
|
-
if (!node || node === state.current[0])
|
|
92
|
-
return;
|
|
93
|
-
removeListeners();
|
|
94
|
-
state.current[0] = node;
|
|
95
|
-
state.current[1] = findScrollContainers(node);
|
|
96
|
-
addListeners();
|
|
97
|
-
};
|
|
98
|
-
useEffect(() => {
|
|
99
|
-
if (scroll) {
|
|
100
|
-
const listener = listenScrollDebounced(0, forceRefresh, 100);
|
|
101
|
-
return listener;
|
|
102
|
-
}
|
|
103
|
-
return noop;
|
|
104
|
-
}, [scroll, forceRefresh]);
|
|
105
|
-
useEffect(() => {
|
|
106
|
-
const listener = listenResizeDebounced(0, forceRefresh, 100);
|
|
107
|
-
return listener;
|
|
108
|
-
}, [forceRefresh]);
|
|
109
|
-
useEffect(() => {
|
|
110
|
-
removeListeners();
|
|
111
|
-
addListeners();
|
|
112
|
-
}, [scroll]);
|
|
113
|
-
useEffect(() => {
|
|
114
|
-
forceRefresh();
|
|
115
|
-
return removeListeners;
|
|
116
|
-
}, []);
|
|
117
|
-
return [ref, bounds, forceRefresh];
|
|
118
|
-
};
|
|
119
|
-
export default useMeasure;
|
|
1
|
+
let e;import{useEffect as t,useMemo as r,useRef as n,useState as u}from"react";import{debounce as l,noop as o}from"@koine/utils";import{listenResizeDebounced as c,listenScrollDebounced as i,off as s,on as f}from"@koine/dom";let m=e=>{let t=[];if(!e||e===document.body)return t;let{overflow:r,overflowX:n,overflowY:u}=window.getComputedStyle(e);return[r,n,u].some(e=>"auto"===e||"scroll"===e)&&t.push(e),[...t,...m(e.parentElement)]},p=["x","y","top","bottom","left","right","width","height"],d=(e,t)=>p.every(r=>e[r]===t[r]);export let useMeasure=p=>{let{scroll:h=!1}=p||{},[a,b]=u({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),g=n([null,null,null,a]),v=n(!1);t(()=>(v.current=!0,()=>void(v.current=!1)),[]);let[w,,y]=r(()=>{let e=(...e)=>{let[t,,,r]=g.current;if(!t)return;let n=t.getBoundingClientRect();Object.freeze(n),v.current&&!d(r,n)&&(g.current[3]=n,b(n))},t=l(e);return[e,t,t]},[b]);function x(){let[,e,t]=g.current;e&&(e.forEach(e=>s(e,"scroll",y)),g.current[1]=null),t&&(t.disconnect(),g.current[2]=null)}function z(){let[t,r]=g.current;t&&!e&&ResizeObserver&&(e=new ResizeObserver(y),g.current[2]=e,e.observe(t),h&&r&&r.forEach(e=>f(e,"scroll",y,{capture:!0,passive:!0})))}return t(()=>h?i(0,w,100):o,[h,w]),t(()=>c(0,w,100),[w]),t(()=>{x(),z()},[h]),t(()=>(w(),x),[]),[e=>{e&&e!==g.current[0]&&(x(),g.current[0]=e,g.current[1]=m(e),z())},a,w]};export default useMeasure;
|
package/useMountedState.js
CHANGED
|
@@ -1,13 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let useMountedState = () => {
|
|
3
|
-
const mountedRef = useRef(false);
|
|
4
|
-
const get = useCallback(() => mountedRef.current, []);
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
mountedRef.current = true;
|
|
7
|
-
return () => {
|
|
8
|
-
mountedRef.current = false;
|
|
9
|
-
};
|
|
10
|
-
}, []);
|
|
11
|
-
return get;
|
|
12
|
-
};
|
|
13
|
-
export default useMountedState;
|
|
1
|
+
import{useCallback as t,useEffect as e,useRef as r}from"react";export let useMountedState=()=>{let u=r(!1),n=t(()=>u.current,[]);return e(()=>(u.current=!0,()=>{u.current=!1}),[]),n};export default useMountedState;
|
package/useNavigateAway.js
CHANGED
|
@@ -1,25 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { on } from "@koine/dom";
|
|
3
|
-
export let useNavigateAway = (handler) => {
|
|
4
|
-
const beforeUnloadHandlerRef = useRef();
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
beforeUnloadHandlerRef.current = (event) => {
|
|
7
|
-
const customMessageOrCondition = handler(event);
|
|
8
|
-
if (customMessageOrCondition) {
|
|
9
|
-
event.preventDefault();
|
|
10
|
-
}
|
|
11
|
-
if (typeof customMessageOrCondition === "string") {
|
|
12
|
-
return (event.returnValue = customMessageOrCondition);
|
|
13
|
-
}
|
|
14
|
-
if (event.defaultPrevented) {
|
|
15
|
-
return (event.returnValue = "");
|
|
16
|
-
}
|
|
17
|
-
return;
|
|
18
|
-
};
|
|
19
|
-
}, [handler]);
|
|
20
|
-
useEffect(() => {
|
|
21
|
-
const listenerBeforeunload = on(window, "beforeunload", (event) => beforeUnloadHandlerRef.current?.(event));
|
|
22
|
-
return listenerBeforeunload;
|
|
23
|
-
}, []);
|
|
24
|
-
};
|
|
25
|
-
export default useNavigateAway;
|
|
1
|
+
import{useEffect as e,useRef as t}from"react";import{on as r}from"@koine/dom";export let useNavigateAway=a=>{let o=t();e(()=>{o.current=e=>{let t=a(e);return(t&&e.preventDefault(),"string"==typeof t)?e.returnValue=t:e.defaultPrevented?e.returnValue="":void 0}},[a]),e(()=>r(window,"beforeunload",e=>o.current?.(e)),[])};export default useNavigateAway;
|
package/usePrevious.js
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let usePrevious = (state, defaulValue) => {
|
|
3
|
-
const [tuple, setTuple] = useState([state, defaulValue]);
|
|
4
|
-
if (tuple[1] !== state) {
|
|
5
|
-
setTuple([tuple[1], state]);
|
|
6
|
-
}
|
|
7
|
-
return tuple[0];
|
|
8
|
-
};
|
|
9
|
-
export default usePrevious;
|
|
1
|
+
import{useState as e}from"react";export let usePrevious=(r,t)=>{let[o,u]=e([r,t]);return o[1]!==r&&u([o[1],r]),o[0]};export default usePrevious;
|
package/usePreviousRef.js
CHANGED
|
@@ -1,9 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let usePreviousRef = (value) => {
|
|
3
|
-
const ref = useRef();
|
|
4
|
-
useEffect(() => {
|
|
5
|
-
ref.current = value;
|
|
6
|
-
});
|
|
7
|
-
return ref.current;
|
|
8
|
-
};
|
|
9
|
-
export default usePreviousRef;
|
|
1
|
+
import{useEffect as e,useRef as r}from"react";export let usePreviousRef=t=>{let u=r();return e(()=>{u.current=t}),u.current};export default usePreviousRef;
|
package/useReveal.js
CHANGED
|
@@ -1,42 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let useReveal = ({ direction = "left", offsetStartY = -2, offsetEndY = 0, offsetStartX = "all", }) => {
|
|
3
|
-
const ref = useRef(null);
|
|
4
|
-
const [startY, setStartY] = useState(0);
|
|
5
|
-
const [endY, setEndY] = useState(0);
|
|
6
|
-
const [startX, setStartX] = useState(0);
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
if (!ref.current) {
|
|
9
|
-
return;
|
|
10
|
-
}
|
|
11
|
-
const rect = ref.current.getBoundingClientRect();
|
|
12
|
-
const scrollTop = window.scrollY || document.documentElement.scrollTop;
|
|
13
|
-
const elementHeight = rect.height;
|
|
14
|
-
const elementTop = rect.top;
|
|
15
|
-
const distanceTop = elementTop + scrollTop;
|
|
16
|
-
const offsetTop = offsetStartY ? elementHeight * offsetStartY : 0;
|
|
17
|
-
const offsetBottom = offsetEndY ? elementHeight * offsetEndY : offsetTop;
|
|
18
|
-
const startY = (distanceTop + offsetTop) / document.body.clientHeight;
|
|
19
|
-
const endY = (distanceTop + elementHeight + offsetBottom) / document.body.clientHeight;
|
|
20
|
-
let startX;
|
|
21
|
-
if (offsetStartX === "all") {
|
|
22
|
-
startX = direction === "left" ? -rect.right : rect.left;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
startX = rect.width * offsetStartX;
|
|
26
|
-
startX = direction === "left" ? -startX : startX;
|
|
27
|
-
}
|
|
28
|
-
setStartY(startY);
|
|
29
|
-
setEndY(endY);
|
|
30
|
-
setStartX(startX);
|
|
31
|
-
}, [
|
|
32
|
-
setStartY,
|
|
33
|
-
setEndY,
|
|
34
|
-
setStartX,
|
|
35
|
-
offsetStartY,
|
|
36
|
-
offsetEndY,
|
|
37
|
-
offsetStartX,
|
|
38
|
-
direction,
|
|
39
|
-
]);
|
|
40
|
-
return { ref, startY, endY, startX };
|
|
41
|
-
};
|
|
42
|
-
export default useReveal;
|
|
1
|
+
import{useEffect as e,useRef as t,useState as l}from"react";export let useReveal=({direction:n="left",offsetStartY:o=-2,offsetEndY:r=0,offsetStartX:u="all"})=>{let c=t(null),[i,d]=l(0),[f,m]=l(0),[a,g]=l(0);return e(()=>{let e;if(!c.current)return;let t=c.current.getBoundingClientRect(),l=window.scrollY||document.documentElement.scrollTop,i=t.height,f=t.top+l,a=o?i*o:0,h=r?i*r:a,p=(f+a)/document.body.clientHeight,s=(f+i+h)/document.body.clientHeight;"all"===u?e="left"===n?-t.right:t.left:(e=t.width*u,e="left"===n?-e:e),d(p),m(s),g(e)},[d,m,g,o,r,u,n]),{ref:c,startY:i,endY:f,startX:a}};export default useReveal;
|
package/useScrollPosition.js
CHANGED
|
@@ -1,58 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isBrowser } from "@koine/utils";
|
|
3
|
-
import { listenScroll } from "@koine/dom";
|
|
4
|
-
import { useIsomorphicLayoutEffect } from "./useIsomorphicLayoutEffect";
|
|
5
|
-
const zeroPosition = { x: 0, y: 0 };
|
|
6
|
-
const getClientRect = (element) => element?.getBoundingClientRect();
|
|
7
|
-
const getScrollPosition = (element, boundingElement) => {
|
|
8
|
-
if (!isBrowser) {
|
|
9
|
-
return zeroPosition;
|
|
10
|
-
}
|
|
11
|
-
if (!boundingElement) {
|
|
12
|
-
return { x: window.scrollX, y: window.scrollY };
|
|
13
|
-
}
|
|
14
|
-
const targetPosition = getClientRect(element?.current || document.body);
|
|
15
|
-
const containerPosition = getClientRect(boundingElement.current);
|
|
16
|
-
if (!targetPosition) {
|
|
17
|
-
return zeroPosition;
|
|
18
|
-
}
|
|
19
|
-
return containerPosition
|
|
20
|
-
? {
|
|
21
|
-
x: (containerPosition.x || 0) - (targetPosition.x || 0),
|
|
22
|
-
y: (containerPosition.y || 0) - (targetPosition.y || 0),
|
|
23
|
-
}
|
|
24
|
-
: { x: targetPosition.left, y: targetPosition.top };
|
|
25
|
-
};
|
|
26
|
-
export let useScrollPosition = (effect, deps = [], element, boundingElement, wait) => {
|
|
27
|
-
const position = useRef(getScrollPosition(null, boundingElement));
|
|
28
|
-
let throttleTimeout = null;
|
|
29
|
-
const callBack = () => {
|
|
30
|
-
const current = getScrollPosition(element, boundingElement);
|
|
31
|
-
effect(current, position.current);
|
|
32
|
-
position.current = current;
|
|
33
|
-
throttleTimeout = null;
|
|
34
|
-
};
|
|
35
|
-
useIsomorphicLayoutEffect(() => {
|
|
36
|
-
if (!isBrowser) {
|
|
37
|
-
return undefined;
|
|
38
|
-
}
|
|
39
|
-
const handleScroll = () => {
|
|
40
|
-
if (wait) {
|
|
41
|
-
if (throttleTimeout === null) {
|
|
42
|
-
throttleTimeout = window.setTimeout(callBack, wait);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
else {
|
|
46
|
-
callBack();
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const listener = listenScroll(handleScroll, boundingElement?.current);
|
|
50
|
-
return () => {
|
|
51
|
-
listener();
|
|
52
|
-
if (throttleTimeout) {
|
|
53
|
-
clearTimeout(throttleTimeout);
|
|
54
|
-
}
|
|
55
|
-
};
|
|
56
|
-
}, deps);
|
|
57
|
-
};
|
|
58
|
-
export default useScrollPosition;
|
|
1
|
+
import{useRef as t}from"react";import{isBrowser as r}from"@koine/utils";import{listenScroll as e}from"@koine/dom";import{useIsomorphicLayoutEffect as o}from"./useIsomorphicLayoutEffect";let l={x:0,y:0},n=t=>t?.getBoundingClientRect(),u=(t,e)=>{if(!r)return l;if(!e)return{x:window.scrollX,y:window.scrollY};let o=n(t?.current||document.body),u=n(e.current);return o?u?{x:(u.x||0)-(o.x||0),y:(u.y||0)-(o.y||0)}:{x:o.left,y:o.top}:l};export let useScrollPosition=(l,n=[],i,c,m)=>{let f=t(u(null,c)),s=null,d=()=>{let t=u(i,c);l(t,f.current),f.current=t,s=null};o(()=>{if(!r)return;let t=e(()=>{m?null===s&&(s=window.setTimeout(d,m)):d()},c?.current);return()=>{t(),s&&clearTimeout(s)}},n)};export default useScrollPosition;
|
package/useScrollThreshold.js
CHANGED
|
@@ -1,26 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { noop } from "@koine/utils";
|
|
3
|
-
import { listenScroll } from "@koine/dom";
|
|
4
|
-
export let useScrollThreshold = (threshold, callback) => {
|
|
5
|
-
const [isBelow, setIsBelow] = useState(false);
|
|
6
|
-
const handler = useCallback(() => {
|
|
7
|
-
if (threshold) {
|
|
8
|
-
const posY = window.scrollY;
|
|
9
|
-
const isAbove = posY < threshold;
|
|
10
|
-
const isBelow = posY > threshold;
|
|
11
|
-
setIsBelow(isBelow);
|
|
12
|
-
if (callback)
|
|
13
|
-
callback(isAbove, isBelow);
|
|
14
|
-
}
|
|
15
|
-
}, [threshold, callback]);
|
|
16
|
-
useEffect(() => {
|
|
17
|
-
if (threshold) {
|
|
18
|
-
const listener = listenScroll(handler);
|
|
19
|
-
handler();
|
|
20
|
-
return listener;
|
|
21
|
-
}
|
|
22
|
-
return noop;
|
|
23
|
-
}, [threshold, handler]);
|
|
24
|
-
return isBelow;
|
|
25
|
-
};
|
|
26
|
-
export default useScrollThreshold;
|
|
1
|
+
import{useCallback as r,useEffect as e,useState as o}from"react";import{noop as t}from"@koine/utils";import{listenScroll as l}from"@koine/dom";export let useScrollThreshold=(i,m)=>{let[u,f]=o(!1),n=r(()=>{if(i){let r=window.scrollY,e=r<i,o=r>i;f(o),m&&m(e,o)}},[i,m]);return e(()=>{if(i){let r=l(n);return n(),r}return t},[i,n]),u};export default useScrollThreshold;
|
package/useScrollTo.js
CHANGED
|
@@ -1,18 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let useScrollTo = (id = "", offset = 0) => {
|
|
3
|
-
if (!isBrowser) {
|
|
4
|
-
return;
|
|
5
|
-
}
|
|
6
|
-
const headerOffset = 0;
|
|
7
|
-
let element = document.getElementById(id);
|
|
8
|
-
let top = 0;
|
|
9
|
-
if (element && element.offsetParent) {
|
|
10
|
-
do {
|
|
11
|
-
top += element.offsetTop;
|
|
12
|
-
} while ((element = element.offsetParent));
|
|
13
|
-
}
|
|
14
|
-
top -= offset;
|
|
15
|
-
top -= headerOffset;
|
|
16
|
-
window.scroll(0, top);
|
|
17
|
-
};
|
|
18
|
-
export default useScrollTo;
|
|
1
|
+
import{isBrowser as e}from"@koine/utils";export let useScrollTo=(o="",t=0)=>{if(!e)return;let l=document.getElementById(o),r=0;if(l&&l.offsetParent)do r+=l.offsetTop;while(l=l.offsetParent)r-=t,r-=0,window.scroll(0,r)};export default useScrollTo;
|
package/useSmoothScroll.js
CHANGED
|
@@ -1,32 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { isNumber } from "@koine/utils";
|
|
3
|
-
import { getOffsetTopSlim, scrollTo } from "@koine/dom";
|
|
4
|
-
import { useFixedOffset } from "./useFixedOffset";
|
|
5
|
-
export let useSmoothScroll = (disregardAutomaticFixedOffset) => {
|
|
6
|
-
const fixedOffset = useFixedOffset();
|
|
7
|
-
const scroll = useCallback((to, customOffset, callback, fallbackTimeout, behavior) => {
|
|
8
|
-
let top = undefined;
|
|
9
|
-
let toIsElement = false;
|
|
10
|
-
if (isNumber(to)) {
|
|
11
|
-
top = to;
|
|
12
|
-
}
|
|
13
|
-
else if (to) {
|
|
14
|
-
const el = document.getElementById(to);
|
|
15
|
-
if (el) {
|
|
16
|
-
top = getOffsetTopSlim(el) - fixedOffset.current;
|
|
17
|
-
toIsElement = true;
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
if (isNumber(top)) {
|
|
21
|
-
top =
|
|
22
|
-
top +
|
|
23
|
-
(customOffset || 0) +
|
|
24
|
-
(disregardAutomaticFixedOffset || toIsElement
|
|
25
|
-
? 0
|
|
26
|
-
: fixedOffset.current);
|
|
27
|
-
scrollTo(top, callback, fallbackTimeout, behavior);
|
|
28
|
-
}
|
|
29
|
-
}, [disregardAutomaticFixedOffset, fixedOffset]);
|
|
30
|
-
return scroll;
|
|
31
|
-
};
|
|
32
|
-
export default useSmoothScroll;
|
|
1
|
+
import{useCallback as e}from"react";import{isNumber as t}from"@koine/utils";import{getOffsetTopSlim as o,scrollTo as r}from"@koine/dom";import{useFixedOffset as l}from"./useFixedOffset";export let useSmoothScroll=m=>{let i=l();return e((e,l,f,u,n)=>{let c;let p=!1;if(t(e))c=e;else if(e){let t=document.getElementById(e);t&&(c=o(t)-i.current,p=!0)}t(c)&&r(c=c+(l||0)+(m||p?0:i.current),f,u,n)},[m,i])};export default useSmoothScroll;
|
package/useSpinDelay.js
CHANGED
|
@@ -1,36 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
var State;
|
|
3
|
-
(function (State) {
|
|
4
|
-
State[State["IDLE"] = 0] = "IDLE";
|
|
5
|
-
State[State["DELAY"] = 1] = "DELAY";
|
|
6
|
-
State[State["DISPLAY"] = 2] = "DISPLAY";
|
|
7
|
-
State[State["EXPIRE"] = 3] = "EXPIRE";
|
|
8
|
-
})(State || (State = {}));
|
|
9
|
-
export let useSpinDelay = (loading, delay = 500, minDuration = 200) => {
|
|
10
|
-
const [state, setState] = useState(State.IDLE);
|
|
11
|
-
const timeout = useRef();
|
|
12
|
-
useEffect(() => {
|
|
13
|
-
if (loading && state === State.IDLE) {
|
|
14
|
-
clearTimeout(timeout.current);
|
|
15
|
-
timeout.current = setTimeout(() => {
|
|
16
|
-
if (!loading) {
|
|
17
|
-
return setState(State.IDLE);
|
|
18
|
-
}
|
|
19
|
-
timeout.current = setTimeout(() => {
|
|
20
|
-
setState(State.EXPIRE);
|
|
21
|
-
}, minDuration);
|
|
22
|
-
setState(State.DISPLAY);
|
|
23
|
-
}, delay);
|
|
24
|
-
setState(State.DELAY);
|
|
25
|
-
}
|
|
26
|
-
if (!loading && state !== State.DISPLAY) {
|
|
27
|
-
clearTimeout(timeout.current);
|
|
28
|
-
setState(State.IDLE);
|
|
29
|
-
}
|
|
30
|
-
}, [loading, state, delay, minDuration]);
|
|
31
|
-
useEffect(() => {
|
|
32
|
-
return () => clearTimeout(timeout.current);
|
|
33
|
-
}, []);
|
|
34
|
-
return state === State.DISPLAY || state === State.EXPIRE;
|
|
35
|
-
};
|
|
36
|
-
export default useSpinDelay;
|
|
1
|
+
import{useEffect as e,useRef as r,useState as t}from"react";export let useSpinDelay=(u,c=500,i=200)=>{let[n,o]=t(0),l=r();return e(()=>{u&&0===n&&(clearTimeout(l.current),l.current=setTimeout(()=>{if(!u)return o(0);l.current=setTimeout(()=>{o(3)},i),o(2)},c),o(1)),u||2===n||(clearTimeout(l.current),o(0))},[u,n,c,i]),e(()=>()=>clearTimeout(l.current),[]),2===n||3===n};export default useSpinDelay;
|
package/useTraceUpdate.js
CHANGED
|
@@ -1,17 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
export let useTraceUpdate = (props) => {
|
|
3
|
-
const prev = useRef(props);
|
|
4
|
-
useEffect(() => {
|
|
5
|
-
const changedProps = Object.entries(props).reduce((ps, [k, v]) => {
|
|
6
|
-
if (prev.current[k] !== v) {
|
|
7
|
-
ps[k] = [prev.current[k], v];
|
|
8
|
-
}
|
|
9
|
-
return ps;
|
|
10
|
-
}, {});
|
|
11
|
-
if (Object.keys(changedProps).length > 0) {
|
|
12
|
-
console.info("[@koine/react:useTraceUpdate] changed props:", changedProps);
|
|
13
|
-
}
|
|
14
|
-
prev.current = props;
|
|
15
|
-
});
|
|
16
|
-
};
|
|
17
|
-
export default useTraceUpdate;
|
|
1
|
+
import{useEffect as e,useRef as t}from"react";export let useTraceUpdate=r=>{let c=t(r);e(()=>{let e=Object.entries(r).reduce((e,[t,r])=>(c.current[t]!==r&&(e[t]=[c.current[t],r]),e),{});Object.keys(e).length>0&&console.info("[@koine/react:useTraceUpdate] changed props:",e),c.current=r})};export default useTraceUpdate;
|
package/useUpdateEffect.js
CHANGED
|
@@ -1,11 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { useFirstMountState } from "./useFirstMountState";
|
|
3
|
-
export let useUpdateEffect = (effect, deps) => {
|
|
4
|
-
const isFirstMount = useFirstMountState();
|
|
5
|
-
useEffect(() => {
|
|
6
|
-
if (!isFirstMount) {
|
|
7
|
-
return effect();
|
|
8
|
-
}
|
|
9
|
-
}, deps);
|
|
10
|
-
};
|
|
11
|
-
export default useUpdateEffect;
|
|
1
|
+
import{useEffect as t}from"react";import{useFirstMountState as e}from"./useFirstMountState";export let useUpdateEffect=(r,f)=>{let o=e();t(()=>{if(!o)return r()},f)};export default useUpdateEffect;
|
package/useWindowSize.js
CHANGED
|
@@ -1,20 +1 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { debounce } from "@koine/utils";
|
|
3
|
-
import { listenResize, listenResizeDebounced } from "@koine/dom";
|
|
4
|
-
export let useWindowSize = (wait, immediate) => {
|
|
5
|
-
const [width, widthSet] = useState(0);
|
|
6
|
-
const [height, heightSet] = useState(0);
|
|
7
|
-
useEffect(() => {
|
|
8
|
-
const updateSize = () => {
|
|
9
|
-
widthSet(window.innerWidth);
|
|
10
|
-
heightSet(window.innerHeight);
|
|
11
|
-
};
|
|
12
|
-
const listener = wait
|
|
13
|
-
? listenResizeDebounced(0, updateSize, wait, immediate)
|
|
14
|
-
: listenResize(updateSize);
|
|
15
|
-
updateSize();
|
|
16
|
-
return listener;
|
|
17
|
-
}, [wait, immediate]);
|
|
18
|
-
return [width, height];
|
|
19
|
-
};
|
|
20
|
-
export default useWindowSize;
|
|
1
|
+
import{useEffect as e,useState as i}from"react";import{listenResize as r,listenResizeDebounced as t}from"@koine/dom";export let useWindowSize=(o,n)=>{let[d,w]=i(0),[m,u]=i(0);return e(()=>{let e=()=>{w(window.innerWidth),u(window.innerHeight)},i=o?t(0,e,o,n):r(e);return e(),i},[o,n]),[d,m]};export default useWindowSize;
|
package/README.md
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
# @koine/react
|
package/calendar.cjs.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from "./calendar";
|
package/calendar.cjs.default.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
exports._default = require('./calendar.cjs.js').default;
|
package/calendar.cjs.js
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
-
|
|
5
|
-
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
-
var react = require('react');
|
|
7
|
-
var addDays = require('date-fns/addDays');
|
|
8
|
-
var addMonths = require('date-fns/addMonths');
|
|
9
|
-
var addWeeks = require('date-fns/addWeeks');
|
|
10
|
-
var endOfMonth = require('date-fns/endOfMonth');
|
|
11
|
-
var endOfWeek = require('date-fns/endOfWeek');
|
|
12
|
-
var isWithinInterval = require('date-fns/isWithinInterval');
|
|
13
|
-
var startOfWeek = require('date-fns/startOfWeek');
|
|
14
|
-
var subMonths = require('date-fns/subMonths');
|
|
15
|
-
var subWeeks = require('date-fns/subWeeks');
|
|
16
|
-
var format = require('date-fns/format');
|
|
17
|
-
var eachWeekOfInterval = require('date-fns/eachWeekOfInterval');
|
|
18
|
-
var reactSwipeable = require('react-swipeable');
|
|
19
|
-
var differenceInDays = require('date-fns/differenceInDays');
|
|
20
|
-
var subDays = require('date-fns/subDays');
|
|
21
|
-
var utils = require('@koine/utils');
|
|
22
|
-
|
|
23
|
-
function _interopNamespace(e) {
|
|
24
|
-
if (e && e.__esModule) return e;
|
|
25
|
-
var n = Object.create(null);
|
|
26
|
-
if (e) {
|
|
27
|
-
Object.keys(e).forEach(function (k) {
|
|
28
|
-
if (k !== 'default') {
|
|
29
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
30
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
31
|
-
enumerable: true,
|
|
32
|
-
get: function () { return e[k]; }
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
n["default"] = e;
|
|
38
|
-
return Object.freeze(n);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek.startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth.endOfMonth(e):"week"===t&&(r=endOfWeek.endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths.subMonths(e,1):subWeeks.subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths.addMonths(e,1):addWeeks.addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval.isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d$1=e=>{let t=[];for(let r in e)t.push(e[r]);return t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d$1(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays.addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){if(s.multi&&(m=s.days.filter(e=>e>=g&&e<=h).length,(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}t[i]=1,a&&(p[s.uid]=i),v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
42
|
-
|
|
43
|
-
let d=l=>jsxRuntime.jsxs("svg",{viewBox:"0 0 24 24",fill:"currentColor",stroke:"none",...l,children:[jsxRuntime.jsx("path",{d:"M0 0h24v24H0z"}),jsxRuntime.jsx("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})]}),o$1={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"};let CalendarDaygridCell=({eventClicked:a,setEventClicked:s,setEventHovered:h,view:c,maxEvents:u,events:p,calendarsMap:v,Cell:f="div",CellOverflow:y="div",CellEvent:$="div",CellEventBtn:m="div",CellEventTitle:w="span",CellEventStart:g="span"})=>{let[x,M]=react.useState(!1),O=p.filter(e=>!e.placeholder);return jsxRuntime.jsx(f,{children:p.map((t,p)=>{if(p===u&&!x)return jsxRuntime.jsxs(y,{onClick:()=>M(!0),children:[jsxRuntime.jsx(d,{}),O.length-u]},"overflowMessage"+p);if(p>u&&!x)return null;if(t.placeholder)return jsxRuntime.jsx(react.Fragment,{children:jsxRuntime.jsx($,{$placeholder:!0,children:jsxRuntime.jsx(m,{"aria-hidden":"true",style:{visibility:"hidden"},$placeholder:!0,children:jsxRuntime.jsx(w,{children:" "})})})},t.key);let f={zIndex:t.firstOfMulti?1:0,position:"relative",width:t.firstOfMulti?`${100*t.width}%`:"100%"};v[t.calendar.id].on||(o$1.display="none");let k={$view:c,$selected:a?.uid===t.uid,$past:t.isPast,$color:t.color,$isOutOfRange:t.$isOutOfRange,$isToday:t.$isToday};return jsxRuntime.jsx(react.Fragment,{children:jsxRuntime.jsx($,{style:f,...k,children:jsxRuntime.jsx(m,{role:"button",style:o$1,...k,onClick:()=>s(e=>e?.uid===t.uid?null:t),onMouseEnter:()=>h(t),onMouseLeave:()=>h(null),children:t.allDay?jsxRuntime.jsx(w,{children:t.title}):jsxRuntime.jsxs(jsxRuntime.Fragment,{children:[jsxRuntime.jsx(g,{children:getDisplayTime(t.start)}),jsxRuntime.jsx(w,{children:t.title})]})})})},t.key)})})};
|
|
44
|
-
|
|
45
|
-
let useDateLocale=(a,l="en")=>{let[r,n]=react.useState(),[o,c]=react.useState(l);return react.useEffect(()=>{let e=async()=>{let e=await Promise.resolve().then(function () { return /*#__PURE__*/_interopNamespace(require('date-fns/locale/en-US')); });c(a||o),n(e.enUS);};a!==o&&e();},[a,o]),r};
|
|
46
|
-
|
|
47
|
-
let KoineCalendarDaygridNav=({range:a,view:l,todayInView:r,handlePrev:i,handleNext:M,handleToday:d,handleView:y,locale:c,NavRoot:m="nav",NavTitle:s="div",NavBtns:b="div",NavBtnPrev:k="button",NavBtnNext:u="button",NavBtnToday:h="button",NavBtnViewMonth:f="button",NavBtnViewWeek:g="button"})=>{let[C,p]=a,v={locale:useDateLocale(c)},x="";return "month"===l&&(x=format.format(C,"MMMM yyyy",v)),"week"===l&&(x=C.getMonth()===p.getMonth()?format.format(C,"# MMMM yyyy",v).replace("#",`${C.getDate()}-${p.getDate()}`):`${format.format(C,"d MMMM",v)} - ${format.format(p,"d MMMM yyyy",v)}`),jsxRuntime.jsxs(m,{children:[jsxRuntime.jsxs(b,{children:[jsxRuntime.jsx(k,{onClick:i}),jsxRuntime.jsx(u,{onClick:M}),jsxRuntime.jsx(h,{onClick:d,disabled:r}),jsxRuntime.jsx(f,{onClick:()=>y("month"),disabled:"month"===l}),jsxRuntime.jsx(g,{onClick:()=>y("week"),disabled:"week"===l})]}),jsxRuntime.jsx(s,{range:a,formatted:x})]})};
|
|
48
|
-
|
|
49
|
-
let KoineCalendarDaygridTable=({locale:d,handlePrev:s,handleNext:c,events:h,dayLabels:f,view:b,range:u,eventClicked:v,setEventClicked:g,eventHovered:w,setEventHovered:y,calendarsMap:x={},maxEvents:j=5,Table:C="table",TableHead:D="thead",TableHeadCell:S="th",TableBody:k="tbody",TableBodyRow:z="tr",TableBodyCell:L="td",TableBodyCellDate:O="div",Cell:I,CellOverflow:K,CellEvent:M,CellEventBtn:R,CellEventTitle:T,CellEventStart:W})=>{let q={Cell:I,CellOverflow:K,CellEvent:M,CellEventBtn:R,CellEventTitle:T,CellEventStart:W},[A,B]=react.useState(f||[0,1,2,3,4,5,6]),[E,F]=react.useState([]),G=useDateLocale(d),{month:H,weeks:J}=react.useMemo(()=>(function(e){let[t,a]=e,i=eachWeekOfInterval.eachWeekOfInterval({start:t,end:a},{weekStartsOn:1});return {month:t.getMonth(),weeks:i}})(u),[u]),N=reactSwipeable.useSwipeable({onSwipedLeft:c,onSwipedRight:s});return react.useEffect(()=>{F(processEventsInView(h,b,H,J));},[h,b,H,J]),react.useEffect(()=>{G&&G.localize&&!f&&B([1,2,3,4,5,6,0].map(e=>G.localize.day(e,{width:"abbreviated"})));},[G,f]),jsxRuntime.jsxs(C,{...N,children:[jsxRuntime.jsx(D,{children:jsxRuntime.jsx("tr",{children:A.map(t=>jsxRuntime.jsx(S,{scope:"column",children:t},t))})}),jsxRuntime.jsx(k,{children:E.map((r,a)=>jsxRuntime.jsx(z,{...r.props,children:r.days.map(r=>jsxRuntime.jsxs(L,{...r.props,children:[jsxRuntime.jsx(O,{...r.props,children:r.label}),r.events.length>0&&jsxRuntime.jsx(CalendarDaygridCell,{eventClicked:v,setEventClicked:g,eventHovered:w,setEventHovered:y,view:b,maxEvents:j,events:r.events,timestamp:r.timestamp,calendarsMap:x,...q})]}))}))})]})};
|
|
50
|
-
|
|
51
|
-
let KoineCalendarLegend=({calendarsMap:a={},toggleCalendarVisibility:s,LegendItem:d="div",LegendItemStatus:i="span",LegendItemLabel:l="span",LegendItemEvents:t="span"})=>jsxRuntime.jsx(jsxRuntime.Fragment,{children:Object.entries(a).map(([r,a])=>jsxRuntime.jsxs(d,{onClick:()=>s(r),$color:a.color,$empty:0===a.events,disabled:0===a.events,children:[jsxRuntime.jsx(i,{children:a.on?"⬤":"⭘"}),jsxRuntime.jsx(l,{children:a.name}),jsxRuntime.jsx(t,{children:a.events})]},"CalendarLegend."+r))});
|
|
52
|
-
|
|
53
|
-
let getCalendarsEventsFromGoogle=async({calendars:e,...t})=>{let a={};return await Promise.all(e.map(async e=>{addCalendarEvents(await o({calendar:e,...t}),a);})),a};async function o({apiKey:i,calendar:o,timeZone:m="",start:d,end:l}){let c={},u=new URLSearchParams({calendarId:o.id,timeZone:m,singleEvents:"true",maxAttendees:"1",maxResults:"9999",sanitizeHtml:"true",timeMin:d.toISOString(),timeMax:l.toISOString(),key:i||process.env.GOOGLE_CALENDAR_API_KEY||""}).toString(),f="https://www.googleapis.com/calendar/v3/calendars/"+o.id+"/events?"+u;try{let i=await fetch(f,{method:"GET"}),m=await i.json();o.name=o.name||m.summary,m.items.forEach(i=>{let m=function(i,o){let m=new Date(i.created),d=i.htmlLink,l=i.summary,c=i.status,u=new Date(i.start.date||i.start.dateTime),f=new Date(i.end.date||i.end.dateTime),w=o.color,g=utils.isUndefined(i.end.dateTime)&&utils.isString(i.end.date),p=i.location||"",D=i.description||"",h=m.getTime()+""+u.getTime();g&&f>u&&(f=subDays.subDays(f,1)).setHours(23,59,59);let y=function(){let t=new Date(u),a=new Date(f),n=[getEventTimestamp(t)];for(;differenceInDays.differenceInDays(a,t);)t.setDate(t.getDate()+1),n.push(getEventTimestamp(t));return n}(),E=utils.arrayToLookup(y),S=y.length>1;return {calendar:o,created:m,link:d,title:l,status:c,start:u,end:f,days:y,daysMap:E,multi:S,color:w,allDay:g,location:p,description:D,uid:h}}(i,o);c[m.uid]=m;});}catch(e){}return c}
|
|
54
|
-
|
|
55
|
-
let useCalendar=({locale:d,apiKey:c,calendars:p,events:g,start:m,end:y,view:v="month",timeZone:f="",onError:b})=>{let[w,T]=react.useState(v),D=m||getStartDate(new Date,w),h=y||getEndDate(D,w),[O,P]=react.useState([D,h]),[j,x]=react.useState(isTodayInView(D,h)),[C,L]=react.useState(g||{}),[N,k]=react.useState(null),[q,z]=react.useState(null),[A,B]=react.useReducer((e,t)=>{let{type:l}=t;switch(l){case"events":{let l=t.payload;return Object.entries(e).reduce((e,[t,n])=>(e[t]={...n,events:l[t]||0},e),{})}case"visibility":{let l=t.payload;if("string"==typeof l)return {...e,[l]:{...e[l],on:!e[l].on}};return Object.entries(e).reduce((e,[t,n])=>(e[t]={...n,on:l.indexOf(t)>-1},e),{})}default:return e}},p.reduce((e,t)=>(e[t.id]={...t,name:t.name||"",on:!0,events:0},e),{})),E=react.useCallback(e=>{B({type:"visibility",payload:e});},[B]),F=react.useCallback(e=>{let t={};for(let l in e){let{id:n}=e[l].calendar;t[n]=t[n]||0,t[n]++;}B({type:"events",payload:t});},[]),G=react.useCallback(async(e,t,l)=>{try{let n=await getCalendarsEventsFromGoogle({apiKey:c,calendars:e,timeZone:f,start:t,end:l});L(n);}catch(e){b&&b(e);}},[L,c,f,b]),H=react.useCallback(()=>{let[e,t]=O,l=getStartDate(new Date,w),n=getEndDate(l,w);P([l,n]),(e.getTime()!==l.getTime()||t.getTime()!==n.getTime())&&(z(null),k(null));},[w,O]),I=react.useCallback(()=>{P(([e])=>{let t=getPrevDate(e,w),l=getEndDate(t,w);return [t,l]}),z(null),k(null);},[w]),J=react.useCallback(()=>{P(([e])=>{let t=getNextDate(e,w),l=getEndDate(t,w);return [t,l]}),z(null),k(null);},[w]),K=react.useCallback(e=>{let t=getStartDate(D,e),l=getEndDate(t,e);P([t,l]),T(e),z(null),k(null);},[D]);return react.useEffect(()=>{let[e,t]=O;G(p,e,t),x(isTodayInView(e,t));},[O]),react.useEffect(()=>{C&&F(C);},[C,F]),react.useEffect(()=>{q&&!A[q.calendar.id].on&&z(null);},[A,q,z]),{view:w,eventClicked:q,setEventClicked:z,eventHovered:N,setEventHovered:k,getDaygridNavProps:()=>({locale:d,handlePrev:I,handleNext:J,handleToday:H,handleView:K,todayInView:j,range:O,view:w}),getDaygridTableProps:()=>({locale:d,events:C,eventClicked:q,setEventClicked:z,eventHovered:N,setEventHovered:k,handlePrev:I,handleNext:J,calendarsMap:A,range:O,view:w}),getLegendProps:()=>({calendarsMap:A,toggleCalendarVisibility:E})}};
|
|
56
|
-
|
|
57
|
-
exports.CalendarDaygridCell = CalendarDaygridCell;
|
|
58
|
-
exports.KoineCalendarDaygridNav = KoineCalendarDaygridNav;
|
|
59
|
-
exports.KoineCalendarDaygridTable = KoineCalendarDaygridTable;
|
|
60
|
-
exports.KoineCalendarLegend = KoineCalendarLegend;
|
|
61
|
-
exports.useCalendar = useCalendar;
|
|
62
|
-
exports.useDateLocale = useDateLocale;
|
package/calendar.cjs.mjs
DELETED
package/calendar.esm.js
DELETED
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs, Fragment as Fragment$1 } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, Fragment, useEffect, useMemo, useReducer, useCallback } from 'react';
|
|
3
|
-
import { addDays } from 'date-fns/addDays';
|
|
4
|
-
import { addMonths } from 'date-fns/addMonths';
|
|
5
|
-
import { addWeeks } from 'date-fns/addWeeks';
|
|
6
|
-
import { endOfMonth } from 'date-fns/endOfMonth';
|
|
7
|
-
import { endOfWeek } from 'date-fns/endOfWeek';
|
|
8
|
-
import { isWithinInterval } from 'date-fns/isWithinInterval';
|
|
9
|
-
import { startOfWeek } from 'date-fns/startOfWeek';
|
|
10
|
-
import { subMonths } from 'date-fns/subMonths';
|
|
11
|
-
import { subWeeks } from 'date-fns/subWeeks';
|
|
12
|
-
import { format } from 'date-fns/format';
|
|
13
|
-
import { eachWeekOfInterval } from 'date-fns/eachWeekOfInterval';
|
|
14
|
-
import { useSwipeable } from 'react-swipeable';
|
|
15
|
-
import { differenceInDays } from 'date-fns/differenceInDays';
|
|
16
|
-
import { subDays } from 'date-fns/subDays';
|
|
17
|
-
import { isUndefined, isString, arrayToLookup } from '@koine/utils';
|
|
18
|
-
|
|
19
|
-
let getEventTimestamp=e=>{let t=new Date(e);return t.setHours(0,0,0,0),t.valueOf()/1e3};let getDisplayTime=e=>e.getHours()+":"+"0".repeat(2-e.getMinutes().toString().length)+e.getMinutes();let getStartDate=(e,t)=>(e.setHours(0,0,0),"month"===t?e.setDate(1):"week"===t&&(e=startOfWeek(e,{weekStartsOn:1})),e);let getEndDate=(e,t)=>{let r=e;return "month"===t?r=endOfMonth(e):"week"===t&&(r=endOfWeek(e,{weekStartsOn:1})),r.setHours(23,59,59),r};let getPrevDate=(e,t)=>"month"===t?subMonths(e,1):subWeeks(e,1);let getNextDate=(e,a)=>"month"===a?addMonths(e,1):addWeeks(e,1);let isTodayInView=(e,t)=>isWithinInterval(new Date,{start:e,end:t});let addCalendarEvents=(e,t)=>{for(let r in e){let a=e[r];t[r]=a;}return t};let i=e=>{let t={};for(let r in e){let a=e[r];a.days.forEach(e=>{t[e]=t[e]||{},t[e][r]=a;});}return t},d$1=e=>{let t=[];for(let r in e)t.push(e[r]);return t.sort((e,t)=>{let r=Number(t.multi)-Number(e.multi),a=Number(t.allDay)-Number(e.allDay),n=e.start.getTime()-t.start.getTime(),s=e.created.getTime()-t.created.getTime();return r||a||n||s}),t};let processEventsInView=(t,r,a,n)=>{let s=i(t),o=d$1(t),l=new Date,m=getEventTimestamp(l),p={},f=[];for(let t=0;t<n.length;t++){let i={props:{key:`week.${t}`},days:[]},d=n[t],u=d.getDate(),g=getEventTimestamp(new Date(d)),h=getEventTimestamp(addDays(new Date(d),6));for(let e=0;e<7;e++){let t=new Date(new Date(d).setDate(u+e)),n=getEventTimestamp(t),f={$isToday:m===n,$isOutOfRange:"month"===r&&t.getMonth()!==a},v={props:{key:`day.${n}`,...f},timestamp:n+"",label:t.getDate()+"",events:[]};if(s?.[n]){let t=Object.keys(s[n]).map(()=>0);for(let r=0;r<o.length;r++){let a;let s=o[r],m=1,i=0;if(s.daysMap[n]){if(s.multi&&(m=s.days.filter(e=>e>=g&&e<=h).length,(0===s.days.indexOf(n)||0===e)&&(a=!0)),p[s.uid])i=p[s.uid];else for(let e=0;e<t.length;e++)if(1!==t[e]){i=e;break}t[i]=1,a&&(p[s.uid]=i),v.events.push({key:`event.${n}-${i}`,...f,...s,isPast:l>s.end,firstOfMulti:a,top:i,width:m});}}for(let e=0;e<t.length;e++)1!==t[e]&&v.events.push({key:`event.${n}-${e}}`,placeholder:!0,top:e});v.events.sort((e,t)=>e.top-t.top);}i.days.push(v);}f.push(i);}return f};
|
|
20
|
-
|
|
21
|
-
let d=l=>jsxs("svg",{viewBox:"0 0 24 24",fill:"currentColor",stroke:"none",...l,children:[jsx("path",{d:"M0 0h24v24H0z"}),jsx("path",{d:"M19 13h-6v6h-2v-6H5v-2h6V5h2v6h6v2z"})]}),o$1={overflow:"hidden",whiteSpace:"nowrap",textOverflow:"ellipsis"};let CalendarDaygridCell=({eventClicked:a,setEventClicked:s,setEventHovered:h,view:c,maxEvents:u,events:p,calendarsMap:v,Cell:f="div",CellOverflow:y="div",CellEvent:$="div",CellEventBtn:m="div",CellEventTitle:w="span",CellEventStart:g="span"})=>{let[x,M]=useState(!1),O=p.filter(e=>!e.placeholder);return jsx(f,{children:p.map((t,p)=>{if(p===u&&!x)return jsxs(y,{onClick:()=>M(!0),children:[jsx(d,{}),O.length-u]},"overflowMessage"+p);if(p>u&&!x)return null;if(t.placeholder)return jsx(Fragment,{children:jsx($,{$placeholder:!0,children:jsx(m,{"aria-hidden":"true",style:{visibility:"hidden"},$placeholder:!0,children:jsx(w,{children:" "})})})},t.key);let f={zIndex:t.firstOfMulti?1:0,position:"relative",width:t.firstOfMulti?`${100*t.width}%`:"100%"};v[t.calendar.id].on||(o$1.display="none");let k={$view:c,$selected:a?.uid===t.uid,$past:t.isPast,$color:t.color,$isOutOfRange:t.$isOutOfRange,$isToday:t.$isToday};return jsx(Fragment,{children:jsx($,{style:f,...k,children:jsx(m,{role:"button",style:o$1,...k,onClick:()=>s(e=>e?.uid===t.uid?null:t),onMouseEnter:()=>h(t),onMouseLeave:()=>h(null),children:t.allDay?jsx(w,{children:t.title}):jsxs(Fragment$1,{children:[jsx(g,{children:getDisplayTime(t.start)}),jsx(w,{children:t.title})]})})})},t.key)})})};
|
|
22
|
-
|
|
23
|
-
let useDateLocale=(a,l="en")=>{let[r,n]=useState(),[o,c]=useState(l);return useEffect(()=>{let e=async()=>{let e=await import('date-fns/locale/en-US');c(a||o),n(e.enUS);};a!==o&&e();},[a,o]),r};
|
|
24
|
-
|
|
25
|
-
let KoineCalendarDaygridNav=({range:a,view:l,todayInView:r,handlePrev:i,handleNext:M,handleToday:d,handleView:y,locale:c,NavRoot:m="nav",NavTitle:s="div",NavBtns:b="div",NavBtnPrev:k="button",NavBtnNext:u="button",NavBtnToday:h="button",NavBtnViewMonth:f="button",NavBtnViewWeek:g="button"})=>{let[C,p]=a,v={locale:useDateLocale(c)},x="";return "month"===l&&(x=format(C,"MMMM yyyy",v)),"week"===l&&(x=C.getMonth()===p.getMonth()?format(C,"# MMMM yyyy",v).replace("#",`${C.getDate()}-${p.getDate()}`):`${format(C,"d MMMM",v)} - ${format(p,"d MMMM yyyy",v)}`),jsxs(m,{children:[jsxs(b,{children:[jsx(k,{onClick:i}),jsx(u,{onClick:M}),jsx(h,{onClick:d,disabled:r}),jsx(f,{onClick:()=>y("month"),disabled:"month"===l}),jsx(g,{onClick:()=>y("week"),disabled:"week"===l})]}),jsx(s,{range:a,formatted:x})]})};
|
|
26
|
-
|
|
27
|
-
let KoineCalendarDaygridTable=({locale:d,handlePrev:s,handleNext:c,events:h,dayLabels:f,view:b,range:u,eventClicked:v,setEventClicked:g,eventHovered:w,setEventHovered:y,calendarsMap:x={},maxEvents:j=5,Table:C="table",TableHead:D="thead",TableHeadCell:S="th",TableBody:k="tbody",TableBodyRow:z="tr",TableBodyCell:L="td",TableBodyCellDate:O="div",Cell:I,CellOverflow:K,CellEvent:M,CellEventBtn:R,CellEventTitle:T,CellEventStart:W})=>{let q={Cell:I,CellOverflow:K,CellEvent:M,CellEventBtn:R,CellEventTitle:T,CellEventStart:W},[A,B]=useState(f||[0,1,2,3,4,5,6]),[E,F]=useState([]),G=useDateLocale(d),{month:H,weeks:J}=useMemo(()=>(function(e){let[t,a]=e,i=eachWeekOfInterval({start:t,end:a},{weekStartsOn:1});return {month:t.getMonth(),weeks:i}})(u),[u]),N=useSwipeable({onSwipedLeft:c,onSwipedRight:s});return useEffect(()=>{F(processEventsInView(h,b,H,J));},[h,b,H,J]),useEffect(()=>{G&&G.localize&&!f&&B([1,2,3,4,5,6,0].map(e=>G.localize.day(e,{width:"abbreviated"})));},[G,f]),jsxs(C,{...N,children:[jsx(D,{children:jsx("tr",{children:A.map(t=>jsx(S,{scope:"column",children:t},t))})}),jsx(k,{children:E.map((r,a)=>jsx(z,{...r.props,children:r.days.map(r=>jsxs(L,{...r.props,children:[jsx(O,{...r.props,children:r.label}),r.events.length>0&&jsx(CalendarDaygridCell,{eventClicked:v,setEventClicked:g,eventHovered:w,setEventHovered:y,view:b,maxEvents:j,events:r.events,timestamp:r.timestamp,calendarsMap:x,...q})]}))}))})]})};
|
|
28
|
-
|
|
29
|
-
let KoineCalendarLegend=({calendarsMap:a={},toggleCalendarVisibility:s,LegendItem:d="div",LegendItemStatus:i="span",LegendItemLabel:l="span",LegendItemEvents:t="span"})=>jsx(Fragment$1,{children:Object.entries(a).map(([r,a])=>jsxs(d,{onClick:()=>s(r),$color:a.color,$empty:0===a.events,disabled:0===a.events,children:[jsx(i,{children:a.on?"⬤":"⭘"}),jsx(l,{children:a.name}),jsx(t,{children:a.events})]},"CalendarLegend."+r))});
|
|
30
|
-
|
|
31
|
-
let getCalendarsEventsFromGoogle=async({calendars:e,...t})=>{let a={};return await Promise.all(e.map(async e=>{addCalendarEvents(await o({calendar:e,...t}),a);})),a};async function o({apiKey:i,calendar:o,timeZone:m="",start:d,end:l}){let c={},u=new URLSearchParams({calendarId:o.id,timeZone:m,singleEvents:"true",maxAttendees:"1",maxResults:"9999",sanitizeHtml:"true",timeMin:d.toISOString(),timeMax:l.toISOString(),key:i||process.env.GOOGLE_CALENDAR_API_KEY||""}).toString(),f="https://www.googleapis.com/calendar/v3/calendars/"+o.id+"/events?"+u;try{let i=await fetch(f,{method:"GET"}),m=await i.json();o.name=o.name||m.summary,m.items.forEach(i=>{let m=function(i,o){let m=new Date(i.created),d=i.htmlLink,l=i.summary,c=i.status,u=new Date(i.start.date||i.start.dateTime),f=new Date(i.end.date||i.end.dateTime),w=o.color,g=isUndefined(i.end.dateTime)&&isString(i.end.date),p=i.location||"",D=i.description||"",h=m.getTime()+""+u.getTime();g&&f>u&&(f=subDays(f,1)).setHours(23,59,59);let y=function(){let t=new Date(u),a=new Date(f),n=[getEventTimestamp(t)];for(;differenceInDays(a,t);)t.setDate(t.getDate()+1),n.push(getEventTimestamp(t));return n}(),E=arrayToLookup(y),S=y.length>1;return {calendar:o,created:m,link:d,title:l,status:c,start:u,end:f,days:y,daysMap:E,multi:S,color:w,allDay:g,location:p,description:D,uid:h}}(i,o);c[m.uid]=m;});}catch(e){}return c}
|
|
32
|
-
|
|
33
|
-
let useCalendar=({locale:d,apiKey:c,calendars:p,events:g,start:m,end:y,view:v="month",timeZone:f="",onError:b})=>{let[w,T]=useState(v),D=m||getStartDate(new Date,w),h=y||getEndDate(D,w),[O,P]=useState([D,h]),[j,x]=useState(isTodayInView(D,h)),[C,L]=useState(g||{}),[N,k]=useState(null),[q,z]=useState(null),[A,B]=useReducer((e,t)=>{let{type:l}=t;switch(l){case"events":{let l=t.payload;return Object.entries(e).reduce((e,[t,n])=>(e[t]={...n,events:l[t]||0},e),{})}case"visibility":{let l=t.payload;if("string"==typeof l)return {...e,[l]:{...e[l],on:!e[l].on}};return Object.entries(e).reduce((e,[t,n])=>(e[t]={...n,on:l.indexOf(t)>-1},e),{})}default:return e}},p.reduce((e,t)=>(e[t.id]={...t,name:t.name||"",on:!0,events:0},e),{})),E=useCallback(e=>{B({type:"visibility",payload:e});},[B]),F=useCallback(e=>{let t={};for(let l in e){let{id:n}=e[l].calendar;t[n]=t[n]||0,t[n]++;}B({type:"events",payload:t});},[]),G=useCallback(async(e,t,l)=>{try{let n=await getCalendarsEventsFromGoogle({apiKey:c,calendars:e,timeZone:f,start:t,end:l});L(n);}catch(e){b&&b(e);}},[L,c,f,b]),H=useCallback(()=>{let[e,t]=O,l=getStartDate(new Date,w),n=getEndDate(l,w);P([l,n]),(e.getTime()!==l.getTime()||t.getTime()!==n.getTime())&&(z(null),k(null));},[w,O]),I=useCallback(()=>{P(([e])=>{let t=getPrevDate(e,w),l=getEndDate(t,w);return [t,l]}),z(null),k(null);},[w]),J=useCallback(()=>{P(([e])=>{let t=getNextDate(e,w),l=getEndDate(t,w);return [t,l]}),z(null),k(null);},[w]),K=useCallback(e=>{let t=getStartDate(D,e),l=getEndDate(t,e);P([t,l]),T(e),z(null),k(null);},[D]);return useEffect(()=>{let[e,t]=O;G(p,e,t),x(isTodayInView(e,t));},[O]),useEffect(()=>{C&&F(C);},[C,F]),useEffect(()=>{q&&!A[q.calendar.id].on&&z(null);},[A,q,z]),{view:w,eventClicked:q,setEventClicked:z,eventHovered:N,setEventHovered:k,getDaygridNavProps:()=>({locale:d,handlePrev:I,handleNext:J,handleToday:H,handleView:K,todayInView:j,range:O,view:w}),getDaygridTableProps:()=>({locale:d,events:C,eventClicked:q,setEventClicked:z,eventHovered:N,setEventHovered:k,handlePrev:I,handleNext:J,calendarsMap:A,range:O,view:w}),getLegendProps:()=>({calendarsMap:A,toggleCalendarVisibility:E})}};
|
|
34
|
-
|
|
35
|
-
export { CalendarDaygridCell, KoineCalendarDaygridNav, KoineCalendarDaygridTable, KoineCalendarLegend, useCalendar, useDateLocale };
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
export let FaviconTags = ({ name, color, safariTabColor, tileColor, themeColor, }) => {
|
|
3
|
-
return (_jsxs(_Fragment, { children: [_jsx("link", { rel: "shortcut icon", href: "/favicon.ico", type: "image/x-icon" }), _jsx("link", { rel: "apple-touch-icon", sizes: "180x180", href: "/apple-touch-icon.png" }), _jsx("link", { rel: "icon", type: "image/png", sizes: "32x32", href: "/favicon-32x32.png" }), _jsx("link", { rel: "icon", type: "image/png", sizes: "16x16", href: "/favicon-16x16.png" }), _jsx("link", { rel: "manifest", href: "/site.webmanifest" }), _jsx("link", { rel: "mask-icon", href: "/safari-pinned-tab.svg", color: safariTabColor || color }), _jsx("meta", { name: "apple-mobile-web-app-title", content: name }), _jsx("meta", { name: "application-name", content: name }), _jsx("meta", { name: "msapplication-TileColor", content: tileColor || color }), _jsx("meta", { name: "theme-color", content: themeColor || color })] }));
|
|
4
|
-
};
|
package/components/Meta.js
DELETED