@altinn/altinn-components 0.68.1 → 0.68.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) hide show
  1. package/dist/{ToolbarSearch-CpAUv-Lw.js → ToolbarSearch-B7BeGXrJ.js} +2 -2
  2. package/dist/components/AccessAreaListItem/AccessAreaListItem.js +23 -24
  3. package/dist/components/AccessPackageListItem/AccessPackageListItem.js +2 -2
  4. package/dist/components/Account/AccountList.js +2 -2
  5. package/dist/components/Account/AccountListItem.js +2 -2
  6. package/dist/components/Account/AccountListItemControls.js +2 -2
  7. package/dist/components/Account/AccountListItemDetails.js +2 -2
  8. package/dist/components/Account/AccountListVirtual.js +3 -3
  9. package/dist/components/Account/AccountMenu.js +2 -2
  10. package/dist/components/Account/AccountNotificationSettings.js +2 -2
  11. package/dist/components/Account/AccountOrganization.js +2 -2
  12. package/dist/components/AccountSelector/AccountSelector.js +2 -2
  13. package/dist/components/ActivityLog/ActivityLog.js +2 -2
  14. package/dist/components/ActivityLog/ActivityLogItem.js +2 -2
  15. package/dist/components/ActivityLog/ActivityLogSegment.js +2 -2
  16. package/dist/components/Alert/Alert.js +2 -2
  17. package/dist/components/Article/Article.js +2 -2
  18. package/dist/components/Article/ArticleContact.js +2 -2
  19. package/dist/components/Article/ArticleHeader.js +2 -2
  20. package/dist/components/Attachment/AttachmentLink.js +1 -1
  21. package/dist/components/AuthEvidence/AuthEvidence.js +2 -2
  22. package/dist/components/AuthEvidence/AuthEvidenceItem.js +2 -2
  23. package/dist/components/AuthEvidence/AuthEvidenceOwner.js +2 -2
  24. package/dist/components/AuthEvidence/AuthEvidenceParent.js +2 -2
  25. package/dist/components/AuthEvidence/AuthEvidenceService.js +2 -2
  26. package/dist/components/Badge/Badge.js +2 -2
  27. package/dist/components/Badge/index.js +1 -1
  28. package/dist/components/Banner/Banner.js +2 -2
  29. package/dist/components/Bookmarks/BookmarkModal.js +2 -2
  30. package/dist/components/Bookmarks/BookmarkSettingsItem.js +2 -2
  31. package/dist/components/Bookmarks/BookmarkSettingsItemLabel.js +2 -2
  32. package/dist/components/Bookmarks/BookmarkSettingsList.js +2 -2
  33. package/dist/components/Breadcrumbs/Breadcrumbs.js +2 -2
  34. package/dist/components/Bulk/BulkHeader.js +2 -2
  35. package/dist/components/Button/Button.js +1 -1
  36. package/dist/components/Button/ButtonIcon.js +2 -2
  37. package/dist/components/Button/ComboButton.js +2 -2
  38. package/dist/components/Button/FloatingActionButton.js +2 -2
  39. package/dist/components/Button/IconButton.js +2 -2
  40. package/dist/components/Byline/Byline.js +2 -2
  41. package/dist/components/Byline/index.js +1 -1
  42. package/dist/components/ContextMenu/ContextMenu.js +2 -2
  43. package/dist/components/Dashboard/DashboardCard.js +2 -2
  44. package/dist/components/Dashboard/DashboardHeader.js +2 -2
  45. package/dist/components/Datepicker/Datepicker.js +1 -1
  46. package/dist/components/Datepicker/DatepickerHeader.js +2 -2
  47. package/dist/components/Datepicker/DatepickerTable.js +2 -2
  48. package/dist/components/Dialog/Dialog.js +2 -2
  49. package/dist/components/Dialog/DialogActions.js +2 -2
  50. package/dist/components/Dialog/DialogActivityLog.js +2 -2
  51. package/dist/components/Dialog/DialogAttachments.js +2 -2
  52. package/dist/components/Dialog/DialogBody.js +2 -2
  53. package/dist/components/Dialog/DialogByline.js +2 -2
  54. package/dist/components/Dialog/DialogContact.js +2 -2
  55. package/dist/components/Dialog/DialogHeader.js +2 -2
  56. package/dist/components/Dialog/DialogHistory.js +2 -2
  57. package/dist/components/Dialog/DialogHistoryItem.js +2 -2
  58. package/dist/components/Dialog/DialogHistorySegment.js +2 -2
  59. package/dist/components/Dialog/DialogLayout.js +2 -2
  60. package/dist/components/Dialog/DialogList.js +2 -2
  61. package/dist/components/Dialog/DialogListItem.js +2 -2
  62. package/dist/components/Dialog/DialogMetadata.js +2 -2
  63. package/dist/components/Dialog/DialogSection.js +2 -2
  64. package/dist/components/Dialog/DialogSeenBy.js +2 -2
  65. package/dist/components/Dialog/DialogSelect.js +2 -2
  66. package/dist/components/Dialog/DialogStatus.js +2 -2
  67. package/dist/components/Dialog/DialogTabs.js +2 -2
  68. package/dist/components/Dialog/SeenByLog.js +2 -2
  69. package/dist/components/Dialog/SeenByLogButton.js +2 -2
  70. package/dist/components/Dialog/SeenByLogItem.js +2 -2
  71. package/dist/components/Dialog/index.js +1 -1
  72. package/dist/components/Dropdown/DrawerButton.js +2 -2
  73. package/dist/components/Dropdown/DrawerHeader.js +2 -2
  74. package/dist/components/Dropdown/Dropdown.js +2 -2
  75. package/dist/components/Dropdown/DropdownBase.js +2 -2
  76. package/dist/components/Dropdown/FloatingDropdown.js +2 -2
  77. package/dist/components/Dropdown/index.js +1 -1
  78. package/dist/components/DsComponents/index.js +2 -2
  79. package/dist/components/Forms/Checkbox.js +2 -2
  80. package/dist/components/Forms/CheckboxOptions.js +2 -2
  81. package/dist/components/Forms/Field.js +1 -1
  82. package/dist/components/Forms/FieldBase.js +2 -2
  83. package/dist/components/Forms/Fieldset.js +1 -1
  84. package/dist/components/Forms/FieldsetBase.js +2 -2
  85. package/dist/components/Forms/Input.js +1 -1
  86. package/dist/components/Forms/Label.js +1 -1
  87. package/dist/components/Forms/Legend.js +1 -1
  88. package/dist/components/Forms/Radio.js +2 -2
  89. package/dist/components/Forms/RadioOptions.js +2 -2
  90. package/dist/components/Forms/SearchField.js +2 -2
  91. package/dist/components/Forms/Select.js +1 -1
  92. package/dist/components/Forms/SelectField.js +2 -2
  93. package/dist/components/Forms/Switch.js +2 -2
  94. package/dist/components/Forms/SwitchOptions.js +2 -2
  95. package/dist/components/Forms/TextField.js +2 -2
  96. package/dist/components/Forms/TextFieldDropdown.js +2 -2
  97. package/dist/components/Forms/Textarea.js +1 -1
  98. package/dist/components/Forms/TextareaField.js +2 -2
  99. package/dist/components/Forms/index.js +1 -1
  100. package/dist/components/GlobalHeader/GlobalAccountButton.js +2 -2
  101. package/dist/components/GlobalHeader/GlobalHeader.js +2 -2
  102. package/dist/components/GlobalHeader/GlobalMenuButton.js +2 -2
  103. package/dist/components/GlobalHeader/HeaderDrawer.js +2 -2
  104. package/dist/components/GlobalHeader/HeaderDropdown.js +2 -2
  105. package/dist/components/GlobalHeader/HeaderLogo.js +2 -2
  106. package/dist/components/GlobalMenu/GlobalMenu.js +2 -2
  107. package/dist/components/GlobalMenu/LocaleSwitcher.js +2 -2
  108. package/dist/components/GlobalMenu/LogoutButton.js +2 -2
  109. package/dist/components/Icon/Icon.js +2 -2
  110. package/dist/components/Icon/index.js +1 -1
  111. package/dist/components/Inbox/InboxPage.js +2 -2
  112. package/dist/components/InboxSearch/InboxSearch.js +2 -2
  113. package/dist/components/Item/ItemLabel.js +1 -1
  114. package/dist/components/Item/ItemMedia.js +2 -2
  115. package/dist/components/Item/ItemSelect.js +2 -2
  116. package/dist/components/Item/index.js +1 -1
  117. package/dist/components/Layout/Layout.js +2 -2
  118. package/dist/components/List/List.js +2 -2
  119. package/dist/components/List/ListBase.js +2 -2
  120. package/dist/components/List/ListItemHeader.js +2 -2
  121. package/dist/components/List/ListItemIcon.js +2 -2
  122. package/dist/components/List/ListItemLabel.js +2 -2
  123. package/dist/components/Menu/Menu.js +1 -1
  124. package/dist/components/Menu/MenuItem.js +2 -2
  125. package/dist/components/Menu/MenuItems.js +2 -2
  126. package/dist/components/Menu/MenuListSearch.js +2 -2
  127. package/dist/components/Menu/MenuOption.js +1 -1
  128. package/dist/components/Menu/TabMenu.js +2 -2
  129. package/dist/components/Menu/VirtualizedMenuItems.js +3 -3
  130. package/dist/components/Menu/index.js +1 -1
  131. package/dist/components/Menu/useMenuSearch.js +1 -1
  132. package/dist/components/Menu/useMenuVirtualization.js +52 -3
  133. package/dist/components/Metadata/MetaItem.js +1 -1
  134. package/dist/components/Metadata/MetaItemIcon.js +2 -2
  135. package/dist/components/Metadata/MetaTimestamp.js +1 -1
  136. package/dist/components/Metadata/Metadata.js +2 -2
  137. package/dist/components/Metadata/index.js +1 -1
  138. package/dist/components/Modal/Modal.js +2 -2
  139. package/dist/components/Modal/ModalBase.js +2 -2
  140. package/dist/components/Modal/ModalHeader.js +2 -2
  141. package/dist/components/Modal/ModalIcon.js +2 -2
  142. package/dist/components/Notifications/NotificationItem.js +2 -2
  143. package/dist/components/Notifications/NotificationItemBase.js +2 -2
  144. package/dist/components/Notifications/NotificationItemControls.js +2 -2
  145. package/dist/components/Notifications/NotificationItemIcon.js +2 -2
  146. package/dist/components/Page/AccordionSection.js +2 -2
  147. package/dist/components/Page/ContactButtons.js +2 -2
  148. package/dist/components/Page/ContactSection.js +2 -2
  149. package/dist/components/Page/PageDetails.js +1 -1
  150. package/dist/components/Page/PageMenu.js +2 -2
  151. package/dist/components/Page/PageNav.js +2 -2
  152. package/dist/components/Page/Section.js +2 -2
  153. package/dist/components/Pagination/Pagination.js +2 -2
  154. package/dist/components/ResourceListItem/ResourceListItem.js +2 -2
  155. package/dist/components/RootProvider/RootProvider.js +2 -2
  156. package/dist/components/RootProvider/index.js +1 -1
  157. package/dist/components/Search/SearchItem.js +2 -2
  158. package/dist/components/Searchbar/Autocomplete.js +2 -2
  159. package/dist/components/Searchbar/AutocompleteItem.js +2 -2
  160. package/dist/components/Searchbar/Searchbar.js +2 -2
  161. package/dist/components/Searchbar/SearchbarField.js +2 -2
  162. package/dist/components/Settings/SettingsItem.js +2 -2
  163. package/dist/components/Settings/SettingsItemBase.js +2 -2
  164. package/dist/components/Settings/SettingsList.js +2 -2
  165. package/dist/components/Settings/SettingsListVirtual.js +3 -3
  166. package/dist/components/Settings/SettingsModal.js +2 -2
  167. package/dist/components/Settings/SettingsSection.js +2 -2
  168. package/dist/components/Settings/UsedByLog.js +2 -2
  169. package/dist/components/Settings/UsedByLogItem.js +2 -2
  170. package/dist/components/SkipLink/SkipLink.js +1 -1
  171. package/dist/components/Snackbar/SnackbarItem.js +2 -2
  172. package/dist/components/Timeline/Timeline.js +2 -2
  173. package/dist/components/Timeline/TimelineActivity.js +2 -2
  174. package/dist/components/Timeline/TimelineBase.js +2 -2
  175. package/dist/components/Timeline/TimelineFooter.js +2 -2
  176. package/dist/components/Timeline/TimelineHeader.js +2 -2
  177. package/dist/components/Timeline/TimelineIcon.js +2 -2
  178. package/dist/components/Timeline/TimelineSection.js +2 -2
  179. package/dist/components/Timeline/TimelineSegment.js +2 -2
  180. package/dist/components/Toolbar/DatepickerFilter.js +2 -2
  181. package/dist/components/Toolbar/SelectDateFilter.js +2 -2
  182. package/dist/components/Toolbar/Toolbar.js +1 -1
  183. package/dist/components/Toolbar/ToolbarFilter.js +2 -2
  184. package/dist/components/Toolbar/ToolbarFilterAddMenu.js +2 -2
  185. package/dist/components/Toolbar/ToolbarFilterButton.js +2 -2
  186. package/dist/components/Toolbar/ToolbarFilterMenu.js +2 -2
  187. package/dist/components/Toolbar/ToolbarMenu.js +2 -2
  188. package/dist/components/Toolbar/ToolbarSearch.js +2 -2
  189. package/dist/components/Toolbar/index.js +1 -1
  190. package/dist/components/Tooltip/Tooltip.js +1 -1
  191. package/dist/components/Transmission/Transmission.js +2 -2
  192. package/dist/components/Transmission/TransmissionList.js +2 -2
  193. package/dist/components/Transmission/TransmissionType.js +2 -2
  194. package/dist/components/Typography/Heading.js +2 -2
  195. package/dist/components/Typography/Link.js +1 -1
  196. package/dist/components/Typography/index.js +1 -1
  197. package/dist/components/UserListItem/UserListItem.js +2 -2
  198. package/dist/components/index.js +3 -3
  199. package/dist/functions/name/name.js +32 -13
  200. package/dist/functions/name/name.spec.js +15 -2
  201. package/dist/hooks/useAccountSelector.js +2 -2
  202. package/dist/index-Bk81X-kr.js +913 -0
  203. package/dist/index.js +3 -3
  204. package/dist/tooltip-Caqi75cv.js +5522 -0
  205. package/dist/types/lib/components/Menu/useMenuVirtualization.d.ts +1 -1
  206. package/dist/{use-pagination-BBfRRN5_.js → use-pagination-Bi9sgBmS.js} +1 -1
  207. package/package.json +2 -2
  208. package/dist/tooltip-Ct39-719.js +0 -6303
  209. package/dist/useMenuVirtualization-DpvWCsyD.js +0 -598
