@servicetitan/anvil2 1.46.2 → 1.46.3

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.
Files changed (164) hide show
  1. package/CHANGELOG.md +24 -0
  2. package/dist/{Avatar-CyGjhToG.js → Avatar-3d5Kv2CF.js} +2 -2
  3. package/dist/{Avatar-CyGjhToG.js.map → Avatar-3d5Kv2CF.js.map} +1 -1
  4. package/dist/{Avatar-D07f9NH_.js → Avatar-DJ3oJNsv.js} +2 -2
  5. package/dist/{Avatar-D07f9NH_.js.map → Avatar-DJ3oJNsv.js.map} +1 -1
  6. package/dist/Avatar.js +2 -2
  7. package/dist/{Calendar-X9qUi6Vx.js → Calendar-Cn0fOgog.js} +99 -48
  8. package/dist/Calendar-Cn0fOgog.js.map +1 -0
  9. package/dist/Calendar.js +1 -1
  10. package/dist/{Checkbox-CcYtto5f.js → Checkbox-C5PX8wur.js} +2 -2
  11. package/dist/{Checkbox-CcYtto5f.js.map → Checkbox-C5PX8wur.js.map} +1 -1
  12. package/dist/{Checkbox-BDohwHXQ.js → Checkbox-DAODkzN3.js} +2 -2
  13. package/dist/{Checkbox-BDohwHXQ.js.map → Checkbox-DAODkzN3.js.map} +1 -1
  14. package/dist/Checkbox.js +2 -2
  15. package/dist/{Chip-Bz-vlQ4D.js → Chip-DLU13qe-.js} +2 -2
  16. package/dist/{Chip-Bz-vlQ4D.js.map → Chip-DLU13qe-.js.map} +1 -1
  17. package/dist/Chip.js +1 -1
  18. package/dist/{Combobox-DQmW8Tyl.js → Combobox-DO8cIvRQ.js} +6 -6
  19. package/dist/{Combobox-DQmW8Tyl.js.map → Combobox-DO8cIvRQ.js.map} +1 -1
  20. package/dist/Combobox.js +1 -1
  21. package/dist/{DateField-C43nfkbx.js → DateField-qHdgwSlB.js} +35 -101
  22. package/dist/DateField-qHdgwSlB.js.map +1 -0
  23. package/dist/DateField.js +1 -1
  24. package/dist/{DateFieldRange-g7n5QYww.js → DateFieldRange-GNpWV70g.js} +54 -55
  25. package/dist/DateFieldRange-GNpWV70g.js.map +1 -0
  26. package/dist/DateFieldRange.js +1 -1
  27. package/dist/{DateFieldSingle-D3tneqeG.js → DateFieldSingle-B9caNibj.js} +50 -52
  28. package/dist/DateFieldSingle-B9caNibj.js.map +1 -0
  29. package/dist/DateFieldSingle.js +1 -1
  30. package/dist/{DateFieldYearless-3JBVj3wn.js → DateFieldYearless-BmeKGaDc.js} +2 -2
  31. package/dist/{DateFieldYearless-3JBVj3wn.js.map → DateFieldYearless-BmeKGaDc.js.map} +1 -1
  32. package/dist/DateFieldYearless.js +1 -1
  33. package/dist/{DaysOfTheWeek-RcPgDoM3.js → DaysOfTheWeek-DPH13VCK.js} +3 -3
  34. package/dist/{DaysOfTheWeek-RcPgDoM3.js.map → DaysOfTheWeek-DPH13VCK.js.map} +1 -1
  35. package/dist/DaysOfTheWeek.js +1 -1
  36. package/dist/{Dialog-FNJ16gY6.js → Dialog-BHFLnFNQ.js} +5 -5
  37. package/dist/{Dialog-FNJ16gY6.js.map → Dialog-BHFLnFNQ.js.map} +1 -1
  38. package/dist/Dialog.js +1 -1
  39. package/dist/{Drawer-DT31CMRd.js → Drawer-BDA7Sjj9.js} +5 -5
  40. package/dist/{Drawer-DT31CMRd.js.map → Drawer-BDA7Sjj9.js.map} +1 -1
  41. package/dist/Drawer.js +1 -1
  42. package/dist/{FieldLabel-BP8QK5UR.js → FieldLabel-Bgl3iu13.js} +2 -2
  43. package/dist/{FieldLabel-BP8QK5UR.js.map → FieldLabel-Bgl3iu13.js.map} +1 -1
  44. package/dist/FieldLabel.js +1 -1
  45. package/dist/{InputMask-CPuYMcw9.js → InputMask-B13KumrK.js} +2 -2
  46. package/dist/{InputMask-CPuYMcw9.js.map → InputMask-B13KumrK.js.map} +1 -1
  47. package/dist/InputMask.js +1 -1
  48. package/dist/{ListView-BJI8BQJ-.js → ListView-C-cVQZHp.js} +3 -3
  49. package/dist/{ListView-BJI8BQJ-.js.map → ListView-C-cVQZHp.js.map} +1 -1
  50. package/dist/ListView.js +1 -1
  51. package/dist/{Listbox-CUhMbFm2.js → Listbox-DxGx630W.js} +2 -2
  52. package/dist/{Listbox-CUhMbFm2.js.map → Listbox-DxGx630W.js.map} +1 -1
  53. package/dist/Listbox.js +1 -1
  54. package/dist/{Menu-t_11BIhU.js → Menu-DUZqzpwg.js} +6 -8
  55. package/dist/Menu-DUZqzpwg.js.map +1 -0
  56. package/dist/Menu.js +1 -1
  57. package/dist/{NumberField-Bjf9Tyvf.js → NumberField-DWPAy1eG.js} +7 -7
  58. package/dist/{NumberField-Bjf9Tyvf.js.map → NumberField-DWPAy1eG.js.map} +1 -1
  59. package/dist/NumberField.css +9 -6
  60. package/dist/NumberField.js +1 -1
  61. package/dist/{Page-BAyXnhz2.js → Page-BfH2mGSt.js} +7 -7
  62. package/dist/{Page-BAyXnhz2.js.map → Page-BfH2mGSt.js.map} +1 -1
  63. package/dist/Page.js +1 -1
  64. package/dist/{Pagination-DCBic619.js → Pagination-B_G9QcHf.js} +3 -3
  65. package/dist/{Pagination-DCBic619.js.map → Pagination-B_G9QcHf.js.map} +1 -1
  66. package/dist/Pagination.js +1 -1
  67. package/dist/{Popover-CrksxqKk.js → Popover-v8R920kj.js} +135 -200
  68. package/dist/Popover-v8R920kj.js.map +1 -0
  69. package/dist/Popover.js +1 -1
  70. package/dist/{ProgressBar-CgsAW2d8.js → ProgressBar-BWN2yv1s.js} +2 -2
  71. package/dist/{ProgressBar-CgsAW2d8.js.map → ProgressBar-BWN2yv1s.js.map} +1 -1
  72. package/dist/ProgressBar.js +1 -1
  73. package/dist/{Radio-C_rvxw74.js → Radio-C5riI-do.js} +2 -2
  74. package/dist/{Radio-C_rvxw74.js.map → Radio-C5riI-do.js.map} +1 -1
  75. package/dist/Radio.js +2 -2
  76. package/dist/{RadioGroup-DxBblSrx.js → RadioGroup-B7O06pVu.js} +2 -2
  77. package/dist/{RadioGroup-DxBblSrx.js.map → RadioGroup-B7O06pVu.js.map} +1 -1
  78. package/dist/{SearchField-Bb0uObwG.js → SearchField-CbwGErC4.js} +2 -2
  79. package/dist/{SearchField-Bb0uObwG.js.map → SearchField-CbwGErC4.js.map} +1 -1
  80. package/dist/SearchField.js +1 -1
  81. package/dist/{SegmentedControl-DC4BpdH5.js → SegmentedControl-CLDdes8W.js} +2 -2
  82. package/dist/{SegmentedControl-DC4BpdH5.js.map → SegmentedControl-CLDdes8W.js.map} +1 -1
  83. package/dist/SegmentedControl.js +1 -1
  84. package/dist/{SelectCard-DunNE9R3.js → SelectCard-Ca07K1FW.js} +3 -3
  85. package/dist/{SelectCard-DunNE9R3.js.map → SelectCard-Ca07K1FW.js.map} +1 -1
  86. package/dist/SelectCard.js +1 -1
  87. package/dist/{SelectTrigger-BYysLREL.js → SelectTrigger-CaXX1SHG.js} +3 -3
  88. package/dist/{SelectTrigger-BYysLREL.js.map → SelectTrigger-CaXX1SHG.js.map} +1 -1
  89. package/dist/SelectTrigger.js +1 -1
  90. package/dist/{SelectTriggerBase-DqUpJgzk.js → SelectTriggerBase-C7TLCna1.js} +3 -3
  91. package/dist/{SelectTriggerBase-DqUpJgzk.js.map → SelectTriggerBase-C7TLCna1.js.map} +1 -1
  92. package/dist/{SideNav-B9AWmF_H.js → SideNav-nqq5sAwz.js} +2 -2
  93. package/dist/{SideNav-B9AWmF_H.js.map → SideNav-nqq5sAwz.js.map} +1 -1
  94. package/dist/SideNav.js +1 -1
  95. package/dist/{Stepper-DHTrvfXw.js → Stepper-DQ_Hm-AI.js} +2 -2
  96. package/dist/{Stepper-DHTrvfXw.js.map → Stepper-DQ_Hm-AI.js.map} +1 -1
  97. package/dist/Stepper.js +1 -1
  98. package/dist/{Tab-0zx9hsw8.js → Tab-CzNx3IdF.js} +2 -2
  99. package/dist/{Tab-0zx9hsw8.js.map → Tab-CzNx3IdF.js.map} +1 -1
  100. package/dist/Tab.js +1 -1
  101. package/dist/{TextField-CFWs3lm9.js → TextField-D9gD-34Q.js} +3 -3
  102. package/dist/{TextField-CFWs3lm9.js.map → TextField-D9gD-34Q.js.map} +1 -1
  103. package/dist/{TextField-Cge6IRo5.js → TextField-uCHgwO5F.js} +2 -2
  104. package/dist/{TextField-Cge6IRo5.js.map → TextField-uCHgwO5F.js.map} +1 -1
  105. package/dist/TextField.js +1 -1
  106. package/dist/{Textarea-CXd3NKkW.js → Textarea-B2-6m291.js} +3 -3
  107. package/dist/{Textarea-CXd3NKkW.js.map → Textarea-B2-6m291.js.map} +1 -1
  108. package/dist/Textarea.js +1 -1
  109. package/dist/{TimeField-4v5aCwiG.js → TimeField-B5Jgy-Zg.js} +21 -8
  110. package/dist/TimeField-B5Jgy-Zg.js.map +1 -0
  111. package/dist/TimeField.js +1 -1
  112. package/dist/Toast.js +2 -2
  113. package/dist/{Toaster-bON5Xc1P.js → Toaster-CHyB-Mxs.js} +3 -3
  114. package/dist/{Toaster-bON5Xc1P.js.map → Toaster-CHyB-Mxs.js.map} +1 -1
  115. package/dist/{Toaster-D-rNSLTq.js → Toaster-CyiGDKMh.js} +3 -3
  116. package/dist/{Toaster-D-rNSLTq.js.map → Toaster-CyiGDKMh.js.map} +1 -1
  117. package/dist/{Toolbar-B2Jsuptz.js → Toolbar-BXGTrR6o.js} +16 -15
  118. package/dist/Toolbar-BXGTrR6o.js.map +1 -0
  119. package/dist/Toolbar.js +1 -1
  120. package/dist/{Tooltip-CtCLw_vx.js → Tooltip-DhtVlhah.js} +2 -2
  121. package/dist/{Tooltip-CtCLw_vx.js.map → Tooltip-DhtVlhah.js.map} +1 -1
  122. package/dist/Tooltip.js +1 -1
  123. package/dist/beta.js +1 -1
  124. package/dist/components/Calendar/Calendar.d.ts +5 -0
  125. package/dist/components/Calendar/CalendarNowButton.d.ts +3 -1
  126. package/dist/components/Popover/Popover.d.ts +136 -1
  127. package/dist/components/Popover/PopoverTrigger.d.ts +0 -1
  128. package/dist/components/Popover/internal/PopoverContext.d.ts +5 -3
  129. package/dist/components/Popover/internal/usePopoverContext.d.ts +6 -4
  130. package/dist/hooks/useMergeRefs/useMergeRefs.d.ts +11 -0
  131. package/dist/index.js +43 -43
  132. package/dist/internal/hooks/useFocusWithin/useFocusWithin.d.ts +2 -1
  133. package/dist/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.d.ts +0 -1
  134. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +5 -1
  135. package/dist/{useFocusWithin-BhhgRXdZ.js → useFocusWithin-hi77jsrB.js} +6 -3
  136. package/dist/useFocusWithin-hi77jsrB.js.map +1 -0
  137. package/dist/{useDialogTransitionStates-C1TtiwA_.js → useKeyboardFocusables-ek2mYel-.js} +45 -4
  138. package/dist/useKeyboardFocusables-ek2mYel-.js.map +1 -0
  139. package/dist/useMergeRefs-Dfmtq9cI.js +22 -0
  140. package/dist/useMergeRefs-Dfmtq9cI.js.map +1 -0
  141. package/dist/useMergeRefs.js +1 -1
  142. package/dist/{useOnClickOutside-B1ddwORK.js → useOnClickOutside-C5AZE_I6.js} +6 -65
  143. package/dist/useOnClickOutside-C5AZE_I6.js.map +1 -0
  144. package/dist/utils-CnKBdBNm.js +50 -0
  145. package/dist/utils-CnKBdBNm.js.map +1 -0
  146. package/package.json +1 -1
  147. package/dist/Calendar-X9qUi6Vx.js.map +0 -1
  148. package/dist/DateField-C43nfkbx.js.map +0 -1
  149. package/dist/DateFieldRange-g7n5QYww.js.map +0 -1
  150. package/dist/DateFieldSingle-D3tneqeG.js.map +0 -1
  151. package/dist/Menu-t_11BIhU.js.map +0 -1
  152. package/dist/Popover-CrksxqKk.js.map +0 -1
  153. package/dist/TimeField-4v5aCwiG.js.map +0 -1
  154. package/dist/Toolbar-B2Jsuptz.js.map +0 -1
  155. package/dist/components/DateFieldSingle/internal/useDateFieldOrchestration.d.ts +0 -17
  156. package/dist/useDateFieldOrchestration-DyAc3gPJ.js +0 -138
  157. package/dist/useDateFieldOrchestration-DyAc3gPJ.js.map +0 -1
  158. package/dist/useDialogTransitionStates-C1TtiwA_.js.map +0 -1
  159. package/dist/useFocusWithin-BhhgRXdZ.js.map +0 -1
  160. package/dist/useMergeRefs-Bde85AWI.js +0 -21
  161. package/dist/useMergeRefs-Bde85AWI.js.map +0 -1
  162. package/dist/useOnClickOutside-B1ddwORK.js.map +0 -1
  163. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js +0 -18
  164. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js.map +0 -1
