@servicetitan/anvil2 1.46.2 → 1.46.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.
Files changed (180) hide show
  1. package/CHANGELOG.md +34 -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-BqOvsaby.js} +246 -195
  8. package/dist/Calendar-BqOvsaby.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-DLqKbCcm.js} +35 -101
  22. package/dist/DateField-DLqKbCcm.js.map +1 -0
  23. package/dist/DateField.js +1 -1
  24. package/dist/{DateFieldRange-g7n5QYww.js → DateFieldRange-DI-iF-sd.js} +54 -55
  25. package/dist/DateFieldRange-DI-iF-sd.js.map +1 -0
  26. package/dist/DateFieldRange.js +1 -1
  27. package/dist/{DateFieldSingle-D3tneqeG.js → DateFieldSingle-BXakaSIE.js} +50 -52
  28. package/dist/DateFieldSingle-BXakaSIE.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-xsgqM6e1.js} +13 -20
  37. package/dist/Dialog-xsgqM6e1.js.map +1 -0
  38. package/dist/Dialog.js +1 -1
  39. package/dist/DndSort.js +46 -6
  40. package/dist/DndSort.js.map +1 -1
  41. package/dist/{Drawer-DT31CMRd.js → Drawer-DpN7wUNy.js} +14 -21
  42. package/dist/Drawer-DpN7wUNy.js.map +1 -0
  43. package/dist/Drawer.js +1 -1
  44. package/dist/{FieldLabel-BP8QK5UR.js → FieldLabel-Bgl3iu13.js} +2 -2
  45. package/dist/{FieldLabel-BP8QK5UR.js.map → FieldLabel-Bgl3iu13.js.map} +1 -1
  46. package/dist/FieldLabel.js +1 -1
  47. package/dist/{InputMask-CPuYMcw9.js → InputMask-B13KumrK.js} +2 -2
  48. package/dist/{InputMask-CPuYMcw9.js.map → InputMask-B13KumrK.js.map} +1 -1
  49. package/dist/InputMask.js +1 -1
  50. package/dist/{ListView-BJI8BQJ-.js → ListView-C-cVQZHp.js} +3 -3
  51. package/dist/{ListView-BJI8BQJ-.js.map → ListView-C-cVQZHp.js.map} +1 -1
  52. package/dist/ListView.js +1 -1
  53. package/dist/{Listbox-CUhMbFm2.js → Listbox-DxGx630W.js} +2 -2
  54. package/dist/{Listbox-CUhMbFm2.js.map → Listbox-DxGx630W.js.map} +1 -1
  55. package/dist/Listbox.js +1 -1
  56. package/dist/{Menu-t_11BIhU.js → Menu-DUZqzpwg.js} +6 -8
  57. package/dist/Menu-DUZqzpwg.js.map +1 -0
  58. package/dist/Menu.js +1 -1
  59. package/dist/{NumberField-Bjf9Tyvf.js → NumberField-DWPAy1eG.js} +7 -7
  60. package/dist/{NumberField-Bjf9Tyvf.js.map → NumberField-DWPAy1eG.js.map} +1 -1
  61. package/dist/NumberField.css +9 -6
  62. package/dist/NumberField.js +1 -1
  63. package/dist/{Page-BAyXnhz2.js → Page-CRuqAlNu.js} +7 -7
  64. package/dist/{Page-BAyXnhz2.js.map → Page-CRuqAlNu.js.map} +1 -1
  65. package/dist/Page.js +1 -1
  66. package/dist/{Pagination-DCBic619.js → Pagination-B_G9QcHf.js} +3 -3
  67. package/dist/{Pagination-DCBic619.js.map → Pagination-B_G9QcHf.js.map} +1 -1
  68. package/dist/Pagination.js +1 -1
  69. package/dist/{Popover-CrksxqKk.js → Popover-v8R920kj.js} +135 -200
  70. package/dist/Popover-v8R920kj.js.map +1 -0
  71. package/dist/Popover.js +1 -1
  72. package/dist/{ProgressBar-CgsAW2d8.js → ProgressBar-BWN2yv1s.js} +2 -2
  73. package/dist/{ProgressBar-CgsAW2d8.js.map → ProgressBar-BWN2yv1s.js.map} +1 -1
  74. package/dist/ProgressBar.js +1 -1
  75. package/dist/{Radio-C_rvxw74.js → Radio-C5riI-do.js} +2 -2
  76. package/dist/{Radio-C_rvxw74.js.map → Radio-C5riI-do.js.map} +1 -1
  77. package/dist/Radio.js +2 -2
  78. package/dist/{RadioGroup-DxBblSrx.js → RadioGroup-B7O06pVu.js} +2 -2
  79. package/dist/{RadioGroup-DxBblSrx.js.map → RadioGroup-B7O06pVu.js.map} +1 -1
  80. package/dist/{SearchField-Bb0uObwG.js → SearchField-CbwGErC4.js} +2 -2
  81. package/dist/{SearchField-Bb0uObwG.js.map → SearchField-CbwGErC4.js.map} +1 -1
  82. package/dist/SearchField.js +1 -1
  83. package/dist/{SegmentedControl-DC4BpdH5.js → SegmentedControl-CLDdes8W.js} +2 -2
  84. package/dist/{SegmentedControl-DC4BpdH5.js.map → SegmentedControl-CLDdes8W.js.map} +1 -1
  85. package/dist/SegmentedControl.js +1 -1
  86. package/dist/{SelectCard-DunNE9R3.js → SelectCard-Ca07K1FW.js} +3 -3
  87. package/dist/{SelectCard-DunNE9R3.js.map → SelectCard-Ca07K1FW.js.map} +1 -1
  88. package/dist/SelectCard.js +1 -1
  89. package/dist/{SelectTrigger-BYysLREL.js → SelectTrigger-CaXX1SHG.js} +3 -3
  90. package/dist/{SelectTrigger-BYysLREL.js.map → SelectTrigger-CaXX1SHG.js.map} +1 -1
  91. package/dist/SelectTrigger.js +1 -1
  92. package/dist/{SelectTriggerBase-DqUpJgzk.js → SelectTriggerBase-C7TLCna1.js} +3 -3
  93. package/dist/{SelectTriggerBase-DqUpJgzk.js.map → SelectTriggerBase-C7TLCna1.js.map} +1 -1
  94. package/dist/{SideNav-B9AWmF_H.js → SideNav-nqq5sAwz.js} +2 -2
  95. package/dist/{SideNav-B9AWmF_H.js.map → SideNav-nqq5sAwz.js.map} +1 -1
  96. package/dist/SideNav.js +1 -1
  97. package/dist/{Stepper-DHTrvfXw.js → Stepper-DQ_Hm-AI.js} +2 -2
  98. package/dist/{Stepper-DHTrvfXw.js.map → Stepper-DQ_Hm-AI.js.map} +1 -1
  99. package/dist/Stepper.js +1 -1
  100. package/dist/{Tab-0zx9hsw8.js → Tab-CzNx3IdF.js} +2 -2
  101. package/dist/{Tab-0zx9hsw8.js.map → Tab-CzNx3IdF.js.map} +1 -1
  102. package/dist/Tab.js +1 -1
  103. package/dist/{TextField-CFWs3lm9.js → TextField-D9gD-34Q.js} +3 -3
  104. package/dist/{TextField-CFWs3lm9.js.map → TextField-D9gD-34Q.js.map} +1 -1
  105. package/dist/{TextField-Cge6IRo5.js → TextField-uCHgwO5F.js} +2 -2
  106. package/dist/{TextField-Cge6IRo5.js.map → TextField-uCHgwO5F.js.map} +1 -1
  107. package/dist/TextField.js +1 -1
  108. package/dist/{Textarea-CXd3NKkW.js → Textarea-B2-6m291.js} +3 -3
  109. package/dist/{Textarea-CXd3NKkW.js.map → Textarea-B2-6m291.js.map} +1 -1
  110. package/dist/Textarea.js +1 -1
  111. package/dist/{TimeField-4v5aCwiG.js → TimeField-B5Jgy-Zg.js} +21 -8
  112. package/dist/TimeField-B5Jgy-Zg.js.map +1 -0
  113. package/dist/TimeField.js +1 -1
  114. package/dist/Toast.js +2 -2
  115. package/dist/{Toaster-bON5Xc1P.js → Toaster-CHyB-Mxs.js} +3 -3
  116. package/dist/{Toaster-bON5Xc1P.js.map → Toaster-CHyB-Mxs.js.map} +1 -1
  117. package/dist/{Toaster-D-rNSLTq.js → Toaster-CyiGDKMh.js} +3 -3
  118. package/dist/{Toaster-D-rNSLTq.js.map → Toaster-CyiGDKMh.js.map} +1 -1
  119. package/dist/{Toolbar-B2Jsuptz.js → Toolbar-DNErV9v8.js} +16 -15
  120. package/dist/Toolbar-DNErV9v8.js.map +1 -0
  121. package/dist/Toolbar.js +1 -1
  122. package/dist/{Tooltip-CtCLw_vx.js → Tooltip-DhtVlhah.js} +2 -2
  123. package/dist/{Tooltip-CtCLw_vx.js.map → Tooltip-DhtVlhah.js.map} +1 -1
  124. package/dist/Tooltip.js +1 -1
  125. package/dist/beta.js +1 -1
  126. package/dist/components/Calendar/Calendar.d.ts +5 -0
  127. package/dist/components/Calendar/CalendarNowButton.d.ts +3 -1
  128. package/dist/components/Checkbox/Checkbox.d.ts +1 -1
  129. package/dist/components/Dialog/internal/useInitialFocus.d.ts +15 -0
  130. package/dist/components/DndSort/internal/DndSortOverlay.d.ts +1 -1
  131. package/dist/components/NumberField/NumberField.d.ts +2 -2
  132. package/dist/components/Popover/Popover.d.ts +136 -1
  133. package/dist/components/Popover/PopoverTrigger.d.ts +0 -1
  134. package/dist/components/Popover/internal/PopoverContext.d.ts +5 -3
  135. package/dist/components/Popover/internal/usePopoverContext.d.ts +6 -4
  136. package/dist/components/Radio/Radio.d.ts +1 -1
  137. package/dist/hooks/useMergeRefs/useMergeRefs.d.ts +11 -0
  138. package/dist/index.js +43 -43
  139. package/dist/internal/components/index.d.ts +1 -0
  140. package/dist/internal/hooks/index.d.ts +2 -2
  141. package/dist/internal/hooks/useFocusWithin/useFocusWithin.d.ts +2 -1
  142. package/dist/internal/hooks/useKeyboardFocusables/useKeyboardFocusables.d.ts +0 -1
  143. package/dist/internal/hooks/useOnClickOutside/useOnClickOutside.d.ts +5 -1
  144. package/dist/internal/hooks/usePlatform/index.d.ts +1 -1
  145. package/dist/internal/index.d.ts +5 -0
  146. package/dist/internal/types/argTypes.d.ts +154 -0
  147. package/dist/internal/types/index.d.ts +1 -0
  148. package/dist/{useFocusWithin-BhhgRXdZ.js → useFocusWithin-hi77jsrB.js} +6 -3
  149. package/dist/useFocusWithin-hi77jsrB.js.map +1 -0
  150. package/dist/useInitialFocus-CAFMgbJG.js +130 -0
  151. package/dist/useInitialFocus-CAFMgbJG.js.map +1 -0
  152. package/dist/useMergeRefs-Dfmtq9cI.js +22 -0
  153. package/dist/useMergeRefs-Dfmtq9cI.js.map +1 -0
  154. package/dist/useMergeRefs.js +1 -1
  155. package/dist/{useOnClickOutside-B1ddwORK.js → useOnClickOutside-C5AZE_I6.js} +6 -65
  156. package/dist/useOnClickOutside-C5AZE_I6.js.map +1 -0
  157. package/dist/utils-Dh3aegV3.js +50 -0
  158. package/dist/utils-Dh3aegV3.js.map +1 -0
  159. package/package.json +1 -1
  160. package/dist/Calendar-X9qUi6Vx.js.map +0 -1
  161. package/dist/DateField-C43nfkbx.js.map +0 -1
  162. package/dist/DateFieldRange-g7n5QYww.js.map +0 -1
  163. package/dist/DateFieldSingle-D3tneqeG.js.map +0 -1
  164. package/dist/Dialog-FNJ16gY6.js.map +0 -1
  165. package/dist/Drawer-DT31CMRd.js.map +0 -1
  166. package/dist/Menu-t_11BIhU.js.map +0 -1
  167. package/dist/Popover-CrksxqKk.js.map +0 -1
  168. package/dist/TimeField-4v5aCwiG.js.map +0 -1
  169. package/dist/Toolbar-B2Jsuptz.js.map +0 -1
  170. package/dist/components/DateFieldSingle/internal/useDateFieldOrchestration.d.ts +0 -17
  171. package/dist/useDateFieldOrchestration-DyAc3gPJ.js +0 -138
  172. package/dist/useDateFieldOrchestration-DyAc3gPJ.js.map +0 -1
  173. package/dist/useDialogTransitionStates-C1TtiwA_.js +0 -64
  174. package/dist/useDialogTransitionStates-C1TtiwA_.js.map +0 -1
  175. package/dist/useFocusWithin-BhhgRXdZ.js.map +0 -1
  176. package/dist/useMergeRefs-Bde85AWI.js +0 -21
  177. package/dist/useMergeRefs-Bde85AWI.js.map +0 -1
  178. package/dist/useOnClickOutside-B1ddwORK.js.map +0 -1
  179. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js +0 -18
  180. package/dist/usePopoverCloseDelayWorkaround-BZcjPkvT.js.map +0 -1
