@servicetitan/anvil2 2.0.3 → 2.1.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 (209) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/dist/{Calendar-DUGQQkga.js → Calendar-BhCce9hE.js} +19 -845
  3. package/dist/Calendar-BhCce9hE.js.map +1 -0
  4. package/dist/{Calendar-BTr5I3t-.js → Calendar-D93exRLI.js} +2 -2
  5. package/dist/{Calendar-BTr5I3t-.js.map → Calendar-D93exRLI.js.map} +1 -1
  6. package/dist/Calendar.js +2 -2
  7. package/dist/{Checkbox-ZXftLNwB.js → Checkbox-DHWOiSml.js} +2 -2
  8. package/dist/{Checkbox-ZXftLNwB.js.map → Checkbox-DHWOiSml.js.map} +1 -1
  9. package/dist/{Checkbox-9VbydUcM.js → Checkbox-cVlWQOTq.js} +11 -11
  10. package/dist/Checkbox-cVlWQOTq.js.map +1 -0
  11. package/dist/Checkbox.js +1 -1
  12. package/dist/{Combobox-CNObHLjp.js → Combobox-BGYeW0ZF.js} +3 -3
  13. package/dist/{Combobox-CNObHLjp.js.map → Combobox-BGYeW0ZF.js.map} +1 -1
  14. package/dist/Combobox.js +1 -1
  15. package/dist/{DataTable-CQpySyDq.js → DataTable-Dnt-q7jf.js} +222 -18
  16. package/dist/DataTable-Dnt-q7jf.js.map +1 -0
  17. package/dist/{DateFieldRange-Cfnw1Chk.js → DateFieldRange-Dx2YbnQ-.js} +9 -9
  18. package/dist/DateFieldRange-Dx2YbnQ-.js.map +1 -0
  19. package/dist/DateFieldRange.js +1 -1
  20. package/dist/{DateFieldSingle-BRuERJAl.js → DateFieldSingle-CZg1n-n2.js} +7 -7
  21. package/dist/DateFieldSingle-CZg1n-n2.js.map +1 -0
  22. package/dist/DateFieldSingle.js +1 -1
  23. package/dist/{DateFieldYearless-Dw1k3_PY.js → DateFieldYearless-D7-O2FLP.js} +13 -12
  24. package/dist/DateFieldYearless-D7-O2FLP.js.map +1 -0
  25. package/dist/DateFieldYearless.js +1 -1
  26. package/dist/{DateFieldYearlessRange--plyld10.js → DateFieldYearlessRange-6EocQch6.js} +13 -12
  27. package/dist/DateFieldYearlessRange-6EocQch6.js.map +1 -0
  28. package/dist/DateFieldYearlessRange.js +1 -1
  29. package/dist/{DaysOfTheWeek-vE310Rjp.js → DaysOfTheWeek-BfCVsQK7.js} +7 -3
  30. package/dist/DaysOfTheWeek-BfCVsQK7.js.map +1 -0
  31. package/dist/DaysOfTheWeek.js +1 -1
  32. package/dist/{Dialog-DZPaz84r.js → Dialog-DVBl8phs.js} +4 -4
  33. package/dist/{Dialog-DZPaz84r.js.map → Dialog-DVBl8phs.js.map} +1 -1
  34. package/dist/Dialog.js +1 -1
  35. package/dist/{Drawer-pMQOa2jH.js → Drawer-c_d511iA.js} +4 -4
  36. package/dist/{Drawer-pMQOa2jH.js.map → Drawer-c_d511iA.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-BHDi3oXg.js} +536 -139
  40. package/dist/FieldDialog-BHDi3oXg.js.map +1 -0
  41. package/dist/FieldDialog.css +58 -28
  42. package/dist/FieldMessage-B0LBQl0D.js +132 -0
  43. package/dist/FieldMessage-B0LBQl0D.js.map +1 -0
  44. package/dist/FieldMessage.css +18 -4
  45. package/dist/FieldMessage.js +2 -1
  46. package/dist/FieldMessage.js.map +1 -1
  47. package/dist/{Helper-CK-XjpR3.js → Helper-BXiz9ZRC.js} +7 -4
  48. package/dist/Helper-BXiz9ZRC.js.map +1 -0
  49. package/dist/{InputMask-DoqWRi3t.js → InputMask-CdJ-cfLV.js} +2 -2
  50. package/dist/{InputMask-DoqWRi3t.js.map → InputMask-CdJ-cfLV.js.map} +1 -1
  51. package/dist/InputMask.js +1 -1
  52. package/dist/{ListView-CtRhYAls.js → ListView-D7GBpVnV.js} +2 -2
  53. package/dist/{ListView-CtRhYAls.js.map → ListView-D7GBpVnV.js.map} +1 -1
  54. package/dist/ListView.js +1 -1
  55. package/dist/MultiSelectField.js +1 -1
  56. package/dist/{MultiSelectFieldSync-xj7jXas-.js → MultiSelectFieldSync-Bc7IphJ7.js} +158 -57
  57. package/dist/MultiSelectFieldSync-Bc7IphJ7.js.map +1 -0
  58. package/dist/NumberField-CcGYnIFG.js +237 -0
  59. package/dist/NumberField-CcGYnIFG.js.map +1 -0
  60. package/dist/NumberField.js +1 -1
  61. package/dist/{Page-vc7zs4tn.js → Page-D_IpquWk.js} +5 -5
  62. package/dist/{Page-vc7zs4tn.js.map → Page-D_IpquWk.js.map} +1 -1
  63. package/dist/Page.js +1 -1
  64. package/dist/{Popover-OOLK0hUz.js → Popover-BxgfNjyI.js} +3 -2
  65. package/dist/{Popover-OOLK0hUz.js.map → Popover-BxgfNjyI.js.map} +1 -1
  66. package/dist/Popover.js +1 -1
  67. package/dist/{ProgressBar-HA9RPZfC.js → ProgressBar-B_g3VRUD.js} +15 -10
  68. package/dist/ProgressBar-B_g3VRUD.js.map +1 -0
  69. package/dist/ProgressBar.js +1 -1
  70. package/dist/{Radio-31wKzlZ4.js → Radio-CtG1jOiO.js} +11 -11
  71. package/dist/Radio-CtG1jOiO.js.map +1 -0
  72. package/dist/{Radio-BwWDJuLF.js → Radio-DpSPaTCO.js} +2 -2
  73. package/dist/{Radio-BwWDJuLF.js.map → Radio-DpSPaTCO.js.map} +1 -1
  74. package/dist/Radio.js +1 -1
  75. package/dist/{SelectCard-C91twG1S.js → SelectCard-WXTxM25t.js} +3 -3
  76. package/dist/{SelectCard-C91twG1S.js.map → SelectCard-WXTxM25t.js.map} +1 -1
  77. package/dist/SelectCard.js +1 -1
  78. package/dist/SelectField.js +1 -1
  79. package/dist/{SelectFieldSync-BFsJssdD.js → SelectFieldSync-0UwcyJTA.js} +47 -49
  80. package/dist/SelectFieldSync-0UwcyJTA.js.map +1 -0
  81. package/dist/{SelectTrigger-Cxhx9IVo.js → SelectTrigger-DhEe9uk9.js} +2 -2
  82. package/dist/{SelectTrigger-Cxhx9IVo.js.map → SelectTrigger-DhEe9uk9.js.map} +1 -1
  83. package/dist/SelectTrigger.js +1 -1
  84. package/dist/{SelectTriggerBase-aaOWep-V.js → SelectTriggerBase-C6HYuH_N.js} +11 -6
  85. package/dist/SelectTriggerBase-C6HYuH_N.js.map +1 -0
  86. package/dist/{Stepper-Jv9A3Ned.js → Stepper-D8lkCP8Y.js} +11 -2
  87. package/dist/Stepper-D8lkCP8Y.js.map +1 -0
  88. package/dist/Stepper.js +1 -1
  89. package/dist/{Switch-DQICcdAv.js → Switch-stfkX7Jb.js} +2 -2
  90. package/dist/{Switch-DQICcdAv.js.map → Switch-stfkX7Jb.js.map} +1 -1
  91. package/dist/Switch.js +1 -1
  92. package/dist/Table.js +1 -1
  93. package/dist/{TextField-CDiiYSlT.js → TextField-DoC8YyDM.js} +12 -11
  94. package/dist/TextField-DoC8YyDM.js.map +1 -0
  95. package/dist/{TextField-CnYxS52Y.js → TextField-rpj9q7zM.js} +2 -2
  96. package/dist/{TextField-CnYxS52Y.js.map → TextField-rpj9q7zM.js.map} +1 -1
  97. package/dist/TextField.js +1 -1
  98. package/dist/{Textarea-BnHIDj2P.js → Textarea-NLBfav5i.js} +12 -11
  99. package/dist/Textarea-NLBfav5i.js.map +1 -0
  100. package/dist/Textarea.js +1 -1
  101. package/dist/{TimeField-ChqK40k_.js → TimeField-CnhHEvuK.js} +4 -4
  102. package/dist/{TimeField-ChqK40k_.js.map → TimeField-CnhHEvuK.js.map} +1 -1
  103. package/dist/TimeField.js +1 -1
  104. package/dist/Toast.js +2 -2
  105. package/dist/{Toaster-BlycAc63.js → Toaster-Ca0dk3qg.js} +18 -18
  106. package/dist/Toaster-Ca0dk3qg.js.map +1 -0
  107. package/dist/{Toaster-DW_bi2L9.js → Toaster-ChpE9e3Z.js} +2 -2
  108. package/dist/{Toaster-DW_bi2L9.js.map → Toaster-ChpE9e3Z.js.map} +1 -1
  109. package/dist/{Toolbar-CUjj2YEZ.js → Toolbar-BO_vOFMg.js} +69 -22
  110. package/dist/Toolbar-BO_vOFMg.js.map +1 -0
  111. package/dist/Toolbar.js +1 -1
  112. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js → YearlessDateInputWithPicker-BqDyd-Vq.js} +3 -3
  113. package/dist/{YearlessDateInputWithPicker-DZSb8sPf.js.map → YearlessDateInputWithPicker-BqDyd-Vq.js.map} +1 -1
  114. package/dist/beta/components/MultiSelectField/MultiSelectField.d.ts +2 -0
  115. package/dist/beta/components/MultiSelectField/MultiSelectFieldSync.d.ts +43 -4
  116. package/dist/beta/components/MultiSelectField/internal/MultiSelectFieldList.d.ts +5 -5
  117. package/dist/beta/components/MultiSelectField/internal/useComboMultiple.d.ts +13 -2
  118. package/dist/beta/components/MultiSelectField/stories/MultiSelectField.stories.data.d.ts +1 -0
  119. package/dist/beta/components/MultiSelectField/types.d.ts +50 -8
  120. package/dist/beta/components/SelectField/SelectFieldSync.d.ts +10 -3
  121. package/dist/beta/components/SelectField/internal/FieldListBase.d.ts +6 -5
  122. package/dist/beta/components/SelectField/internal/SelectFieldList.d.ts +4 -2
  123. package/dist/beta/components/SelectField/internal/SelectFieldListItem.d.ts +2 -1
  124. package/dist/beta/components/SelectField/internal/VirtualizedFieldListBase.d.ts +2 -0
  125. package/dist/beta/components/SelectField/internal/useCombo.d.ts +3 -1
  126. package/dist/beta/components/SelectField/internal/useFieldListSections.d.ts +55 -0
  127. package/dist/beta/components/SelectField/stories/SelectField.stories.data.d.ts +1 -0
  128. package/dist/beta/components/SelectField/types.d.ts +22 -6
  129. package/dist/beta/components/Table/DataTable/internal/editable-cells/DataTableEditableNumberCell.d.ts +7 -0
  130. package/dist/beta/components/Table/DataTable/internal/util/getTanStackColumnDef.d.ts +1 -0
  131. package/dist/beta/components/Table/DataTable/stories/DataTable.story-data.d.ts +1 -0
  132. package/dist/beta/components/Table/createColumnHelper.d.ts +36 -9
  133. package/dist/beta/components/Table/types.d.ts +54 -4
  134. package/dist/beta/components/Toolbar/Filters/internal/utils/filter-state.d.ts +1 -0
  135. package/dist/beta.js +7 -7
  136. package/dist/components/ButtonToggle/ButtonToggle.d.ts +1 -1
  137. package/dist/components/Checkbox/Checkbox.d.ts +2 -1
  138. package/dist/components/Checkbox/CheckboxGroup.d.ts +16 -8
  139. package/dist/components/Checkbox/internal/Checkbox.d.ts +1 -1
  140. package/dist/components/DateFieldSingle/internal/utils.d.ts +11 -0
  141. package/dist/components/DateFieldYearless/DateFieldYearless.d.ts +8 -3
  142. package/dist/components/DateFieldYearlessRange/DateFieldYearlessRange.d.ts +12 -1
  143. package/dist/components/DaysOfTheWeek/DaysOfTheWeek.d.ts +20 -6
  144. package/dist/components/Dialog/internal/useInitialFocus.d.ts +5 -1
  145. package/dist/components/FieldMessage/FieldMessage.d.ts +39 -20
  146. package/dist/components/FieldMessage/index.d.ts +1 -0
  147. package/dist/components/FieldMessage/utils.d.ts +7 -0
  148. package/dist/components/NumberField/NumberField.d.ts +24 -2
  149. package/dist/components/Page/Page.d.ts +2 -2
  150. package/dist/components/ProgressBar/ProgressBar.d.ts +8 -3
  151. package/dist/components/Radio/Radio.d.ts +2 -1
  152. package/dist/components/Radio/RadioGroup.d.ts +16 -8
  153. package/dist/components/SelectTrigger/internal/SelectTriggerBase.d.ts +1 -1
  154. package/dist/components/Stepper/Stepper.d.ts +6 -2
  155. package/dist/components/TextField/internal/TextField.d.ts +12 -1
  156. package/dist/components/Textarea/Textarea.d.ts +8 -5
  157. package/dist/index-DXeGMe23.js +836 -0
  158. package/dist/index-DXeGMe23.js.map +1 -0
  159. package/dist/{useOnClickOutside-Cyqbe1n3.js → index.esm-BZV0wNKZ.js} +87 -94
  160. package/dist/index.esm-BZV0wNKZ.js.map +1 -0
  161. package/dist/{index.esm-BMOZFPwN.js → index.esm-C2ZhC_8d.js} +2 -2
  162. package/dist/{index.esm-BMOZFPwN.js.map → index.esm-C2ZhC_8d.js.map} +1 -1
  163. package/dist/index.js +29 -28
  164. package/dist/index.js.map +1 -1
  165. package/dist/internal/components/Helper/Helper.d.ts +12 -3
  166. package/dist/internal/components/StatusIcon/StatusIcon.d.ts +45 -0
  167. package/dist/internal/components/StatusIcon/index.d.ts +1 -0
  168. package/dist/internal/functions/index.d.ts +1 -0
  169. package/dist/internal/functions/warnOnce.d.ts +5 -0
  170. package/dist/internal/hooks/useNumberField/useNumberField.d.ts +1 -1
  171. package/dist/{useDrilldown-lAdB3FFW.js → useDrilldown-CjabTI9n.js} +2 -598
  172. package/dist/useDrilldown-CjabTI9n.js.map +1 -0
  173. package/dist/{useInitialFocus-nOW12jQ5.js → useInitialFocus-CdoVwSbr.js} +2 -2
  174. package/dist/{useInitialFocus-nOW12jQ5.js.map → useInitialFocus-CdoVwSbr.js.map} +1 -1
  175. package/dist/{NumberField-W1k8V5Qq.js → useNumberField-eMyk7MB8.js} +5 -235
  176. package/dist/useNumberField-eMyk7MB8.js.map +1 -0
  177. package/dist/useOnClickOutside-Zw5vzxSq.js +71 -0
  178. package/dist/useOnClickOutside-Zw5vzxSq.js.map +1 -0
  179. package/dist/{utils-Cj6v6CZ-.js → utils-BHKRoLps.js} +9 -2
  180. package/dist/utils-BHKRoLps.js.map +1 -0
  181. package/dist/utils-pudAMGnO.js +25 -0
  182. package/dist/utils-pudAMGnO.js.map +1 -0
  183. package/package.json +10 -10
  184. package/dist/Calendar-DUGQQkga.js.map +0 -1
  185. package/dist/Checkbox-9VbydUcM.js.map +0 -1
  186. package/dist/DataTable-CQpySyDq.js.map +0 -1
  187. package/dist/DateFieldRange-Cfnw1Chk.js.map +0 -1
  188. package/dist/DateFieldSingle-BRuERJAl.js.map +0 -1
  189. package/dist/DateFieldYearless-Dw1k3_PY.js.map +0 -1
  190. package/dist/DateFieldYearlessRange--plyld10.js.map +0 -1
  191. package/dist/DaysOfTheWeek-vE310Rjp.js.map +0 -1
  192. package/dist/FieldDialog-Be54L3E-.js.map +0 -1
  193. package/dist/FieldMessage-tEr6rWXS.js +0 -54
  194. package/dist/FieldMessage-tEr6rWXS.js.map +0 -1
  195. package/dist/Helper-CK-XjpR3.js.map +0 -1
  196. package/dist/MultiSelectFieldSync-xj7jXas-.js.map +0 -1
  197. package/dist/NumberField-W1k8V5Qq.js.map +0 -1
  198. package/dist/ProgressBar-HA9RPZfC.js.map +0 -1
  199. package/dist/Radio-31wKzlZ4.js.map +0 -1
  200. package/dist/SelectFieldSync-BFsJssdD.js.map +0 -1
  201. package/dist/SelectTriggerBase-aaOWep-V.js.map +0 -1
  202. package/dist/Stepper-Jv9A3Ned.js.map +0 -1
  203. package/dist/TextField-CDiiYSlT.js.map +0 -1
  204. package/dist/Textarea-BnHIDj2P.js.map +0 -1
  205. package/dist/Toaster-BlycAc63.js.map +0 -1
  206. package/dist/Toolbar-CUjj2YEZ.js.map +0 -1
  207. package/dist/useDrilldown-lAdB3FFW.js.map +0 -1
  208. package/dist/useOnClickOutside-Cyqbe1n3.js.map +0 -1
  209. package/dist/utils-Cj6v6CZ-.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-WXTxM25t.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",