@@ -1,15 +1,17 @@
1
1
  import { jsx, jsxs } from 'react/jsx-runtime';
2
- import { createContext, useContext, useRef, useLayoutEffect, useState, useMemo, forwardRef, useId, useCallback, useEffect } from 'react';
2
+ import { createContext, useContext, useRef, useLayoutEffect, useEffect, useState, useMemo, forwardRef, useId, useCallback, useImperativeHandle } from 'react';
3
3
  import { B as Button } from './Button-VNQQgZ45.js';
4
+ import { t as tabbable, f as useFloating, o as offset, i as size, g as flip, h as shift, J as arrow$1, l as limitShift, m as useClick, j as useHover, k as safePolygon, p as useDismiss, n as useRole, v as useInteractions, A as autoUpdate, D as DialogContext, a as DrawerContext, y as FloatingPortal, z as FloatingFocusManager, H as FloatingArrow, s as supportsPopover, B as computePosition, C as safeShowPopover, E as safeHidePopover } from './DrawerContext-D4tWTLVf.js';
4
5
  import { c as childrenToString } from './childrenToString-Bz9MqbHb.js';
5
6
  import { useTrackingId } from './useTrackingId.js';
6
- import { f as useFloating, o as offset, i as size, g as flip, h as shift, J as arrow$1, l as limitShift, m as useClick, j as useHover, k as safePolygon, p as useDismiss, n as useRole, v as useInteractions, A as autoUpdate, D as DialogContext, a as DrawerContext, y as FloatingPortal, z as FloatingFocusManager, H as FloatingArrow, s as supportsPopover, B as computePosition, C as safeShowPopover, E as safeHidePopover } from './DrawerContext-D4tWTLVf.js';
7
- import { u as useMergeRefs } from './useMergeRefs-Bde85AWI.js';
7
+ import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
8
8
  import { c as cx } from './index-tZvMCc77.js';
