@helpwave/hightide 0.12.2 → 0.12.4

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.mjs CHANGED
@@ -10300,11 +10300,11 @@ var SelectButton = forwardRef4(
10300
10300
  );
10301
10301
 
10302
10302
  // src/components/user-interaction/Select/SelectContent.tsx
10303
- import { forwardRef as forwardRef9, useCallback as useCallback15, useEffect as useEffect19, useImperativeHandle as useImperativeHandle6, useRef as useRef13 } from "react";
10303
+ import { forwardRef as forwardRef9, useCallback as useCallback15, useEffect as useEffect19, useImperativeHandle as useImperativeHandle5, useRef as useRef13 } from "react";
10304
10304
  import clsx8 from "clsx";
10305
10305
 
10306
10306
  // src/components/layout/popup/PopUp.tsx
10307
- import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext6, useImperativeHandle as useImperativeHandle4, useMemo as useMemo13 } from "react";
10307
+ import { forwardRef as forwardRef7, useCallback as useCallback13, useContext as useContext6, useImperativeHandle as useImperativeHandle3, useMemo as useMemo13 } from "react";
10308
10308
 
10309
10309
  // src/components/utils/Portal.tsx
10310
10310
  import { createPortal } from "react-dom";
@@ -10662,7 +10662,6 @@ var AnchoredFloatingContainer = forwardRef5(function FloatingContainer({
10662
10662
 
10663
10663
  // src/components/utils/FocusTrap.tsx
10664
10664
  import { useRef as useRef10 } from "react";
10665
- import { useImperativeHandle as useImperativeHandle3 } from "react";
10666
10665
  import { forwardRef as forwardRef6 } from "react";
10667
10666
 
10668
10667
  // src/hooks/focus/useFocusTrap.ts
@@ -10683,7 +10682,7 @@ var createFocusGuard = () => {
10683
10682
  return div;
10684
10683
  };
10685
10684
  function getContainedFocusableElements(element) {
10686
- return element?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
10685
+ return [...element?.querySelectorAll('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])') ?? []];
10687
10686
  }
10688
10687
  var FocusTrapService = class {
10689
10688
  constructor() {
@@ -10693,7 +10692,7 @@ var FocusTrapService = class {
10693
10692
  const active = this.getActive();
10694
10693
  if (!active || !active.container.current) return;
10695
10694
  const { container } = active;
10696
- if (!container.current.contains(event.target)) {
10695
+ if (container.current && !container.current.contains(event.target)) {
10697
10696
  this.focusElement();
10698
10697
  }
10699
10698
  };
@@ -10709,10 +10708,10 @@ var FocusTrapService = class {
10709
10708
  const containerElement = container.current;
10710
10709
  if (initialFocusElement?.current) {
10711
10710
  initialFocusElement.current.focus();
10712
- } else {
10711
+ } else if (containerElement) {
10713
10712
  const elements = getContainedFocusableElements(containerElement);
10714
10713
  if (elements && elements.length > 0) {
10715
- const first = elements.item(0);
10714
+ const first = elements[0];
10716
10715
  first.focus();
10717
10716
  } else {
10718
10717
  containerElement.focus();
@@ -10789,10 +10788,10 @@ var useFocusTrap = ({
10789
10788
  const containerElement = container.current;
10790
10789
  if (initialFocus?.current) {
10791
10790
  initialFocus.current.focus();
10792
- } else {
10791
+ } else if (containerElement) {
10793
10792
  const elements = getContainedFocusableElements(containerElement);
10794
10793
  if (elements && elements.length > 0) {
10795
- const first = elements.item(0);
10794
+ const first = elements[0];
10796
10795
  first.focus();
10797
10796
  } else {
10798
10797
  console.warn("No focusable elements found in the focus trap. Affected element: ", containerElement);
@@ -10820,12 +10819,13 @@ var useFocusTrap = ({
10820
10819
  service.register({ id, pause, focus, focusLast, unpause, container, initialFocusElement: initialFocus });
10821
10820
  return () => {
10822
10821
  service.unregister(id);
10823
- lastFocusRef.current = void 0;
10822
+ lastFocusRef.current = null;
10824
10823
  };
10825
10824
  }
10826
10825
  }, [active, container, focusElement, id, initialFocus]);
10827
10826
  useEffect14(() => {
10828
- if (active && !paused) {
10827
+ const containerElement = container.current;
10828
+ if (active && !paused && containerElement) {
10829
10829
  let onKeyDown = function(event) {
10830
10830
  const key = event.key;
10831
10831
  const elements = getContainedFocusableElements(containerElement);
@@ -10842,7 +10842,6 @@ var useFocusTrap = ({
10842
10842
  event.preventDefault();
10843
10843
  }
10844
10844
  };
10845
- const containerElement = container.current;
10846
10845
  containerElement.addEventListener("keydown", onKeyDown);
10847
10846
  return () => {
10848
10847
  containerElement.removeEventListener("keydown", onKeyDown);
@@ -10865,9 +10864,21 @@ var FocusTrapWrapper = forwardRef6(function FocusTrap2({
10865
10864
  ...props
10866
10865
  }, forwardedRef) {
10867
10866
  const innerRef = useRef10(null);
10868
- useImperativeHandle3(forwardedRef, () => innerRef.current);
10869
10867
  useFocusTrap({ container: innerRef, active, initialFocus });
10870
- return /* @__PURE__ */ jsx20("div", { ref: innerRef, ...props });
10868
+ return /* @__PURE__ */ jsx20(
10869
+ "div",
10870
+ {
10871
+ ref: (node) => {
10872
+ innerRef.current = node;
10873
+ if (typeof forwardedRef === "function") {
10874
+ forwardedRef(node);
10875
+ } else if (forwardedRef) {
10876
+ forwardedRef.current = node;
10877
+ }
10878
+ },
10879
+ ...props
10880
+ }
10881
+ );
10871
10882
  });
10872
10883
 
10873
10884
  // src/hooks/useOutsideClick.ts
@@ -11041,7 +11052,7 @@ var PopUp = forwardRef7(function PopUp2({
11041
11052
  const anchor = anchorOverwrite ?? context?.triggerRef ?? void 0;
11042
11053
  const id = props.id ?? context?.popUpId;
11043
11054
  const { refAssignment, isPresent, ref } = usePresenceRef({ isOpen });
11044
- useImperativeHandle4(forwardRef36, () => ref.current, [ref]);
11055
+ useImperativeHandle3(forwardRef36, () => ref.current, [ref]);
11045
11056
  const onCloseStable = useEventCallbackStabilizer(onClose);
11046
11057
  const onOutsideClickStable = useEventCallbackStabilizer(onOutsideClick);
11047
11058
  const onCloseWrapper = useCallback13(() => {
@@ -11089,7 +11100,7 @@ var PopUp = forwardRef7(function PopUp2({
11089
11100
  });
11090
11101
 
11091
11102
  // src/components/user-interaction/input/Input.tsx
11092
- import { forwardRef as forwardRef8, useImperativeHandle as useImperativeHandle5, useRef as useRef12 } from "react";
11103
+ import { forwardRef as forwardRef8, useImperativeHandle as useImperativeHandle4, useRef as useRef12 } from "react";
11093
11104
 
11094
11105
  // src/hooks/useDelay.ts
11095
11106
  import { useEffect as useEffect18, useState as useState13 } from "react";
@@ -11221,7 +11232,7 @@ var Input = forwardRef8(function Input2({
11221
11232
  clearTimer
11222
11233
  } = useDelay({ delay, disabled: !afterDelay || props.disabled || props.readOnly });
11223
11234
  const innerRef = useRef12(null);
11224
- useImperativeHandle5(forwardedRef, () => innerRef.current);
11235
+ useImperativeHandle4(forwardedRef, () => innerRef.current);
11225
11236
  const { focusNext } = useFocusManagement();
11226
11237
  return /* @__PURE__ */ jsx22(
11227
11238
  "input",
@@ -11277,7 +11288,7 @@ var SelectContent = forwardRef9(function SelectContent2({
11277
11288
  const translation = useHightideTranslation();
11278
11289
  const innerRef = useRef13(null);
11279
11290
  const searchInputRef = useRef13(null);
11280
- useImperativeHandle6(ref, () => innerRef.current);
11291
+ useImperativeHandle5(ref, () => innerRef.current);
11281
11292
  const context = useSelectContext();
11282
11293
  const { config, handleTypeaheadKey, toggleSelection, highlightNext, highlightPrevious, highlightFirst, highlightLast, highlightedId } = context;
11283
11294
  const { setIds } = config;
@@ -12488,10 +12499,10 @@ import clsx10 from "clsx";
12488
12499
  import { ChevronLeft, ChevronRight as ChevronRight2 } from "lucide-react";
12489
12500
 
12490
12501
  // src/components/user-interaction/IconButton.tsx
12491
- import { forwardRef as forwardRef13, useImperativeHandle as useImperativeHandle8, useRef as useRef18 } from "react";
12502
+ import { forwardRef as forwardRef13, useImperativeHandle as useImperativeHandle7, useRef as useRef18 } from "react";
12492
12503
 
12493
12504
  // src/components/user-interaction/Tooltip.tsx
12494
- import { forwardRef as forwardRef12, useContext as useContext8, useEffect as useEffect23, useImperativeHandle as useImperativeHandle7 } from "react";
12505
+ import { forwardRef as forwardRef12, useContext as useContext8, useEffect as useEffect23, useImperativeHandle as useImperativeHandle6 } from "react";
12495
12506
  import { useId as useId8 } from "react";
12496
12507
  import { useCallback as useCallback20, useMemo as useMemo16, useRef as useRef17, useState as useState16 } from "react";
12497
12508
 
@@ -12718,7 +12729,7 @@ var TooltipDisplay = forwardRef12(function TooltipAnchoredFloatingContainer({
12718
12729
  [isAnimatedOverwrite, config.tooltip.isAnimated]
12719
12730
  );
12720
12731
  const container = useRef17(null);
12721
- useImperativeHandle7(forwardRef36, () => container.current);
12732
+ useImperativeHandle6(forwardRef36, () => container.current);
12722
12733
  const isActive = !disabled && isShown;
12723
12734
  const { isVisible, transitionState } = useTransitionState(
12724
12735
  useMemo16(() => ({ isOpen: isShown, ref: container }), [isShown])
@@ -12848,8 +12859,8 @@ var IconButtonTooltipTrigger = forwardRef13(function IconButtonTooltipTrigger2({
12848
12859
  }, ref) {
12849
12860
  const { trigger: { ref: triggerRef, props: tooltipTriggerProps } } = useTooltip();
12850
12861
  const innerRef = useRef18(null);
12851
- useImperativeHandle8(ref, () => innerRef.current);
12852
- useImperativeHandle8(triggerRef, () => innerRef.current);
12862
+ useImperativeHandle7(ref, () => innerRef.current);
12863
+ useImperativeHandle7(triggerRef, () => innerRef.current);
12853
12864
  return /* @__PURE__ */ jsx30(
12854
12865
  IconButtonBase,
12855
12866
  {
@@ -13292,7 +13303,7 @@ var DividerInserter = ({
13292
13303
  };
13293
13304
 
13294
13305
  // src/components/layout/Expandable.tsx
13295
- import { useEffect as useEffect25, useImperativeHandle as useImperativeHandle9, useRef as useRef20 } from "react";
13306
+ import { useEffect as useEffect25, useImperativeHandle as useImperativeHandle8, useRef as useRef20 } from "react";
13296
13307
  import { useState as useState18 } from "react";
13297
13308
  import { createContext as createContext9, forwardRef as forwardRef15, useCallback as useCallback22, useContext as useContext10, useId as useId10, useMemo as useMemo18 } from "react";
13298
13309
  import clsx11 from "clsx";
@@ -13401,7 +13412,7 @@ var ExpandableContent = forwardRef15(function ExpandableContent2({
13401
13412
  }, forwardedRef) {
13402
13413
  const { isExpanded, ids, setIds } = useExpandableContext();
13403
13414
  const ref = useRef20(null);
13404
- useImperativeHandle9(forwardedRef, () => ref.current, [ref]);
13415
+ useImperativeHandle8(forwardedRef, () => ref.current, [ref]);
13405
13416
  useEffect25(() => {
13406
13417
  if (props.id) {
13407
13418
  setIds((prevState) => ({ ...prevState, content: props.id }));
@@ -14635,7 +14646,7 @@ function VerticalNavigationTree({
14635
14646
 
14636
14647
  // src/components/layout/app/AppPage.tsx
14637
14648
  import { Fragment as Fragment5, jsx as jsx43, jsxs as jsxs24 } from "react/jsx-runtime";
14638
- var AppSidebar = ({ isOpen, onClose, children, ...props }) => {
14649
+ var AppSidebar = ({ isOpen = false, onClose, children, ...props }) => {
14639
14650
  const translation = useHightideTranslation();
14640
14651
  const { zIndex } = useOverlayRegistry({ isActive: isOpen });
14641
14652
  const ref = useRef25(null);
@@ -14709,7 +14720,7 @@ var AppPage = ({ children, headerActions, sidebarProps, ...props }) => {
14709
14720
  const toNavigationItems = useCallback28((items) => {
14710
14721
  return items?.map((item) => ({
14711
14722
  id: item.id,
14712
- label: /* @__PURE__ */ jsxs24("span", { className: clsx15("flex-row-2 items-center", { "text-primary": item.isActive }), children: [
14723
+ label: /* @__PURE__ */ jsxs24("span", { className: "app-page-navigation-item-label", "data-acitve": item.isActive ? "" : void 0, children: [
14713
14724
  item.icon && /* @__PURE__ */ jsx43("span", { className: "size-5", children: item.icon }),
14714
14725
  item.label
14715
14726
  ] }),
@@ -14764,7 +14775,7 @@ var AppPage = ({ children, headerActions, sidebarProps, ...props }) => {
14764
14775
  };
14765
14776
 
14766
14777
  // src/components/layout/dialog/Dialog.tsx
14767
- import { forwardRef as forwardRef16, useCallback as useCallback29, useContext as useContext14, useId as useId12, useImperativeHandle as useImperativeHandle10, useMemo as useMemo23, useRef as useRef26 } from "react";
14778
+ import { forwardRef as forwardRef16, useCallback as useCallback29, useContext as useContext14, useId as useId12, useImperativeHandle as useImperativeHandle9, useMemo as useMemo23, useRef as useRef26 } from "react";
14768
14779
  import { X as X2 } from "lucide-react";
14769
14780
 
14770
14781
  // src/components/layout/dialog/DialogContext.tsx
@@ -14808,7 +14819,7 @@ var Dialog = forwardRef16(function Dialog2({
14808
14819
  const { refAssignment, isPresent, ref } = usePresenceRef({
14809
14820
  isOpen
14810
14821
  });
14811
- useImperativeHandle10(forwardedRef, () => ref.current, [ref]);
14822
+ useImperativeHandle9(forwardedRef, () => ref.current, [ref]);
14812
14823
  const onCloseStable = useEventCallbackStabilizer(onClose);
14813
14824
  const onCloseWrapper = useCallback29(() => {
14814
14825
  if (!isModal) return;
@@ -15235,7 +15246,7 @@ var ThemeDialog = ({
15235
15246
  import { forwardRef as forwardRef18 } from "react";
15236
15247
 
15237
15248
  // src/components/layout/drawer/DrawerContent.tsx
15238
- import { forwardRef as forwardRef17, useId as useId13, useImperativeHandle as useImperativeHandle11, useMemo as useMemo26, useRef as useRef27 } from "react";
15249
+ import { forwardRef as forwardRef17, useId as useId13, useImperativeHandle as useImperativeHandle10, useMemo as useMemo26, useRef as useRef27 } from "react";
15239
15250
 
15240
15251
  // src/components/layout/drawer/DrawerContext.tsx
15241
15252
  import { createContext as createContext14, useContext as useContext16 } from "react";
@@ -15266,7 +15277,7 @@ var DrawerContent = forwardRef17(function DrawerContent2({
15266
15277
  content: props.id ?? `dialog-content-${generatedId}`
15267
15278
  }), [generatedId, props.id]);
15268
15279
  const ref = useRef27(null);
15269
- useImperativeHandle11(forwardedRef, () => ref.current, [ref]);
15280
+ useImperativeHandle10(forwardedRef, () => ref.current, [ref]);
15270
15281
  const { isVisible, transitionState } = useTransitionState({ isOpen, ref });
15271
15282
  useFocusTrap({
15272
15283
  container: ref,
@@ -17501,7 +17512,7 @@ import { Check as Check3, TrashIcon } from "lucide-react";
17501
17512
  import { forwardRef as forwardRef25, useEffect as useEffect45, useId as useId19, useMemo as useMemo38, useState as useState36 } from "react";
17502
17513
 
17503
17514
  // src/components/user-interaction/input/DateTimeInput.tsx
17504
- import { forwardRef as forwardRef20, useCallback as useCallback36, useEffect as useEffect39, useId as useId16, useImperativeHandle as useImperativeHandle12, useMemo as useMemo34, useRef as useRef35, useState as useState33 } from "react";
17515
+ import { forwardRef as forwardRef20, useCallback as useCallback36, useEffect as useEffect39, useId as useId16, useImperativeHandle as useImperativeHandle11, useMemo as useMemo34, useRef as useRef35, useState as useState33 } from "react";
17505
17516
  import { CalendarIcon, X as X4 } from "lucide-react";
17506
17517
  import clsx31 from "clsx";
17507
17518
 
@@ -18802,7 +18813,7 @@ var DateTimeInput = forwardRef20(function DateTimeInput2({
18802
18813
  }), [generatedId, inputId]);
18803
18814
  const controlRef = useRef35(null);
18804
18815
  const fieldRef = useRef35(null);
18805
- useImperativeHandle12(forwardedRef, () => controlRef.current);
18816
+ useImperativeHandle11(forwardedRef, () => controlRef.current);
18806
18817
  useEffect39(() => {
18807
18818
  if (readOnly || disabled) {
18808
18819
  changeOpenWrapper(false);
@@ -19330,7 +19341,7 @@ function MultiSelectRoot({
19330
19341
  }
19331
19342
 
19332
19343
  // src/components/user-interaction/MultiSelect/MultiSelectButton.tsx
19333
- import { forwardRef as forwardRef22, useEffect as useEffect43, useImperativeHandle as useImperativeHandle13, useRef as useRef37 } from "react";
19344
+ import { forwardRef as forwardRef22, useEffect as useEffect43, useImperativeHandle as useImperativeHandle12, useRef as useRef37 } from "react";
19334
19345
 
19335
19346
  // src/components/user-interaction/MultiSelect/MultiSelectOption.tsx
19336
19347
  import clsx32 from "clsx";
@@ -19447,7 +19458,7 @@ var MultiSelectButton = forwardRef22(function MultiSelectButton2({
19447
19458
  if (id) setIds((prev) => ({ ...prev, trigger: id }));
19448
19459
  }, [id, setIds]);
19449
19460
  const innerRef = useRef37(null);
19450
- useImperativeHandle13(ref, () => innerRef.current);
19461
+ useImperativeHandle12(ref, () => innerRef.current);
19451
19462
  useEffect43(() => {
19452
19463
  const unregister = registerTrigger(innerRef);
19453
19464
  return () => unregister();
@@ -19516,14 +19527,14 @@ var MultiSelectButton = forwardRef22(function MultiSelectButton2({
19516
19527
  });
19517
19528
 
19518
19529
  // src/components/user-interaction/MultiSelect/MultiSelectContent.tsx
19519
- import { forwardRef as forwardRef23, useCallback as useCallback40, useEffect as useEffect44, useImperativeHandle as useImperativeHandle14, useRef as useRef38 } from "react";
19530
+ import { forwardRef as forwardRef23, useCallback as useCallback40, useEffect as useEffect44, useImperativeHandle as useImperativeHandle13, useRef as useRef38 } from "react";
19520
19531
  import clsx33 from "clsx";
19521
19532
  import { jsx as jsx82, jsxs as jsxs49 } from "react/jsx-runtime";
19522
19533
  var MultiSelectContent = forwardRef23(function MultiSelectContent2({ id, options, showSearch: showSearchOverride, searchInputProps, ...props }, ref) {
19523
19534
  const translation = useHightideTranslation();
19524
19535
  const innerRef = useRef38(null);
19525
19536
  const searchInputRef = useRef38(null);
19526
- useImperativeHandle14(ref, () => innerRef.current);
19537
+ useImperativeHandle13(ref, () => innerRef.current);
19527
19538
  const context = useMultiSelectContext();
19528
19539
  const { config, highlightNext, highlightPrevious, highlightFirst, highlightLast, highlightedId, handleTypeaheadKey, toggleSelection } = context;
19529
19540
  const { setIds } = config;
@@ -21840,7 +21851,7 @@ var Menu = ({
21840
21851
  };
21841
21852
 
21842
21853
  // src/components/user-interaction/MultiSelect/MultiSelectChipDisplay.tsx
21843
- import { forwardRef as forwardRef30, useEffect as useEffect52, useImperativeHandle as useImperativeHandle15, useRef as useRef45 } from "react";
21854
+ import { forwardRef as forwardRef30, useEffect as useEffect52, useImperativeHandle as useImperativeHandle14, useRef as useRef45 } from "react";
21844
21855
  import { XIcon as XIcon2, Plus as Plus2 } from "lucide-react";
21845
21856
  import { jsx as jsx103, jsxs as jsxs65 } from "react/jsx-runtime";
21846
21857
  var MultiSelectChipDisplayButton = forwardRef30(function MultiSelectChipDisplayButton2({ id, ...props }, ref) {
@@ -21853,7 +21864,7 @@ var MultiSelectChipDisplayButton = forwardRef30(function MultiSelectChipDisplayB
21853
21864
  if (id) setIds((prev) => ({ ...prev, trigger: id }));
21854
21865
  }, [id, setIds]);
21855
21866
  const innerRef = useRef45(null);
21856
- useImperativeHandle15(ref, () => innerRef.current);
21867
+ useImperativeHandle14(ref, () => innerRef.current);
21857
21868
  useEffect52(() => {
21858
21869
  const unregister = registerTrigger(innerRef);
21859
21870
  return () => unregister();
@@ -22782,7 +22793,7 @@ var SearchBar = ({
22782
22793
  };
22783
22794
 
22784
22795
  // src/components/user-interaction/input/ToggleableInput.tsx
22785
- import { forwardRef as forwardRef34, useEffect as useEffect54, useImperativeHandle as useImperativeHandle16, useRef as useRef46, useState as useState47 } from "react";
22796
+ import { forwardRef as forwardRef34, useEffect as useEffect54, useImperativeHandle as useImperativeHandle15, useRef as useRef46, useState as useState47 } from "react";
22786
22797
  import { Pencil } from "lucide-react";
22787
22798
  import clsx48 from "clsx";
22788
22799
  import { jsx as jsx113, jsxs as jsxs72 } from "react/jsx-runtime";
@@ -22801,7 +22812,7 @@ var ToggleableInput = forwardRef34(function ToggleableInput2({
22801
22812
  });
22802
22813
  const [isEditing, setIsEditing] = useState47(initialState !== "display");
22803
22814
  const innerRef = useRef46(null);
22804
- useImperativeHandle16(forwardedRef, () => innerRef.current);
22815
+ useImperativeHandle15(forwardedRef, () => innerRef.current);
22805
22816
  useEffect54(() => {
22806
22817
  if (isEditing) {
22807
22818
  innerRef.current?.focus();
@@ -23441,8 +23452,203 @@ var useRerender = () => {
23441
23452
  return useReducer2(() => ({}), {})[1];
23442
23453
  };
23443
23454
 
23455
+ // src/hooks/useSwipeGesture.ts
23456
+ import { useEffect as useEffect61, useRef as useRef48 } from "react";
23457
+ var useSwipeGesture = ({
23458
+ elementRef,
23459
+ inputMode = "touch",
23460
+ onSwipe,
23461
+ startRegion,
23462
+ threshold = 50,
23463
+ crossAxisThreshold = 100,
23464
+ maxSwipeTime = 100
23465
+ }) => {
23466
+ const onSwipeRef = useRef48(onSwipe);
23467
+ const startRegionRef = useRef48(startRegion);
23468
+ const thresholdRef = useRef48(threshold);
23469
+ const crossAxisThresholdRef = useRef48(crossAxisThreshold);
23470
+ const maxSwipeTimeRef = useRef48(maxSwipeTime);
23471
+ const gestureStartRef = useRef48(null);
23472
+ const gestureEndRef = useRef48(null);
23473
+ const isScrollingRef = useRef48(false);
23474
+ const isMouseDownRef = useRef48(false);
23475
+ useEffect61(() => {
23476
+ onSwipeRef.current = onSwipe;
23477
+ startRegionRef.current = startRegion;
23478
+ thresholdRef.current = threshold;
23479
+ crossAxisThresholdRef.current = crossAxisThreshold;
23480
+ maxSwipeTimeRef.current = maxSwipeTime;
23481
+ }, [onSwipe, startRegion, threshold, crossAxisThreshold, maxSwipeTime]);
23482
+ const isWithinStartRegion = (x, y) => {
23483
+ const region = startRegionRef.current;
23484
+ if (!region) return true;
23485
+ if (region.minX !== void 0 && x < region.minX) return false;
23486
+ if (region.maxX !== void 0 && x > region.maxX) return false;
23487
+ if (region.minY !== void 0 && y < region.minY) return false;
23488
+ if (region.maxY !== void 0 && y > region.maxY) return false;
23489
+ return true;
23490
+ };
23491
+ const findScrollableParent = (element) => {
23492
+ if (!element) return null;
23493
+ const table = element.closest("table") || element.closest('[role="table"]');
23494
+ if (table) {
23495
+ let parent = table.parentElement;
23496
+ while (parent) {
23497
+ const style = window.getComputedStyle(parent);
23498
+ if (style.overflow === "auto" || style.overflow === "scroll" || style.overflowY === "auto" || style.overflowY === "scroll" || style.overflowX === "auto" || style.overflowX === "scroll") {
23499
+ return parent;
23500
+ }
23501
+ parent = parent.parentElement;
23502
+ }
23503
+ return table;
23504
+ }
23505
+ let current = element;
23506
+ while (current) {
23507
+ const style = window.getComputedStyle(current);
23508
+ if (style.overflow === "auto" || style.overflow === "scroll" || style.overflowY === "auto" || style.overflowY === "scroll" || style.overflowX === "auto" || style.overflowX === "scroll") {
23509
+ return current;
23510
+ }
23511
+ current = current.parentElement;
23512
+ }
23513
+ return null;
23514
+ };
23515
+ useEffect61(() => {
23516
+ const element = elementRef?.current ?? null;
23517
+ const target = element ?? window;
23518
+ const listenTouch = inputMode === "touch" || inputMode === "both";
23519
+ const listenMouse = inputMode === "mouse" || inputMode === "both";
23520
+ const onGestureStart = (x, y, eventTarget) => {
23521
+ console.log("onGestureStart", x, y);
23522
+ if (!isWithinStartRegion(x, y)) return;
23523
+ const scrollableParent = findScrollableParent(eventTarget);
23524
+ gestureEndRef.current = null;
23525
+ gestureStartRef.current = {
23526
+ x,
23527
+ y,
23528
+ scrollY: scrollableParent?.scrollTop ?? window.scrollY,
23529
+ time: performance.now()
23530
+ };
23531
+ isScrollingRef.current = !!scrollableParent;
23532
+ };
23533
+ const onGestureMove = (x, y, eventTarget) => {
23534
+ console.log("onGestureMove", x, y);
23535
+ const scrollableParent = findScrollableParent(eventTarget);
23536
+ const currentScrollY = scrollableParent?.scrollTop ?? window.scrollY;
23537
+ gestureEndRef.current = {
23538
+ x,
23539
+ y,
23540
+ scrollY: currentScrollY,
23541
+ time: performance.now()
23542
+ };
23543
+ if (gestureStartRef.current && Math.abs(currentScrollY - gestureStartRef.current.scrollY) > 5) {
23544
+ isScrollingRef.current = true;
23545
+ }
23546
+ };
23547
+ const resolveSwipeDirection = (start, end) => {
23548
+ const deltaX = end.x - start.x;
23549
+ const deltaY = end.y - start.y;
23550
+ const absX = Math.abs(deltaX);
23551
+ const absY = Math.abs(deltaY);
23552
+ const minDistance = thresholdRef.current;
23553
+ const maxCrossAxis = crossAxisThresholdRef.current;
23554
+ if (absX < minDistance && absY < minDistance) {
23555
+ return null;
23556
+ }
23557
+ if (absX >= absY && absX >= minDistance && absY <= maxCrossAxis) {
23558
+ return deltaX > 0 ? "leftToRight" : "rightToLeft";
23559
+ }
23560
+ if (absY > absX && absY >= minDistance && absX <= maxCrossAxis) {
23561
+ return deltaY > 0 ? "topToBottom" : "bottomToTop";
23562
+ }
23563
+ return null;
23564
+ };
23565
+ const onGestureEnd = () => {
23566
+ const start = gestureStartRef.current;
23567
+ const end = gestureEndRef.current;
23568
+ if (!start || !end) {
23569
+ gestureStartRef.current = null;
23570
+ gestureEndRef.current = null;
23571
+ isScrollingRef.current = false;
23572
+ return;
23573
+ }
23574
+ if (isScrollingRef.current || Math.abs(start.scrollY - end.scrollY) > 5) {
23575
+ gestureStartRef.current = null;
23576
+ gestureEndRef.current = null;
23577
+ isScrollingRef.current = false;
23578
+ return;
23579
+ }
23580
+ const maxSwipeTime2 = maxSwipeTimeRef.current;
23581
+ if (maxSwipeTime2 !== void 0 && end.time - start.time > maxSwipeTime2) {
23582
+ gestureStartRef.current = null;
23583
+ gestureEndRef.current = null;
23584
+ isScrollingRef.current = false;
23585
+ return;
23586
+ }
23587
+ const direction = resolveSwipeDirection(start, end);
23588
+ if (direction && onSwipeRef.current) {
23589
+ onSwipeRef.current({ direction });
23590
+ }
23591
+ gestureStartRef.current = null;
23592
+ gestureEndRef.current = null;
23593
+ isScrollingRef.current = false;
23594
+ };
23595
+ const onTouchStart = (e) => {
23596
+ if (!e.touches[0]) return;
23597
+ onGestureStart(e.touches[0].clientX, e.touches[0].clientY, e.target);
23598
+ };
23599
+ const onTouchMove = (e) => {
23600
+ if (!e.touches[0]) return;
23601
+ onGestureMove(e.touches[0].clientX, e.touches[0].clientY, e.target);
23602
+ };
23603
+ const onTouchEnd = () => {
23604
+ onGestureEnd();
23605
+ };
23606
+ const onMouseMove = (e) => {
23607
+ if (!isMouseDownRef.current) return;
23608
+ onGestureMove(e.clientX, e.clientY, e.target);
23609
+ };
23610
+ const onMouseUp = () => {
23611
+ if (!isMouseDownRef.current) return;
23612
+ isMouseDownRef.current = false;
23613
+ window.removeEventListener("mousemove", onMouseMove);
23614
+ window.removeEventListener("mouseup", onMouseUp);
23615
+ onGestureEnd();
23616
+ };
23617
+ const onMouseDown = (e) => {
23618
+ if (e.button !== 0) return;
23619
+ if (!isWithinStartRegion(e.clientX, e.clientY)) return;
23620
+ isMouseDownRef.current = true;
23621
+ onGestureStart(e.clientX, e.clientY, e.target);
23622
+ window.addEventListener("mousemove", onMouseMove);
23623
+ window.addEventListener("mouseup", onMouseUp);
23624
+ };
23625
+ const passiveOptions = { passive: true };
23626
+ if (listenTouch) {
23627
+ target.addEventListener("touchstart", onTouchStart, passiveOptions);
23628
+ target.addEventListener("touchmove", onTouchMove, passiveOptions);
23629
+ target.addEventListener("touchend", onTouchEnd, passiveOptions);
23630
+ }
23631
+ if (listenMouse) {
23632
+ target.addEventListener("mousedown", onMouseDown);
23633
+ }
23634
+ return () => {
23635
+ if (listenTouch) {
23636
+ target.removeEventListener("touchstart", onTouchStart);
23637
+ target.removeEventListener("touchmove", onTouchMove);
23638
+ target.removeEventListener("touchend", onTouchEnd);
23639
+ }
23640
+ if (listenMouse) {
23641
+ target.removeEventListener("mousedown", onMouseDown);
23642
+ window.removeEventListener("mousemove", onMouseMove);
23643
+ window.removeEventListener("mouseup", onMouseUp);
23644
+ }
23645
+ };
23646
+ }, [elementRef, inputMode]);
23647
+ return elementRef;
23648
+ };
23649
+
23444
23650
  // src/hooks/useUpdatingDateString.ts
23445
- import { useEffect as useEffect61, useState as useState51 } from "react";
23651
+ import { useEffect as useEffect62, useState as useState51 } from "react";
23446
23652
  var useUpdatingDateString = ({ absoluteFormat = "dateTime", localeOverride, is24HourFormat: is24HourFormatOverride, timeZone: timeZoneOverride, date }) => {
23447
23653
  const { locale: contextLocale, is24HourFormat: contextIs24HourFormat, timeZone: contextTimeZone } = useLocale();
23448
23654
  const locale = localeOverride ?? contextLocale;
@@ -23453,14 +23659,14 @@ var useUpdatingDateString = ({ absoluteFormat = "dateTime", localeOverride, is24
23453
23659
  absolute: DateUtils.formatAbsolute(date, locale, absoluteFormat, { is24HourFormat, timeZone }),
23454
23660
  relative: DateUtils.formatRelative(date, locale)
23455
23661
  });
23456
- useEffect61(() => {
23662
+ useEffect62(() => {
23457
23663
  setDateAndTimeStrings({
23458
23664
  compareDate: date,
23459
23665
  absolute: DateUtils.formatAbsolute(date, locale, absoluteFormat, { is24HourFormat, timeZone }),
23460
23666
  relative: DateUtils.formatRelative(date, locale)
23461
23667
  });
23462
23668
  }, [date, absoluteFormat, locale, is24HourFormat, timeZone]);
23463
- useEffect61(() => {
23669
+ useEffect62(() => {
23464
23670
  let timeoutId;
23465
23671
  const startTimer = () => {
23466
23672
  const now = /* @__PURE__ */ new Date();
@@ -24102,6 +24308,7 @@ export {
24102
24308
  useSelectOptionDisplayLocation,
24103
24309
  useSingleSelection,
24104
24310
  useStorage,
24311
+ useSwipeGesture,
24105
24312
  useTabContext,
24106
24313
  useTableColumnDefinitionContext,
24107
24314
  useTableContainerContext,