@servicetitan/anvil2 2.0.4 → 2.2.0

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 (225) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/dist/{Calendar-jO-0jbbt.js → Calendar-D0CczOpQ.js} +3 -835
  3. package/dist/Calendar-D0CczOpQ.js.map +1 -0
  4. package/dist/{Calendar-DxLrWESu.js → Calendar-oNlBgZKB.js} +2 -2
  5. package/dist/{Calendar-DxLrWESu.js.map → Calendar-oNlBgZKB.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-9VbydUcM.js → Checkbox-DIY-6agd.js} +12 -12
  8. package/dist/Checkbox-DIY-6agd.js.map +1 -0
  9. package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DuzAqrE7.js} +2 -2
  10. package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DuzAqrE7.js.map} +1 -1
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-CNObHLjp.js → Combobox-CSGn20KQ.js} +14 -7
  13. package/dist/Combobox-CSGn20KQ.js.map +1 -0
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-CQpySyDq.js → DataTable-D30sE1Xt.js} +223 -19
  16. package/dist/DataTable-D30sE1Xt.js.map +1 -0
  17. package/dist/{DateFieldRange-BG86w0pX.js → DateFieldRange-DBOiqaML.js} +46 -36
  18. package/dist/DateFieldRange-DBOiqaML.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-Byu_jyye.js → DateFieldSingle-C4hU55MP.js} +38 -29
  21. package/dist/DateFieldSingle-C4hU55MP.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-BXkUiHIR.js} +14 -13
  24. package/dist/DateFieldYearless-BXkUiHIR.js.map +1 -0
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-CGffFnVT.js} +14 -13
  27. package/dist/DateFieldYearlessRange-CGffFnVT.js.map +1 -0
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-DJEDopC9.js} +9 -5
  30. package/dist/DaysOfTheWeek-DJEDopC9.js.map +1 -0
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DZPaz84r.js → Dialog-BbsZMnCA.js} +4 -4
  33. package/dist/{Dialog-DZPaz84r.js.map → Dialog-BbsZMnCA.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-pMQOa2jH.js → Drawer-Dhq76ot3.js} +4 -4
  36. package/dist/{Drawer-pMQOa2jH.js.map → Drawer-Dhq76ot3.js.map} +1 -1
  37. package/dist/Drawer.js +1 -1
  38. package/dist/DrillDown.js +1 -1
  39. package/dist/{FieldDialog-Be54L3E-.js → FieldDialog-CAuhkCZY.js} +541 -142
  40. package/dist/FieldDialog-CAuhkCZY.js.map +1 -0
  41. package/dist/FieldDialog.css +58 -28
  42. package/dist/{FieldLabel-DSrHbw9U.js → FieldLabel-DL0D6fvc.js} +2 -2
  43. package/dist/{FieldLabel-DSrHbw9U.js.map → FieldLabel-DL0D6fvc.js.map} +1 -1
  44. package/dist/FieldLabel.js +1 -1
  45. package/dist/FieldMessage-DS0COrjp.js +132 -0
  46. package/dist/FieldMessage-DS0COrjp.js.map +1 -0
  47. package/dist/FieldMessage.css +18 -4
  48. package/dist/FieldMessage.js +2 -1
  49. package/dist/FieldMessage.js.map +1 -1
  50. package/dist/{Helper-CK-XjpR3.js → Helper-PNGm_U2X.js} +7 -4
  51. package/dist/Helper-PNGm_U2X.js.map +1 -0
  52. package/dist/{InputMask-DoqWRi3t.js → InputMask-Ds0W2fKy.js} +2 -2
  53. package/dist/{InputMask-DoqWRi3t.js.map → InputMask-Ds0W2fKy.js.map} +1 -1
  54. package/dist/InputMask.js +1 -1
  55. package/dist/{ListView-CtRhYAls.js → ListView-MMmJDM--.js} +2 -2
  56. package/dist/{ListView-CtRhYAls.js.map → ListView-MMmJDM--.js.map} +1 -1
  57. package/dist/ListView.js +1 -1
  58. package/dist/MultiSelectField.js +1 -1
  59. package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bey99LzJ.js} +178 -58
  60. package/dist/MultiSelectFieldSync-Bey99LzJ.js.map +1 -0
  61. package/dist/NumberField-CDkEUfXW.js +237 -0
  62. package/dist/NumberField-CDkEUfXW.js.map +1 -0
  63. package/dist/NumberField.js +1 -1
  64. package/dist/{Page-vc7zs4tn.js → Page-BVxybI-j.js} +6 -6
  65. package/dist/{Page-vc7zs4tn.js.map → Page-BVxybI-j.js.map} +1 -1
  66. package/dist/Page.js +1 -1
  67. package/dist/{Popover-OOLK0hUz.js → Popover-4C5IVk8T.js} +7 -6
  68. package/dist/{Popover-OOLK0hUz.js.map → Popover-4C5IVk8T.js.map} +1 -1
  69. package/dist/Popover.css +15 -14
  70. package/dist/Popover.js +1 -1
  71. package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-BGwp-qnf.js} +16 -11
  72. package/dist/ProgressBar-BGwp-qnf.js.map +1 -0
  73. package/dist/ProgressBar.js +1 -1
  74. package/dist/{Radio-31wKzlZ4.js → Radio-BRcpSu-d.js} +12 -12
  75. package/dist/Radio-BRcpSu-d.js.map +1 -0
  76. package/dist/{Radio-BwWDJuLF.js → Radio-D7hNws2b.js} +2 -2
  77. package/dist/{Radio-BwWDJuLF.js.map → Radio-D7hNws2b.js.map} +1 -1
  78. package/dist/Radio.js +1 -1
  79. package/dist/{SelectCard-C91twG1S.js → SelectCard-Bag44PmE.js} +3 -3
  80. package/dist/{SelectCard-C91twG1S.js.map → SelectCard-Bag44PmE.js.map} +1 -1
  81. package/dist/SelectCard.js +1 -1
  82. package/dist/SelectField.js +1 -1
  83. package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-CigqXq3T.js} +67 -50
  84. package/dist/SelectFieldSync-CigqXq3T.js.map +1 -0
  85. package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DgsvUfyl.js} +2 -2
  86. package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DgsvUfyl.js.map} +1 -1
  87. package/dist/SelectTrigger.js +1 -1
  88. package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-OxfNqdIq.js} +12 -7
  89. package/dist/SelectTriggerBase-OxfNqdIq.js.map +1 -0
  90. package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
  91. package/dist/Stepper-D8lkCP8Y.js.map +1 -0
  92. package/dist/Stepper.js +1 -1
  93. package/dist/{Switch-DQICcdAv.js → Switch-D0zwZCg4.js} +2 -2
  94. package/dist/{Switch-DQICcdAv.js.map → Switch-D0zwZCg4.js.map} +1 -1
  95. package/dist/Switch.js +1 -1
  96. package/dist/Table.js +1 -1
  97. package/dist/{TextField-CDiiYSlT.js → TextField-BycenT6H.js} +13 -12
  98. package/dist/TextField-BycenT6H.js.map +1 -0
  99. package/dist/{TextField-CnYxS52Y.js → TextField-Dfzn2HeL.js} +2 -2
  100. package/dist/{TextField-CnYxS52Y.js.map → TextField-Dfzn2HeL.js.map} +1 -1
  101. package/dist/TextField.js +1 -1
  102. package/dist/{Textarea-BnHIDj2P.js → Textarea-BwbwJP6z.js} +13 -12
  103. package/dist/Textarea-BwbwJP6z.js.map +1 -0
  104. package/dist/Textarea.js +1 -1
  105. package/dist/{TimeField-ChqK40k_.js → TimeField-B0WSzSfJ.js} +4 -4
  106. package/dist/{TimeField-ChqK40k_.js.map → TimeField-B0WSzSfJ.js.map} +1 -1
  107. package/dist/TimeField.js +1 -1
  108. package/dist/TimezoneMessage-Cnsl4cHT.js +84 -0
  109. package/dist/TimezoneMessage-Cnsl4cHT.js.map +1 -0
  110. package/dist/TimezoneMessage.css +7 -0
  111. package/dist/Toast.js +2 -2
  112. package/dist/{Toaster-BlycAc63.js → Toaster-9Q_yaKGu.js} +18 -18
  113. package/dist/Toaster-9Q_yaKGu.js.map +1 -0
  114. package/dist/{Toaster-DW_bi2L9.js → Toaster-DHo8dnWH.js} +2 -2
  115. package/dist/{Toaster-DW_bi2L9.js.map → Toaster-DHo8dnWH.js.map} +1 -1
  116. package/dist/{Toolbar-vBomnRKG.js → Toolbar-CVOenuCF.js} +70 -23
  117. package/dist/Toolbar-CVOenuCF.js.map +1 -0
  118. package/dist/Toolbar.js +1 -1
  119. package/dist/{Tooltip-CUiAJXak.js → Tooltip-Bt62hC5J.js} +5 -5
  120. package/dist/{Tooltip-CUiAJXak.js.map → Tooltip-Bt62hC5J.js.map} +1 -1
  121. package/dist/Tooltip.css +9 -8
  122. package/dist/Tooltip.js +1 -1
  123. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-ztozRk-X.js} +3 -3
  124. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-ztozRk-X.js.map} +1 -1
  125. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
  126. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
  127. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
  128. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
  129. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
  130. package/dist/beta/components/MultiSelectField/types.d.ts +52 -8
  131. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
  132. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
  133. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
  134. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  135. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
  136. package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
  137. package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
  138. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
  139. package/dist/beta/components/SelectField/types.d.ts +24 -6
  140. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
  141. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
  142. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  143. package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
  144. package/dist/beta/components/Table/types.d.ts +54 -4
  145. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
  146. package/dist/beta.js +7 -7
  147. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  148. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  149. package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
  150. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  151. package/dist/components/DateFieldRange/DateFieldRange.d.ts +8 -1
  152. package/dist/components/DateFieldRange/internal/DateFieldRangeCalendar.d.ts +3 -1
  153. package/dist/components/DateFieldSingle/DateFieldSingle.d.ts +8 -1
  154. package/dist/components/DateFieldSingle/internal/DateFieldSingleCalendar.d.ts +3 -1
  155. package/dist/components/DateFieldSingle/internal/TimezoneMessage.d.ts +6 -0
  156. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  157. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
  158. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
  159. package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
  160. package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
  161. package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
  162. package/dist/components/FieldMessage/index.d.ts +1 -0
  163. package/dist/components/FieldMessage/utils.d.ts +7 -0
  164. package/dist/components/NumberField/NumberField.d.ts +24 -2
  165. package/dist/components/Page/Page.d.ts +2 -2
  166. package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
  167. package/dist/components/Radio/Radio.d.ts +2 -1
  168. package/dist/components/Radio/RadioGroup.d.ts +16 -8
  169. package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
  170. package/dist/components/Stepper/Stepper.d.ts +6 -2
  171. package/dist/components/TextField/internal/TextField.d.ts +12 -1
  172. package/dist/components/Textarea/Textarea.d.ts +8 -5
  173. package/dist/index-DXeGMe23.js +836 -0
  174. package/dist/index-DXeGMe23.js.map +1 -0
  175. package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
  176. package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  177. package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-K9kxJhLx.js} +88 -94
  178. package/dist/index.esm-K9kxJhLx.js.map +1 -0
  179. package/dist/index.js +31 -30
  180. package/dist/index.js.map +1 -1
  181. package/dist/internal/components/Helper/Helper.d.ts +12 -3
  182. package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
  183. package/dist/internal/components/StatusIcon/index.d.ts +1 -0
  184. package/dist/internal/functions/index.d.ts +1 -0
  185. package/dist/internal/functions/warnOnce.d.ts +5 -0
  186. package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
  187. package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-jbU4Cs5l.js} +2 -598
  188. package/dist/useDrilldown-jbU4Cs5l.js.map +1 -0
  189. package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-BRRbylek.js} +2 -2
  190. package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-BRRbylek.js.map} +1 -1
  191. package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
  192. package/dist/useNumberField-eMyk7MB8.js.map +1 -0
  193. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  194. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  195. package/dist/utils-pudAMGnO.js +25 -0
  196. package/dist/utils-pudAMGnO.js.map +1 -0
  197. package/package.json +9 -8
  198. package/dist/Calendar-jO-0jbbt.js.map +0 -1
  199. package/dist/Checkbox-9VbydUcM.js.map +0 -1
  200. package/dist/Combobox-CNObHLjp.js.map +0 -1
  201. package/dist/DataTable-CQpySyDq.js.map +0 -1
  202. package/dist/DateFieldRange-BG86w0pX.js.map +0 -1
  203. package/dist/DateFieldSingle-Byu_jyye.js.map +0 -1
  204. package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
  205. package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
  206. package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
  207. package/dist/FieldDialog-Be54L3E-.js.map +0 -1
  208. package/dist/FieldMessage-tEr6rWXS.js +0 -54
  209. package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
  210. package/dist/Helper-CK-XjpR3.js.map +0 -1
  211. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
  212. package/dist/NumberField-W1k8V5Qq.js.map +0 -1
  213. package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
  214. package/dist/Radio-31wKzlZ4.js.map +0 -1
  215. package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
  216. package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
  217. package/dist/Stepper-Jv9A3Ned.js.map +0 -1
  218. package/dist/TextField-CDiiYSlT.js.map +0 -1
  219. package/dist/Textarea-BnHIDj2P.js.map +0 -1
  220. package/dist/Toaster-BlycAc63.js.map +0 -1
  221. package/dist/Toolbar-vBomnRKG.js.map +0 -1
  222. package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
  223. package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
  224. package/dist/utils-BHKRoLps.js +0 -60
  225. package/dist/utils-BHKRoLps.js.map +0 -1