9
+ import { u as useFocusWithin } from './useFocusWithin-hi77jsrB.js';
9
10
  import { P as PortalProviderContext } from './PortalProvider-9lXkQ0xY.js';
10
11
  import { T as ThemeProvider } from './ThemeProvider-Be3Pvtpz.js';
11
12
  import { T as ThemeProviderContext } from './ThemeProviderContext-l52GohYT.js';
12
- import { u as useOpenCloseTransitionStates, a as useKeyboardFocusables, b as useOnClickOutside } from './useOnClickOutside-B1ddwORK.js';
13
+ import { u as useOpenCloseTransitionStates, a as useOnClickOutside } from './useOnClickOutside-C5AZE_I6.js';
14
+ import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
13
15
 
14
16
  import './Popover.css';const usePopoverTransitionStates = (popover, openProp, options = {}) => {
15
17
  const { onOpenAnimationStart, onCloseAnimationComplete } = options;
@@ -38,6 +40,7 @@ function usePopoverContext() {
38
40
  const invokerRef = useRef(null);
39
41
  const popoverRef = useRef(null);
40
42
  const arrowRef = useRef(null);
43
+ const { triggerHovered, setTriggerHovered, contentHovered } = context || {};
41
44
  useLayoutEffect(() => {
42
45
  if (!invokerRef.current) return;
43
46
  context?.setInvoker?.(invokerRef.current);
@@ -49,22 +52,58 @@ function usePopoverContext() {
49
52
  if (!arrowRef.current) return;
50
53
  context?.setArrowElement?.(arrowRef.current);
51
54
  }, [context, popoverRef]);
55
+ useEffect(() => {
56
+ if (!context?.openOnHover) return;
57
+ if (!triggerHovered && !contentHovered) {
58
+ const closeTimeout = setTimeout(() => {
59
+ context?.closePopover();
60
+ }, 100);
61
+ return () => {
62
+ clearTimeout(closeTimeout);
63
+ };
64
+ }
65
+ if (triggerHovered && !contentHovered) {
66
+ if (context?.delay) {
67
+ const openTimeout = setTimeout(() => {
68
+ context?.openPopover();
69
+ }, context.delay);
70
+ return () => {
71
+ clearTimeout(openTimeout);
72
+ };
73
+ } else {
74
+ context?.openPopover();
75
+ }
76
+ }
77
+ }, [context?.delay, context?.openOnHover, triggerHovered, contentHovered]);
52
78
  const onMouseEnterHandler = () => {
53
79
  if (!context?.openOnHover) return;
54
- context.openPopover();
80
+ setTriggerHovered?.(true);
55
81
  };
56
82
  const onMouseLeaveHandler = () => {
57
83
  if (!context?.openOnHover) return;
58
- context.closePopover();
84
+ setTriggerHovered?.(false);
59
85
  };
60
- const onFocusHandler = () => {
61
- if (context?.controlled || !context?.openOnHover) return;
62
- context?.openPopover();
86
+ const onFocusHandler = (_e) => {
87
+ if (context?.openOnHover) {
88
+ context?.openPopover();
89
+ }
63
90
  };
64
- const onBlurHandler = () => {
65
- if (context?.controlled || context?.disableCloseOnClickOutside || !context?.openOnHover)
91
+ const onBlurHandler = (e) => {
92
+ if (context?.popover?.contains(e.relatedTarget)) return;
93
+ if (context?.modal) {
94
+ e.preventDefault();
95
+ requestAnimationFrame(() => {
96
+ context?.invoker?.focus();
97
+ const focusables = tabbable(context?.popover);
98
+ if (focusables.length > 0) {
99
+ focusables[focusables.length - 1].focus();
100
+ }
101
+ });
66
102
  return;
67
- context?.closePopover();
103
+ }
104
+ if (!context?.disableCloseOnClickOutside) {
105
+ context?.closePopover();
106
+ }
68
107
  };
69
108
  const onKeyDownHandler = (e) => {
70
109
  if (!context?.openState) return;
@@ -72,12 +111,6 @@ function usePopoverContext() {
72
111
  context?.closePopover();
73
112
  return;
74
113
  }
75
- const focusables = context.focusables;
76
- if (e.code === "Tab" && e.shiftKey && context?.modal && focusables) {
77
- focusables[focusables.length - 1].focus();
78
- e.preventDefault();
79
- return;
80
- }
81
114
  };
82
115
  const onClickHandler = () => {
83
116
  context?.invoker?.focus();
@@ -121,7 +154,6 @@ function usePopoverContext() {
121
154
  },
122
155
  rootNode: context.rootNode,
123
156
  onClose: context.onClose,
124
- setOpen: context.setOpenState,
125
157
  open: context.openState,
126
158
  openOnHover: context.openOnHover,
127
159
  controlled: context.controlled,
@@ -138,7 +170,10 @@ function usePopoverContext() {
138
170
  disableFlipFallback: context.disableFlipFallback,
139
171
  disableFocusLock: context.modal,
140
172
  disableTriggerFocus: context.disableTriggerFocus,
141
- focusables: context.focusables
173
+ triggerHovered: context.triggerHovered,
174
+ setTriggerHovered: context.setTriggerHovered,
175
+ contentHovered: context.contentHovered,
176
+ setContentHovered: context.setContentHovered
142
177
  };
143
178
  }
144
179
 
@@ -471,14 +506,9 @@ const PopoverClose = forwardRef(
471
506
  "data-anv": "popover-close",
472
507
  ...rest,
473
508
  onClick: (event) => {
474
- onClick?.(event);
475
- if (context?.controlled) {
476
- setTimeout(() => {
477
- context?.onClose?.();
478
- }, 100);
479
- return;
480
- }
481
509
  context?.popover.close();
510
+ context?.onClose?.();
511
+ onClick?.(event);
482
512
  }
483
513
  }
484
514
  );
@@ -522,11 +552,11 @@ const PopoverButton = forwardRef(
522
552
  };
523
553
  const onFocusHandler = (e) => {
524
554
  onFocus?.(e);
525
- context?.invoker.onFocus();
555
+ context?.invoker.onFocus(e);
526
556
  };
527
557
  const onBlurHandler = (e) => {
528
558
  onBlur?.(e);
529
- context?.invoker.onBlur();
559
+ context?.invoker.onBlur(e);
530
560
  };
531
561
  const onKeyDownHandler = (e) => {
532
562
  onKeyDown?.(e);
@@ -580,52 +610,6 @@ const styles = {
580
610
  "no-padding": "_no-padding_yo27y_62"
581
611
  };
582
612
 
583
- function compareElements(el1, el2, excludeAttributes = []) {
584
- if (!el1 || !el2 || el1.tagName !== el2.tagName) {
585
- return false;
586
- }
587
- const getFilteredAttributes = (attrs) => {
588
- const filtered = {};
589
- for (let i = 0; i < attrs.length; i++) {
590
- const attr = attrs[i];
591
- if (!excludeAttributes.includes(attr.name)) {
592
- filtered[attr.name] = attr.value;
593
- }
594
- }
595
- return filtered;
596
- };
597
- const filteredAttrs1 = getFilteredAttributes(el1.attributes);
598
- const filteredAttrs2 = getFilteredAttributes(el2.attributes);
599
- const keys1 = Object.keys(filteredAttrs1);
600
- const keys2 = Object.keys(filteredAttrs2);
601
- if (keys1.length !== keys2.length) return false;
602
- for (const key of keys1) {
603
- if (filteredAttrs1[key] !== filteredAttrs2[key]) {
604
- return false;
605
- }
606
- }
607
- const isOnlyText1 = el1.childNodes.length === 1 && el1.childNodes[0].nodeType === Node.TEXT_NODE;
608
- const isOnlyText2 = el2.childNodes.length === 1 && el2.childNodes[0].nodeType === Node.TEXT_NODE;
609
- if (isOnlyText1 && isOnlyText2) {
610
- if (el1.textContent?.trim() !== el2.textContent?.trim()) {
611
- return false;
612
- }
613
- }
614
- const children1 = el1.children;
615
- const children2 = el2.children;
616
- if (children1.length !== children2.length) return false;
617
- for (let i = 0; i < children1.length; i++) {
618
- if (!compareElements(
619
- children1[i],
620
- children2[i],
621
- excludeAttributes
622
- )) {
623
- return false;
624
- }
625
- }
626
- return true;
627
- }
628
-
629
613
  const PopoverContent = forwardRef(
630
614
  function PopoverContent2(props, ref) {
631
615
  const {
@@ -651,85 +635,40 @@ const PopoverContent = forwardRef(
651
635
  ...style,
652
636
  ...context?.popover.style
653
637
  };
654
- const focusables = context?.focusables;
638
+ const { props: wrapperProps } = useFocusWithin({
639
+ otherRelatedElements: context?.invoker.element ? [context?.invoker.element] : [],
640
+ onBlur: (e) => {
641
+ if (context?.modal) {
642
+ e.preventDefault();
643
+ requestAnimationFrame(() => {
644
+ context?.invoker.element?.focus();
645
+ });
646
+ return;
647
+ }
648
+ onBlur?.(e);
649
+ context?.popover.close();
650
+ },
651
+ onFocus: (e) => {
652
+ onFocus?.(e);
653
+ context?.popover.show();
654
+ }
655
+ });
655
656
  const onMouseEnterHandler = (e) => {
656
657
  onMouseEnter?.(e);
657
658
  if (!context?.openOnHover) return;
658
- context.popover.show();
659
+ context.setContentHovered(true);
659
660
  };
660
661
  const onMouseLeaveHandler = (e) => {
661
662
  onMouseLeave?.(e);
662
663
  if (!context?.openOnHover) return;
663
- context.popover.close();
664
- };
665
- const onFocusHandler = (e) => {
666
- onFocus?.(e);
667
- context?.popover.show();
668
- };
669
- const onBlurHandler = (e) => {
670
- onBlur?.(e);
664
+ context.setContentHovered(false);
671
665
  };
672
666
  const onKeyDownHandler = (e) => {
673
667
  onKeyDown?.(e);
674
668
  if (e.code === "Escape" && !context?.disableCloseOnEscape) {
675
669
  context?.popover.close();
676
670
  }
677
- if (!context?.modal) {
678
- if (context?.controlled) {
679
- return;
680
- }
681
- if (e.code === "Tab" && !e.shiftKey) {
682
- if (focusables && compareElements(
683
- context.rootNode?.activeElement,
684
- focusables[focusables.length - 1],
685
- ["tabindex"]
686
- )) {
687
- context.popover.close();
688
- }
689
- }
690
- if (e.code === "Tab" && e.shiftKey) {
691
- if (focusables && compareElements(
692
- context.rootNode.activeElement,
693
- focusables[0],
694
- ["tabindex"]
695
- )) {
696
- context.popover.close();
697
- }
698
- }
699
- return;
700
- }
701
- if (e.code === "Tab" && !e.shiftKey) {
702
- if (focusables && compareElements(
703
- context.rootNode?.activeElement,
704
- focusables[focusables.length - 1],
705
- ["tabindex"]
706
- )) {
707
- if (context.disableTriggerFocus) {
708
- focusables[0].focus();
709
- } else {
710
- context.invoker.element?.focus();
711
- context.popover.show();
712
- }
713
- e.preventDefault();
714
- }
715
- }
716
- if (e.code === "Tab" && e.shiftKey) {
717
- if (focusables && compareElements(
718
- context.rootNode.activeElement,
719
- focusables[0],
720
- ["tabindex"]
721
- )) {
722
- if (context.disableTriggerFocus) {
723
- focusables[focusables.length - 1].focus();
724
- } else {
725
- context.invoker.element?.focus();
726
- context.popover.show();
727
- }
728
- e.preventDefault();
729
- }
730
- }
731
671
  };
732
- const manualPopover = context?.controlled || context?.disableCloseOnClickOutside || context?.disableCloseOnEscape || context?.openOnHover;
733
672
  const popoverContentRef = useMergeRefs([context?.popover.ref, ref]);
734
673
  const popoverScrollerRef = useMergeRefs([childrenRef, scrollerRef]);
735
674
  if (!supportsPopover())
@@ -743,7 +682,7 @@ const PopoverContent = forwardRef(
743
682
  return /* @__PURE__ */ jsxs(
744
683
  "div",
745
684
  {
746
- popover: manualPopover ? "manual" : "auto",
685
+ popover: "manual",
747
686
  id: context?.popover.id,
748
687
  "data-anv": "popover-content",
749
688
  className: popoverClassNames,
@@ -751,10 +690,10 @@ const PopoverContent = forwardRef(
751
690
  style: combinedStyles,
752
691
  onMouseEnter: onMouseEnterHandler,
753
692
  onMouseLeave: onMouseLeaveHandler,
754
- onBlur: onBlurHandler,
755
- onFocus: onFocusHandler,
756
693
  role: "region",
757
694
  ...rest,
695
+ onFocus: wrapperProps.onFocus,
696
+ onBlur: wrapperProps.onBlur,
758
697
  children: [
759
698
  /* @__PURE__ */ jsx(
760
699
  "div",
@@ -788,11 +727,11 @@ function PopoverTrigger(props) {
788
727
  return /* @__PURE__ */ jsx(PopoverLegacyTrigger, { ...props });
789
728
  if (!context) return;
790
729
  const { element, ...rest } = context.invoker;
791
- return children({ "data-test": "hello", ...rest });
730
+ return children(rest);
792
731
  }
793
732
  PopoverTrigger.displayName = "PopoverTrigger";
794
733
 
795
- const PopoverElement = (props) => {
734
+ const PopoverElement = forwardRef((props, ref) => {
796
735
  const {
797
736
  children,
798
737
  openOnHover = false,
@@ -831,11 +770,14 @@ const PopoverElement = (props) => {
831
770
  const [popover, setPopover] = useState(void 0);
832
771
  const [rootNode, setRootNode] = useState();
833
772
  const [arrowElement, setArrowElement] = useState(void 0);
834
- const [openState, setOpenState] = useState(
835
- open ?? defaultOpen
836
- );
773
+ const [openState, setOpenState] = useOptionallyControlledState({
774
+ controlledValue: open,
775
+ defaultValue: defaultOpen
776
+ });
837
777
  const arrowRef = useRef(null);
838
778
  const dialogContext = useContext(DialogContext);
779
+ const [triggerHovered, setTriggerHovered] = useState(false);
780
+ const [contentHovered, setContentHovered] = useState(false);
839
781
  const processMinHeight = typeof minHeight === "string" ? minHeight : `${minHeight}px`;
840
782
  usePopoverTransitionStates(popover, openState, {
841
783
  onOpenAnimationStart: useCallback(() => {
@@ -963,74 +905,58 @@ const PopoverElement = (props) => {
963
905
  };
964
906
  }, [invoker, popover, updatePosition, openState]);
965
907
  popover?.getRootNode();
966
- const { focusables } = useKeyboardFocusables(popover, {
967
- observeChange: true
968
- });
969
908
  const popoverId = id ?? `popover-${uid.replace(/:/g, "")}`;
970
909
  const isControlled = typeof open !== "undefined";
971
- const openTimeoutRef = useRef(null);
972
- const closeTimeoutRef = useRef(null);
973
910
  const openPopover = useCallback(() => {
974
- clearTimeout(closeTimeoutRef.current);
975
- clearTimeout(openTimeoutRef.current);
976
911
  if (!popover || !rootNode?.querySelector(`#${popoverId}`))
977
912
  return;
978
- openTimeoutRef.current = setTimeout(() => {
979
- safeShowPopover(popover);
980
- setOpenState(true);
981
- onOpenChange?.(true);
982
- dialogContext?.setHasOpenPopover?.(true);
983
- }, delay);
984
- }, [popover, rootNode, popoverId, delay, dialogContext]);
913
+ setOpenState(true);
914
+ onOpenChange?.(true);
915
+ }, [popover, rootNode, popoverId, onOpenChange, setOpenState]);
985
916
  const closePopover = useCallback(
986
917
  (fn) => {
987
- clearTimeout(openTimeoutRef.current);
988
- clearTimeout(closeTimeoutRef.current);
989
918
  if (!popover || !openState) return;
990
- closeTimeoutRef.current = setTimeout(() => {
991
- if (!openOnHover) onClose?.();
992
- setOpenState(false);
993
- onOpenChange?.(false);
994
- fn?.();
995
- safeHidePopover(popover);
996
- dialogContext?.setHasOpenPopover?.(false);
997
- }, 100);
919
+ if (!openOnHover) onClose?.();
920
+ setOpenState(false);
921
+ onOpenChange?.(false);
922
+ fn?.();
998
923
  },
999
- // eslint-disable-next-line react-hooks/exhaustive-deps -- onClose and onOpenChange are intentionally omitted to prevent the closePopover function from being recreated on every render, which could cause unnecessary re-runs of the controlled useEffect and potential infinite loops
1000
- [popover, openState, openOnHover, dialogContext]
924
+ [popover, openState, openOnHover, onClose, setOpenState, onOpenChange]
925
+ );
926
+ useImperativeHandle(
927
+ ref,
928
+ () => ({
929
+ openPopover,
930
+ closePopover
931
+ }),
932
+ [openPopover, closePopover]
1001
933
  );
1002
934
  useEffect(() => {
1003
- return () => {
1004
- clearTimeout(closeTimeoutRef.current);
1005
- clearTimeout(openTimeoutRef.current);
1006
- };
1007
- }, []);
1008
- const initialRender = useRef(true);
1009
- useEffect(() => {
1010
- if (initialRender.current === true) {
1011
- if (openState) openPopover();
1012
- initialRender.current = false;
1013
- return;
1014
- }
1015
- }, [openState, openPopover]);
1016
- useEffect(() => {
1017
- if (typeof open === "undefined") return;
1018
- if (open) {
1019
- openPopover();
935
+ if (typeof openState === "undefined") return;
936
+ if (openState) {
937
+ if (dialogContext) {
938
+ if (dialogContext?.ref?.current?.open) {
939
+ safeShowPopover(popover);
940
+ dialogContext?.setHasOpenPopover?.(true);
941
+ }
942
+ return;
943
+ }
944
+ safeShowPopover(popover);
1020
945
  } else {
1021
- closePopover();
946
+ safeHidePopover(popover);
947
+ dialogContext?.setHasOpenPopover?.(false);
1022
948
  }
1023
- }, [open, openPopover, closePopover]);
949
+ }, [openState, openPopover, closePopover, dialogContext, popover]);
1024
950
  useOnClickOutside({
951
+ disable: disableCloseOnClickOutside || !openState,
1025
952
  onOutsidePress: (e) => {
1026
- if (!open) return;
953
+ if (!openState) return;
1027
954
  onClickOutside?.(e);
1028
955
  onOutsidePress?.(e);
1029
956
  },
1030
957
  targets: [invoker, popover],
1031
958
  onClose: () => {
1032
- if (disableCloseOnClickOutside || openOnHover || isControlled || !openState)
1033
- return;
959
+ if (openOnHover || isControlled) return;
1034
960
  closePopover();
1035
961
  }
1036
962
  });
@@ -1067,7 +993,11 @@ const PopoverElement = (props) => {
1067
993
  resetKey: resetKey.current,
1068
994
  rootNode,
1069
995
  setRootNode,
1070
- focusables
996
+ delay,
997
+ triggerHovered,
998
+ setTriggerHovered,
999
+ contentHovered,
1000
+ setContentHovered
1071
1001
  };
1072
1002
  }, [
1073
1003
  popoverId,
@@ -1095,12 +1025,17 @@ const PopoverElement = (props) => {
1095
1025
  isControlled,
1096
1026
  modal,
1097
1027
  rootNode,
1098
- focusables
1028
+ delay,
1029
+ triggerHovered,
1030
+ setTriggerHovered,
1031
+ contentHovered,
1032
+ setContentHovered
1099
1033
  ]);
1100
1034
  if (!supportsPopover())
1101
1035
  return /* @__PURE__ */ jsx(PopoverLegacyElement, { ...props });
1102
1036
  return /* @__PURE__ */ jsx(PopoverContext.Provider, { value, children });
1103
- };
1037
+ });
1038
+ PopoverElement.displayName = "Popover";
1104
1039
  const Popover = Object.assign(PopoverElement, {
1105
1040
  /**
1106
1041
  * PopoverTrigger component for creating custom trigger elements.
@@ -1185,4 +1120,4 @@ const Popover = Object.assign(PopoverElement, {
1185
1120
  });
1186
1121
 
1187
1122
  export { Popover as P, PopoverButton as a, PopoverClose as b, PopoverContent as c, PopoverTrigger as d, PopoverLegacy as e, usePopoverContext as f, usePopoverLegacyContext as u };
1188
- //# sourceMappingURL=Popover-CrksxqKk.js.map
1123
+ //# sourceMappingURL=Popover-v8R920kj.js.map