@atom-learning/components 8.0.1 → 8.0.2
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/dist/index.cjs.js +12 -6
- package/dist/index.cjs.js.map +1 -1
- package/dist/utilities/hooks/useCallbackRef.js +1 -1
- package/dist/utilities/hooks/useCallbackRef.js.map +1 -1
- package/dist/utilities/hooks/useResizeObserver.js +5 -1
- package/dist/utilities/hooks/useResizeObserver.js.map +1 -1
- package/dist/utilities/hooks/useScrollPosition.js +1 -1
- package/dist/utilities/hooks/useScrollPosition.js.map +1 -1
- package/dist/utilities/hooks/useSize.js +5 -3
- package/dist/utilities/hooks/useSize.js.map +1 -1
- package/package.json +1 -1
|
@@ -9,7 +9,7 @@ var useCallbackRef = () => {
|
|
|
9
9
|
var useCallbackRefState = () => {
|
|
10
10
|
const [elRef, setElRef] = React$1.useState(null);
|
|
11
11
|
return [elRef, React$1.useCallback((el) => {
|
|
12
|
-
if (el) setElRef(el);
|
|
12
|
+
if (el) setElRef((prev) => prev === el ? prev : el);
|
|
13
13
|
}, [])];
|
|
14
14
|
};
|
|
15
15
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCallbackRef.js","names":[],"sources":["../../../src/utilities/hooks/useCallbackRef.ts"],"sourcesContent":["import * as React from 'react'\n\nexport const useCallbackRef: () => [\n React.MutableRefObject<HTMLElement | null>,\n (HTMLElement) => void\n] = () => {\n const elRef = React.useRef<HTMLElement | null>(null)\n\n const setElRefCallback = React.useCallback((el) => {\n if (el) elRef.current = el\n }, [])\n\n return [elRef, setElRefCallback]\n}\n\nexport const useCallbackRefState: () => [\n HTMLElement | null,\n (HTMLElement) => void\n] = () => {\n const [elRef, setElRef] = React.useState<HTMLElement | null>(null)\n\n const setElRefCallback = React.useCallback((el) => {\n if (el) setElRef(el)\n }, [])\n\n return [elRef, setElRefCallback]\n}\n"],"mappings":";;AAEA,IAAa,uBAGH;CACR,MAAM,QAAQ,QAAM,OAA2B,KAAK;AAMpD,QAAO,CAAC,OAJiB,QAAM,aAAa,OAAO;AACjD,MAAI,GAAI,OAAM,UAAU;IACvB,EAAE,CAAC,CAE0B;;AAGlC,IAAa,4BAGH;CACR,MAAM,CAAC,OAAO,YAAY,QAAM,SAA6B,KAAK;AAMlE,QAAO,CAAC,OAJiB,QAAM,aAAa,OAAO;AACjD,MAAI,GAAI,
|
|
1
|
+
{"version":3,"file":"useCallbackRef.js","names":[],"sources":["../../../src/utilities/hooks/useCallbackRef.ts"],"sourcesContent":["import * as React from 'react'\n\nexport const useCallbackRef: () => [\n React.MutableRefObject<HTMLElement | null>,\n (HTMLElement) => void\n] = () => {\n const elRef = React.useRef<HTMLElement | null>(null)\n\n const setElRefCallback = React.useCallback((el) => {\n if (el) elRef.current = el\n }, [])\n\n return [elRef, setElRefCallback]\n}\n\nexport const useCallbackRefState: () => [\n HTMLElement | null,\n (HTMLElement) => void\n] = () => {\n const [elRef, setElRef] = React.useState<HTMLElement | null>(null)\n\n const setElRefCallback = React.useCallback((el) => {\n if (el) setElRef((prev) => (prev === el ? prev : el))\n }, [])\n\n return [elRef, setElRefCallback]\n}\n"],"mappings":";;AAEA,IAAa,uBAGH;CACR,MAAM,QAAQ,QAAM,OAA2B,KAAK;AAMpD,QAAO,CAAC,OAJiB,QAAM,aAAa,OAAO;AACjD,MAAI,GAAI,OAAM,UAAU;IACvB,EAAE,CAAC,CAE0B;;AAGlC,IAAa,4BAGH;CACR,MAAM,CAAC,OAAO,YAAY,QAAM,SAA6B,KAAK;AAMlE,QAAO,CAAC,OAJiB,QAAM,aAAa,OAAO;AACjD,MAAI,GAAI,WAAU,SAAU,SAAS,KAAK,OAAO,GAAI;IACpD,EAAE,CAAC,CAE0B"}
|
|
@@ -9,7 +9,11 @@ var createResizeObserver = (callback) => {
|
|
|
9
9
|
}
|
|
10
10
|
};
|
|
11
11
|
var useResizeObserver = ({ delay = 500, elements, onResize }) => {
|
|
12
|
-
const
|
|
12
|
+
const onResizeRef = React$1.useRef(onResize);
|
|
13
|
+
React$1.useLayoutEffect(() => {
|
|
14
|
+
onResizeRef.current = onResize;
|
|
15
|
+
});
|
|
16
|
+
const observer = React$1.useMemo(() => createResizeObserver(debounce(delay, (entries) => onResizeRef.current(entries))), [delay]);
|
|
13
17
|
React$1.useEffect(() => {
|
|
14
18
|
elements.forEach((element) => {
|
|
15
19
|
if (element) observer?.observe(element);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeObserver.js","names":[],"sources":["../../../src/utilities/hooks/useResizeObserver.ts"],"sourcesContent":["import * as React from 'react'\nimport { debounce } from 'throttle-debounce'\n\ntype TUseResizeObserverOptions = {\n elements: (HTMLElement | undefined | null)[]\n onResize: (entries: ResizeObserverEntry[]) => void\n delay?: number\n}\n\ntype TUseResizeObserverOutput = ResizeObserver | null\n\nconst createResizeObserver = (\n callback: (entries: ResizeObserverEntry[]) => void\n) => {\n try {\n return new ResizeObserver(callback)\n } catch {\n return null\n }\n}\n\nexport const useResizeObserver = ({\n delay = 500,\n elements,\n onResize\n}: TUseResizeObserverOptions): TUseResizeObserverOutput => {\n const observer = React.useMemo(\n ()
|
|
1
|
+
{"version":3,"file":"useResizeObserver.js","names":[],"sources":["../../../src/utilities/hooks/useResizeObserver.ts"],"sourcesContent":["import * as React from 'react'\nimport { debounce } from 'throttle-debounce'\n\ntype TUseResizeObserverOptions = {\n elements: (HTMLElement | undefined | null)[]\n onResize: (entries: ResizeObserverEntry[]) => void\n delay?: number\n}\n\ntype TUseResizeObserverOutput = ResizeObserver | null\n\nconst createResizeObserver = (\n callback: (entries: ResizeObserverEntry[]) => void\n) => {\n try {\n return new ResizeObserver(callback)\n } catch {\n return null\n }\n}\n\nexport const useResizeObserver = ({\n delay = 500,\n elements,\n onResize\n}: TUseResizeObserverOptions): TUseResizeObserverOutput => {\n // Keep the latest `onResize` in a ref so the observer is only recreated when\n // `delay` changes. Otherwise a callback whose identity changes on render (e.g.\n // `useSize`'s `handleResize`, which depends on `element`) would recreate and\n // re-subscribe the observer, and `ResizeObserver` fires its initial callback\n // on every `observe()` — a measure → setState → re-render → re-subscribe loop\n // that surfaces as \"Maximum update depth exceeded\".\n const onResizeRef = React.useRef(onResize)\n React.useLayoutEffect(() => {\n onResizeRef.current = onResize\n })\n\n const observer = React.useMemo(\n () =>\n createResizeObserver(\n debounce(delay, (entries: ResizeObserverEntry[]) =>\n onResizeRef.current(entries)\n )\n ),\n [delay]\n )\n\n React.useEffect(() => {\n elements.forEach((element) => {\n if (element) {\n observer?.observe(element)\n }\n })\n\n return () => {\n elements.forEach((element) => element && observer?.unobserve(element))\n }\n }, [observer, elements])\n\n return observer\n}\n"],"mappings":";;;AAWA,IAAM,wBACJ,aACG;AACH,KAAI;AACF,SAAO,IAAI,eAAe,SAAS;SAC7B;AACN,SAAO;;;AAIX,IAAa,qBAAqB,EAChC,QAAQ,KACR,UACA,eACyD;CAOzD,MAAM,cAAc,QAAM,OAAO,SAAS;AAC1C,SAAM,sBAAsB;AAC1B,cAAY,UAAU;GACtB;CAEF,MAAM,WAAW,QAAM,cAEnB,qBACE,SAAS,QAAQ,YACf,YAAY,QAAQ,QAAQ,CAC7B,CACF,EACH,CAAC,MAAM,CACR;AAED,SAAM,gBAAgB;AACpB,WAAS,SAAS,YAAY;AAC5B,OAAI,QACF,WAAU,QAAQ,QAAQ;IAE5B;AAEF,eAAa;AACX,YAAS,SAAS,YAAY,WAAW,UAAU,UAAU,QAAQ,CAAC;;IAEvE,CAAC,UAAU,SAAS,CAAC;AAExB,QAAO"}
|
|
@@ -10,7 +10,7 @@ var useScrollPosition = ({ element, delay = 500, delayMethod = "throttle" }) =>
|
|
|
10
10
|
useEffect(() => {
|
|
11
11
|
if (!element) return;
|
|
12
12
|
const handleScroll = delayMethodFn(delay, () => {
|
|
13
|
-
setScrollPosition({
|
|
13
|
+
setScrollPosition((prev) => prev.left === element.scrollLeft && prev.top === element.scrollTop ? prev : {
|
|
14
14
|
left: element.scrollLeft,
|
|
15
15
|
top: element.scrollTop
|
|
16
16
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScrollPosition.js","names":[],"sources":["../../../src/utilities/hooks/useScrollPosition.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { debounce, throttle } from 'throttle-debounce'\n\ntype TUseScrollPositionOptions = {\n element?: HTMLElement | null\n delay?: number\n delayMethod?: 'throttle' | 'debounce'\n}\n\ntype TUseScrollPositionOutput = {\n left: number\n top: number\n}\n\nexport const useScrollPosition = ({\n element,\n delay = 500,\n delayMethod = 'throttle'\n}: TUseScrollPositionOptions): TUseScrollPositionOutput => {\n const [scrollPosition, setScrollPosition] = useState({ left: 0, top: 0 })\n\n const delayMethodFn = useMemo(\n () => (delayMethod === 'debounce' ? debounce : throttle),\n [delayMethod]\n )\n\n useEffect(() => {\n if (!element) return\n\n const handleScroll = delayMethodFn(delay, () => {\n setScrollPosition({ left: element.scrollLeft, top: element.scrollTop })\n })\n\n element.addEventListener('scroll', handleScroll)\n\n return () => {\n element.removeEventListener('scroll', handleScroll)\n }\n }, [element, delayMethodFn, delay])\n\n return scrollPosition\n}\n"],"mappings":";;;AAcA,IAAa,qBAAqB,EAChC,SACA,QAAQ,KACR,cAAc,iBAC2C;CACzD,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;EAAE,MAAM;EAAG,KAAK;EAAG,CAAC;CAEzE,MAAM,gBAAgB,cACb,gBAAgB,aAAa,WAAW,UAC/C,CAAC,YAAY,CACd;AAED,iBAAgB;AACd,MAAI,CAAC,QAAS;EAEd,MAAM,eAAe,cAAc,aAAa;AAC9C,
|
|
1
|
+
{"version":3,"file":"useScrollPosition.js","names":[],"sources":["../../../src/utilities/hooks/useScrollPosition.ts"],"sourcesContent":["import { useEffect, useMemo, useState } from 'react'\nimport { debounce, throttle } from 'throttle-debounce'\n\ntype TUseScrollPositionOptions = {\n element?: HTMLElement | null\n delay?: number\n delayMethod?: 'throttle' | 'debounce'\n}\n\ntype TUseScrollPositionOutput = {\n left: number\n top: number\n}\n\nexport const useScrollPosition = ({\n element,\n delay = 500,\n delayMethod = 'throttle'\n}: TUseScrollPositionOptions): TUseScrollPositionOutput => {\n const [scrollPosition, setScrollPosition] = useState({ left: 0, top: 0 })\n\n const delayMethodFn = useMemo(\n () => (delayMethod === 'debounce' ? debounce : throttle),\n [delayMethod]\n )\n\n useEffect(() => {\n if (!element) return\n\n const handleScroll = delayMethodFn(delay, () => {\n setScrollPosition((prev) =>\n prev.left === element.scrollLeft && prev.top === element.scrollTop\n ? prev\n : { left: element.scrollLeft, top: element.scrollTop }\n )\n })\n\n element.addEventListener('scroll', handleScroll)\n\n return () => {\n element.removeEventListener('scroll', handleScroll)\n }\n }, [element, delayMethodFn, delay])\n\n return scrollPosition\n}\n"],"mappings":";;;AAcA,IAAa,qBAAqB,EAChC,SACA,QAAQ,KACR,cAAc,iBAC2C;CACzD,MAAM,CAAC,gBAAgB,qBAAqB,SAAS;EAAE,MAAM;EAAG,KAAK;EAAG,CAAC;CAEzE,MAAM,gBAAgB,cACb,gBAAgB,aAAa,WAAW,UAC/C,CAAC,YAAY,CACd;AAED,iBAAgB;AACd,MAAI,CAAC,QAAS;EAEd,MAAM,eAAe,cAAc,aAAa;AAC9C,sBAAmB,SACjB,KAAK,SAAS,QAAQ,cAAc,KAAK,QAAQ,QAAQ,YACrD,OACA;IAAE,MAAM,QAAQ;IAAY,KAAK,QAAQ;IAAW,CACzD;IACD;AAEF,UAAQ,iBAAiB,UAAU,aAAa;AAEhD,eAAa;AACX,WAAQ,oBAAoB,UAAU,aAAa;;IAEpD;EAAC;EAAS;EAAe;EAAM,CAAC;AAEnC,QAAO"}
|
|
@@ -7,9 +7,11 @@ var useSize = ({ element, delay = 500 }) => {
|
|
|
7
7
|
height: void 0
|
|
8
8
|
});
|
|
9
9
|
const handleResize = useCallback(() => {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const width = element?.clientWidth;
|
|
11
|
+
const height = element?.clientHeight;
|
|
12
|
+
setSize((prev) => prev.width === width && prev.height === height ? prev : {
|
|
13
|
+
width,
|
|
14
|
+
height
|
|
13
15
|
});
|
|
14
16
|
}, [element]);
|
|
15
17
|
useResizeObserver({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSize.js","names":[],"sources":["../../../src/utilities/hooks/useSize.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\n\nimport { useResizeObserver } from './useResizeObserver'\n\ninterface Size {\n width: number | undefined\n height: number | undefined\n}\n\nexport const useSize = ({\n element,\n delay = 500\n}: {\n element?: HTMLElement | null\n delay?: number\n}): Size => {\n const [size, setSize] = useState<Size>({\n width: undefined,\n height: undefined\n })\n\n const handleResize = useCallback(() => {\n
|
|
1
|
+
{"version":3,"file":"useSize.js","names":[],"sources":["../../../src/utilities/hooks/useSize.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react'\n\nimport { useResizeObserver } from './useResizeObserver'\n\ninterface Size {\n width: number | undefined\n height: number | undefined\n}\n\nexport const useSize = ({\n element,\n delay = 500\n}: {\n element?: HTMLElement | null\n delay?: number\n}): Size => {\n const [size, setSize] = useState<Size>({\n width: undefined,\n height: undefined\n })\n\n const handleResize = useCallback(() => {\n const width = element?.clientWidth\n const height = element?.clientHeight\n setSize((prev) =>\n prev.width === width && prev.height === height ? prev : { width, height }\n )\n }, [element])\n\n const elements = useMemo(() => [element], [element])\n\n useResizeObserver({\n delay,\n elements: elements,\n onResize: handleResize\n })\n\n return size\n}\n"],"mappings":";;;AASA,IAAa,WAAW,EACtB,SACA,QAAQ,UAIE;CACV,MAAM,CAAC,MAAM,WAAW,SAAe;EACrC,OAAO,KAAA;EACP,QAAQ,KAAA;EACT,CAAC;CAEF,MAAM,eAAe,kBAAkB;EACrC,MAAM,QAAQ,SAAS;EACvB,MAAM,SAAS,SAAS;AACxB,WAAS,SACP,KAAK,UAAU,SAAS,KAAK,WAAW,SAAS,OAAO;GAAE;GAAO;GAAQ,CAC1E;IACA,CAAC,QAAQ,CAAC;AAIb,mBAAkB;EAChB;EACU,UAJK,cAAc,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC;EAKlD,UAAU;EACX,CAAC;AAEF,QAAO"}
|