@@ -1,6 +1,5 @@
1
1
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
2
2
  import { D as DateTime, I as Info } from './luxon-wpz4A-OQ.js';
3
- import * as React from 'react';
4
3
  import { createContext, useContext, forwardRef, useState, useEffect, useRef, useCallback, useMemo, useId } from 'react';
5
4
  import { B as Button } from './Button-l7pTJdPc.js';
6
5
  import { S as SvgKeyboardArrowDown } from './keyboard_arrow_down-C8WQ38p1.js';
@@ -10,9 +9,9 @@ import { c as cx } from './index-SvGbrGuT.js';
10
9
  import { S as SrOnly } from './SrOnly-CrdBTl6E.js';
11
10
  import { u as useSwipe } from './useSwipe-Cp-CJxLU.js';
12
11
  import { G as Grid } from './Grid-CatFkT0X.js';
13
- import { S as SelectCard } from './SelectCard-C91twG1S.js';
12
+ import { S as SelectCard } from './SelectCard-Bag44PmE.js';
14
13
  import { u as useMergeRefs } from './useMergeRefs-Dfmtq9cI.js';
15
- import { flushSync } from 'react-dom';
14
+ import { u as useVirtualizer } from './index-DXeGMe23.js';
16
15
  import { u as useOptionallyControlledState } from './useOptionallyControlledState-DbDuos5L.js';
