react-motion-gallery 2.0.4 → 2.0.5

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/dist/index.d.mts CHANGED
@@ -1,6 +1,6 @@
1
- import * as React$1 from 'react';
2
- import React__default, { ReactNode } from 'react';
3
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
+ import * as React$1 from 'react';
3
+ import React__default, { RefObject } from 'react';
4
4
  import { APITypes } from 'plyr-react';
5
5
 
6
6
  type ArrowRenderArgs = {
@@ -45,7 +45,7 @@ type ThumbnailLoadingOptions = {
45
45
  isLoading?: boolean;
46
46
  skeletonCount?: ResponsiveNumber;
47
47
  renderLoading?: (args: {
48
- layout: "thumbnails";
48
+ layout: "slider" | "thumbnails";
49
49
  count: number;
50
50
  }) => React$1.ReactNode;
51
51
  };
@@ -121,6 +121,7 @@ type ThumbnailsOptions = {
121
121
  breakpointMap?: BreakpointMap;
122
122
  };
123
123
 
124
+ declare const BREAKPOINT_MAP: Record<string, number>;
124
125
  type BreakpointMap = Record<string, number>;
125
126
  type ResponsiveNumber = number | string | Array<number | string> | Record<string, number | string>;
126
127
 
@@ -140,6 +141,217 @@ type MediaItem = {
140
141
  thumb?: string;
141
142
  caption?: React.ReactNode;
142
143
  };
144
+ declare const toMediaItems: (urls: string[]) => MediaItem[];
145
+
146
+ type IndexMode = "instant" | "animated";
147
+ interface GalleryApi {
148
+ rootNode(): HTMLElement | null;
149
+ containerNode(): HTMLElement | null;
150
+ slideNodes(): HTMLElement[];
151
+ onReady?(cb: (nodes: HTMLElement[]) => void): () => void;
152
+ whenReady?(): Promise<HTMLElement[]>;
153
+ isReady?(): boolean;
154
+ scrollTo(index: number, jump?: boolean): void;
155
+ scrollNext(jump?: boolean): void;
156
+ scrollPrev(jump?: boolean): void;
157
+ canScrollNext(): boolean;
158
+ canScrollPrev(): boolean;
159
+ getIndex(): number;
160
+ selectCell(index: number, jump?: boolean): void;
161
+ scrollProgress(): number;
162
+ cellsInView(): number[];
163
+ append(nodes: React.ReactNode | React.ReactNode[]): number;
164
+ prepend(nodes: React.ReactNode | React.ReactNode[]): number;
165
+ insert(index: number, nodes: React.ReactNode | React.ReactNode[]): number;
166
+ remove(indexOrPredicate: number | ((i: number) => boolean)): number;
167
+ replace(index: number, node: React.ReactNode): void;
168
+ setItems(nodes: React.ReactNode[]): number;
169
+ onIndexChange(cb: (i: number, meta: {
170
+ mode: IndexMode;
171
+ }) => void): () => void;
172
+ }
173
+
174
+ type ResponsiveHeightRule = {
175
+ query: string;
176
+ height: string;
177
+ };
178
+ type SliderLayout$1 = {
179
+ gap?: number;
180
+ cellsPerSlide?: ResponsiveNumber;
181
+ };
182
+ type SliderDirection = {
183
+ dir?: "ltr" | "rtl";
184
+ axis?: "x" | "y";
185
+ };
186
+ type SliderSize = {
187
+ height?: string;
188
+ heightRules?: ResponsiveHeightRule[];
189
+ initialHeight?: number | string;
190
+ initialHeightRules?: ResponsiveHeightRule[];
191
+ aspectRatio?: number | `${number}/${number}` | `${number} / ${number}`;
192
+ };
193
+ type SliderElements = {
194
+ viewport?: ElementStyle;
195
+ container?: ElementStyle;
196
+ };
197
+ type SliderScroll = {
198
+ groupCells?: boolean;
199
+ skipSnaps?: boolean;
200
+ freeScroll?: boolean;
201
+ loop?: boolean;
202
+ };
203
+ type SliderArrows = {
204
+ enabled?: boolean;
205
+ arrow?: ElementStyle;
206
+ prev?: ElementStyle;
207
+ next?: ElementStyle;
208
+ render?: (args: ArrowRenderArgs & {
209
+ dir: "prev" | "next";
210
+ }) => React.ReactNode;
211
+ renderPrev?: (args: ArrowRenderArgs) => React.ReactNode;
212
+ renderNext?: (args: ArrowRenderArgs) => React.ReactNode;
213
+ };
214
+ type SliderDots = {
215
+ enabled?: boolean;
216
+ root?: ElementStyle;
217
+ dot?: ElementStyle;
218
+ render?: (args: DotsRenderArgs) => React.ReactNode;
219
+ };
220
+ type SliderProgress = {
221
+ enabled?: boolean;
222
+ root?: ElementStyle;
223
+ bar?: ElementStyle;
224
+ render?: (args: ProgressRenderArgs) => React.ReactNode;
225
+ };
226
+ type SliderRipple = {
227
+ enabled?: boolean;
228
+ className?: string;
229
+ };
230
+ type SliderControls = {
231
+ arrows?: SliderArrows;
232
+ dots?: SliderDots;
233
+ progress?: SliderProgress;
234
+ ripple?: SliderRipple;
235
+ };
236
+ type SliderAutoPlay = {
237
+ enabled?: boolean;
238
+ speedMs?: number;
239
+ pauseMs?: number;
240
+ pauseOnHover?: boolean;
241
+ };
242
+ type SliderAutoScroll = {
243
+ enabled?: boolean;
244
+ speedMs?: number;
245
+ pauseMs?: number;
246
+ pauseOnHover?: boolean;
247
+ };
248
+ type SliderAuto = {
249
+ play?: SliderAutoPlay;
250
+ scroll?: SliderAutoScroll;
251
+ };
252
+ type SliderLoadingOptions = {
253
+ isLoading?: boolean;
254
+ skeletonCount?: ResponsiveNumber;
255
+ renderLoading?: (args: {
256
+ layout: "slider" | "thumbnails";
257
+ count: number;
258
+ }) => React.ReactNode;
259
+ shimmer?: {
260
+ radius?: number | string;
261
+ c1?: string;
262
+ c2?: string;
263
+ c3?: string;
264
+ size?: string;
265
+ duration?: string;
266
+ timing?: string;
267
+ };
268
+ };
269
+ type SliderIntroOptions = {
270
+ renderIntro?: (args: {
271
+ active: boolean;
272
+ containerProps: React.HTMLAttributes<HTMLDivElement>;
273
+ }, content: React.ReactNode) => React.ReactNode;
274
+ staggerMs?: number;
275
+ transform?: number | string;
276
+ durationMs?: number;
277
+ easing?: string;
278
+ };
279
+ type SliderTransitions = {
280
+ loading?: SliderLoadingOptions;
281
+ intro?: SliderIntroOptions;
282
+ };
283
+ type SliderParallax = {
284
+ enabled?: boolean;
285
+ bleedPct?: string;
286
+ borderRadius?: string;
287
+ sideWidth?: string;
288
+ };
289
+ type SliderScale = {
290
+ enabled?: boolean;
291
+ amount?: number;
292
+ };
293
+ type SliderFade = {
294
+ enabled?: boolean;
295
+ };
296
+ type SliderEffects = {
297
+ parallax?: SliderParallax;
298
+ scale?: SliderScale;
299
+ fade?: SliderFade;
300
+ };
301
+ type SliderMotion = {
302
+ selectDuration?: number;
303
+ freeScrollDuration?: number;
304
+ friction?: number;
305
+ };
306
+ type SliderOptions = {
307
+ layout?: SliderLayout$1;
308
+ direction?: SliderDirection;
309
+ size?: SliderSize;
310
+ align?: "start" | "center";
311
+ scroll?: SliderScroll;
312
+ elements?: SliderElements;
313
+ lazyLoad?: boolean;
314
+ controls?: SliderControls;
315
+ thumbnails?: ThumbnailsOptions;
316
+ auto?: SliderAuto;
317
+ transitions?: SliderTransitions;
318
+ motion?: SliderMotion;
319
+ effects?: SliderEffects;
320
+ };
321
+ interface SliderHandle {
322
+ centerSlider: () => void;
323
+ getIndex: () => number;
324
+ setIndex: (i: number, mode?: IndexMode) => void;
325
+ subscribeIndex: (fn: () => void) => () => void;
326
+ slideIndexForCell: (cellIndex: number) => number;
327
+ getRootNode(): HTMLElement | null;
328
+ getContainerNode(): HTMLElement | null;
329
+ getSlideNodes(): HTMLElement[];
330
+ onSlidesBuilt(cb: (nodes: HTMLElement[]) => void): () => void;
331
+ whenSlidesBuilt(): Promise<HTMLElement[]>;
332
+ isSlidesBuilt(): boolean;
333
+ scrollNext: (mode?: IndexMode) => void;
334
+ scrollPrev: (mode?: IndexMode) => void;
335
+ canScrollNext: () => boolean;
336
+ canScrollPrev: () => boolean;
337
+ scrollProgress: () => number;
338
+ cellsInView: () => number[];
339
+ getInternals(): {
340
+ slides: RefObject<{
341
+ cells: {
342
+ element: HTMLElement;
343
+ index: number;
344
+ }[];
345
+ target: number;
346
+ }[]>;
347
+ slider: RefObject<HTMLDivElement | null>;
348
+ visibleImages: RefObject<number>;
349
+ selectedIndex: RefObject<number>;
350
+ sliderX: RefObject<number>;
351
+ sliderVelocity: RefObject<number>;
352
+ isWrapping: RefObject<boolean>;
353
+ };
354
+ }
143
355
 
144
356
  type LoadingOptions = {
145
357
  isLoading?: boolean;
@@ -148,6 +360,17 @@ type LoadingOptions = {
148
360
  layout: "slider" | "grid" | "masonry" | "entries";
149
361
  count: number;
150
362
  }) => React.ReactNode;
363
+ shimmer?: {
364
+ paddingBottom?: string;
365
+ radius?: number | string;
366
+ c1?: string;
367
+ c2?: string;
368
+ c3?: string;
369
+ size?: string;
370
+ duration?: string;
371
+ timing?: string;
372
+ };
373
+ ratios?: number[];
151
374
  };
