@mantine/hooks 9.4.0 → 9.4.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.
@@ -1,25 +1,25 @@
1
1
  "use client";
2
- const require_use_force_update = require("../use-force-update/use-force-update.cjs");
3
2
  let react = require("react");
4
3
  //#region packages/@mantine/hooks/src/use-map/use-map.ts
5
4
  function useMap(initialState) {
6
- const mapRef = (0, react.useRef)(new Map(initialState));
7
- const forceUpdate = require_use_force_update.useForceUpdate();
8
- mapRef.current.set = (...args) => {
5
+ const [map, setMap] = (0, react.useState)(() => new Map(initialState));
6
+ const mapRef = (0, react.useRef)(map);
7
+ mapRef.current = map;
8
+ map.set = (...args) => {
9
9
  Map.prototype.set.apply(mapRef.current, args);
10
- forceUpdate();
10
+ setMap(new Map(mapRef.current));
11
11
  return mapRef.current;
12
12
  };
13
- mapRef.current.clear = (...args) => {
13
+ map.clear = (...args) => {
14
14
  Map.prototype.clear.apply(mapRef.current, args);
15
- forceUpdate();
15
+ setMap(new Map(mapRef.current));
16
16
  };
17
- mapRef.current.delete = (...args) => {
17
+ map.delete = (...args) => {
18
18
  const res = Map.prototype.delete.apply(mapRef.current, args);
19
- forceUpdate();
19
+ setMap(new Map(mapRef.current));
20
20
  return res;
21
21
  };
22
- return mapRef.current;
22
+ return map;
23
23
  }
24
24
  //#endregion
25
25
  exports.useMap = useMap;
@@ -1 +1 @@
1
- {"version":3,"file":"use-map.cjs","names":["useForceUpdate"],"sources":["../../src/use-map/use-map.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useForceUpdate } from '../use-force-update/use-force-update';\n\nexport function useMap<T, V>(initialState?: [T, V][]): Map<T, V> {\n const mapRef = useRef(new Map<T, V>(initialState));\n const forceUpdate = useForceUpdate();\n\n mapRef.current.set = (...args) => {\n Map.prototype.set.apply(mapRef.current, args);\n forceUpdate();\n return mapRef.current;\n };\n\n mapRef.current.clear = (...args) => {\n Map.prototype.clear.apply(mapRef.current, args);\n forceUpdate();\n };\n\n mapRef.current.delete = (...args) => {\n const res = Map.prototype.delete.apply(mapRef.current, args);\n forceUpdate();\n\n return res;\n };\n\n return mapRef.current;\n}\n"],"mappings":";;;;AAGA,SAAgB,OAAa,cAAoC;CAC/D,MAAM,UAAA,GAAA,MAAA,OAAA,CAAgB,IAAI,IAAU,YAAY,CAAC;CACjD,MAAM,cAAcA,yBAAAA,eAAe;CAEnC,OAAO,QAAQ,OAAO,GAAG,SAAS;EAChC,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EAC5C,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OAAO,QAAQ,SAAS,GAAG,SAAS;EAClC,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,YAAY;CACd;CAEA,OAAO,QAAQ,UAAU,GAAG,SAAS;EACnC,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,YAAY;EAEZ,OAAO;CACT;CAEA,OAAO,OAAO;AAChB"}
1
+ {"version":3,"file":"use-map.cjs","names":[],"sources":["../../src/use-map/use-map.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nexport function useMap<T, V>(initialState?: [T, V][]): Map<T, V> {\n const [map, setMap] = useState(() => new Map<T, V>(initialState));\n const mapRef = useRef(map);\n mapRef.current = map;\n\n map.set = (...args) => {\n Map.prototype.set.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n return mapRef.current;\n };\n\n map.clear = (...args) => {\n Map.prototype.clear.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n };\n\n map.delete = (...args) => {\n const res = Map.prototype.delete.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n\n return res;\n };\n\n return map;\n}\n"],"mappings":";;;AAEA,SAAgB,OAAa,cAAoC;CAC/D,MAAM,CAAC,KAAK,WAAA,GAAA,MAAA,SAAA,OAAyB,IAAI,IAAU,YAAY,CAAC;CAChE,MAAM,UAAA,GAAA,MAAA,OAAA,CAAgB,GAAG;CACzB,OAAO,UAAU;CAEjB,IAAI,OAAO,GAAG,SAAS;EACrB,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EAC5C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO,OAAO;CAChB;CAEA,IAAI,SAAS,GAAG,SAAS;EACvB,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;CAChC;CAEA,IAAI,UAAU,GAAG,SAAS;EACxB,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAE9B,OAAO;CACT;CAEA,OAAO;AACT"}
@@ -3,7 +3,7 @@ const require_use_window_event = require("../use-window-event/use-window-event.c
3
3
  const require_use_reduced_motion = require("../use-reduced-motion/use-reduced-motion.cjs");
4
4
  let react = require("react");
5
5
  //#region packages/@mantine/hooks/src/use-scroll-into-view/use-scroll-into-view.ts
6
- function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScrollCancel, easing = easeInOutQuad, offset = 0, cancelable = true, isList = false } = {}) {
6
+ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScrollCancel, easing, offset = 0, cancelable = true, isList = false } = {}) {
7
7
  const frameID = (0, react.useRef)(0);
8
8
  const startTime = (0, react.useRef)(0);
9
9
  const shouldStop = (0, react.useRef)(false);
@@ -11,6 +11,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
11
11
  const scrollableRef = (0, react.useRef)(null);
12
12
  const targetRef = (0, react.useRef)(null);
13
13
  const reducedMotion = require_use_reduced_motion.useReducedMotion();
14
+ const _easing = easing ?? easeInOutQuad;
14
15
  const cancel = () => {
15
16
  if (frameID.current) {
16
17
  cancelAnimationFrame(frameID.current);
@@ -38,7 +39,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
38
39
  if (startTime.current === 0) startTime.current = performance.now();
39
40
  const elapsed = performance.now() - startTime.current;
40
41
  const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;
41
- const distance = start + change * easing(t);
42
+ const distance = start + change * _easing(t);
42
43
  setScrollParam({
43
44
  parent: scrollableRef.current,
44
45
  axis,
@@ -58,7 +59,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
58
59
  }, [
59
60
  axis,
60
61
  duration,
61
- easing,
62
+ _easing,
62
63
  isList,
63
64
  offset,
64
65
  onScrollFinish,
@@ -1 +1 @@
1
- {"version":3,"file":"use-scroll-into-view.cjs","names":["useReducedMotion"],"sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Callback fired when scroll animation is canceled by user interaction */\n onScrollCancel?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n scrolling: boolean;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n onScrollCancel,\n easing = easeInOutQuad,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n const [scrolling, setScrolling] = useState(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n frameID.current = 0;\n setScrolling(false);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n setScrolling(true);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n if (shouldStop.current) {\n typeof onScrollCancel === 'function' && onScrollCancel();\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n }\n startTime.current = 0;\n frameID.current = 0;\n setScrolling(false);\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, easing, isList, offset, onScrollFinish, onScrollCancel, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n scrolling,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-scroll-into-view.cjs","names":["useReducedMotion"],"sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Callback fired when scroll animation is canceled by user interaction */\n onScrollCancel?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n scrolling: boolean;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n onScrollCancel,\n easing,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n const [scrolling, setScrolling] = useState(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const _easing = easing ?? easeInOutQuad;\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n frameID.current = 0;\n setScrolling(false);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n setScrolling(true);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * _easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n if (shouldStop.current) {\n typeof onScrollCancel === 'function' && onScrollCancel();\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n }\n startTime.current = 0;\n frameID.current = 0;\n setScrolling(false);\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, _easing, isList, offset, onScrollFinish, onScrollCancel, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n scrolling,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  "use client";
2
- const require_use_force_update = require("../use-force-update/use-force-update.cjs");
3
2
  let react = require("react");
4
3
  //#region packages/@mantine/hooks/src/use-set/use-set.ts
5
4
  function readonlySetLikeToSet(input) {
@@ -14,28 +13,29 @@ function readonlySetLikeToSet(input) {
14
13
  return result;
15
14
  }
16
15
  function useSet(values) {
17
- const setRef = (0, react.useRef)(new Set(values));
18
- const forceUpdate = require_use_force_update.useForceUpdate();
19
- setRef.current.add = (...args) => {
16
+ const [set, setSet] = (0, react.useState)(() => new Set(values));
17
+ const setRef = (0, react.useRef)(set);
18
+ setRef.current = set;
19
+ set.add = (...args) => {
20
20
  const res = Set.prototype.add.apply(setRef.current, args);
21
- forceUpdate();
21
+ setSet(new Set(setRef.current));
22
22
  return res;
23
23
  };
24
- setRef.current.clear = (...args) => {
24
+ set.clear = (...args) => {
25
25
  Set.prototype.clear.apply(setRef.current, args);
26
- forceUpdate();
26
+ setSet(new Set(setRef.current));
27
27
  };
28
- setRef.current.delete = (...args) => {
28
+ set.delete = (...args) => {
29
29
  const res = Set.prototype.delete.apply(setRef.current, args);
30
- forceUpdate();
30
+ setSet(new Set(setRef.current));
31
31
  return res;
32
32
  };
33
- setRef.current.union = (other) => {
33
+ set.union = (other) => {
34
34
  const result = new Set(setRef.current);
35
35
  readonlySetLikeToSet(other).forEach((item) => result.add(item));
36
36
  return result;
37
37
  };
38
- setRef.current.intersection = (other) => {
38
+ set.intersection = (other) => {
39
39
  const result = /* @__PURE__ */ new Set();
40
40
  const otherSet = readonlySetLikeToSet(other);
41
41
  setRef.current.forEach((item) => {
@@ -43,7 +43,7 @@ function useSet(values) {
43
43
  });
44
44
  return result;
45
45
  };
46
- setRef.current.difference = (other) => {
46
+ set.difference = (other) => {
47
47
  const result = /* @__PURE__ */ new Set();
48
48
  const otherSet = readonlySetLikeToSet(other);
49
49
  setRef.current.forEach((item) => {
@@ -51,7 +51,7 @@ function useSet(values) {
51
51
  });
52
52
  return result;
53
53
  };
54
- setRef.current.symmetricDifference = (other) => {
54
+ set.symmetricDifference = (other) => {
55
55
  const result = /* @__PURE__ */ new Set();
56
56
  const otherSet = readonlySetLikeToSet(other);
57
57
  setRef.current.forEach((item) => {
@@ -62,7 +62,7 @@ function useSet(values) {
62
62
  });
63
63
  return result;
64
64
  };
65
- return setRef.current;
65
+ return set;
66
66
  }
67
67
  //#endregion
68
68
  exports.useSet = useSet;
@@ -1 +1 @@
1
- {"version":3,"file":"use-set.cjs","names":["useForceUpdate"],"sources":["../../src/use-set/use-set.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useForceUpdate } from '../use-force-update/use-force-update';\n\nexport function readonlySetLikeToSet<T>(input: ReadonlySetLike<T>): Set<T> {\n if (input instanceof Set) {\n return input;\n }\n const result = new Set<T>();\n const iterator = input.keys();\n let next = iterator.next();\n while (!next.done) {\n result.add(next.value);\n next = iterator.next();\n }\n return result;\n}\n\nexport function useSet<T>(values?: T[]): Set<T> {\n const setRef = useRef(new Set(values));\n const forceUpdate = useForceUpdate();\n\n setRef.current.add = (...args) => {\n const res = Set.prototype.add.apply(setRef.current, args);\n forceUpdate();\n return res;\n };\n\n setRef.current.clear = (...args) => {\n Set.prototype.clear.apply(setRef.current, args);\n forceUpdate();\n };\n\n setRef.current.delete = (...args) => {\n const res = Set.prototype.delete.apply(setRef.current, args);\n forceUpdate();\n return res;\n };\n\n setRef.current.union = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>(setRef.current as Set<T>);\n readonlySetLikeToSet(other).forEach((item) => result.add(item));\n return result;\n };\n\n setRef.current.intersection = <U>(other: ReadonlySetLike<U>): Set<T & U> => {\n const result = new Set<T & U>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (otherSet.has(item as any)) {\n result.add(item as T & U);\n }\n });\n return result;\n };\n\n setRef.current.difference = <U>(other: ReadonlySetLike<U>): Set<T> => {\n const result = new Set<T>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n return result;\n };\n\n setRef.current.symmetricDifference = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>();\n const otherSet = readonlySetLikeToSet(other);\n\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n\n otherSet.forEach((item) => {\n if (!setRef.current.has(item as any)) {\n result.add(item);\n }\n });\n\n return result;\n };\n\n return setRef.current;\n}\n"],"mappings":";;;;AAGA,SAAgB,qBAAwB,OAAmC;CACzE,IAAI,iBAAiB,KACnB,OAAO;CAET,MAAM,yBAAS,IAAI,IAAO;CAC1B,MAAM,WAAW,MAAM,KAAK;CAC5B,IAAI,OAAO,SAAS,KAAK;CACzB,OAAO,CAAC,KAAK,MAAM;EACjB,OAAO,IAAI,KAAK,KAAK;EACrB,OAAO,SAAS,KAAK;CACvB;CACA,OAAO;AACT;AAEA,SAAgB,OAAU,QAAsB;CAC9C,MAAM,UAAA,GAAA,MAAA,OAAA,CAAgB,IAAI,IAAI,MAAM,CAAC;CACrC,MAAM,cAAcA,yBAAAA,eAAe;CAEnC,OAAO,QAAQ,OAAO,GAAG,SAAS;EAChC,MAAM,MAAM,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EACxD,YAAY;EACZ,OAAO;CACT;CAEA,OAAO,QAAQ,SAAS,GAAG,SAAS;EAClC,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,YAAY;CACd;CAEA,OAAO,QAAQ,UAAU,GAAG,SAAS;EACnC,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,YAAY;EACZ,OAAO;CACT;CAEA,OAAO,QAAQ,SAAY,UAA0C;EACnE,MAAM,SAAS,IAAI,IAAW,OAAO,OAAiB;EACtD,qBAAqB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,IAAI,IAAI,CAAC;EAC9D,OAAO;CACT;CAEA,OAAO,QAAQ,gBAAmB,UAA0C;EAC1E,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,SAAS,IAAI,IAAW,GAC1B,OAAO,IAAI,IAAa;EAE5B,CAAC;EACD,OAAO;CACT;CAEA,OAAO,QAAQ,cAAiB,UAAsC;EACpE,MAAM,yBAAS,IAAI,IAAO;EAC1B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EACD,OAAO;CACT;CAEA,OAAO,QAAQ,uBAA0B,UAA0C;EACjF,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAE3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,SAAS,SAAS,SAAS;GACzB,IAAI,CAAC,OAAO,QAAQ,IAAI,IAAW,GACjC,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,OAAO;CACT;CAEA,OAAO,OAAO;AAChB"}
1
+ {"version":3,"file":"use-set.cjs","names":[],"sources":["../../src/use-set/use-set.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nexport function readonlySetLikeToSet<T>(input: ReadonlySetLike<T>): Set<T> {\n if (input instanceof Set) {\n return input;\n }\n const result = new Set<T>();\n const iterator = input.keys();\n let next = iterator.next();\n while (!next.done) {\n result.add(next.value);\n next = iterator.next();\n }\n return result;\n}\n\nexport function useSet<T>(values?: T[]): Set<T> {\n const [set, setSet] = useState(() => new Set(values));\n const setRef = useRef(set);\n setRef.current = set;\n\n set.add = (...args) => {\n const res = Set.prototype.add.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n return res;\n };\n\n set.clear = (...args) => {\n Set.prototype.clear.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n };\n\n set.delete = (...args) => {\n const res = Set.prototype.delete.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n return res;\n };\n\n set.union = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>(setRef.current as Set<T>);\n readonlySetLikeToSet(other).forEach((item) => result.add(item));\n return result;\n };\n\n set.intersection = <U>(other: ReadonlySetLike<U>): Set<T & U> => {\n const result = new Set<T & U>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (otherSet.has(item as any)) {\n result.add(item as T & U);\n }\n });\n return result;\n };\n\n set.difference = <U>(other: ReadonlySetLike<U>): Set<T> => {\n const result = new Set<T>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n return result;\n };\n\n set.symmetricDifference = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>();\n const otherSet = readonlySetLikeToSet(other);\n\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n\n otherSet.forEach((item) => {\n if (!setRef.current.has(item as any)) {\n result.add(item);\n }\n });\n\n return result;\n };\n\n return set;\n}\n"],"mappings":";;;AAEA,SAAgB,qBAAwB,OAAmC;CACzE,IAAI,iBAAiB,KACnB,OAAO;CAET,MAAM,yBAAS,IAAI,IAAO;CAC1B,MAAM,WAAW,MAAM,KAAK;CAC5B,IAAI,OAAO,SAAS,KAAK;CACzB,OAAO,CAAC,KAAK,MAAM;EACjB,OAAO,IAAI,KAAK,KAAK;EACrB,OAAO,SAAS,KAAK;CACvB;CACA,OAAO;AACT;AAEA,SAAgB,OAAU,QAAsB;CAC9C,MAAM,CAAC,KAAK,WAAA,GAAA,MAAA,SAAA,OAAyB,IAAI,IAAI,MAAM,CAAC;CACpD,MAAM,UAAA,GAAA,MAAA,OAAA,CAAgB,GAAG;CACzB,OAAO,UAAU;CAEjB,IAAI,OAAO,GAAG,SAAS;EACrB,MAAM,MAAM,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EACxD,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO;CACT;CAEA,IAAI,SAAS,GAAG,SAAS;EACvB,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;CAChC;CAEA,IAAI,UAAU,GAAG,SAAS;EACxB,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO;CACT;CAEA,IAAI,SAAY,UAA0C;EACxD,MAAM,SAAS,IAAI,IAAW,OAAO,OAAiB;EACtD,qBAAqB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,IAAI,IAAI,CAAC;EAC9D,OAAO;CACT;CAEA,IAAI,gBAAmB,UAA0C;EAC/D,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,SAAS,IAAI,IAAW,GAC1B,OAAO,IAAI,IAAa;EAE5B,CAAC;EACD,OAAO;CACT;CAEA,IAAI,cAAiB,UAAsC;EACzD,MAAM,yBAAS,IAAI,IAAO;EAC1B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EACD,OAAO;CACT;CAEA,IAAI,uBAA0B,UAA0C;EACtE,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAE3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,SAAS,SAAS,SAAS;GACzB,IAAI,CAAC,OAAO,QAAQ,IAAI,IAAW,GACjC,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,OAAO;CACT;CAEA,OAAO;AACT"}
@@ -1,25 +1,25 @@
1
1
  "use client";
2
- import { useForceUpdate } from "../use-force-update/use-force-update.mjs";
3
- import { useRef } from "react";
2
+ import { useRef, useState } from "react";
4
3
  //#region packages/@mantine/hooks/src/use-map/use-map.ts
5
4
  function useMap(initialState) {
6
- const mapRef = useRef(new Map(initialState));
7
- const forceUpdate = useForceUpdate();
8
- mapRef.current.set = (...args) => {
5
+ const [map, setMap] = useState(() => new Map(initialState));
6
+ const mapRef = useRef(map);
7
+ mapRef.current = map;
8
+ map.set = (...args) => {
9
9
  Map.prototype.set.apply(mapRef.current, args);
10
- forceUpdate();
10
+ setMap(new Map(mapRef.current));
11
11
  return mapRef.current;
12
12
  };
13
- mapRef.current.clear = (...args) => {
13
+ map.clear = (...args) => {
14
14
  Map.prototype.clear.apply(mapRef.current, args);
15
- forceUpdate();
15
+ setMap(new Map(mapRef.current));
16
16
  };
17
- mapRef.current.delete = (...args) => {
17
+ map.delete = (...args) => {
18
18
  const res = Map.prototype.delete.apply(mapRef.current, args);
19
- forceUpdate();
19
+ setMap(new Map(mapRef.current));
20
20
  return res;
21
21
  };
22
- return mapRef.current;
22
+ return map;
23
23
  }
24
24
  //#endregion
25
25
  export { useMap };
@@ -1 +1 @@
1
- {"version":3,"file":"use-map.mjs","names":[],"sources":["../../src/use-map/use-map.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useForceUpdate } from '../use-force-update/use-force-update';\n\nexport function useMap<T, V>(initialState?: [T, V][]): Map<T, V> {\n const mapRef = useRef(new Map<T, V>(initialState));\n const forceUpdate = useForceUpdate();\n\n mapRef.current.set = (...args) => {\n Map.prototype.set.apply(mapRef.current, args);\n forceUpdate();\n return mapRef.current;\n };\n\n mapRef.current.clear = (...args) => {\n Map.prototype.clear.apply(mapRef.current, args);\n forceUpdate();\n };\n\n mapRef.current.delete = (...args) => {\n const res = Map.prototype.delete.apply(mapRef.current, args);\n forceUpdate();\n\n return res;\n };\n\n return mapRef.current;\n}\n"],"mappings":";;;;AAGA,SAAgB,OAAa,cAAoC;CAC/D,MAAM,SAAS,OAAO,IAAI,IAAU,YAAY,CAAC;CACjD,MAAM,cAAc,eAAe;CAEnC,OAAO,QAAQ,OAAO,GAAG,SAAS;EAChC,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EAC5C,YAAY;EACZ,OAAO,OAAO;CAChB;CAEA,OAAO,QAAQ,SAAS,GAAG,SAAS;EAClC,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,YAAY;CACd;CAEA,OAAO,QAAQ,UAAU,GAAG,SAAS;EACnC,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,YAAY;EAEZ,OAAO;CACT;CAEA,OAAO,OAAO;AAChB"}
1
+ {"version":3,"file":"use-map.mjs","names":[],"sources":["../../src/use-map/use-map.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nexport function useMap<T, V>(initialState?: [T, V][]): Map<T, V> {\n const [map, setMap] = useState(() => new Map<T, V>(initialState));\n const mapRef = useRef(map);\n mapRef.current = map;\n\n map.set = (...args) => {\n Map.prototype.set.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n return mapRef.current;\n };\n\n map.clear = (...args) => {\n Map.prototype.clear.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n };\n\n map.delete = (...args) => {\n const res = Map.prototype.delete.apply(mapRef.current, args);\n setMap(new Map(mapRef.current));\n\n return res;\n };\n\n return map;\n}\n"],"mappings":";;;AAEA,SAAgB,OAAa,cAAoC;CAC/D,MAAM,CAAC,KAAK,UAAU,eAAe,IAAI,IAAU,YAAY,CAAC;CAChE,MAAM,SAAS,OAAO,GAAG;CACzB,OAAO,UAAU;CAEjB,IAAI,OAAO,GAAG,SAAS;EACrB,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EAC5C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO,OAAO;CAChB;CAEA,IAAI,SAAS,GAAG,SAAS;EACvB,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;CAChC;CAEA,IAAI,UAAU,GAAG,SAAS;EACxB,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAE9B,OAAO;CACT;CAEA,OAAO;AACT"}
@@ -3,7 +3,7 @@ import { useWindowEvent } from "../use-window-event/use-window-event.mjs";
3
3
  import { useReducedMotion } from "../use-reduced-motion/use-reduced-motion.mjs";
4
4
  import { useCallback, useEffect, useRef, useState } from "react";
5
5
  //#region packages/@mantine/hooks/src/use-scroll-into-view/use-scroll-into-view.ts
6
- function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScrollCancel, easing = easeInOutQuad, offset = 0, cancelable = true, isList = false } = {}) {
6
+ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScrollCancel, easing, offset = 0, cancelable = true, isList = false } = {}) {
7
7
  const frameID = useRef(0);
8
8
  const startTime = useRef(0);
9
9
  const shouldStop = useRef(false);
@@ -11,6 +11,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
11
11
  const scrollableRef = useRef(null);
12
12
  const targetRef = useRef(null);
13
13
  const reducedMotion = useReducedMotion();
14
+ const _easing = easing ?? easeInOutQuad;
14
15
  const cancel = () => {
15
16
  if (frameID.current) {
16
17
  cancelAnimationFrame(frameID.current);
@@ -38,7 +39,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
38
39
  if (startTime.current === 0) startTime.current = performance.now();
39
40
  const elapsed = performance.now() - startTime.current;
40
41
  const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;
41
- const distance = start + change * easing(t);
42
+ const distance = start + change * _easing(t);
42
43
  setScrollParam({
43
44
  parent: scrollableRef.current,
44
45
  axis,
@@ -58,7 +59,7 @@ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, onScro
58
59
  }, [
59
60
  axis,
60
61
  duration,
61
- easing,
62
+ _easing,
62
63
  isList,
63
64
  offset,
64
65
  onScrollFinish,
@@ -1 +1 @@
1
- {"version":3,"file":"use-scroll-into-view.mjs","names":[],"sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Callback fired when scroll animation is canceled by user interaction */\n onScrollCancel?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n scrolling: boolean;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n onScrollCancel,\n easing = easeInOutQuad,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n const [scrolling, setScrolling] = useState(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n frameID.current = 0;\n setScrolling(false);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n setScrolling(true);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n if (shouldStop.current) {\n typeof onScrollCancel === 'function' && onScrollCancel();\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n }\n startTime.current = 0;\n frameID.current = 0;\n setScrolling(false);\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, easing, isList, offset, onScrollFinish, onScrollCancel, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n scrolling,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"use-scroll-into-view.mjs","names":[],"sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Callback fired when scroll animation is canceled by user interaction */\n onScrollCancel?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n scrolling: boolean;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n onScrollCancel,\n easing,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n const [scrolling, setScrolling] = useState(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const _easing = easing ?? easeInOutQuad;\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n frameID.current = 0;\n setScrolling(false);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n setScrolling(true);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * _easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n if (shouldStop.current) {\n typeof onScrollCancel === 'function' && onScrollCancel();\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n }\n startTime.current = 0;\n frameID.current = 0;\n setScrolling(false);\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, _easing, isList, offset, onScrollFinish, onScrollCancel, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n scrolling,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"mappings":"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"}
@@ -1,6 +1,5 @@
1
1
  "use client";
2
- import { useForceUpdate } from "../use-force-update/use-force-update.mjs";
3
- import { useRef } from "react";
2
+ import { useRef, useState } from "react";
4
3
  //#region packages/@mantine/hooks/src/use-set/use-set.ts
5
4
  function readonlySetLikeToSet(input) {
6
5
  if (input instanceof Set) return input;
@@ -14,28 +13,29 @@ function readonlySetLikeToSet(input) {
14
13
  return result;
15
14
  }
16
15
  function useSet(values) {
17
- const setRef = useRef(new Set(values));
18
- const forceUpdate = useForceUpdate();
19
- setRef.current.add = (...args) => {
16
+ const [set, setSet] = useState(() => new Set(values));
17
+ const setRef = useRef(set);
18
+ setRef.current = set;
19
+ set.add = (...args) => {
20
20
  const res = Set.prototype.add.apply(setRef.current, args);
21
- forceUpdate();
21
+ setSet(new Set(setRef.current));
22
22
  return res;
23
23
  };
24
- setRef.current.clear = (...args) => {
24
+ set.clear = (...args) => {
25
25
  Set.prototype.clear.apply(setRef.current, args);
26
- forceUpdate();
26
+ setSet(new Set(setRef.current));
27
27
  };
28
- setRef.current.delete = (...args) => {
28
+ set.delete = (...args) => {
29
29
  const res = Set.prototype.delete.apply(setRef.current, args);
30
- forceUpdate();
30
+ setSet(new Set(setRef.current));
31
31
  return res;
32
32
  };
33
- setRef.current.union = (other) => {
33
+ set.union = (other) => {
34
34
  const result = new Set(setRef.current);
35
35
  readonlySetLikeToSet(other).forEach((item) => result.add(item));
36
36
  return result;
37
37
  };
38
- setRef.current.intersection = (other) => {
38
+ set.intersection = (other) => {
39
39
  const result = /* @__PURE__ */ new Set();
40
40
  const otherSet = readonlySetLikeToSet(other);
41
41
  setRef.current.forEach((item) => {
@@ -43,7 +43,7 @@ function useSet(values) {
43
43
  });
44
44
  return result;
45
45
  };
46
- setRef.current.difference = (other) => {
46
+ set.difference = (other) => {
47
47
  const result = /* @__PURE__ */ new Set();
48
48
  const otherSet = readonlySetLikeToSet(other);
49
49
  setRef.current.forEach((item) => {
@@ -51,7 +51,7 @@ function useSet(values) {
51
51
  });
52
52
  return result;
53
53
  };
54
- setRef.current.symmetricDifference = (other) => {
54
+ set.symmetricDifference = (other) => {
55
55
  const result = /* @__PURE__ */ new Set();
56
56
  const otherSet = readonlySetLikeToSet(other);
57
57
  setRef.current.forEach((item) => {
@@ -62,7 +62,7 @@ function useSet(values) {
62
62
  });
63
63
  return result;
64
64
  };
65
- return setRef.current;
65
+ return set;
66
66
  }
67
67
  //#endregion
68
68
  export { useSet };
@@ -1 +1 @@
1
- {"version":3,"file":"use-set.mjs","names":[],"sources":["../../src/use-set/use-set.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useForceUpdate } from '../use-force-update/use-force-update';\n\nexport function readonlySetLikeToSet<T>(input: ReadonlySetLike<T>): Set<T> {\n if (input instanceof Set) {\n return input;\n }\n const result = new Set<T>();\n const iterator = input.keys();\n let next = iterator.next();\n while (!next.done) {\n result.add(next.value);\n next = iterator.next();\n }\n return result;\n}\n\nexport function useSet<T>(values?: T[]): Set<T> {\n const setRef = useRef(new Set(values));\n const forceUpdate = useForceUpdate();\n\n setRef.current.add = (...args) => {\n const res = Set.prototype.add.apply(setRef.current, args);\n forceUpdate();\n return res;\n };\n\n setRef.current.clear = (...args) => {\n Set.prototype.clear.apply(setRef.current, args);\n forceUpdate();\n };\n\n setRef.current.delete = (...args) => {\n const res = Set.prototype.delete.apply(setRef.current, args);\n forceUpdate();\n return res;\n };\n\n setRef.current.union = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>(setRef.current as Set<T>);\n readonlySetLikeToSet(other).forEach((item) => result.add(item));\n return result;\n };\n\n setRef.current.intersection = <U>(other: ReadonlySetLike<U>): Set<T & U> => {\n const result = new Set<T & U>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (otherSet.has(item as any)) {\n result.add(item as T & U);\n }\n });\n return result;\n };\n\n setRef.current.difference = <U>(other: ReadonlySetLike<U>): Set<T> => {\n const result = new Set<T>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n return result;\n };\n\n setRef.current.symmetricDifference = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>();\n const otherSet = readonlySetLikeToSet(other);\n\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n\n otherSet.forEach((item) => {\n if (!setRef.current.has(item as any)) {\n result.add(item);\n }\n });\n\n return result;\n };\n\n return setRef.current;\n}\n"],"mappings":";;;;AAGA,SAAgB,qBAAwB,OAAmC;CACzE,IAAI,iBAAiB,KACnB,OAAO;CAET,MAAM,yBAAS,IAAI,IAAO;CAC1B,MAAM,WAAW,MAAM,KAAK;CAC5B,IAAI,OAAO,SAAS,KAAK;CACzB,OAAO,CAAC,KAAK,MAAM;EACjB,OAAO,IAAI,KAAK,KAAK;EACrB,OAAO,SAAS,KAAK;CACvB;CACA,OAAO;AACT;AAEA,SAAgB,OAAU,QAAsB;CAC9C,MAAM,SAAS,OAAO,IAAI,IAAI,MAAM,CAAC;CACrC,MAAM,cAAc,eAAe;CAEnC,OAAO,QAAQ,OAAO,GAAG,SAAS;EAChC,MAAM,MAAM,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EACxD,YAAY;EACZ,OAAO;CACT;CAEA,OAAO,QAAQ,SAAS,GAAG,SAAS;EAClC,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,YAAY;CACd;CAEA,OAAO,QAAQ,UAAU,GAAG,SAAS;EACnC,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,YAAY;EACZ,OAAO;CACT;CAEA,OAAO,QAAQ,SAAY,UAA0C;EACnE,MAAM,SAAS,IAAI,IAAW,OAAO,OAAiB;EACtD,qBAAqB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,IAAI,IAAI,CAAC;EAC9D,OAAO;CACT;CAEA,OAAO,QAAQ,gBAAmB,UAA0C;EAC1E,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,SAAS,IAAI,IAAW,GAC1B,OAAO,IAAI,IAAa;EAE5B,CAAC;EACD,OAAO;CACT;CAEA,OAAO,QAAQ,cAAiB,UAAsC;EACpE,MAAM,yBAAS,IAAI,IAAO;EAC1B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EACD,OAAO;CACT;CAEA,OAAO,QAAQ,uBAA0B,UAA0C;EACjF,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAE3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,SAAS,SAAS,SAAS;GACzB,IAAI,CAAC,OAAO,QAAQ,IAAI,IAAW,GACjC,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,OAAO;CACT;CAEA,OAAO,OAAO;AAChB"}
1
+ {"version":3,"file":"use-set.mjs","names":[],"sources":["../../src/use-set/use-set.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nexport function readonlySetLikeToSet<T>(input: ReadonlySetLike<T>): Set<T> {\n if (input instanceof Set) {\n return input;\n }\n const result = new Set<T>();\n const iterator = input.keys();\n let next = iterator.next();\n while (!next.done) {\n result.add(next.value);\n next = iterator.next();\n }\n return result;\n}\n\nexport function useSet<T>(values?: T[]): Set<T> {\n const [set, setSet] = useState(() => new Set(values));\n const setRef = useRef(set);\n setRef.current = set;\n\n set.add = (...args) => {\n const res = Set.prototype.add.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n return res;\n };\n\n set.clear = (...args) => {\n Set.prototype.clear.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n };\n\n set.delete = (...args) => {\n const res = Set.prototype.delete.apply(setRef.current, args);\n setSet(new Set(setRef.current));\n return res;\n };\n\n set.union = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>(setRef.current as Set<T>);\n readonlySetLikeToSet(other).forEach((item) => result.add(item));\n return result;\n };\n\n set.intersection = <U>(other: ReadonlySetLike<U>): Set<T & U> => {\n const result = new Set<T & U>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (otherSet.has(item as any)) {\n result.add(item as T & U);\n }\n });\n return result;\n };\n\n set.difference = <U>(other: ReadonlySetLike<U>): Set<T> => {\n const result = new Set<T>();\n const otherSet = readonlySetLikeToSet(other);\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n return result;\n };\n\n set.symmetricDifference = <U>(other: ReadonlySetLike<U>): Set<T | U> => {\n const result = new Set<T | U>();\n const otherSet = readonlySetLikeToSet(other);\n\n setRef.current.forEach((item) => {\n if (!otherSet.has(item as any)) {\n result.add(item);\n }\n });\n\n otherSet.forEach((item) => {\n if (!setRef.current.has(item as any)) {\n result.add(item);\n }\n });\n\n return result;\n };\n\n return set;\n}\n"],"mappings":";;;AAEA,SAAgB,qBAAwB,OAAmC;CACzE,IAAI,iBAAiB,KACnB,OAAO;CAET,MAAM,yBAAS,IAAI,IAAO;CAC1B,MAAM,WAAW,MAAM,KAAK;CAC5B,IAAI,OAAO,SAAS,KAAK;CACzB,OAAO,CAAC,KAAK,MAAM;EACjB,OAAO,IAAI,KAAK,KAAK;EACrB,OAAO,SAAS,KAAK;CACvB;CACA,OAAO;AACT;AAEA,SAAgB,OAAU,QAAsB;CAC9C,MAAM,CAAC,KAAK,UAAU,eAAe,IAAI,IAAI,MAAM,CAAC;CACpD,MAAM,SAAS,OAAO,GAAG;CACzB,OAAO,UAAU;CAEjB,IAAI,OAAO,GAAG,SAAS;EACrB,MAAM,MAAM,IAAI,UAAU,IAAI,MAAM,OAAO,SAAS,IAAI;EACxD,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO;CACT;CAEA,IAAI,SAAS,GAAG,SAAS;EACvB,IAAI,UAAU,MAAM,MAAM,OAAO,SAAS,IAAI;EAC9C,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;CAChC;CAEA,IAAI,UAAU,GAAG,SAAS;EACxB,MAAM,MAAM,IAAI,UAAU,OAAO,MAAM,OAAO,SAAS,IAAI;EAC3D,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC;EAC9B,OAAO;CACT;CAEA,IAAI,SAAY,UAA0C;EACxD,MAAM,SAAS,IAAI,IAAW,OAAO,OAAiB;EACtD,qBAAqB,KAAK,CAAC,CAAC,SAAS,SAAS,OAAO,IAAI,IAAI,CAAC;EAC9D,OAAO;CACT;CAEA,IAAI,gBAAmB,UAA0C;EAC/D,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,SAAS,IAAI,IAAW,GAC1B,OAAO,IAAI,IAAa;EAE5B,CAAC;EACD,OAAO;CACT;CAEA,IAAI,cAAiB,UAAsC;EACzD,MAAM,yBAAS,IAAI,IAAO;EAC1B,MAAM,WAAW,qBAAqB,KAAK;EAC3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EACD,OAAO;CACT;CAEA,IAAI,uBAA0B,UAA0C;EACtE,MAAM,yBAAS,IAAI,IAAW;EAC9B,MAAM,WAAW,qBAAqB,KAAK;EAE3C,OAAO,QAAQ,SAAS,SAAS;GAC/B,IAAI,CAAC,SAAS,IAAI,IAAW,GAC3B,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,SAAS,SAAS,SAAS;GACzB,IAAI,CAAC,OAAO,QAAQ,IAAI,IAAW,GACjC,OAAO,IAAI,IAAI;EAEnB,CAAC;EAED,OAAO;CACT;CAEA,OAAO;AACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mantine/hooks",
3
- "version": "9.4.0",
3
+ "version": "9.4.2",
4
4
  "description": "A collection of 50+ hooks for state and UI management",
5
5
  "homepage": "https://mantine.dev",
6
6
  "license": "MIT",