@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.
Files changed (31) hide show
  1. package/build-infos.json +1 -1
  2. package/concorde-core.bundle.js +180 -180
  3. package/concorde-core.es.js +3660 -3508
  4. package/dist/concorde-core.bundle.js +180 -180
  5. package/dist/concorde-core.es.js +3660 -3508
  6. package/dist/js/core/components/functional/queue/queue.js +25 -153
  7. package/dist/js/core/components/functional/queue/queue.js.map +1 -1
  8. package/dist/js/core/components/ui/_css/scroll.js +2 -0
  9. package/dist/js/core/components/ui/_css/scroll.js.map +1 -1
  10. package/dist/js/core/utils/SafariScrollGuard.js +384 -0
  11. package/dist/js/core/utils/SafariScrollGuard.js.map +1 -0
  12. package/dist/js/utils.js +3 -0
  13. package/dist/js/utils.js.map +1 -1
  14. package/dist/types/core/components/functional/queue/queue.d.ts +8 -24
  15. package/dist/types/core/components/functional/queue/queue.d.ts.map +1 -1
  16. package/dist/types/core/components/ui/_css/scroll.d.ts.map +1 -1
  17. package/dist/types/core/utils/SafariScrollGuard.d.ts +36 -0
  18. package/dist/types/core/utils/SafariScrollGuard.d.ts.map +1 -0
  19. package/dist/types/utils.d.ts +1 -0
  20. package/dist/types/utils.d.ts.map +1 -1
  21. package/package.json +6 -2
  22. package/src/core/components/functional/queue/queue.ts +33 -164
  23. package/src/core/components/ui/_css/scroll.ts +3 -0
  24. package/src/core/utils/SafariScrollGuard.ts +429 -0
  25. package/src/docs/search/docs-search.json +28 -108
  26. package/src/docs/tailwind/css/tailwind.css +0 -0
  27. package/src/tsconfig.json +3 -0
  28. package/src/tsconfig.tsbuildinfo +1 -1
  29. package/src/utils.ts +13 -0
  30. package/vite.config.mts +4 -0
  31. 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,
@@ -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;AAMrC,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
+ {"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é (élément ou window) — Safari / iOS only.
60
- * Stock = dernière position user (touch/wheel/pointer + settle inertie).
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: HTMLElement | Window | null;
64
- storedScrollY: number;
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(): HTMLElement | Window;
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
- private markUserScrollEngaged;
80
- private armScrollSettle;
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":"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"}
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":"AAEA,eAAO,MAAM,YAAY,yBAsBxB,CAAC"}
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"}
@@ -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.7",
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"