17
16
  import { u as usePrevious } from './usePrevious-Bvq-5auG.js';
18
17
  import { u as useLayoutPropsUtil } from './useLayoutPropsUtil-loxbyklF.js';
@@ -883,837 +882,6 @@ const CalendarMonth = forwardRef(
883
882
  );
884
883
  CalendarMonth.displayName = "CalendarMonth";
885
884
 
886
- function memo(getDeps, fn, opts) {
887
- let deps = opts.initialDeps ?? [];
888
- let result;
889
- function memoizedFunction() {
890
- var _a, _b, _c, _d;
891
- let depTime;
892
- if (opts.key && ((_a = opts.debug) == null ? void 0 : _a.call(opts))) depTime = Date.now();
893
- const newDeps = getDeps();
894
- const depsChanged = newDeps.length !== deps.length || newDeps.some((dep, index) => deps[index] !== dep);
895
- if (!depsChanged) {
896
- return result;
897
- }
898
- deps = newDeps;
899
- let resultTime;
900
- if (opts.key && ((_b = opts.debug) == null ? void 0 : _b.call(opts))) resultTime = Date.now();
901
- result = fn(...newDeps);
902
- if (opts.key && ((_c = opts.debug) == null ? void 0 : _c.call(opts))) {
903
- const depEndTime = Math.round((Date.now() - depTime) * 100) / 100;
904
- const resultEndTime = Math.round((Date.now() - resultTime) * 100) / 100;
905
- const resultFpsPercentage = resultEndTime / 16;
906
- const pad = (str, num) => {
907
- str = String(str);
908
- while (str.length < num) {
909
- str = " " + str;
910
- }
911
- return str;
912
- };
913
- console.info(
914
- `%c⏱ ${pad(resultEndTime, 5)} /${pad(depEndTime, 5)} ms`,
915
- `
916
- font-size: .6rem;
917
- font-weight: bold;
918
- color: hsl(${Math.max(
919
- 0,
920
- Math.min(120 - 120 * resultFpsPercentage, 120)
921
- )}deg 100% 31%);`,
922
- opts == null ? void 0 : opts.key
923
- );
924
- }
925
- (_d = opts == null ? void 0 : opts.onChange) == null ? void 0 : _d.call(opts, result);
926
- return result;
927
- }
928
- memoizedFunction.updateDeps = (newDeps) => {
929
- deps = newDeps;
930
- };
931
- return memoizedFunction;
932
- }
933
- function notUndefined(value, msg) {
934
- if (value === void 0) {
935
- throw new Error(`Unexpected undefined${""}`);
936
- } else {
937
- return value;
938
- }
939
- }
940
- const approxEqual = (a, b) => Math.abs(a - b) < 1.01;
941
- const debounce = (targetWindow, fn, ms) => {
942
- let timeoutId;
943
- return function(...args) {
944
- targetWindow.clearTimeout(timeoutId);
945
- timeoutId = targetWindow.setTimeout(() => fn.apply(this, args), ms);
946
- };
947
- };
948
-
949
- const getRect = (element) => {
950
- const { offsetWidth, offsetHeight } = element;
951
- return { width: offsetWidth, height: offsetHeight };
952
- };
953
- const defaultKeyExtractor = (index) => index;
954
- const defaultRangeExtractor = (range) => {
955
- const start = Math.max(range.startIndex - range.overscan, 0);
956
- const end = Math.min(range.endIndex + range.overscan, range.count - 1);
957
- const arr = [];
958
- for (let i = start; i <= end; i++) {
959
- arr.push(i);
960
- }
961
- return arr;
962
- };
963
- const observeElementRect = (instance, cb) => {
964
- const element = instance.scrollElement;
965
- if (!element) {
966
- return;
967
- }
968
- const targetWindow = instance.targetWindow;
969
- if (!targetWindow) {
970
- return;
971
- }
972
- const handler = (rect) => {
973
- const { width, height } = rect;
974
- cb({ width: Math.round(width), height: Math.round(height) });
975
- };
976
- handler(getRect(element));
977
- if (!targetWindow.ResizeObserver) {
978
- return () => {
979
- };
980
- }
981
- const observer = new targetWindow.ResizeObserver((entries) => {
982
- const run = () => {
983
- const entry = entries[0];
984
- if (entry == null ? void 0 : entry.borderBoxSize) {
985
- const box = entry.borderBoxSize[0];
986
- if (box) {
987
- handler({ width: box.inlineSize, height: box.blockSize });
988
- return;
989
- }
990
- }
991
- handler(getRect(element));
992
- };
993
- instance.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
994
- });
995
- observer.observe(element, { box: "border-box" });
996
- return () => {
997
- observer.unobserve(element);
998
- };
999
- };
1000
- const addEventListenerOptions = {
1001
- passive: true
1002
- };
1003
- const supportsScrollend = typeof window == "undefined" ? true : "onscrollend" in window;
1004
- const observeElementOffset = (instance, cb) => {
1005
- const element = instance.scrollElement;
1006
- if (!element) {
1007
- return;
1008
- }
1009
- const targetWindow = instance.targetWindow;
1010
- if (!targetWindow) {
1011
- return;
1012
- }
1013
- let offset = 0;
1014
- const fallback = instance.options.useScrollendEvent && supportsScrollend ? () => void 0 : debounce(
1015
- targetWindow,
1016
- () => {
1017
- cb(offset, false);
1018
- },
1019
- instance.options.isScrollingResetDelay
1020
- );
1021
- const createHandler = (isScrolling) => () => {
1022
- const { horizontal, isRtl } = instance.options;
1023
- offset = horizontal ? element["scrollLeft"] * (isRtl && -1 || 1) : element["scrollTop"];
1024
- fallback();
1025
- cb(offset, isScrolling);
1026
- };
1027
- const handler = createHandler(true);
1028
- const endHandler = createHandler(false);
1029
- endHandler();
1030
- element.addEventListener("scroll", handler, addEventListenerOptions);
1031
- const registerScrollendEvent = instance.options.useScrollendEvent && supportsScrollend;
1032
- if (registerScrollendEvent) {
1033
- element.addEventListener("scrollend", endHandler, addEventListenerOptions);
1034
- }
1035
- return () => {
1036
- element.removeEventListener("scroll", handler);
1037
- if (registerScrollendEvent) {
1038
- element.removeEventListener("scrollend", endHandler);
1039
- }
1040
- };
1041
- };
1042
- const measureElement = (element, entry, instance) => {
1043
- if (entry == null ? void 0 : entry.borderBoxSize) {
1044
- const box = entry.borderBoxSize[0];
1045
- if (box) {
1046
- const size = Math.round(
1047
- box[instance.options.horizontal ? "inlineSize" : "blockSize"]
1048
- );
1049
- return size;
1050
- }
1051
- }
1052
- return element[instance.options.horizontal ? "offsetWidth" : "offsetHeight"];
1053
- };
1054
- const elementScroll = (offset, {
1055
- adjustments = 0,
1056
- behavior
1057
- }, instance) => {
1058
- var _a, _b;
1059
- const toOffset = offset + adjustments;
1060
- (_b = (_a = instance.scrollElement) == null ? void 0 : _a.scrollTo) == null ? void 0 : _b.call(_a, {
1061
- [instance.options.horizontal ? "left" : "top"]: toOffset,
1062
- behavior
1063
- });
1064
- };
1065
- class Virtualizer {
1066
- constructor(opts) {
1067
- this.unsubs = [];
1068
- this.scrollElement = null;
1069
- this.targetWindow = null;
1070
- this.isScrolling = false;
1071
- this.measurementsCache = [];
1072
- this.itemSizeCache = /* @__PURE__ */ new Map();
1073
- this.pendingMeasuredCacheIndexes = [];
1074
- this.scrollRect = null;
1075
- this.scrollOffset = null;
1076
- this.scrollDirection = null;
1077
- this.scrollAdjustments = 0;
1078
- this.elementsCache = /* @__PURE__ */ new Map();
1079
- this.observer = /* @__PURE__ */ (() => {
1080
- let _ro = null;
1081
- const get = () => {
1082
- if (_ro) {
1083
- return _ro;
1084
- }
1085
- if (!this.targetWindow || !this.targetWindow.ResizeObserver) {
1086
- return null;
1087
- }
1088
- return _ro = new this.targetWindow.ResizeObserver((entries) => {
1089
- entries.forEach((entry) => {
1090
- const run = () => {
1091
- this._measureElement(entry.target, entry);
1092
- };
1093
- this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(run) : run();
1094
- });
1095
- });
1096
- };
1097
- return {
1098
- disconnect: () => {
1099
- var _a;
1100
- (_a = get()) == null ? void 0 : _a.disconnect();
1101
- _ro = null;
1102
- },
1103
- observe: (target) => {
1104
- var _a;
1105
- return (_a = get()) == null ? void 0 : _a.observe(target, { box: "border-box" });
1106
- },
1107
- unobserve: (target) => {
1108
- var _a;
1109
- return (_a = get()) == null ? void 0 : _a.unobserve(target);
1110
- }
1111
- };
1112
- })();
1113
- this.range = null;
1114
- this.setOptions = (opts2) => {
1115
- Object.entries(opts2).forEach(([key, value]) => {
1116
- if (typeof value === "undefined") delete opts2[key];
1117
- });
1118
- this.options = {
1119
- debug: false,
1120
- initialOffset: 0,
1121
- overscan: 1,
1122
- paddingStart: 0,
1123
- paddingEnd: 0,
1124
- scrollPaddingStart: 0,
1125
- scrollPaddingEnd: 0,
1126
- horizontal: false,
1127
- getItemKey: defaultKeyExtractor,
1128
- rangeExtractor: defaultRangeExtractor,
1129
- onChange: () => {
1130
- },
1131
- measureElement,
1132
- initialRect: { width: 0, height: 0 },
1133
- scrollMargin: 0,
1134
- gap: 0,
1135
- indexAttribute: "data-index",
1136
- initialMeasurementsCache: [],
1137
- lanes: 1,
1138
- isScrollingResetDelay: 150,
1139
- enabled: true,
1140
- isRtl: false,
1141
- useScrollendEvent: false,
1142
- useAnimationFrameWithResizeObserver: false,
1143
- ...opts2
1144
- };
1145
- };
1146
- this.notify = (sync) => {
1147
- var _a, _b;
1148
- (_b = (_a = this.options).onChange) == null ? void 0 : _b.call(_a, this, sync);
1149
- };
1150
- this.maybeNotify = memo(
1151
- () => {
1152
- this.calculateRange();
1153
- return [
1154
- this.isScrolling,
1155
- this.range ? this.range.startIndex : null,
1156
- this.range ? this.range.endIndex : null
1157
- ];
1158
- },
1159
- (isScrolling) => {
1160
- this.notify(isScrolling);
1161
- },
1162
- {
1163
- key: process.env.NODE_ENV !== "production" && "maybeNotify",
1164
- debug: () => this.options.debug,
1165
- initialDeps: [
1166
- this.isScrolling,
1167
- this.range ? this.range.startIndex : null,
1168
- this.range ? this.range.endIndex : null
1169
- ]
1170
- }
1171
- );
1172
- this.cleanup = () => {
1173
- this.unsubs.filter(Boolean).forEach((d) => d());
1174
- this.unsubs = [];
1175
- this.observer.disconnect();
1176
- this.scrollElement = null;
1177
- this.targetWindow = null;
1178
- };
1179
- this._didMount = () => {
1180
- return () => {
1181
- this.cleanup();
1182
- };
1183
- };
1184
- this._willUpdate = () => {
1185
- var _a;
1186
- const scrollElement = this.options.enabled ? this.options.getScrollElement() : null;
1187
- if (this.scrollElement !== scrollElement) {
1188
- this.cleanup();
1189
- if (!scrollElement) {
1190
- this.maybeNotify();
1191
- return;
1192
- }
1193
- this.scrollElement = scrollElement;
1194
- if (this.scrollElement && "ownerDocument" in this.scrollElement) {
1195
- this.targetWindow = this.scrollElement.ownerDocument.defaultView;
1196
- } else {
1197
- this.targetWindow = ((_a = this.scrollElement) == null ? void 0 : _a.window) ?? null;
1198
- }
1199
- this.elementsCache.forEach((cached) => {
1200
- this.observer.observe(cached);
1201
- });
1202
- this._scrollToOffset(this.getScrollOffset(), {
1203
- adjustments: void 0,
1204
- behavior: void 0
1205
- });
1206
- this.unsubs.push(
1207
- this.options.observeElementRect(this, (rect) => {
1208
- this.scrollRect = rect;
1209
- this.maybeNotify();
1210
- })
1211
- );
1212
- this.unsubs.push(
1213
- this.options.observeElementOffset(this, (offset, isScrolling) => {
1214
- this.scrollAdjustments = 0;
1215
- this.scrollDirection = isScrolling ? this.getScrollOffset() < offset ? "forward" : "backward" : null;
1216
- this.scrollOffset = offset;
1217
- this.isScrolling = isScrolling;
1218
- this.maybeNotify();
1219
- })
1220
- );
1221
- }
1222
- };
1223
- this.getSize = () => {
1224
- if (!this.options.enabled) {
1225
- this.scrollRect = null;
1226
- return 0;
1227
- }
1228
- this.scrollRect = this.scrollRect ?? this.options.initialRect;
1229
- return this.scrollRect[this.options.horizontal ? "width" : "height"];
1230
- };
1231
- this.getScrollOffset = () => {
1232
- if (!this.options.enabled) {
1233
- this.scrollOffset = null;
1234
- return 0;
1235
- }
1236
- this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset === "function" ? this.options.initialOffset() : this.options.initialOffset);
1237
- return this.scrollOffset;
1238
- };
1239
- this.getFurthestMeasurement = (measurements, index) => {
1240
- const furthestMeasurementsFound = /* @__PURE__ */ new Map();
1241
- const furthestMeasurements = /* @__PURE__ */ new Map();
1242
- for (let m = index - 1; m >= 0; m--) {
1243
- const measurement = measurements[m];
1244
- if (furthestMeasurementsFound.has(measurement.lane)) {
1245
- continue;
1246
- }
1247
- const previousFurthestMeasurement = furthestMeasurements.get(
1248
- measurement.lane
1249
- );
1250
- if (previousFurthestMeasurement == null || measurement.end > previousFurthestMeasurement.end) {
1251
- furthestMeasurements.set(measurement.lane, measurement);
1252
- } else if (measurement.end < previousFurthestMeasurement.end) {
1253
- furthestMeasurementsFound.set(measurement.lane, true);
1254
- }
1255
- if (furthestMeasurementsFound.size === this.options.lanes) {
1256
- break;
1257
- }
1258
- }
1259
- return furthestMeasurements.size === this.options.lanes ? Array.from(furthestMeasurements.values()).sort((a, b) => {
1260
- if (a.end === b.end) {
1261
- return a.index - b.index;
1262
- }
1263
- return a.end - b.end;
1264
- })[0] : void 0;
1265
- };
1266
- this.getMeasurementOptions = memo(
1267
- () => [
1268
- this.options.count,
1269
- this.options.paddingStart,
1270
- this.options.scrollMargin,
1271
- this.options.getItemKey,
1272
- this.options.enabled
1273
- ],
1274
- (count, paddingStart, scrollMargin, getItemKey, enabled) => {
1275
- this.pendingMeasuredCacheIndexes = [];
1276
- return {
1277
- count,
1278
- paddingStart,
1279
- scrollMargin,
1280
- getItemKey,
1281
- enabled
1282
- };
1283
- },
1284
- {
1285
- key: false
1286
- }
1287
- );
1288
- this.getMeasurements = memo(
1289
- () => [this.getMeasurementOptions(), this.itemSizeCache],
1290
- ({ count, paddingStart, scrollMargin, getItemKey, enabled }, itemSizeCache) => {
1291
- if (!enabled) {
1292
- this.measurementsCache = [];
1293
- this.itemSizeCache.clear();
1294
- return [];
1295
- }
1296
- if (this.measurementsCache.length === 0) {
1297
- this.measurementsCache = this.options.initialMeasurementsCache;
1298
- this.measurementsCache.forEach((item) => {
1299
- this.itemSizeCache.set(item.key, item.size);
1300
- });
1301
- }
1302
- const min = this.pendingMeasuredCacheIndexes.length > 0 ? Math.min(...this.pendingMeasuredCacheIndexes) : 0;
1303
- this.pendingMeasuredCacheIndexes = [];
1304
- const measurements = this.measurementsCache.slice(0, min);
1305
- for (let i = min; i < count; i++) {
1306
- const key = getItemKey(i);
1307
- const furthestMeasurement = this.options.lanes === 1 ? measurements[i - 1] : this.getFurthestMeasurement(measurements, i);
1308
- const start = furthestMeasurement ? furthestMeasurement.end + this.options.gap : paddingStart + scrollMargin;
1309
- const measuredSize = itemSizeCache.get(key);
1310
- const size = typeof measuredSize === "number" ? measuredSize : this.options.estimateSize(i);
1311
- const end = start + size;
1312
- const lane = furthestMeasurement ? furthestMeasurement.lane : i % this.options.lanes;
1313
- measurements[i] = {
1314
- index: i,
1315
- start,
1316
- size,
1317
- end,
1318
- key,
1319
- lane
1320
- };
1321
- }
1322
- this.measurementsCache = measurements;
1323
- return measurements;
1324
- },
1325
- {
1326
- key: process.env.NODE_ENV !== "production" && "getMeasurements",
1327
- debug: () => this.options.debug
1328
- }
1329
- );
1330
- this.calculateRange = memo(
1331
- () => [
1332
- this.getMeasurements(),
1333
- this.getSize(),
1334
- this.getScrollOffset(),
1335
- this.options.lanes
1336
- ],
1337
- (measurements, outerSize, scrollOffset, lanes) => {
1338
- return this.range = measurements.length > 0 && outerSize > 0 ? calculateRange({
1339
- measurements,
1340
- outerSize,
1341
- scrollOffset,
1342
- lanes
1343
- }) : null;
1344
- },
1345
- {
1346
- key: process.env.NODE_ENV !== "production" && "calculateRange",
1347
- debug: () => this.options.debug
1348
- }
1349
- );
1350
- this.getVirtualIndexes = memo(
1351
- () => {
1352
- let startIndex = null;
1353
- let endIndex = null;
1354
- const range = this.calculateRange();
1355
- if (range) {
1356
- startIndex = range.startIndex;
1357
- endIndex = range.endIndex;
1358
- }
1359
- this.maybeNotify.updateDeps([this.isScrolling, startIndex, endIndex]);
1360
- return [
1361
- this.options.rangeExtractor,
1362
- this.options.overscan,
1363
- this.options.count,
1364
- startIndex,
1365
- endIndex
1366
- ];
1367
- },
1368
- (rangeExtractor, overscan, count, startIndex, endIndex) => {
1369
- return startIndex === null || endIndex === null ? [] : rangeExtractor({
1370
- startIndex,
1371
- endIndex,
1372
- overscan,
1373
- count
1374
- });
1375
- },
1376
- {
1377
- key: process.env.NODE_ENV !== "production" && "getVirtualIndexes",
1378
- debug: () => this.options.debug
1379
- }
1380
- );
1381
- this.indexFromElement = (node) => {
1382
- const attributeName = this.options.indexAttribute;
1383
- const indexStr = node.getAttribute(attributeName);
1384
- if (!indexStr) {
1385
- console.warn(
1386
- `Missing attribute name '${attributeName}={index}' on measured element.`
1387
- );
1388
- return -1;
1389
- }
1390
- return parseInt(indexStr, 10);
1391
- };
1392
- this._measureElement = (node, entry) => {
1393
- const index = this.indexFromElement(node);
1394
- const item = this.measurementsCache[index];
1395
- if (!item) {
1396
- return;
1397
- }
1398
- const key = item.key;
1399
- const prevNode = this.elementsCache.get(key);
1400
- if (prevNode !== node) {
1401
- if (prevNode) {
1402
- this.observer.unobserve(prevNode);
1403
- }
1404
- this.observer.observe(node);
1405
- this.elementsCache.set(key, node);
1406
- }
1407
- if (node.isConnected) {
1408
- this.resizeItem(index, this.options.measureElement(node, entry, this));
1409
- }
1410
- };
1411
- this.resizeItem = (index, size) => {
1412
- const item = this.measurementsCache[index];
1413
- if (!item) {
1414
- return;
1415
- }
1416
- const itemSize = this.itemSizeCache.get(item.key) ?? item.size;
1417
- const delta = size - itemSize;
1418
- if (delta !== 0) {
1419
- if (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(item, delta, this) : item.start < this.getScrollOffset() + this.scrollAdjustments) {
1420
- if (process.env.NODE_ENV !== "production" && this.options.debug) {
1421
- console.info("correction", delta);
1422
- }
1423
- this._scrollToOffset(this.getScrollOffset(), {
1424
- adjustments: this.scrollAdjustments += delta,
1425
- behavior: void 0
1426
- });
1427
- }
1428
- this.pendingMeasuredCacheIndexes.push(item.index);
1429
- this.itemSizeCache = new Map(this.itemSizeCache.set(item.key, size));
1430
- this.notify(false);
1431
- }
1432
- };
1433
- this.measureElement = (node) => {
1434
- if (!node) {
1435
- this.elementsCache.forEach((cached, key) => {
1436
- if (!cached.isConnected) {
1437
- this.observer.unobserve(cached);
1438
- this.elementsCache.delete(key);
1439
- }
1440
- });
1441
- return;
1442
- }
1443
- this._measureElement(node, void 0);
1444
- };
1445
- this.getVirtualItems = memo(
1446
- () => [this.getVirtualIndexes(), this.getMeasurements()],
1447
- (indexes, measurements) => {
1448
- const virtualItems = [];
1449
- for (let k = 0, len = indexes.length; k < len; k++) {
1450
- const i = indexes[k];
1451
- const measurement = measurements[i];
1452
- virtualItems.push(measurement);
1453
- }
1454
- return virtualItems;
1455
- },
1456
- {
1457
- key: process.env.NODE_ENV !== "production" && "getVirtualItems",
1458
- debug: () => this.options.debug
1459
- }
1460
- );
1461
- this.getVirtualItemForOffset = (offset) => {
1462
- const measurements = this.getMeasurements();
1463
- if (measurements.length === 0) {
1464
- return void 0;
1465
- }
1466
- return notUndefined(
1467
- measurements[findNearestBinarySearch(
1468
- 0,
1469
- measurements.length - 1,
1470
- (index) => notUndefined(measurements[index]).start,
1471
- offset
1472
- )]
1473
- );
1474
- };
1475
- this.getOffsetForAlignment = (toOffset, align, itemSize = 0) => {
1476
- const size = this.getSize();
1477
- const scrollOffset = this.getScrollOffset();
1478
- if (align === "auto") {
1479
- align = toOffset >= scrollOffset + size ? "end" : "start";
1480
- }
1481
- if (align === "center") {
1482
- toOffset += (itemSize - size) / 2;
1483
- } else if (align === "end") {
1484
- toOffset -= size;
1485
- }
1486
- const maxOffset = this.getTotalSize() + this.options.scrollMargin - size;
1487
- return Math.max(Math.min(maxOffset, toOffset), 0);
1488
- };
1489
- this.getOffsetForIndex = (index, align = "auto") => {
1490
- index = Math.max(0, Math.min(index, this.options.count - 1));
1491
- const item = this.measurementsCache[index];
1492
- if (!item) {
1493
- return void 0;
1494
- }
1495
- const size = this.getSize();
1496
- const scrollOffset = this.getScrollOffset();
1497
- if (align === "auto") {
1498
- if (item.end >= scrollOffset + size - this.options.scrollPaddingEnd) {
1499
- align = "end";
1500
- } else if (item.start <= scrollOffset + this.options.scrollPaddingStart) {
1501
- align = "start";
1502
- } else {
1503
- return [scrollOffset, align];
1504
- }
1505
- }
1506
- const toOffset = align === "end" ? item.end + this.options.scrollPaddingEnd : item.start - this.options.scrollPaddingStart;
1507
- return [
1508
- this.getOffsetForAlignment(toOffset, align, item.size),
1509
- align
1510
- ];
1511
- };
1512
- this.isDynamicMode = () => this.elementsCache.size > 0;
1513
- this.scrollToOffset = (toOffset, { align = "start", behavior } = {}) => {
1514
- if (behavior === "smooth" && this.isDynamicMode()) {
1515
- console.warn(
1516
- "The `smooth` scroll behavior is not fully supported with dynamic size."
1517
- );
1518
- }
1519
- this._scrollToOffset(this.getOffsetForAlignment(toOffset, align), {
1520
- adjustments: void 0,
1521
- behavior
1522
- });
1523
- };
1524
- this.scrollToIndex = (index, { align: initialAlign = "auto", behavior } = {}) => {
1525
- if (behavior === "smooth" && this.isDynamicMode()) {
1526
- console.warn(
1527
- "The `smooth` scroll behavior is not fully supported with dynamic size."
1528
- );
1529
- }
1530
- index = Math.max(0, Math.min(index, this.options.count - 1));
1531
- let attempts = 0;
1532
- const maxAttempts = 10;
1533
- const tryScroll = (currentAlign) => {
1534
- if (!this.targetWindow) return;
1535
- const offsetInfo = this.getOffsetForIndex(index, currentAlign);
1536
- if (!offsetInfo) {
1537
- console.warn("Failed to get offset for index:", index);
1538
- return;
1539
- }
1540
- const [offset, align] = offsetInfo;
1541
- this._scrollToOffset(offset, { adjustments: void 0, behavior });
1542
- this.targetWindow.requestAnimationFrame(() => {
1543
- const currentOffset = this.getScrollOffset();
1544
- const afterInfo = this.getOffsetForIndex(index, align);
1545
- if (!afterInfo) {
1546
- console.warn("Failed to get offset for index:", index);
1547
- return;
1548
- }
1549
- if (!approxEqual(afterInfo[0], currentOffset)) {
1550
- scheduleRetry(align);
1551
- }
1552
- });
1553
- };
1554
- const scheduleRetry = (align) => {
1555
- if (!this.targetWindow) return;
1556
- attempts++;
1557
- if (attempts < maxAttempts) {
1558
- if (process.env.NODE_ENV !== "production" && this.options.debug) {
1559
- console.info("Schedule retry", attempts, maxAttempts);
1560
- }
1561
- this.targetWindow.requestAnimationFrame(() => tryScroll(align));
1562
- } else {
1563
- console.warn(
1564
- `Failed to scroll to index ${index} after ${maxAttempts} attempts.`
1565
- );
1566
- }
1567
- };
1568
- tryScroll(initialAlign);
1569
- };
1570
- this.scrollBy = (delta, { behavior } = {}) => {
1571
- if (behavior === "smooth" && this.isDynamicMode()) {
1572
- console.warn(
1573
- "The `smooth` scroll behavior is not fully supported with dynamic size."
1574
- );
1575
- }
1576
- this._scrollToOffset(this.getScrollOffset() + delta, {
1577
- adjustments: void 0,
1578
- behavior
1579
- });
1580
- };
1581
- this.getTotalSize = () => {
1582
- var _a;
1583
- const measurements = this.getMeasurements();
1584
- let end;
1585
- if (measurements.length === 0) {
1586
- end = this.options.paddingStart;
1587
- } else if (this.options.lanes === 1) {
1588
- end = ((_a = measurements[measurements.length - 1]) == null ? void 0 : _a.end) ?? 0;
1589
- } else {
1590
- const endByLane = Array(this.options.lanes).fill(null);
1591
- let endIndex = measurements.length - 1;
1592
- while (endIndex >= 0 && endByLane.some((val) => val === null)) {
1593
- const item = measurements[endIndex];
1594
- if (endByLane[item.lane] === null) {
1595
- endByLane[item.lane] = item.end;
1596
- }
1597
- endIndex--;
1598
- }
1599
- end = Math.max(...endByLane.filter((val) => val !== null));
1600
- }
1601
- return Math.max(
1602
- end - this.options.scrollMargin + this.options.paddingEnd,
1603
- 0
1604
- );
1605
- };
1606
- this._scrollToOffset = (offset, {
1607
- adjustments,
1608
- behavior
1609
- }) => {
1610
- this.options.scrollToFn(offset, { behavior, adjustments }, this);
1611
- };
1612
- this.measure = () => {
1613
- this.itemSizeCache = /* @__PURE__ */ new Map();
1614
- this.notify(false);
1615
- };
1616
- this.setOptions(opts);
1617
- }
1618
- }
1619
- const findNearestBinarySearch = (low, high, getCurrentValue, value) => {
1620
- while (low <= high) {
1621
- const middle = (low + high) / 2 | 0;
1622
- const currentValue = getCurrentValue(middle);
1623
- if (currentValue < value) {
1624
- low = middle + 1;
1625
- } else if (currentValue > value) {
1626
- high = middle - 1;
1627
- } else {
1628
- return middle;
1629
- }
1630
- }
1631
- if (low > 0) {
1632
- return low - 1;
1633
- } else {
1634
- return 0;
1635
- }
1636
- };
1637
- function calculateRange({
1638
- measurements,
1639
- outerSize,
1640
- scrollOffset,
1641
- lanes
1642
- }) {
1643
- const lastIndex = measurements.length - 1;
1644
- const getOffset = (index) => measurements[index].start;
1645
- if (measurements.length <= lanes) {
1646
- return {
1647
- startIndex: 0,
1648
- endIndex: lastIndex
1649
- };
1650
- }
1651
- let startIndex = findNearestBinarySearch(
1652
- 0,
1653
- lastIndex,
1654
- getOffset,
1655
- scrollOffset
1656
- );
1657
- let endIndex = startIndex;
1658
- if (lanes === 1) {
1659
- while (endIndex < lastIndex && measurements[endIndex].end < scrollOffset + outerSize) {
1660
- endIndex++;
1661
- }
1662
- } else if (lanes > 1) {
1663
- const endPerLane = Array(lanes).fill(0);
1664
- while (endIndex < lastIndex && endPerLane.some((pos) => pos < scrollOffset + outerSize)) {
1665
- const item = measurements[endIndex];
1666
- endPerLane[item.lane] = item.end;
1667
- endIndex++;
1668
- }
1669
- const startPerLane = Array(lanes).fill(scrollOffset + outerSize);
1670
- while (startIndex >= 0 && startPerLane.some((pos) => pos >= scrollOffset)) {
1671
- const item = measurements[startIndex];
1672
- startPerLane[item.lane] = item.start;
1673
- startIndex--;
1674
- }
1675
- startIndex = Math.max(0, startIndex - startIndex % lanes);
1676
- endIndex = Math.min(lastIndex, endIndex + (lanes - 1 - endIndex % lanes));
1677
- }
1678
- return { startIndex, endIndex };
1679
- }
1680
-
1681
- const useIsomorphicLayoutEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
1682
- function useVirtualizerBase(options) {
1683
- const rerender = React.useReducer(() => ({}), {})[1];
1684
- const resolvedOptions = {
1685
- ...options,
1686
- onChange: (instance2, sync) => {
1687
- var _a;
1688
- if (sync) {
1689
- flushSync(rerender);
1690
- } else {
1691
- rerender();
1692
- }
1693
- (_a = options.onChange) == null ? void 0 : _a.call(options, instance2, sync);
1694
- }
1695
- };
1696
- const [instance] = React.useState(
1697
- () => new Virtualizer(resolvedOptions)
1698
- );
1699
- instance.setOptions(resolvedOptions);
1700
- useIsomorphicLayoutEffect(() => {
1701
- return instance._didMount();
1702
- }, []);
1703
- useIsomorphicLayoutEffect(() => {
1704
- return instance._willUpdate();
1705
- });
1706
- return instance;
1707
- }
1708
- function useVirtualizer(options) {
1709
- return useVirtualizerBase({
1710
- observeElementRect,
1711
- observeElementOffset,
1712
- scrollToFn: elementScroll,
1713
- ...options
1714
- });
1715
- }
1716
-
1717
885
  const styles = {
1718
886
  "year-selector": "_year-selector_1pxps_2",
1719
887
  "year-grid": "_year-grid_1pxps_9",
@@ -2638,4 +1806,4 @@ const Calendar = Object.assign(CalendarElement, {
2638
1806
  });
2639
1807
 
2640
1808
  export { CalendarBetaPropsContext as C, Calendar as a, CalendarNow as b, CalendarYearButton as c, CalendarPrev as d, CalendarNext as e, CalendarMonthButton as f, CalendarMonth as g, useCalendarBetaProps as u };
2641
- //# sourceMappingURL=Calendar-jO-0jbbt.js.map
1809
+ //# sourceMappingURL=Calendar-D0CczOpQ.js.map