@oxy.so/bloom 4.29.1 → 4.29.2

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/docs/carousel.mdx CHANGED
@@ -28,7 +28,7 @@ import { Carousel, CarouselItem } from '@oxy.so/bloom/carousel';
28
28
  | --- | --- | --- |
29
29
  | `header` | | Leading content of the arrows row, e.g. a section title. Header at the start, arrows at the end — one row, not two. |
30
30
  | `showArrows` | `true` | Prev/next buttons, right-aligned above the track. They disable at each end. |
31
- | `showDots` | `true` | Position indicator; never shown for a single slide. Each dot is a button. |
31
+ | `showDots` | `true` | Position indicator, one dot per stop (see below); never shown for a single stop. Each dot is a button. |
32
32
  | `align` | `'start'` | Where a slide rests when it snaps: `'start'` or `'center'`. |
33
33
  | `gap` | `16` | Space between slides, px. |
34
34
  | `inset` | `0` | Horizontal padding of the header row, the dots and the track's two ends. Slides scroll under it to the edges, and a start-aligned slide snaps to the inset rather than flush. |
@@ -49,7 +49,10 @@ The track is a real horizontal `ScrollView` — a native scroller rather than a
49
49
 
50
50
  - **Snapping** is CSS `scroll-snap` on web and `snapToOffsets` on native (computed from the measured slides, centre-adjusted for `align="center"`).
51
51
  - **Positions are measured** with each slide's `onLayout`, never derived from a width, so mixed-width slides keep working.
52
- - **The ends are pinned, not measured.** At the far end the last slide can never reach the left edge, so a nearest-slide search would never light the last dot and a press on it would look broken. Within 1px of either end the first/last slide is active.
52
+ - **One list of stops drives everything.** A stop is a distinct place the track can rest. Slides narrower than the track share one: every slide that cannot reach the start edge clamps to the same end offset, so the end is ONE stop however many slides it holds. Arrows, dots, snap offsets, the active dot and `onIndexChange` all read that list, so no dot or arrow can scroll nowhere. A shared stop reports its first slide, except the end, which reports the last.
53
+ - **The arrows step from where the track is**, to the nearest stop before or after the scroll offset — never by slide index, which near the end names a slide whose stop the track already rests at.
54
+ - **The active stop is the one nearest the scroll offset**, compared against where each stop RESTS (inset and centring included), not where its slide sits in the content.
55
+ - **The ends are pinned, not measured.** Within 1px of either end the first/last stop is active, so the last dot always lights at the far end.
53
56
  - Programmatic scrolls animate unless the user prefers reduced motion.
54
57
 