@@ -0,0 +1,913 @@
1
+ import * as M from "react";
2
+ import { flushSync as D } from "react-dom";
3
+ function k(r, d, t) {
4
+ const e = new Array(r);
5
+ return new Proxy(e, {
6
+ get(s, n, o) {
7
+ if (typeof n == "string") {
8
+ const i = n.charCodeAt(0);
9
+ if (i >= 48 && i <= 57) {
10
+ const l = +n;
11
+ if (Number.isInteger(l) && l >= 0 && l < r) {
12
+ let h = s[l];
13
+ if (!h) {
14
+ const c = d[l * 2];
15
+ h = s[l] = {
16
+ index: l,
17
+ key: t(l),
18
+ start: c,
19
+ size: d[l * 2 + 1],
20
+ end: c + d[l * 2 + 1],
21
+ lane: 0
22
+ };
23
+ }
24
+ return h;
25
+ }
26
+ }
27
+ if (n === "length") return r;
28
+ }
29
+ return Reflect.get(s, n, o);
30
+ }
31
+ });
32
+ }
33
+ function x(r, d, t) {
34
+ let e = t.initialDeps ?? [], s, n = !0;
35
+ function o() {
36
+ var i;
37
+ const l = process.env.NODE_ENV !== "production" && !!t.key && !!((i = t.debug) != null && i.call(t));
38
+ let h = 0;
39
+ l && (h = Date.now());
40
+ const c = r();
41
+ if (!(c.length !== e.length || c.some((g, u) => e[u] !== g)))
42
+ return s;
43
+ e = c;
44
+ let a = 0;
45
+ if (l && (a = Date.now()), s = d(...c), l) {
46
+ const g = Math.round((Date.now() - h) * 100) / 100, u = Math.round((Date.now() - a) * 100) / 100, v = u / 16, S = (m, E) => {
47
+ for (m = String(m); m.length < E; )
48
+ m = " " + m;
49
+ return m;
50
+ };
51
+ console.info(
52
+ `%c⏱ ${S(u, 5)} /${S(g, 5)} ms`,
53
+ `
54
+ font-size: .6rem;
55
+ font-weight: bold;
56
+ color: hsl(${Math.max(
57
+ 0,
58
+ Math.min(120 - 120 * v, 120)
59
+ )}deg 100% 31%);`,
60
+ t?.key
61
+ );
62
+ }
63
+ return t?.onChange && !(n && t.skipInitialOnChange) && t.onChange(s), n = !1, s;
64
+ }
65
+ return o.updateDeps = (i) => {
66
+ e = i;
67
+ }, o;
68
+ }
69
+ function A(r, d) {
70
+ if (r === void 0)
71
+ throw new Error("Unexpected undefined");
72
+ return r;
73
+ }
74
+ const W = (r, d) => Math.abs(r - d) < 1.01, V = (r, d, t) => {
75
+ let e;
76
+ return function(...s) {
77
+ r.clearTimeout(e), e = r.setTimeout(() => d.apply(this, s), t);
78
+ };
79
+ };
80
+ let I;
81
+ const w = () => {
82
+ if (I !== void 0) return I;
83
+ if (typeof navigator > "u") return I = !1;
84
+ if (/iP(hone|od|ad)/.test(navigator.userAgent)) return I = !0;
85
+ const r = navigator.maxTouchPoints;
86
+ return I = navigator.platform === "MacIntel" && r !== void 0 && r > 0;
87
+ }, R = (r) => {
88
+ const { offsetWidth: d, offsetHeight: t } = r;
89
+ return { width: d, height: t };
90
+ }, L = (r) => r, j = (r) => {
91
+ const d = Math.max(r.startIndex - r.overscan, 0), e = Math.min(r.endIndex + r.overscan, r.count - 1) - d + 1, s = new Array(e);
92
+ for (let n = 0; n < e; n++)
93
+ s[n] = d + n;
94
+ return s;
95
+ }, N = (r, d) => {
96
+ const t = r.scrollElement;
97
+ if (!t)
98
+ return;
99
+ const e = r.targetWindow;
100
+ if (!e)
101
+ return;
102
+ const s = (o) => {
103
+ const { width: i, height: l } = o;
104
+ d({ width: Math.round(i), height: Math.round(l) });
105
+ };
106
+ if (s(R(t)), !e.ResizeObserver)
107
+ return () => {
108
+ };
109
+ const n = new e.ResizeObserver((o) => {
110
+ const i = () => {
111
+ const l = o[0];
112
+ if (l?.borderBoxSize) {
113
+ const h = l.borderBoxSize[0];
114
+ if (h) {
115
+ s({ width: h.inlineSize, height: h.blockSize });
116
+ return;
117
+ }
118
+ }
119
+ s(R(t));
120
+ };
121
+ r.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(i) : i();
122
+ });
123
+ return n.observe(t, { box: "border-box" }), () => {
124
+ n.unobserve(t);
125
+ };
126
+ }, _ = {
127
+ passive: !0
128
+ }, K = typeof window > "u" ? !0 : "onscrollend" in window, P = (r, d, t) => {
129
+ const e = r.scrollElement;
130
+ if (!e)
131
+ return;
132
+ const s = r.targetWindow;
133
+ if (!s)
134
+ return;
135
+ const n = r.options.useScrollendEvent && K;
136
+ let o = 0;
137
+ const i = n ? null : V(
138
+ s,
139
+ () => d(o, !1),
140
+ r.options.isScrollingResetDelay
141
+ ), l = (f) => () => {
142
+ o = t(e), i?.(), d(o, f);
143
+ }, h = l(!0), c = l(!1);
144
+ return e.addEventListener("scroll", h, _), n && e.addEventListener("scrollend", c, _), () => {
145
+ e.removeEventListener("scroll", h), n && e.removeEventListener("scrollend", c);
146
+ };
147
+ }, B = (r, d) => P(r, d, (t) => {
148
+ const { horizontal: e, isRtl: s } = r.options;
149
+ return e ? t.scrollLeft * (s && -1 || 1) : t.scrollTop;
150
+ }), $ = (r, d, t) => {
151
+ if (t.options.useCachedMeasurements) {
152
+ const e = t.indexFromElement(r), s = t.options.getItemKey(e);
153
+ return t.itemSizeCache.get(s) ?? t.options.estimateSize(e);
154
+ }
155
+ if (d?.borderBoxSize) {
156
+ const e = d.borderBoxSize[0];
157
+ if (e)
158
+ return Math.round(
159
+ e[t.options.horizontal ? "inlineSize" : "blockSize"]
160
+ );
161
+ }
162
+ if (!d) {
163
+ const e = t.indexFromElement(r), s = t.options.getItemKey(e), n = t.itemSizeCache.get(s);
164
+ if (n !== void 0)
165
+ return n;
166
+ }
167
+ return r[t.options.horizontal ? "offsetWidth" : "offsetHeight"];
168
+ }, H = (r, {
169
+ adjustments: d = 0,
170
+ behavior: t
171
+ }, e) => {
172
+ var s, n;
173
+ (n = (s = e.scrollElement) == null ? void 0 : s.scrollTo) == null || n.call(s, {
174
+ [e.options.horizontal ? "left" : "top"]: r + d,
175
+ behavior: t
176
+ });
177
+ }, J = H;
178
+ class q {
179
+ constructor(d) {
180
+ this.unsubs = [], this.scrollElement = null, this.targetWindow = null, this.isScrolling = !1, this.scrollState = null, this.measurementsCache = [], this._flatMeasurements = null, this.itemSizeCache = /* @__PURE__ */ new Map(), this.itemSizeCacheVersion = 0, this.laneAssignments = /* @__PURE__ */ new Map(), this.pendingMin = null, this.prevLanes = void 0, this.lanesChangedFlag = !1, this.lanesSettling = !1, this.pendingScrollAnchor = null, this.scrollRect = null, this.scrollOffset = null, this.scrollDirection = null, this.scrollAdjustments = 0, this._iosDeferredAdjustment = 0, this._iosTouching = !1, this._iosJustTouchEnded = !1, this._iosTouchEndTimerId = null, this._intendedScrollOffset = null, this.elementsCache = /* @__PURE__ */ new Map(), this.now = () => {
181
+ var t, e, s;
182
+ return ((s = (e = (t = this.targetWindow) == null ? void 0 : t.performance) == null ? void 0 : e.now) == null ? void 0 : s.call(e)) ?? Date.now();
183
+ }, this.observer = /* @__PURE__ */ (() => {
184
+ let t = null;
185
+ const e = () => t || (!this.targetWindow || !this.targetWindow.ResizeObserver ? null : t = new this.targetWindow.ResizeObserver((s) => {
186
+ s.forEach((n) => {
187
+ const o = () => {
188
+ const i = n.target, l = this.indexFromElement(i);
189
+ if (!i.isConnected) {
190
+ this.observer.unobserve(i);
191
+ for (const [h, c] of this.elementsCache)
192
+ if (c === i) {
193
+ this.elementsCache.delete(h);
194
+ break;
195
+ }
196
+ return;
197
+ }
198
+ this.shouldMeasureDuringScroll(l) && this.resizeItem(
199
+ l,
200
+ this.options.measureElement(i, n, this)
201
+ );
202
+ };
203
+ this.options.useAnimationFrameWithResizeObserver ? requestAnimationFrame(o) : o();
204
+ });
205
+ }));
206
+ return {
207
+ disconnect: () => {
208
+ var s;
209
+ (s = e()) == null || s.disconnect(), t = null;
210
+ },
211
+ observe: (s) => {
212
+ var n;
213
+ return (n = e()) == null ? void 0 : n.observe(s, { box: "border-box" });
214
+ },
215
+ unobserve: (s) => {
216
+ var n;
217
+ return (n = e()) == null ? void 0 : n.unobserve(s);
218
+ }
219
+ };
220
+ })(), this.range = null, this.setOptions = (t) => {
221
+ var e, s;
222
+ const n = {
223
+ debug: !1,
224
+ initialOffset: 0,
225
+ overscan: 1,
226
+ paddingStart: 0,
227
+ paddingEnd: 0,
228
+ scrollPaddingStart: 0,
229
+ scrollPaddingEnd: 0,
230
+ horizontal: !1,
231
+ getItemKey: L,
232
+ rangeExtractor: j,
233
+ onChange: () => {
234
+ },
235
+ measureElement: $,
236
+ initialRect: { width: 0, height: 0 },
237
+ scrollMargin: 0,
238
+ gap: 0,
239
+ indexAttribute: "data-index",
240
+ initialMeasurementsCache: [],
241
+ lanes: 1,
242
+ anchorTo: "start",
243
+ followOnAppend: !1,
244
+ scrollEndThreshold: 1,
245
+ isScrollingResetDelay: 150,
246
+ enabled: !0,
247
+ isRtl: !1,
248
+ useScrollendEvent: !1,
249
+ useAnimationFrameWithResizeObserver: !1,
250
+ laneAssignmentMode: "estimate",
251
+ useCachedMeasurements: !1
252
+ };
253
+ for (const a in t) {
254
+ const g = t[a];
255
+ g !== void 0 && (n[a] = g);
256
+ }
257
+ const o = this.options;
258
+ let i = null, l = null, h = !1;
259
+ if (o !== void 0 && o.enabled && n.enabled && n.anchorTo === "end" && this.scrollElement !== null) {
260
+ const a = o.count, g = n.count, u = this.getMeasurements(), v = a > 0 ? ((e = u[0]) == null ? void 0 : e.key) ?? o.getItemKey(0) : null, S = a > 0 ? ((s = u[a - 1]) == null ? void 0 : s.key) ?? o.getItemKey(a - 1) : null;
261
+ if (g !== a || a > 0 && g > 0 && (n.getItemKey(0) !== v || n.getItemKey(g - 1) !== S)) {
262
+ h = !0;
263
+ const p = a > 0 ? this.getVirtualItemForOffset(this.getScrollOffset()) ?? u[0] : null;
264
+ p && (i = [p.key, this.getScrollOffset() - p.start]);
265
+ const b = n.followOnAppend === !0 ? "auto" : n.followOnAppend || null;
266
+ b && g > a && this.isAtEnd(o.scrollEndThreshold) && (a === 0 || n.getItemKey(g - 1) !== S) && (l = b);
267
+ }
268
+ }
269
+ this.options = n, h && (this.pendingMin = 0, this.itemSizeCacheVersion++);
270
+ let c = !1, f = 0;
271
+ if (i && this.scrollOffset !== null) {
272
+ const [a, g] = i, u = this.getMeasurements(), { count: v, getItemKey: S } = this.options;
273
+ let m = 0;
274
+ for (; m < v && S(m) !== a; )
275
+ m++;
276
+ if (m < v) {
277
+ const E = u[m];
278
+ if (E) {
279
+ const p = E.start + g;
280
+ p !== this.scrollOffset && (f = p - this.scrollOffset, this.scrollOffset = p, c = !0);
281
+ }
282
+ }
283
+ }
284
+ (c || l) && (this.pendingScrollAnchor = [
285
+ c ? i[0] : null,
286
+ c ? i[1] : 0,
287
+ l,
288
+ f
289
+ ]);
290
+ }, this.notify = (t) => {
291
+ var e, s;
292
+ (s = (e = this.options).onChange) == null || s.call(e, this, t);
293
+ }, this.maybeNotify = x(
294
+ () => (this.calculateRange(), [
295
+ this.isScrolling,
296
+ this.range ? this.range.startIndex : null,
297
+ this.range ? this.range.endIndex : null
298
+ ]),
299
+ (t) => {
300
+ this.notify(t);
301
+ },
302
+ {
303
+ key: process.env.NODE_ENV !== "production" && "maybeNotify",
304
+ debug: () => this.options.debug,
305
+ initialDeps: [
306
+ this.isScrolling,
307
+ this.range ? this.range.startIndex : null,
308
+ this.range ? this.range.endIndex : null
309
+ ]
310
+ }
311
+ ), this.cleanup = () => {
312
+ this.unsubs.filter(Boolean).forEach((t) => t()), this.unsubs = [], this.observer.disconnect(), this.rafId != null && this.targetWindow && (this.targetWindow.cancelAnimationFrame(this.rafId), this.rafId = null), this.scrollState = null, this.scrollElement = null, this.targetWindow = null;
313
+ }, this._didMount = () => () => {
314
+ this.cleanup();
315
+ }, this._willUpdate = () => {
316
+ var t;
317
+ const e = this.options.enabled ? this.options.getScrollElement() : null;
318
+ if (this.scrollElement !== e) {
319
+ if (this.cleanup(), !e) {
320
+ this.maybeNotify();
321
+ return;
322
+ }
323
+ if (this.scrollElement = e, this.scrollElement && "ownerDocument" in this.scrollElement ? this.targetWindow = this.scrollElement.ownerDocument.defaultView : this.targetWindow = ((t = this.scrollElement) == null ? void 0 : t.window) ?? null, this.elementsCache.forEach((n) => {
324
+ this.observer.observe(n);
325
+ }), this.unsubs.push(
326
+ this.options.observeElementRect(this, (n) => {
327
+ this.scrollRect = n, this.maybeNotify();
328
+ })
329
+ ), this.unsubs.push(
330
+ this.options.observeElementOffset(this, (n, o) => {
331
+ this._intendedScrollOffset !== null && Math.abs(n - this._intendedScrollOffset) < 1.5 && (n = this._intendedScrollOffset), this._intendedScrollOffset = null, this.scrollAdjustments = 0, this.scrollDirection = o ? this.getScrollOffset() < n ? "forward" : "backward" : null, this.scrollOffset = n, this.isScrolling = o, this._flushIosDeferredIfReady(), this.scrollState && this.scheduleScrollReconcile(), this.maybeNotify();
332
+ })
333
+ ), "addEventListener" in this.scrollElement) {
334
+ const n = this.scrollElement, o = () => {
335
+ this._iosTouching = !0, this._iosJustTouchEnded = !1, this._iosTouchEndTimerId !== null && this.targetWindow != null && (this.targetWindow.clearTimeout(this._iosTouchEndTimerId), this._iosTouchEndTimerId = null);
336
+ }, i = () => {
337
+ this._iosTouching = !1, !(!w() || this.targetWindow == null) && (this._iosJustTouchEnded = !0, this._iosTouchEndTimerId = this.targetWindow.setTimeout(() => {
338
+ this._iosJustTouchEnded = !1, this._iosTouchEndTimerId = null, this._flushIosDeferredIfReady();
339
+ }, 150));
340
+ };
341
+ n.addEventListener(
342
+ "touchstart",
343
+ o,
344
+ _
345
+ ), n.addEventListener(
346
+ "touchend",
347
+ i,
348
+ _
349
+ ), this.unsubs.push(() => {
350
+ n.removeEventListener("touchstart", o), n.removeEventListener("touchend", i), this._iosTouchEndTimerId !== null && this.targetWindow != null && (this.targetWindow.clearTimeout(this._iosTouchEndTimerId), this._iosTouchEndTimerId = null);
351
+ });
352
+ }
353
+ this._scrollToOffset(this.getScrollOffset(), {
354
+ adjustments: void 0,
355
+ behavior: void 0
356
+ });
357
+ }
358
+ const s = this.pendingScrollAnchor;
359
+ if (this.pendingScrollAnchor = null, s && this.scrollElement && this.options.enabled) {
360
+ const [n, o, i, l] = s;
361
+ n !== null && !i && (w() && (this.isScrolling || this._iosTouching || this._iosJustTouchEnded) ? l !== 0 && (this._iosDeferredAdjustment += l) : this._scrollToOffset(this.getScrollOffset(), {
362
+ adjustments: void 0,
363
+ behavior: void 0
364
+ })), i && this.scrollToEnd({ behavior: i });
365
+ }
366
+ }, this._flushIosDeferredIfReady = () => {
367
+ if (this._iosDeferredAdjustment === 0 || this.isScrolling || this._iosTouching || this._iosJustTouchEnded) return;
368
+ const t = this.getScrollOffset(), e = this.getMaxScrollOffset();
369
+ if (t < 0 || t > e) return;
370
+ const s = this._iosDeferredAdjustment;
371
+ this._iosDeferredAdjustment = 0, this._scrollToOffset(t, {
372
+ adjustments: this.scrollAdjustments += s,
373
+ behavior: void 0
374
+ });
375
+ }, this.rafId = null, this.getSize = () => this.options.enabled ? (this.scrollRect = this.scrollRect ?? this.options.initialRect, this.scrollRect[this.options.horizontal ? "width" : "height"]) : (this.scrollRect = null, 0), this.getScrollOffset = () => this.options.enabled ? (this.scrollOffset = this.scrollOffset ?? (typeof this.options.initialOffset == "function" ? this.options.initialOffset() : this.options.initialOffset), this.scrollOffset) : (this.scrollOffset = null, 0), this.getFurthestMeasurement = (t, e) => {
376
+ const s = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map();
377
+ for (let o = e - 1; o >= 0; o--) {
378
+ const i = t[o];
379
+ if (s.has(i.lane))
380
+ continue;
381
+ const l = n.get(
382
+ i.lane
383
+ );
384
+ if (l == null || i.end > l.end ? n.set(i.lane, i) : i.end < l.end && s.set(i.lane, !0), s.size === this.options.lanes)
385
+ break;
386
+ }
387
+ return n.size === this.options.lanes ? Array.from(n.values()).sort((o, i) => o.end === i.end ? o.index - i.index : o.end - i.end)[0] : void 0;
388
+ }, this.getMeasurementOptions = x(
389
+ () => [
390
+ this.options.count,
391
+ this.options.paddingStart,
392
+ this.options.scrollMargin,
393
+ this.options.getItemKey,
394
+ this.options.enabled,
395
+ this.options.lanes,
396
+ this.options.laneAssignmentMode
397
+ ],
398
+ (t, e, s, n, o, i, l) => (this.prevLanes !== void 0 && this.prevLanes !== i && (this.lanesChangedFlag = !0), this.prevLanes = i, this.pendingMin = null, {
399
+ count: t,
400
+ paddingStart: e,
401
+ scrollMargin: s,
402
+ getItemKey: n,
403
+ enabled: o,
404
+ lanes: i,
405
+ laneAssignmentMode: l
406
+ }),
407
+ {
408
+ key: !1
409
+ }
410
+ ), this.getMeasurements = x(
411
+ () => [this.getMeasurementOptions(), this.itemSizeCacheVersion],
412
+ ({
413
+ count: t,
414
+ paddingStart: e,
415
+ scrollMargin: s,
416
+ getItemKey: n,
417
+ enabled: o,
418
+ lanes: i,
419
+ laneAssignmentMode: l
420
+ }, h) => {
421
+ const c = this.itemSizeCache;
422
+ if (!o)
423
+ return this.measurementsCache = [], this.itemSizeCache.clear(), this.laneAssignments.clear(), [];
424
+ if (this.laneAssignments.size > t)
425
+ for (const u of this.laneAssignments.keys())
426
+ u >= t && this.laneAssignments.delete(u);
427
+ this.lanesChangedFlag && (this.lanesChangedFlag = !1, this.lanesSettling = !0, this.measurementsCache = [], this.itemSizeCache.clear(), this.laneAssignments.clear(), this.pendingMin = null), this.measurementsCache.length === 0 && !this.lanesSettling && (this.measurementsCache = this.options.initialMeasurementsCache, this.measurementsCache.forEach((u) => {
428
+ this.itemSizeCache.set(u.key, u.size);
429
+ }));
430
+ const f = this.lanesSettling ? 0 : this.pendingMin ?? 0;
431
+ if (this.pendingMin = null, this.lanesSettling && this.measurementsCache.length === t && (this.lanesSettling = !1), i === 1) {
432
+ const u = this.options.gap, v = t * 2;
433
+ let S = this._flatMeasurements;
434
+ if (!S || S.length < v) {
435
+ const p = new Float64Array(v);
436
+ S && f > 0 && p.set(S.subarray(0, f * 2)), S = p, this._flatMeasurements = S;
437
+ }
438
+ let m;
439
+ if (f === 0)
440
+ m = e + s;
441
+ else {
442
+ const p = f - 1;
443
+ m = S[p * 2] + S[p * 2 + 1] + u;
444
+ }
445
+ for (let p = f; p < t; p++) {
446
+ const b = n(p), z = c.get(b), y = typeof z == "number" ? z : this.options.estimateSize(p);
447
+ S[p * 2] = m, S[p * 2 + 1] = y, m += y + u;
448
+ }
449
+ const E = k(t, S, n);
450
+ return this.measurementsCache = E, E;
451
+ }
452
+ const a = this.measurementsCache.slice(0, f), g = new Array(i).fill(
453
+ void 0
454
+ );
455
+ for (let u = 0; u < f; u++) {
456
+ const v = a[u];
457
+ v && (g[v.lane] = u);
458
+ }
459
+ for (let u = f; u < t; u++) {
460
+ const v = n(u), S = this.laneAssignments.get(u);
461
+ let m, E;
462
+ const p = l === "estimate" || c.has(v);
463
+ if (S !== void 0 && this.options.lanes > 1) {
464
+ m = S;
465
+ const O = g[m], C = O !== void 0 ? a[O] : void 0;
466
+ E = C ? C.end + this.options.gap : e + s;
467
+ } else {
468
+ const O = this.options.lanes === 1 ? a[u - 1] : this.getFurthestMeasurement(a, u);
469
+ E = O ? O.end + this.options.gap : e + s, m = O ? O.lane : u % this.options.lanes, this.options.lanes > 1 && p && this.laneAssignments.set(u, m);
470
+ }
471
+ const b = c.get(v), z = typeof b == "number" ? b : this.options.estimateSize(u), y = E + z;
472
+ a[u] = {
473
+ index: u,
474
+ start: E,
475
+ size: z,
476
+ end: y,
477
+ key: v,
478
+ lane: m
479
+ }, g[m] = u;
480
+ }
481
+ return this.measurementsCache = a, a;
482
+ },
483
+ {
484
+ key: process.env.NODE_ENV !== "production" && "getMeasurements",
485
+ debug: () => this.options.debug
486
+ }
487
+ ), this.calculateRange = x(
488
+ () => [
489
+ this.getMeasurements(),
490
+ this.getSize(),
491
+ this.getScrollOffset(),
492
+ this.options.lanes
493
+ ],
494
+ (t, e, s, n) => this.range = t.length > 0 && e > 0 ? U({
495
+ measurements: t,
496
+ outerSize: e,
497
+ scrollOffset: s,
498
+ lanes: n,
499
+ // Pass the typed array so binary search + forward-walk can
500
+ // read start/end directly from Float64Array, skipping the
501
+ // Proxy traps that materialize a full VirtualItem per probe.
502
+ flat: n === 1 && this._flatMeasurements != null ? this._flatMeasurements : null
503
+ }) : null,
504
+ {
505
+ key: process.env.NODE_ENV !== "production" && "calculateRange",
506
+ debug: () => this.options.debug
507
+ }
508
+ ), this.getVirtualIndexes = x(
509
+ () => {
510
+ let t = null, e = null;
511
+ const s = this.calculateRange();
512
+ return s && (t = s.startIndex, e = s.endIndex), this.maybeNotify.updateDeps([this.isScrolling, t, e]), [
513
+ this.options.rangeExtractor,
514
+ this.options.overscan,
515
+ this.options.count,
516
+ t,
517
+ e
518
+ ];
519
+ },
520
+ (t, e, s, n, o) => n === null || o === null ? [] : t({
521
+ startIndex: n,
522
+ endIndex: o,
523
+ overscan: e,
524
+ count: s
525
+ }),
526
+ {
527
+ key: process.env.NODE_ENV !== "production" && "getVirtualIndexes",
528
+ debug: () => this.options.debug
529
+ }
530
+ ), this.indexFromElement = (t) => {
531
+ const e = this.options.indexAttribute, s = t.getAttribute(e);
532
+ return s ? parseInt(s, 10) : (console.warn(
533
+ `Missing attribute name '${e}={index}' on measured element.`
534
+ ), -1);
535
+ }, this.shouldMeasureDuringScroll = (t) => {
536
+ var e;
537
+ if (!this.scrollState || this.scrollState.behavior !== "smooth")
538
+ return !0;
539
+ const s = this.scrollState.index ?? ((e = this.getVirtualItemForOffset(this.scrollState.lastTargetOffset)) == null ? void 0 : e.index);
540
+ if (s !== void 0 && this.range) {
541
+ const n = Math.max(
542
+ this.options.overscan,
543
+ Math.ceil((this.range.endIndex - this.range.startIndex) / 2)
544
+ ), o = Math.max(0, s - n), i = Math.min(
545
+ this.options.count - 1,
546
+ s + n
547
+ );
548
+ return t >= o && t <= i;
549
+ }
550
+ return !0;
551
+ }, this.measureElement = (t) => {
552
+ if (!t) {
553
+ this.elementsCache.forEach((o, i) => {
554
+ o.isConnected || (this.observer.unobserve(o), this.elementsCache.delete(i));
555
+ });
556
+ return;
557
+ }
558
+ const e = this.indexFromElement(t), s = this.options.getItemKey(e), n = this.elementsCache.get(s);
559
+ n !== t && (n && this.observer.unobserve(n), this.observer.observe(t), this.elementsCache.set(s, t)), (!this.isScrolling || this.scrollState) && this.shouldMeasureDuringScroll(e) && this.resizeItem(e, this.options.measureElement(t, void 0, this));
560
+ }, this.resizeItem = (t, e) => {
561
+ var s, n;
562
+ if (t < 0 || t >= this.options.count) return;
563
+ let o, i, l;
564
+ const h = this._flatMeasurements;
565
+ if (this.options.lanes === 1 && h !== null)
566
+ l = this.options.getItemKey(t), i = h[t * 2], o = h[t * 2 + 1];
567
+ else {
568
+ const a = this.measurementsCache[t];
569
+ if (!a) return;
570
+ l = a.key, i = a.start, o = a.size;
571
+ }
572
+ const c = this.itemSizeCache.get(l) ?? o, f = e - c;
573
+ if (f !== 0) {
574
+ const a = this.options.anchorTo === "end" && ((s = this.scrollState) == null ? void 0 : s.behavior) !== "smooth" && this.getVirtualDistanceFromEnd() <= this.options.scrollEndThreshold, g = a ? this.getTotalSize() : 0, u = ((n = this.scrollState) == null ? void 0 : n.behavior) !== "smooth" && (this.shouldAdjustScrollPositionOnItemSizeChange !== void 0 ? this.shouldAdjustScrollPositionOnItemSizeChange(
575
+ // The callback expects a VirtualItem; build one lazily only
576
+ // when the consumer actually supplied a custom predicate.
577
+ this.measurementsCache[t] ?? {
578
+ index: t,
579
+ key: l,
580
+ start: i,
581
+ size: o,
582
+ end: i + o,
583
+ lane: 0
584
+ },
585
+ f,
586
+ this
587
+ ) : (
588
+ // Default: adjust scrollTop only when the resize is an above-
589
+ // viewport item AND we're not actively scrolling backward.
590
+ // Adjusting during backward scroll fights the user's scroll
591
+ // direction and produces the "items jump while scrolling up"
592
+ // jank reported across many issues. Users who want the old
593
+ // behavior can pass shouldAdjustScrollPositionOnItemSizeChange.
594
+ i < this.getScrollOffset() + this.scrollAdjustments && this.scrollDirection !== "backward"
595
+ ));
596
+ (this.pendingMin === null || t < this.pendingMin) && (this.pendingMin = t), this.itemSizeCache.set(l, e), this.itemSizeCacheVersion++, a ? this.applyScrollAdjustment(this.getTotalSize() - g) : u && this.applyScrollAdjustment(f), this.notify(!1);
597
+ }
598
+ }, this.getVirtualItems = x(
599
+ () => [this.getVirtualIndexes(), this.getMeasurements()],
600
+ (t, e) => {
601
+ const s = [];
602
+ for (let n = 0, o = t.length; n < o; n++) {
603
+ const i = t[n], l = e[i];
604
+ s.push(l);
605
+ }
606
+ return s;
607
+ },
608
+ {
609
+ key: process.env.NODE_ENV !== "production" && "getVirtualItems",
610
+ debug: () => this.options.debug
611
+ }
612
+ ), this.getVirtualItemForOffset = (t) => {
613
+ const e = this.getMeasurements();
614
+ if (e.length === 0)
615
+ return;
616
+ const s = this._flatMeasurements, n = this.options.lanes === 1 && s != null, o = F(
617
+ 0,
618
+ e.length - 1,
619
+ n ? (i) => s[i * 2] : (i) => A(e[i]).start,
620
+ t
621
+ );
622
+ return A(e[o]);
623
+ }, this.getMaxScrollOffset = () => {
624
+ if (!this.scrollElement) return 0;
625
+ if ("scrollHeight" in this.scrollElement)
626
+ return this.options.horizontal ? this.scrollElement.scrollWidth - this.scrollElement.clientWidth : this.scrollElement.scrollHeight - this.scrollElement.clientHeight;
627
+ {
628
+ const t = this.scrollElement.document.documentElement;
629
+ return this.options.horizontal ? t.scrollWidth - this.scrollElement.innerWidth : t.scrollHeight - this.scrollElement.innerHeight;
630
+ }
631
+ }, this.getVirtualDistanceFromEnd = () => Math.max(
632
+ this.getTotalSize() - this.getSize() - this.getScrollOffset(),
633
+ 0
634
+ ), this.getDistanceFromEnd = () => Math.max(this.getMaxScrollOffset() - this.getScrollOffset(), 0), this.isAtEnd = (t = this.options.scrollEndThreshold) => this.getDistanceFromEnd() <= t, this.getOffsetForAlignment = (t, e, s = 0) => {
635
+ if (!this.scrollElement) return 0;
636
+ const n = this.getSize(), o = this.getScrollOffset();
637
+ e === "auto" && (e = t >= o + n ? "end" : "start"), e === "center" ? t += (s - n) / 2 : e === "end" && (t -= n);
638
+ const i = this.getMaxScrollOffset();
639
+ return Math.max(Math.min(i, t), 0);
640
+ }, this.getOffsetForIndex = (t, e = "auto") => {
641
+ t = Math.max(0, Math.min(t, this.options.count - 1));
642
+ const s = this.getSize(), n = this.getScrollOffset(), o = this.measurementsCache[t];
643
+ if (!o) return;
644
+ if (e === "auto")
645
+ if (o.end >= n + s - this.options.scrollPaddingEnd)
646
+ e = "end";
647
+ else if (o.start <= n + this.options.scrollPaddingStart)
648
+ e = "start";
649
+ else
650
+ return [n, e];
651
+ if (e === "end" && t === this.options.count - 1)
652
+ return [this.getMaxScrollOffset(), e];
653
+ const i = e === "end" ? o.end + this.options.scrollPaddingEnd : o.start - this.options.scrollPaddingStart;
654
+ return [
655
+ this.getOffsetForAlignment(i, e, o.size),
656
+ e
657
+ ];
658
+ }, this.scrollToOffset = (t, { align: e = "start", behavior: s = "auto" } = {}) => {
659
+ const n = this.getOffsetForAlignment(t, e), o = this.now();
660
+ this.scrollState = {
661
+ index: null,
662
+ align: e,
663
+ behavior: s,
664
+ startedAt: o,
665
+ lastTargetOffset: n,
666
+ stableFrames: 0
667
+ }, this._scrollToOffset(n, { adjustments: void 0, behavior: s }), this.scheduleScrollReconcile();
668
+ }, this.scrollToIndex = (t, {
669
+ align: e = "auto",
670
+ behavior: s = "auto"
671
+ } = {}) => {
672
+ t = Math.max(0, Math.min(t, this.options.count - 1));
673
+ const n = this.getOffsetForIndex(t, e);
674
+ if (!n)
675
+ return;
676
+ const [o, i] = n, l = this.now();
677
+ this.scrollState = {
678
+ index: t,
679
+ align: i,
680
+ behavior: s,
681
+ startedAt: l,
682
+ lastTargetOffset: o,
683
+ stableFrames: 0
684
+ }, this._scrollToOffset(o, { adjustments: void 0, behavior: s }), this.scheduleScrollReconcile();
685
+ }, this.scrollBy = (t, { behavior: e = "auto" } = {}) => {
686
+ const s = this.getScrollOffset() + t, n = this.now();
687
+ this.scrollState = {
688
+ index: null,
689
+ align: "start",
690
+ behavior: e,
691
+ startedAt: n,
692
+ lastTargetOffset: s,
693
+ stableFrames: 0
694
+ }, this._scrollToOffset(s, { adjustments: void 0, behavior: e }), this.scheduleScrollReconcile();
695
+ }, this.scrollToEnd = ({ behavior: t = "auto" } = {}) => {
696
+ if (this.options.count > 0) {
697
+ this.scrollToIndex(this.options.count - 1, {
698
+ align: "end",
699
+ behavior: t
700
+ });
701
+ return;
702
+ }
703
+ this.scrollToOffset(Math.max(this.getTotalSize() - this.getSize(), 0), {
704
+ behavior: t
705
+ });
706
+ }, this.getTotalSize = () => {
707
+ var t;
708
+ const e = this.getMeasurements();
709
+ let s;
710
+ if (e.length === 0)
711
+ s = this.options.paddingStart;
712
+ else if (this.options.lanes === 1) {
713
+ const n = e.length - 1, o = this._flatMeasurements;
714
+ o != null ? s = o[n * 2] + o[n * 2 + 1] : s = ((t = e[n]) == null ? void 0 : t.end) ?? 0;
715
+ } else {
716
+ const n = Array(this.options.lanes).fill(null);
717
+ let o = e.length - 1;
718
+ for (; o >= 0 && n.some((i) => i === null); ) {
719
+ const i = e[o];
720
+ n[i.lane] === null && (n[i.lane] = i.end), o--;
721
+ }
722
+ s = Math.max(...n.filter((i) => i !== null));
723
+ }
724
+ return Math.max(
725
+ s - this.options.scrollMargin + this.options.paddingEnd,
726
+ 0
727
+ );
728
+ }, this.takeSnapshot = () => {
729
+ const t = [];
730
+ if (this.itemSizeCache.size === 0) return t;
731
+ const e = this.getMeasurements();
732
+ for (const s of e)
733
+ s && this.itemSizeCache.has(s.key) && t.push({
734
+ index: s.index,
735
+ key: s.key,
736
+ start: s.start,
737
+ size: s.size,
738
+ end: s.end,
739
+ lane: s.lane
740
+ });
741
+ return t;
742
+ }, this._scrollToOffset = (t, {
743
+ adjustments: e,
744
+ behavior: s
745
+ }) => {
746
+ this._intendedScrollOffset = t + (e ?? 0), this.options.scrollToFn(t, { behavior: s, adjustments: e }, this);
747
+ }, this.measure = () => {
748
+ this.pendingMin = null, this.itemSizeCache.clear(), this.laneAssignments.clear(), this.itemSizeCacheVersion++, this.notify(!1);
749
+ }, this.setOptions(d);
750
+ }
751
+ applyScrollAdjustment(d, t) {
752
+ d !== 0 && (process.env.NODE_ENV !== "production" && this.options.debug && console.info("correction", d), w() && (this.isScrolling || this._iosTouching || this._iosJustTouchEnded) ? this._iosDeferredAdjustment += d : this._scrollToOffset(this.getScrollOffset(), {
753
+ adjustments: this.scrollAdjustments += d,
754
+ behavior: t
755
+ }));
756
+ }
757
+ scheduleScrollReconcile() {
758
+ if (!this.targetWindow) {
759
+ this.scrollState = null;
760
+ return;
761
+ }
762
+ this.rafId == null && (this.rafId = this.targetWindow.requestAnimationFrame(() => {
763
+ this.rafId = null, this.reconcileScroll();
764
+ }));
765
+ }
766
+ reconcileScroll() {
767
+ if (!this.scrollState || !this.scrollElement) return;
768
+ if (this.now() - this.scrollState.startedAt > 5e3) {
769
+ this.scrollState = null;
770
+ return;
771
+ }
772
+ const e = this.scrollState.index != null ? this.getOffsetForIndex(this.scrollState.index, this.scrollState.align) : void 0, s = e ? e[0] : this.scrollState.lastTargetOffset, n = 1, o = s !== this.scrollState.lastTargetOffset;
773
+ if (!o && W(s, this.getScrollOffset())) {
774
+ if (this.scrollState.stableFrames++, this.scrollState.stableFrames >= n) {
775
+ this.getScrollOffset() !== s && this._scrollToOffset(s, {
776
+ adjustments: void 0,
777
+ behavior: "auto"
778
+ }), this.scrollState = null;
779
+ return;
780
+ }
781
+ } else if (this.scrollState.stableFrames = 0, o) {
782
+ const i = this.getSize() || 600, l = Math.abs(s - this.getScrollOffset()), h = this.scrollState.behavior === "smooth" && l > i;
783
+ this.scrollState.lastTargetOffset = s, h || (this.scrollState.behavior = "auto"), this._scrollToOffset(s, {
784
+ adjustments: void 0,
785
+ behavior: h ? "smooth" : "auto"
786
+ });
787
+ }
788
+ this.scheduleScrollReconcile();
789
+ }
790
+ }
791
+ const F = (r, d, t, e) => {
792
+ for (; r <= d; ) {
793
+ const s = (r + d) / 2 | 0, n = t(s);
794
+ if (n < e)
795
+ r = s + 1;
796
+ else if (n > e)
797
+ d = s - 1;
798
+ else
799
+ return s;
800
+ }
801
+ return r > 0 ? r - 1 : 0;
802
+ };
803
+ function U({
804
+ measurements: r,
805
+ outerSize: d,
806
+ scrollOffset: t,
807
+ lanes: e,
808
+ flat: s
809
+ }) {
810
+ const n = r.length - 1, o = s ? (c) => s[c * 2] : (c) => r[c].start, i = s ? (c) => s[c * 2] + s[c * 2 + 1] : (c) => r[c].end;
811
+ if (r.length <= e)
812
+ return {
813
+ startIndex: 0,
814
+ endIndex: n
815
+ };
816
+ let l = F(0, n, o, t), h = l;
817
+ if (e === 1)
818
+ for (; h < n && i(h) < t + d; )
819
+ h++;
820
+ else if (e > 1) {
821
+ const c = Array(e).fill(0);
822
+ for (; h < n && c.some((a) => a < t + d); ) {
823
+ const a = r[h];
824
+ c[a.lane] = a.end, h++;
825
+ }
826
+ const f = Array(e).fill(t + d);
827
+ for (; l >= 0 && f.some((a) => a >= t); ) {
828
+ const a = r[l];
829
+ f[a.lane] = a.start, l--;
830
+ }
831
+ l = Math.max(0, l - l % e), h = Math.min(n, h + (e - 1 - h % e));
832
+ }
833
+ return { startIndex: l, endIndex: h };
834
+ }
835
+ const T = typeof document < "u" ? M.useLayoutEffect : M.useEffect;
836
+ function X({
837
+ useFlushSync: r = !0,
838
+ directDomUpdates: d = !1,
839
+ directDomUpdatesMode: t = "transform",
840
+ ...e
841
+ }) {
842
+ const s = M.useReducer((h) => h + 1, 0)[1], n = M.useRef({
843
+ enabled: d,
844
+ mode: t,
845
+ container: null,
846
+ lastSize: null,
847
+ // Keyed by the element itself so a remounted node (same key, new DOM
848
+ // node — e.g. when `enabled` is toggled off then on) is treated as fresh
849
+ // and gets its style written.
850
+ lastPositions: /* @__PURE__ */ new WeakMap(),
851
+ prevRange: null
852
+ });
853
+ n.current.enabled = d, n.current.mode = t;
854
+ const o = (h) => {
855
+ const c = n.current;
856
+ if (!c.enabled) return;
857
+ const f = h.getTotalSize();
858
+ if (c.container && f !== c.lastSize) {
859
+ c.lastSize = f;
860
+ const m = h.options.horizontal ? "width" : "height";
861
+ c.container.style[m] = `${f}px`;
862
+ }
863
+ const a = !!h.options.horizontal, g = c.mode === "transform", u = a ? "left" : "top", v = h.options.scrollMargin, S = h.getVirtualItems();
864
+ for (const m of S) {
865
+ const E = m.start - v, p = h.elementsCache.get(m.key);
866
+ p && c.lastPositions.get(p) !== E && (c.lastPositions.set(p, E), g ? p.style.transform = a ? `translate3d(${E}px, 0, 0)` : `translate3d(0, ${E}px, 0)` : p.style[u] = `${E}px`);
867
+ }
868
+ }, i = {
869
+ ...e,
870
+ onChange: (h, c) => {
871
+ var f;
872
+ const a = n.current;
873
+ let g = !0;
874
+ if (a.enabled) {
875
+ o(h);
876
+ const u = h.range, v = a.prevRange;
877
+ g = !v || v.isScrolling !== h.isScrolling || v.startIndex !== u?.startIndex || v.endIndex !== u?.endIndex, g && (a.prevRange = u ? {
878
+ startIndex: u.startIndex,
879
+ endIndex: u.endIndex,
880
+ isScrolling: h.isScrolling
881
+ } : null);
882
+ }
883
+ g && (r && c ? D(s) : s()), (f = e.onChange) == null || f.call(e, h, c);
884
+ }
885
+ }, [l] = M.useState(() => {
886
+ const h = new q(i);
887
+ return Object.assign(h, {
888
+ containerRef: (c) => {
889
+ const f = n.current;
890
+ if (f.container = c, f.lastSize = null, c && f.enabled) {
891
+ const a = h.getTotalSize();
892
+ f.lastSize = a;
893
+ const g = h.options.horizontal ? "width" : "height";
894
+ c.style[g] = `${a}px`;
895
+ }
896
+ }
897
+ });
898
+ });
899
+ return l.setOptions(i), T(() => l._didMount(), []), T(() => l._willUpdate()), T(() => {
900
+ o(l);
901
+ }), l;
902
+ }
903
+ function Q(r) {
904
+ return X({
905
+ observeElementRect: N,
906
+ observeElementOffset: B,
907
+ scrollToFn: J,
908
+ ...r
909
+ });
910
+ }
911
+ export {
912
+ Q as u
913
+ };