@@ -1,5 +1,4 @@
1
1
  import { useRef, useState, useEffect, useCallback } from 'react';
2
- import { t as tabbable } from './DrawerContext-D4tWTLVf.js';
3
2
 
4
3
  const useOpenCloseTransitionStates = (openProp, options = {
5
4
  durationMs: 0
@@ -65,72 +64,14 @@ const useOpenCloseTransitionStates = (openProp, options = {
65
64
  };
66
65
  };
67
66
 
68
- const useKeyboardFocusables = (element, options = {
69
- observeChange: true,
70
- attributes: true,
71
- characterData: true,
72
- childList: true,
73
- subtree: true
74
- }) => {
75
- const [focusables, setFocusables] = useState(null);
76
- const observerRef = useRef();
77
- const mountedRef = useRef(true);
78
- useEffect(() => {
79
- const target = element instanceof HTMLElement ? element : element?.current;
80
- if (!target) return;
81
- if (observerRef.current) return;
82
- if (!options.observeChange && !focusables) {
83
- setFocusables(tabbable(target));
84
- return;
85
- }
86
- let timeoutId = null;
87
- const debounceDelay = 100;
88
- const mutationCallback = () => {
89
- const targetArr = tabbable(target);
90
- if (targetArr.length === 0) return;
91
- if (timeoutId) {
92
- clearTimeout(timeoutId);
93
- }
94
- timeoutId = setTimeout(() => {
95
- if (!mountedRef.current) return;
96
- setFocusables(targetArr);
97
- }, debounceDelay);
98
- };
99
- const observer = new MutationObserver(mutationCallback);
100
- observerRef.current = observer;
101
- observer.observe(target, {
102
- childList: true,
103
- // Observe changes to child elements
104
- subtree: true,
105
- // Observe changes to descendants of the target
106
- attributes: true,
107
- // Observe changes to attributes
108
- characterData: true
109
- // Observe changes to text content
110
- });
111
- }, [element, options]);
112
- useEffect(() => {
113
- return () => {
114
- mountedRef.current = false;
115
- if (!observerRef.current) return;
116
- observerRef.current.disconnect();
117
- };
118
- }, []);
119
- const updateFocusables = () => {
120
- const target = element instanceof HTMLElement ? element : element?.current;
121
- if (!target) return;
122
- setFocusables(tabbable(target));
123
- };
124
- return { focusables, updateFocusables };
125
- };
126
-
127
67
  const useOnClickOutside = ({
128
68
  onOutsidePress,
129
69
  targets,
130
- onClose
70
+ onClose,
71
+ disable
131
72
  }) => {
132
73
  useEffect(() => {
133
- if (typeof document === "undefined") return;
74
+ if (disable || typeof document === "undefined") return;
134
75
  let isClosable = false;
135
76
  const onMouseDownHandler = (e) => {
136
77
  let isTarget = false;
@@ -166,8 +107,8 @@ const useOnClickOutside = ({
166
107
  document.removeEventListener("mousedown", onMouseDownHandler);
167
108
  document.removeEventListener("mouseup", onMouseUpHandler);
168
109
  };
169
- }, [onClose, onOutsidePress, targets]);
110
+ }, [onClose, onOutsidePress, targets, disable]);
170
111
  };
171
112
 
172
- export { useKeyboardFocusables as a, useOnClickOutside as b, useOpenCloseTransitionStates as u };
173
- //# sourceMappingURL=useOnClickOutside-B1ddwORK.js.map
113
+ export { useOnClickOutside as a, useOpenCloseTransitionStates as u };
114
+ //# sourceMappingURL=useOnClickOutside-C5AZE_I6.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOnClickOutside-C5AZE_I6.js","sources":["../src/internal/hooks/useOpenCloseTransitionStates/useOpenCloseTransitionStates.ts","../src/internal/hooks/useOnClickOutside/useOnClickOutside.ts"],"sourcesContent":["import { useEffect, useState, useRef, useCallback } from \"react\";\n\n/**\n * Possible states for open/close transitions\n */\nexport type OpenCloseTransitionStates =\n | \"opening\"\n | \"open\"\n | \"closing\"\n | \"closed\";\n\n/**\n * Effects configuration for open/close transition states\n * @property {() => void} [onOpenAnimationStart] - Callback when opening animation starts\n * @property {() => void} [onCloseAnimationStart] - Callback when closing animation starts\n * @property {() => void} [onOpenAnimationComplete] - Callback when opening animation completes\n * @property {() => void} [onCloseAnimationComplete] - Callback when closing animation completes\n * @property {number | (() => number)} [durationMs] - Duration of the animation in milliseconds (or a function that returns the duration)\n */\nexport type OpenCloseTransitionStateEffects = {\n /**\n * Callback when opening animation starts\n */\n onOpenAnimationStart?: () => void;\n /**\n * Callback when closing animation starts\n */\n onCloseAnimationStart?: () => void;\n /**\n * Callback when opening animation completes\n */\n onOpenAnimationComplete?: () => void;\n /**\n * Callback when closing animation completes\n */\n onCloseAnimationComplete?: () => void;\n};\n\nexport type OpenCloseTransitionState = {\n state: OpenCloseTransitionStates;\n beginClosing: () => void;\n isOpenOrOpening: boolean;\n isClosedOrClosing: boolean;\n};\n\nexport type OpenCloseTransitionStateOptions = {\n durationMs: number | (() => number);\n onOpenAnimationStart?: () => void;\n onCloseAnimationStart?: () => void;\n onOpenAnimationComplete?: () => void;\n onCloseAnimationComplete?: () => void;\n};\n\n/**\n * Custom hook for managing open/close transition states and animations.\n *\n * @param openProp - The open prop controlling visibility\n * @param options - Additional, optional options including callbacks for animation start, complete, and initialization\n * @returns Object containing state, control functions, and utility flags\n */\nexport const useOpenCloseTransitionStates = (\n openProp: boolean | undefined,\n options: OpenCloseTransitionStateOptions = {\n durationMs: 0,\n },\n): OpenCloseTransitionState => {\n const {\n onOpenAnimationStart,\n onCloseAnimationStart,\n onOpenAnimationComplete,\n onCloseAnimationComplete,\n durationMs,\n } = options;\n const prevOpenProp = useRef<boolean | undefined>(openProp);\n const [state, setState] = useState<OpenCloseTransitionStates>(\n openProp ? \"open\" : \"closed\",\n );\n\n // Handle open/close prop changes\n useEffect(() => {\n if (prevOpenProp.current && !openProp) {\n // previously open, now closed\n setState(\"closing\");\n } else if (!prevOpenProp.current && openProp) {\n // previously closed, now open\n setState(\"opening\");\n } else {\n // Note: Using \"opening\" here catches the case where the element is initially open, allowing callbacks and animations to run.\n setState(openProp ? \"opening\" : \"closed\");\n }\n prevOpenProp.current = openProp;\n }, [openProp]);\n\n // Handle opening/closing animations\n useEffect(() => {\n if (!durationMs) return;\n if (state === \"open\" || state === \"closed\") return;\n if (state === \"opening\") {\n onOpenAnimationStart?.();\n } else if (state === \"closing\") {\n onCloseAnimationStart?.();\n }\n const d: number =\n typeof durationMs === \"function\" ? durationMs() : durationMs;\n const timeout = setTimeout(() => {\n if (state === \"opening\") {\n setState(\"open\");\n onOpenAnimationComplete?.();\n } else if (state === \"closing\") {\n setState(\"closed\");\n onCloseAnimationComplete?.();\n }\n }, d);\n\n return () => {\n clearTimeout(timeout);\n };\n }, [\n state,\n onOpenAnimationComplete,\n onCloseAnimationComplete,\n onOpenAnimationStart,\n onCloseAnimationStart,\n durationMs,\n ]);\n\n const beginClosing = useCallback(() => {\n setState(\"closing\");\n }, []);\n\n return {\n state,\n beginClosing,\n isOpenOrOpening: state === \"open\" || state === \"opening\",\n isClosedOrClosing: state === \"closed\" || state === \"closing\",\n };\n};\n","import { useEffect } from \"react\";\n\n/**\n * Props for the useOnClickOutside hook\n */\ntype UseOnClickOutsideProps = {\n /**\n * Callback when clicking outside targets\n */\n onOutsidePress?: (e: globalThis.MouseEvent) => void;\n /**\n * Callback when closing (after outside press)\n */\n onClose?: () => void;\n /**\n * Array of target elements to monitor\n */\n targets: (HTMLElement | undefined)[];\n /**\n * Whether to disable the useOnClickOutside hook\n */\n disable?: boolean;\n};\n\n/**\n * Custom hook for detecting clicks outside of specified target elements.\n *\n * Features:\n * - Detects clicks outside of multiple target elements\n * - Supports both mousedown and mouseup event handling\n * - Provides separate callbacks for outside press and close actions\n * - Handles SSR environments gracefully\n * - Automatically cleans up event listeners\n * - Uses composedPath for accurate event target detection\n * - Supports optional callbacks for flexible usage\n *\n * @param props - Configuration object containing targets and optional callbacks\n * @returns void\n */\nexport const useOnClickOutside = ({\n onOutsidePress,\n targets,\n onClose,\n disable,\n}: UseOnClickOutsideProps) => {\n useEffect(() => {\n if (disable || typeof document === \"undefined\") return;\n\n let isClosable = false;\n const onMouseDownHandler = (e: globalThis.MouseEvent) => {\n let isTarget = false;\n const path = e.composedPath();\n for (const el of targets) {\n if (el && path.includes(el)) {\n isTarget = true;\n break;\n }\n }\n\n if (!isTarget) {\n onOutsidePress?.(e);\n isClosable = true;\n }\n };\n const onMouseUpHandler = (e: globalThis.MouseEvent) => {\n if (!isClosable) return;\n let isTarget = false;\n const path = e.composedPath();\n for (const el of targets) {\n if (el && path.includes(el)) {\n isTarget = true;\n break;\n }\n }\n if (!isTarget) {\n onClose?.();\n }\n };\n\n document.addEventListener(\"mousedown\", onMouseDownHandler);\n document.addEventListener(\"mouseup\", onMouseUpHandler);\n return () => {\n document.removeEventListener(\"mousedown\", onMouseDownHandler);\n document.removeEventListener(\"mouseup\", onMouseUpHandler);\n };\n }, [onClose, onOutsidePress, targets, disable]);\n};\n"],"names":[],"mappings":";;AA4DO,MAAM,4BAAA,GAA+B,CAC1C,QAAA,EACA,OAAA,GAA2C;AAAA,EACzC,UAAA,EAAY;AACd,CAAA,KAC6B;AAC7B,EAAA,MAAM;AAAA,IACJ,oBAAA;AAAA,IACA,qBAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA;AAAA,GACF,GAAI,OAAA;AACJ,EAAA,MAAM,YAAA,GAAe,OAA4B,QAAQ,CAAA;AACzD,EAAA,MAAM,CAAC,KAAA,EAAO,QAAQ,CAAA,GAAI,QAAA;AAAA,IACxB,WAAW,MAAA,GAAS;AAAA,GACtB;AAGA,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,YAAA,CAAa,OAAA,IAAW,CAAC,QAAA,EAAU;AAErC,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB,CAAA,MAAA,IAAW,CAAC,YAAA,CAAa,OAAA,IAAW,QAAA,EAAU;AAE5C,MAAA,QAAA,CAAS,SAAS,CAAA;AAAA,IACpB,CAAA,MAAO;AAEL,MAAA,QAAA,CAAS,QAAA,GAAW,YAAY,QAAQ,CAAA;AAAA,IAC1C;AACA,IAAA,YAAA,CAAa,OAAA,GAAU,QAAA;AAAA,EACzB,CAAA,EAAG,CAAC,QAAQ,CAAC,CAAA;AAGb,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,CAAC,UAAA,EAAY;AACjB,IAAA,IAAI,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,QAAA,EAAU;AAC5C,IAAA,IAAI,UAAU,SAAA,EAAW;AACvB,MAAA,oBAAA,IAAuB;AAAA,IACzB,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,MAAA,qBAAA,IAAwB;AAAA,IAC1B;AACA,IAAA,MAAM,CAAA,GACJ,OAAO,UAAA,KAAe,UAAA,GAAa,YAAW,GAAI,UAAA;AACpD,IAAA,MAAM,OAAA,GAAU,WAAW,MAAM;AAC/B,MAAA,IAAI,UAAU,SAAA,EAAW;AACvB,QAAA,QAAA,CAAS,MAAM,CAAA;AACf,QAAA,uBAAA,IAA0B;AAAA,MAC5B,CAAA,MAAA,IAAW,UAAU,SAAA,EAAW;AAC9B,QAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,QAAA,wBAAA,IAA2B;AAAA,MAC7B;AAAA,IACF,GAAG,CAAC,CAAA;AAEJ,IAAA,OAAO,MAAM;AACX,MAAA,YAAA,CAAa,OAAO,CAAA;AAAA,IACtB,CAAA;AAAA,EACF,CAAA,EAAG;AAAA,IACD,KAAA;AAAA,IACA,uBAAA;AAAA,IACA,wBAAA;AAAA,IACA,oBAAA;AAAA,IACA,qBAAA;AAAA,IACA;AAAA,GACD,CAAA;AAED,EAAA,MAAM,YAAA,GAAe,YAAY,MAAM;AACrC,IAAA,QAAA,CAAS,SAAS,CAAA;AAAA,EACpB,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,OAAO;AAAA,IACL,KAAA;AAAA,IACA,YAAA;AAAA,IACA,eAAA,EAAiB,KAAA,KAAU,MAAA,IAAU,KAAA,KAAU,SAAA;AAAA,IAC/C,iBAAA,EAAmB,KAAA,KAAU,QAAA,IAAY,KAAA,KAAU;AAAA,GACrD;AACF;;ACjGO,MAAM,oBAAoB,CAAC;AAAA,EAChC,cAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA;AACF,CAAA,KAA8B;AAC5B,EAAA,SAAA,CAAU,MAAM;AACd,IAAA,IAAI,OAAA,IAAW,OAAO,QAAA,KAAa,WAAA,EAAa;AAEhD,IAAA,IAAI,UAAA,GAAa,KAAA;AACjB,IAAA,MAAM,kBAAA,GAAqB,CAAC,CAAA,KAA6B;AACvD,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,MAAM,IAAA,GAAO,EAAE,YAAA,EAAa;AAC5B,MAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,QAAA,IAAI,EAAA,IAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,EAAG;AAC3B,UAAA,QAAA,GAAW,IAAA;AACX,UAAA;AAAA,QACF;AAAA,MACF;AAEA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,cAAA,GAAiB,CAAC,CAAA;AAClB,QAAA,UAAA,GAAa,IAAA;AAAA,MACf;AAAA,IACF,CAAA;AACA,IAAA,MAAM,gBAAA,GAAmB,CAAC,CAAA,KAA6B;AACrD,MAAA,IAAI,CAAC,UAAA,EAAY;AACjB,MAAA,IAAI,QAAA,GAAW,KAAA;AACf,MAAA,MAAM,IAAA,GAAO,EAAE,YAAA,EAAa;AAC5B,MAAA,KAAA,MAAW,MAAM,OAAA,EAAS;AACxB,QAAA,IAAI,EAAA,IAAM,IAAA,CAAK,QAAA,CAAS,EAAE,CAAA,EAAG;AAC3B,UAAA,QAAA,GAAW,IAAA;AACX,UAAA;AAAA,QACF;AAAA,MACF;AACA,MAAA,IAAI,CAAC,QAAA,EAAU;AACb,QAAA,OAAA,IAAU;AAAA,MACZ;AAAA,IACF,CAAA;AAEA,IAAA,QAAA,CAAS,gBAAA,CAAiB,aAAa,kBAAkB,CAAA;AACzD,IAAA,QAAA,CAAS,gBAAA,CAAiB,WAAW,gBAAgB,CAAA;AACrD,IAAA,OAAO,MAAM;AACX,MAAA,QAAA,CAAS,mBAAA,CAAoB,aAAa,kBAAkB,CAAA;AAC5D,MAAA,QAAA,CAAS,mBAAA,CAAoB,WAAW,gBAAgB,CAAA;AAAA,IAC1D,CAAA;AAAA,EACF,GAAG,CAAC,OAAA,EAAS,cAAA,EAAgB,OAAA,EAAS,OAAO,CAAC,CAAA;AAChD;;;;"}
@@ -0,0 +1,50 @@
1
+ import { D as DateTime } from './Calendar-BqOvsaby.js';
2
+
3
+ const DateModeToFormatMap = {
4
+ "mm/dd/yyyy": "MM/dd/yyyy",
5
+ "dd/mm/yyyy": "dd/MM/yyyy",
6
+ "yyyy/mm/dd": "yyyy/MM/dd"
7
+ };
8
+ const DateModeToPlaceholderMap = {
9
+ "dd/mm/yyyy": "__/__/____",
10
+ "mm/dd/yyyy": "__/__/____",
11
+ "yyyy/mm/dd": "____/__/__"
12
+ };
13
+
14
+ function convertStringToDate(v) {
15
+ if (v === void 0 || v === null) {
16
+ return v;
17
+ }
18
+ const date = DateTime.fromISO(v, { setZone: true, zone: "utc" }).startOf(
19
+ "day"
20
+ );
21
+ if (date.isValid) {
22
+ return date;
23
+ }
24
+ return null;
25
+ }
26
+ function validateDate({
27
+ date,
28
+ constraints
29
+ }) {
30
+ const { required, unavailable, minDate, maxDate } = constraints;
31
+ if (!date) {
32
+ return required ? false : true;
33
+ }
34
+ if (unavailable?.dates?.some((d) => d.equals(date))) {
35
+ return false;
36
+ }
37
+ if (unavailable?.daysOfWeek?.includes(date.weekday)) {
38
+ return false;
39
+ }
40
+ if (minDate && date < minDate) {
41
+ return false;
42
+ }
43
+ if (maxDate && date > maxDate) {
44
+ return false;
45
+ }
46
+ return true;
47
+ }
48
+
49
+ export { DateModeToPlaceholderMap as D, DateModeToFormatMap as a, convertStringToDate as c, validateDate as v };
50
+ //# sourceMappingURL=utils-Dh3aegV3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils-Dh3aegV3.js","sources":["../src/components/DateFieldSingle/internal/constants.ts","../src/components/DateFieldSingle/internal/utils.ts"],"sourcesContent":["import { DateMode } from \"../types\";\n\nexport const DateModeToFormatMap: Record<DateMode, string> = {\n \"mm/dd/yyyy\": \"MM/dd/yyyy\",\n \"dd/mm/yyyy\": \"dd/MM/yyyy\",\n \"yyyy/mm/dd\": \"yyyy/MM/dd\",\n};\n\nexport const DateModeToPlaceholderMap: Record<DateMode, string> = {\n \"dd/mm/yyyy\": \"__/__/____\",\n \"mm/dd/yyyy\": \"__/__/____\",\n \"yyyy/mm/dd\": \"____/__/__\",\n};\n","import { DateTime } from \"luxon\";\n\nexport function convertStringToDate(\n v: string | null | undefined,\n): DateTime | null | undefined {\n if (v === undefined || v === null) {\n return v;\n }\n const date = DateTime.fromISO(v, { setZone: true, zone: \"utc\" }).startOf(\n \"day\",\n );\n if (date.isValid) {\n return date;\n }\n return null;\n}\nexport function validateDate({\n date,\n constraints,\n}: {\n date: DateTime | null;\n constraints: {\n required?: boolean;\n unavailable?: {\n dates?: DateTime[];\n daysOfWeek?: number[];\n };\n minDate?: DateTime;\n maxDate?: DateTime;\n };\n}) {\n const { required, unavailable, minDate, maxDate } = constraints;\n if (!date) {\n return required ? false : true;\n }\n if (unavailable?.dates?.some((d) => d.equals(date))) {\n return false;\n }\n if (unavailable?.daysOfWeek?.includes(date.weekday)) {\n return false;\n }\n if (minDate && date < minDate) {\n return false;\n }\n if (maxDate && date > maxDate) {\n return false;\n }\n return true;\n}\n"],"names":[],"mappings":";;AAEO,MAAM,mBAAA,GAAgD;AAAA,EAC3D,YAAA,EAAc,YAAA;AAAA,EACd,YAAA,EAAc,YAAA;AAAA,EACd,YAAA,EAAc;AAChB;AAEO,MAAM,wBAAA,GAAqD;AAAA,EAChE,YAAA,EAAc,YAAA;AAAA,EACd,YAAA,EAAc,YAAA;AAAA,EACd,YAAA,EAAc;AAChB;;ACVO,SAAS,oBACd,CAAA,EAC6B;AAC7B,EAAA,IAAI,CAAA,KAAM,MAAA,IAAa,CAAA,KAAM,IAAA,EAAM;AACjC,IAAA,OAAO,CAAA;AAAA,EACT;AACA,EAAA,MAAM,IAAA,GAAO,QAAA,CAAS,OAAA,CAAQ,CAAA,EAAG,EAAE,SAAS,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,CAAA,CAAE,OAAA;AAAA,IAC/D;AAAA,GACF;AACA,EAAA,IAAI,KAAK,OAAA,EAAS;AAChB,IAAA,OAAO,IAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;AACO,SAAS,YAAA,CAAa;AAAA,EAC3B,IAAA;AAAA,EACA;AACF,CAAA,EAWG;AACD,EAAA,MAAM,EAAE,QAAA,EAAU,WAAA,EAAa,OAAA,EAAS,SAAQ,GAAI,WAAA;AACpD,EAAA,IAAI,CAAC,IAAA,EAAM;AACT,IAAA,OAAO,WAAW,KAAA,GAAQ,IAAA;AAAA,EAC5B;AACA,EAAA,IAAI,WAAA,EAAa,OAAO,IAAA,CAAK,CAAC,MAAM,CAAA,CAAE,MAAA,CAAO,IAAI,CAAC,CAAA,EAAG;AACnD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,WAAA,EAAa,UAAA,EAAY,QAAA,CAAS,IAAA,CAAK,OAAO,CAAA,EAAG;AACnD,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,EAAS;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,IAAI,OAAA,IAAW,OAAO,OAAA,EAAS;AAC7B,IAAA,OAAO,KAAA;AAAA,EACT;AACA,EAAA,OAAO,IAAA;AACT;;;;"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@servicetitan/anvil2",
3
- "version": "1.46.2",
3
+ "version": "1.46.4",
4
4
  "type": "module",
5
5
  "types": "./dist/index.d.ts",
6
6
  "main": "./dist/index.js",