@@ -2418,11 +1586,14 @@ const CalendarElement = forwardRef(
2418
1586
  setToolbarFocus(toolbarFocusStates[0]);
2419
1587
  setSelectedMonth(month);
2420
1588
  setFocusedDate(
2421
- DateTime.fromObject({
2422
- year: focusedDate?.year ?? 1,
2423
- month,
2424
- day: 1
2425
- }).setZone(defaultTimeZone).startOf("day")
1589
+ DateTime.fromObject(
1590
+ {
1591
+ year: focusedDate?.year ?? 1,
1592
+ month,
1593
+ day: 1
1594
+ },
1595
+ { zone: defaultTimeZone }
1596
+ ).startOf("day")
2426
1597
  );
2427
1598
  setCalendarSelectionState("day");
2428
1599
  },
@@ -2436,11 +1607,14 @@ const CalendarElement = forwardRef(
2436
1607
  setToolbarFocus(toolbarFocusStates[1]);
2437
1608
  setSelectedYear(year);
2438
1609
  setFocusedDate(
2439
- DateTime.fromObject({
2440
- year,
2441
- month: focusedDate?.month ?? 1,
2442
- day: 1
2443
- }).setZone(defaultTimeZone).startOf("day")
1610
+ DateTime.fromObject(
1611
+ {
1612
+ year,
1613
+ month: focusedDate?.month ?? 1,
1614
+ day: 1
1615
+ },
1616
+ { zone: defaultTimeZone }
1617
+ ).startOf("day")
2444
1618
  );
2445
1619
  setCalendarSelectionState("day");
2446
1620
  },
@@ -2632,4 +1806,4 @@ const Calendar = Object.assign(CalendarElement, {
2632
1806
  });
2633
1807
 
2634
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 };
2635
- //# sourceMappingURL=Calendar-DUGQQkga.js.map
1809
+ //# sourceMappingURL=Calendar-BhCce9hE.js.map