@one-am/react-native-simple-image-slider 0.16.1 → 1.0.0-beta.3
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/README.md +616 -19
- package/lib/commonjs/constants/layout.js +11 -0
- package/lib/commonjs/constants/layout.js.map +1 -0
- package/lib/commonjs/context/slider-context.js +47 -0
- package/lib/commonjs/context/slider-context.js.map +1 -0
- package/lib/commonjs/{utils/renderProp.js → context/slider-full-screen-context.js} +15 -8
- package/lib/commonjs/context/slider-full-screen-context.js.map +1 -0
- package/lib/commonjs/hooks/index.js +13 -0
- package/lib/commonjs/hooks/index.js.map +1 -0
- package/lib/commonjs/hooks/slider-state/index.js +40 -0
- package/lib/commonjs/hooks/slider-state/index.js.map +1 -0
- package/lib/commonjs/hooks/slider-state/use-slider-callbacks.js +63 -0
- package/lib/commonjs/hooks/slider-state/use-slider-callbacks.js.map +1 -0
- package/lib/commonjs/hooks/slider-state/use-slider-full-screen.js +24 -0
- package/lib/commonjs/hooks/slider-state/use-slider-full-screen.js.map +1 -0
- package/lib/commonjs/hooks/slider-state/use-slider-navigation.js +29 -0
- package/lib/commonjs/hooks/slider-state/use-slider-navigation.js.map +1 -0
- package/lib/commonjs/hooks/use-image-aspect-ratio.js +68 -0
- package/lib/commonjs/hooks/use-image-aspect-ratio.js.map +1 -0
- package/lib/commonjs/hooks/use-registered-callback.js +29 -0
- package/lib/commonjs/hooks/use-registered-callback.js.map +1 -0
- package/lib/commonjs/hooks/use-slider-state.js +72 -0
- package/lib/commonjs/hooks/use-slider-state.js.map +1 -0
- package/lib/commonjs/icons/{IconX.js → icon-x.js} +20 -26
- package/lib/commonjs/icons/icon-x.js.map +1 -0
- package/lib/commonjs/index.js +18 -47
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/internal/pinch-to-zoom.js +207 -0
- package/lib/commonjs/internal/pinch-to-zoom.js.map +1 -0
- package/lib/commonjs/primitives/index.js +62 -0
- package/lib/commonjs/primitives/index.js.map +1 -0
- package/lib/commonjs/primitives/slider-close-button.js +45 -0
- package/lib/commonjs/primitives/slider-close-button.js.map +1 -0
- package/lib/commonjs/primitives/slider-content.js +170 -0
- package/lib/commonjs/primitives/slider-content.js.map +1 -0
- package/lib/commonjs/{AbsoluteComponentContainer.js → primitives/slider-corner.js} +19 -19
- package/lib/commonjs/primitives/slider-corner.js.map +1 -0
- package/lib/commonjs/{PageCounter.js → primitives/slider-description.js} +22 -31
- package/lib/commonjs/primitives/slider-description.js.map +1 -0
- package/lib/commonjs/primitives/slider-empty.js +32 -0
- package/lib/commonjs/primitives/slider-empty.js.map +1 -0
- package/lib/commonjs/primitives/slider-full-screen.js +114 -0
- package/lib/commonjs/primitives/slider-full-screen.js.map +1 -0
- package/lib/commonjs/primitives/slider-page-counter.js +63 -0
- package/lib/commonjs/primitives/slider-page-counter.js.map +1 -0
- package/lib/commonjs/primitives/slider.js +31 -0
- package/lib/commonjs/primitives/slider.js.map +1 -0
- package/lib/{module/@types → commonjs/types}/common.js.map +1 -1
- package/lib/commonjs/{@types/slider.js → types/context.js} +1 -1
- package/lib/commonjs/{@types/slider.js.map → types/context.js.map} +1 -1
- package/lib/{module/@types → commonjs/types}/icons.js.map +1 -1
- package/lib/commonjs/types/index.js +2 -0
- package/lib/commonjs/types/index.js.map +1 -0
- package/lib/commonjs/types/pinch-to-zoom.js.map +1 -0
- package/lib/commonjs/types/slider-state.js +6 -0
- package/lib/commonjs/types/slider-state.js.map +1 -0
- package/lib/commonjs/utils/capitalize.js +10 -0
- package/lib/commonjs/utils/capitalize.js.map +1 -0
- package/lib/commonjs/utils/clamp.js.map +1 -1
- package/lib/module/constants/layout.js +7 -0
- package/lib/module/constants/layout.js.map +1 -0
- package/lib/module/context/slider-context.js +40 -0
- package/lib/module/context/slider-context.js.map +1 -0
- package/lib/module/context/slider-full-screen-context.js +19 -0
- package/lib/module/context/slider-full-screen-context.js.map +1 -0
- package/lib/module/hooks/index.js +4 -0
- package/lib/module/hooks/index.js.map +1 -0
- package/lib/module/hooks/slider-state/index.js +7 -0
- package/lib/module/hooks/slider-state/index.js.map +1 -0
- package/lib/module/hooks/slider-state/use-slider-callbacks.js +60 -0
- package/lib/module/hooks/slider-state/use-slider-callbacks.js.map +1 -0
- package/lib/module/hooks/slider-state/use-slider-full-screen.js +21 -0
- package/lib/module/hooks/slider-state/use-slider-full-screen.js.map +1 -0
- package/lib/module/hooks/slider-state/use-slider-navigation.js +25 -0
- package/lib/module/hooks/slider-state/use-slider-navigation.js.map +1 -0
- package/lib/module/hooks/use-image-aspect-ratio.js +64 -0
- package/lib/module/hooks/use-image-aspect-ratio.js.map +1 -0
- package/lib/module/hooks/use-registered-callback.js +26 -0
- package/lib/module/hooks/use-registered-callback.js.map +1 -0
- package/lib/module/hooks/use-slider-state.js +68 -0
- package/lib/module/hooks/use-slider-state.js.map +1 -0
- package/lib/module/icons/icon-x.js +32 -0
- package/lib/module/icons/icon-x.js.map +1 -0
- package/lib/module/index.js +2 -7
- package/lib/module/index.js.map +1 -1
- package/lib/module/internal/pinch-to-zoom.js +202 -0
- package/lib/module/internal/pinch-to-zoom.js.map +1 -0
- package/lib/module/primitives/index.js +11 -0
- package/lib/module/primitives/index.js.map +1 -0
- package/lib/module/primitives/slider-close-button.js +40 -0
- package/lib/module/primitives/slider-close-button.js.map +1 -0
- package/lib/module/primitives/slider-content.js +165 -0
- package/lib/module/primitives/slider-content.js.map +1 -0
- package/lib/module/{AbsoluteComponentContainer.js → primitives/slider-corner.js} +19 -18
- package/lib/module/primitives/slider-corner.js.map +1 -0
- package/lib/module/primitives/slider-description.js +31 -0
- package/lib/module/primitives/slider-description.js.map +1 -0
- package/lib/module/primitives/slider-empty.js +28 -0
- package/lib/module/primitives/slider-empty.js.map +1 -0
- package/lib/module/primitives/slider-full-screen.js +109 -0
- package/lib/module/primitives/slider-full-screen.js.map +1 -0
- package/lib/module/primitives/slider-page-counter.js +59 -0
- package/lib/module/primitives/slider-page-counter.js.map +1 -0
- package/lib/module/primitives/slider.js +27 -0
- package/lib/module/primitives/slider.js.map +1 -0
- package/lib/{commonjs/@types → module/types}/common.js.map +1 -1
- package/lib/module/types/context.js +4 -0
- package/lib/module/types/context.js.map +1 -0
- package/lib/{commonjs/@types → module/types}/icons.js.map +1 -1
- package/lib/module/types/index.js +2 -0
- package/lib/module/types/index.js.map +1 -0
- package/lib/module/types/pinch-to-zoom.js.map +1 -0
- package/lib/module/types/slider-state.js +4 -0
- package/lib/module/types/slider-state.js.map +1 -0
- package/lib/module/utils/capitalize.js +7 -0
- package/lib/module/utils/capitalize.js.map +1 -0
- package/lib/module/utils/clamp.js +2 -1
- package/lib/module/utils/clamp.js.map +1 -1
- package/lib/typescript/commonjs/package.json +1 -0
- package/lib/typescript/commonjs/src/__tests__/index.test.d.ts +1 -0
- package/lib/typescript/commonjs/src/__tests__/index.test.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/constants/layout.d.ts +5 -0
- package/lib/typescript/commonjs/src/constants/layout.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/context/slider-context.d.ts +8 -0
- package/lib/typescript/commonjs/src/context/slider-context.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/context/slider-full-screen-context.d.ts +6 -0
- package/lib/typescript/commonjs/src/context/slider-full-screen-context.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/index.d.ts +2 -0
- package/lib/typescript/commonjs/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/index.d.ts +5 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-callbacks.d.ts +6 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-callbacks.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-full-screen.d.ts +8 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-full-screen.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-navigation.d.ts +5 -0
- package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-navigation.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-image-aspect-ratio.d.ts +6 -0
- package/lib/typescript/commonjs/src/hooks/use-image-aspect-ratio.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-registered-callback.d.ts +8 -0
- package/lib/typescript/commonjs/src/hooks/use-registered-callback.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/hooks/use-slider-state.d.ts +4 -0
- package/lib/typescript/commonjs/src/hooks/use-slider-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/icons/icon-x.d.ts +6 -0
- package/lib/typescript/commonjs/src/icons/icon-x.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/index.d.ts +4 -0
- package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
- package/lib/typescript/{src/PinchToZoom.d.ts → commonjs/src/internal/pinch-to-zoom.d.ts} +9 -6
- package/lib/typescript/commonjs/src/internal/pinch-to-zoom.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/index.d.ts +17 -0
- package/lib/typescript/commonjs/src/primitives/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-close-button.d.ts +12 -0
- package/lib/typescript/commonjs/src/primitives/slider-close-button.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-content.d.ts +15 -0
- package/lib/typescript/commonjs/src/primitives/slider-content.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-corner.d.ts +12 -0
- package/lib/typescript/commonjs/src/primitives/slider-corner.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-description.d.ts +10 -0
- package/lib/typescript/commonjs/src/primitives/slider-description.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-empty.d.ts +10 -0
- package/lib/typescript/commonjs/src/primitives/slider-empty.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-full-screen.d.ts +10 -0
- package/lib/typescript/commonjs/src/primitives/slider-full-screen.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider-page-counter.d.ts +14 -0
- package/lib/typescript/commonjs/src/primitives/slider-page-counter.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/primitives/slider.d.ts +30 -0
- package/lib/typescript/commonjs/src/primitives/slider.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/common.d.ts +15 -0
- package/lib/typescript/commonjs/src/types/common.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/context.d.ts +25 -0
- package/lib/typescript/commonjs/src/types/context.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/icons.d.ts +8 -0
- package/lib/typescript/commonjs/src/types/icons.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/index.d.ts +6 -0
- package/lib/typescript/commonjs/src/types/index.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/pinch-to-zoom.d.ts +9 -0
- package/lib/typescript/commonjs/src/types/pinch-to-zoom.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/types/slider-state.d.ts +39 -0
- package/lib/typescript/commonjs/src/types/slider-state.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/capitalize.d.ts +3 -0
- package/lib/typescript/commonjs/src/utils/capitalize.d.ts.map +1 -0
- package/lib/typescript/commonjs/src/utils/clamp.d.ts +3 -0
- package/lib/typescript/commonjs/src/utils/clamp.d.ts.map +1 -0
- package/lib/typescript/module/package.json +1 -0
- package/lib/typescript/module/src/__tests__/index.test.d.ts +1 -0
- package/lib/typescript/module/src/__tests__/index.test.d.ts.map +1 -0
- package/lib/typescript/module/src/constants/layout.d.ts +5 -0
- package/lib/typescript/module/src/constants/layout.d.ts.map +1 -0
- package/lib/typescript/module/src/context/slider-context.d.ts +8 -0
- package/lib/typescript/module/src/context/slider-context.d.ts.map +1 -0
- package/lib/typescript/module/src/context/slider-full-screen-context.d.ts +6 -0
- package/lib/typescript/module/src/context/slider-full-screen-context.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/index.d.ts +2 -0
- package/lib/typescript/module/src/hooks/index.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/slider-state/index.d.ts +5 -0
- package/lib/typescript/module/src/hooks/slider-state/index.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-callbacks.d.ts +6 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-callbacks.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-full-screen.d.ts +8 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-full-screen.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-navigation.d.ts +5 -0
- package/lib/typescript/module/src/hooks/slider-state/use-slider-navigation.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-image-aspect-ratio.d.ts +6 -0
- package/lib/typescript/module/src/hooks/use-image-aspect-ratio.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-registered-callback.d.ts +8 -0
- package/lib/typescript/module/src/hooks/use-registered-callback.d.ts.map +1 -0
- package/lib/typescript/module/src/hooks/use-slider-state.d.ts +4 -0
- package/lib/typescript/module/src/hooks/use-slider-state.d.ts.map +1 -0
- package/lib/typescript/module/src/icons/icon-x.d.ts +6 -0
- package/lib/typescript/module/src/icons/icon-x.d.ts.map +1 -0
- package/lib/typescript/module/src/index.d.ts +4 -0
- package/lib/typescript/module/src/index.d.ts.map +1 -0
- package/lib/typescript/module/src/internal/pinch-to-zoom.d.ts +51 -0
- package/lib/typescript/module/src/internal/pinch-to-zoom.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/index.d.ts +17 -0
- package/lib/typescript/module/src/primitives/index.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-close-button.d.ts +12 -0
- package/lib/typescript/module/src/primitives/slider-close-button.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-content.d.ts +15 -0
- package/lib/typescript/module/src/primitives/slider-content.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-corner.d.ts +12 -0
- package/lib/typescript/module/src/primitives/slider-corner.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-description.d.ts +10 -0
- package/lib/typescript/module/src/primitives/slider-description.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-empty.d.ts +10 -0
- package/lib/typescript/module/src/primitives/slider-empty.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-full-screen.d.ts +10 -0
- package/lib/typescript/module/src/primitives/slider-full-screen.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider-page-counter.d.ts +14 -0
- package/lib/typescript/module/src/primitives/slider-page-counter.d.ts.map +1 -0
- package/lib/typescript/module/src/primitives/slider.d.ts +30 -0
- package/lib/typescript/module/src/primitives/slider.d.ts.map +1 -0
- package/lib/typescript/module/src/types/common.d.ts +15 -0
- package/lib/typescript/module/src/types/common.d.ts.map +1 -0
- package/lib/typescript/module/src/types/context.d.ts +25 -0
- package/lib/typescript/module/src/types/context.d.ts.map +1 -0
- package/lib/typescript/module/src/types/icons.d.ts +8 -0
- package/lib/typescript/module/src/types/icons.d.ts.map +1 -0
- package/lib/typescript/module/src/types/index.d.ts +6 -0
- package/lib/typescript/module/src/types/index.d.ts.map +1 -0
- package/lib/typescript/module/src/types/pinch-to-zoom.d.ts +9 -0
- package/lib/typescript/module/src/types/pinch-to-zoom.d.ts.map +1 -0
- package/lib/typescript/module/src/types/slider-state.d.ts +39 -0
- package/lib/typescript/module/src/types/slider-state.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/capitalize.d.ts +3 -0
- package/lib/typescript/module/src/utils/capitalize.d.ts.map +1 -0
- package/lib/typescript/module/src/utils/clamp.d.ts +3 -0
- package/lib/typescript/module/src/utils/clamp.d.ts.map +1 -0
- package/package.json +79 -91
- package/lib/commonjs/@types/pinch-to-zoom.js.map +0 -1
- package/lib/commonjs/AbsoluteComponentContainer.js.map +0 -1
- package/lib/commonjs/BaseSimpleImageSlider.js +0 -209
- package/lib/commonjs/BaseSimpleImageSlider.js.map +0 -1
- package/lib/commonjs/FullScreenImageSlider.js +0 -132
- package/lib/commonjs/FullScreenImageSlider.js.map +0 -1
- package/lib/commonjs/PageCounter.js.map +0 -1
- package/lib/commonjs/PinchToZoom.js +0 -174
- package/lib/commonjs/PinchToZoom.js.map +0 -1
- package/lib/commonjs/SimpleImageSlider.js +0 -79
- package/lib/commonjs/SimpleImageSlider.js.map +0 -1
- package/lib/commonjs/SimpleImageSliderThemeProvider.js +0 -40
- package/lib/commonjs/SimpleImageSliderThemeProvider.js.map +0 -1
- package/lib/commonjs/icons/IconX.js.map +0 -1
- package/lib/commonjs/utils/renderProp.js.map +0 -1
- package/lib/module/@types/pinch-to-zoom.js.map +0 -1
- package/lib/module/@types/slider.js +0 -4
- package/lib/module/@types/slider.js.map +0 -1
- package/lib/module/AbsoluteComponentContainer.js.map +0 -1
- package/lib/module/BaseSimpleImageSlider.js +0 -202
- package/lib/module/BaseSimpleImageSlider.js.map +0 -1
- package/lib/module/FullScreenImageSlider.js +0 -125
- package/lib/module/FullScreenImageSlider.js.map +0 -1
- package/lib/module/PageCounter.js +0 -39
- package/lib/module/PageCounter.js.map +0 -1
- package/lib/module/PinchToZoom.js +0 -168
- package/lib/module/PinchToZoom.js.map +0 -1
- package/lib/module/SimpleImageSlider.js +0 -72
- package/lib/module/SimpleImageSlider.js.map +0 -1
- package/lib/module/SimpleImageSliderThemeProvider.js +0 -33
- package/lib/module/SimpleImageSliderThemeProvider.js.map +0 -1
- package/lib/module/icons/IconX.js +0 -37
- package/lib/module/icons/IconX.js.map +0 -1
- package/lib/module/utils/renderProp.js +0 -12
- package/lib/module/utils/renderProp.js.map +0 -1
- package/lib/typescript/src/@types/common.d.ts +0 -1
- package/lib/typescript/src/@types/common.d.ts.map +0 -1
- package/lib/typescript/src/@types/icons.d.ts +0 -6
- package/lib/typescript/src/@types/icons.d.ts.map +0 -1
- package/lib/typescript/src/@types/pinch-to-zoom.d.ts +0 -8
- package/lib/typescript/src/@types/pinch-to-zoom.d.ts.map +0 -1
- package/lib/typescript/src/@types/slider.d.ts +0 -5
- package/lib/typescript/src/@types/slider.d.ts.map +0 -1
- package/lib/typescript/src/AbsoluteComponentContainer.d.ts +0 -7
- package/lib/typescript/src/AbsoluteComponentContainer.d.ts.map +0 -1
- package/lib/typescript/src/BaseSimpleImageSlider.d.ts +0 -126
- package/lib/typescript/src/BaseSimpleImageSlider.d.ts.map +0 -1
- package/lib/typescript/src/FullScreenImageSlider.d.ts +0 -58
- package/lib/typescript/src/FullScreenImageSlider.d.ts.map +0 -1
- package/lib/typescript/src/PageCounter.d.ts +0 -22
- package/lib/typescript/src/PageCounter.d.ts.map +0 -1
- package/lib/typescript/src/PinchToZoom.d.ts.map +0 -1
- package/lib/typescript/src/SimpleImageSlider.d.ts +0 -52
- package/lib/typescript/src/SimpleImageSlider.d.ts.map +0 -1
- package/lib/typescript/src/SimpleImageSliderThemeProvider.d.ts +0 -17
- package/lib/typescript/src/SimpleImageSliderThemeProvider.d.ts.map +0 -1
- package/lib/typescript/src/icons/IconX.d.ts +0 -5
- package/lib/typescript/src/icons/IconX.d.ts.map +0 -1
- package/lib/typescript/src/index.d.ts +0 -9
- package/lib/typescript/src/index.d.ts.map +0 -1
- package/lib/typescript/src/utils/clamp.d.ts +0 -2
- package/lib/typescript/src/utils/clamp.d.ts.map +0 -1
- package/lib/typescript/src/utils/renderProp.d.ts +0 -4
- package/lib/typescript/src/utils/renderProp.d.ts.map +0 -1
- package/src/@types/common.ts +0 -0
- package/src/@types/icons.ts +0 -6
- package/src/@types/pinch-to-zoom.ts +0 -7
- package/src/@types/slider.ts +0 -5
- package/src/AbsoluteComponentContainer.tsx +0 -30
- package/src/BaseSimpleImageSlider.tsx +0 -384
- package/src/FullScreenImageSlider.tsx +0 -203
- package/src/PageCounter.tsx +0 -67
- package/src/PinchToZoom.tsx +0 -345
- package/src/SimpleImageSlider.tsx +0 -110
- package/src/SimpleImageSliderThemeProvider.tsx +0 -49
- package/src/icons/IconX.tsx +0 -24
- package/src/index.tsx +0 -29
- package/src/utils/clamp.ts +0 -4
- package/src/utils/renderProp.tsx +0 -22
- /package/lib/commonjs/{@types → types}/common.js +0 -0
- /package/lib/commonjs/{@types → types}/icons.js +0 -0
- /package/lib/commonjs/{@types → types}/pinch-to-zoom.js +0 -0
- /package/lib/module/{@types → types}/common.js +0 -0
- /package/lib/module/{@types → types}/icons.js +0 -0
- /package/lib/module/{@types → types}/pinch-to-zoom.js +0 -0
package/README.md
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
# react-native-simple-image-slider
|
|
2
|
+
|
|
2
3
|
[](https://www.npmjs.com/package/@one-am/react-native-simple-image-slider)
|
|
3
4
|
[](LICENSE)
|
|
4
5
|
[](https://www.npmjs.com/package/@one-am/react-native-simple-image-slider)
|
|
5
6
|
|
|
6
|
-
A
|
|
7
|
-
and [expo-image](https://docs.expo.dev/versions/latest/sdk/image/)
|
|
8
|
-
Includes a full screen gallery component with gesture support.
|
|
7
|
+
A modern, compositional image slider for React Native built with [`@shopify/flash-list`](https://github.com/Shopify/flash-list) and [expo-image](https://docs.expo.dev/versions/latest/sdk/image/). Features a flexible component API inspired by shadcn/ui.
|
|
9
8
|
|
|
10
9
|

|
|
11
10
|
|
|
@@ -17,14 +16,14 @@ Includes a full screen gallery component with gesture support.
|
|
|
17
16
|
|
|
18
17
|
```shell
|
|
19
18
|
npx expo install @shopify/flash-list expo-image expo-haptics expo-status-bar react-native-reanimated react-native-svg \
|
|
20
|
-
react-native-gesture-handler react-native-safe-area-context @one-am/react-native-simple-image-slider
|
|
19
|
+
react-native-gesture-handler react-native-safe-area-context react-native-worklets @one-am/react-native-simple-image-slider
|
|
21
20
|
```
|
|
22
21
|
|
|
23
22
|
##### yarn
|
|
24
23
|
|
|
25
24
|
```shell
|
|
26
25
|
yarn dlx expo install @shopify/flash-list expo-image expo-haptics expo-status-bar react-native-reanimated react-native-svg \
|
|
27
|
-
react-native-gesture-handler react-native-safe-area-context @one-am/react-native-simple-image-slider
|
|
26
|
+
react-native-gesture-handler react-native-safe-area-context react-native-worklets @one-am/react-native-simple-image-slider
|
|
28
27
|
```
|
|
29
28
|
|
|
30
29
|
#### Non-Expo
|
|
@@ -33,35 +32,633 @@ yarn dlx expo install @shopify/flash-list expo-image expo-haptics expo-status-ba
|
|
|
33
32
|
|
|
34
33
|
```shell
|
|
35
34
|
npm install @shopify/flash-list expo-image expo-haptics expo-status-bar react-native-reanimated react-native-svg \
|
|
36
|
-
react-native-gesture-handler react-native-safe-area-context @one-am/react-native-simple-image-slider
|
|
35
|
+
react-native-gesture-handler react-native-safe-area-context react-native-worklets @one-am/react-native-simple-image-slider
|
|
37
36
|
```
|
|
38
37
|
|
|
39
38
|
##### yarn
|
|
40
39
|
|
|
41
40
|
```shell
|
|
42
41
|
yarn add @shopify/flash-list expo-image expo-haptics expo-status-bar react-native-reanimated react-native-svg \
|
|
43
|
-
react-native-gesture-handler react-native-safe-area-context @one-am/react-native-simple-image-slider
|
|
42
|
+
react-native-gesture-handler react-native-safe-area-context react-native-worklets @one-am/react-native-simple-image-slider
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Quick Start
|
|
46
|
+
|
|
47
|
+
```tsx
|
|
48
|
+
import {
|
|
49
|
+
Slider,
|
|
50
|
+
SliderContent,
|
|
51
|
+
SliderCorner,
|
|
52
|
+
SliderPageCounter,
|
|
53
|
+
SliderFullScreen,
|
|
54
|
+
SliderCloseButton,
|
|
55
|
+
SliderDescription,
|
|
56
|
+
} from '@one-am/react-native-simple-image-slider';
|
|
57
|
+
|
|
58
|
+
function Gallery() {
|
|
59
|
+
const images = [
|
|
60
|
+
{ key: '1', source: require('./photo1.jpg') },
|
|
61
|
+
{ key: '2', source: require('./photo2.jpg') },
|
|
62
|
+
{ key: '3', source: require('./photo3.jpg') },
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
return (
|
|
66
|
+
<Slider data={images} imageAspectRatio={16 / 9}>
|
|
67
|
+
<SliderContent />
|
|
68
|
+
<SliderCorner position="bottom-left">
|
|
69
|
+
<SliderPageCounter />
|
|
70
|
+
</SliderCorner>
|
|
71
|
+
<SliderFullScreen>
|
|
72
|
+
<SliderContent enablePinchToZoom />
|
|
73
|
+
<SliderCloseButton />
|
|
74
|
+
<SliderDescription
|
|
75
|
+
render={(item, index) => (
|
|
76
|
+
<Text style={{ color: '#fff' }}>Photo {index + 1}</Text>
|
|
77
|
+
)}
|
|
78
|
+
/>
|
|
79
|
+
</SliderFullScreen>
|
|
80
|
+
</Slider>
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Core Concepts
|
|
86
|
+
|
|
87
|
+
This library uses a **compositional API** where you build your slider by composing primitive components:
|
|
88
|
+
|
|
89
|
+
- **`Slider`** - Root component that provides context and manages state
|
|
90
|
+
- **`SliderContent`** - Renders the FlashList with images
|
|
91
|
+
- **`SliderPageCounter`** - Page indicator (e.g., "1 / 10")
|
|
92
|
+
- **`SliderCorner`** - Positioned container for custom overlays
|
|
93
|
+
- **`SliderFullScreen`** - Modal full-screen gallery
|
|
94
|
+
- **`SliderCloseButton`** - Close button for full-screen mode
|
|
95
|
+
- **`SliderDescription`** - Description overlay for full-screen
|
|
96
|
+
- **`SliderEmpty`** - Empty state component when no images are provided
|
|
97
|
+
|
|
98
|
+
## API Reference
|
|
99
|
+
|
|
100
|
+
### Slider
|
|
101
|
+
|
|
102
|
+
Root component that wraps all slider functionality.
|
|
103
|
+
|
|
104
|
+
#### Props
|
|
105
|
+
|
|
106
|
+
| Prop | Type | Default | Description |
|
|
107
|
+
| -------------------- | ----------------------------- | ----------------------------- | ----------------------------------------------------------------------- |
|
|
108
|
+
| `data` | `SliderItem[]` | **required** | Array of images with `key` and expo-image props |
|
|
109
|
+
| `children` | `ReactNode` | **required** | Child components (SliderContent, SliderPageCounter, etc.) |
|
|
110
|
+
| `imageAspectRatio` | `number` | auto-detect (fallback: `4/3`) | Aspect ratio for images. Auto-detected from first image if not provided |
|
|
111
|
+
| `initialIndex` | `number` | `0` | Initial image index to display |
|
|
112
|
+
| `statusBarStyle` | `'light' \| 'dark' \| 'auto'` | `'auto'` | Status bar style to restore when closing full screen |
|
|
113
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container style |
|
|
114
|
+
| `onIndexChange` | `(index: number) => void` | - | Callback when current index changes |
|
|
115
|
+
| `onItemPress` | `(item, index) => void` | - | Callback when an image is pressed |
|
|
116
|
+
| `onFullScreenChange` | `(isOpen: boolean) => void` | - | Callback when full-screen state changes |
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
### SliderContent
|
|
121
|
+
|
|
122
|
+
Renders the FlashList with images. Must be a child of `Slider`.
|
|
123
|
+
|
|
124
|
+
#### Props
|
|
125
|
+
|
|
126
|
+
| Prop | Type | Default | Description |
|
|
127
|
+
| ---------------------------- | ----------------------------------------------------------------- | ---------------------------------- | ----------------------------------------- |
|
|
128
|
+
| `enablePinchToZoom` | `boolean` | `false` | Enable pinch-to-zoom gestures |
|
|
129
|
+
| `imageStyle` | `StyleProp<ImageStyle>` | - | Style applied to all images |
|
|
130
|
+
| `maxItems` | `number` | - | Limit number of images displayed |
|
|
131
|
+
| `style` | `StyleProp<ViewStyle>` | - | Content container style |
|
|
132
|
+
| `imageAccessibilityLabel` | `string \| ((imageNumber: number, totalItems: number) => string)` | `"Image X of Y"` | Accessibility label for images |
|
|
133
|
+
| `pressableAccessibilityHint` | `string` | `"Double tap to open full screen"` | Accessibility hint for image press |
|
|
134
|
+
| `ref` | `Ref<FlashListRef<SliderItem>>` | - | Ref to FlashList for programmatic control |
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
### SliderPageCounter
|
|
139
|
+
|
|
140
|
+
Page indicator showing current/total (e.g., "1 / 10").
|
|
141
|
+
|
|
142
|
+
**Note:** To position `SliderPageCounter`, wrap it in `SliderCorner`.
|
|
143
|
+
|
|
144
|
+
#### Props
|
|
145
|
+
|
|
146
|
+
| Prop | Type | Default | Description |
|
|
147
|
+
| -------------------- | -------------------------------------------------------- | ---------------- | ------------------------------------ |
|
|
148
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container style override |
|
|
149
|
+
| `textStyle` | `StyleProp<TextStyle>` | - | Text style override |
|
|
150
|
+
| `accessibilityLabel` | `string \| ((current: number, total: number) => string)` | `"Image X of Y"` | Accessibility label for page counter |
|
|
151
|
+
| `backgroundColor` | `string` | `#D3D3D3` | Background color |
|
|
152
|
+
| `borderColor` | `string` | `#000000` | Border color |
|
|
153
|
+
| `textColor` | `string` | `#000000` | Text color |
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
### SliderCorner
|
|
158
|
+
|
|
159
|
+
Positioned container for custom components (badges, buttons, etc.).
|
|
160
|
+
|
|
161
|
+
#### Props
|
|
162
|
+
|
|
163
|
+
| Prop | Type | Default | Description |
|
|
164
|
+
| ---------- | -------------------------------------------------------------- | ------------ | ------------------------------- |
|
|
165
|
+
| `position` | `'top-left' \| 'top-right' \| 'bottom-left' \| 'bottom-right'` | **required** | Corner position |
|
|
166
|
+
| `children` | `ReactNode` | **required** | Content to display |
|
|
167
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container style |
|
|
168
|
+
| `offset` | `number` | `16` | Distance from screen edges (px) |
|
|
169
|
+
|
|
170
|
+
---
|
|
171
|
+
|
|
172
|
+
### SliderFullScreen
|
|
173
|
+
|
|
174
|
+
Modal wrapper for full-screen gallery. Automatically syncs with parent `Slider` state.
|
|
175
|
+
|
|
176
|
+
#### Props
|
|
177
|
+
|
|
178
|
+
| Prop | Type | Default | Description |
|
|
179
|
+
| ------------------ | ----------- | --------------------- | --------------------------------------------------------- |
|
|
180
|
+
| `children` | `ReactNode` | - | Child components (SliderContent, SliderCloseButton, etc.) |
|
|
181
|
+
| `imageAspectRatio` | `number` | inherited from parent | Aspect ratio for full-screen images |
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
### SliderCloseButton
|
|
186
|
+
|
|
187
|
+
Close button for full-screen mode. Must be inside `SliderFullScreen`.
|
|
188
|
+
|
|
189
|
+
#### Props
|
|
190
|
+
|
|
191
|
+
| Prop | Type | Default | Description |
|
|
192
|
+
| ---------- | ---------------------- | -------------- | --------------------- |
|
|
193
|
+
| `children` | `ReactNode` | default X icon | Custom icon component |
|
|
194
|
+
| `style` | `StyleProp<ViewStyle>` | - | Button style |
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
### SliderDescription
|
|
199
|
+
|
|
200
|
+
Description overlay for full-screen mode. Must be inside `SliderFullScreen`.
|
|
201
|
+
|
|
202
|
+
#### Props
|
|
203
|
+
|
|
204
|
+
| Prop | Type | Default | Description |
|
|
205
|
+
| -------- | ------------------------------------------------ | ------------ | ------------------------------- |
|
|
206
|
+
| `render` | `(item: SliderItem, index: number) => ReactNode` | **required** | Render function for description |
|
|
207
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container style |
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
### SliderEmpty
|
|
212
|
+
|
|
213
|
+
Empty state component displayed when no images are provided. Must be a child of `Slider`.
|
|
214
|
+
|
|
215
|
+
#### Props
|
|
216
|
+
|
|
217
|
+
| Prop | Type | Default | Description |
|
|
218
|
+
| ---------- | ---------------------- | ------------ | ----------------------------- |
|
|
219
|
+
| `children` | `ReactNode` | **required** | Content to display when empty |
|
|
220
|
+
| `style` | `StyleProp<ViewStyle>` | - | Container style |
|
|
221
|
+
|
|
222
|
+
#### Usage
|
|
223
|
+
|
|
224
|
+
```tsx
|
|
225
|
+
<Slider data={images}>
|
|
226
|
+
<SliderContent />
|
|
227
|
+
<SliderEmpty>
|
|
228
|
+
<Text>No images available</Text>
|
|
229
|
+
</SliderEmpty>
|
|
230
|
+
</Slider>
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## Advanced Usage
|
|
236
|
+
|
|
237
|
+
### Custom Corner Components
|
|
238
|
+
|
|
239
|
+
```tsx
|
|
240
|
+
<Slider data={images}>
|
|
241
|
+
<SliderContent />
|
|
242
|
+
<SliderCorner position="top-right">
|
|
243
|
+
<Badge text="NEW" />
|
|
244
|
+
</SliderCorner>
|
|
245
|
+
<SliderCorner position="bottom-right">
|
|
246
|
+
<FavoriteButton />
|
|
247
|
+
</SliderCorner>
|
|
248
|
+
</Slider>
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
### Custom Page Counter
|
|
252
|
+
|
|
253
|
+
```tsx
|
|
254
|
+
<SliderCorner position="top-right">
|
|
255
|
+
<SliderPageCounter
|
|
256
|
+
backgroundColor="#000000"
|
|
257
|
+
borderColor="#FFFFFF"
|
|
258
|
+
textColor="#FFFFFF"
|
|
259
|
+
textStyle={styles.customText}
|
|
260
|
+
accessibilityLabel={(current, total) => `Photo ${current} of ${total}`}
|
|
261
|
+
/>
|
|
262
|
+
</SliderCorner>
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
### Programmatic Scrolling
|
|
266
|
+
|
|
267
|
+
```tsx
|
|
268
|
+
import { useRef } from 'react';
|
|
269
|
+
import type { FlashListRef } from '@shopify/flash-list';
|
|
270
|
+
import type { SliderItem } from '@one-am/react-native-simple-image-slider';
|
|
271
|
+
|
|
272
|
+
function MyGallery() {
|
|
273
|
+
const sliderRef = useRef<FlashListRef<SliderItem>>(null);
|
|
274
|
+
|
|
275
|
+
const goToImage = (index: number) => {
|
|
276
|
+
sliderRef.current?.scrollToIndex({ index, animated: true });
|
|
277
|
+
};
|
|
278
|
+
|
|
279
|
+
return (
|
|
280
|
+
<Slider data={images}>
|
|
281
|
+
<SliderContent ref={sliderRef} />
|
|
282
|
+
<Button title="Go to Image 3" onPress={() => goToImage(2)} />
|
|
283
|
+
</Slider>
|
|
284
|
+
);
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Using Context with Custom Components
|
|
289
|
+
|
|
290
|
+
```tsx
|
|
291
|
+
import { useSlider } from '@one-am/react-native-simple-image-slider';
|
|
292
|
+
|
|
293
|
+
function NavigationButtons() {
|
|
294
|
+
const { currentIndex, totalItems, scrollToIndex } = useSlider();
|
|
295
|
+
|
|
296
|
+
return (
|
|
297
|
+
<View style={styles.nav}>
|
|
298
|
+
<Button
|
|
299
|
+
disabled={currentIndex === 0}
|
|
300
|
+
onPress={() => scrollToIndex(currentIndex - 1)}
|
|
301
|
+
title="Previous"
|
|
302
|
+
/>
|
|
303
|
+
<Button
|
|
304
|
+
disabled={currentIndex === totalItems - 1}
|
|
305
|
+
onPress={() => scrollToIndex(currentIndex + 1)}
|
|
306
|
+
title="Next"
|
|
307
|
+
/>
|
|
308
|
+
</View>
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// Usage
|
|
313
|
+
<Slider data={images}>
|
|
314
|
+
<SliderContent />
|
|
315
|
+
<NavigationButtons />
|
|
316
|
+
</Slider>;
|
|
317
|
+
```
|
|
318
|
+
|
|
319
|
+
### Minimal Gallery (No Full-Screen)
|
|
320
|
+
|
|
321
|
+
```tsx
|
|
322
|
+
<Slider data={images}>
|
|
323
|
+
<SliderContent />
|
|
324
|
+
<SliderCorner position="bottom-left">
|
|
325
|
+
<SliderPageCounter />
|
|
326
|
+
</SliderCorner>
|
|
327
|
+
</Slider>
|
|
328
|
+
```
|
|
329
|
+
|
|
330
|
+
### Full-Screen Only (No Inline Slider)
|
|
331
|
+
|
|
332
|
+
```tsx
|
|
333
|
+
function App() {
|
|
334
|
+
return (
|
|
335
|
+
<Slider data={images}>
|
|
336
|
+
<Button
|
|
337
|
+
onPress={() => {
|
|
338
|
+
/* trigger full-screen via context */
|
|
339
|
+
}}
|
|
340
|
+
>
|
|
341
|
+
View Gallery
|
|
342
|
+
</Button>
|
|
343
|
+
<SliderFullScreen>
|
|
344
|
+
<SliderContent enablePinchToZoom />
|
|
345
|
+
<SliderCloseButton />
|
|
346
|
+
</SliderFullScreen>
|
|
347
|
+
</Slider>
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
---
|
|
353
|
+
|
|
354
|
+
## Migration from v0.x to v1.0
|
|
355
|
+
|
|
356
|
+
Version 1.0 introduces a **compositional API** inspired by shadcn/ui, replacing the monolithic component approach. This provides greater flexibility and reduces bundle size by only including the components you use.
|
|
357
|
+
|
|
358
|
+
### Dependency Updates
|
|
359
|
+
|
|
360
|
+
First, update your dependencies to meet the new minimum versions:
|
|
361
|
+
|
|
362
|
+
#### Expo
|
|
363
|
+
|
|
364
|
+
```shell
|
|
365
|
+
npx expo install @shopify/flash-list expo-image expo-haptics expo-status-bar react-native-reanimated react-native-svg \
|
|
366
|
+
react-native-gesture-handler react-native-safe-area-context react-native-worklets @one-am/react-native-simple-image-slider
|
|
44
367
|
```
|
|
45
368
|
|
|
46
|
-
|
|
369
|
+
#### Non-Expo
|
|
370
|
+
|
|
371
|
+
```shell
|
|
372
|
+
npm install @shopify/flash-list@latest react-native-reanimated@latest react@latest react-native-worklets \
|
|
373
|
+
@one-am/react-native-simple-image-slider@latest
|
|
374
|
+
```
|
|
375
|
+
|
|
376
|
+
**Key dependency changes:**
|
|
377
|
+
|
|
378
|
+
- `react-native-worklets` - **NEW** peer dependency (required)
|
|
379
|
+
- `@shopify/flash-list` - now requires `>=2` (was `<2.0.0`)
|
|
380
|
+
- `react` - now requires `>=19`
|
|
381
|
+
- `react-native-reanimated` - now requires `>=4`
|
|
382
|
+
|
|
383
|
+
### Breaking Changes
|
|
384
|
+
|
|
385
|
+
#### Removed Components
|
|
386
|
+
|
|
387
|
+
| v0.x Component | v1.0 Replacement |
|
|
388
|
+
| -------------------------------- | -------------------------------------------- |
|
|
389
|
+
| `SimpleImageSlider` | `Slider` + `SliderContent` + children |
|
|
390
|
+
| `SimpleImageSliderThemeProvider` | Removed (use component props for styling) |
|
|
391
|
+
| `BaseListImageSlider` | `Slider` + `SliderContent` |
|
|
392
|
+
| `FullScreenImageSlider` | `SliderFullScreen` |
|
|
393
|
+
| `PageCounter` | `SliderPageCounter` (wrap in `SliderCorner`) |
|
|
394
|
+
| `PinchToZoom` (exported) | `enablePinchToZoom` prop on `SliderContent` |
|
|
395
|
+
| `useSimpleImageSliderTheme` hook | Removed |
|
|
396
|
+
|
|
397
|
+
#### Renamed Types
|
|
398
|
+
|
|
399
|
+
| v0.x Type | v1.0 Type |
|
|
400
|
+
| ----------------------- | ------------ |
|
|
401
|
+
| `SimpleImageSliderItem` | `SliderItem` |
|
|
402
|
+
|
|
403
|
+
#### New Components
|
|
404
|
+
|
|
405
|
+
- `Slider` - Root context provider
|
|
406
|
+
- `SliderContent` - FlashList wrapper for rendering images
|
|
407
|
+
- `SliderPageCounter` - Page counter component
|
|
408
|
+
- `SliderCorner` - Absolute positioning utility
|
|
409
|
+
- `SliderFullScreen` - Full-screen modal
|
|
410
|
+
- `SliderCloseButton` - Close button for full-screen
|
|
411
|
+
- `SliderDescription` - Description overlay for full-screen
|
|
412
|
+
- `SliderEmpty` - Empty state component
|
|
413
|
+
|
|
414
|
+
#### New Hook
|
|
415
|
+
|
|
416
|
+
- `useSlider` - Access slider context from custom components
|
|
417
|
+
|
|
418
|
+
### Code Migration Examples
|
|
419
|
+
|
|
420
|
+
#### Basic Slider with Full-Screen
|
|
421
|
+
|
|
422
|
+
**Before (v0.x):**
|
|
423
|
+
|
|
424
|
+
```tsx
|
|
425
|
+
import {
|
|
426
|
+
SimpleImageSliderThemeProvider,
|
|
427
|
+
SimpleImageSlider,
|
|
428
|
+
} from '@one-am/react-native-simple-image-slider';
|
|
47
429
|
|
|
48
|
-
```typescript jsx
|
|
49
430
|
<SimpleImageSliderThemeProvider>
|
|
50
|
-
|
|
431
|
+
<SimpleImageSlider
|
|
432
|
+
data={photos.map((photo, index) => ({
|
|
433
|
+
source: photo,
|
|
434
|
+
key: index.toString(),
|
|
435
|
+
}))}
|
|
436
|
+
imageWidth={width}
|
|
437
|
+
imageAspectRatio={16 / 9}
|
|
438
|
+
fullScreenEnabled={true}
|
|
439
|
+
pageCounterPosition="bottom-left"
|
|
440
|
+
renderFullScreenDescription={(_, index) => (
|
|
441
|
+
<Text style={{ color: '#ffffff' }}>Picture {index}</Text>
|
|
442
|
+
)}
|
|
443
|
+
FullScreenCloseButtonIcon={<CustomIcon />}
|
|
444
|
+
/>
|
|
445
|
+
</SimpleImageSliderThemeProvider>;
|
|
446
|
+
```
|
|
447
|
+
|
|
448
|
+
**After (v1.0):**
|
|
449
|
+
|
|
450
|
+
```tsx
|
|
451
|
+
import {
|
|
452
|
+
Slider,
|
|
453
|
+
SliderContent,
|
|
454
|
+
SliderCorner,
|
|
455
|
+
SliderPageCounter,
|
|
456
|
+
SliderFullScreen,
|
|
457
|
+
SliderCloseButton,
|
|
458
|
+
SliderDescription,
|
|
459
|
+
} from '@one-am/react-native-simple-image-slider';
|
|
460
|
+
|
|
461
|
+
<Slider
|
|
51
462
|
data={photos.map((photo, index) => ({
|
|
52
|
-
|
|
53
|
-
|
|
463
|
+
source: photo,
|
|
464
|
+
key: index.toString(),
|
|
54
465
|
}))}
|
|
55
|
-
imageWidth={width}
|
|
56
466
|
imageAspectRatio={16 / 9}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
467
|
+
>
|
|
468
|
+
<SliderContent />
|
|
469
|
+
<SliderCorner position="bottom-left">
|
|
470
|
+
<SliderPageCounter />
|
|
471
|
+
</SliderCorner>
|
|
472
|
+
<SliderFullScreen>
|
|
473
|
+
<SliderContent enablePinchToZoom />
|
|
474
|
+
<SliderCloseButton>
|
|
475
|
+
<CustomIcon />
|
|
476
|
+
</SliderCloseButton>
|
|
477
|
+
<SliderDescription
|
|
478
|
+
render={(_, index) => <Text style={{ color: '#ffffff' }}>Picture {index}</Text>}
|
|
479
|
+
/>
|
|
480
|
+
</SliderFullScreen>
|
|
481
|
+
</Slider>;
|
|
482
|
+
```
|
|
483
|
+
|
|
484
|
+
#### Custom Overlays (Badges, Buttons)
|
|
485
|
+
|
|
486
|
+
**Before (v0.x):**
|
|
487
|
+
|
|
488
|
+
```tsx
|
|
489
|
+
<SimpleImageSlider
|
|
490
|
+
data={photos}
|
|
491
|
+
TopRightComponent={<Badge text="NEW" />}
|
|
492
|
+
BottomRightComponent={<FavoriteButton />}
|
|
493
|
+
/>
|
|
494
|
+
```
|
|
495
|
+
|
|
496
|
+
**After (v1.0):**
|
|
497
|
+
|
|
498
|
+
```tsx
|
|
499
|
+
<Slider data={photos}>
|
|
500
|
+
<SliderContent />
|
|
501
|
+
<SliderCorner position="top-right">
|
|
502
|
+
<Badge text="NEW" />
|
|
503
|
+
</SliderCorner>
|
|
504
|
+
<SliderCorner position="bottom-right">
|
|
505
|
+
<FavoriteButton />
|
|
506
|
+
</SliderCorner>
|
|
507
|
+
</Slider>
|
|
63
508
|
```
|
|
64
509
|
|
|
510
|
+
#### Accessing Slider State
|
|
511
|
+
|
|
512
|
+
**Before (v0.x):**
|
|
513
|
+
|
|
514
|
+
Not directly supported. Required ref access and manual state management.
|
|
515
|
+
|
|
516
|
+
**After (v1.0):**
|
|
517
|
+
|
|
518
|
+
```tsx
|
|
519
|
+
import { useSlider } from '@one-am/react-native-simple-image-slider';
|
|
520
|
+
|
|
521
|
+
function NavigationButtons() {
|
|
522
|
+
const { currentIndex, totalItems, scrollToIndex } = useSlider();
|
|
523
|
+
|
|
524
|
+
return (
|
|
525
|
+
<View>
|
|
526
|
+
<Button
|
|
527
|
+
disabled={currentIndex === 0}
|
|
528
|
+
onPress={() => scrollToIndex(currentIndex - 1)}
|
|
529
|
+
title="Prev"
|
|
530
|
+
/>
|
|
531
|
+
<Button
|
|
532
|
+
disabled={currentIndex === totalItems - 1}
|
|
533
|
+
onPress={() => scrollToIndex(currentIndex + 1)}
|
|
534
|
+
title="Next"
|
|
535
|
+
/>
|
|
536
|
+
</View>
|
|
537
|
+
);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
<Slider data={photos}>
|
|
541
|
+
<SliderContent />
|
|
542
|
+
<NavigationButtons />
|
|
543
|
+
</Slider>;
|
|
544
|
+
```
|
|
545
|
+
|
|
546
|
+
### Removed Props
|
|
547
|
+
|
|
548
|
+
The following props from `SimpleImageSlider` are removed or replaced:
|
|
549
|
+
|
|
550
|
+
| v0.x Prop | v1.0 Alternative |
|
|
551
|
+
| ----------------------------- | -------------------------------------------------------- |
|
|
552
|
+
| `imageWidth` | Automatically calculated (removed) |
|
|
553
|
+
| `fullScreenEnabled` | Use `<SliderFullScreen>` as a child |
|
|
554
|
+
| `pageCounterPosition` | Use `<SliderCorner position="..."><SliderPageCounter />` |
|
|
555
|
+
| `renderFullScreenDescription` | Use `<SliderDescription render={...} />` |
|
|
556
|
+
| `FullScreenCloseButtonIcon` | Use `<SliderCloseButton>` with custom children |
|
|
557
|
+
| `TopLeftComponent` | Use `<SliderCorner position="top-left">` |
|
|
558
|
+
| `TopRightComponent` | Use `<SliderCorner position="top-right">` |
|
|
559
|
+
| `BottomLeftComponent` | Use `<SliderCorner position="bottom-left">` |
|
|
560
|
+
| `BottomRightComponent` | Use `<SliderCorner position="bottom-right">` |
|
|
561
|
+
| `showPageCounter` | Don't render `<SliderPageCounter>` component |
|
|
562
|
+
| `fullScreenImageAspectRatio` | Use `imageAspectRatio` prop on `<SliderFullScreen>` |
|
|
563
|
+
|
|
564
|
+
### Why This Change?
|
|
565
|
+
|
|
566
|
+
The new compositional API provides:
|
|
567
|
+
|
|
568
|
+
- **Flexibility** - Compose only the features you need
|
|
569
|
+
- **Smaller bundle size** - Tree-shaking removes unused components
|
|
570
|
+
- **Better TypeScript support** - Explicit component props instead of a large union
|
|
571
|
+
- **Easier customization** - Override individual components without prop drilling
|
|
572
|
+
- **Familiar patterns** - Similar to shadcn/ui and other modern component libraries
|
|
573
|
+
|
|
574
|
+
---
|
|
575
|
+
|
|
576
|
+
## Hooks
|
|
577
|
+
|
|
578
|
+
### useSlider
|
|
579
|
+
|
|
580
|
+
Access slider state and methods from any component inside `Slider`.
|
|
581
|
+
|
|
582
|
+
```tsx
|
|
583
|
+
import { useSlider } from '@one-am/react-native-simple-image-slider';
|
|
584
|
+
|
|
585
|
+
function MyComponent() {
|
|
586
|
+
const {
|
|
587
|
+
data,
|
|
588
|
+
totalItems,
|
|
589
|
+
currentIndex,
|
|
590
|
+
setCurrentIndex,
|
|
591
|
+
scrollToIndex,
|
|
592
|
+
imageAspectRatio,
|
|
593
|
+
isAspectRatioLoading,
|
|
594
|
+
isFullScreenOpen,
|
|
595
|
+
openFullScreen,
|
|
596
|
+
closeFullScreen,
|
|
597
|
+
hasFullScreen,
|
|
598
|
+
} = useSlider();
|
|
599
|
+
|
|
600
|
+
return (
|
|
601
|
+
<View>
|
|
602
|
+
<Text>
|
|
603
|
+
Viewing {currentIndex + 1} / {totalItems}
|
|
604
|
+
</Text>
|
|
605
|
+
{hasFullScreen ? <Button title="Open Full Screen" onPress={openFullScreen} /> : null}
|
|
606
|
+
</View>
|
|
607
|
+
);
|
|
608
|
+
}
|
|
609
|
+
```
|
|
610
|
+
|
|
611
|
+
---
|
|
612
|
+
|
|
613
|
+
## Types
|
|
614
|
+
|
|
615
|
+
### SliderItem
|
|
616
|
+
|
|
617
|
+
```typescript
|
|
618
|
+
import type { ImageProps } from 'expo-image';
|
|
619
|
+
|
|
620
|
+
type SliderItem = ImageProps & {
|
|
621
|
+
key: string; // Required unique identifier
|
|
622
|
+
};
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
### SliderPublicState
|
|
626
|
+
|
|
627
|
+
The `useSlider` hook returns `SliderPublicState`, which exposes only the public API:
|
|
628
|
+
|
|
629
|
+
```typescript
|
|
630
|
+
type SliderPublicState = {
|
|
631
|
+
// Data
|
|
632
|
+
data: SliderItem[];
|
|
633
|
+
totalItems: number;
|
|
634
|
+
|
|
635
|
+
// Navigation
|
|
636
|
+
currentIndex: number;
|
|
637
|
+
scrollToIndex: (index: number, animated?: boolean) => void;
|
|
638
|
+
|
|
639
|
+
// Aspect Ratio
|
|
640
|
+
imageAspectRatio: number;
|
|
641
|
+
isAspectRatioLoading: boolean;
|
|
642
|
+
|
|
643
|
+
// Full Screen
|
|
644
|
+
isFullScreenOpen: boolean;
|
|
645
|
+
openFullScreen: () => void;
|
|
646
|
+
closeFullScreen: () => void;
|
|
647
|
+
hasFullScreen: boolean;
|
|
648
|
+
};
|
|
649
|
+
```
|
|
650
|
+
|
|
651
|
+
### PinchToZoomStatus
|
|
652
|
+
|
|
653
|
+
```typescript
|
|
654
|
+
type PinchToZoomStatus = {
|
|
655
|
+
scale: number;
|
|
656
|
+
translation: { x: number; y: number };
|
|
657
|
+
};
|
|
658
|
+
```
|
|
659
|
+
|
|
660
|
+
---
|
|
661
|
+
|
|
65
662
|
## Contributing
|
|
66
663
|
|
|
67
664
|
See the [contributing guide](CONTRIBUTING.md) to learn how to contribute to the repository and the development workflow.
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.Z_INDEX_OVERLAY = exports.VIEWABILITY_THRESHOLD = exports.SAFE_AREA_OFFSET = exports.DESCRIPTION_OFFSET = void 0;
|
|
7
|
+
const Z_INDEX_OVERLAY = exports.Z_INDEX_OVERLAY = 1000;
|
|
8
|
+
const VIEWABILITY_THRESHOLD = exports.VIEWABILITY_THRESHOLD = 55;
|
|
9
|
+
const SAFE_AREA_OFFSET = exports.SAFE_AREA_OFFSET = 20;
|
|
10
|
+
const DESCRIPTION_OFFSET = exports.DESCRIPTION_OFFSET = 100;
|
|
11
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["Z_INDEX_OVERLAY","exports","VIEWABILITY_THRESHOLD","SAFE_AREA_OFFSET","DESCRIPTION_OFFSET"],"sourceRoot":"../../../src","sources":["constants/layout.ts"],"mappings":";;;;;;AAAO,MAAMA,eAAe,GAAAC,OAAA,CAAAD,eAAA,GAAG,IAAI;AAE5B,MAAME,qBAAqB,GAAAD,OAAA,CAAAC,qBAAA,GAAG,EAAE;AAEhC,MAAMC,gBAAgB,GAAAF,OAAA,CAAAE,gBAAA,GAAG,EAAE;AAE3B,MAAMC,kBAAkB,GAAAH,OAAA,CAAAG,kBAAA,GAAG,GAAG","ignoreList":[]}
|