react-motion-gallery 2.0.4 → 2.0.6

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 = {
@@ -44,10 +44,7 @@ type ResponsivePosition = ThumbnailPosition | Array<ThumbnailPosition> | Record<
44
44
  type ThumbnailLoadingOptions = {
45
45
  isLoading?: boolean;
46
46
  skeletonCount?: ResponsiveNumber;
47
- renderLoading?: (args: {
48
- layout: "thumbnails";
49
- count: number;
50
- }) => React$1.ReactNode;
47
+ renderLoading?: () => React$1.ReactNode;
51
48
  };
52
49
  type ThumbnailIntroOptions = {
53
50
  renderIntro?: (args: {
@@ -121,6 +118,7 @@ type ThumbnailsOptions = {
121
118
  breakpointMap?: BreakpointMap;
122
119
  };
123
120
 
121
+ declare const BREAKPOINT_MAP: Record<string, number>;
124
122
  type BreakpointMap = Record<string, number>;
125
123
  type ResponsiveNumber = number | string | Array<number | string> | Record<string, number | string>;
126
124
 
@@ -140,25 +138,345 @@ type MediaItem = {
140
138
  thumb?: string;
141
139
  caption?: React.ReactNode;
142
140
  };
141
+ declare const toMediaItems: (urls: string[]) => MediaItem[];
143
142
 
144
- type LoadingOptions = {
143
+ type IndexMode = "instant" | "animated";
144
+ interface GalleryApi {
145
+ rootNode(): HTMLElement | null;
146
+ containerNode(): HTMLElement | null;
147
+ slideNodes(): HTMLElement[];
148
+ onReady?(cb: (nodes: HTMLElement[]) => void): () => void;
149
+ whenReady?(): Promise<HTMLElement[]>;
150
+ isReady?(): boolean;
151
+ scrollTo(index: number, jump?: boolean): void;
152
+ scrollNext(jump?: boolean): void;
153
+ scrollPrev(jump?: boolean): void;
154
+ canScrollNext(): boolean;
155
+ canScrollPrev(): boolean;
156
+ getIndex(): number;
157
+ selectCell(index: number, jump?: boolean): void;
158
+ scrollProgress(): number;
159
+ cellsInView(): number[];
160
+ append(nodes: React.ReactNode | React.ReactNode[]): number;
161
+ prepend(nodes: React.ReactNode | React.ReactNode[]): number;
162
+ insert(index: number, nodes: React.ReactNode | React.ReactNode[]): number;
163
+ remove(indexOrPredicate: number | ((i: number) => boolean)): number;
164
+ replace(index: number, node: React.ReactNode): void;
165
+ setItems(nodes: React.ReactNode[]): number;
166
+ onIndexChange(cb: (i: number, meta: {
167
+ mode: IndexMode;
168
+ }) => void): () => void;
169
+ }
170
+
171
+ type SkeletonLength$2 = number | string;
172
+ type SkeletonShimmer$2 = {
173
+ enabled?: boolean;
174
+ durationMs?: number;
175
+ bandSizePct?: number;
176
+ angleDeg?: number;
177
+ };
178
+ type SkeletonBaseStyle$2 = {
179
+ width?: SkeletonLength$2;
180
+ maxWidth?: SkeletonLength$2;
181
+ height?: SkeletonLength$2;
182
+ maxHeight?: SkeletonLength$2;
183
+ backgroundColor?: string;
184
+ borderRadius?: SkeletonLength$2;
185
+ marginTop?: SkeletonLength$2;
186
+ marginRight?: SkeletonLength$2;
187
+ marginBottom?: SkeletonLength$2;
188
+ marginLeft?: SkeletonLength$2;
189
+ alignSelf?: React$1.CSSProperties["alignSelf"];
190
+ aspectRatio?: SkeletonLength$2;
191
+ };
192
+ type SkeletonContainerStyle$2 = {
193
+ gap?: SkeletonLength$2;
194
+ padding?: SkeletonLength$2;
195
+ align?: React$1.CSSProperties["alignItems"];
196
+ justify?: React$1.CSSProperties["justifyContent"];
197
+ wrap?: boolean;
198
+ width?: SkeletonLength$2;
199
+ maxWidth?: SkeletonLength$2;
200
+ };
201
+ type SkeletonContainerStyleResponsive$2 = SkeletonContainerStyle$2 | Record<string, SkeletonContainerStyle$2>;
202
+ type SliderSkeletonNode = {
203
+ kind: "slider";
204
+ style?: SkeletonContainerStyleResponsive$2;
205
+ count?: number;
206
+ item: SkeletonNode$2;
207
+ itemWrapStyle?: SkeletonBaseStyle$2;
208
+ direction?: "row" | "col";
209
+ } | SkeletonNode$2;
210
+ type SkeletonNode$2 = {
211
+ kind: "stack" | "row" | "col";
212
+ style?: SkeletonContainerStyleResponsive$2;
213
+ children: SkeletonNode$2[];
214
+ } | {
215
+ kind: "rect" | "square" | "circle";
216
+ style?: SkeletonBaseStyle$2;
217
+ shimmer?: SkeletonShimmer$2;
218
+ } | {
219
+ kind: "media";
220
+ count: number;
221
+ direction?: "row" | "col";
222
+ style?: SkeletonContainerStyleResponsive$2;
223
+ tile?: {
224
+ shape?: "rect" | "square" | "circle";
225
+ style?: SkeletonBaseStyle$2;
226
+ shimmer?: SkeletonShimmer$2;
227
+ };
228
+ };
229
+ type SliderSkeletonSpec = {
230
+ className?: string;
231
+ layout?: SliderSkeletonNode;
232
+ defaults?: {
233
+ backgroundColor?: string;
234
+ highlightColor?: string;
235
+ radius?: SkeletonLength$2;
236
+ shimmer?: SkeletonShimmer$2;
237
+ };
238
+ };
239
+
240
+ type ResponsiveHeightRule = {
241
+ query: string;
242
+ height: string;
243
+ };
244
+ type SliderLayout = {
245
+ gap?: number;
246
+ cellsPerSlide?: ResponsiveNumber;
247
+ };
248
+ type SliderDirection = {
249
+ dir?: "ltr" | "rtl";
250
+ axis?: "x" | "y";
251
+ };
252
+ type SliderSize = {
253
+ height?: string;
254
+ heightRules?: ResponsiveHeightRule[];
255
+ initialHeight?: number | string;
256
+ initialHeightRules?: ResponsiveHeightRule[];
257
+ aspectRatio?: number | `${number}/${number}` | `${number} / ${number}`;
258
+ };
259
+ type SliderElements = {
260
+ viewport?: ElementStyle;
261
+ container?: ElementStyle;
262
+ };
263
+ type SliderScroll = {
264
+ groupCells?: boolean;
265
+ skipSnaps?: boolean;
266
+ freeScroll?: boolean;
267
+ loop?: boolean;
268
+ };
269
+ type SliderArrows = {
270
+ enabled?: boolean;
271
+ arrow?: ElementStyle;
272
+ prev?: ElementStyle;
273
+ next?: ElementStyle;
274
+ render?: (args: ArrowRenderArgs & {
275
+ dir: "prev" | "next";
276
+ }) => React.ReactNode;
277
+ renderPrev?: (args: ArrowRenderArgs) => React.ReactNode;
278
+ renderNext?: (args: ArrowRenderArgs) => React.ReactNode;
279
+ };
280
+ type SliderDots = {
281
+ enabled?: boolean;
282
+ root?: ElementStyle;
283
+ dot?: ElementStyle;
284
+ render?: (args: DotsRenderArgs) => React.ReactNode;
285
+ };
286
+ type SliderProgress = {
287
+ enabled?: boolean;
288
+ root?: ElementStyle;
289
+ bar?: ElementStyle;
290
+ render?: (args: ProgressRenderArgs) => React.ReactNode;
291
+ };
292
+ type SliderRipple = {
293
+ enabled?: boolean;
294
+ className?: string;
295
+ };
296
+ type SliderControls = {
297
+ arrows?: SliderArrows;
298
+ dots?: SliderDots;
299
+ progress?: SliderProgress;
300
+ ripple?: SliderRipple;
301
+ };
302
+ type SliderAutoPlay = {
303
+ enabled?: boolean;
304
+ speedMs?: number;
305
+ pauseMs?: number;
306
+ pauseOnHover?: boolean;
307
+ };
308
+ type SliderAutoScroll = {
309
+ enabled?: boolean;
310
+ speedMs?: number;
311
+ pauseMs?: number;
312
+ pauseOnHover?: boolean;
313
+ };
314
+ type SliderAuto = {
315
+ play?: SliderAutoPlay;
316
+ scroll?: SliderAutoScroll;
317
+ };
318
+ type SliderLoadingOptions = {
145
319
  isLoading?: boolean;
146
320
  skeletonCount?: ResponsiveNumber;
147
- renderLoading?: (args: {
148
- layout: "slider" | "grid" | "masonry" | "entries";
149
- count: number;
150
- }) => React.ReactNode;
321
+ renderLoading?: () => React.ReactNode;
322
+ skeleton?: SliderSkeletonSpec;
323
+ shimmer?: {
324
+ radius?: number | string;
325
+ c1?: string;
326
+ c2?: string;
327
+ c3?: string;
328
+ size?: string;
329
+ duration?: string;
330
+ timing?: string;
331
+ };
151
332
  };
152
- type IntroOptions = {
333
+ type SliderIntroOptions = {
153
334
  renderIntro?: (args: {
154
335
  active: boolean;
155
336
  containerProps: React.HTMLAttributes<HTMLDivElement>;
156
337
  }, content: React.ReactNode) => React.ReactNode;
157
338
  staggerMs?: number;
158
- transform?: string;
339
+ transform?: number | string;
159
340
  durationMs?: number;
160
341
  easing?: string;
161
- staggerLimit?: number;
342
+ };
343
+ type SliderTransitions = {
344
+ loading?: SliderLoadingOptions;
345
+ intro?: SliderIntroOptions;
346
+ };
347
+ type SliderParallax = {
348
+ enabled?: boolean;
349
+ bleedPct?: string;
350
+ borderRadius?: string;
351
+ sideWidth?: string;
352
+ };
353
+ type SliderScale = {
354
+ enabled?: boolean;
355
+ amount?: number;
356
+ };
357
+ type SliderFade = {
358
+ enabled?: boolean;
359
+ };
360
+ type SliderEffects = {
361
+ parallax?: SliderParallax;
362
+ scale?: SliderScale;
363
+ fade?: SliderFade;
364
+ };
365
+ type SliderMotion = {
366
+ selectDuration?: number;
367
+ freeScrollDuration?: number;
368
+ friction?: number;
369
+ };
370
+ type SliderOptions = {
371
+ layout?: SliderLayout;
372
+ direction?: SliderDirection;
373
+ size?: SliderSize;
374
+ align?: "start" | "center";
375
+ scroll?: SliderScroll;
376
+ elements?: SliderElements;
377
+ lazyLoad?: boolean;
378
+ controls?: SliderControls;
379
+ thumbnails?: ThumbnailsOptions;
380
+ auto?: SliderAuto;
381
+ transitions?: SliderTransitions;
382
+ motion?: SliderMotion;
383
+ effects?: SliderEffects;
384
+ };
385
+ interface SliderHandle {
386
+ centerSlider: () => void;
387
+ getIndex: () => number;
388
+ setIndex: (i: number, mode?: IndexMode) => void;
389
+ subscribeIndex: (fn: () => void) => () => void;
390
+ slideIndexForCell: (cellIndex: number) => number;
391
+ getRootNode(): HTMLElement | null;
392
+ getContainerNode(): HTMLElement | null;
393
+ getSlideNodes(): HTMLElement[];
394
+ onSlidesBuilt(cb: (nodes: HTMLElement[]) => void): () => void;
395
+ whenSlidesBuilt(): Promise<HTMLElement[]>;
396
+ isSlidesBuilt(): boolean;
397
+ scrollNext: (mode?: IndexMode) => void;
398
+ scrollPrev: (mode?: IndexMode) => void;
399
+ canScrollNext: () => boolean;
400
+ canScrollPrev: () => boolean;
401
+ scrollProgress: () => number;
402
+ cellsInView: () => number[];
403
+ getInternals(): {
404
+ slides: RefObject<{
405
+ cells: {
406
+ element: HTMLElement;
407
+ index: number;
408
+ }[];
409
+ target: number;
410
+ }[]>;
411
+ slider: RefObject<HTMLDivElement | null>;
412
+ visibleImages: RefObject<number>;
413
+ selectedIndex: RefObject<number>;
414
+ sliderX: RefObject<number>;
415
+ sliderVelocity: RefObject<number>;
416
+ isWrapping: RefObject<boolean>;
417
+ };
418
+ }
419
+
420
+ type SkeletonLength$1 = number | string;
421
+ type SkeletonShimmer$1 = {
422
+ enabled?: boolean;
423
+ durationMs?: number;
424
+ bandSizePct?: number;
425
+ angleDeg?: number;
426
+ };
427
+ type SkeletonBaseStyle$1 = {
428
+ width?: SkeletonLength$1;
429
+ maxWidth?: SkeletonLength$1;
430
+ height?: SkeletonLength$1;
431
+ maxHeight?: SkeletonLength$1;
432
+ backgroundColor?: string;
433
+ borderRadius?: SkeletonLength$1;
434
+ marginTop?: SkeletonLength$1;
435
+ marginRight?: SkeletonLength$1;
436
+ marginBottom?: SkeletonLength$1;
437
+ marginLeft?: SkeletonLength$1;
438
+ alignSelf?: React$1.CSSProperties["alignSelf"];
439
+ aspectRatio?: number | string;
440
+ };
441
+ type SkeletonContainerStyle$1 = {
442
+ gap?: SkeletonLength$1;
443
+ padding?: SkeletonLength$1;
444
+ align?: React$1.CSSProperties["alignItems"];
445
+ justify?: React$1.CSSProperties["justifyContent"];
446
+ wrap?: boolean;
447
+ width?: SkeletonLength$1;
448
+ maxWidth?: SkeletonLength$1;
449
+ };
450
+ type SkeletonContainerStyleResponsive$1 = SkeletonContainerStyle$1 | Record<string, SkeletonContainerStyle$1>;
451
+ type SkeletonNode$1 = {
452
+ kind: "stack" | "row" | "col";
453
+ style?: SkeletonContainerStyleResponsive$1;
454
+ children: SkeletonNode$1[];
455
+ } | {
456
+ kind: "rect" | "square" | "circle";
457
+ style?: SkeletonBaseStyle$1;
458
+ shimmer?: SkeletonShimmer$1;
459
+ } | {
460
+ kind: "media";
461
+ count: number;
462
+ direction?: "row" | "col";
463
+ style?: SkeletonContainerStyleResponsive$1;
464
+ tile?: {
465
+ shape?: "rect" | "square" | "circle";
466
+ style?: SkeletonBaseStyle$1;
467
+ shimmer?: SkeletonShimmer$1;
468
+ };
469
+ };
470
+ type EntrySkeletonSpec = {
471
+ layout?: SkeletonNode$1;
472
+ variant?: "solid";
473
+ minHeight?: SkeletonLength$1;
474
+ defaults?: {
475
+ backgroundColor?: string;
476
+ highlightColor?: string;
477
+ radius?: SkeletonLength$1;
478
+ shimmer?: SkeletonShimmer$1;
479
+ };
162
480
  };
163
481
 
164
482
  type EntryItem = {
@@ -191,6 +509,35 @@ type EntryCardRenderArgs = {
191
509
  entryIndex: number;
192
510
  media: React.ReactNode;
193
511
  };
512
+ type EntrySkeletonResolverArgs = {
513
+ entry: EntryItem;
514
+ entryIndex: number;
515
+ };
516
+ type EntriesLoadingOptions = {
517
+ isLoading?: boolean;
518
+ skeleton?: EntrySkeletonSpec | ((args: EntrySkeletonResolverArgs) => EntrySkeletonSpec | null | undefined);
519
+ minHeight?: SkeletonLength$1;
520
+ nearMargin?: string;
521
+ viewMargin?: string;
522
+ threshold?: number;
523
+ waitForDecode?: boolean;
524
+ decodeTimeoutMs?: number;
525
+ skeletonWrap?: ElementStyle;
526
+ };
527
+ type IntroOptions$2 = {
528
+ renderIntro?: (args: {
529
+ active: boolean;
530
+ containerProps: React.HTMLAttributes<HTMLDivElement>;
531
+ }, content: React.ReactNode) => React.ReactNode;
532
+ staggerMs?: number;
533
+ durationMs?: number;
534
+ easing?: string;
535
+ staggerLimit?: number;
536
+ };
537
+ type EntrySkeletonRenderArgs = {
538
+ entry: EntryItem;
539
+ entryIndex: number;
540
+ };
194
541
  type EntriesOptions = {
195
542
  items?: EntryItem[];
196
543
  mediaLayout?: EntryMediaLayout;
@@ -198,17 +545,130 @@ type EntriesOptions = {
198
545
  card?: (args: EntryCardRenderArgs) => React.ReactNode;
199
546
  media?: (args: EntryMediaRenderArgs) => React.ReactNode;
200
547
  overlay?: (args: EntryOverlayRenderArgs) => React.ReactNode;
548
+ skeleton?: (args: EntrySkeletonRenderArgs) => React.ReactNode;
201
549
  };
202
550
  overlay?: ElementStyle;
203
- loading?: LoadingOptions;
204
- intro?: IntroOptions;
551
+ loading?: EntriesLoadingOptions;
552
+ intro?: IntroOptions$2;
553
+ entryList?: ElementStyle;
554
+ entryRow?: ElementStyle;
555
+ };
556
+ type SlideOwner = {
557
+ entryIndex: number;
205
558
  };
206
559
 
560
+ declare const DEFAULT_ENTRIES: Required<Pick<EntriesOptions, "mediaLayout">>;
561
+
562
+ type EntriesMediaContainerRender = (args: {
563
+ entryIndex: number;
564
+ mediaNodes: React$1.ReactNode[];
565
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
566
+ }) => React$1.ReactNode;
567
+ type FullscreenItemsInput = MediaItem[] | string[];
568
+ declare function flattenEntries(items: EntryItem[] | undefined): {
569
+ flattenedMedia: MediaItem[];
570
+ flattenedMap: MediaEntryLink[];
571
+ entryFlatIndex: number[][] | null;
572
+ owners: SlideOwner[];
573
+ };
574
+ type EntriesProps = {
575
+ enabled?: boolean;
576
+ entries: EntriesOptions;
577
+ fullscreen?: {
578
+ enabled?: boolean;
579
+ items?: FullscreenItemsInput;
580
+ };
581
+ renderMediaContainer: EntriesMediaContainerRender;
582
+ nodeFromMedia?: (m: MediaItem) => React$1.ReactNode;
583
+ entryFlatIndexRef?: React$1.RefObject<number[][] | null>;
584
+ entryMapRef?: React$1.RefObject<MediaEntryLink[] | null>;
585
+ fsOwnersRef?: React$1.RefObject<SlideOwner[]>;
586
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
587
+ onOpenFullscreen?: (args: {
588
+ index: number;
589
+ img: HTMLImageElement;
590
+ event?: Event;
591
+ }) => void;
592
+ };
593
+ declare function Entries(props: EntriesProps): react_jsx_runtime.JSX.Element;
594
+
595
+ type FullscreenOpenRequest = {
596
+ source: "slider";
597
+ index: number;
598
+ img: HTMLImageElement | null;
599
+ event?: Event;
600
+ } | {
601
+ source: "grid" | "masonry" | "entries";
602
+ index: number;
603
+ img: HTMLImageElement | null;
604
+ event?: Event;
605
+ };
606
+ type CoreLayout = "slider" | "grid" | "masonry" | "entries";
607
+ type Cell = {
608
+ id: string;
609
+ node: React$1.ReactNode;
610
+ };
611
+ type FullscreenSource = FullscreenOpenRequest["source"];
612
+ type FullscreenEntryContext = {
613
+ entryMapRef?: React$1.RefObject<MediaEntryLink[] | null>;
614
+ entryMediaLayout?: "slider" | "grid" | "masonry";
615
+ entriesObject?: any;
616
+ entrySliderRefs?: React$1.RefObject<Array<SliderHandle | null>>;
617
+ expandableImgRefs?: React$1.RefObject<Array<HTMLImageElement | null>>;
618
+ };
619
+ type FullscreenSourceAdapter = {
620
+ getOwnerSliderHandle?: (index: number) => SliderHandle | null;
621
+ syncBeforeOpen?: (index: number) => void;
622
+ closestSelector?: string;
623
+ getEntryContext?: () => FullscreenEntryContext;
624
+ };
625
+ type GalleryCoreProps = {
626
+ children?: React$1.ReactNode;
627
+ layout: CoreLayout;
628
+ breakpoints?: BreakpointMap;
629
+ fullscreenItems?: MediaItem[] | string[];
630
+ nodes?: React$1.ReactNode | React$1.ReactNode[];
631
+ };
632
+ declare function GalleryCoreProvider(props: GalleryCoreProps): react_jsx_runtime.JSX.Element;
633
+ type GalleryCore = {
634
+ layout: CoreLayout;
635
+ effectiveBreakpoints: BreakpointMap;
636
+ cellsState: Cell[];
637
+ cellsRef: React$1.RefObject<Cell[]>;
638
+ normalizedItems: MediaItem[];
639
+ setNormalizedItems: React$1.Dispatch<React$1.SetStateAction<MediaItem[]>>;
640
+ sliderApiRef: React$1.RefObject<SliderHandle | null>;
641
+ append: (nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
642
+ prepend: (nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
643
+ insert: (index: number, nodes: React$1.ReactNode | React$1.ReactNode[]) => number;
644
+ remove: (index: number) => number;
645
+ replace: (index: number, node: React$1.ReactNode) => void;
646
+ setItems: (nodes: React$1.ReactNode[]) => number;
647
+ requestFullscreenOpen: (req: FullscreenOpenRequest) => void;
648
+ fsOpenSub: {
649
+ emit(v: FullscreenOpenRequest): void;
650
+ subscribe(fn: (v: FullscreenOpenRequest) => void): () => void;
651
+ };
652
+ isFullscreenOpen: boolean;
653
+ isFullscreenOpenRef: React$1.RefObject<boolean>;
654
+ setFullscreenOpen: (open: boolean) => void;
655
+ registerFullscreenAdapter: (source: FullscreenSource, a: FullscreenSourceAdapter) => void;
656
+ getFullscreenAdapter: (source: FullscreenSource) => FullscreenSourceAdapter | null;
657
+ expandableImgRefs: React$1.RefObject<Array<HTMLImageElement | null>>;
658
+ registerExpandableImg: (index: number, node: HTMLElement | null) => void;
659
+ };
660
+ declare const GalleryCore: typeof GalleryCoreProvider;
661
+
207
662
  type FsCounterArgs = {
208
663
  index: number;
209
664
  count: number;
210
665
  };
211
666
  type FsCaptionPlacement = "top" | "right" | "bottom" | "left";
667
+ type FsIntroRequest = null | {
668
+ origImg: HTMLImageElement;
669
+ index: number;
670
+ closestSelector?: string;
671
+ };
212
672
  type FSImageRender = (args: {
213
673
  item: Extract<MediaItem, {
214
674
  kind: "image";
@@ -301,210 +761,268 @@ type FullscreenOptions = {
301
761
  effects?: FullscreenEffectsOptions;
302
762
  };
303
763
 
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;
764
+ type UseFullscreenArgs = {
765
+ fullscreen?: FullscreenOptions;
766
+ slider?: SliderOptions;
767
+ sliderObject: any;
768
+ cellsStateLength: number;
769
+ };
770
+ declare function useFullscreenController(args: UseFullscreenArgs): {
771
+ fs: {
772
+ slider: {
773
+ duration: number;
774
+ friction: number;
775
+ };
776
+ zoom: {
777
+ clickZoomLevel: number;
778
+ maxZoomLevel: number;
779
+ panDuration: number;
780
+ panFriction: number;
781
+ };
782
+ effects: {
783
+ introDuration: number;
784
+ introEasing: string;
785
+ introFade: boolean;
786
+ slideFade: boolean;
787
+ slideFadeDuration: number;
788
+ slideFadeEasing: string;
789
+ thumbnailsFadeDuration: number;
790
+ thumbnailsFadeEasing: string;
791
+ };
792
+ controls: {
793
+ close?: FullscreenClose;
794
+ arrows?: FullscreenArrows;
795
+ counter?: FullscreenCounter;
796
+ };
797
+ caption: {
798
+ className?: string;
799
+ style?: React__default.CSSProperties;
800
+ placement?: FsCaptionPlacement;
801
+ width?: number;
802
+ height?: number;
803
+ breakpoint?: number;
804
+ render?: (args: FsCaptionRenderArgs) => React__default.ReactNode;
805
+ };
806
+ thumbnails: {
807
+ children?: React__default.ReactNode;
808
+ layout?: ThumbnailsLayout;
809
+ elements?: ThumbnailsElements;
810
+ scroll?: ThumbnailsScroll;
811
+ controls?: ThumbnailsControls;
812
+ motion?: ThumbnailsMotion;
813
+ transitions?: ThumbnailsTransitions;
814
+ breakpointMap?: BreakpointMap;
815
+ };
816
+ enabled: boolean;
817
+ items?: MediaItem[] | string[];
818
+ renderImage?: FSImageRender;
819
+ video?: FullscreenVideoOptions;
315
820
  };
316
- loading?: LoadingOptions;
317
- intro?: IntroOptions;
821
+ fullscreenNode: react_jsx_runtime.JSX.Element | null;
822
+ openFullscreenAt: (source: FullscreenOpenRequest["source"], gridIndex: number, originEl?: HTMLElement | null) => void;
823
+ isClick: React__default.RefObject<boolean>;
824
+ expandableImgRefs: React__default.RefObject<(HTMLImageElement | null)[]>;
825
+ overlayDivRef: React__default.RefObject<HTMLDivElement | null>;
826
+ duplicateImgRef: React__default.RefObject<HTMLElement | null>;
827
+ closeButtonRef: React__default.RefObject<HTMLElement | null>;
828
+ counterRef: React__default.RefObject<HTMLElement | null>;
829
+ leftChevronRef: React__default.RefObject<HTMLElement | null>;
830
+ rightChevronRef: React__default.RefObject<HTMLElement | null>;
831
+ sliderForFullscreen: React__default.RefObject<HTMLDivElement | null>;
832
+ slidesForFullscreen: React__default.RefObject<{
833
+ cells: {
834
+ element: HTMLElement;
835
+ index: number;
836
+ }[];
837
+ target: number;
838
+ }[]>;
839
+ visibleImagesForFullscreen: React__default.RefObject<number>;
840
+ selectedIndexForFullscreen: React__default.RefObject<number>;
841
+ sliderXForFullscreen: React__default.RefObject<number>;
842
+ sliderVelocityForFullscreen: React__default.RefObject<number>;
843
+ isWrappingForFullscreen: React__default.RefObject<boolean>;
844
+ fsThumbContainerRef: React__default.RefObject<HTMLDivElement | null>;
845
+ cells: React__default.RefObject<{
846
+ element: HTMLElement;
847
+ index: number;
848
+ }[]>;
849
+ setSlideIndex: React__default.Dispatch<React__default.SetStateAction<number>>;
850
+ setShowFullscreenModal: React__default.Dispatch<React__default.SetStateAction<boolean>>;
851
+ setShowFullscreenSlider: React__default.Dispatch<React__default.SetStateAction<boolean>>;
852
+ setFsFadeOpening: React__default.Dispatch<React__default.SetStateAction<boolean>>;
853
+ showFullscreenModal: boolean;
854
+ showFullscreenSlider: boolean;
855
+ fsFadeOpening: boolean;
856
+ closingModal: boolean;
318
857
  };
319
858
 
320
- type GridOptions = {
321
- columns?: ResponsiveNumber;
322
- minColumnWidth?: number | string;
323
- gap?: ResponsiveNumber;
324
- rootClassName?: string;
325
- itemClassName?: string;
326
- loading?: LoadingOptions;
327
- intro?: IntroOptions;
328
- };
329
-
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
- }
859
+ declare const Slider: React$1.ForwardRefExoticComponent<SliderOptions & {
860
+ children?: React$1.ReactNode;
861
+ breakpoints?: BreakpointMap;
862
+ expandableImgRefs?: React$1.RefObject<Array<HTMLImageElement | null>>;
863
+ } & React$1.RefAttributes<SliderHandle>>;
357
864
 
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 = {
865
+ type SkeletonLength = number | string;
866
+ type SkeletonShimmer = {
397
867
  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;
868
+ durationMs?: number;
869
+ bandSizePct?: number;
870
+ angleDeg?: number;
871
+ };
872
+ type SkeletonBaseStyle = {
873
+ width?: SkeletonLength;
874
+ maxWidth?: SkeletonLength;
875
+ height?: SkeletonLength;
876
+ maxHeight?: SkeletonLength;
877
+ backgroundColor?: string;
878
+ borderRadius?: SkeletonLength;
879
+ marginTop?: SkeletonLength;
880
+ marginRight?: SkeletonLength;
881
+ marginBottom?: SkeletonLength;
882
+ marginLeft?: SkeletonLength;
883
+ alignSelf?: React$1.CSSProperties["alignSelf"];
884
+ aspectRatio?: SkeletonLength;
885
+ };
886
+ type SkeletonContainerStyle = {
887
+ gap?: SkeletonLength;
888
+ padding?: SkeletonLength;
889
+ align?: React$1.CSSProperties["alignItems"];
890
+ justify?: React$1.CSSProperties["justifyContent"];
891
+ wrap?: boolean;
892
+ width?: SkeletonLength;
893
+ maxWidth?: SkeletonLength;
894
+ };
895
+ type SkeletonContainerStyleResponsive = SkeletonContainerStyle | Record<string, SkeletonContainerStyle>;
896
+ type GridSkeletonNode = {
897
+ kind: "grid";
898
+ style?: SkeletonContainerStyleResponsive;
899
+ count?: number;
900
+ item: SkeletonNode;
901
+ itemWrapStyle?: SkeletonBaseStyle;
902
+ } | SkeletonNode;
903
+ type SkeletonNode = {
904
+ kind: "stack" | "row" | "col";
905
+ style?: SkeletonContainerStyleResponsive;
906
+ children: SkeletonNode[];
907
+ } | {
908
+ kind: "rect" | "square" | "circle";
909
+ style?: SkeletonBaseStyle;
910
+ shimmer?: SkeletonShimmer;
911
+ } | {
912
+ kind: "media";
913
+ count: number;
914
+ direction?: "row" | "col";
915
+ style?: SkeletonContainerStyleResponsive;
916
+ tile?: {
917
+ shape?: "rect" | "square" | "circle";
918
+ style?: SkeletonBaseStyle;
919
+ shimmer?: SkeletonShimmer;
920
+ };
407
921
  };
408
- type SliderRipple = {
409
- enabled?: boolean;
922
+ type GridSkeletonSpec = {
410
923
  className?: string;
924
+ layout?: GridSkeletonNode;
925
+ defaults?: {
926
+ backgroundColor?: string;
927
+ highlightColor?: string;
928
+ radius?: SkeletonLength;
929
+ shimmer?: SkeletonShimmer;
930
+ };
411
931
  };
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 = {
932
+
933
+ type LoadingOptions$1 = {
435
934
  isLoading?: boolean;
436
- skeletonCount?: ResponsiveNumber;
437
935
  renderLoading?: (args: {
438
- layout: "slider" | "grid" | "masonry" | "entries";
439
936
  count: number;
440
937
  }) => React.ReactNode;
938
+ skeleton?: GridSkeletonSpec;
939
+ shimmer?: {
940
+ paddingBottom?: string;
941
+ radius?: number | string;
942
+ c1?: string;
943
+ c2?: string;
944
+ c3?: string;
945
+ size?: string;
946
+ duration?: string;
947
+ timing?: string;
948
+ };
441
949
  };
442
- type SliderIntroOptions = {
950
+ type IntroOptions$1 = {
443
951
  renderIntro?: (args: {
444
952
  active: boolean;
445
953
  containerProps: React.HTMLAttributes<HTMLDivElement>;
446
954
  }, content: React.ReactNode) => React.ReactNode;
447
955
  staggerMs?: number;
448
- transform?: number | string;
956
+ transform?: string;
449
957
  durationMs?: number;
450
958
  easing?: string;
959
+ staggerLimit?: number;
451
960
  };
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;
961
+ type GridOptions = {
962
+ columns?: ResponsiveNumber;
963
+ minColumnWidth?: number | string;
964
+ gap?: ResponsiveNumber;
965
+ rootClassName?: string;
966
+ itemClassName?: string;
967
+ loading?: LoadingOptions$1;
968
+ intro?: IntroOptions$1;
465
969
  };
466
- type SliderFade = {
467
- enabled?: boolean;
970
+
971
+ type Props$1 = GridOptions & {
972
+ children?: React$1.ReactNode;
973
+ breakpoints?: BreakpointMap;
974
+ gridItemBaseClass?: string;
975
+ renderMode?: "wrap" | "passthrough";
468
976
  };
469
- type SliderEffects = {
470
- parallax?: SliderParallax;
471
- scale?: SliderScale;
472
- fade?: SliderFade;
977
+ declare function GridLayoutRuntime(props: Props$1): react_jsx_runtime.JSX.Element;
978
+
979
+ type LoadingOptions = {
980
+ isLoading?: boolean;
981
+ renderLoading?: () => React.ReactNode;
982
+ shimmer?: {
983
+ paddingBottom?: string;
984
+ radius?: number | string;
985
+ c1?: string;
986
+ c2?: string;
987
+ c3?: string;
988
+ size?: string;
989
+ duration?: string;
990
+ timing?: string;
991
+ };
992
+ ratios?: number[];
473
993
  };
474
- type SliderMotion = {
475
- selectDuration?: number;
476
- freeScrollDuration?: number;
477
- friction?: number;
994
+ type IntroOptions = {
995
+ renderIntro?: (args: {
996
+ active: boolean;
997
+ containerProps: React.HTMLAttributes<HTMLDivElement>;
998
+ }, content: React.ReactNode) => React.ReactNode;
999
+ staggerMs?: number;
1000
+ transform?: string;
1001
+ durationMs?: number;
1002
+ easing?: string;
1003
+ staggerLimit?: number;
478
1004
  };
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;
1005
+ type MasonryOptions = {
1006
+ columns?: ResponsiveNumber;
1007
+ gap?: ResponsiveNumber;
1008
+ placement?: "balanced" | "roundRobin";
1009
+ estimatedItemHeight?: number;
1010
+ as?: React.ElementType;
1011
+ rootRef?: React.Ref<HTMLDivElement>;
1012
+ classNames?: {
1013
+ root?: string;
1014
+ column?: string;
1015
+ item?: string;
1016
+ };
1017
+ loading?: LoadingOptions;
1018
+ intro?: IntroOptions;
493
1019
  };
494
1020
 
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;
1021
+ type Props = MasonryOptions & {
1022
+ children?: React$1.ReactNode;
503
1023
  breakpoints?: BreakpointMap;
504
- root?: ElementStyle;
505
- container?: ElementStyle;
506
1024
  };
507
- declare const Gallery: React__default.ForwardRefExoticComponent<Props & React__default.RefAttributes<GalleryApi>>;
1025
+ declare function Masonry(props: Props): react_jsx_runtime.JSX.Element;
508
1026
 
509
1027
  type RmgPlyrSourceBuilder = (args: {
510
1028
  src: string;
@@ -515,7 +1033,7 @@ type RmgPlyrOptionsResolver = any | ((args: {
515
1033
  poster?: string;
516
1034
  index: number;
517
1035
  }) => any);
518
- type RmgPlyrVideoProps = {
1036
+ type VideoProps = {
519
1037
  src: string;
520
1038
  poster?: string;
521
1039
  alt?: string;
@@ -529,6 +1047,126 @@ type RmgPlyrVideoProps = {
529
1047
  onApi?: (api: APITypes | null) => void;
530
1048
  registerApiByIndex?: (index: number, api: APITypes | null) => void;
531
1049
  };
532
- declare function RmgPlyrVideo(props: RmgPlyrVideoProps): react_jsx_runtime.JSX.Element;
1050
+ declare function Video(props: VideoProps): react_jsx_runtime.JSX.Element;
1051
+
1052
+ declare function PanAxis(): {
1053
+ scroll: "x";
1054
+ cross: "y";
1055
+ direction(n: number): number;
1056
+ };
1057
+ type PanAxisType = ReturnType<typeof PanAxis>;
1058
+
1059
+ declare const DEFAULT_SLIDER: {
1060
+ readonly layout: {
1061
+ readonly gap: 20;
1062
+ };
1063
+ readonly direction: {
1064
+ readonly dir: "ltr";
1065
+ readonly axis: "x";
1066
+ };
1067
+ readonly align: "start";
1068
+ readonly scroll: {
1069
+ readonly groupCells: false;
1070
+ readonly skipSnaps: false;
1071
+ readonly freeScroll: false;
1072
+ readonly loop: false;
1073
+ };
1074
+ readonly lazyLoad: false;
1075
+ readonly controls: {
1076
+ readonly arrows: {
1077
+ readonly enabled: true;
1078
+ readonly arrow: {};
1079
+ readonly prev: {};
1080
+ readonly next: {};
1081
+ };
1082
+ readonly dots: {
1083
+ readonly enabled: true;
1084
+ readonly root: {};
1085
+ readonly dot: {};
1086
+ };
1087
+ readonly progress: {
1088
+ readonly enabled: false;
1089
+ readonly root: {};
1090
+ readonly bar: {};
1091
+ };
1092
+ readonly ripple: {
1093
+ readonly enabled: true;
1094
+ readonly className: "";
1095
+ };
1096
+ };
1097
+ readonly thumbnails: Required<Pick<ThumbnailsOptions, "scroll" | "layout" | "motion">>;
1098
+ readonly auto: {
1099
+ readonly play: {
1100
+ readonly enabled: false;
1101
+ readonly speedMs: 3000;
1102
+ readonly pauseMs: 1000;
1103
+ readonly pauseOnHover: true;
1104
+ };
1105
+ readonly scroll: {
1106
+ readonly enabled: false;
1107
+ readonly speedMs: 3000;
1108
+ readonly pauseMs: 1000;
1109
+ readonly pauseOnHover: true;
1110
+ };
1111
+ };
1112
+ readonly motion: {
1113
+ readonly selectDuration: 25;
1114
+ readonly freeScrollDuration: 43;
1115
+ readonly friction: 0.68;
1116
+ };
1117
+ };
1118
+
1119
+ declare const DEFAULT_GRID: Required<Pick<GridOptions, "minColumnWidth" | "gap">>;
1120
+
1121
+ declare const DEFAULT_MASONRY: Required<Pick<MasonryOptions, "placement">>;
1122
+
1123
+ declare const DEFAULT_FULLSCREEN: {
1124
+ readonly enabled: false;
1125
+ readonly controls: {
1126
+ readonly close: {
1127
+ readonly enabled: true;
1128
+ readonly style: {};
1129
+ readonly className: "";
1130
+ readonly render: undefined;
1131
+ };
1132
+ readonly arrows: {
1133
+ readonly enabled: true;
1134
+ readonly arrow: {};
1135
+ readonly prev: {};
1136
+ readonly next: {};
1137
+ readonly render: undefined;
1138
+ readonly renderPrev: undefined;
1139
+ readonly renderNext: undefined;
1140
+ };
1141
+ readonly counter: {
1142
+ readonly enabled: true;
1143
+ readonly style: {};
1144
+ readonly className: "";
1145
+ readonly render: undefined;
1146
+ };
1147
+ };
1148
+ readonly effects: {
1149
+ readonly introDuration: 300;
1150
+ readonly introEasing: "cubic-bezier(.4,0,.22,1)";
1151
+ readonly introFade: false;
1152
+ readonly slideFade: false;
1153
+ readonly slideFadeDuration: 120;
1154
+ readonly slideFadeEasing: "cubic-bezier(.4,0,.22,1)";
1155
+ readonly thumbnailsFadeDuration: 300;
1156
+ readonly thumbnailsFadeEasing: "cubic-bezier(.4,0,.22,1)";
1157
+ };
1158
+ readonly thumbnails: {};
1159
+ readonly slider: {
1160
+ readonly duration: 25;
1161
+ readonly friction: 0.68;
1162
+ };
1163
+ readonly zoom: {
1164
+ readonly clickZoomLevel: 2.5;
1165
+ readonly maxZoomLevel: 3;
1166
+ readonly panDuration: 43;
1167
+ readonly panFriction: 0.68;
1168
+ };
1169
+ readonly caption: {};
1170
+ };
533
1171
 
534
- export { Gallery, RmgPlyrVideo };
1172
+ 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 as Grid, type GridOptions, type IndexMode, Masonry, type MasonryOptions, type MediaEntryLink, type MediaItem, type PanAxisType, type ResponsiveHeightRule, type SlideOwner, Slider, type SliderHandle, type SliderOptions, Video, flattenEntries, toMediaItems, useFullscreenController };