@supersoniks/concorde 4.9.7 → 4.9.9
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.
- package/build-infos.json +1 -1
- package/concorde-core.bundle.js +180 -180
- package/concorde-core.es.js +3660 -3508
- package/dist/concorde-core.bundle.js +180 -180
- package/dist/concorde-core.es.js +3660 -3508
- package/dist/js/core/components/functional/queue/queue.js +25 -153
- package/dist/js/core/components/functional/queue/queue.js.map +1 -1
- package/dist/js/core/components/ui/_css/scroll.js +2 -0
- package/dist/js/core/components/ui/_css/scroll.js.map +1 -1
- package/dist/js/core/utils/SafariScrollGuard.js +384 -0
- package/dist/js/core/utils/SafariScrollGuard.js.map +1 -0
- package/dist/js/utils.js +3 -0
- package/dist/js/utils.js.map +1 -1
- package/dist/types/core/components/functional/queue/queue.d.ts +8 -24
- package/dist/types/core/components/functional/queue/queue.d.ts.map +1 -1
- package/dist/types/core/components/ui/_css/scroll.d.ts.map +1 -1
- package/dist/types/core/utils/SafariScrollGuard.d.ts +36 -0
- package/dist/types/core/utils/SafariScrollGuard.d.ts.map +1 -0
- package/dist/types/utils.d.ts +1 -0
- package/dist/types/utils.d.ts.map +1 -1
- package/package.json +6 -2
- package/src/core/components/functional/queue/queue.ts +33 -164
- package/src/core/components/ui/_css/scroll.ts +3 -0
- package/src/core/utils/SafariScrollGuard.ts +429 -0
- package/src/docs/search/docs-search.json +28 -108
- package/src/docs/tailwind/css/tailwind.css +0 -0
- package/src/tsconfig.json +3 -0
- package/src/tsconfig.tsbuildinfo +1 -1
- package/src/utils.ts +13 -0
- package/vite.config.mts +4 -0
- package/vitest.setup.ts +22 -0
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Garde Safari / WebKit : empêche les resets fantômes de scroll.
|
|
3
|
+
*
|
|
4
|
+
* - stock = dernière position user (intent + settle inertie)
|
|
5
|
+
* - jump brutal vers ~0 → JAMAIS capturé (même mid-gesture), restore
|
|
6
|
+
* - collapse Lit / slot light-DOM : observe aussi le host + sticky restore multi-frames
|
|
7
|
+
* - nested : intent uniquement sur le scroller le plus proche (composedPath)
|
|
8
|
+
*/
|
|
9
|
+
const SCROLL_SETTLE_MS = 150;
|
|
10
|
+
const RESTORE_EPS = 10;
|
|
11
|
+
/** Jump vers le haut considéré fantôme (pas une remontée progressive trackpad). */
|
|
12
|
+
const JUMP_EPS = 200;
|
|
13
|
+
/** Combien de frames on re-applique le stock après un fantôme / mutation. */
|
|
14
|
+
const STICKY_RESTORE_FRAMES = 16;
|
|
15
|
+
const states = new WeakMap();
|
|
16
|
+
let installed = false;
|
|
17
|
+
export function isSafariScrollEngine() {
|
|
18
|
+
if (typeof navigator === "undefined")
|
|
19
|
+
return false;
|
|
20
|
+
return /^((?!chrome|android).)*safari/i.test(navigator.userAgent);
|
|
21
|
+
}
|
|
22
|
+
function read(root) {
|
|
23
|
+
if (root === window) {
|
|
24
|
+
return { x: window.scrollX, y: window.scrollY };
|
|
25
|
+
}
|
|
26
|
+
const el = root;
|
|
27
|
+
return { x: el.scrollLeft, y: el.scrollTop };
|
|
28
|
+
}
|
|
29
|
+
function write(root, x, y) {
|
|
30
|
+
if (root === window) {
|
|
31
|
+
window.scrollTo(x, y);
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const el = root;
|
|
35
|
+
// scrollTo coupe mieux l’inertie iOS que le setter seul
|
|
36
|
+
if (typeof el.scrollTo === "function") {
|
|
37
|
+
el.scrollTo(x, y);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
el.scrollLeft = x;
|
|
41
|
+
el.scrollTop = y;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
function maxScrollY(root) {
|
|
45
|
+
if (root === window) {
|
|
46
|
+
const doc = document.documentElement;
|
|
47
|
+
return Math.max(0, doc.scrollHeight - window.innerHeight);
|
|
48
|
+
}
|
|
49
|
+
const el = root;
|
|
50
|
+
return Math.max(0, el.scrollHeight - el.clientHeight);
|
|
51
|
+
}
|
|
52
|
+
function getState(root) {
|
|
53
|
+
let s = states.get(root);
|
|
54
|
+
if (!s) {
|
|
55
|
+
const pos = read(root);
|
|
56
|
+
s = {
|
|
57
|
+
x: pos.x,
|
|
58
|
+
y: pos.y,
|
|
59
|
+
restoring: false,
|
|
60
|
+
watching: false,
|
|
61
|
+
userEngaged: false,
|
|
62
|
+
raf: 0,
|
|
63
|
+
stickyFrames: 0,
|
|
64
|
+
};
|
|
65
|
+
states.set(root, s);
|
|
66
|
+
}
|
|
67
|
+
return s;
|
|
68
|
+
}
|
|
69
|
+
function markUserEngaged(root) {
|
|
70
|
+
getState(root).userEngaged = true;
|
|
71
|
+
}
|
|
72
|
+
function armScrollSettle(root) {
|
|
73
|
+
const s = getState(root);
|
|
74
|
+
clearTimeout(s.settleTimer);
|
|
75
|
+
s.settleTimer = setTimeout(() => {
|
|
76
|
+
s.userEngaged = false;
|
|
77
|
+
s.settleTimer = undefined;
|
|
78
|
+
}, SCROLL_SETTLE_MS);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Saut brutal vers le haut (pas seulement ~0) : Safari clampe souvent à une
|
|
82
|
+
* valeur intermédiaire (ex. 1716→225). Un `cap` sans `rst` = on avait accepté
|
|
83
|
+
* ce drop comme scroll user.
|
|
84
|
+
*/
|
|
85
|
+
function looksLikePhantomDrop(currentY, storedY) {
|
|
86
|
+
return storedY - currentY >= JUMP_EPS;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Mémorise la position courante — refuse tout gros drop d’un coup.
|
|
90
|
+
*/
|
|
91
|
+
export function captureScrollRoot(root) {
|
|
92
|
+
if (!isSafariScrollEngine())
|
|
93
|
+
return;
|
|
94
|
+
const s = getState(root);
|
|
95
|
+
if (s.restoring)
|
|
96
|
+
return;
|
|
97
|
+
const pos = read(root);
|
|
98
|
+
if (looksLikePhantomDrop(pos.y, s.y)) {
|
|
99
|
+
stickyRestore(root);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
s.x = pos.x;
|
|
103
|
+
s.y = pos.y;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Ré-applique le stock. Ne pollue jamais le stock avec le scroll courant.
|
|
107
|
+
*
|
|
108
|
+
* Important : on peut clamper la *cible d’écriture* à maxScroll (le navigateur
|
|
109
|
+
* le ferait de toute façon), mais on ne doit JAMAIS abaisser `s.y` pour autant —
|
|
110
|
+
* pendant un re-render Lit maxScroll plonge souvent un instant (ex. 215→75) puis
|
|
111
|
+
* revient ; baisser le stock là, c’est perdre la position pour de bon.
|
|
112
|
+
*/
|
|
113
|
+
export function restoreScrollRoot(root) {
|
|
114
|
+
if (!isSafariScrollEngine())
|
|
115
|
+
return;
|
|
116
|
+
const s = getState(root);
|
|
117
|
+
const maxY = maxScrollY(root);
|
|
118
|
+
const targetX = s.x;
|
|
119
|
+
// maxY===0 : collapse total transitoire → tenter quand même s.y (no-op clamp)
|
|
120
|
+
const targetY = maxY > 0 ? Math.min(s.y, maxY) : s.y;
|
|
121
|
+
const { x, y } = read(root);
|
|
122
|
+
if (Math.abs(targetX - x) <= RESTORE_EPS &&
|
|
123
|
+
Math.abs(targetY - y) <= RESTORE_EPS) {
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
s.restoring = true;
|
|
127
|
+
try {
|
|
128
|
+
write(root, targetX, targetY);
|
|
129
|
+
}
|
|
130
|
+
finally {
|
|
131
|
+
requestAnimationFrame(() => {
|
|
132
|
+
s.restoring = false;
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/** @deprecated alias */
|
|
137
|
+
export function syncScrollRoot(root) {
|
|
138
|
+
restoreScrollRoot(root);
|
|
139
|
+
}
|
|
140
|
+
export function resetScrollRoot(root, position = { x: 0, y: 0 }) {
|
|
141
|
+
if (!isSafariScrollEngine())
|
|
142
|
+
return;
|
|
143
|
+
const s = getState(root);
|
|
144
|
+
if (position === "current") {
|
|
145
|
+
const pos = read(root);
|
|
146
|
+
s.x = pos.x;
|
|
147
|
+
s.y = pos.y;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
s.x = position.x ?? 0;
|
|
151
|
+
s.y = position.y ?? 0;
|
|
152
|
+
}
|
|
153
|
+
function stickyRestore(root) {
|
|
154
|
+
const s = getState(root);
|
|
155
|
+
s.stickyFrames = STICKY_RESTORE_FRAMES;
|
|
156
|
+
if (s.raf)
|
|
157
|
+
return;
|
|
158
|
+
const tick = () => {
|
|
159
|
+
s.raf = 0;
|
|
160
|
+
restoreScrollRoot(root);
|
|
161
|
+
if (s.stickyFrames > 0) {
|
|
162
|
+
s.stickyFrames--;
|
|
163
|
+
s.raf = requestAnimationFrame(tick);
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
s.raf = requestAnimationFrame(tick);
|
|
167
|
+
}
|
|
168
|
+
function scheduleRestore(root) {
|
|
169
|
+
stickyRestore(root);
|
|
170
|
+
}
|
|
171
|
+
/**
|
|
172
|
+
* Branche écoute intent + scroll + resize (+ mutations).
|
|
173
|
+
* Idempotent.
|
|
174
|
+
*/
|
|
175
|
+
export function watchScrollRoot(root) {
|
|
176
|
+
if (!isSafariScrollEngine())
|
|
177
|
+
return;
|
|
178
|
+
const s = getState(root);
|
|
179
|
+
if (s.watching)
|
|
180
|
+
return;
|
|
181
|
+
s.watching = true;
|
|
182
|
+
const target = root === window ? window : root;
|
|
183
|
+
const onScroll = () => {
|
|
184
|
+
if (s.restoring)
|
|
185
|
+
return;
|
|
186
|
+
const { y } = read(root);
|
|
187
|
+
// Gros drop d’un coup (y compris vers une valeur intermédiaire) → restore
|
|
188
|
+
if (looksLikePhantomDrop(y, s.y)) {
|
|
189
|
+
stickyRestore(root);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
if (s.userEngaged) {
|
|
193
|
+
captureScrollRoot(root);
|
|
194
|
+
armScrollSettle(root);
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
// Pas d’intent taggé : adopter la position courante (pas un gros drop).
|
|
198
|
+
captureScrollRoot(root);
|
|
199
|
+
};
|
|
200
|
+
const isGestureForThisRoot = (e) => nearestScrollRootFromEvent(e) === root;
|
|
201
|
+
const onUserIntent = (e) => {
|
|
202
|
+
if (!isGestureForThisRoot(e))
|
|
203
|
+
return;
|
|
204
|
+
// Snapshot immédiat avant mutation DOM déclenchée par le clic.
|
|
205
|
+
captureScrollRoot(root);
|
|
206
|
+
markUserEngaged(root);
|
|
207
|
+
};
|
|
208
|
+
const onUserIntentEnd = (e) => {
|
|
209
|
+
if (!isGestureForThisRoot(e))
|
|
210
|
+
return;
|
|
211
|
+
armScrollSettle(root);
|
|
212
|
+
};
|
|
213
|
+
const onWheel = (e) => {
|
|
214
|
+
if (!isGestureForThisRoot(e))
|
|
215
|
+
return;
|
|
216
|
+
captureScrollRoot(root);
|
|
217
|
+
markUserEngaged(root);
|
|
218
|
+
armScrollSettle(root);
|
|
219
|
+
};
|
|
220
|
+
target.addEventListener("scroll", onScroll, { passive: true });
|
|
221
|
+
target.addEventListener("touchstart", onUserIntent, { passive: true });
|
|
222
|
+
target.addEventListener("touchend", onUserIntentEnd, { passive: true });
|
|
223
|
+
target.addEventListener("touchcancel", onUserIntentEnd, { passive: true });
|
|
224
|
+
target.addEventListener("wheel", onWheel, { passive: true });
|
|
225
|
+
target.addEventListener("pointerdown", onUserIntent, { passive: true });
|
|
226
|
+
target.addEventListener("pointerup", onUserIntentEnd, { passive: true });
|
|
227
|
+
target.addEventListener("pointercancel", onUserIntentEnd, { passive: true });
|
|
228
|
+
const pos = read(root);
|
|
229
|
+
s.x = pos.x;
|
|
230
|
+
s.y = pos.y;
|
|
231
|
+
if (root === window) {
|
|
232
|
+
const ro = new ResizeObserver(() => scheduleRestore(window));
|
|
233
|
+
ro.observe(document.documentElement);
|
|
234
|
+
s.resizeObserver = ro;
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
const el = root;
|
|
238
|
+
const ro = new ResizeObserver(() => scheduleRestore(el));
|
|
239
|
+
ro.observe(el);
|
|
240
|
+
for (const child of Array.from(el.children)) {
|
|
241
|
+
ro.observe(child);
|
|
242
|
+
}
|
|
243
|
+
s.resizeObserver = ro;
|
|
244
|
+
const onDomChange = () => scheduleRestore(el);
|
|
245
|
+
const mo = new MutationObserver((mutations) => {
|
|
246
|
+
for (const mutation of mutations) {
|
|
247
|
+
if (mutation.type !== "childList")
|
|
248
|
+
continue;
|
|
249
|
+
for (const node of Array.from(mutation.addedNodes)) {
|
|
250
|
+
if (node instanceof Element)
|
|
251
|
+
ro.observe(node);
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
onDomChange();
|
|
255
|
+
});
|
|
256
|
+
// Shadow children
|
|
257
|
+
mo.observe(el, { childList: true, subtree: true, characterData: true });
|
|
258
|
+
// Light DOM du host (contenu <slot>) — sinon on rate suppressions / updates
|
|
259
|
+
const rootNode = el.getRootNode();
|
|
260
|
+
if (rootNode instanceof ShadowRoot && rootNode.host) {
|
|
261
|
+
mo.observe(rootNode.host, {
|
|
262
|
+
childList: true,
|
|
263
|
+
subtree: true,
|
|
264
|
+
characterData: true,
|
|
265
|
+
});
|
|
266
|
+
}
|
|
267
|
+
s.mutationObserver = mo;
|
|
268
|
+
}
|
|
269
|
+
function nearestScrollRootFromEvent(e) {
|
|
270
|
+
for (const node of e.composedPath()) {
|
|
271
|
+
if (node === window || node === document)
|
|
272
|
+
continue;
|
|
273
|
+
if (node instanceof HTMLElement && isScrollContainer(node)) {
|
|
274
|
+
return node;
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
return window;
|
|
278
|
+
}
|
|
279
|
+
function isScrollContainer(el) {
|
|
280
|
+
if (!(el instanceof HTMLElement))
|
|
281
|
+
return false;
|
|
282
|
+
if (el === document.documentElement || el === document.body)
|
|
283
|
+
return false;
|
|
284
|
+
const oy = getComputedStyle(el).overflowY;
|
|
285
|
+
return oy === "auto" || oy === "scroll" || oy === "overlay";
|
|
286
|
+
}
|
|
287
|
+
function discoverFromEvent(e) {
|
|
288
|
+
for (const node of e.composedPath()) {
|
|
289
|
+
if (node === window || node === document)
|
|
290
|
+
continue;
|
|
291
|
+
if (node instanceof HTMLElement && isScrollContainer(node)) {
|
|
292
|
+
watchScrollRoot(node);
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
const engageRoot = nearestScrollRootFromEvent(e);
|
|
296
|
+
watchScrollRoot(engageRoot);
|
|
297
|
+
if (e.type === "wheel") {
|
|
298
|
+
captureScrollRoot(engageRoot);
|
|
299
|
+
markUserEngaged(engageRoot);
|
|
300
|
+
armScrollSettle(engageRoot);
|
|
301
|
+
}
|
|
302
|
+
else if (e.type === "touchstart" || e.type === "pointerdown") {
|
|
303
|
+
captureScrollRoot(engageRoot);
|
|
304
|
+
markUserEngaged(engageRoot);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
function watchScrollContainersInTree(root) {
|
|
308
|
+
if (root instanceof Element && root.classList?.contains("custom-scroll")) {
|
|
309
|
+
watchScrollRoot(root);
|
|
310
|
+
}
|
|
311
|
+
root.querySelectorAll?.(".custom-scroll").forEach((el) => {
|
|
312
|
+
if (el instanceof HTMLElement)
|
|
313
|
+
watchScrollRoot(el);
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
function observeShadowRoot(shadow) {
|
|
317
|
+
watchScrollContainersInTree(shadow);
|
|
318
|
+
const mo = new MutationObserver((mutations) => {
|
|
319
|
+
for (const mutation of mutations) {
|
|
320
|
+
for (const node of Array.from(mutation.addedNodes)) {
|
|
321
|
+
if (node instanceof Element)
|
|
322
|
+
watchScrollContainersInTree(node);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
});
|
|
326
|
+
mo.observe(shadow, { childList: true, subtree: true });
|
|
327
|
+
}
|
|
328
|
+
function walkExistingShadows(node) {
|
|
329
|
+
node.querySelectorAll?.("*").forEach((el) => {
|
|
330
|
+
if (el.shadowRoot) {
|
|
331
|
+
observeShadowRoot(el.shadowRoot);
|
|
332
|
+
walkExistingShadows(el.shadowRoot);
|
|
333
|
+
}
|
|
334
|
+
});
|
|
335
|
+
}
|
|
336
|
+
function patchAttachShadow() {
|
|
337
|
+
const proto = Element.prototype;
|
|
338
|
+
if (proto.__safariScrollGuardPatched)
|
|
339
|
+
return;
|
|
340
|
+
proto.__safariScrollGuardPatched = true;
|
|
341
|
+
const nativeAttachShadow = proto.attachShadow;
|
|
342
|
+
proto.attachShadow = function attachShadowPatched(init) {
|
|
343
|
+
const shadow = nativeAttachShadow.call(this, init);
|
|
344
|
+
observeShadowRoot(shadow);
|
|
345
|
+
return shadow;
|
|
346
|
+
};
|
|
347
|
+
}
|
|
348
|
+
export function installSafariScrollGuard() {
|
|
349
|
+
if (typeof window === "undefined" || installed)
|
|
350
|
+
return;
|
|
351
|
+
installed = true;
|
|
352
|
+
if (!isSafariScrollEngine())
|
|
353
|
+
return;
|
|
354
|
+
watchScrollRoot(window);
|
|
355
|
+
patchAttachShadow();
|
|
356
|
+
const opts = { capture: true, passive: true };
|
|
357
|
+
window.addEventListener("wheel", discoverFromEvent, opts);
|
|
358
|
+
window.addEventListener("touchstart", discoverFromEvent, opts);
|
|
359
|
+
window.addEventListener("pointerdown", discoverFromEvent, opts);
|
|
360
|
+
const scan = () => {
|
|
361
|
+
watchScrollContainersInTree(document);
|
|
362
|
+
walkExistingShadows(document);
|
|
363
|
+
};
|
|
364
|
+
if (document.readyState === "loading") {
|
|
365
|
+
document.addEventListener("DOMContentLoaded", scan, { once: true });
|
|
366
|
+
}
|
|
367
|
+
else {
|
|
368
|
+
scan();
|
|
369
|
+
}
|
|
370
|
+
const mo = new MutationObserver((mutations) => {
|
|
371
|
+
for (const mutation of mutations) {
|
|
372
|
+
for (const node of Array.from(mutation.addedNodes)) {
|
|
373
|
+
if (!(node instanceof Element))
|
|
374
|
+
continue;
|
|
375
|
+
watchScrollContainersInTree(node);
|
|
376
|
+
if (node.shadowRoot)
|
|
377
|
+
observeShadowRoot(node.shadowRoot);
|
|
378
|
+
walkExistingShadows(node);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
});
|
|
382
|
+
mo.observe(document.documentElement, { childList: true, subtree: true });
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=SafariScrollGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafariScrollGuard.js","sourceRoot":"","sources":["../../../../src/core/utils/SafariScrollGuard.ts"],"names":[],"mappings":"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"}
|
package/dist/js/utils.js
CHANGED
|
@@ -23,6 +23,9 @@ export const URLPattern = myURLPattern.default;
|
|
|
23
23
|
import { Endpoint } from "./core/utils/endpoint";
|
|
24
24
|
import { DataProviderKey } from "./core/utils/dataProviderKey";
|
|
25
25
|
export { Endpoint, DataProviderKey };
|
|
26
|
+
export { installSafariScrollGuard, watchScrollRoot, syncScrollRoot, restoreScrollRoot, captureScrollRoot, resetScrollRoot, isSafariScrollEngine, } from "./core/utils/SafariScrollGuard";
|
|
27
|
+
import { installSafariScrollGuard } from "./core/utils/SafariScrollGuard";
|
|
28
|
+
installSafariScrollGuard();
|
|
26
29
|
window["concorde-utils"] = window["concorde-utils"] || {};
|
|
27
30
|
window["concorde-utils"] = {
|
|
28
31
|
Utils: Utils,
|
package/dist/js/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,EAAE;AACF,OAAO,KAAK,OAAO,MAAM,wCAAwC,CAAC;AAClE,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;AACvC,OAAO,KAAK,kBAAkB,MAAM,mDAAmD,CAAC;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAC;AAChE,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,OAAO,KAAK,iBAAiB,MAAM,kDAAkD,CAAC;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,0CAA0C,CAAC;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,KAAK,KAAK,MAAM,sCAAsC,CAAC;AAC9D,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;AACjC,OAAO,KAAK,YAAY,MAAM,8CAA8C,CAAC;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA,EAAE;AACF,EAAE;AACF,OAAO,KAAK,OAAO,MAAM,wCAAwC,CAAC;AAClE,MAAM,CAAC,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC;AACrC,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;AACvC,OAAO,KAAK,kBAAkB,MAAM,mDAAmD,CAAC;AACxF,MAAM,CAAC,MAAM,gBAAgB,GAAG,kBAAkB,CAAC,OAAO,CAAC;AAC3D,OAAO,KAAK,QAAQ,MAAM,yCAAyC,CAAC;AACpE,MAAM,CAAC,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;AACvC,OAAO,KAAK,MAAM,MAAM,uCAAuC,CAAC;AAChE,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC;AACnC,OAAO,KAAK,iBAAiB,MAAM,kDAAkD,CAAC;AACtF,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC,OAAO,CAAC;AACzD,OAAO,KAAK,SAAS,MAAM,0CAA0C,CAAC;AACtE,MAAM,CAAC,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iDAAiD,CAAC;AACnF,OAAO,KAAK,KAAK,MAAM,sCAAsC,CAAC;AAC9D,MAAM,CAAC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC;AACjC,OAAO,KAAK,YAAY,MAAM,8CAA8C,CAAC;AAC7E,MAAM,CAAC,MAAM,UAAU,GAAG,YAAY,CAAC,OAAO,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,GAErB,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAC;AAM1E,wBAAwB,EAAE,CAAC;AAE3B,MAAM,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAC1D,MAAM,CAAC,gBAAgB,CAAC,GAAG;IACzB,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,MAAM;IACd,gBAAgB,EAAE,gBAAgB;IAClC,MAAM,EAAE,MAAM;IACd,IAAI,EAAE,IAAI;IACV,eAAe,EAAE,eAAe;IAChC,OAAO,EAAE,OAAO;IAChB,gBAAgB,EAAE,gBAAgB;IAClC,GAAG,EAAE,GAAG;IACR,UAAU,EAAE,UAAU;IACtB,QAAQ,EAAE,QAAQ;IAClB,eAAe,EAAE,eAAe;CACjC,CAAC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { LitElement, nothing, PropertyValues } from "lit";
|
|
2
2
|
import DataProvider from "@supersoniks/concorde/core/utils/PublisherProxy";
|
|
3
3
|
import "@supersoniks/concorde/core/components/functional/list/list";
|
|
4
|
+
import { type ScrollRoot } from "@supersoniks/concorde/core/utils/SafariScrollGuard";
|
|
4
5
|
import { ListItems } from "@supersoniks/concorde/core/components/functional/list/list";
|
|
5
6
|
type QueueItem = {
|
|
6
7
|
id: string;
|
|
@@ -56,34 +57,17 @@ export default class Queue extends Queue_base {
|
|
|
56
57
|
isFirstRequest: boolean;
|
|
57
58
|
updateFilteredContent: () => void;
|
|
58
59
|
/**
|
|
59
|
-
* Conteneur scrollé
|
|
60
|
-
*
|
|
61
|
-
* Restore = updated (enfants Lit) + MutationObserver (subscribers / modal).
|
|
60
|
+
* Conteneur scrollé — Safari : stock/restore via SafariScrollGuard
|
|
61
|
+
* (capture intent user globale). Ici : sync root + restore après Lit.
|
|
62
62
|
*/
|
|
63
|
-
scrollRoot:
|
|
64
|
-
|
|
65
|
-
storedScrollX: number;
|
|
66
|
-
private static readonly SCROLL_SETTLE_MS;
|
|
67
|
-
private userScrollEngaged;
|
|
68
|
-
private restoringScroll;
|
|
69
|
-
private scrollGuardActive;
|
|
70
|
-
private scrollSettleTimer?;
|
|
63
|
+
scrollRoot: ScrollRoot | null;
|
|
64
|
+
private scrollSyncActive;
|
|
71
65
|
private mutationObserver;
|
|
72
|
-
private boundScrollTarget;
|
|
73
66
|
private restoreGeneration;
|
|
74
|
-
resolveScrollRoot():
|
|
75
|
-
/** Lit la position courante — ne pas appeler sur un scroll “fantôme” Safari. */
|
|
76
|
-
captureScrollPosition(): void;
|
|
77
|
-
restoreScrollPosition(): void;
|
|
67
|
+
resolveScrollRoot(): ScrollRoot;
|
|
78
68
|
isSafari(): boolean;
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
private onScrollRootScroll;
|
|
82
|
-
private onUserScrollIntent;
|
|
83
|
-
private onUserScrollIntentEnd;
|
|
84
|
-
private onWheelIntent;
|
|
85
|
-
ensureScrollGuard(): void;
|
|
86
|
-
teardownScrollGuard(): void;
|
|
69
|
+
ensureScrollSync(): void;
|
|
70
|
+
teardownScrollSync(): void;
|
|
87
71
|
/**
|
|
88
72
|
* Attend la fin des updates Lit de la queue + sonic-list, puis 2 rAF (layout Safari).
|
|
89
73
|
* Ne pas await updateComplete *dans* updated (deadlock) — on sort du cycle via void async.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhE,OAAO,YAAkC,MAAM,iDAAiD,CAAC;AACjG,OAAO,4DAA4D,CAAC;AAEpE,OAAO,EAAE,SAAS,EAAE,MAAM,4DAA4D,CAAC;AAEvF,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,KAAK,UAAU,GAAG,SAAS,EAAE,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;;AAGF;;;;;;;GAOG;AAEH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,UAAwC;IAC9C,SAAS,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAChE;IACyC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC/B,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IACjC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAQ;IAClF,eAAe,SAAK;IACpB,GAAG,SAAM;IAEmB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClE;;OAEG;IACS,KAAK,EAAE,YAAY,CAAa;IAChC,qBAAqB,SAAO;IAK5B,KAAK,SAAK;IACV,eAAe,SAAK;IAEpB,MAAM,SAAK;IACX,WAAW,SAAK;IACC,UAAU,UAAS;IAEpB,MAAM,SAAY;IAElC,cAAc,SAAM;IAChC,oBAAoB;IAqBpB,MAAM,CAAC,eAAe,SAAK;IAC3B,UAAU,SAAK;IACf,YAAY,SAAc;IAEpB,iBAAiB;
|
|
1
|
+
{"version":3,"file":"queue.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/functional/queue/queue.ts"],"names":[],"mappings":"AAAA,OAAO,EAAQ,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,KAAK,CAAC;AAIhE,OAAO,YAAkC,MAAM,iDAAiD,CAAC;AACjG,OAAO,4DAA4D,CAAC;AAEpE,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,oDAAoD,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,4DAA4D,CAAC;AAEvF,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AACF,KAAK,UAAU,GAAG,SAAS,EAAE,GAAG;IAC9B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;;AAGF;;;;;;;GAOG;AAEH,MAAM,CAAC,OAAO,OAAO,KAAM,SAAQ,UAAwC;IAC9C,SAAS,EAAE,KAAK,CAAC,mBAAmB,CAAC,GAAG,IAAI,CAChE;IACyC,KAAK,EAAE,SAAS,GAAG,IAAI,CAAQ;IAC/B,OAAO,EAAE,SAAS,GAAG,IAAI,CAAQ;IACjC,QAAQ,EAAE,SAAS,GAAG,IAAI,CAAQ;IAClF,eAAe,SAAK;IACpB,GAAG,SAAM;IAEmB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAQ;IAClE;;OAEG;IACS,KAAK,EAAE,YAAY,CAAa;IAChC,qBAAqB,SAAO;IAK5B,KAAK,SAAK;IACV,eAAe,SAAK;IAEpB,MAAM,SAAK;IACX,WAAW,SAAK;IACC,UAAU,UAAS;IAEpB,MAAM,SAAY;IAElC,cAAc,SAAM;IAChC,oBAAoB;IAqBpB,MAAM,CAAC,eAAe,SAAK;IAC3B,UAAU,SAAK;IACf,YAAY,SAAc;IAEpB,iBAAiB;IAmCvB,eAAe,EAAE,YAAY,GAAG,IAAI,CAAQ;IAC5C,YAAY;IAYZ,eAAe,CAAC,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;IAChD,eAAe,SAAO;IACtB,UAAU,SAAM;IAChB,SAAS,SAAK;IACd,cAAc,UAAQ;IACtB,qBAAqB,aAoDnB;IAEF;;;OAGG;IACH,UAAU,EAAE,UAAU,GAAG,IAAI,CAAQ;IACrC,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,iBAAiB,CAAK;IAE9B,iBAAiB,IAAI,UAAU;IAY/B,QAAQ;IAIR,gBAAgB;IAqBhB,kBAAkB;IAQlB;;;OAGG;IACH,4BAA4B;IA2B5B,SAAS,CAAC,OAAO,CAAC,kBAAkB,EAAE,cAAc,GAAG,IAAI;IAW3D;;;;;OAKG;IACyB,sBAAsB,SAAM;IAC3B,oBAAoB,UAAS;IAE9B,KAAK,SAAQ;IAEzC,aAAa;IAGb,iBAAiB,EAAE,MAAM,EAAE,CAAM;IAEjC,YAAY,UAAS;IACrB,IAAI,CAAC,CAAC,CAAC,EAAE,WAAW;IAwFpB,MAAM;CAoDP"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/ui/_css/scroll.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scroll.d.ts","sourceRoot":"","sources":["../../../../../../src/core/components/ui/_css/scroll.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,YAAY,yBAsBxB,CAAC"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Garde Safari / WebKit : empêche les resets fantômes de scroll.
|
|
3
|
+
*
|
|
4
|
+
* - stock = dernière position user (intent + settle inertie)
|
|
5
|
+
* - jump brutal vers ~0 → JAMAIS capturé (même mid-gesture), restore
|
|
6
|
+
* - collapse Lit / slot light-DOM : observe aussi le host + sticky restore multi-frames
|
|
7
|
+
* - nested : intent uniquement sur le scroller le plus proche (composedPath)
|
|
8
|
+
*/
|
|
9
|
+
export type ScrollRoot = HTMLElement | Window;
|
|
10
|
+
export declare function isSafariScrollEngine(): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Mémorise la position courante — refuse tout gros drop d’un coup.
|
|
13
|
+
*/
|
|
14
|
+
export declare function captureScrollRoot(root: ScrollRoot): void;
|
|
15
|
+
/**
|
|
16
|
+
* Ré-applique le stock. Ne pollue jamais le stock avec le scroll courant.
|
|
17
|
+
*
|
|
18
|
+
* Important : on peut clamper la *cible d’écriture* à maxScroll (le navigateur
|
|
19
|
+
* le ferait de toute façon), mais on ne doit JAMAIS abaisser `s.y` pour autant —
|
|
20
|
+
* pendant un re-render Lit maxScroll plonge souvent un instant (ex. 215→75) puis
|
|
21
|
+
* revient ; baisser le stock là, c’est perdre la position pour de bon.
|
|
22
|
+
*/
|
|
23
|
+
export declare function restoreScrollRoot(root: ScrollRoot): void;
|
|
24
|
+
/** @deprecated alias */
|
|
25
|
+
export declare function syncScrollRoot(root: ScrollRoot): void;
|
|
26
|
+
export declare function resetScrollRoot(root: ScrollRoot, position?: {
|
|
27
|
+
x?: number;
|
|
28
|
+
y?: number;
|
|
29
|
+
} | "current"): void;
|
|
30
|
+
/**
|
|
31
|
+
* Branche écoute intent + scroll + resize (+ mutations).
|
|
32
|
+
* Idempotent.
|
|
33
|
+
*/
|
|
34
|
+
export declare function watchScrollRoot(root: ScrollRoot): void;
|
|
35
|
+
export declare function installSafariScrollGuard(): void;
|
|
36
|
+
//# sourceMappingURL=SafariScrollGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SafariScrollGuard.d.ts","sourceRoot":"","sources":["../../../../src/core/utils/SafariScrollGuard.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,MAAM,CAAC;AAyB9C,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AA0ED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAWxD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAwBxD;AAED,wBAAwB;AACxB,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAErD;AAED,wBAAgB,eAAe,CAC7B,IAAI,EAAE,UAAU,EAChB,QAAQ,GAAE;IAAE,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAA0B,GAChE,IAAI,CAWN;AAqBD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAoGtD;AAuFD,wBAAgB,wBAAwB,IAAI,IAAI,CAoC/C"}
|
package/dist/types/utils.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export declare const URLPattern: typeof import("url-pattern");
|
|
|
14
14
|
import { Endpoint } from "./core/utils/endpoint";
|
|
15
15
|
import { DataProviderKey } from "./core/utils/dataProviderKey";
|
|
16
16
|
export { Endpoint, DataProviderKey };
|
|
17
|
+
export { installSafariScrollGuard, watchScrollRoot, syncScrollRoot, restoreScrollRoot, captureScrollRoot, resetScrollRoot, isSafariScrollEngine, type ScrollRoot, } from "./core/utils/SafariScrollGuard";
|
|
17
18
|
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,wCAAwC,CAAC;AAClE,eAAO,MAAM,KAAK,wBAAkB,CAAC;AAErC,eAAO,MAAM,MAAM,kEAAmB,CAAC;AACvC,OAAO,KAAK,kBAAkB,MAAM,mDAAmD,CAAC;AACxF,eAAO,MAAM,gBAAgB,mCAA6B,CAAC;AAE3D,eAAO,MAAM,MAAM,kEAAmB,CAAC;AAEvC,eAAO,MAAM,IAAI,gEAAiB,CAAC;AACnC,OAAO,KAAK,iBAAiB,MAAM,kDAAkD,CAAC;AACtF,eAAO,MAAM,eAAe,kCAA4B,CAAC;AAEzD,eAAO,MAAM,OAAO,mEAAoB,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAGhE,eAAO,MAAM,GAAG,+DAAgB,CAAC;AAEjC,eAAO,MAAM,UAAU,8BAAuB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,OAAO,MAAM,wCAAwC,CAAC;AAClE,eAAO,MAAM,KAAK,wBAAkB,CAAC;AAErC,eAAO,MAAM,MAAM,kEAAmB,CAAC;AACvC,OAAO,KAAK,kBAAkB,MAAM,mDAAmD,CAAC;AACxF,eAAO,MAAM,gBAAgB,mCAA6B,CAAC;AAE3D,eAAO,MAAM,MAAM,kEAAmB,CAAC;AAEvC,eAAO,MAAM,IAAI,gEAAiB,CAAC;AACnC,OAAO,KAAK,iBAAiB,MAAM,kDAAkD,CAAC;AACtF,eAAO,MAAM,eAAe,kCAA4B,CAAC;AAEzD,eAAO,MAAM,OAAO,mEAAoB,CAAC;AACzC,cAAc,iDAAiD,CAAC;AAGhE,eAAO,MAAM,GAAG,+DAAgB,CAAC;AAEjC,eAAO,MAAM,UAAU,8BAAuB,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC;AACrC,OAAO,EACL,wBAAwB,EACxB,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,oBAAoB,EACpB,KAAK,UAAU,GAChB,MAAM,gCAAgC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@supersoniks/concorde",
|
|
3
|
-
"version": "4.9.
|
|
3
|
+
"version": "4.9.9",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "",
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"postbuild-docs": "node scripts/post-build-docs.js",
|
|
14
14
|
"prepublishOnly": "node scripts/pre-publish.mjs",
|
|
15
15
|
"test": "vitest --reporter verbose --watch",
|
|
16
|
-
"test:ci": "vitest run --reporter verbose",
|
|
16
|
+
"test:ci": "vitest run --reporter verbose && node --test scripts/ai-init.test.mjs",
|
|
17
17
|
"ai-init": "node scripts/ai-init.mjs"
|
|
18
18
|
},
|
|
19
19
|
"exports": {
|
|
@@ -1062,6 +1062,10 @@
|
|
|
1062
1062
|
"types": "./dist/types/core/utils/PublisherProxy.d.ts",
|
|
1063
1063
|
"default": "./dist/js/core/utils/PublisherProxy.js"
|
|
1064
1064
|
},
|
|
1065
|
+
"./utils/SafariScrollGuard": {
|
|
1066
|
+
"types": "./dist/types/core/utils/SafariScrollGuard.d.ts",
|
|
1067
|
+
"default": "./dist/js/core/utils/SafariScrollGuard.js"
|
|
1068
|
+
},
|
|
1065
1069
|
"./utils/Utils": {
|
|
1066
1070
|
"types": "./dist/types/core/utils/Utils.d.ts",
|
|
1067
1071
|
"default": "./dist/js/core/utils/Utils.js"
|