55
58
  Web CSS (snap, hidden scrollbar, the track's `:focus-visible` ring, dot transitions) is self-injected through `adoptStyleSheet` on `dataSet` hooks — nothing to copy into a consumer stylesheet.
@@ -232,6 +232,33 @@ function CarouselDot({
232
232
  // Carousel
233
233
  // ---------------------------------------------------------------------------
234
234
 
235
+ /**
236
+ * A place the track can come to rest, and the slide it stands for. Slides
237
+ * narrower than the track share one: every slide that cannot reach the start
238
+ * edge clamps to the same end offset, so the end is ONE stop however many slides
239
+ * it holds.
240
+ */
241
+
242
+ /**
243
+ * Collapse per-slide resting offsets (ascending) into distinct stops, 1px of
244
+ * slack for fractional hi-DPI offsets. A shared stop stands for its FIRST slide,
245
+ * except the end, which stands for the LAST — the far end is where the last
246
+ * slide is, and naming anything else would leave it unreachable.
247
+ */
248
+ function toStops(resting) {
249
+ const stops = [];
250
+ resting.forEach((offset, slide) => {
251
+ const last = stops[stops.length - 1];
252
+ if (last && Math.abs(offset - last.offset) <= 1) return;
253
+ stops.push({
254
+ offset,
255
+ slide
256
+ });
257
+ });
258
+ const end = stops[stops.length - 1];
259
+ if (end) end.slide = resting.length - 1;
260
+ return stops;
261
+ }
235
262
  const CarouselComponent = function Carousel({
236
263
  children,
237
264
  accessibilityLabel,
@@ -261,13 +288,29 @@ const CarouselComponent = function Carousel({
261
288
  contentWidth: 0
262
289
  });
263
290
  const [trackWidth, setTrackWidth] = (0, _react.useState)(0);
264
- const [snapOffsets, setSnapOffsets] = (0, _react.useState)([]);
291
+ const [stops, setStops] = (0, _react.useState)([]);
265
292
  const [active, setActive] = (0, _react.useState)(0);
266
293
  const [atStart, setAtStart] = (0, _react.useState)(true);
267
294
  const [atEnd, setAtEnd] = (0, _react.useState)(false);
268
295
  const onIndexChangeRef = (0, _react.useRef)(onIndexChange);
269
296
  onIndexChangeRef.current = onIndexChange;
270
- const activeRef = (0, _react.useRef)(active);
297
+ const activeSlideRef = (0, _react.useRef)(0);
298
+ const targetFor = (0, _react.useCallback)(item => {
299
+ const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
300
+ const max = Math.max(0, scroll.current.contentWidth - trackWidth);
301
+ return Math.min(Math.max(0, raw), max);
302
+ }, [align, inset, trackWidth]);
303
+
304
+ /**
305
+ * The distinct places the track can rest — or `null` until every slide has
306
+ * been measured. Arrows, dots, snapping and the active slide all read this
307
+ * ONE list, so they cannot disagree about where the track can go.
308
+ */
309
+ const computeStops = (0, _react.useCallback)(() => {
310
+ const all = offsets.current.slice(0, count);
311
+ if (all.length !== count || all.some(o => !o)) return null;
312
+ return toStops(all.map(targetFor));
313
+ }, [count, targetFor]);
271
314
  const measure = (0, _react.useCallback)(() => {
272
315
  const {
273
316
  x,
@@ -280,19 +323,20 @@ const CarouselComponent = function Carousel({
280
323
  const end = viewport > 0 && contentWidth > 0 && x >= contentWidth - viewport - 1;
281
324
  setAtStart(start);
282
325
  setAtEnd(end);
283
- const all = offsets.current.slice(0, count);
284
- if (all.length === 0) return;
285
- let next;
326
+ const all = computeStops();
327
+ if (!all || all.length === 0) return;
328
+
329
+ // The ends are pinned, not measured: within 1px of either end the first/last
330
+ // stop is active. Between them, the stop nearest the scroll offset — compared
331
+ // against where each stop RESTS (inset and centring included), not where its
332
+ // slide sits in the content.
333
+ let next = 0;
286
334
  if (end) {
287
- next = count - 1;
288
- } else if (start) {
289
- next = 0;
290
- } else {
291
- next = 0;
335
+ next = all.length - 1;
336
+ } else if (!start) {
292
337
  let shortest = Number.POSITIVE_INFINITY;
293
- all.forEach((item, index) => {
294
- if (!item) return;
295
- const distance = Math.abs(item.x - x);
338
+ all.forEach((stop, index) => {
339
+ const distance = Math.abs(stop.offset - x);
296
340
  if (distance < shortest) {
297
341
  shortest = distance;
298
342
  next = index;
@@ -300,60 +344,46 @@ const CarouselComponent = function Carousel({
300
344
  });
301
345
  }
302
346
  setActive(next);
303
- if (next !== activeRef.current) {
304
- activeRef.current = next;
305
- onIndexChangeRef.current?.(next);
347
+ const slide = all[next]?.slide ?? 0;
348
+ if (slide !== activeSlideRef.current) {
349
+ activeSlideRef.current = slide;
350
+ onIndexChangeRef.current?.(slide);
306
351
  }
307
- }, [count, trackWidth]);
308
- const targetFor = (0, _react.useCallback)(item => {
309
- const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
310
- const max = Math.max(0, scroll.current.contentWidth - trackWidth);
311
- return Math.min(Math.max(0, raw), max);
312
- }, [align, inset, trackWidth]);
313
- const recomputeSnaps = (0, _react.useCallback)(() => {
314
- if (IS_WEB) return; // CSS scroll-snap owns snapping on web.
315
- const all = offsets.current.slice(0, count);
316
- if (all.length !== count || all.some(o => !o)) return;
317
- setSnapOffsets(all.map(targetFor));
318
- }, [count, targetFor]);
352
+ }, [computeStops, trackWidth]);
353
+ const recomputeStops = (0, _react.useCallback)(() => {
354
+ const next = computeStops();
355
+ if (next) setStops(next);
356
+ }, [computeStops]);
319
357
  const reportOffset = (0, _react.useCallback)((index, x, width) => {
320
358
  offsets.current[index] = {
321
359
  x,
322
360
  width
323
361
  };
324
- recomputeSnaps();
362
+ recomputeStops();
325
363
  measure();
326
- }, [measure, recomputeSnaps]);
364
+ }, [measure, recomputeStops]);
327
365
  (0, _react.useEffect)(() => {
328
- recomputeSnaps();
366
+ recomputeStops();
329
367
  measure();
330
- }, [recomputeSnaps, measure]);
331
- const scrollToIndex = index => {
332
- const target = offsets.current[Math.max(0, Math.min(index, count - 1))];
333
- if (!target) return;
368
+ }, [recomputeStops, measure]);
369
+ const scrollToStop = stop => {
370
+ if (!stop) return;
334
371
  scrollRef.current?.scrollTo({
335
- x: targetFor(target),
372
+ x: stop.offset,
336
373
  animated: !reducedMotion
337
374
  });
338
375
  };
339
376
 
340
377
  /**
341
- * The arrows step from where the track IS, not from the active index. Slides
342
- * narrower than the track share the end offset — every one that cannot reach
343
- * the start edge clamps to it — so near the end "the slide before the active
344
- * one" is often where the track already rests, and an index step would scroll
345
- * nowhere and stay stuck there. Step to the nearest DISTINCT resting place
346
- * instead (1px of slack, as in `measure`).
378
+ * The arrows step from where the track IS, to the nearest stop before or after
379
+ * it (1px of slack, as in `measure`) — never by slide index, which near the
380
+ * end names a slide whose stop the track already rests at.
347
381
  */
348
382
  const step = direction => {
383
+ const all = computeStops();
384
+ if (!all) return;
349
385
  const x = scroll.current.x;
350
- const targets = offsets.current.slice(0, count).filter(item => Boolean(item)).map(targetFor);
351
- const next = direction === 1 ? targets.filter(t => t > x + 1).reduce((a, b) => Math.min(a, b), Number.POSITIVE_INFINITY) : targets.filter(t => t < x - 1).reduce((a, b) => Math.max(a, b), Number.NEGATIVE_INFINITY);
352
- if (!Number.isFinite(next)) return;
353
- scrollRef.current?.scrollTo({
354
- x: next,
355
- animated: !reducedMotion
356
- });
386
+ scrollToStop(direction === 1 ? all.find(stop => stop.offset > x + 1) : [...all].reverse().find(stop => stop.offset < x - 1));
357
387
  };
358
388
  const onScroll = event => {
359
389
  const {
@@ -371,9 +401,10 @@ const CarouselComponent = function Carousel({
371
401
  ...scroll.current,
372
402
  contentWidth: width
373
403
  };
374
- recomputeSnaps();
404
+ recomputeStops();
375
405
  measure();
376
406
  };
407
+ const dotCount = stops.length > 0 ? stops.length : count;
377
408
  const contextValue = (0, _react.useMemo)(() => ({
378
409
  trackWidth,
379
410
  count,
@@ -446,7 +477,7 @@ const CarouselComponent = function Carousel({
446
477
  onScroll: onScroll,
447
478
  onContentSizeChange: onContentSizeChange,
448
479
  onLayout: event => setTrackWidth(event.nativeEvent.layout.width),
449
- snapToOffsets: IS_WEB ? undefined : snapOffsets,
480
+ snapToOffsets: IS_WEB ? undefined : stops.map(stop => stop.offset),
450
481
  decelerationRate: IS_WEB ? undefined : 'fast',
451
482
  disableIntervalMomentum: true,
452
483
  style: trackStyle,
@@ -459,7 +490,7 @@ const CarouselComponent = function Carousel({
459
490
  children: child
460
491
  }, child.key ?? index))
461
492
  })
462
- }), showDots && count > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
493
+ }), showDots && dotCount > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
463
494
  style: {
464
495
  flexDirection: 'row',
465
496
  alignItems: 'center',
@@ -468,14 +499,20 @@ const CarouselComponent = function Carousel({
468
499
  paddingHorizontal: inset
469
500
  },
470
501
  children: Array.from({
471
- length: count
472
- }, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(CarouselDot, {
473
- active: index === active,
474
- paint: paint,
475
- label: dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`,
476
- reducedMotion: reducedMotion,
477
- onPress: () => scrollToIndex(index)
478
- }, index))
502
+ length: dotCount
503
+ }, (_, index) => {
504
+ // One dot per STOP: slides that share a resting place share a dot,
505
+ // so no dot scrolls nowhere. Until the slides are measured there is
506
+ // one per slide, which is what full-width slides settle on anyway.
507
+ const slide = stops[index]?.slide ?? index;
508
+ return /*#__PURE__*/(0, _jsxRuntime.jsx)(CarouselDot, {
509
+ active: index === active,
510
+ paint: paint,
511
+ label: dotLabel ? dotLabel(slide + 1) : `Go to slide ${slide + 1}`,
512
+ reducedMotion: reducedMotion,
513
+ onPress: () => scrollToStop(stops[index])
514
+ }, index);
515
+ })
479
516
  }) : null]
480
517
  });
481
518
  };
@@ -1 +1 @@
1
- {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_button","_shared","_RiArrowLeftSLine","_RiArrowRightSLine","_useInteractionState","_interactiveWebCss","_tokens","_webData","_useTheme","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","IS_WEB","Platform","OS","DOT_TRANSITION_MS","DOT_HEIGHT","DOT_WIDTH","DOT_ACTIVE_WIDTH","resolveCarouselPaint","theme","accent","resolveButtonRamps","dotActive","colors","text","dot","backgroundSecondary","dotHover","textSecondary","ring","STYLE_ID","TRACK","DOT","BLOOM_CAROUSEL_CSS","CarouselItemComponent","CarouselItem","children","width","accessibilityLabel","style","testID","ctx","useContext","CarouselContext","index","CarouselItemIndexContext","reportOffset","onLayout","useCallback","event","x","w","nativeEvent","layout","slideWidth","trackWidth","undefined","jsx","View","webDataSet","bloomCarouselItem","role","count","flexShrink","exports","memo","displayName","CarouselDot","active","paint","label","reducedMotion","onPress","state","hovered","onIn","onOut","useInteractionState","useRef","Animated","Value","current","useEffect","to","setValue","timing","toValue","duration","useNativeDriver","start","background","Pressable","bloomCarouselDot","accessibilityRole","onHoverIn","onHoverOut","hitSlop","top","bottom","left","right","height","borderRadius","full","backgroundColor","CarouselComponent","Carousel","header","showArrows","showDots","align","gap","inset","onIndexChange","previousLabel","nextLabel","dotLabel","useTheme","useInteractiveWebCss","useReducedMotion","useMemo","slides","Children","toArray","filter","isValidElement","length","scrollRef","offsets","scroll","contentWidth","setTrackWidth","useState","snapOffsets","setSnapOffsets","setActive","atStart","setAtStart","atEnd","setAtEnd","onIndexChangeRef","activeRef","measure","viewport","end","all","slice","next","shortest","Number","POSITIVE_INFINITY","forEach","item","distance","Math","abs","targetFor","raw","max","min","recomputeSnaps","some","map","scrollToIndex","target","scrollTo","animated","step","direction","targets","Boolean","reduce","a","b","NEGATIVE_INFINITY","isFinite","onScroll","contentOffset","contentSize","onContentSizeChange","contextValue","trackStyle","jsxs","flexDirection","alignItems","paddingHorizontal","flex","minWidth","Fragment","Button","size","icon","RiArrowLeftSLine","disabled","appearance","tone","RiArrowRightSLine","Provider","value","ScrollView","ref","bloomCarouselTrack","tabIndex","horizontal","showsHorizontalScrollIndicator","scrollEventThrottle","snapToOffsets","decelerationRate","disableIntervalMomentum","contentContainerStyle","child","key","justifyContent","Array","from","_"],"sourceRoot":"../../../src","sources":["carousel/Carousel.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_react","_interopRequireWildcard","require","_reactNative","_reactNativeReanimated","_button","_shared","_RiArrowLeftSLine","_RiArrowRightSLine","_useInteractionState","_interactiveWebCss","_tokens","_webData","_useTheme","_context","_jsxRuntime","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","IS_WEB","Platform","OS","DOT_TRANSITION_MS","DOT_HEIGHT","DOT_WIDTH","DOT_ACTIVE_WIDTH","resolveCarouselPaint","theme","accent","resolveButtonRamps","dotActive","colors","text","dot","backgroundSecondary","dotHover","textSecondary","ring","STYLE_ID","TRACK","DOT","BLOOM_CAROUSEL_CSS","CarouselItemComponent","CarouselItem","children","width","accessibilityLabel","style","testID","ctx","useContext","CarouselContext","index","CarouselItemIndexContext","reportOffset","onLayout","useCallback","event","x","w","nativeEvent","layout","slideWidth","trackWidth","undefined","jsx","View","webDataSet","bloomCarouselItem","role","count","flexShrink","exports","memo","displayName","CarouselDot","active","paint","label","reducedMotion","onPress","state","hovered","onIn","onOut","useInteractionState","useRef","Animated","Value","current","useEffect","to","setValue","timing","toValue","duration","useNativeDriver","start","background","Pressable","bloomCarouselDot","accessibilityRole","onHoverIn","onHoverOut","hitSlop","top","bottom","left","right","height","borderRadius","full","backgroundColor","toStops","resting","stops","forEach","offset","slide","last","length","Math","abs","push","end","CarouselComponent","Carousel","header","showArrows","showDots","align","gap","inset","onIndexChange","previousLabel","nextLabel","dotLabel","useTheme","useInteractiveWebCss","useReducedMotion","useMemo","slides","Children","toArray","filter","isValidElement","scrollRef","offsets","scroll","contentWidth","setTrackWidth","useState","setStops","setActive","atStart","setAtStart","atEnd","setAtEnd","onIndexChangeRef","activeSlideRef","targetFor","item","raw","max","min","computeStops","all","slice","some","map","measure","viewport","next","shortest","Number","POSITIVE_INFINITY","stop","distance","recomputeStops","scrollToStop","scrollTo","animated","step","direction","find","reverse","onScroll","contentOffset","contentSize","onContentSizeChange","dotCount","contextValue","trackStyle","jsxs","flexDirection","alignItems","paddingHorizontal","flex","minWidth","Fragment","Button","size","icon","RiArrowLeftSLine","disabled","appearance","tone","RiArrowRightSLine","Provider","value","ScrollView","ref","bloomCarouselTrack","tabIndex","horizontal","showsHorizontalScrollIndicator","scrollEventThrottle","snapToOffsets","decelerationRate","disableIntervalMomentum","contentContainerStyle","child","key","justifyContent","Array","from","_"],"sourceRoot":"../../../src","sources":["carousel/Carousel.tsx"],"mappings":";;;;;;;AAAA,IAAAA,MAAA,GAAAC,uBAAA,CAAAC,OAAA;AAWA,IAAAC,YAAA,GAAAD,OAAA;AAUA,IAAAE,sBAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AACA,IAAAI,OAAA,GAAAJ,OAAA;AACA,IAAAK,iBAAA,GAAAL,OAAA;AACA,IAAAM,kBAAA,GAAAN,OAAA;AACA,IAAAO,oBAAA,GAAAP,OAAA;AACA,IAAAQ,kBAAA,GAAAR,OAAA;AACA,IAAAS,OAAA,GAAAT,OAAA;AAEA,IAAAU,QAAA,GAAAV,OAAA;AAEA,IAAAW,SAAA,GAAAX,OAAA;AACA,IAAAY,QAAA,GAAAZ,OAAA;AAAsE,IAAAa,WAAA,GAAAb,OAAA;AAAA,SAAAD,wBAAAe,CAAA,EAAAC,CAAA,6BAAAC,OAAA,MAAAC,CAAA,OAAAD,OAAA,IAAAE,CAAA,OAAAF,OAAA,YAAAjB,uBAAA,YAAAA,CAAAe,CAAA,EAAAC,CAAA,SAAAA,CAAA,IAAAD,CAAA,IAAAA,CAAA,CAAAK,UAAA,SAAAL,CAAA,MAAAM,CAAA,EAAAC,CAAA,EAAAC,CAAA,KAAAC,SAAA,QAAAC,OAAA,EAAAV,CAAA,iBAAAA,CAAA,uBAAAA,CAAA,yBAAAA,CAAA,SAAAQ,CAAA,MAAAF,CAAA,GAAAL,CAAA,GAAAG,CAAA,GAAAD,CAAA,QAAAG,CAAA,CAAAK,GAAA,CAAAX,CAAA,UAAAM,CAAA,CAAAM,GAAA,CAAAZ,CAAA,GAAAM,CAAA,CAAAO,GAAA,CAAAb,CAAA,EAAAQ,CAAA,gBAAAP,CAAA,IAAAD,CAAA,gBAAAC,CAAA,OAAAa,cAAA,CAAAC,IAAA,CAAAf,CAAA,EAAAC,CAAA,OAAAM,CAAA,IAAAD,CAAA,GAAAU,MAAA,CAAAC,cAAA,KAAAD,MAAA,CAAAE,wBAAA,CAAAlB,CAAA,EAAAC,CAAA,OAAAM,CAAA,CAAAK,GAAA,IAAAL,CAAA,CAAAM,GAAA,IAAAP,CAAA,CAAAE,CAAA,EAAAP,CAAA,EAAAM,CAAA,IAAAC,CAAA,CAAAP,CAAA,IAAAD,CAAA,CAAAC,CAAA,WAAAO,CAAA,KAAAR,CAAA,EAAAC,CAAA;AAGtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMkB,MAAM,GAAGC,qBAAQ,CAACC,EAAE,KAAK,KAAK;;AAEpC;AACA,MAAMC,iBAAiB,GAAG,GAAG;AAC7B,MAAMC,UAAU,GAAG,CAAC;AACpB,MAAMC,SAAS,GAAG,CAAC;AACnB,MAAMC,gBAAgB,GAAG,EAAE;AAS3B;AACA;AACA;AACA;AACA;AACA;AACA;AACO,SAASC,oBAAoBA,CAACC,KAAY,EAAiB;EAChE,MAAM;IAAEC;EAAO,CAAC,GAAG,IAAAC,0BAAkB,EAACF,KAAK,CAAC;EAC5C,OAAO;IACLG,SAAS,EAAEH,KAAK,CAACI,MAAM,CAACC,IAAI;IAC5BC,GAAG,EAAEN,KAAK,CAACI,MAAM,CAACG,mBAAmB;IACrCC,QAAQ,EAAER,KAAK,CAACI,MAAM,CAACK,aAAa;IACpCC,IAAI,EAAET,MAAM,CAAC,GAAG;EAClB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMU,QAAQ,GAAG,wBAAwB;AACzC,MAAMC,KAAK,GAAG,6BAA6B;AAC3C,MAAMC,GAAG,GAAG,2BAA2B;AAEvC,MAAMC,kBAAkB,GAAG;AAC3B,EAAEF,KAAK;AACP;AACA;AACA;AACA;AACA;AACA;AACA,EAAEA,KAAK;AACP;AACA;AACA,EAAEA,KAAK;AACP;AACA;AACA;AACA,EAAEA,KAAK;AACP;AACA;AACA,EAAEA,KAAK;AACP;AACA;AACA,EAAEC,GAAG;AACL;AACA;AACA,sBAAsBlB,iBAAiB,iCAAiCA,iBAAiB;AACzF;AACA,EAAEkB,GAAG;AACL;AACA;AACA;AACA;AACA,EAAEA,GAAG;AACL;AACA;AACA;AACA,CAAC;;AAED;AACA;AACA;;AAEA,MAAME,qBAAqB,GAAG,SAASC,YAAYA,CAAC;EAClDC,QAAQ;EACRC,KAAK;EACLC,kBAAkB;EAClBC,KAAK;EACLC;AACiB,CAAC,EAAE;EACpB,MAAMC,GAAG,GAAG,IAAAC,iBAAU,EAACC,wBAAe,CAAC;EACvC,MAAMC,KAAK,GAAG,IAAAF,iBAAU,EAACG,iCAAwB,CAAC;EAClD,MAAMC,YAAY,GAAGL,GAAG,EAAEK,YAAY;EAEtC,MAAMC,QAAQ,GAAG,IAAAC,kBAAW,EACzBC,KAAwB,IAAK;IAC5B,MAAM;MAAEC,CAAC;MAAEb,KAAK,EAAEc;IAAE,CAAC,GAAGF,KAAK,CAACG,WAAW,CAACC,MAAM;IAChDP,YAAY,GAAGF,KAAK,EAAEM,CAAC,EAAEC,CAAC,CAAC;EAC7B,CAAC,EACD,CAACL,YAAY,EAAEF,KAAK,CACtB,CAAC;EAED,MAAMU,UAAU,GAAGjB,KAAK,KAAKI,GAAG,IAAIA,GAAG,CAACc,UAAU,GAAG,CAAC,GAAGd,GAAG,CAACc,UAAU,GAAGC,SAAS,CAAC;EAEpF,oBACE,IAAAjE,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAA+E,IAAI;IAAA,GACC,IAAAC,mBAAU,EAAC;MAAEC,iBAAiB,EAAE;IAAG,CAAC,CAAC;IACzCC,IAAI,EAAC,OAAO;IAAA,IACPlD,MAAM,GAAG;MAAE,sBAAsB,EAAE;IAAQ,CAAC,GAAG,CAAC,CAAC;IACtD2B,kBAAkB,EAAEA,kBAAkB,KAAKG,GAAG,GAAG,GAAGG,KAAK,GAAG,CAAC,OAAOH,GAAG,CAACqB,KAAK,EAAE,GAAGN,SAAS,CAAE;IAC7FT,QAAQ,EAAEA,QAAS;IACnBR,KAAK,EAAE,CAAC;MAAEwB,UAAU,EAAE;IAAE,CAAC,EAAET,UAAU,IAAI,IAAI,GAAG;MAAEjB,KAAK,EAAEiB;IAAW,CAAC,GAAG,IAAI,EAAEf,KAAK,CAAE;IACrFC,MAAM,EAAEA,MAAO;IAAAJ,QAAA,EAEdA;EAAQ,CACL,CAAC;AAEX,CAAC;AAEM,MAAMD,YAAY,GAAA6B,OAAA,CAAA7B,YAAA,gBAAG,IAAA8B,WAAI,EAAC/B,qBAAqB,CAAC;AACvDC,YAAY,CAAC+B,WAAW,GAAG,cAAc;;AAEzC;AACA;AACA;;AAEA,SAASC,WAAWA,CAAC;EACnBC,MAAM;EACNC,KAAK;EACLC,KAAK;EACLC,aAAa;EACbC;AAOF,CAAC,EAAE;EACD,MAAM;IAAEC,KAAK,EAAEC,OAAO;IAAEC,IAAI;IAAEC;EAAM,CAAC,GAAG,IAAAC,wCAAmB,EAAC,CAAC;EAC7D;EACA,MAAMxC,KAAK,GAAG,IAAAyC,aAAM,EAAC,IAAIC,qBAAQ,CAACC,KAAK,CAACZ,MAAM,GAAGnD,gBAAgB,GAAGD,SAAS,CAAC,CAAC,CAACiE,OAAO;EAEvF,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAIvE,MAAM,EAAE;IACZ,MAAMwE,EAAE,GAAGf,MAAM,GAAGnD,gBAAgB,GAAGD,SAAS;IAChD,IAAIuD,aAAa,EAAE;MACjBlC,KAAK,CAAC+C,QAAQ,CAACD,EAAE,CAAC;MAClB;IACF;IACAJ,qBAAQ,CAACM,MAAM,CAAChD,KAAK,EAAE;MACrBiD,OAAO,EAAEH,EAAE;MACXI,QAAQ,EAAEzE,iBAAiB;MAC3B;MACA0E,eAAe,EAAE;IACnB,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC;EACZ,CAAC,EAAE,CAACrB,MAAM,EAAEG,aAAa,EAAElC,KAAK,CAAC,CAAC;EAElC,MAAMqD,UAAU,GAAGtB,MAAM,GAAGC,KAAK,CAAC/C,SAAS,GAAGoD,OAAO,GAAGL,KAAK,CAAC1C,QAAQ,GAAG0C,KAAK,CAAC5C,GAAG;EAElF,oBACE,IAAAlC,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAAgH,SAAS;IAAA,GACJ,IAAAhC,mBAAU,EAAC;MAAEiC,gBAAgB,EAAE;IAAG,CAAC,CAAC;IACxCC,iBAAiB,EAAC,QAAQ;IAC1BvD,kBAAkB,EAAEgC,KAAM;IAC1B,gBAAcF,MAAO;IACrBI,OAAO,EAAEA,OAAQ;IACjBsB,SAAS,EAAEnB,IAAK;IAChBoB,UAAU,EAAEnB,KAAM;IAClBoB,OAAO,EAAE;MAAEC,GAAG,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAE;IAClD7D,KAAK,EACH5B,MAAM,GACF;MACE0F,MAAM,EAAEtF,UAAU;MAClBsB,KAAK,EAAE+B,MAAM,GAAGnD,gBAAgB,GAAGD,SAAS;MAC5CsF,YAAY,EAAEA,oBAAY,CAACC,IAAI;MAC/BC,eAAe,EAAEd;IACnB,CAAC,GACDlC,SACL;IAAApB,QAAA,EAEAzB,MAAM,GAAG,IAAI,gBACZ,IAAApB,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAAoG,QAAQ,CAACrB,IAAI;MACZnB,KAAK,EAAE;QACL8D,MAAM,EAAEtF,UAAU;QAClBsB,KAAK;QACLiE,YAAY,EAAEA,oBAAY,CAACC,IAAI;QAC/BC,eAAe,EAAEd;MACnB;IAAE,CACH;EACF,CACQ,CAAC;AAEhB;;AAEA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA,SAASe,OAAOA,CAACC,OAA0B,EAAU;EACnD,MAAMC,KAAa,GAAG,EAAE;EACxBD,OAAO,CAACE,OAAO,CAAC,CAACC,MAAM,EAAEC,KAAK,KAAK;IACjC,MAAMC,IAAI,GAAGJ,KAAK,CAACA,KAAK,CAACK,MAAM,GAAG,CAAC,CAAC;IACpC,IAAID,IAAI,IAAIE,IAAI,CAACC,GAAG,CAACL,MAAM,GAAGE,IAAI,CAACF,MAAM,CAAC,IAAI,CAAC,EAAE;IACjDF,KAAK,CAACQ,IAAI,CAAC;MAAEN,MAAM;MAAEC;IAAM,CAAC,CAAC;EAC/B,CAAC,CAAC;EACF,MAAMM,GAAG,GAAGT,KAAK,CAACA,KAAK,CAACK,MAAM,GAAG,CAAC,CAAC;EACnC,IAAII,GAAG,EAAEA,GAAG,CAACN,KAAK,GAAGJ,OAAO,CAACM,MAAM,GAAG,CAAC;EACvC,OAAOL,KAAK;AACd;AAEA,MAAMU,iBAAiB,GAAG,SAASC,QAAQA,CAAC;EAC1ClF,QAAQ;EACRE,kBAAkB;EAClBiF,MAAM;EACNC,UAAU,GAAG,IAAI;EACjBC,QAAQ,GAAG,IAAI;EACfC,KAAK,GAAG,OAAO;EACfC,GAAG,GAAG,EAAE;EACRC,KAAK,GAAG,CAAC;EACTC,aAAa;EACbC,aAAa,GAAG,gBAAgB;EAChCC,SAAS,GAAG,YAAY;EACxBC,QAAQ;EACRzF,KAAK;EACLC;AACa,CAAC,EAAE;EAChB,MAAMrB,KAAK,GAAG,IAAA8G,kBAAQ,EAAC,CAAC;EACxB,IAAAC,uCAAoB,EAACpG,QAAQ,EAAEG,kBAAkB,CAAC;EAClD,MAAMsC,aAAa,GAAG,IAAA4D,uCAAgB,EAAC,CAAC;EACxC,MAAM9D,KAAK,GAAG,IAAA+D,cAAO,EAAC,MAAMlH,oBAAoB,CAACC,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEjE,MAAMkH,MAAM,GAAGC,eAAQ,CAACC,OAAO,CAACnG,QAAQ,CAAC,CAACoG,MAAM,CAACC,qBAAc,CAAC;EAChE,MAAM3E,KAAK,GAAGuE,MAAM,CAACrB,MAAM;EAE3B,MAAM0B,SAAS,GAAG,IAAA5D,aAAM,EAAa,IAAI,CAAC;EAC1C,MAAM6D,OAAO,GAAG,IAAA7D,aAAM,EAAgB,EAAE,CAAC;EACzC,MAAM8D,MAAM,GAAG,IAAA9D,aAAM,EAAC;IAAE5B,CAAC,EAAE,CAAC;IAAE2F,YAAY,EAAE;EAAE,CAAC,CAAC;EAChD,MAAM,CAACtF,UAAU,EAAEuF,aAAa,CAAC,GAAG,IAAAC,eAAQ,EAAC,CAAC,CAAC;EAC/C,MAAM,CAACpC,KAAK,EAAEqC,QAAQ,CAAC,GAAG,IAAAD,eAAQ,EAAS,EAAE,CAAC;EAC9C,MAAM,CAAC3E,MAAM,EAAE6E,SAAS,CAAC,GAAG,IAAAF,eAAQ,EAAC,CAAC,CAAC;EACvC,MAAM,CAACG,OAAO,EAAEC,UAAU,CAAC,GAAG,IAAAJ,eAAQ,EAAC,IAAI,CAAC;EAC5C,MAAM,CAACK,KAAK,EAAEC,QAAQ,CAAC,GAAG,IAAAN,eAAQ,EAAC,KAAK,CAAC;EAEzC,MAAMO,gBAAgB,GAAG,IAAAxE,aAAM,EAAC+C,aAAa,CAAC;EAC9CyB,gBAAgB,CAACrE,OAAO,GAAG4C,aAAa;EACxC,MAAM0B,cAAc,GAAG,IAAAzE,aAAM,EAAC,CAAC,CAAC;EAEhC,MAAM0E,SAAS,GAAG,IAAAxG,kBAAW,EAC1ByG,IAAiB,IAAK;IACrB,MAAMC,GAAG,GAAGhC,KAAK,KAAK,QAAQ,GAAG+B,IAAI,CAACvG,CAAC,GAAG,CAACK,UAAU,GAAGkG,IAAI,CAACpH,KAAK,IAAI,CAAC,GAAGoH,IAAI,CAACvG,CAAC,GAAG0E,KAAK;IACxF,MAAM+B,GAAG,GAAG1C,IAAI,CAAC0C,GAAG,CAAC,CAAC,EAAEf,MAAM,CAAC3D,OAAO,CAAC4D,YAAY,GAAGtF,UAAU,CAAC;IACjE,OAAO0D,IAAI,CAAC2C,GAAG,CAAC3C,IAAI,CAAC0C,GAAG,CAAC,CAAC,EAAED,GAAG,CAAC,EAAEC,GAAG,CAAC;EACxC,CAAC,EACD,CAACjC,KAAK,EAAEE,KAAK,EAAErE,UAAU,CAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,MAAMsG,YAAY,GAAG,IAAA7G,kBAAW,EAAC,MAAqB;IACpD,MAAM8G,GAAG,GAAGnB,OAAO,CAAC1D,OAAO,CAAC8E,KAAK,CAAC,CAAC,EAAEjG,KAAK,CAAC;IAC3C,IAAIgG,GAAG,CAAC9C,MAAM,KAAKlD,KAAK,IAAIgG,GAAG,CAACE,IAAI,CAAElK,CAAC,IAAK,CAACA,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5D,OAAO2G,OAAO,CAACqD,GAAG,CAACG,GAAG,CAACT,SAAS,CAAC,CAAC;EACpC,CAAC,EAAE,CAAC1F,KAAK,EAAE0F,SAAS,CAAC,CAAC;EAEtB,MAAMU,OAAO,GAAG,IAAAlH,kBAAW,EAAC,MAAM;IAChC,MAAM;MAAEE,CAAC;MAAE2F;IAAa,CAAC,GAAGD,MAAM,CAAC3D,OAAO;IAC1C,MAAMkF,QAAQ,GAAG5G,UAAU;IAC3B;IACA;IACA,MAAMkC,KAAK,GAAGvC,CAAC,IAAI,CAAC;IACpB,MAAMkE,GAAG,GAAG+C,QAAQ,GAAG,CAAC,IAAItB,YAAY,GAAG,CAAC,IAAI3F,CAAC,IAAI2F,YAAY,GAAGsB,QAAQ,GAAG,CAAC;IAChFhB,UAAU,CAAC1D,KAAK,CAAC;IACjB4D,QAAQ,CAACjC,GAAG,CAAC;IAEb,MAAM0C,GAAG,GAAGD,YAAY,CAAC,CAAC;IAC1B,IAAI,CAACC,GAAG,IAAIA,GAAG,CAAC9C,MAAM,KAAK,CAAC,EAAE;;IAE9B;IACA;IACA;IACA;IACA,IAAIoD,IAAI,GAAG,CAAC;IACZ,IAAIhD,GAAG,EAAE;MACPgD,IAAI,GAAGN,GAAG,CAAC9C,MAAM,GAAG,CAAC;IACvB,CAAC,MAAM,IAAI,CAACvB,KAAK,EAAE;MACjB,IAAI4E,QAAQ,GAAGC,MAAM,CAACC,iBAAiB;MACvCT,GAAG,CAAClD,OAAO,CAAC,CAAC4D,IAAI,EAAE5H,KAAK,KAAK;QAC3B,MAAM6H,QAAQ,GAAGxD,IAAI,CAACC,GAAG,CAACsD,IAAI,CAAC3D,MAAM,GAAG3D,CAAC,CAAC;QAC1C,IAAIuH,QAAQ,GAAGJ,QAAQ,EAAE;UACvBA,QAAQ,GAAGI,QAAQ;UACnBL,IAAI,GAAGxH,KAAK;QACd;MACF,CAAC,CAAC;IACJ;IACAqG,SAAS,CAACmB,IAAI,CAAC;IACf,MAAMtD,KAAK,GAAGgD,GAAG,CAACM,IAAI,CAAC,EAAEtD,KAAK,IAAI,CAAC;IACnC,IAAIA,KAAK,KAAKyC,cAAc,CAACtE,OAAO,EAAE;MACpCsE,cAAc,CAACtE,OAAO,GAAG6B,KAAK;MAC9BwC,gBAAgB,CAACrE,OAAO,GAAG6B,KAAK,CAAC;IACnC;EACF,CAAC,EAAE,CAAC+C,YAAY,EAAEtG,UAAU,CAAC,CAAC;EAE9B,MAAMmH,cAAc,GAAG,IAAA1H,kBAAW,EAAC,MAAM;IACvC,MAAMoH,IAAI,GAAGP,YAAY,CAAC,CAAC;IAC3B,IAAIO,IAAI,EAAEpB,QAAQ,CAACoB,IAAI,CAAC;EAC1B,CAAC,EAAE,CAACP,YAAY,CAAC,CAAC;EAElB,MAAM/G,YAAY,GAAG,IAAAE,kBAAW,EAC9B,CAACJ,KAAa,EAAEM,CAAS,EAAEb,KAAa,KAAK;IAC3CsG,OAAO,CAAC1D,OAAO,CAACrC,KAAK,CAAC,GAAG;MAAEM,CAAC;MAAEb;IAAM,CAAC;IACrCqI,cAAc,CAAC,CAAC;IAChBR,OAAO,CAAC,CAAC;EACX,CAAC,EACD,CAACA,OAAO,EAAEQ,cAAc,CAC1B,CAAC;EAED,IAAAxF,gBAAS,EAAC,MAAM;IACdwF,cAAc,CAAC,CAAC;IAChBR,OAAO,CAAC,CAAC;EACX,CAAC,EAAE,CAACQ,cAAc,EAAER,OAAO,CAAC,CAAC;EAE7B,MAAMS,YAAY,GAAIH,IAAsB,IAAK;IAC/C,IAAI,CAACA,IAAI,EAAE;IACX9B,SAAS,CAACzD,OAAO,EAAE2F,QAAQ,CAAC;MAAE1H,CAAC,EAAEsH,IAAI,CAAC3D,MAAM;MAAEgE,QAAQ,EAAE,CAACtG;IAAc,CAAC,CAAC;EAC3E,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,MAAMuG,IAAI,GAAIC,SAAiB,IAAK;IAClC,MAAMjB,GAAG,GAAGD,YAAY,CAAC,CAAC;IAC1B,IAAI,CAACC,GAAG,EAAE;IACV,MAAM5G,CAAC,GAAG0F,MAAM,CAAC3D,OAAO,CAAC/B,CAAC;IAC1ByH,YAAY,CACVI,SAAS,KAAK,CAAC,GACXjB,GAAG,CAACkB,IAAI,CAAER,IAAI,IAAKA,IAAI,CAAC3D,MAAM,GAAG3D,CAAC,GAAG,CAAC,CAAC,GACvC,CAAC,GAAG4G,GAAG,CAAC,CAACmB,OAAO,CAAC,CAAC,CAACD,IAAI,CAAER,IAAI,IAAKA,IAAI,CAAC3D,MAAM,GAAG3D,CAAC,GAAG,CAAC,CAC3D,CAAC;EACH,CAAC;EAED,MAAMgI,QAAQ,GAAIjI,KAA8C,IAAK;IACnE,MAAM;MAAEkI,aAAa;MAAEC;IAAY,CAAC,GAAGnI,KAAK,CAACG,WAAW;IACxDwF,MAAM,CAAC3D,OAAO,GAAG;MAAE/B,CAAC,EAAEiI,aAAa,CAACjI,CAAC;MAAE2F,YAAY,EAAEuC,WAAW,CAAC/I;IAAM,CAAC;IACxE6H,OAAO,CAAC,CAAC;EACX,CAAC;EAED,MAAMmB,mBAAmB,GAAIhJ,KAAa,IAAK;IAC7CuG,MAAM,CAAC3D,OAAO,GAAG;MAAE,GAAG2D,MAAM,CAAC3D,OAAO;MAAE4D,YAAY,EAAExG;IAAM,CAAC;IAC3DqI,cAAc,CAAC,CAAC;IAChBR,OAAO,CAAC,CAAC;EACX,CAAC;EAED,MAAMoB,QAAQ,GAAG3E,KAAK,CAACK,MAAM,GAAG,CAAC,GAAGL,KAAK,CAACK,MAAM,GAAGlD,KAAK;EAExD,MAAMyH,YAAY,GAAG,IAAAnD,cAAO,EAC1B,OAAO;IAAE7E,UAAU;IAAEO,KAAK;IAAEhB;EAAa,CAAC,CAAC,EAC3C,CAACS,UAAU,EAAEO,KAAK,EAAEhB,YAAY,CAClC,CAAC;EAED,MAAM0I,UAAuB,GAAG;IAC9BnJ,KAAK,EAAE,MAAM;IACb;IACA,uBAAuB,EAAEgC,KAAK,CAACxC,IAAI;IACnC;IACA,wBAAwB,EAAE,GAAG+F,KAAK;EACpC,CAAC;EAED,oBACE,IAAArI,WAAA,CAAAkM,IAAA,EAAC9M,YAAA,CAAA+E,IAAI;IACHG,IAAI,EAAC,OAAO;IAAA,IACPlD,MAAM,GAAG;MAAE,sBAAsB,EAAE;IAAW,CAAC,GAAG,CAAC,CAAC;IACzD2B,kBAAkB,EAAEA,kBAAmB;IACvCC,KAAK,EAAE,CAAC;MAAEF,KAAK,EAAE,MAAM;MAAEqJ,aAAa,EAAE,QAAQ;MAAE/D,GAAG,EAAE;IAAG,CAAC,EAAEpF,KAAK,CAAE;IACpEC,MAAM,EAAEA,MAAO;IAAAJ,QAAA,GAEdmF,MAAM,IAAI,IAAI,IAAKC,UAAU,IAAI1D,KAAK,GAAG,CAAE,gBAC1C,IAAAvE,WAAA,CAAAkM,IAAA,EAAC9M,YAAA,CAAA+E,IAAI;MAACnB,KAAK,EAAE;QAAEmJ,aAAa,EAAE,KAAK;QAAEC,UAAU,EAAE,QAAQ;QAAEhE,GAAG,EAAE,CAAC;QAAEiE,iBAAiB,EAAEhE;MAAM,CAAE;MAAAxF,QAAA,gBAC5F,IAAA7C,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAA+E,IAAI;QAACnB,KAAK,EAAE;UAAEsJ,IAAI,EAAE,CAAC;UAAEC,QAAQ,EAAE;QAAE,CAAE;QAAA1J,QAAA,EAAEmF;MAAM,CAAO,CAAC,EACrDC,UAAU,IAAI1D,KAAK,GAAG,CAAC,gBACtB,IAAAvE,WAAA,CAAAkM,IAAA,EAAAlM,WAAA,CAAAwM,QAAA;QAAA3J,QAAA,gBACE,IAAA7C,WAAA,CAAAkE,GAAA,EAAC5E,OAAA,CAAAmN,MAAM;UAACC,IAAI,EAAC,IAAI;UAACC,IAAI,EAAEC,kCAAiB;UAAC7J,kBAAkB,EAAEwF,aAAc;UAACsE,QAAQ,EAAElD,OAAQ;UAAC1E,OAAO,EAAEA,CAAA,KAAMsG,IAAI,CAAC,CAAC,CAAC,CAAE;UAACuB,UAAU,EAAC,QAAQ;UAACC,IAAI,EAAC;QAAS,CAAE,CAAC,eAC9J,IAAA/M,WAAA,CAAAkE,GAAA,EAAC5E,OAAA,CAAAmN,MAAM;UAACC,IAAI,EAAC,IAAI;UAACC,IAAI,EAAEK,oCAAkB;UAACjK,kBAAkB,EAAEyF,SAAU;UAACqE,QAAQ,EAAEhD,KAAM;UAAC5E,OAAO,EAAEA,CAAA,KAAMsG,IAAI,CAAC,CAAC,CAAE;UAACuB,UAAU,EAAC,QAAQ;UAACC,IAAI,EAAC;QAAS,CAAE,CAAC;MAAA,CACxJ,CAAC,GACD,IAAI;IAAA,CACJ,CAAC,GACL,IAAI,eAER,IAAA/M,WAAA,CAAAkE,GAAA,EAACnE,QAAA,CAAAqD,eAAe,CAAC6J,QAAQ;MAACC,KAAK,EAAElB,YAAa;MAAAnJ,QAAA,eAC5C,IAAA7C,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAA+N,UAAU;QACTC,GAAG,EAAEjE,SAAU;QAAA,GACX,IAAA/E,mBAAU,EAAC;UAAEiJ,kBAAkB,EAAElF;QAAM,CAAC,CAAC;QAAA,IAGxC/G,MAAM,GAAG;UAAEkM,QAAQ,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC;QAClCC,UAAU;QACVC,8BAA8B,EAAE,KAAM;QACtCC,mBAAmB,EAAE,EAAG;QACxB9B,QAAQ,EAAEA,QAAS;QACnBG,mBAAmB,EAAEA,mBAAoB;QACzCtI,QAAQ,EAAGE,KAAK,IAAK6F,aAAa,CAAC7F,KAAK,CAACG,WAAW,CAACC,MAAM,CAAChB,KAAK,CAAE;QACnE4K,aAAa,EAAEtM,MAAM,GAAG6C,SAAS,GAAGmD,KAAK,CAACsD,GAAG,CAAEO,IAAI,IAAKA,IAAI,CAAC3D,MAAM,CAAE;QACrEqG,gBAAgB,EAAEvM,MAAM,GAAG6C,SAAS,GAAG,MAAO;QAC9C2J,uBAAuB;QACvB5K,KAAK,EAAEiJ,UAAW;QAClB4B,qBAAqB,EAAE;UAAEzF,GAAG;UAAEiE,iBAAiB,EAAEhE;QAAM,CAAE;QAAAxF,QAAA,EAExDiG,MAAM,CAAC4B,GAAG,CAAC,CAACoD,KAAK,EAAEzK,KAAK,kBACvB,IAAArD,WAAA,CAAAkE,GAAA,EAACnE,QAAA,CAAAuD,wBAAwB,CAAC2J,QAAQ;UAA0BC,KAAK,EAAE7J,KAAM;UAAAR,QAAA,EACtEiL;QAAK,GADgCA,KAAK,CAACC,GAAG,IAAI1K,KAElB,CACpC;MAAC,CACQ;IAAC,CACW,CAAC,EAE1B6E,QAAQ,IAAI6D,QAAQ,GAAG,CAAC,gBACvB,IAAA/L,WAAA,CAAAkE,GAAA,EAAC9E,YAAA,CAAA+E,IAAI;MAACnB,KAAK,EAAE;QAAEmJ,aAAa,EAAE,KAAK;QAAEC,UAAU,EAAE,QAAQ;QAAE4B,cAAc,EAAE,QAAQ;QAAE5F,GAAG,EAAE,CAAC;QAAEiE,iBAAiB,EAAEhE;MAAM,CAAE;MAAAxF,QAAA,EACrHoL,KAAK,CAACC,IAAI,CAAC;QAAEzG,MAAM,EAAEsE;MAAS,CAAC,EAAE,CAACoC,CAAC,EAAE9K,KAAK,KAAK;QAC9C;QACA;QACA;QACA,MAAMkE,KAAK,GAAGH,KAAK,CAAC/D,KAAK,CAAC,EAAEkE,KAAK,IAAIlE,KAAK;QAC1C,oBACE,IAAArD,WAAA,CAAAkE,GAAA,EAACU,WAAW;UAEVC,MAAM,EAAExB,KAAK,KAAKwB,MAAO;UACzBC,KAAK,EAAEA,KAAM;UACbC,KAAK,EAAE0D,QAAQ,GAAGA,QAAQ,CAAClB,KAAK,GAAG,CAAC,CAAC,GAAG,eAAeA,KAAK,GAAG,CAAC,EAAG;UACnEvC,aAAa,EAAEA,aAAc;UAC7BC,OAAO,EAAEA,CAAA,KAAMmG,YAAY,CAAChE,KAAK,CAAC/D,KAAK,CAAC;QAAE,GALrCA,KAMN,CAAC;MAEN,CAAC;IAAC,CACE,CAAC,GACL,IAAI;EAAA,CACJ,CAAC;AAEX,CAAC;AAEM,MAAM0E,QAAQ,GAAAtD,OAAA,CAAAsD,QAAA,gBAAG,IAAArD,WAAI,EAACoD,iBAAiB,CAAC;AAC/CC,QAAQ,CAACpD,WAAW,GAAG,UAAU","ignoreList":[]}
@@ -226,6 +226,33 @@ function CarouselDot({
226
226
  // Carousel
227
227
  // ---------------------------------------------------------------------------
228
228
 
229
+ /**
230
+ * A place the track can come to rest, and the slide it stands for. Slides
231
+ * narrower than the track share one: every slide that cannot reach the start
232
+ * edge clamps to the same end offset, so the end is ONE stop however many slides
233
+ * it holds.
234
+ */
235
+
236
+ /**
237
+ * Collapse per-slide resting offsets (ascending) into distinct stops, 1px of
238
+ * slack for fractional hi-DPI offsets. A shared stop stands for its FIRST slide,
239
+ * except the end, which stands for the LAST — the far end is where the last
240
+ * slide is, and naming anything else would leave it unreachable.
241
+ */
242
+ function toStops(resting) {
243
+ const stops = [];
244
+ resting.forEach((offset, slide) => {
245
+ const last = stops[stops.length - 1];
246
+ if (last && Math.abs(offset - last.offset) <= 1) return;
247
+ stops.push({
248
+ offset,
249
+ slide
250
+ });
251
+ });
252
+ const end = stops[stops.length - 1];
253
+ if (end) end.slide = resting.length - 1;
254
+ return stops;
255
+ }
229
256
  const CarouselComponent = function Carousel({
230
257
  children,
231
258
  accessibilityLabel,
@@ -255,13 +282,29 @@ const CarouselComponent = function Carousel({
255
282
  contentWidth: 0
256
283
  });
257
284
  const [trackWidth, setTrackWidth] = useState(0);
258
- const [snapOffsets, setSnapOffsets] = useState([]);
285
+ const [stops, setStops] = useState([]);
259
286
  const [active, setActive] = useState(0);
260
287
  const [atStart, setAtStart] = useState(true);
261
288
  const [atEnd, setAtEnd] = useState(false);
262
289
  const onIndexChangeRef = useRef(onIndexChange);
263
290
  onIndexChangeRef.current = onIndexChange;
264
- const activeRef = useRef(active);
291
+ const activeSlideRef = useRef(0);
292
+ const targetFor = useCallback(item => {
293
+ const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
294
+ const max = Math.max(0, scroll.current.contentWidth - trackWidth);
295
+ return Math.min(Math.max(0, raw), max);
296
+ }, [align, inset, trackWidth]);
297
+
298
+ /**
299
+ * The distinct places the track can rest — or `null` until every slide has
300
+ * been measured. Arrows, dots, snapping and the active slide all read this
301
+ * ONE list, so they cannot disagree about where the track can go.
302
+ */
303
+ const computeStops = useCallback(() => {
304
+ const all = offsets.current.slice(0, count);
305
+ if (all.length !== count || all.some(o => !o)) return null;
306
+ return toStops(all.map(targetFor));
307
+ }, [count, targetFor]);
265
308
  const measure = useCallback(() => {
266
309
  const {
267
310
  x,
@@ -274,19 +317,20 @@ const CarouselComponent = function Carousel({
274
317
  const end = viewport > 0 && contentWidth > 0 && x >= contentWidth - viewport - 1;
275
318
  setAtStart(start);
276
319
  setAtEnd(end);
277
- const all = offsets.current.slice(0, count);
278
- if (all.length === 0) return;
279
- let next;
320
+ const all = computeStops();
321
+ if (!all || all.length === 0) return;
322
+
323
+ // The ends are pinned, not measured: within 1px of either end the first/last
324
+ // stop is active. Between them, the stop nearest the scroll offset — compared
325
+ // against where each stop RESTS (inset and centring included), not where its
326
+ // slide sits in the content.
327
+ let next = 0;
280
328
  if (end) {
281
- next = count - 1;
282
- } else if (start) {
283
- next = 0;
284
- } else {
285
- next = 0;
329
+ next = all.length - 1;
330
+ } else if (!start) {
286
331
  let shortest = Number.POSITIVE_INFINITY;
287
- all.forEach((item, index) => {
288
- if (!item) return;
289
- const distance = Math.abs(item.x - x);
332
+ all.forEach((stop, index) => {
333
+ const distance = Math.abs(stop.offset - x);
290
334
  if (distance < shortest) {
291
335
  shortest = distance;
292
336
  next = index;
@@ -294,60 +338,46 @@ const CarouselComponent = function Carousel({
294
338
  });
295
339
  }
296
340
  setActive(next);
297
- if (next !== activeRef.current) {
298
- activeRef.current = next;
299
- onIndexChangeRef.current?.(next);
341
+ const slide = all[next]?.slide ?? 0;
342
+ if (slide !== activeSlideRef.current) {
343
+ activeSlideRef.current = slide;
344
+ onIndexChangeRef.current?.(slide);
300
345
  }
301
- }, [count, trackWidth]);
302
- const targetFor = useCallback(item => {
303
- const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
304
- const max = Math.max(0, scroll.current.contentWidth - trackWidth);
305
- return Math.min(Math.max(0, raw), max);
306
- }, [align, inset, trackWidth]);
307
- const recomputeSnaps = useCallback(() => {
308
- if (IS_WEB) return; // CSS scroll-snap owns snapping on web.
309
- const all = offsets.current.slice(0, count);
310
- if (all.length !== count || all.some(o => !o)) return;
311
- setSnapOffsets(all.map(targetFor));
312
- }, [count, targetFor]);
346
+ }, [computeStops, trackWidth]);
347
+ const recomputeStops = useCallback(() => {
348
+ const next = computeStops();
349
+ if (next) setStops(next);
350
+ }, [computeStops]);
313
351
  const reportOffset = useCallback((index, x, width) => {
314
352
  offsets.current[index] = {
315
353
  x,
316
354
  width
317
355
  };
318
- recomputeSnaps();
356
+ recomputeStops();
319
357
  measure();
320
- }, [measure, recomputeSnaps]);
358
+ }, [measure, recomputeStops]);
321
359
  useEffect(() => {
322
- recomputeSnaps();
360
+ recomputeStops();
323
361
  measure();
324
- }, [recomputeSnaps, measure]);
325
- const scrollToIndex = index => {
326
- const target = offsets.current[Math.max(0, Math.min(index, count - 1))];
327
- if (!target) return;
362
+ }, [recomputeStops, measure]);
363
+ const scrollToStop = stop => {
364
+ if (!stop) return;
328
365
  scrollRef.current?.scrollTo({
329
- x: targetFor(target),
366
+ x: stop.offset,
330
367
  animated: !reducedMotion
331
368
  });
332
369
  };
333
370
 
334
371
  /**
335
- * The arrows step from where the track IS, not from the active index. Slides
336
- * narrower than the track share the end offset — every one that cannot reach
337
- * the start edge clamps to it — so near the end "the slide before the active
338
- * one" is often where the track already rests, and an index step would scroll
339
- * nowhere and stay stuck there. Step to the nearest DISTINCT resting place
340
- * instead (1px of slack, as in `measure`).
372
+ * The arrows step from where the track IS, to the nearest stop before or after
373
+ * it (1px of slack, as in `measure`) — never by slide index, which near the
374
+ * end names a slide whose stop the track already rests at.
341
375
  */
342
376
  const step = direction => {
377
+ const all = computeStops();
378
+ if (!all) return;
343
379
  const x = scroll.current.x;
344
- const targets = offsets.current.slice(0, count).filter(item => Boolean(item)).map(targetFor);
345
- const next = direction === 1 ? targets.filter(t => t > x + 1).reduce((a, b) => Math.min(a, b), Number.POSITIVE_INFINITY) : targets.filter(t => t < x - 1).reduce((a, b) => Math.max(a, b), Number.NEGATIVE_INFINITY);
346
- if (!Number.isFinite(next)) return;
347
- scrollRef.current?.scrollTo({
348
- x: next,
349
- animated: !reducedMotion
350
- });
380
+ scrollToStop(direction === 1 ? all.find(stop => stop.offset > x + 1) : [...all].reverse().find(stop => stop.offset < x - 1));
351
381
  };
352
382
  const onScroll = event => {
353
383
  const {
@@ -365,9 +395,10 @@ const CarouselComponent = function Carousel({
365
395
  ...scroll.current,
366
396
  contentWidth: width
367
397
  };
368
- recomputeSnaps();
398
+ recomputeStops();
369
399
  measure();
370
400
  };
401
+ const dotCount = stops.length > 0 ? stops.length : count;
371
402
  const contextValue = useMemo(() => ({
372
403
  trackWidth,
373
404
  count,
@@ -440,7 +471,7 @@ const CarouselComponent = function Carousel({
440
471
  onScroll: onScroll,
441
472
  onContentSizeChange: onContentSizeChange,
442
473
  onLayout: event => setTrackWidth(event.nativeEvent.layout.width),
443
- snapToOffsets: IS_WEB ? undefined : snapOffsets,
474
+ snapToOffsets: IS_WEB ? undefined : stops.map(stop => stop.offset),
444
475
  decelerationRate: IS_WEB ? undefined : 'fast',
445
476
  disableIntervalMomentum: true,
446
477
  style: trackStyle,
@@ -453,7 +484,7 @@ const CarouselComponent = function Carousel({
453
484
  children: child
454
485
  }, child.key ?? index))
455
486
  })
456
- }), showDots && count > 1 ? /*#__PURE__*/_jsx(View, {
487
+ }), showDots && dotCount > 1 ? /*#__PURE__*/_jsx(View, {
457
488
  style: {
458
489
  flexDirection: 'row',
459
490
  alignItems: 'center',
@@ -462,14 +493,20 @@ const CarouselComponent = function Carousel({
462
493
  paddingHorizontal: inset
463
494
  },
464
495
  children: Array.from({
465
- length: count
466
- }, (_, index) => /*#__PURE__*/_jsx(CarouselDot, {
467
- active: index === active,
468
- paint: paint,
469
- label: dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`,
470
- reducedMotion: reducedMotion,
471
- onPress: () => scrollToIndex(index)
472
- }, index))
496
+ length: dotCount
497
+ }, (_, index) => {
498
+ // One dot per STOP: slides that share a resting place share a dot,
499
+ // so no dot scrolls nowhere. Until the slides are measured there is
500
+ // one per slide, which is what full-width slides settle on anyway.
501
+ const slide = stops[index]?.slide ?? index;
502
+ return /*#__PURE__*/_jsx(CarouselDot, {
503
+ active: index === active,
504
+ paint: paint,
505
+ label: dotLabel ? dotLabel(slide + 1) : `Go to slide ${slide + 1}`,
506
+ reducedMotion: reducedMotion,
507
+ onPress: () => scrollToStop(stops[index])
508
+ }, index);
509
+ })
473
510
  }) : null]
474
511
  });
475
512
  };
@@ -1 +1 @@
1
- {"version":3,"names":["React","Children","isValidElement","memo","useCallback","useContext","useEffect","useMemo","useRef","useState","Animated","Platform","Pressable","ScrollView","View","useReducedMotion","Button","resolveButtonRamps","RiArrowLeftSLine","RiArrowRightSLine","useInteractionState","useInteractiveWebCss","borderRadius","webDataSet","useTheme","CarouselContext","CarouselItemIndexContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","IS_WEB","OS","DOT_TRANSITION_MS","DOT_HEIGHT","DOT_WIDTH","DOT_ACTIVE_WIDTH","resolveCarouselPaint","theme","accent","dotActive","colors","text","dot","backgroundSecondary","dotHover","textSecondary","ring","STYLE_ID","TRACK","DOT","BLOOM_CAROUSEL_CSS","CarouselItemComponent","CarouselItem","children","width","accessibilityLabel","style","testID","ctx","index","reportOffset","onLayout","event","x","w","nativeEvent","layout","slideWidth","trackWidth","undefined","bloomCarouselItem","role","count","flexShrink","displayName","CarouselDot","active","paint","label","reducedMotion","onPress","state","hovered","onIn","onOut","Value","current","to","setValue","timing","toValue","duration","useNativeDriver","start","background","bloomCarouselDot","accessibilityRole","onHoverIn","onHoverOut","hitSlop","top","bottom","left","right","height","full","backgroundColor","CarouselComponent","Carousel","header","showArrows","showDots","align","gap","inset","onIndexChange","previousLabel","nextLabel","dotLabel","slides","toArray","filter","length","scrollRef","offsets","scroll","contentWidth","setTrackWidth","snapOffsets","setSnapOffsets","setActive","atStart","setAtStart","atEnd","setAtEnd","onIndexChangeRef","activeRef","measure","viewport","end","all","slice","next","shortest","Number","POSITIVE_INFINITY","forEach","item","distance","Math","abs","targetFor","raw","max","min","recomputeSnaps","some","o","map","scrollToIndex","target","scrollTo","animated","step","direction","targets","Boolean","t","reduce","a","b","NEGATIVE_INFINITY","isFinite","onScroll","contentOffset","contentSize","onContentSizeChange","contextValue","trackStyle","flexDirection","alignItems","paddingHorizontal","flex","minWidth","size","icon","disabled","appearance","tone","Provider","value","ref","bloomCarouselTrack","tabIndex","horizontal","showsHorizontalScrollIndicator","scrollEventThrottle","snapToOffsets","decelerationRate","disableIntervalMomentum","contentContainerStyle","child","key","justifyContent","Array","from","_"],"sourceRoot":"../../../src","sources":["carousel/Carousel.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["React","Children","isValidElement","memo","useCallback","useContext","useEffect","useMemo","useRef","useState","Animated","Platform","Pressable","ScrollView","View","useReducedMotion","Button","resolveButtonRamps","RiArrowLeftSLine","RiArrowRightSLine","useInteractionState","useInteractiveWebCss","borderRadius","webDataSet","useTheme","CarouselContext","CarouselItemIndexContext","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","IS_WEB","OS","DOT_TRANSITION_MS","DOT_HEIGHT","DOT_WIDTH","DOT_ACTIVE_WIDTH","resolveCarouselPaint","theme","accent","dotActive","colors","text","dot","backgroundSecondary","dotHover","textSecondary","ring","STYLE_ID","TRACK","DOT","BLOOM_CAROUSEL_CSS","CarouselItemComponent","CarouselItem","children","width","accessibilityLabel","style","testID","ctx","index","reportOffset","onLayout","event","x","w","nativeEvent","layout","slideWidth","trackWidth","undefined","bloomCarouselItem","role","count","flexShrink","displayName","CarouselDot","active","paint","label","reducedMotion","onPress","state","hovered","onIn","onOut","Value","current","to","setValue","timing","toValue","duration","useNativeDriver","start","background","bloomCarouselDot","accessibilityRole","onHoverIn","onHoverOut","hitSlop","top","bottom","left","right","height","full","backgroundColor","toStops","resting","stops","forEach","offset","slide","last","length","Math","abs","push","end","CarouselComponent","Carousel","header","showArrows","showDots","align","gap","inset","onIndexChange","previousLabel","nextLabel","dotLabel","slides","toArray","filter","scrollRef","offsets","scroll","contentWidth","setTrackWidth","setStops","setActive","atStart","setAtStart","atEnd","setAtEnd","onIndexChangeRef","activeSlideRef","targetFor","item","raw","max","min","computeStops","all","slice","some","o","map","measure","viewport","next","shortest","Number","POSITIVE_INFINITY","stop","distance","recomputeStops","scrollToStop","scrollTo","animated","step","direction","find","reverse","onScroll","contentOffset","contentSize","onContentSizeChange","dotCount","contextValue","trackStyle","flexDirection","alignItems","paddingHorizontal","flex","minWidth","size","icon","disabled","appearance","tone","Provider","value","ref","bloomCarouselTrack","tabIndex","horizontal","showsHorizontalScrollIndicator","scrollEventThrottle","snapToOffsets","decelerationRate","disableIntervalMomentum","contentContainerStyle","child","key","justifyContent","Array","from","_"],"sourceRoot":"../../../src","sources":["carousel/Carousel.tsx"],"mappings":"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","ignoreList":[]}
@@ -1 +1 @@
1
- {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/carousel/Carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAUN,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAgChE,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQhE;AA6FD,eAAO,MAAM,YAAY,sFA9BtB,iBAAiB,6CA8BmC,CAAC;AAmTxD,eAAO,MAAM,QAAQ,mLA/MlB,aAAa,6CA+M+B,CAAC"}
1
+ {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/carousel/Carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAUN,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAgChE,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQhE;AA6FD,eAAO,MAAM,YAAY,sFA9BtB,iBAAiB,6CA8BmC,CAAC;AA2VxD,eAAO,MAAM,QAAQ,mLA1NlB,aAAa,6CA0N+B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/carousel/Carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAUN,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAgChE,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQhE;AA6FD,eAAO,MAAM,YAAY,sFA9BtB,iBAAiB,6CA8BmC,CAAC;AAmTxD,eAAO,MAAM,QAAQ,mLA/MlB,aAAa,6CA+M+B,CAAC"}
1
+ {"version":3,"file":"Carousel.d.ts","sourceRoot":"","sources":["../../../../src/carousel/Carousel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAUN,MAAM,OAAO,CAAC;AAsBf,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAG5C,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAgChE,UAAU,aAAa;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,KAAK,GAAG,aAAa,CAQhE;AA6FD,eAAO,MAAM,YAAY,sFA9BtB,iBAAiB,6CA8BmC,CAAC;AA2VxD,eAAO,MAAM,QAAQ,mLA1NlB,aAAa,6CA0N+B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oxy.so/bloom",
3
- "version": "4.29.1",
3
+ "version": "4.29.2",
4
4
  "packageManager": "bun@1.3.14",
5
5
  "description": "Bloom UI — Oxy ecosystem component library for React Native + Expo + Web",
6
6
  "main": "lib/commonjs/index.js",
@@ -265,6 +265,35 @@ interface SlideOffset {
265
265
  width: number;
266
266
  }
267
267
 
268
+ /**
269
+ * A place the track can come to rest, and the slide it stands for. Slides
270
+ * narrower than the track share one: every slide that cannot reach the start
271
+ * edge clamps to the same end offset, so the end is ONE stop however many slides
272
+ * it holds.
273
+ */
274
+ interface Stop {
275
+ offset: number;
276
+ slide: number;
277
+ }
278
+
279
+ /**
280
+ * Collapse per-slide resting offsets (ascending) into distinct stops, 1px of
281
+ * slack for fractional hi-DPI offsets. A shared stop stands for its FIRST slide,
282
+ * except the end, which stands for the LAST — the far end is where the last
283
+ * slide is, and naming anything else would leave it unreachable.
284
+ */
285
+ function toStops(resting: readonly number[]): Stop[] {
286
+ const stops: Stop[] = [];
287
+ resting.forEach((offset, slide) => {
288
+ const last = stops[stops.length - 1];
289
+ if (last && Math.abs(offset - last.offset) <= 1) return;
290
+ stops.push({ offset, slide });
291
+ });
292
+ const end = stops[stops.length - 1];
293
+ if (end) end.slide = resting.length - 1;
294
+ return stops;
295
+ }
296
+
268
297
  const CarouselComponent = function Carousel({
269
298
  children,
270
299
  accessibilityLabel,
@@ -293,14 +322,34 @@ const CarouselComponent = function Carousel({
293
322
  const offsets = useRef<SlideOffset[]>([]);
294
323
  const scroll = useRef({ x: 0, contentWidth: 0 });
295
324
  const [trackWidth, setTrackWidth] = useState(0);
296
- const [snapOffsets, setSnapOffsets] = useState<number[]>([]);
325
+ const [stops, setStops] = useState<Stop[]>([]);
297
326
  const [active, setActive] = useState(0);
298
327
  const [atStart, setAtStart] = useState(true);
299
328
  const [atEnd, setAtEnd] = useState(false);
300
329
 
301
330
  const onIndexChangeRef = useRef(onIndexChange);
302
331
  onIndexChangeRef.current = onIndexChange;
303
- const activeRef = useRef(active);
332
+ const activeSlideRef = useRef(0);
333
+
334
+ const targetFor = useCallback(
335
+ (item: SlideOffset) => {
336
+ const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
337
+ const max = Math.max(0, scroll.current.contentWidth - trackWidth);
338
+ return Math.min(Math.max(0, raw), max);
339
+ },
340
+ [align, inset, trackWidth],
341
+ );
342
+
343
+ /**
344
+ * The distinct places the track can rest — or `null` until every slide has
345
+ * been measured. Arrows, dots, snapping and the active slide all read this
346
+ * ONE list, so they cannot disagree about where the track can go.
347
+ */
348
+ const computeStops = useCallback((): Stop[] | null => {
349
+ const all = offsets.current.slice(0, count);
350
+ if (all.length !== count || all.some((o) => !o)) return null;
351
+ return toStops(all.map(targetFor));
352
+ }, [count, targetFor]);
304
353
 
305
354
  const measure = useCallback(() => {
306
355
  const { x, contentWidth } = scroll.current;
@@ -312,20 +361,20 @@ const CarouselComponent = function Carousel({
312
361
  setAtStart(start);
313
362
  setAtEnd(end);
314
363
 
315
- const all = offsets.current.slice(0, count);
316
- if (all.length === 0) return;
364
+ const all = computeStops();
365
+ if (!all || all.length === 0) return;
317
366
 
318
- let next: number;
367
+ // The ends are pinned, not measured: within 1px of either end the first/last
368
+ // stop is active. Between them, the stop nearest the scroll offset — compared
369
+ // against where each stop RESTS (inset and centring included), not where its
370
+ // slide sits in the content.
371
+ let next = 0;
319
372
  if (end) {
320
- next = count - 1;
321
- } else if (start) {
322
- next = 0;
323
- } else {
324
- next = 0;
373
+ next = all.length - 1;
374
+ } else if (!start) {
325
375
  let shortest = Number.POSITIVE_INFINITY;
326
- all.forEach((item, index) => {
327
- if (!item) return;
328
- const distance = Math.abs(item.x - x);
376
+ all.forEach((stop, index) => {
377
+ const distance = Math.abs(stop.offset - x);
329
378
  if (distance < shortest) {
330
379
  shortest = distance;
331
380
  next = index;
@@ -333,68 +382,51 @@ const CarouselComponent = function Carousel({
333
382
  });
334
383
  }
335
384
  setActive(next);
336
- if (next !== activeRef.current) {
337
- activeRef.current = next;
338
- onIndexChangeRef.current?.(next);
385
+ const slide = all[next]?.slide ?? 0;
386
+ if (slide !== activeSlideRef.current) {
387
+ activeSlideRef.current = slide;
388
+ onIndexChangeRef.current?.(slide);
339
389
  }
340
- }, [count, trackWidth]);
341
-
342
- const targetFor = useCallback(
343
- (item: SlideOffset) => {
344
- const raw = align === 'center' ? item.x - (trackWidth - item.width) / 2 : item.x - inset;
345
- const max = Math.max(0, scroll.current.contentWidth - trackWidth);
346
- return Math.min(Math.max(0, raw), max);
347
- },
348
- [align, inset, trackWidth],
349
- );
390
+ }, [computeStops, trackWidth]);
350
391
 
351
- const recomputeSnaps = useCallback(() => {
352
- if (IS_WEB) return; // CSS scroll-snap owns snapping on web.
353
- const all = offsets.current.slice(0, count);
354
- if (all.length !== count || all.some((o) => !o)) return;
355
- setSnapOffsets(all.map(targetFor));
356
- }, [count, targetFor]);
392
+ const recomputeStops = useCallback(() => {
393
+ const next = computeStops();
394
+ if (next) setStops(next);
395
+ }, [computeStops]);
357
396
 
358
397
  const reportOffset = useCallback(
359
398
  (index: number, x: number, width: number) => {
360
399
  offsets.current[index] = { x, width };
361
- recomputeSnaps();
400
+ recomputeStops();
362
401
  measure();
363
402
  },
364
- [measure, recomputeSnaps],
403
+ [measure, recomputeStops],
365
404
  );
366
405
 
367
406
  useEffect(() => {
368
- recomputeSnaps();
407
+ recomputeStops();
369
408
  measure();
370
- }, [recomputeSnaps, measure]);
409
+ }, [recomputeStops, measure]);
371
410
 
372
- const scrollToIndex = (index: number) => {
373
- const target = offsets.current[Math.max(0, Math.min(index, count - 1))];
374
- if (!target) return;
375
- scrollRef.current?.scrollTo({ x: targetFor(target), animated: !reducedMotion });
411
+ const scrollToStop = (stop: Stop | undefined) => {
412
+ if (!stop) return;
413
+ scrollRef.current?.scrollTo({ x: stop.offset, animated: !reducedMotion });
376
414
  };
377
415
 
378
416
  /**
379
- * The arrows step from where the track IS, not from the active index. Slides
380
- * narrower than the track share the end offset — every one that cannot reach
381
- * the start edge clamps to it — so near the end "the slide before the active
382
- * one" is often where the track already rests, and an index step would scroll
383
- * nowhere and stay stuck there. Step to the nearest DISTINCT resting place
384
- * instead (1px of slack, as in `measure`).
417
+ * The arrows step from where the track IS, to the nearest stop before or after
418
+ * it (1px of slack, as in `measure`) — never by slide index, which near the
419
+ * end names a slide whose stop the track already rests at.
385
420
  */
386
421
  const step = (direction: -1 | 1) => {
422
+ const all = computeStops();
423
+ if (!all) return;
387
424
  const x = scroll.current.x;
388
- const targets = offsets.current
389
- .slice(0, count)
390
- .filter((item): item is SlideOffset => Boolean(item))
391
- .map(targetFor);
392
- const next =
425
+ scrollToStop(
393
426
  direction === 1
394
- ? targets.filter((t) => t > x + 1).reduce((a, b) => Math.min(a, b), Number.POSITIVE_INFINITY)
395
- : targets.filter((t) => t < x - 1).reduce((a, b) => Math.max(a, b), Number.NEGATIVE_INFINITY);
396
- if (!Number.isFinite(next)) return;
397
- scrollRef.current?.scrollTo({ x: next, animated: !reducedMotion });
427
+ ? all.find((stop) => stop.offset > x + 1)
428
+ : [...all].reverse().find((stop) => stop.offset < x - 1),
429
+ );
398
430
  };
399
431
 
400
432
  const onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
@@ -405,10 +437,12 @@ const CarouselComponent = function Carousel({
405
437
 
406
438
  const onContentSizeChange = (width: number) => {
407
439
  scroll.current = { ...scroll.current, contentWidth: width };
408
- recomputeSnaps();
440
+ recomputeStops();
409
441
  measure();
410
442
  };
411
443
 
444
+ const dotCount = stops.length > 0 ? stops.length : count;
445
+
412
446
  const contextValue = useMemo(
413
447
  () => ({ trackWidth, count, reportOffset }),
414
448
  [trackWidth, count, reportOffset],
@@ -455,7 +489,7 @@ const CarouselComponent = function Carousel({
455
489
  onScroll={onScroll}
456
490
  onContentSizeChange={onContentSizeChange}
457
491
  onLayout={(event) => setTrackWidth(event.nativeEvent.layout.width)}
458
- snapToOffsets={IS_WEB ? undefined : snapOffsets}
492
+ snapToOffsets={IS_WEB ? undefined : stops.map((stop) => stop.offset)}
459
493
  decelerationRate={IS_WEB ? undefined : 'fast'}
460
494
  disableIntervalMomentum
461
495
  style={trackStyle}
@@ -469,18 +503,24 @@ const CarouselComponent = function Carousel({
469
503
  </ScrollView>
470
504
  </CarouselContext.Provider>
471
505
 
472
- {showDots && count > 1 ? (
506
+ {showDots && dotCount > 1 ? (
473
507
  <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 6, paddingHorizontal: inset }}>
474
- {Array.from({ length: count }, (_, index) => (
475
- <CarouselDot
476
- key={index}
477
- active={index === active}
478
- paint={paint}
479
- label={dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`}
480
- reducedMotion={reducedMotion}
481
- onPress={() => scrollToIndex(index)}
482
- />
483
- ))}
508
+ {Array.from({ length: dotCount }, (_, index) => {
509
+ // One dot per STOP: slides that share a resting place share a dot,
510
+ // so no dot scrolls nowhere. Until the slides are measured there is
511
+ // one per slide, which is what full-width slides settle on anyway.
512
+ const slide = stops[index]?.slide ?? index;
513
+ return (
514
+ <CarouselDot
515
+ key={index}
516
+ active={index === active}
517
+ paint={paint}
518
+ label={dotLabel ? dotLabel(slide + 1) : `Go to slide ${slide + 1}`}
519
+ reducedMotion={reducedMotion}
520
+ onPress={() => scrollToStop(stops[index])}
521
+ />
522
+ );
523
+ })}
484
524
  </View>
485
525
  ) : null}
486
526
  </View>