@oxy.so/bloom 4.29.0 → 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,42 +344,47 @@ 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
  };
376
+
377
+ /**
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.
381
+ */
382
+ const step = direction => {
383
+ const all = computeStops();
384
+ if (!all) return;
385
+ const x = scroll.current.x;
386
+ scrollToStop(direction === 1 ? all.find(stop => stop.offset > x + 1) : [...all].reverse().find(stop => stop.offset < x - 1));
387
+ };
339
388
  const onScroll = event => {
340
389
  const {
341
390
  contentOffset,
@@ -352,9 +401,10 @@ const CarouselComponent = function Carousel({
352
401
  ...scroll.current,
353
402
  contentWidth: width
354
403
  };
355
- recomputeSnaps();
404
+ recomputeStops();
356
405
  measure();
357
406
  };
407
+ const dotCount = stops.length > 0 ? stops.length : count;
358
408
  const contextValue = (0, _react.useMemo)(() => ({
359
409
  trackWidth,
360
410
  count,
@@ -398,7 +448,7 @@ const CarouselComponent = function Carousel({
398
448
  icon: _RiArrowLeftSLine.RiArrowLeftSLine,
399
449
  accessibilityLabel: previousLabel,
400
450
  disabled: atStart,
401
- onPress: () => scrollToIndex(active - 1),
451
+ onPress: () => step(-1),
402
452
  appearance: "subtle",
403
453
  tone: "neutral"
404
454
  }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_button.Button, {
@@ -406,7 +456,7 @@ const CarouselComponent = function Carousel({
406
456
  icon: _RiArrowRightSLine.RiArrowRightSLine,
407
457
  accessibilityLabel: nextLabel,
408
458
  disabled: atEnd,
409
- onPress: () => scrollToIndex(active + 1),
459
+ onPress: () => step(1),
410
460
  appearance: "subtle",
411
461
  tone: "neutral"
412
462
  })]
@@ -427,7 +477,7 @@ const CarouselComponent = function Carousel({
427
477
  onScroll: onScroll,
428
478
  onContentSizeChange: onContentSizeChange,
429
479
  onLayout: event => setTrackWidth(event.nativeEvent.layout.width),
430
- snapToOffsets: IS_WEB ? undefined : snapOffsets,
480
+ snapToOffsets: IS_WEB ? undefined : stops.map(stop => stop.offset),
431
481
  decelerationRate: IS_WEB ? undefined : 'fast',
432
482
  disableIntervalMomentum: true,
433
483
  style: trackStyle,
@@ -440,7 +490,7 @@ const CarouselComponent = function Carousel({
440
490
  children: child
441
491
  }, child.key ?? index))
442
492
  })
443
- }), showDots && count > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
493
+ }), showDots && dotCount > 1 ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_reactNative.View, {
444
494
  style: {
445
495
  flexDirection: 'row',
446
496
  alignItems: 'center',
@@ -449,14 +499,20 @@ const CarouselComponent = function Carousel({
449
499
  paddingHorizontal: inset
450
500
  },
451
501
  children: Array.from({
452
- length: count
453
- }, (_, index) => /*#__PURE__*/(0, _jsxRuntime.jsx)(CarouselDot, {
454
- active: index === active,
455
- paint: paint,
456
- label: dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`,
457
- reducedMotion: reducedMotion,
458
- onPress: () => scrollToIndex(index)
459
- }, 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
+ })
460
516
  }) : null]
461
517
  });
462
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","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":"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","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,42 +338,47 @@ 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
  };
370
+
371
+ /**
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.
375
+ */
376
+ const step = direction => {
377
+ const all = computeStops();
378
+ if (!all) return;
379
+ const x = scroll.current.x;
380
+ scrollToStop(direction === 1 ? all.find(stop => stop.offset > x + 1) : [...all].reverse().find(stop => stop.offset < x - 1));
381
+ };
333
382
  const onScroll = event => {
334
383
  const {
335
384
  contentOffset,
@@ -346,9 +395,10 @@ const CarouselComponent = function Carousel({
346
395
  ...scroll.current,
347
396
  contentWidth: width
348
397
  };
349
- recomputeSnaps();
398
+ recomputeStops();
350
399
  measure();
351
400
  };
401
+ const dotCount = stops.length > 0 ? stops.length : count;
352
402
  const contextValue = useMemo(() => ({
353
403
  trackWidth,
354
404
  count,
@@ -392,7 +442,7 @@ const CarouselComponent = function Carousel({
392
442
  icon: RiArrowLeftSLine,
393
443
  accessibilityLabel: previousLabel,
394
444
  disabled: atStart,
395
- onPress: () => scrollToIndex(active - 1),
445
+ onPress: () => step(-1),
396
446
  appearance: "subtle",
397
447
  tone: "neutral"
398
448
  }), /*#__PURE__*/_jsx(Button, {
@@ -400,7 +450,7 @@ const CarouselComponent = function Carousel({
400
450
  icon: RiArrowRightSLine,
401
451
  accessibilityLabel: nextLabel,
402
452
  disabled: atEnd,
403
- onPress: () => scrollToIndex(active + 1),
453
+ onPress: () => step(1),
404
454
  appearance: "subtle",
405
455
  tone: "neutral"
406
456
  })]
@@ -421,7 +471,7 @@ const CarouselComponent = function Carousel({
421
471
  onScroll: onScroll,
422
472
  onContentSizeChange: onContentSizeChange,
423
473
  onLayout: event => setTrackWidth(event.nativeEvent.layout.width),
424
- snapToOffsets: IS_WEB ? undefined : snapOffsets,
474
+ snapToOffsets: IS_WEB ? undefined : stops.map(stop => stop.offset),
425
475
  decelerationRate: IS_WEB ? undefined : 'fast',
426
476
  disableIntervalMomentum: true,
427
477
  style: trackStyle,
@@ -434,7 +484,7 @@ const CarouselComponent = function Carousel({
434
484
  children: child
435
485
  }, child.key ?? index))
436
486
  })
437
- }), showDots && count > 1 ? /*#__PURE__*/_jsx(View, {
487
+ }), showDots && dotCount > 1 ? /*#__PURE__*/_jsx(View, {
438
488
  style: {
439
489
  flexDirection: 'row',
440
490
  alignItems: 'center',
@@ -443,14 +493,20 @@ const CarouselComponent = function Carousel({
443
493
  paddingHorizontal: inset
444
494
  },
445
495
  children: Array.from({
446
- length: count
447
- }, (_, index) => /*#__PURE__*/_jsx(CarouselDot, {
448
- active: index === active,
449
- paint: paint,
450
- label: dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`,
451
- reducedMotion: reducedMotion,
452
- onPress: () => scrollToIndex(index)
453
- }, 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
+ })
454
510
  }) : null]
455
511
  });