152
375
  type IntroOptions = {
153
376
  renderIntro?: (args: {
@@ -203,12 +426,168 @@ type EntriesOptions = {
203
426
  loading?: LoadingOptions;
204
427
  intro?: IntroOptions;
205
428
  };
429
+ type SlideOwner = {
430
+ entryIndex: number;
431
+ };
432
+
433
+ declare const DEFAULT_ENTRIES: Required<Pick<EntriesOptions, "mediaLayout">>;
434
+
435
+ type EntriesMediaContainerRender = (args: {
436
+ entryIndex: number;
437
+ mediaNodes: React$1.ReactNode[];
438
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
439
+ }) => React$1.ReactNode;
440
+ type FullscreenItemsInput = MediaItem[] | string[];
441
+ /**
442
+ * Flatten entries -> media list + link map + entry->flat indices + owners
443
+ * Useful for:
444
+ * - fullscreenItems (fs addon)
445
+ * - entryFlatIndexRef / entryMapRef bookkeeping
446
+ */
447
+ declare function flattenEntries(items: EntryItem[] | undefined): {
448
+ flattenedMedia: MediaItem[];
449
+ flattenedMap: MediaEntryLink[];
450
+ entryFlatIndex: number[][] | null;
451
+ owners: SlideOwner[];
452
+ };
453
+ type EntriesProps = {
454
+ enabled?: boolean;
455
+ entries: EntriesOptions;
456
+ /**
457
+ * If you don't pass this, Entries will default to:
458
+ * - fullscreen.items if provided
459
+ * - else flattened entries media
460
+ */
461
+ fullscreen?: {
462
+ enabled?: boolean;
463
+ items?: FullscreenItemsInput;
464
+ };
465
+ /**
466
+ * Called by EntryList to wrap mediaNodes in the chosen layout container.
467
+ * This is what makes slider/grid/masonry *fully treeshakable*:
468
+ * users import ONE media renderer module and pass it here.
469
+ */
470
+ renderMediaContainer: EntriesMediaContainerRender;
471
+ /**
472
+ * Override for media node creation when entries.render.media isn't provided.
473
+ */
474
+ nodeFromMedia?: (m: MediaItem) => React$1.ReactNode;
475
+ /**
476
+ * Optional: provide your own refs if you want to read them outside.
477
+ * If omitted, Entries creates internal refs.
478
+ */
479
+ entryFlatIndexRef?: React$1.RefObject<number[][] | null>;
480
+ entryMapRef?: React$1.RefObject<MediaEntryLink[] | null>;
481
+ fsOwnersRef?: React$1.RefObject<SlideOwner[]>;
482
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
483
+ /**
484
+ * Optional: if you're NOT inside GalleryCore and still want to open fullscreen,
485
+ * you can provide a callback.
486
+ */
487
+ onOpenFullscreen?: (args: {
488
+ index: number;
489
+ img: HTMLImageElement;
490
+ event?: Event;
491
+ }) => void;
492
+ };
493
+ declare function Entries(props: EntriesProps): react_jsx_runtime.JSX.Element;
494
+
495
+ type FullscreenOpenRequest = {
496
+ source: "slider";
497
+ index: number;
498
+ img: HTMLImageElement | null;
499
+ event?: Event;
500
+ } | {
501
+ source: "grid" | "masonry" | "entries";
502
+ index: number;
503
+ img: HTMLImageElement | null;
504
+ event?: Event;
505
+ };
506
+ type CoreLayout = "slider" | "grid" | "masonry" | "entries";
507
+ type Cell = {
508
+ id: string;
509
+ node: React$1.ReactNode;
510
+ };
511
+ type FullscreenSource = FullscreenOpenRequest["source"];
512
+ type FullscreenEntryContext = {
513
+ entryMapRef?: React$1.RefObject<MediaEntryLink[] | null>;
514
+ entryMediaLayout?: "slider" | "grid" | "masonry";
515
+ entriesObject?: any;
516
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
517
+ expandableImgRefs?: React$1.RefObject<Array<HTMLImageElement | null>>;
518
+ };
519
+ type FullscreenSourceAdapter = {
520
+ /** for layouts that have a “real slider” behind a given index */
521
+ getOwnerSliderHandle?: (index: number) => SliderHandle | null;
522
+ /** for entries: ensure the correct media slider is ready before opening */
523
+ syncBeforeOpen?: (index: number) => void;
524
+ /** used by intro logic to find the “cell wrapper” */
525
+ closestSelector?: string;
526
+ /** extra context used by fullscreen runtime (entries only) */
527
+ getEntryContext?: () => FullscreenEntryContext;
528
+ };
529
+ type GalleryCoreProps = {
530
+ children?: React$1.ReactNode;
531
+ /** tells add-ons which base layout is mounted */
532
+ layout: CoreLayout;
533
+ /** optional breakpoint override */
534
+ breakpoints?: BreakpointMap;
535
+ /**
536
+ * optional: provide fullscreen/media items centrally.
537
+ * - If MediaItem[], use as-is
538
+ * - If string[], will be converted via toMediaItems()
539
+ */
540
+ fullscreenItems?: MediaItem[] | string[];
541
+ /**
542
+ * optional: if user passes children nodes (e.g. SliderLayout children),
543
+ * core can manage them as cells.
544
+ *
545
+ * NOTE: This is intentionally "opt-in" to keep core generic.
546
+ */
547
+ nodes?: React$1.ReactNode | React$1.ReactNode[];
548
+ };
549
+ /** Provider (internal name kept for clarity) */
550
+ declare function GalleryCoreProvider(props: GalleryCoreProps): react_jsx_runtime.JSX.Element;
551
+ type GalleryCore = {
552
+ layout: CoreLayout;
553
+ effectiveBreakpoints: BreakpointMap;
554
+ cellsState: Cell[];
555
+ cellsRef: React$1.RefObject<Cell[]>;
556
+ normalizedItems: MediaItem[];
557
+ setNormalizedItems: React$1.Dispatch<React$1.SetStateAction<MediaItem[]>>;
558
+ sliderApiRef: React$1.RefObject<SliderHandle | null>;
559
+ append: (nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
560
+ prepend: (nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
561
+ insert: (index: number, nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
562
+ remove: (index: number) => number;
563
+ replace: (index: number, node: React$1.ReactNode) => void;
564
+ setItems: (nodes: React$1.ReactNode[]) => number;
565
+ requestFullscreenOpen: (req: FullscreenOpenRequest) => void;
566
+ fsOpenSub: {
567
+ emit(v: FullscreenOpenRequest): void;
568
+ subscribe(fn: (v: FullscreenOpenRequest) => void): () => void;
569
+ };
570
+ isFullscreenOpen: boolean;
571
+ isFullscreenOpenRef: React$1.RefObject<boolean>;
572
+ setFullscreenOpen: (open: boolean) => void;
573
+ registerFullscreenAdapter: (source: FullscreenSource, a: FullscreenSourceAdapter) => void;
574
+ getFullscreenAdapter: (source: FullscreenSource) => FullscreenSourceAdapter | null;
575
+ expandableImgRefs: React$1.RefObject<Array<HTMLImageElement | null>>;
576
+ registerExpandableImg: (index: number, node: HTMLElement | null) => void;
577
+ };
578
+ /** ✅ Option A: public component alias */
579
+ declare const GalleryCore: typeof GalleryCoreProvider;
206
580
 
207
581
  type FsCounterArgs = {
208
582
  index: number;
209
583
  count: number;
210
584
  };
211
585
  type FsCaptionPlacement = "top" | "right" | "bottom" | "left";
586
+ type FsIntroRequest = null | {
587
+ origImg: HTMLImageElement;
588
+ index: number;
589
+ closestSelector?: string;
590
+ };
212
591
  type FSImageRender = (args: {
213
592
  item: Extract<MediaItem, {
214
593
  kind: "image";
@@ -301,22 +680,107 @@ type FullscreenOptions = {
301
680
  effects?: FullscreenEffectsOptions;
302
681
  };
303
682
 
304
- type MasonryOptions = {
305
- columns?: ResponsiveNumber;
306
- gap?: ResponsiveNumber;
307
- placement?: "balanced" | "roundRobin";
308
- estimatedItemHeight?: number;
309
- as?: React.ElementType;
310
- rootRef?: React.Ref<HTMLDivElement>;
311
- classNames?: {
312
- root?: string;
313
- column?: string;
314
- item?: string;
683
+ type UseFullscreenArgs = {
684
+ fullscreen?: FullscreenOptions;
685
+ slider?: SliderOptions;
686
+ sliderObject: any;
687
+ cellsStateLength: number;
688
+ };
689
+ declare function useFullscreenController(args: UseFullscreenArgs): {
690
+ fs: {
691
+ slider: {
692
+ duration: number;
693
+ friction: number;
694
+ };
695
+ zoom: {
696
+ clickZoomLevel: number;
697
+ maxZoomLevel: number;
698
+ panDuration: number;
699
+ panFriction: number;
700
+ };
701
+ effects: {
702
+ introDuration: number;
703
+ introEasing: string;
704
+ introFade: boolean;
705
+ slideFade: boolean;
706
+ slideFadeDuration: number;
707
+ slideFadeEasing: string;
708
+ thumbnailsFadeDuration: number;
709
+ thumbnailsFadeEasing: string;
710
+ };
711
+ controls: {
712
+ close?: FullscreenClose;
713
+ arrows?: FullscreenArrows;
714
+ counter?: FullscreenCounter;
715
+ };
716
+ caption: {
717
+ className?: string;
718
+ style?: React__default.CSSProperties;
719
+ placement?: FsCaptionPlacement;
720
+ width?: number;
721
+ height?: number;
722
+ breakpoint?: number;
723
+ render?: (args: FsCaptionRenderArgs) => React__default.ReactNode;
724
+ };
725
+ thumbnails: {
726
+ children?: React__default.ReactNode;
727
+ layout?: ThumbnailsLayout;
728
+ elements?: ThumbnailsElements;
729
+ scroll?: ThumbnailsScroll;
730
+ controls?: ThumbnailsControls;
731
+ motion?: ThumbnailsMotion;
732
+ transitions?: ThumbnailsTransitions;
733
+ breakpointMap?: BreakpointMap;
734
+ };
735
+ enabled: boolean;
736
+ items?: MediaItem[] | string[];
737
+ renderImage?: FSImageRender;
738
+ video?: FullscreenVideoOptions;
315
739
  };
316
- loading?: LoadingOptions;
317
- intro?: IntroOptions;
740
+ fullscreenNode: react_jsx_runtime.JSX.Element | null;
741
+ openFullscreenAt: (source: FullscreenOpenRequest["source"], gridIndex: number, originEl?: HTMLElement | null) => void;
742
+ isClick: React__default.RefObject<boolean>;
743
+ expandableImgRefs: React__default.RefObject<(HTMLImageElement | null)[]>;
744
+ overlayDivRef: React__default.RefObject<HTMLDivElement | null>;
745
+ duplicateImgRef: React__default.RefObject<HTMLElement | null>;
746
+ closeButtonRef: React__default.RefObject<HTMLElement | null>;
747
+ counterRef: React__default.RefObject<HTMLElement | null>;
748
+ leftChevronRef: React__default.RefObject<HTMLElement | null>;
749
+ rightChevronRef: React__default.RefObject<HTMLElement | null>;
750
+ sliderForFullscreen: React__default.RefObject<HTMLDivElement | null>;
751
+ slidesForFullscreen: React__default.RefObject<{
752
+ cells: {
753
+ element: HTMLElement;
754
+ index: number;
755
+ }[];
756
+ target: number;
757
+ }[]>;
758
+ visibleImagesForFullscreen: React__default.RefObject<number>;
759
+ selectedIndexForFullscreen: React__default.RefObject<number>;
760
+ sliderXForFullscreen: React__default.RefObject<number>;
761
+ sliderVelocityForFullscreen: React__default.RefObject<number>;
762
+ isWrappingForFullscreen: React__default.RefObject<boolean>;
763
+ fsThumbContainerRef: React__default.RefObject<HTMLDivElement | null>;
764
+ cells: React__default.RefObject<{
765
+ element: HTMLElement;
766
+ index: number;
767
+ }[]>;
768
+ setSlideIndex: React__default.Dispatch<React__default.SetStateAction<number>>;
769
+ setShowFullscreenModal: React__default.Dispatch<React__default.SetStateAction<boolean>>;
770
+ setShowFullscreenSlider: React__default.Dispatch<React__default.SetStateAction<boolean>>;
771
+ setFsFadeOpening: React__default.Dispatch<React__default.SetStateAction<boolean>>;
772
+ showFullscreenModal: boolean;
773
+ showFullscreenSlider: boolean;
774
+ fsFadeOpening: boolean;
775
+ closingModal: boolean;
318
776
  };
319
777
 
778
+ declare const SliderLayout: React$1.ForwardRefExoticComponent<SliderOptions & {
779
+ children?: React$1.ReactNode;
780
+ breakpoints?: BreakpointMap;
781
+ expandableImgRefs?: React$1.RefObject<Array<HTMLImageElement | null>>;
782
+ } & React$1.RefAttributes<SliderHandle>>;
783
+
320
784
  type GridOptions = {
321
785
  columns?: ResponsiveNumber;
322
786
  minColumnWidth?: number | string;
@@ -327,184 +791,35 @@ type GridOptions = {
327
791
  intro?: IntroOptions;
328
792
  };
329
793
 
330
- type IndexMode = "instant" | "animated";
331
- interface GalleryApi {
332
- rootNode(): HTMLElement | null;
333
- containerNode(): HTMLElement | null;
334
- slideNodes(): HTMLElement[];
335
- onReady?(cb: (nodes: HTMLElement[]) => void): () => void;
336
- whenReady?(): Promise<HTMLElement[]>;
337
- isReady?(): boolean;
338
- scrollTo(index: number, jump?: boolean): void;
339
- scrollNext(jump?: boolean): void;
340
- scrollPrev(jump?: boolean): void;
341
- canScrollNext(): boolean;
342
- canScrollPrev(): boolean;
343
- getIndex(): number;
344
- selectCell(index: number, jump?: boolean): void;
345
- scrollProgress(): number;
346
- cellsInView(): number[];
347
- append(nodes: React.ReactNode | React.ReactNode[]): number;
348
- prepend(nodes: React.ReactNode | React.ReactNode[]): number;
349
- insert(index: number, nodes: React.ReactNode | React.ReactNode[]): number;
350
- remove(indexOrPredicate: number | ((i: number) => boolean)): number;
351
- replace(index: number, node: React.ReactNode): void;
352
- setItems(nodes: React.ReactNode[]): number;
353
- onIndexChange(cb: (i: number, meta: {
354
- mode: IndexMode;
355
- }) => void): () => void;
356
- }
357
-
358
- type ResponsiveHeightRule = {
359
- query: string;
360
- height: string;
361
- };
362
- type SliderLayout = {
363
- gap?: number;
364
- cellsPerSlide?: ResponsiveNumber;
365
- };
366
- type SliderDirection = {
367
- dir?: "ltr" | "rtl";
368
- axis?: "x" | "y";
369
- };
370
- type SliderSize = {
371
- height?: string;
372
- heightRules?: ResponsiveHeightRule[];
373
- initialHeight?: number | string;
374
- };
375
- type SliderElements = {
376
- viewport?: ElementStyle;
377
- container?: ElementStyle;
378
- };
379
- type SliderScroll = {
380
- groupCells?: boolean;
381
- skipSnaps?: boolean;
382
- freeScroll?: boolean;
383
- loop?: boolean;
384
- };
385
- type SliderArrows = {
386
- enabled?: boolean;
387
- arrow?: ElementStyle;
388
- prev?: ElementStyle;
389
- next?: ElementStyle;
390
- render?: (args: ArrowRenderArgs & {
391
- dir: "prev" | "next";
392
- }) => React.ReactNode;
393
- renderPrev?: (args: ArrowRenderArgs) => React.ReactNode;
394
- renderNext?: (args: ArrowRenderArgs) => React.ReactNode;
395
- };
396
- type SliderDots = {
397
- enabled?: boolean;
398
- root?: ElementStyle;
399
- dot?: ElementStyle;
400
- render?: (args: DotsRenderArgs) => React.ReactNode;
401
- };
402
- type SliderProgress = {
403
- enabled?: boolean;
404
- root?: ElementStyle;
405
- bar?: ElementStyle;
406
- render?: (args: ProgressRenderArgs) => React.ReactNode;
407
- };
408
- type SliderRipple = {
409
- enabled?: boolean;
410
- className?: string;
411
- };
412
- type SliderControls = {
413
- arrows?: SliderArrows;
414
- dots?: SliderDots;
415
- progress?: SliderProgress;
416
- ripple?: SliderRipple;
417
- };
418
- type SliderAutoPlay = {
419
- enabled?: boolean;
420
- speedMs?: number;
421
- pauseMs?: number;
422
- pauseOnHover?: boolean;
423
- };
424
- type SliderAutoScroll = {
425
- enabled?: boolean;
426
- speedMs?: number;
427
- pauseMs?: number;
428
- pauseOnHover?: boolean;
429
- };
430
- type SliderAuto = {
431
- play?: SliderAutoPlay;
432
- scroll?: SliderAutoScroll;
433
- };
434
- type SliderLoadingOptions = {
435
- isLoading?: boolean;
436
- skeletonCount?: ResponsiveNumber;
437
- renderLoading?: (args: {
438
- layout: "slider" | "grid" | "masonry" | "entries";
439
- count: number;
440
- }) => React.ReactNode;
441
- };
442
- type SliderIntroOptions = {
443
- renderIntro?: (args: {
444
- active: boolean;
445
- containerProps: React.HTMLAttributes<HTMLDivElement>;
446
- }, content: React.ReactNode) => React.ReactNode;
447
- staggerMs?: number;
448
- transform?: number | string;
449
- durationMs?: number;
450
- easing?: string;
451
- };
452
- type SliderTransitions = {
453
- loading?: SliderLoadingOptions;
454
- intro?: SliderIntroOptions;
455
- };
456
- type SliderParallax = {
457
- enabled?: boolean;
458
- bleedPct?: string;
459
- borderRadius?: string;
460
- sideWidth?: string;
461
- };
462
- type SliderScale = {
463
- enabled?: boolean;
464
- amount?: number;
465
- };
466
- type SliderFade = {
467
- enabled?: boolean;
468
- };
469
- type SliderEffects = {
470
- parallax?: SliderParallax;
471
- scale?: SliderScale;
472
- fade?: SliderFade;
473
- };
474
- type SliderMotion = {
475
- selectDuration?: number;
476
- freeScrollDuration?: number;
477
- friction?: number;
794
+ type Props$1 = GridOptions & {
795
+ children?: React$1.ReactNode;
796
+ breakpoints?: BreakpointMap;
797
+ gridItemBaseClass?: string;
798
+ renderMode?: "wrap" | "passthrough";
478
799
  };
479
- type SliderOptions = {
480
- layout?: SliderLayout;
481
- direction?: SliderDirection;
482
- size?: SliderSize;
483
- align?: "start" | "center";
484
- scroll?: SliderScroll;
485
- elements?: SliderElements;
486
- lazyLoad?: boolean;
487
- controls?: SliderControls;
488
- thumbnails?: ThumbnailsOptions;
489
- auto?: SliderAuto;
490
- transitions?: SliderTransitions;
491
- motion?: SliderMotion;
492
- effects?: SliderEffects;
800
+ declare function GridLayoutRuntime(props: Props$1): react_jsx_runtime.JSX.Element;
801
+
802
+ type MasonryOptions = {
803
+ columns?: ResponsiveNumber;
804
+ gap?: ResponsiveNumber;
805
+ placement?: "balanced" | "roundRobin";
806
+ estimatedItemHeight?: number;
807
+ as?: React.ElementType;
808
+ rootRef?: React.Ref<HTMLDivElement>;
809
+ classNames?: {
810
+ root?: string;
811
+ column?: string;
812
+ item?: string;
813
+ };
814
+ loading?: LoadingOptions;
815
+ intro?: IntroOptions;
493
816
  };
494
817
 
495
- type Props = {
496
- children?: ReactNode;
497
- fullscreen?: FullscreenOptions;
498
- slider?: SliderOptions;
499
- layout?: 'slider' | 'grid' | 'masonry' | 'entries';
500
- grid?: GridOptions;
501
- masonry?: MasonryOptions;
502
- entries?: EntriesOptions;
818
+ type Props = MasonryOptions & {
819
+ children?: React$1.ReactNode;
503
820
  breakpoints?: BreakpointMap;
504
- root?: ElementStyle;
505
- container?: ElementStyle;
506
821
  };
507
- declare const Gallery: React__default.ForwardRefExoticComponent<Props & React__default.RefAttributes<GalleryApi>>;
822
+ declare function MasonryLayoutRuntime(props: Props): react_jsx_runtime.JSX.Element;
508
823
 
509
824
  type RmgPlyrSourceBuilder = (args: {
510
825
  src: string;
@@ -531,4 +846,124 @@ type RmgPlyrVideoProps = {
531
846
  };
532
847
  declare function RmgPlyrVideo(props: RmgPlyrVideoProps): react_jsx_runtime.JSX.Element;
533
848
 
534
- export { Gallery, RmgPlyrVideo };
849
+ declare function PanAxis(): {
850
+ scroll: "x";
851
+ cross: "y";
852
+ direction(n: number): number;
853
+ };
854
+ type PanAxisType = ReturnType<typeof PanAxis>;
855
+
856
+ declare const DEFAULT_SLIDER: {
857
+ readonly layout: {
858
+ readonly gap: 20;
859
+ };
860
+ readonly direction: {
861
+ readonly dir: "ltr";
862
+ readonly axis: "x";
863
+ };
864
+ readonly align: "start";
865
+ readonly scroll: {
866
+ readonly groupCells: false;
867
+ readonly skipSnaps: false;
868
+ readonly freeScroll: false;
869
+ readonly loop: false;
870
+ };
871
+ readonly lazyLoad: false;
872
+ readonly controls: {
873
+ readonly arrows: {
874
+ readonly enabled: true;
875
+ readonly arrow: {};
876
+ readonly prev: {};
877
+ readonly next: {};
878
+ };
879
+ readonly dots: {
880
+ readonly enabled: true;
881
+ readonly root: {};
882
+ readonly dot: {};
883
+ };
884
+ readonly progress: {
885
+ readonly enabled: false;
886
+ readonly root: {};
887
+ readonly bar: {};
888
+ };
889
+ readonly ripple: {
890
+ readonly enabled: true;
891
+ readonly className: "";
892
+ };
893
+ };
894
+ readonly thumbnails: Required<Pick<ThumbnailsOptions, "layout" | "scroll" | "motion">>;
895
+ readonly auto: {
896
+ readonly play: {
897
+ readonly enabled: false;
898
+ readonly speedMs: 3000;
899
+ readonly pauseMs: 1000;
900
+ readonly pauseOnHover: true;
901
+ };
902
+ readonly scroll: {
903
+ readonly enabled: false;
904
+ readonly speedMs: 3000;
905
+ readonly pauseMs: 1000;
906
+ readonly pauseOnHover: true;
907
+ };
908
+ };
909
+ readonly motion: {
910
+ readonly selectDuration: 25;
911
+ readonly freeScrollDuration: 43;
912
+ readonly friction: 0.68;
913
+ };
914
+ };
915
+
916
+ declare const DEFAULT_GRID: Required<Pick<GridOptions, "minColumnWidth" | "gap">>;
917
+
918
+ declare const DEFAULT_MASONRY: Required<Pick<MasonryOptions, "placement">>;
919
+
920
+ declare const DEFAULT_FULLSCREEN: {
921
+ readonly enabled: false;
922
+ readonly controls: {
923
+ readonly close: {
924
+ readonly enabled: true;
925
+ readonly style: {};
926
+ readonly className: "";
927
+ readonly render: undefined;
928
+ };
929
+ readonly arrows: {
930
+ readonly enabled: true;
931
+ readonly arrow: {};
932
+ readonly prev: {};
933
+ readonly next: {};
934
+ readonly render: undefined;
935
+ readonly renderPrev: undefined;
936
+ readonly renderNext: undefined;
937
+ };
938
+ readonly counter: {
939
+ readonly enabled: true;
940
+ readonly style: {};
941
+ readonly className: "";
942
+ readonly render: undefined;
943
+ };
944
+ };
945
+ readonly effects: {
946
+ readonly introDuration: 300;
947
+ readonly introEasing: "cubic-bezier(.4,0,.22,1)";
948
+ readonly introFade: false;
949
+ readonly slideFade: false;
950
+ readonly slideFadeDuration: 120;
951
+ readonly slideFadeEasing: "cubic-bezier(.4,0,.22,1)";
952
+ readonly thumbnailsFadeDuration: 300;
953
+ readonly thumbnailsFadeEasing: "cubic-bezier(.4,0,.22,1)";
954
+ };
955
+ readonly thumbnails: {};
956
+ readonly slider: {
957
+ readonly duration: 25;
958
+ readonly friction: 0.68;
959
+ };
960
+ readonly zoom: {
961
+ readonly clickZoomLevel: 2.5;
962
+ readonly maxZoomLevel: 3;
963
+ readonly panDuration: 43;
964
+ readonly panFriction: 0.68;
965
+ };
966
+ readonly caption: {};
967
+ };
968
+
969
+ export { BREAKPOINT_MAP, DEFAULT_ENTRIES, DEFAULT_FULLSCREEN, DEFAULT_GRID, DEFAULT_MASONRY, DEFAULT_SLIDER, type ElementStyle, Entries, type EntriesOptions, type FsCaptionPlacement, type FsIntroRequest, type FullscreenOptions, type GalleryApi, GalleryCore, GridLayoutRuntime, type GridOptions, type IndexMode, MasonryLayoutRuntime, type MasonryOptions, type MediaEntryLink, type MediaItem, type PanAxisType, type ResponsiveHeightRule, RmgPlyrVideo, type SlideOwner, type SliderHandle, SliderLayout, type SliderOptions, flattenEntries, toMediaItems, useFullscreenController };