@one-am/react-native-simple-image-slider 0.16.1 → 1.0.0-beta.4

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.
Files changed (334) hide show
  1. package/README.md +616 -19
  2. package/lib/commonjs/constants/layout.js +11 -0
  3. package/lib/commonjs/constants/layout.js.map +1 -0
  4. package/lib/commonjs/context/slider-context.js +47 -0
  5. package/lib/commonjs/context/slider-context.js.map +1 -0
  6. package/lib/commonjs/{utils/renderProp.js → context/slider-full-screen-context.js} +15 -8
  7. package/lib/commonjs/context/slider-full-screen-context.js.map +1 -0
  8. package/lib/commonjs/hooks/index.js +13 -0
  9. package/lib/commonjs/hooks/index.js.map +1 -0
  10. package/lib/commonjs/hooks/slider-state/index.js +40 -0
  11. package/lib/commonjs/hooks/slider-state/index.js.map +1 -0
  12. package/lib/commonjs/hooks/slider-state/use-slider-callbacks.js +63 -0
  13. package/lib/commonjs/hooks/slider-state/use-slider-callbacks.js.map +1 -0
  14. package/lib/commonjs/hooks/slider-state/use-slider-full-screen.js +24 -0
  15. package/lib/commonjs/hooks/slider-state/use-slider-full-screen.js.map +1 -0
  16. package/lib/commonjs/hooks/slider-state/use-slider-navigation.js +29 -0
  17. package/lib/commonjs/hooks/slider-state/use-slider-navigation.js.map +1 -0
  18. package/lib/commonjs/hooks/use-image-aspect-ratio.js +68 -0
  19. package/lib/commonjs/hooks/use-image-aspect-ratio.js.map +1 -0
  20. package/lib/commonjs/hooks/use-registered-callback.js +29 -0
  21. package/lib/commonjs/hooks/use-registered-callback.js.map +1 -0
  22. package/lib/commonjs/hooks/use-slider-state.js +72 -0
  23. package/lib/commonjs/hooks/use-slider-state.js.map +1 -0
  24. package/lib/commonjs/icons/{IconX.js → icon-x.js} +20 -26
  25. package/lib/commonjs/icons/icon-x.js.map +1 -0
  26. package/lib/commonjs/index.js +18 -47
  27. package/lib/commonjs/index.js.map +1 -1
  28. package/lib/commonjs/internal/pinch-to-zoom.js +207 -0
  29. package/lib/commonjs/internal/pinch-to-zoom.js.map +1 -0
  30. package/lib/commonjs/primitives/index.js +62 -0
  31. package/lib/commonjs/primitives/index.js.map +1 -0
  32. package/lib/commonjs/primitives/slider-close-button.js +45 -0
  33. package/lib/commonjs/primitives/slider-close-button.js.map +1 -0
  34. package/lib/commonjs/primitives/slider-content.js +170 -0
  35. package/lib/commonjs/primitives/slider-content.js.map +1 -0
  36. package/lib/commonjs/{AbsoluteComponentContainer.js → primitives/slider-corner.js} +19 -19
  37. package/lib/commonjs/primitives/slider-corner.js.map +1 -0
  38. package/lib/commonjs/{PageCounter.js → primitives/slider-description.js} +22 -31
  39. package/lib/commonjs/primitives/slider-description.js.map +1 -0
  40. package/lib/commonjs/primitives/slider-empty.js +32 -0
  41. package/lib/commonjs/primitives/slider-empty.js.map +1 -0
  42. package/lib/commonjs/primitives/slider-full-screen.js +114 -0
  43. package/lib/commonjs/primitives/slider-full-screen.js.map +1 -0
  44. package/lib/commonjs/primitives/slider-page-counter.js +63 -0
  45. package/lib/commonjs/primitives/slider-page-counter.js.map +1 -0
  46. package/lib/commonjs/primitives/slider.js +31 -0
  47. package/lib/commonjs/primitives/slider.js.map +1 -0
  48. package/lib/{module/@types → commonjs/types}/common.js.map +1 -1
  49. package/lib/commonjs/{@types/slider.js → types/context.js} +1 -1
  50. package/lib/commonjs/{@types/slider.js.map → types/context.js.map} +1 -1
  51. package/lib/{module/@types → commonjs/types}/icons.js.map +1 -1
  52. package/lib/commonjs/types/index.js +2 -0
  53. package/lib/commonjs/types/index.js.map +1 -0
  54. package/lib/commonjs/types/pinch-to-zoom.js.map +1 -0
  55. package/lib/commonjs/types/slider-state.js +6 -0
  56. package/lib/commonjs/types/slider-state.js.map +1 -0
  57. package/lib/commonjs/utils/capitalize.js +10 -0
  58. package/lib/commonjs/utils/capitalize.js.map +1 -0
  59. package/lib/commonjs/utils/clamp.js.map +1 -1
  60. package/lib/module/constants/layout.js +7 -0
  61. package/lib/module/constants/layout.js.map +1 -0
  62. package/lib/module/context/slider-context.js +40 -0
  63. package/lib/module/context/slider-context.js.map +1 -0
  64. package/lib/module/context/slider-full-screen-context.js +19 -0
  65. package/lib/module/context/slider-full-screen-context.js.map +1 -0
  66. package/lib/module/hooks/index.js +4 -0
  67. package/lib/module/hooks/index.js.map +1 -0
  68. package/lib/module/hooks/slider-state/index.js +7 -0
  69. package/lib/module/hooks/slider-state/index.js.map +1 -0
  70. package/lib/module/hooks/slider-state/use-slider-callbacks.js +60 -0
  71. package/lib/module/hooks/slider-state/use-slider-callbacks.js.map +1 -0
  72. package/lib/module/hooks/slider-state/use-slider-full-screen.js +21 -0
  73. package/lib/module/hooks/slider-state/use-slider-full-screen.js.map +1 -0
  74. package/lib/module/hooks/slider-state/use-slider-navigation.js +25 -0
  75. package/lib/module/hooks/slider-state/use-slider-navigation.js.map +1 -0
  76. package/lib/module/hooks/use-image-aspect-ratio.js +64 -0
  77. package/lib/module/hooks/use-image-aspect-ratio.js.map +1 -0
  78. package/lib/module/hooks/use-registered-callback.js +26 -0
  79. package/lib/module/hooks/use-registered-callback.js.map +1 -0
  80. package/lib/module/hooks/use-slider-state.js +68 -0
  81. package/lib/module/hooks/use-slider-state.js.map +1 -0
  82. package/lib/module/icons/icon-x.js +32 -0
  83. package/lib/module/icons/icon-x.js.map +1 -0
  84. package/lib/module/index.js +2 -7
  85. package/lib/module/index.js.map +1 -1
  86. package/lib/module/internal/pinch-to-zoom.js +202 -0
  87. package/lib/module/internal/pinch-to-zoom.js.map +1 -0
  88. package/lib/module/primitives/index.js +11 -0
  89. package/lib/module/primitives/index.js.map +1 -0
  90. package/lib/module/primitives/slider-close-button.js +40 -0
  91. package/lib/module/primitives/slider-close-button.js.map +1 -0
  92. package/lib/module/primitives/slider-content.js +165 -0
  93. package/lib/module/primitives/slider-content.js.map +1 -0
  94. package/lib/module/{AbsoluteComponentContainer.js → primitives/slider-corner.js} +19 -18
  95. package/lib/module/primitives/slider-corner.js.map +1 -0
  96. package/lib/module/primitives/slider-description.js +31 -0
  97. package/lib/module/primitives/slider-description.js.map +1 -0
  98. package/lib/module/primitives/slider-empty.js +28 -0
  99. package/lib/module/primitives/slider-empty.js.map +1 -0
  100. package/lib/module/primitives/slider-full-screen.js +109 -0
  101. package/lib/module/primitives/slider-full-screen.js.map +1 -0
  102. package/lib/module/primitives/slider-page-counter.js +59 -0
  103. package/lib/module/primitives/slider-page-counter.js.map +1 -0
  104. package/lib/module/primitives/slider.js +27 -0
  105. package/lib/module/primitives/slider.js.map +1 -0
  106. package/lib/{commonjs/@types → module/types}/common.js.map +1 -1
  107. package/lib/module/types/context.js +4 -0
  108. package/lib/module/types/context.js.map +1 -0
  109. package/lib/{commonjs/@types → module/types}/icons.js.map +1 -1
  110. package/lib/module/types/index.js +2 -0
  111. package/lib/module/types/index.js.map +1 -0
  112. package/lib/module/types/pinch-to-zoom.js.map +1 -0
  113. package/lib/module/types/slider-state.js +4 -0
  114. package/lib/module/types/slider-state.js.map +1 -0
  115. package/lib/module/utils/capitalize.js +7 -0
  116. package/lib/module/utils/capitalize.js.map +1 -0
  117. package/lib/module/utils/clamp.js +2 -1
  118. package/lib/module/utils/clamp.js.map +1 -1
  119. package/lib/typescript/commonjs/package.json +1 -0
  120. package/lib/typescript/commonjs/src/__tests__/index.test.d.ts +1 -0
  121. package/lib/typescript/commonjs/src/__tests__/index.test.d.ts.map +1 -0
  122. package/lib/typescript/commonjs/src/constants/layout.d.ts +5 -0
  123. package/lib/typescript/commonjs/src/constants/layout.d.ts.map +1 -0
  124. package/lib/typescript/commonjs/src/context/slider-context.d.ts +8 -0
  125. package/lib/typescript/commonjs/src/context/slider-context.d.ts.map +1 -0
  126. package/lib/typescript/commonjs/src/context/slider-full-screen-context.d.ts +6 -0
  127. package/lib/typescript/commonjs/src/context/slider-full-screen-context.d.ts.map +1 -0
  128. package/lib/typescript/commonjs/src/hooks/index.d.ts +2 -0
  129. package/lib/typescript/commonjs/src/hooks/index.d.ts.map +1 -0
  130. package/lib/typescript/commonjs/src/hooks/slider-state/index.d.ts +5 -0
  131. package/lib/typescript/commonjs/src/hooks/slider-state/index.d.ts.map +1 -0
  132. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-callbacks.d.ts +6 -0
  133. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-callbacks.d.ts.map +1 -0
  134. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-full-screen.d.ts +8 -0
  135. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-full-screen.d.ts.map +1 -0
  136. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-navigation.d.ts +5 -0
  137. package/lib/typescript/commonjs/src/hooks/slider-state/use-slider-navigation.d.ts.map +1 -0
  138. package/lib/typescript/commonjs/src/hooks/use-image-aspect-ratio.d.ts +6 -0
  139. package/lib/typescript/commonjs/src/hooks/use-image-aspect-ratio.d.ts.map +1 -0
  140. package/lib/typescript/commonjs/src/hooks/use-registered-callback.d.ts +8 -0
  141. package/lib/typescript/commonjs/src/hooks/use-registered-callback.d.ts.map +1 -0
  142. package/lib/typescript/commonjs/src/hooks/use-slider-state.d.ts +4 -0
  143. package/lib/typescript/commonjs/src/hooks/use-slider-state.d.ts.map +1 -0
  144. package/lib/typescript/commonjs/src/icons/icon-x.d.ts +6 -0
  145. package/lib/typescript/commonjs/src/icons/icon-x.d.ts.map +1 -0
  146. package/lib/typescript/commonjs/src/index.d.ts +4 -0
  147. package/lib/typescript/commonjs/src/index.d.ts.map +1 -0
  148. package/lib/typescript/{src/PinchToZoom.d.ts → commonjs/src/internal/pinch-to-zoom.d.ts} +9 -6
  149. package/lib/typescript/commonjs/src/internal/pinch-to-zoom.d.ts.map +1 -0
  150. package/lib/typescript/commonjs/src/primitives/index.d.ts +17 -0
  151. package/lib/typescript/commonjs/src/primitives/index.d.ts.map +1 -0
  152. package/lib/typescript/commonjs/src/primitives/slider-close-button.d.ts +12 -0
  153. package/lib/typescript/commonjs/src/primitives/slider-close-button.d.ts.map +1 -0
  154. package/lib/typescript/commonjs/src/primitives/slider-content.d.ts +15 -0
  155. package/lib/typescript/commonjs/src/primitives/slider-content.d.ts.map +1 -0
  156. package/lib/typescript/commonjs/src/primitives/slider-corner.d.ts +12 -0
  157. package/lib/typescript/commonjs/src/primitives/slider-corner.d.ts.map +1 -0
  158. package/lib/typescript/commonjs/src/primitives/slider-description.d.ts +10 -0
  159. package/lib/typescript/commonjs/src/primitives/slider-description.d.ts.map +1 -0
  160. package/lib/typescript/commonjs/src/primitives/slider-empty.d.ts +10 -0
  161. package/lib/typescript/commonjs/src/primitives/slider-empty.d.ts.map +1 -0
  162. package/lib/typescript/commonjs/src/primitives/slider-full-screen.d.ts +10 -0
  163. package/lib/typescript/commonjs/src/primitives/slider-full-screen.d.ts.map +1 -0
  164. package/lib/typescript/commonjs/src/primitives/slider-page-counter.d.ts +14 -0
  165. package/lib/typescript/commonjs/src/primitives/slider-page-counter.d.ts.map +1 -0
  166. package/lib/typescript/commonjs/src/primitives/slider.d.ts +30 -0
  167. package/lib/typescript/commonjs/src/primitives/slider.d.ts.map +1 -0
  168. package/lib/typescript/commonjs/src/types/common.d.ts +15 -0
  169. package/lib/typescript/commonjs/src/types/common.d.ts.map +1 -0
  170. package/lib/typescript/commonjs/src/types/context.d.ts +25 -0
  171. package/lib/typescript/commonjs/src/types/context.d.ts.map +1 -0
  172. package/lib/typescript/commonjs/src/types/icons.d.ts +8 -0
  173. package/lib/typescript/commonjs/src/types/icons.d.ts.map +1 -0
  174. package/lib/typescript/commonjs/src/types/index.d.ts +6 -0
  175. package/lib/typescript/commonjs/src/types/index.d.ts.map +1 -0
  176. package/lib/typescript/commonjs/src/types/pinch-to-zoom.d.ts +9 -0
  177. package/lib/typescript/commonjs/src/types/pinch-to-zoom.d.ts.map +1 -0
  178. package/lib/typescript/commonjs/src/types/slider-state.d.ts +39 -0
  179. package/lib/typescript/commonjs/src/types/slider-state.d.ts.map +1 -0
  180. package/lib/typescript/commonjs/src/utils/capitalize.d.ts +3 -0
  181. package/lib/typescript/commonjs/src/utils/capitalize.d.ts.map +1 -0
  182. package/lib/typescript/commonjs/src/utils/clamp.d.ts +3 -0
  183. package/lib/typescript/commonjs/src/utils/clamp.d.ts.map +1 -0
  184. package/lib/typescript/module/package.json +1 -0
  185. package/lib/typescript/module/src/__tests__/index.test.d.ts +1 -0
  186. package/lib/typescript/module/src/__tests__/index.test.d.ts.map +1 -0
  187. package/lib/typescript/module/src/constants/layout.d.ts +5 -0
  188. package/lib/typescript/module/src/constants/layout.d.ts.map +1 -0
  189. package/lib/typescript/module/src/context/slider-context.d.ts +8 -0
  190. package/lib/typescript/module/src/context/slider-context.d.ts.map +1 -0
  191. package/lib/typescript/module/src/context/slider-full-screen-context.d.ts +6 -0
  192. package/lib/typescript/module/src/context/slider-full-screen-context.d.ts.map +1 -0
  193. package/lib/typescript/module/src/hooks/index.d.ts +2 -0
  194. package/lib/typescript/module/src/hooks/index.d.ts.map +1 -0
  195. package/lib/typescript/module/src/hooks/slider-state/index.d.ts +5 -0
  196. package/lib/typescript/module/src/hooks/slider-state/index.d.ts.map +1 -0
  197. package/lib/typescript/module/src/hooks/slider-state/use-slider-callbacks.d.ts +6 -0
  198. package/lib/typescript/module/src/hooks/slider-state/use-slider-callbacks.d.ts.map +1 -0
  199. package/lib/typescript/module/src/hooks/slider-state/use-slider-full-screen.d.ts +8 -0
  200. package/lib/typescript/module/src/hooks/slider-state/use-slider-full-screen.d.ts.map +1 -0
  201. package/lib/typescript/module/src/hooks/slider-state/use-slider-navigation.d.ts +5 -0
  202. package/lib/typescript/module/src/hooks/slider-state/use-slider-navigation.d.ts.map +1 -0
  203. package/lib/typescript/module/src/hooks/use-image-aspect-ratio.d.ts +6 -0
  204. package/lib/typescript/module/src/hooks/use-image-aspect-ratio.d.ts.map +1 -0
  205. package/lib/typescript/module/src/hooks/use-registered-callback.d.ts +8 -0
  206. package/lib/typescript/module/src/hooks/use-registered-callback.d.ts.map +1 -0
  207. package/lib/typescript/module/src/hooks/use-slider-state.d.ts +4 -0
  208. package/lib/typescript/module/src/hooks/use-slider-state.d.ts.map +1 -0
  209. package/lib/typescript/module/src/icons/icon-x.d.ts +6 -0
  210. package/lib/typescript/module/src/icons/icon-x.d.ts.map +1 -0
  211. package/lib/typescript/module/src/index.d.ts +4 -0
  212. package/lib/typescript/module/src/index.d.ts.map +1 -0
  213. package/lib/typescript/module/src/internal/pinch-to-zoom.d.ts +51 -0
  214. package/lib/typescript/module/src/internal/pinch-to-zoom.d.ts.map +1 -0
  215. package/lib/typescript/module/src/primitives/index.d.ts +17 -0
  216. package/lib/typescript/module/src/primitives/index.d.ts.map +1 -0
  217. package/lib/typescript/module/src/primitives/slider-close-button.d.ts +12 -0
  218. package/lib/typescript/module/src/primitives/slider-close-button.d.ts.map +1 -0
  219. package/lib/typescript/module/src/primitives/slider-content.d.ts +15 -0
  220. package/lib/typescript/module/src/primitives/slider-content.d.ts.map +1 -0
  221. package/lib/typescript/module/src/primitives/slider-corner.d.ts +12 -0
  222. package/lib/typescript/module/src/primitives/slider-corner.d.ts.map +1 -0
  223. package/lib/typescript/module/src/primitives/slider-description.d.ts +10 -0
  224. package/lib/typescript/module/src/primitives/slider-description.d.ts.map +1 -0
  225. package/lib/typescript/module/src/primitives/slider-empty.d.ts +10 -0
  226. package/lib/typescript/module/src/primitives/slider-empty.d.ts.map +1 -0
  227. package/lib/typescript/module/src/primitives/slider-full-screen.d.ts +10 -0
  228. package/lib/typescript/module/src/primitives/slider-full-screen.d.ts.map +1 -0
  229. package/lib/typescript/module/src/primitives/slider-page-counter.d.ts +14 -0
  230. package/lib/typescript/module/src/primitives/slider-page-counter.d.ts.map +1 -0
  231. package/lib/typescript/module/src/primitives/slider.d.ts +30 -0
  232. package/lib/typescript/module/src/primitives/slider.d.ts.map +1 -0
  233. package/lib/typescript/module/src/types/common.d.ts +15 -0
  234. package/lib/typescript/module/src/types/common.d.ts.map +1 -0
  235. package/lib/typescript/module/src/types/context.d.ts +25 -0
  236. package/lib/typescript/module/src/types/context.d.ts.map +1 -0
  237. package/lib/typescript/module/src/types/icons.d.ts +8 -0
  238. package/lib/typescript/module/src/types/icons.d.ts.map +1 -0
  239. package/lib/typescript/module/src/types/index.d.ts +6 -0
  240. package/lib/typescript/module/src/types/index.d.ts.map +1 -0
  241. package/lib/typescript/module/src/types/pinch-to-zoom.d.ts +9 -0
  242. package/lib/typescript/module/src/types/pinch-to-zoom.d.ts.map +1 -0
  243. package/lib/typescript/module/src/types/slider-state.d.ts +39 -0
  244. package/lib/typescript/module/src/types/slider-state.d.ts.map +1 -0
  245. package/lib/typescript/module/src/utils/capitalize.d.ts +3 -0
  246. package/lib/typescript/module/src/utils/capitalize.d.ts.map +1 -0
  247. package/lib/typescript/module/src/utils/clamp.d.ts +3 -0
  248. package/lib/typescript/module/src/utils/clamp.d.ts.map +1 -0
  249. package/package.json +79 -91
  250. package/lib/commonjs/@types/pinch-to-zoom.js.map +0 -1
  251. package/lib/commonjs/AbsoluteComponentContainer.js.map +0 -1
  252. package/lib/commonjs/BaseSimpleImageSlider.js +0 -209
  253. package/lib/commonjs/BaseSimpleImageSlider.js.map +0 -1
  254. package/lib/commonjs/FullScreenImageSlider.js +0 -132
  255. package/lib/commonjs/FullScreenImageSlider.js.map +0 -1
  256. package/lib/commonjs/PageCounter.js.map +0 -1
  257. package/lib/commonjs/PinchToZoom.js +0 -174
  258. package/lib/commonjs/PinchToZoom.js.map +0 -1
  259. package/lib/commonjs/SimpleImageSlider.js +0 -79
  260. package/lib/commonjs/SimpleImageSlider.js.map +0 -1
  261. package/lib/commonjs/SimpleImageSliderThemeProvider.js +0 -40
  262. package/lib/commonjs/SimpleImageSliderThemeProvider.js.map +0 -1
  263. package/lib/commonjs/icons/IconX.js.map +0 -1
  264. package/lib/commonjs/utils/renderProp.js.map +0 -1
  265. package/lib/module/@types/pinch-to-zoom.js.map +0 -1
  266. package/lib/module/@types/slider.js +0 -4
  267. package/lib/module/@types/slider.js.map +0 -1
  268. package/lib/module/AbsoluteComponentContainer.js.map +0 -1
  269. package/lib/module/BaseSimpleImageSlider.js +0 -202
  270. package/lib/module/BaseSimpleImageSlider.js.map +0 -1
  271. package/lib/module/FullScreenImageSlider.js +0 -125
  272. package/lib/module/FullScreenImageSlider.js.map +0 -1
  273. package/lib/module/PageCounter.js +0 -39
  274. package/lib/module/PageCounter.js.map +0 -1
  275. package/lib/module/PinchToZoom.js +0 -168
  276. package/lib/module/PinchToZoom.js.map +0 -1
  277. package/lib/module/SimpleImageSlider.js +0 -72
  278. package/lib/module/SimpleImageSlider.js.map +0 -1
  279. package/lib/module/SimpleImageSliderThemeProvider.js +0 -33
  280. package/lib/module/SimpleImageSliderThemeProvider.js.map +0 -1
  281. package/lib/module/icons/IconX.js +0 -37
  282. package/lib/module/icons/IconX.js.map +0 -1
  283. package/lib/module/utils/renderProp.js +0 -12
  284. package/lib/module/utils/renderProp.js.map +0 -1
  285. package/lib/typescript/src/@types/common.d.ts +0 -1
  286. package/lib/typescript/src/@types/common.d.ts.map +0 -1
  287. package/lib/typescript/src/@types/icons.d.ts +0 -6
  288. package/lib/typescript/src/@types/icons.d.ts.map +0 -1
  289. package/lib/typescript/src/@types/pinch-to-zoom.d.ts +0 -8
  290. package/lib/typescript/src/@types/pinch-to-zoom.d.ts.map +0 -1
  291. package/lib/typescript/src/@types/slider.d.ts +0 -5
  292. package/lib/typescript/src/@types/slider.d.ts.map +0 -1
  293. package/lib/typescript/src/AbsoluteComponentContainer.d.ts +0 -7
  294. package/lib/typescript/src/AbsoluteComponentContainer.d.ts.map +0 -1
  295. package/lib/typescript/src/BaseSimpleImageSlider.d.ts +0 -126
  296. package/lib/typescript/src/BaseSimpleImageSlider.d.ts.map +0 -1
  297. package/lib/typescript/src/FullScreenImageSlider.d.ts +0 -58
  298. package/lib/typescript/src/FullScreenImageSlider.d.ts.map +0 -1
  299. package/lib/typescript/src/PageCounter.d.ts +0 -22
  300. package/lib/typescript/src/PageCounter.d.ts.map +0 -1
  301. package/lib/typescript/src/PinchToZoom.d.ts.map +0 -1
  302. package/lib/typescript/src/SimpleImageSlider.d.ts +0 -52
  303. package/lib/typescript/src/SimpleImageSlider.d.ts.map +0 -1
  304. package/lib/typescript/src/SimpleImageSliderThemeProvider.d.ts +0 -17
  305. package/lib/typescript/src/SimpleImageSliderThemeProvider.d.ts.map +0 -1
  306. package/lib/typescript/src/icons/IconX.d.ts +0 -5
  307. package/lib/typescript/src/icons/IconX.d.ts.map +0 -1
  308. package/lib/typescript/src/index.d.ts +0 -9
  309. package/lib/typescript/src/index.d.ts.map +0 -1
  310. package/lib/typescript/src/utils/clamp.d.ts +0 -2
  311. package/lib/typescript/src/utils/clamp.d.ts.map +0 -1
  312. package/lib/typescript/src/utils/renderProp.d.ts +0 -4
  313. package/lib/typescript/src/utils/renderProp.d.ts.map +0 -1
  314. package/src/@types/common.ts +0 -0
  315. package/src/@types/icons.ts +0 -6
  316. package/src/@types/pinch-to-zoom.ts +0 -7
  317. package/src/@types/slider.ts +0 -5
  318. package/src/AbsoluteComponentContainer.tsx +0 -30
  319. package/src/BaseSimpleImageSlider.tsx +0 -384
  320. package/src/FullScreenImageSlider.tsx +0 -203
  321. package/src/PageCounter.tsx +0 -67
  322. package/src/PinchToZoom.tsx +0 -345
  323. package/src/SimpleImageSlider.tsx +0 -110
  324. package/src/SimpleImageSliderThemeProvider.tsx +0 -49
  325. package/src/icons/IconX.tsx +0 -24
  326. package/src/index.tsx +0 -29
  327. package/src/utils/clamp.ts +0 -4
  328. package/src/utils/renderProp.tsx +0 -22
  329. /package/lib/commonjs/{@types → types}/common.js +0 -0
  330. /package/lib/commonjs/{@types → types}/icons.js +0 -0
  331. /package/lib/commonjs/{@types → types}/pinch-to-zoom.js +0 -0
  332. /package/lib/module/{@types → types}/common.js +0 -0
  333. /package/lib/module/{@types → types}/icons.js +0 -0
  334. /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
  [![NPM Version](https://img.shields.io/npm/v/@one-am/react-native-simple-image-slider.svg?style=flat)](https://www.npmjs.com/package/@one-am/react-native-simple-image-slider)
3
4
  [![NPM License](https://img.shields.io/npm/l/@one-am/react-native-simple-image-slider.svg?style=flat)](LICENSE)
4
5
  [![NPM Downloads](https://img.shields.io/npm/dt/@one-am/react-native-simple-image-slider.svg?style=flat)](https://www.npmjs.com/package/@one-am/react-native-simple-image-slider)
5
6
 
6
- A simple and performant image slider made with [`@shopify/flash-list`](https://github.com/Shopify/flash-list)
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
  ![Alt Text](docs/slider-demo.gif)
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
- ## Usage
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
- <SimpleImageSlider
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
- source: photo,
53
- key: index.toString(),
463
+ source: photo,
464
+ key: index.toString(),
54
465
  }))}
55
- imageWidth={width}
56
466
  imageAspectRatio={16 / 9}
57
- fullScreenEnabled={true}
58
- renderFullScreenDescription={(_, index) => (
59
- <Text style={{ color: '#ffffff' }}>Picture {index}</Text>
60
- )}
61
- />
62
- </SimpleImageSliderThemeProvider>
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":[]}