456
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","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;AA6RxD,eAAO,MAAM,QAAQ,mLAzLlB,aAAa,6CAyL+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;AA6RxD,eAAO,MAAM,QAAQ,mLAzLlB,aAAa,6CAyL+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.0",
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,46 +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 });
414
+ };
415
+
416
+ /**
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.
420
+ */
421
+ const step = (direction: -1 | 1) => {
422
+ const all = computeStops();
423
+ if (!all) return;
424
+ const x = scroll.current.x;
425
+ scrollToStop(
426
+ direction === 1
427
+ ? all.find((stop) => stop.offset > x + 1)
428
+ : [...all].reverse().find((stop) => stop.offset < x - 1),
429
+ );
376
430
  };
377
431
 
378
432
  const onScroll = (event: NativeSyntheticEvent<NativeScrollEvent>) => {
@@ -383,10 +437,12 @@ const CarouselComponent = function Carousel({
383
437
 
384
438
  const onContentSizeChange = (width: number) => {
385
439
  scroll.current = { ...scroll.current, contentWidth: width };
386
- recomputeSnaps();
440
+ recomputeStops();
387
441
  measure();
388
442
  };
389
443
 
444
+ const dotCount = stops.length > 0 ? stops.length : count;
445
+
390
446
  const contextValue = useMemo(
391
447
  () => ({ trackWidth, count, reportOffset }),
392
448
  [trackWidth, count, reportOffset],
@@ -413,8 +469,8 @@ const CarouselComponent = function Carousel({
413
469
  <View style={{ flex: 1, minWidth: 0 }}>{header}</View>
414
470
  {showArrows && count > 0 ? (
415
471
  <>
416
- <Button size="sm" icon={RiArrowLeftSLine} accessibilityLabel={previousLabel} disabled={atStart} onPress={() => scrollToIndex(active - 1)} appearance="subtle" tone="neutral" />
417
- <Button size="sm" icon={RiArrowRightSLine} accessibilityLabel={nextLabel} disabled={atEnd} onPress={() => scrollToIndex(active + 1)} appearance="subtle" tone="neutral" />
472
+ <Button size="sm" icon={RiArrowLeftSLine} accessibilityLabel={previousLabel} disabled={atStart} onPress={() => step(-1)} appearance="subtle" tone="neutral" />
473
+ <Button size="sm" icon={RiArrowRightSLine} accessibilityLabel={nextLabel} disabled={atEnd} onPress={() => step(1)} appearance="subtle" tone="neutral" />
418
474
  </>
419
475
  ) : null}
420
476
  </View>
@@ -433,7 +489,7 @@ const CarouselComponent = function Carousel({
433
489
  onScroll={onScroll}
434
490
  onContentSizeChange={onContentSizeChange}
435
491
  onLayout={(event) => setTrackWidth(event.nativeEvent.layout.width)}
436
- snapToOffsets={IS_WEB ? undefined : snapOffsets}
492
+ snapToOffsets={IS_WEB ? undefined : stops.map((stop) => stop.offset)}
437
493
  decelerationRate={IS_WEB ? undefined : 'fast'}
438
494
  disableIntervalMomentum
439
495
  style={trackStyle}
@@ -447,18 +503,24 @@ const CarouselComponent = function Carousel({
447
503
  </ScrollView>
448
504
  </CarouselContext.Provider>
449
505
 
450
- {showDots && count > 1 ? (
506
+ {showDots && dotCount > 1 ? (
451
507
  <View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 6, paddingHorizontal: inset }}>
452
- {Array.from({ length: count }, (_, index) => (
453
- <CarouselDot
454
- key={index}
455
- active={index === active}
456
- paint={paint}
457
- label={dotLabel ? dotLabel(index + 1) : `Go to slide ${index + 1}`}
458
- reducedMotion={reducedMotion}
459
- onPress={() => scrollToIndex(index)}
460
- />
461
- ))}
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
+ })}
462
524
  </View>
463
525
  ) : null}
464
526
  </View>