@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 +5 -2
- package/lib/commonjs/carousel/Carousel.js +105 -49
- package/lib/commonjs/carousel/Carousel.js.map +1 -1
- package/lib/module/carousel/Carousel.js +105 -49
- package/lib/module/carousel/Carousel.js.map +1 -1
- package/lib/typescript/commonjs/carousel/Carousel.d.ts.map +1 -1
- package/lib/typescript/module/carousel/Carousel.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/carousel/Carousel.tsx +117 -55
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
|
|
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
|
-
- **
|
|
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 [
|
|
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
|
|
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 =
|
|
284
|
-
if (all.length === 0) return;
|
|
285
|
-
|
|
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 =
|
|
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((
|
|
294
|
-
|
|
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
|
-
|
|
304
|
-
|
|
305
|
-
|
|
347
|
+
const slide = all[next]?.slide ?? 0;
|
|
348
|
+
if (slide !== activeSlideRef.current) {
|
|
349
|
+
activeSlideRef.current = slide;
|
|
350
|
+
onIndexChangeRef.current?.(slide);
|
|
306
351
|
}
|
|
307
|
-
}, [
|
|
308
|
-
const
|
|
309
|
-
const
|
|
310
|
-
|
|
311
|
-
|
|
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
|
-
|
|
362
|
+
recomputeStops();
|
|
325
363
|
measure();
|
|
326
|
-
}, [measure,
|
|
364
|
+
}, [measure, recomputeStops]);
|
|
327
365
|
(0, _react.useEffect)(() => {
|
|
328
|
-
|
|
366
|
+
recomputeStops();
|
|
329
367
|
measure();
|
|
330
|
-
}, [
|
|
331
|
-
const
|
|
332
|
-
|
|
333
|
-
if (!target) return;
|
|
368
|
+
}, [recomputeStops, measure]);
|
|
369
|
+
const scrollToStop = stop => {
|
|
370
|
+
if (!stop) return;
|
|
334
371
|
scrollRef.current?.scrollTo({
|
|
335
|
-
x:
|
|
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
|
-
|
|
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: () =>
|
|
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: () =>
|
|
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 :
|
|
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 &&
|
|
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:
|
|
453
|
-
}, (_, index) =>
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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 [
|
|
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
|
|
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 =
|
|
278
|
-
if (all.length === 0) return;
|
|
279
|
-
|
|
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 =
|
|
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((
|
|
288
|
-
|
|
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
|
-
|
|
298
|
-
|
|
299
|
-
|
|
341
|
+
const slide = all[next]?.slide ?? 0;
|
|
342
|
+
if (slide !== activeSlideRef.current) {
|
|
343
|
+
activeSlideRef.current = slide;
|
|
344
|
+
onIndexChangeRef.current?.(slide);
|
|
300
345
|
}
|
|
301
|
-
}, [
|
|
302
|
-
const
|
|
303
|
-
const
|
|
304
|
-
|
|
305
|
-
|
|
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
|
-
|
|
356
|
+
recomputeStops();
|
|
319
357
|
measure();
|
|
320
|
-
}, [measure,
|
|
358
|
+
}, [measure, recomputeStops]);
|
|
321
359
|
useEffect(() => {
|
|
322
|
-
|
|
360
|
+
recomputeStops();
|
|
323
361
|
measure();
|
|
324
|
-
}, [
|
|
325
|
-
const
|
|
326
|
-
|
|
327
|
-
if (!target) return;
|
|
362
|
+
}, [recomputeStops, measure]);
|
|
363
|
+
const scrollToStop = stop => {
|
|
364
|
+
if (!stop) return;
|
|
328
365
|
scrollRef.current?.scrollTo({
|
|
329
|
-
x:
|
|
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
|
-
|
|
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: () =>
|
|
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: () =>
|
|
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 :
|
|
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 &&
|
|
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:
|
|
447
|
-
}, (_, index) =>
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
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":";;AAAA,OAAOA,KAAK,IACVC,QAAQ,EACRC,cAAc,EACdC,IAAI,EACJC,WAAW,EACXC,UAAU,EACVC,SAAS,EACTC,OAAO,EACPC,MAAM,EACNC,QAAQ,QACH,OAAO;AACd,SACEC,QAAQ,EACRC,QAAQ,EACRC,SAAS,EACTC,UAAU,EACVC,IAAI,QAIC,cAAc;AACrB,SAASC,gBAAgB,QAAQ,yBAAyB;AAE1D,SAASC,MAAM,QAAQ,WAAW;AAClC,SAASC,kBAAkB,QAAQ,qBAAkB;AACrD,SAASC,gBAAgB,QAAQ,oCAAiC;AAClE,SAASC,iBAAiB,QAAQ,qCAAkC;AACpE,SAASC,mBAAmB,QAAQ,mCAAgC;AACpE,SAASC,oBAAoB,QAAQ,kCAA+B;AACpE,SAASC,YAAY,QAAQ,qBAAkB;AAE/C,SAASC,UAAU,QAAQ,uBAAoB;AAE/C,SAASC,QAAQ,QAAQ,uBAAoB;AAC7C,SAASC,eAAe,EAAEC,wBAAwB,QAAQ,cAAW;AAAC,SAAAC,GAAA,IAAAC,IAAA,EAAAC,QAAA,IAAAC,SAAA,EAAAC,IAAA,IAAAC,KAAA;AAGtE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMC,MAAM,GAAGtB,QAAQ,CAACuB,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;AACA,OAAO,SAASC,oBAAoBA,CAACC,KAAY,EAAiB;EAChE,MAAM;IAAEC;EAAO,CAAC,GAAGxB,kBAAkB,CAACuB,KAAK,CAAC;EAC5C,OAAO;IACLE,SAAS,EAAEF,KAAK,CAACG,MAAM,CAACC,IAAI;IAC5BC,GAAG,EAAEL,KAAK,CAACG,MAAM,CAACG,mBAAmB;IACrCC,QAAQ,EAAEP,KAAK,CAACG,MAAM,CAACK,aAAa;IACpCC,IAAI,EAAER,MAAM,CAAC,GAAG;EAClB,CAAC;AACH;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA,MAAMS,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,sBAAsBjB,iBAAiB,iCAAiCA,iBAAiB;AACzF;AACA,EAAEiB,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,GAAGxD,UAAU,CAACoB,eAAe,CAAC;EACvC,MAAMqC,KAAK,GAAGzD,UAAU,CAACqB,wBAAwB,CAAC;EAClD,MAAMqC,YAAY,GAAGF,GAAG,EAAEE,YAAY;EAEtC,MAAMC,QAAQ,GAAG5D,WAAW,CACzB6D,KAAwB,IAAK;IAC5B,MAAM;MAAEC,CAAC;MAAET,KAAK,EAAEU;IAAE,CAAC,GAAGF,KAAK,CAACG,WAAW,CAACC,MAAM;IAChDN,YAAY,GAAGD,KAAK,EAAEI,CAAC,EAAEC,CAAC,CAAC;EAC7B,CAAC,EACD,CAACJ,YAAY,EAAED,KAAK,CACtB,CAAC;EAED,MAAMQ,UAAU,GAAGb,KAAK,KAAKI,GAAG,IAAIA,GAAG,CAACU,UAAU,GAAG,CAAC,GAAGV,GAAG,CAACU,UAAU,GAAGC,SAAS,CAAC;EAEpF,oBACE5C,IAAA,CAACd,IAAI;IAAA,GACCS,UAAU,CAAC;MAAEkD,iBAAiB,EAAE;IAAG,CAAC,CAAC;IACzCC,IAAI,EAAC,OAAO;IAAA,IACPzC,MAAM,GAAG;MAAE,sBAAsB,EAAE;IAAQ,CAAC,GAAG,CAAC,CAAC;IACtDyB,kBAAkB,EAAEA,kBAAkB,KAAKG,GAAG,GAAG,GAAGC,KAAK,GAAG,CAAC,OAAOD,GAAG,CAACc,KAAK,EAAE,GAAGH,SAAS,CAAE;IAC7FR,QAAQ,EAAEA,QAAS;IACnBL,KAAK,EAAE,CAAC;MAAEiB,UAAU,EAAE;IAAE,CAAC,EAAEN,UAAU,IAAI,IAAI,GAAG;MAAEb,KAAK,EAAEa;IAAW,CAAC,GAAG,IAAI,EAAEX,KAAK,CAAE;IACrFC,MAAM,EAAEA,MAAO;IAAAJ,QAAA,EAEdA;EAAQ,CACL,CAAC;AAEX,CAAC;AAED,OAAO,MAAMD,YAAY,gBAAGpD,IAAI,CAACmD,qBAAqB,CAAC;AACvDC,YAAY,CAACsB,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,GAAGnE,mBAAmB,CAAC,CAAC;EAC7D;EACA,MAAMqC,KAAK,GAAGjD,MAAM,CAAC,IAAIE,QAAQ,CAAC8E,KAAK,CAACT,MAAM,GAAGzC,gBAAgB,GAAGD,SAAS,CAAC,CAAC,CAACoD,OAAO;EAEvFnF,SAAS,CAAC,MAAM;IACd,IAAI2B,MAAM,EAAE;IACZ,MAAMyD,EAAE,GAAGX,MAAM,GAAGzC,gBAAgB,GAAGD,SAAS;IAChD,IAAI6C,aAAa,EAAE;MACjBzB,KAAK,CAACkC,QAAQ,CAACD,EAAE,CAAC;MAClB;IACF;IACAhF,QAAQ,CAACkF,MAAM,CAACnC,KAAK,EAAE;MACrBoC,OAAO,EAAEH,EAAE;MACXI,QAAQ,EAAE3D,iBAAiB;MAC3B;MACA4D,eAAe,EAAE;IACnB,CAAC,CAAC,CAACC,KAAK,CAAC,CAAC;EACZ,CAAC,EAAE,CAACjB,MAAM,EAAEG,aAAa,EAAEzB,KAAK,CAAC,CAAC;EAElC,MAAMwC,UAAU,GAAGlB,MAAM,GAAGC,KAAK,CAACtC,SAAS,GAAG2C,OAAO,GAAGL,KAAK,CAACjC,QAAQ,GAAGiC,KAAK,CAACnC,GAAG;EAElF,oBACEjB,IAAA,CAAChB,SAAS;IAAA,GACJW,UAAU,CAAC;MAAE2E,gBAAgB,EAAE;IAAG,CAAC,CAAC;IACxCC,iBAAiB,EAAC,QAAQ;IAC1BzC,kBAAkB,EAAEuB,KAAM;IAC1B,gBAAcF,MAAO;IACrBI,OAAO,EAAEA,OAAQ;IACjBiB,SAAS,EAAEd,IAAK;IAChBe,UAAU,EAAEd,KAAM;IAClBe,OAAO,EAAE;MAAEC,GAAG,EAAE,CAAC;MAAEC,MAAM,EAAE,CAAC;MAAEC,IAAI,EAAE,CAAC;MAAEC,KAAK,EAAE;IAAE,CAAE;IAClD/C,KAAK,EACH1B,MAAM,GACF;MACE0E,MAAM,EAAEvE,UAAU;MAClBqB,KAAK,EAAEsB,MAAM,GAAGzC,gBAAgB,GAAGD,SAAS;MAC5Cf,YAAY,EAAEA,YAAY,CAACsF,IAAI;MAC/BC,eAAe,EAAEZ;IACnB,CAAC,GACDzB,SACL;IAAAhB,QAAA,EAEAvB,MAAM,GAAG,IAAI,gBACZL,IAAA,CAAClB,QAAQ,CAACI,IAAI;MACZ6C,KAAK,EAAE;QACLgD,MAAM,EAAEvE,UAAU;QAClBqB,KAAK;QACLnC,YAAY,EAAEA,YAAY,CAACsF,IAAI;QAC/BC,eAAe,EAAEZ;MACnB;IAAE,CACH;EACF,CACQ,CAAC;AAEhB;;AAEA;AACA;AACA;;AAOA;AACA;AACA;AACA;AACA;AACA;;AAMA;AACA;AACA;AACA;AACA;AACA;AACA,SAASa,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;EAC1CnE,QAAQ;EACRE,kBAAkB;EAClBkE,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;EACR1E,KAAK;EACLC;AACa,CAAC,EAAE;EAChB,MAAMpB,KAAK,GAAGhB,QAAQ,CAAC,CAAC;EACxBH,oBAAoB,CAAC6B,QAAQ,EAAEG,kBAAkB,CAAC;EAClD,MAAM6B,aAAa,GAAGnE,gBAAgB,CAAC,CAAC;EACxC,MAAMiE,KAAK,GAAGzE,OAAO,CAAC,MAAMgC,oBAAoB,CAACC,KAAK,CAAC,EAAE,CAACA,KAAK,CAAC,CAAC;EAEjE,MAAM8F,MAAM,GAAGrI,QAAQ,CAACsI,OAAO,CAAC/E,QAAQ,CAAC,CAACgF,MAAM,CAACtI,cAAc,CAAC;EAChE,MAAMyE,KAAK,GAAG2D,MAAM,CAACjB,MAAM;EAE3B,MAAMoB,SAAS,GAAGjI,MAAM,CAAa,IAAI,CAAC;EAC1C,MAAMkI,OAAO,GAAGlI,MAAM,CAAgB,EAAE,CAAC;EACzC,MAAMmI,MAAM,GAAGnI,MAAM,CAAC;IAAE0D,CAAC,EAAE,CAAC;IAAE0E,YAAY,EAAE;EAAE,CAAC,CAAC;EAChD,MAAM,CAACrE,UAAU,EAAEsE,aAAa,CAAC,GAAGpI,QAAQ,CAAC,CAAC,CAAC;EAC/C,MAAM,CAACuG,KAAK,EAAE8B,QAAQ,CAAC,GAAGrI,QAAQ,CAAS,EAAE,CAAC;EAC9C,MAAM,CAACsE,MAAM,EAAEgE,SAAS,CAAC,GAAGtI,QAAQ,CAAC,CAAC,CAAC;EACvC,MAAM,CAACuI,OAAO,EAAEC,UAAU,CAAC,GAAGxI,QAAQ,CAAC,IAAI,CAAC;EAC5C,MAAM,CAACyI,KAAK,EAAEC,QAAQ,CAAC,GAAG1I,QAAQ,CAAC,KAAK,CAAC;EAEzC,MAAM2I,gBAAgB,GAAG5I,MAAM,CAAC0H,aAAa,CAAC;EAC9CkB,gBAAgB,CAAC3D,OAAO,GAAGyC,aAAa;EACxC,MAAMmB,cAAc,GAAG7I,MAAM,CAAC,CAAC,CAAC;EAEhC,MAAM8I,SAAS,GAAGlJ,WAAW,CAC1BmJ,IAAiB,IAAK;IACrB,MAAMC,GAAG,GAAGzB,KAAK,KAAK,QAAQ,GAAGwB,IAAI,CAACrF,CAAC,GAAG,CAACK,UAAU,GAAGgF,IAAI,CAAC9F,KAAK,IAAI,CAAC,GAAG8F,IAAI,CAACrF,CAAC,GAAG+D,KAAK;IACxF,MAAMwB,GAAG,GAAGnC,IAAI,CAACmC,GAAG,CAAC,CAAC,EAAEd,MAAM,CAAClD,OAAO,CAACmD,YAAY,GAAGrE,UAAU,CAAC;IACjE,OAAO+C,IAAI,CAACoC,GAAG,CAACpC,IAAI,CAACmC,GAAG,CAAC,CAAC,EAAED,GAAG,CAAC,EAAEC,GAAG,CAAC;EACxC,CAAC,EACD,CAAC1B,KAAK,EAAEE,KAAK,EAAE1D,UAAU,CAC3B,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,MAAMoF,YAAY,GAAGvJ,WAAW,CAAC,MAAqB;IACpD,MAAMwJ,GAAG,GAAGlB,OAAO,CAACjD,OAAO,CAACoE,KAAK,CAAC,CAAC,EAAElF,KAAK,CAAC;IAC3C,IAAIiF,GAAG,CAACvC,MAAM,KAAK1C,KAAK,IAAIiF,GAAG,CAACE,IAAI,CAAEC,CAAC,IAAK,CAACA,CAAC,CAAC,EAAE,OAAO,IAAI;IAC5D,OAAOjD,OAAO,CAAC8C,GAAG,CAACI,GAAG,CAACV,SAAS,CAAC,CAAC;EACpC,CAAC,EAAE,CAAC3E,KAAK,EAAE2E,SAAS,CAAC,CAAC;EAEtB,MAAMW,OAAO,GAAG7J,WAAW,CAAC,MAAM;IAChC,MAAM;MAAE8D,CAAC;MAAE0E;IAAa,CAAC,GAAGD,MAAM,CAAClD,OAAO;IAC1C,MAAMyE,QAAQ,GAAG3F,UAAU;IAC3B;IACA;IACA,MAAMyB,KAAK,GAAG9B,CAAC,IAAI,CAAC;IACpB,MAAMuD,GAAG,GAAGyC,QAAQ,GAAG,CAAC,IAAItB,YAAY,GAAG,CAAC,IAAI1E,CAAC,IAAI0E,YAAY,GAAGsB,QAAQ,GAAG,CAAC;IAChFjB,UAAU,CAACjD,KAAK,CAAC;IACjBmD,QAAQ,CAAC1B,GAAG,CAAC;IAEb,MAAMmC,GAAG,GAAGD,YAAY,CAAC,CAAC;IAC1B,IAAI,CAACC,GAAG,IAAIA,GAAG,CAACvC,MAAM,KAAK,CAAC,EAAE;;IAE9B;IACA;IACA;IACA;IACA,IAAI8C,IAAI,GAAG,CAAC;IACZ,IAAI1C,GAAG,EAAE;MACP0C,IAAI,GAAGP,GAAG,CAACvC,MAAM,GAAG,CAAC;IACvB,CAAC,MAAM,IAAI,CAACrB,KAAK,EAAE;MACjB,IAAIoE,QAAQ,GAAGC,MAAM,CAACC,iBAAiB;MACvCV,GAAG,CAAC3C,OAAO,CAAC,CAACsD,IAAI,EAAEzG,KAAK,KAAK;QAC3B,MAAM0G,QAAQ,GAAGlD,IAAI,CAACC,GAAG,CAACgD,IAAI,CAACrD,MAAM,GAAGhD,CAAC,CAAC;QAC1C,IAAIsG,QAAQ,GAAGJ,QAAQ,EAAE;UACvBA,QAAQ,GAAGI,QAAQ;UACnBL,IAAI,GAAGrG,KAAK;QACd;MACF,CAAC,CAAC;IACJ;IACAiF,SAAS,CAACoB,IAAI,CAAC;IACf,MAAMhD,KAAK,GAAGyC,GAAG,CAACO,IAAI,CAAC,EAAEhD,KAAK,IAAI,CAAC;IACnC,IAAIA,KAAK,KAAKkC,cAAc,CAAC5D,OAAO,EAAE;MACpC4D,cAAc,CAAC5D,OAAO,GAAG0B,KAAK;MAC9BiC,gBAAgB,CAAC3D,OAAO,GAAG0B,KAAK,CAAC;IACnC;EACF,CAAC,EAAE,CAACwC,YAAY,EAAEpF,UAAU,CAAC,CAAC;EAE9B,MAAMkG,cAAc,GAAGrK,WAAW,CAAC,MAAM;IACvC,MAAM+J,IAAI,GAAGR,YAAY,CAAC,CAAC;IAC3B,IAAIQ,IAAI,EAAErB,QAAQ,CAACqB,IAAI,CAAC;EAC1B,CAAC,EAAE,CAACR,YAAY,CAAC,CAAC;EAElB,MAAM5F,YAAY,GAAG3D,WAAW,CAC9B,CAAC0D,KAAa,EAAEI,CAAS,EAAET,KAAa,KAAK;IAC3CiF,OAAO,CAACjD,OAAO,CAAC3B,KAAK,CAAC,GAAG;MAAEI,CAAC;MAAET;IAAM,CAAC;IACrCgH,cAAc,CAAC,CAAC;IAChBR,OAAO,CAAC,CAAC;EACX,CAAC,EACD,CAACA,OAAO,EAAEQ,cAAc,CAC1B,CAAC;EAEDnK,SAAS,CAAC,MAAM;IACdmK,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,CAAChD,OAAO,EAAEkF,QAAQ,CAAC;MAAEzG,CAAC,EAAEqG,IAAI,CAACrD,MAAM;MAAE0D,QAAQ,EAAE,CAAC1F;IAAc,CAAC,CAAC;EAC3E,CAAC;;EAED;AACF;AACA;AACA;AACA;EACE,MAAM2F,IAAI,GAAIC,SAAiB,IAAK;IAClC,MAAMlB,GAAG,GAAGD,YAAY,CAAC,CAAC;IAC1B,IAAI,CAACC,GAAG,EAAE;IACV,MAAM1F,CAAC,GAAGyE,MAAM,CAAClD,OAAO,CAACvB,CAAC;IAC1BwG,YAAY,CACVI,SAAS,KAAK,CAAC,GACXlB,GAAG,CAACmB,IAAI,CAAER,IAAI,IAAKA,IAAI,CAACrD,MAAM,GAAGhD,CAAC,GAAG,CAAC,CAAC,GACvC,CAAC,GAAG0F,GAAG,CAAC,CAACoB,OAAO,CAAC,CAAC,CAACD,IAAI,CAAER,IAAI,IAAKA,IAAI,CAACrD,MAAM,GAAGhD,CAAC,GAAG,CAAC,CAC3D,CAAC;EACH,CAAC;EAED,MAAM+G,QAAQ,GAAIhH,KAA8C,IAAK;IACnE,MAAM;MAAEiH,aAAa;MAAEC;IAAY,CAAC,GAAGlH,KAAK,CAACG,WAAW;IACxDuE,MAAM,CAAClD,OAAO,GAAG;MAAEvB,CAAC,EAAEgH,aAAa,CAAChH,CAAC;MAAE0E,YAAY,EAAEuC,WAAW,CAAC1H;IAAM,CAAC;IACxEwG,OAAO,CAAC,CAAC;EACX,CAAC;EAED,MAAMmB,mBAAmB,GAAI3H,KAAa,IAAK;IAC7CkF,MAAM,CAAClD,OAAO,GAAG;MAAE,GAAGkD,MAAM,CAAClD,OAAO;MAAEmD,YAAY,EAAEnF;IAAM,CAAC;IAC3DgH,cAAc,CAAC,CAAC;IAChBR,OAAO,CAAC,CAAC;EACX,CAAC;EAED,MAAMoB,QAAQ,GAAGrE,KAAK,CAACK,MAAM,GAAG,CAAC,GAAGL,KAAK,CAACK,MAAM,GAAG1C,KAAK;EAExD,MAAM2G,YAAY,GAAG/K,OAAO,CAC1B,OAAO;IAAEgE,UAAU;IAAEI,KAAK;IAAEZ;EAAa,CAAC,CAAC,EAC3C,CAACQ,UAAU,EAAEI,KAAK,EAAEZ,YAAY,CAClC,CAAC;EAED,MAAMwH,UAAuB,GAAG;IAC9B9H,KAAK,EAAE,MAAM;IACb;IACA,uBAAuB,EAAEuB,KAAK,CAAC/B,IAAI;IACnC;IACA,wBAAwB,EAAE,GAAGgF,KAAK;EACpC,CAAC;EAED,oBACEjG,KAAA,CAAClB,IAAI;IACH4D,IAAI,EAAC,OAAO;IAAA,IACPzC,MAAM,GAAG;MAAE,sBAAsB,EAAE;IAAW,CAAC,GAAG,CAAC,CAAC;IACzDyB,kBAAkB,EAAEA,kBAAmB;IACvCC,KAAK,EAAE,CAAC;MAAEF,KAAK,EAAE,MAAM;MAAE+H,aAAa,EAAE,QAAQ;MAAExD,GAAG,EAAE;IAAG,CAAC,EAAErE,KAAK,CAAE;IACpEC,MAAM,EAAEA,MAAO;IAAAJ,QAAA,GAEdoE,MAAM,IAAI,IAAI,IAAKC,UAAU,IAAIlD,KAAK,GAAG,CAAE,gBAC1C3C,KAAA,CAAClB,IAAI;MAAC6C,KAAK,EAAE;QAAE6H,aAAa,EAAE,KAAK;QAAEC,UAAU,EAAE,QAAQ;QAAEzD,GAAG,EAAE,CAAC;QAAE0D,iBAAiB,EAAEzD;MAAM,CAAE;MAAAzE,QAAA,gBAC5F5B,IAAA,CAACd,IAAI;QAAC6C,KAAK,EAAE;UAAEgI,IAAI,EAAE,CAAC;UAAEC,QAAQ,EAAE;QAAE,CAAE;QAAApI,QAAA,EAAEoE;MAAM,CAAO,CAAC,EACrDC,UAAU,IAAIlD,KAAK,GAAG,CAAC,gBACtB3C,KAAA,CAAAF,SAAA;QAAA0B,QAAA,gBACE5B,IAAA,CAACZ,MAAM;UAAC6K,IAAI,EAAC,IAAI;UAACC,IAAI,EAAE5K,gBAAiB;UAACwC,kBAAkB,EAAEyE,aAAc;UAAC4D,QAAQ,EAAE/C,OAAQ;UAAC7D,OAAO,EAAEA,CAAA,KAAM0F,IAAI,CAAC,CAAC,CAAC,CAAE;UAACmB,UAAU,EAAC,QAAQ;UAACC,IAAI,EAAC;QAAS,CAAE,CAAC,eAC9JrK,IAAA,CAACZ,MAAM;UAAC6K,IAAI,EAAC,IAAI;UAACC,IAAI,EAAE3K,iBAAkB;UAACuC,kBAAkB,EAAE0E,SAAU;UAAC2D,QAAQ,EAAE7C,KAAM;UAAC/D,OAAO,EAAEA,CAAA,KAAM0F,IAAI,CAAC,CAAC,CAAE;UAACmB,UAAU,EAAC,QAAQ;UAACC,IAAI,EAAC;QAAS,CAAE,CAAC;MAAA,CACxJ,CAAC,GACD,IAAI;IAAA,CACJ,CAAC,GACL,IAAI,eAERrK,IAAA,CAACH,eAAe,CAACyK,QAAQ;MAACC,KAAK,EAAEb,YAAa;MAAA9H,QAAA,eAC5C5B,IAAA,CAACf,UAAU;QACTuL,GAAG,EAAE3D,SAAU;QAAA,GACXlH,UAAU,CAAC;UAAE8K,kBAAkB,EAAEtE;QAAM,CAAC,CAAC;QAAA,IAGxC9F,MAAM,GAAG;UAAEqK,QAAQ,EAAE;QAAE,CAAC,GAAG,CAAC,CAAC;QAClCC,UAAU;QACVC,8BAA8B,EAAE,KAAM;QACtCC,mBAAmB,EAAE,EAAG;QACxBxB,QAAQ,EAAEA,QAAS;QACnBG,mBAAmB,EAAEA,mBAAoB;QACzCpH,QAAQ,EAAGC,KAAK,IAAK4E,aAAa,CAAC5E,KAAK,CAACG,WAAW,CAACC,MAAM,CAACZ,KAAK,CAAE;QACnEiJ,aAAa,EAAEzK,MAAM,GAAGuC,SAAS,GAAGwC,KAAK,CAACgD,GAAG,CAAEO,IAAI,IAAKA,IAAI,CAACrD,MAAM,CAAE;QACrEyF,gBAAgB,EAAE1K,MAAM,GAAGuC,SAAS,GAAG,MAAO;QAC9CoI,uBAAuB;QACvBjJ,KAAK,EAAE4H,UAAW;QAClBsB,qBAAqB,EAAE;UAAE7E,GAAG;UAAE0D,iBAAiB,EAAEzD;QAAM,CAAE;QAAAzE,QAAA,EAExD8E,MAAM,CAAC0B,GAAG,CAAC,CAAC8C,KAAK,EAAEhJ,KAAK,kBACvBlC,IAAA,CAACF,wBAAwB,CAACwK,QAAQ;UAA0BC,KAAK,EAAErI,KAAM;UAAAN,QAAA,EACtEsJ;QAAK,GADgCA,KAAK,CAACC,GAAG,IAAIjJ,KAElB,CACpC;MAAC,CACQ;IAAC,CACW,CAAC,EAE1BgE,QAAQ,IAAIuD,QAAQ,GAAG,CAAC,gBACvBzJ,IAAA,CAACd,IAAI;MAAC6C,KAAK,EAAE;QAAE6H,aAAa,EAAE,KAAK;QAAEC,UAAU,EAAE,QAAQ;QAAEuB,cAAc,EAAE,QAAQ;QAAEhF,GAAG,EAAE,CAAC;QAAE0D,iBAAiB,EAAEzD;MAAM,CAAE;MAAAzE,QAAA,EACrHyJ,KAAK,CAACC,IAAI,CAAC;QAAE7F,MAAM,EAAEgE;MAAS,CAAC,EAAE,CAAC8B,CAAC,EAAErJ,KAAK,KAAK;QAC9C;QACA;QACA;QACA,MAAMqD,KAAK,GAAGH,KAAK,CAAClD,KAAK,CAAC,EAAEqD,KAAK,IAAIrD,KAAK;QAC1C,oBACElC,IAAA,CAACkD,WAAW;UAEVC,MAAM,EAAEjB,KAAK,KAAKiB,MAAO;UACzBC,KAAK,EAAEA,KAAM;UACbC,KAAK,EAAEoD,QAAQ,GAAGA,QAAQ,CAAClB,KAAK,GAAG,CAAC,CAAC,GAAG,eAAeA,KAAK,GAAG,CAAC,EAAG;UACnEjC,aAAa,EAAEA,aAAc;UAC7BC,OAAO,EAAEA,CAAA,KAAMuF,YAAY,CAAC1D,KAAK,CAAClD,KAAK,CAAC;QAAE,GALrCA,KAMN,CAAC;MAEN,CAAC;IAAC,CACE,CAAC,GACL,IAAI;EAAA,CACJ,CAAC;AAEX,CAAC;AAED,OAAO,MAAM6D,QAAQ,gBAAGxH,IAAI,CAACuH,iBAAiB,CAAC;AAC/CC,QAAQ,CAAC9C,WAAW,GAAG,UAAU","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;
|
|
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;
|
|
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
|
@@ -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 [
|
|
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
|
|
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 =
|
|
316
|
-
if (all.length === 0) return;
|
|
364
|
+
const all = computeStops();
|
|
365
|
+
if (!all || all.length === 0) return;
|
|
317
366
|
|
|
318
|
-
|
|
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 =
|
|
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((
|
|
327
|
-
|
|
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
|
-
|
|
337
|
-
|
|
338
|
-
|
|
385
|
+
const slide = all[next]?.slide ?? 0;
|
|
386
|
+
if (slide !== activeSlideRef.current) {
|
|
387
|
+
activeSlideRef.current = slide;
|
|
388
|
+
onIndexChangeRef.current?.(slide);
|
|
339
389
|
}
|
|
340
|
-
}, [
|
|
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
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
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
|
-
|
|
400
|
+
recomputeStops();
|
|
362
401
|
measure();
|
|
363
402
|
},
|
|
364
|
-
[measure,
|
|
403
|
+
[measure, recomputeStops],
|
|
365
404
|
);
|
|
366
405
|
|
|
367
406
|
useEffect(() => {
|
|
368
|
-
|
|
407
|
+
recomputeStops();
|
|
369
408
|
measure();
|
|
370
|
-
}, [
|
|
409
|
+
}, [recomputeStops, measure]);
|
|
371
410
|
|
|
372
|
-
const
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
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
|
-
|
|
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={() =>
|
|
417
|
-
<Button size="sm" icon={RiArrowRightSLine} accessibilityLabel={nextLabel} disabled={atEnd} onPress={() =>
|
|
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 :
|
|
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 &&
|
|
506
|
+
{showDots && dotCount > 1 ? (
|
|
451
507
|
<View style={{ flexDirection: 'row', alignItems: 'center', justifyContent: 'center', gap: 6, paddingHorizontal: inset }}>
|
|
452
|
-
{Array.from({ length:
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
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>
|