@codeleap/mobile 7.0.0 → 7.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (379) hide show
  1. package/dist/Registry.js +47 -0
  2. package/dist/Registry.js.map +1 -0
  3. package/dist/components/ActivityIndicator/index.js +28 -0
  4. package/dist/components/ActivityIndicator/index.js.map +1 -0
  5. package/dist/components/ActivityIndicator/styles.js +2 -0
  6. package/dist/components/ActivityIndicator/styles.js.map +1 -0
  7. package/dist/components/ActivityIndicator/types.js +2 -0
  8. package/dist/components/ActivityIndicator/types.js.map +1 -0
  9. package/dist/components/Autocomplete/index.js +150 -0
  10. package/dist/components/Autocomplete/index.js.map +1 -0
  11. package/dist/components/Autocomplete/styles.js +2 -0
  12. package/dist/components/Autocomplete/styles.js.map +1 -0
  13. package/dist/components/Autocomplete/types.js +2 -0
  14. package/dist/components/Autocomplete/types.js.map +1 -0
  15. package/dist/components/Avatar/components/Badge.js +13 -0
  16. package/dist/components/Avatar/components/Badge.js.map +1 -0
  17. package/dist/components/Avatar/components/Content.js +19 -0
  18. package/dist/components/Avatar/components/Content.js.map +1 -0
  19. package/dist/components/Avatar/components/Illustration.js +11 -0
  20. package/dist/components/Avatar/components/Illustration.js.map +1 -0
  21. package/dist/components/Avatar/components/OverlayIcon.js +11 -0
  22. package/dist/components/Avatar/components/OverlayIcon.js.map +1 -0
  23. package/dist/components/Avatar/components/Text.js +19 -0
  24. package/dist/components/Avatar/components/Text.js.map +1 -0
  25. package/dist/components/Avatar/components/Wrapper.js +30 -0
  26. package/dist/components/Avatar/components/Wrapper.js.map +1 -0
  27. package/dist/components/Avatar/context.js +13 -0
  28. package/dist/components/Avatar/context.js.map +1 -0
  29. package/dist/components/Avatar/index.js +35 -0
  30. package/dist/components/Avatar/index.js.map +1 -0
  31. package/dist/components/Avatar/styles.js +2 -0
  32. package/dist/components/Avatar/styles.js.map +1 -0
  33. package/dist/components/Avatar/types.js +2 -0
  34. package/dist/components/Avatar/types.js.map +1 -0
  35. package/dist/components/AvatarGroup/index.js +36 -0
  36. package/dist/components/AvatarGroup/index.js.map +1 -0
  37. package/dist/components/AvatarGroup/styles.js +2 -0
  38. package/dist/components/AvatarGroup/styles.js.map +1 -0
  39. package/dist/components/AvatarGroup/types.js +2 -0
  40. package/dist/components/AvatarGroup/types.js.map +1 -0
  41. package/dist/components/Backdrop/index.js +34 -0
  42. package/dist/components/Backdrop/index.js.map +1 -0
  43. package/dist/components/Backdrop/styles.js +2 -0
  44. package/dist/components/Backdrop/styles.js.map +1 -0
  45. package/dist/components/Backdrop/types.js +2 -0
  46. package/dist/components/Backdrop/types.js.map +1 -0
  47. package/dist/components/Badge/index.js +66 -0
  48. package/dist/components/Badge/index.js.map +1 -0
  49. package/dist/components/Badge/styles.js +2 -0
  50. package/dist/components/Badge/styles.js.map +1 -0
  51. package/dist/components/Badge/types.js +2 -0
  52. package/dist/components/Badge/types.js.map +1 -0
  53. package/dist/components/Button/index.js +73 -0
  54. package/dist/components/Button/index.js.map +1 -0
  55. package/dist/components/Button/styles.js +2 -0
  56. package/dist/components/Button/styles.js.map +1 -0
  57. package/dist/components/Button/types.js +2 -0
  58. package/dist/components/Button/types.js.map +1 -0
  59. package/dist/components/Calendar/index.js +100 -0
  60. package/dist/components/Calendar/index.js.map +1 -0
  61. package/dist/components/Calendar/styles.js +2 -0
  62. package/dist/components/Calendar/styles.js.map +1 -0
  63. package/dist/components/Calendar/types.js +2 -0
  64. package/dist/components/Calendar/types.js.map +1 -0
  65. package/dist/components/CalendarInput/index.js +67 -0
  66. package/dist/components/CalendarInput/index.js.map +1 -0
  67. package/dist/components/CalendarInput/styles.js +2 -0
  68. package/dist/components/CalendarInput/styles.js.map +1 -0
  69. package/dist/components/CalendarInput/types.js +2 -0
  70. package/dist/components/CalendarInput/types.js.map +1 -0
  71. package/dist/components/Checkbox/index.js +85 -0
  72. package/dist/components/Checkbox/index.js.map +1 -0
  73. package/dist/components/Checkbox/styles.js +2 -0
  74. package/dist/components/Checkbox/styles.js.map +1 -0
  75. package/dist/components/Checkbox/types.js +2 -0
  76. package/dist/components/Checkbox/types.js.map +1 -0
  77. package/dist/components/Collapse/index.js +45 -0
  78. package/dist/components/Collapse/index.js.map +1 -0
  79. package/dist/components/Collapse/types.js +2 -0
  80. package/dist/components/Collapse/types.js.map +1 -0
  81. package/dist/components/DatePickerModal/index.js +107 -0
  82. package/dist/components/DatePickerModal/index.js.map +1 -0
  83. package/dist/components/DatePickerModal/styles.js +2 -0
  84. package/dist/components/DatePickerModal/styles.js.map +1 -0
  85. package/dist/components/DatePickerModal/types.js +2 -0
  86. package/dist/components/DatePickerModal/types.js.map +1 -0
  87. package/dist/components/EmptyPlaceholder/components/Button.js +15 -0
  88. package/dist/components/EmptyPlaceholder/components/Button.js.map +1 -0
  89. package/dist/components/EmptyPlaceholder/components/Content.js +36 -0
  90. package/dist/components/EmptyPlaceholder/components/Content.js.map +1 -0
  91. package/dist/components/EmptyPlaceholder/components/Illustration.js +9 -0
  92. package/dist/components/EmptyPlaceholder/components/Illustration.js.map +1 -0
  93. package/dist/components/EmptyPlaceholder/components/Info.js +9 -0
  94. package/dist/components/EmptyPlaceholder/components/Info.js.map +1 -0
  95. package/dist/components/EmptyPlaceholder/components/Loading.js +20 -0
  96. package/dist/components/EmptyPlaceholder/components/Loading.js.map +1 -0
  97. package/dist/components/EmptyPlaceholder/context.js +13 -0
  98. package/dist/components/EmptyPlaceholder/context.js.map +1 -0
  99. package/dist/components/EmptyPlaceholder/index.js +38 -0
  100. package/dist/components/EmptyPlaceholder/index.js.map +1 -0
  101. package/dist/components/EmptyPlaceholder/styles.js +2 -0
  102. package/dist/components/EmptyPlaceholder/styles.js.map +1 -0
  103. package/dist/components/EmptyPlaceholder/types.js +2 -0
  104. package/dist/components/EmptyPlaceholder/types.js.map +1 -0
  105. package/dist/components/FileInput/index.js +126 -0
  106. package/dist/components/FileInput/index.js.map +1 -0
  107. package/dist/components/FileInput/types.js +2 -0
  108. package/dist/components/FileInput/types.js.map +1 -0
  109. package/dist/components/Grid/index.js +65 -0
  110. package/dist/components/Grid/index.js.map +1 -0
  111. package/dist/components/Grid/styles.js +2 -0
  112. package/dist/components/Grid/styles.js.map +1 -0
  113. package/dist/components/Grid/types.js +2 -0
  114. package/dist/components/Grid/types.js.map +1 -0
  115. package/dist/components/Icon/index.js +59 -0
  116. package/dist/components/Icon/index.js.map +1 -0
  117. package/dist/components/Icon/styles.js +2 -0
  118. package/dist/components/Icon/styles.js.map +1 -0
  119. package/dist/components/Icon/types.js +2 -0
  120. package/dist/components/Icon/types.js.map +1 -0
  121. package/dist/components/Image/index.js +108 -0
  122. package/dist/components/Image/index.js.map +1 -0
  123. package/dist/components/Image/styles.js +2 -0
  124. package/dist/components/Image/styles.js.map +1 -0
  125. package/dist/components/Image/types.js +2 -0
  126. package/dist/components/Image/types.js.map +1 -0
  127. package/dist/components/ImageView/Spotlight.js +139 -0
  128. package/dist/components/ImageView/Spotlight.js.map +1 -0
  129. package/dist/components/ImageView/component.js +17 -0
  130. package/dist/components/ImageView/component.js.map +1 -0
  131. package/dist/components/ImageView/index.js +3 -0
  132. package/dist/components/ImageView/index.js.map +1 -0
  133. package/dist/components/InputBase/index.js +37 -0
  134. package/dist/components/InputBase/index.js.map +1 -0
  135. package/dist/components/InputBase/styles.js +98 -0
  136. package/dist/components/InputBase/styles.js.map +1 -0
  137. package/dist/components/InputBase/types.js +2 -0
  138. package/dist/components/InputBase/types.js.map +1 -0
  139. package/dist/components/InputBase/useInputBase.js +48 -0
  140. package/dist/components/InputBase/useInputBase.js.map +1 -0
  141. package/dist/components/InputBase/useInputBasePartialStyles.js +35 -0
  142. package/dist/components/InputBase/useInputBasePartialStyles.js.map +1 -0
  143. package/dist/components/InputBase/utils.js +31 -0
  144. package/dist/components/InputBase/utils.js.map +1 -0
  145. package/dist/components/InputOverlay/index.js +68 -0
  146. package/dist/components/InputOverlay/index.js.map +1 -0
  147. package/dist/components/InputOverlay/store.js +49 -0
  148. package/dist/components/InputOverlay/store.js.map +1 -0
  149. package/dist/components/InputOverlay/types.js +2 -0
  150. package/dist/components/InputOverlay/types.js.map +1 -0
  151. package/dist/components/List/index.js +66 -0
  152. package/dist/components/List/index.js.map +1 -0
  153. package/dist/components/List/styles.js +2 -0
  154. package/dist/components/List/styles.js.map +1 -0
  155. package/dist/components/List/types.js +2 -0
  156. package/dist/components/List/types.js.map +1 -0
  157. package/dist/components/LoadingOverlay/index.js +51 -0
  158. package/dist/components/LoadingOverlay/index.js.map +1 -0
  159. package/dist/components/LoadingOverlay/styles.js +2 -0
  160. package/dist/components/LoadingOverlay/styles.js.map +1 -0
  161. package/dist/components/LoadingOverlay/types.js +2 -0
  162. package/dist/components/LoadingOverlay/types.js.map +1 -0
  163. package/dist/components/Modal/index.js +76 -0
  164. package/dist/components/Modal/index.js.map +1 -0
  165. package/dist/components/Modal/styles.js +2 -0
  166. package/dist/components/Modal/styles.js.map +1 -0
  167. package/dist/components/Modal/types.js +2 -0
  168. package/dist/components/Modal/types.js.map +1 -0
  169. package/dist/components/NumberIncrement/index.js +120 -0
  170. package/dist/components/NumberIncrement/index.js.map +1 -0
  171. package/dist/components/NumberIncrement/styles.js +2 -0
  172. package/dist/components/NumberIncrement/styles.js.map +1 -0
  173. package/dist/components/NumberIncrement/types.js +2 -0
  174. package/dist/components/NumberIncrement/types.js.map +1 -0
  175. package/dist/components/NumberIncrement/useNumberIncrement.js +116 -0
  176. package/dist/components/NumberIncrement/useNumberIncrement.js.map +1 -0
  177. package/dist/components/Pager/PagerDots.js +19 -0
  178. package/dist/components/Pager/PagerDots.js.map +1 -0
  179. package/dist/components/Pager/PagerItem.js +14 -0
  180. package/dist/components/Pager/PagerItem.js.map +1 -0
  181. package/dist/components/Pager/index.js +78 -0
  182. package/dist/components/Pager/index.js.map +1 -0
  183. package/dist/components/Pager/styles.js +2 -0
  184. package/dist/components/Pager/styles.js.map +1 -0
  185. package/dist/components/Pager/types.js +2 -0
  186. package/dist/components/Pager/types.js.map +1 -0
  187. package/dist/components/PaginationIndicator/index.js +36 -0
  188. package/dist/components/PaginationIndicator/index.js.map +1 -0
  189. package/dist/components/PaginationIndicator/styles.js +2 -0
  190. package/dist/components/PaginationIndicator/styles.js.map +1 -0
  191. package/dist/components/PaginationIndicator/types.js +2 -0
  192. package/dist/components/PaginationIndicator/types.js.map +1 -0
  193. package/dist/components/PlacesAutocomplete/index.js +71 -0
  194. package/dist/components/PlacesAutocomplete/index.js.map +1 -0
  195. package/dist/components/PlacesAutocomplete/styles.js +2 -0
  196. package/dist/components/PlacesAutocomplete/styles.js.map +1 -0
  197. package/dist/components/PlacesAutocomplete/types.js +2 -0
  198. package/dist/components/PlacesAutocomplete/types.js.map +1 -0
  199. package/dist/components/RadioInput/index.js +47 -0
  200. package/dist/components/RadioInput/index.js.map +1 -0
  201. package/dist/components/RadioInput/styles.js +2 -0
  202. package/dist/components/RadioInput/styles.js.map +1 -0
  203. package/dist/components/RadioInput/types.js +2 -0
  204. package/dist/components/RadioInput/types.js.map +1 -0
  205. package/dist/components/RefreshControl/index.js +27 -0
  206. package/dist/components/RefreshControl/index.js.map +1 -0
  207. package/dist/components/RefreshControl/styles.js +2 -0
  208. package/dist/components/RefreshControl/styles.js.map +1 -0
  209. package/dist/components/RefreshControl/types.js +2 -0
  210. package/dist/components/RefreshControl/types.js.map +1 -0
  211. package/dist/components/Scroll/index.js +40 -0
  212. package/dist/components/Scroll/index.js.map +1 -0
  213. package/dist/components/Scroll/styles.js +2 -0
  214. package/dist/components/Scroll/styles.js.map +1 -0
  215. package/dist/components/Scroll/types.js +2 -0
  216. package/dist/components/Scroll/types.js.map +1 -0
  217. package/dist/components/SearchInput/index.js +48 -0
  218. package/dist/components/SearchInput/index.js.map +1 -0
  219. package/dist/components/SectionFilters/context.js +6 -0
  220. package/dist/components/SectionFilters/context.js.map +1 -0
  221. package/dist/components/SectionFilters/index.js +47 -0
  222. package/dist/components/SectionFilters/index.js.map +1 -0
  223. package/dist/components/SectionFilters/types.js +2 -0
  224. package/dist/components/SectionFilters/types.js.map +1 -0
  225. package/dist/components/SectionFilters/useSectionFilters.js +148 -0
  226. package/dist/components/SectionFilters/useSectionFilters.js.map +1 -0
  227. package/dist/components/Sections/index.js +105 -0
  228. package/dist/components/Sections/index.js.map +1 -0
  229. package/dist/components/Sections/styles.js +2 -0
  230. package/dist/components/Sections/styles.js.map +1 -0
  231. package/dist/components/Sections/types.js +2 -0
  232. package/dist/components/Sections/types.js.map +1 -0
  233. package/dist/components/SegmentedControl/Option.js +20 -0
  234. package/dist/components/SegmentedControl/Option.js.map +1 -0
  235. package/dist/components/SegmentedControl/index.js +130 -0
  236. package/dist/components/SegmentedControl/index.js.map +1 -0
  237. package/dist/components/SegmentedControl/styles.js +2 -0
  238. package/dist/components/SegmentedControl/styles.js.map +1 -0
  239. package/dist/components/SegmentedControl/types.js +2 -0
  240. package/dist/components/SegmentedControl/types.js.map +1 -0
  241. package/dist/components/Select/index.js +204 -0
  242. package/dist/components/Select/index.js.map +1 -0
  243. package/dist/components/Select/styles.js +2 -0
  244. package/dist/components/Select/styles.js.map +1 -0
  245. package/dist/components/Select/types.js +2 -0
  246. package/dist/components/Select/types.js.map +1 -0
  247. package/dist/components/Slider/index.js +99 -0
  248. package/dist/components/Slider/index.js.map +1 -0
  249. package/dist/components/Slider/styles.js +2 -0
  250. package/dist/components/Slider/styles.js.map +1 -0
  251. package/dist/components/Slider/types.js +2 -0
  252. package/dist/components/Slider/types.js.map +1 -0
  253. package/dist/components/SortablePhotos/index.js +85 -0
  254. package/dist/components/SortablePhotos/index.js.map +1 -0
  255. package/dist/components/SortablePhotos/styles.js +2 -0
  256. package/dist/components/SortablePhotos/styles.js.map +1 -0
  257. package/dist/components/SortablePhotos/types.js +2 -0
  258. package/dist/components/SortablePhotos/types.js.map +1 -0
  259. package/dist/components/SortablePhotos/useSortablePhotos.js +143 -0
  260. package/dist/components/SortablePhotos/useSortablePhotos.js.map +1 -0
  261. package/dist/components/Switch/index.js +81 -0
  262. package/dist/components/Switch/index.js.map +1 -0
  263. package/dist/components/Switch/styles.js +2 -0
  264. package/dist/components/Switch/styles.js.map +1 -0
  265. package/dist/components/Switch/types.js +2 -0
  266. package/dist/components/Switch/types.js.map +1 -0
  267. package/dist/components/Tabs/Context.js +44 -0
  268. package/dist/components/Tabs/Context.js.map +1 -0
  269. package/dist/components/Tabs/Panel.js +21 -0
  270. package/dist/components/Tabs/Panel.js.map +1 -0
  271. package/dist/components/Tabs/Tab.js +28 -0
  272. package/dist/components/Tabs/Tab.js.map +1 -0
  273. package/dist/components/Tabs/TabList.js +16 -0
  274. package/dist/components/Tabs/TabList.js.map +1 -0
  275. package/dist/components/Tabs/index.js +34 -0
  276. package/dist/components/Tabs/index.js.map +1 -0
  277. package/dist/components/Tabs/styles.js +2 -0
  278. package/dist/components/Tabs/styles.js.map +1 -0
  279. package/dist/components/Tabs/types.js +2 -0
  280. package/dist/components/Tabs/types.js.map +1 -0
  281. package/dist/components/Text/index.js +82 -0
  282. package/dist/components/Text/index.js.map +1 -0
  283. package/dist/components/Text/styles.js +2 -0
  284. package/dist/components/Text/styles.js.map +1 -0
  285. package/dist/components/Text/types.js +2 -0
  286. package/dist/components/Text/types.js.map +1 -0
  287. package/dist/components/TextInput/index.js +99 -0
  288. package/dist/components/TextInput/index.js.map +1 -0
  289. package/dist/components/TextInput/styles.js +2 -0
  290. package/dist/components/TextInput/styles.js.map +1 -0
  291. package/dist/components/TextInput/types.js +2 -0
  292. package/dist/components/TextInput/types.js.map +1 -0
  293. package/dist/components/TextInput/useTextInput.js +66 -0
  294. package/dist/components/TextInput/useTextInput.js.map +1 -0
  295. package/dist/components/TimeInput/index.js +50 -0
  296. package/dist/components/TimeInput/index.js.map +1 -0
  297. package/dist/components/TimeInput/styles.js +2 -0
  298. package/dist/components/TimeInput/styles.js.map +1 -0
  299. package/dist/components/TimeInput/types.js +2 -0
  300. package/dist/components/TimeInput/types.js.map +1 -0
  301. package/dist/components/Touchable/index.js +170 -0
  302. package/dist/components/Touchable/index.js.map +1 -0
  303. package/dist/components/Touchable/styles.js +2 -0
  304. package/dist/components/Touchable/styles.js.map +1 -0
  305. package/dist/components/Touchable/types.js +2 -0
  306. package/dist/components/Touchable/types.js.map +1 -0
  307. package/dist/components/View/index.js +28 -0
  308. package/dist/components/View/index.js.map +1 -0
  309. package/dist/components/View/styles.js +2 -0
  310. package/dist/components/View/styles.js.map +1 -0
  311. package/dist/components/View/types.js +2 -0
  312. package/dist/components/View/types.js.map +1 -0
  313. package/dist/components/components.js +46 -0
  314. package/dist/components/components.js.map +1 -0
  315. package/dist/hooks/index.js +6 -0
  316. package/dist/hooks/index.js.map +1 -0
  317. package/dist/hooks/useAnimatedState.js +28 -0
  318. package/dist/hooks/useAnimatedState.js.map +1 -0
  319. package/dist/hooks/useAppState.js +16 -0
  320. package/dist/hooks/useAppState.js.map +1 -0
  321. package/dist/hooks/useKeyboardController.js +22 -0
  322. package/dist/hooks/useKeyboardController.js.map +1 -0
  323. package/dist/hooks/useStatusBar.js +18 -0
  324. package/dist/hooks/useStatusBar.js.map +1 -0
  325. package/dist/hooks/useStylesFor.js +13 -0
  326. package/dist/hooks/useStylesFor.js.map +1 -0
  327. package/dist/index.js +11 -0
  328. package/dist/index.js.map +1 -0
  329. package/dist/modules/PressableRipple/index.js +3 -0
  330. package/dist/modules/PressableRipple/index.js.map +1 -0
  331. package/dist/modules/PressableRipple/ripple.js +168 -0
  332. package/dist/modules/PressableRipple/ripple.js.map +1 -0
  333. package/dist/modules/PressableRipple/styles.js +18 -0
  334. package/dist/modules/PressableRipple/styles.js.map +1 -0
  335. package/dist/modules/PressableRipple/type.js +2 -0
  336. package/dist/modules/PressableRipple/type.js.map +1 -0
  337. package/dist/modules/backgroundTimer.js +33 -0
  338. package/dist/modules/backgroundTimer.js.map +1 -0
  339. package/dist/modules/formConfig.js +26 -0
  340. package/dist/modules/formConfig.js.map +1 -0
  341. package/dist/modules/index.js +3 -0
  342. package/dist/modules/index.js.map +1 -0
  343. package/dist/modules/reactNavigation.js +39 -0
  344. package/dist/modules/reactNavigation.js.map +1 -0
  345. package/dist/modules/scroll.js +59 -0
  346. package/dist/modules/scroll.js.map +1 -0
  347. package/dist/modules/textInputMask.js +7 -0
  348. package/dist/modules/textInputMask.js.map +1 -0
  349. package/dist/modules/types/textInputMask.js +2 -0
  350. package/dist/modules/types/textInputMask.js.map +1 -0
  351. package/dist/types/index.js +2 -0
  352. package/dist/types/index.js.map +1 -0
  353. package/dist/types/utility.js +2 -0
  354. package/dist/types/utility.js.map +1 -0
  355. package/dist/utils/NotificationManager/index.js +170 -0
  356. package/dist/utils/NotificationManager/index.js.map +1 -0
  357. package/dist/utils/NotificationManager/types.js +2 -0
  358. package/dist/utils/NotificationManager/types.js.map +1 -0
  359. package/dist/utils/OSAlert.js +128 -0
  360. package/dist/utils/OSAlert.js.map +1 -0
  361. package/dist/utils/StorageManager.js +84 -0
  362. package/dist/utils/StorageManager.js.map +1 -0
  363. package/dist/utils/Subscription.js +48 -0
  364. package/dist/utils/Subscription.js.map +1 -0
  365. package/dist/utils/hooks.js +199 -0
  366. package/dist/utils/hooks.js.map +1 -0
  367. package/dist/utils/index.js +11 -0
  368. package/dist/utils/index.js.map +1 -0
  369. package/dist/utils/input.js +45 -0
  370. package/dist/utils/input.js.map +1 -0
  371. package/dist/utils/locale.js +11 -0
  372. package/dist/utils/locale.js.map +1 -0
  373. package/dist/utils/misc.js +111 -0
  374. package/dist/utils/misc.js.map +1 -0
  375. package/dist/utils/theme.js +37 -0
  376. package/dist/utils/theme.js.map +1 -0
  377. package/dist/utils/useQueryListRefresh.js +33 -0
  378. package/dist/utils/useQueryListRefresh.js.map +1 -0
  379. package/package.json +19 -19
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/Scroll/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React, { forwardRef, useCallback, useState } from 'react';
3
+ import { TextInput } from '../TextInput';
4
+ import { TypeGuards } from '@codeleap/types';
5
+ export const SearchInput = forwardRef((props, ref) => {
6
+ const { debugName, onClear, onSearchChange, onTypingChange, clearIcon, searchIcon, debounce, placeholder, value, onValueChange, showClear, ...others } = {
7
+ ...SearchInput.defaultProps,
8
+ ...props,
9
+ };
10
+ /** When `value` + `onValueChange` are both provided the component is fully controlled — the internal `useState` is skipped entirely, so the caller owns the displayed text and must update it on every keystroke. */
11
+ const [search, setSearch] = !TypeGuards.isNil(value) && !!onValueChange ? [value, onValueChange] : useState('');
12
+ const setSearchTimeout = React.useRef(null);
13
+ const handleChangeSearch = useCallback((value) => {
14
+ onTypingChange?.(true);
15
+ setSearch(value);
16
+ if (TypeGuards.isNil(debounce)) {
17
+ onSearchChange?.(value);
18
+ }
19
+ else {
20
+ if (setSearchTimeout.current) {
21
+ clearTimeout(setSearchTimeout.current);
22
+ setSearchTimeout.current = null;
23
+ }
24
+ setSearchTimeout.current = setTimeout(() => {
25
+ onSearchChange(value);
26
+ onTypingChange?.(false);
27
+ }, debounce ?? 0);
28
+ }
29
+ }, [onSearchChange, onTypingChange]);
30
+ const handleClear = useCallback(() => {
31
+ setSearch('');
32
+ onSearchChange?.('');
33
+ onClear?.();
34
+ }, []);
35
+ return (_jsx(TextInput, { value: search, onValueChange: handleChangeSearch, placeholder: placeholder, debugName: `Search ${debugName}`, rightIcon: (showClear?.(search) ?? true) && {
36
+ name: clearIcon,
37
+ onPress: handleClear,
38
+ }, leftIcon: {
39
+ name: searchIcon,
40
+ }, ref: ref, ...others }));
41
+ });
42
+ SearchInput.defaultProps = {
43
+ debounce: 500,
44
+ clearIcon: 'x',
45
+ searchIcon: 'search',
46
+ showClear: (s) => !!s?.trim?.()
47
+ };
48
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SearchInput/index.tsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,EAAE,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAGhE,OAAO,EAAkB,SAAS,EAAE,MAAM,cAAc,CAAA;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAyB5C,MAAM,CAAC,MAAM,WAAW,GAAc,UAAU,CAAC,CAAC,KAAuB,EAAE,GAAG,EAAE,EAAE;IAChF,MAAM,EACJ,SAAS,EACT,OAAO,EACP,cAAc,EACd,cAAc,EACd,SAAS,EACT,UAAU,EACV,QAAQ,EACR,WAAW,EACX,KAAK,EACL,aAAa,EACb,SAAS,EACT,GAAG,MAAM,EACV,GAAG;QACF,GAAG,WAAW,CAAC,YAAY;QAC3B,GAAG,KAAK;KACT,CAAA;IAED,qNAAqN;IACrN,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAE/G,MAAM,gBAAgB,GAAG,KAAK,CAAC,MAAM,CAAuC,IAAI,CAAC,CAAA;IAEjF,MAAM,kBAAkB,GAAG,WAAW,CAAC,CAAC,KAAa,EAAE,EAAE;QACvD,cAAc,EAAE,CAAC,IAAI,CAAC,CAAA;QAEtB,SAAS,CAAC,KAAK,CAAC,CAAA;QAEhB,IAAI,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,cAAc,EAAE,CAAC,KAAK,CAAC,CAAA;QACzB,CAAC;aAAM,CAAC;YACN,IAAI,gBAAgB,CAAC,OAAO,EAAE,CAAC;gBAC7B,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAA;gBACtC,gBAAgB,CAAC,OAAO,GAAG,IAAI,CAAA;YACjC,CAAC;YAED,gBAAgB,CAAC,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE;gBACzC,cAAc,CAAC,KAAK,CAAC,CAAA;gBACrB,cAAc,EAAE,CAAC,KAAK,CAAC,CAAA;YACzB,CAAC,EAAE,QAAQ,IAAI,CAAC,CAAC,CAAA;QACnB,CAAC;IACH,CAAC,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC,CAAC,CAAA;IAEpC,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,EAAE;QACnC,SAAS,CAAC,EAAE,CAAC,CAAA;QACb,cAAc,EAAE,CAAC,EAAE,CAAC,CAAA;QACpB,OAAO,EAAE,EAAE,CAAA;IACb,CAAC,EAAE,EAAE,CAAC,CAAA;IAEN,OAAO,CACL,KAAC,SAAS,IACR,KAAK,EAAE,MAAM,EACb,aAAa,EAAE,kBAAkB,EACjC,WAAW,EAAE,WAAW,EACxB,SAAS,EAAE,UAAU,SAAS,EAAE,EAChC,SAAS,EAAE,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,IAAI;YAC1C,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,WAAW;SACrB,EACD,QAAQ,EAAE;YACR,IAAI,EAAE,UAAU;SACjB,EACD,GAAG,EAAE,GAAU,KACX,MAAM,GACV,CACH,CAAA;AACH,CAAC,CAAC,CAAA;AAEF,WAAW,CAAC,YAAY,GAAG;IACzB,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAc;IACzB,UAAU,EAAE,QAAmB;IAC/B,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE;CACH,CAAA"}
@@ -0,0 +1,6 @@
1
+ import { createContext, useContext } from 'react';
2
+ export const SectionsFilterContext = createContext({});
3
+ export function useSectionFiltersContext() {
4
+ return useContext(SectionsFilterContext);
5
+ }
6
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/components/SectionFilters/context.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAA;AAUjD,MAAM,CAAC,MAAM,qBAAqB,GAAG,aAAa,CAAC,EAA4B,CAAC,CAAA;AAEhF,MAAM,UAAU,wBAAwB;IACtC,OAAO,UAAU,CAAC,qBAAqB,CAA8B,CAAA;AACvE,CAAC"}
@@ -0,0 +1,47 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TypeGuards } from '@codeleap/types';
3
+ import { memoBy } from '@codeleap/utils';
4
+ import { Button } from '../Button';
5
+ import { Sections } from '../Sections';
6
+ import { Text } from '../Text';
7
+ import { SectionsFilterContext, useSectionFiltersContext } from './context';
8
+ import { useSectionFilters } from './useSectionFilters';
9
+ export * from './types';
10
+ export * from './context';
11
+ export * from './useSectionFilters';
12
+ const SectionComponent = memoBy((props) => {
13
+ const { renderWith: Component, index } = props;
14
+ const handle = useSectionFiltersContext();
15
+ if (!Component)
16
+ return null;
17
+ return (_jsx(Component, { ...props, selectedItems: handle.selectedItems[index] ?? [], clearSelectedItems: () => handle.clearSelectedItemsWithSection(index) }));
18
+ }, ['renderWith']);
19
+ /**
20
+ * `handle` can be provided externally to make the filter state controlled from outside;
21
+ * if omitted, an internal `useSectionFilters` instance is created from the same props.
22
+ * Either way, the handle is published to `SectionsFilterContext` so `renderSectionHeader`
23
+ * and `renderSectionFooter` can read per-section selection state via `useSectionFiltersContext`.
24
+ */
25
+ export function SectionFilters(props) {
26
+ const { sections, renderItem: RenderItem, renderSectionHeader, renderSectionFooter, children, ...rest } = {
27
+ ...SectionFilters.defaultProps,
28
+ ...props,
29
+ };
30
+ const handle = props.handle ?? useSectionFilters(props);
31
+ const renderItem = (section) => {
32
+ const hasSection = !TypeGuards.isNil(section?.index) && !TypeGuards.isNil(section);
33
+ const sectionLimitReached = hasSection && handle.sectionLimitReached(section?.index);
34
+ const limitReached = handle.limitReached();
35
+ const disableOnReachLimit = handle.disableItemsOnLimitReached;
36
+ const disableNonSelectedItems = (limitReached || sectionLimitReached) && disableOnReachLimit;
37
+ const isSelected = handle.isSelected(section?.item);
38
+ const isDisabled = disableNonSelectedItems && !isSelected;
39
+ return (_jsx(RenderItem, { ...section, onPress: () => handle.toggleItem(section?.item), selected: isSelected, disabled: isDisabled, text: section?.item?.label }));
40
+ };
41
+ return (_jsxs(SectionsFilterContext.Provider, { value: handle, children: [_jsx(Sections, { ...rest, sections: sections, renderItem: renderItem, renderSectionHeader: (props) => _jsx(SectionComponent, { ...props, renderWith: renderSectionHeader }), renderSectionFooter: (props) => _jsx(SectionComponent, { ...props, renderWith: renderSectionFooter }) }), children] }));
42
+ }
43
+ SectionFilters.defaultProps = {
44
+ renderItem: Button,
45
+ renderSectionHeader: ({ title }) => _jsx(Text, { text: title })
46
+ };
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SectionFilters/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/SectionFilters/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,148 @@
1
+ import { TypeGuards } from '@codeleap/types';
2
+ import { deepEqual } from '@codeleap/utils';
3
+ import React, { useCallback } from 'react';
4
+ /**
5
+ * All selection state is owned internally — this hook is uncontrolled.
6
+ * Pass `initialSelectedItems` to seed state; after mount, changes are only possible
7
+ * through `toggleItem` / `clearSelectedItemsWithSection`.
8
+ * `onToggleItem` can intercept a toggle and return `true` to prevent the internal
9
+ * state update (useful for controlled scenarios without rewriting the whole hook).
10
+ * When `selectionLimit === 1` the entire per-section array is replaced on toggle
11
+ * rather than appended, so de-selecting by re-tapping the same item is not supported
12
+ * at limit=1 — tapping a new item simply replaces the previous selection.
13
+ */
14
+ export function useSectionFilters(props) {
15
+ const { sections, areItemsEqual = deepEqual, selectionLimit = 1, sectionSelectionLimit = null, disableItemsOnLimitReached = selectionLimit > 1 && !sectionSelectionLimit, initialSelectedItems = [], onToggleItem, } = props;
16
+ /** When `initialSelectedItems` is a plain array (no section keys), it is assigned to
17
+ * section index 0 so single-section callers don't have to wrap in an object. */
18
+ const [selectedItems, setSelectedItems] = React.useState(() => {
19
+ if (TypeGuards.isArray(initialSelectedItems)) {
20
+ return {
21
+ 0: initialSelectedItems,
22
+ };
23
+ }
24
+ return initialSelectedItems ?? {};
25
+ });
26
+ const changed = useCallback(() => {
27
+ return Object.entries(selectedItems).some(([sectionIndex, items]) => {
28
+ const initialItems = initialSelectedItems[sectionIndex] ?? [];
29
+ if (!initialItems) {
30
+ return items.length > 0;
31
+ }
32
+ if (items.length !== initialItems.length) {
33
+ return true;
34
+ }
35
+ return items.some((item) => !initialItems.some((i) => areItemsEqual(i, item)));
36
+ });
37
+ }, [selectedItems, initialSelectedItems]);
38
+ const getAllItems = () => {
39
+ return sections?.flatMap((section) => section.data) ?? [];
40
+ };
41
+ const findItemSection = (item) => {
42
+ if (!sections) {
43
+ return {
44
+ sectionIndex: 0,
45
+ section: null,
46
+ };
47
+ }
48
+ const sectionIndex = sections?.findIndex((section) => {
49
+ return section.data.some((i) => areItemsEqual(item, i));
50
+ });
51
+ if (sectionIndex === -1) {
52
+ return {
53
+ sectionIndex: null,
54
+ section: null,
55
+ };
56
+ }
57
+ const section = sections[sectionIndex];
58
+ return {
59
+ sectionIndex,
60
+ section,
61
+ };
62
+ };
63
+ const isSelected = (item) => {
64
+ if (sections) {
65
+ const { sectionIndex } = findItemSection(item);
66
+ return selectedItems[sectionIndex]?.some((i) => areItemsEqual(i, item));
67
+ }
68
+ return selectedItems[0]?.some((i) => areItemsEqual(i, item));
69
+ };
70
+ const toggleItem = (item) => {
71
+ let sectionIndex = -1;
72
+ let limit = selectionLimit;
73
+ if (sections) {
74
+ const { sectionIndex: si, section } = findItemSection(item);
75
+ if (si === null) {
76
+ return;
77
+ }
78
+ sectionIndex = si;
79
+ limit = section.selectionLimit ?? selectionLimit;
80
+ }
81
+ else {
82
+ sectionIndex = 0;
83
+ }
84
+ const handled = onToggleItem?.(item, sections[sectionIndex]) ?? false;
85
+ if (handled) {
86
+ return;
87
+ }
88
+ if (selectionLimit === 1) {
89
+ setSelectedItems({
90
+ [sectionIndex]: [item],
91
+ });
92
+ return;
93
+ }
94
+ const currentItems = selectedItems[sectionIndex] ?? [];
95
+ const isItemSelected = currentItems.some((i) => areItemsEqual(i, item));
96
+ const newItems = [...currentItems];
97
+ if (isItemSelected) {
98
+ const index = newItems.findIndex((i) => areItemsEqual(i, item));
99
+ newItems.splice(index, 1);
100
+ }
101
+ else {
102
+ if (newItems.length >= limit) {
103
+ newItems.shift();
104
+ }
105
+ newItems.push(item);
106
+ }
107
+ setSelectedItems({
108
+ ...selectedItems,
109
+ [sectionIndex]: newItems,
110
+ });
111
+ };
112
+ function sectionLimitReached(sectionIndex) {
113
+ const section = sections[sectionIndex];
114
+ if (!section) {
115
+ return false;
116
+ }
117
+ const limit = section.selectionLimit ?? sectionSelectionLimit ?? selectionLimit;
118
+ if (!limit) {
119
+ return false;
120
+ }
121
+ const nItems = selectedItems[sectionIndex]?.length;
122
+ return nItems >= limit;
123
+ }
124
+ function limitReached() {
125
+ const nItems = Object.values(selectedItems).flatMap((i) => i).length;
126
+ return nItems >= selectionLimit;
127
+ }
128
+ function clearSelectedItemsWithSection(sectionIndex) {
129
+ setSelectedItems({
130
+ ...selectedItems,
131
+ [sectionIndex]: [],
132
+ });
133
+ }
134
+ return {
135
+ isSelected,
136
+ toggleItem,
137
+ findItemSection,
138
+ selectedItems,
139
+ sectionLimitReached,
140
+ limitReached,
141
+ disableItemsOnLimitReached,
142
+ clearSelectedItemsWithSection,
143
+ changed,
144
+ areItemsEqual,
145
+ getAllItems,
146
+ };
147
+ }
148
+ //# sourceMappingURL=useSectionFilters.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSectionFilters.js","sourceRoot":"","sources":["../../../src/components/SectionFilters/useSectionFilters.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,105 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useMemo } from 'react';
3
+ import { TypeGuards } from '@codeleap/types';
4
+ import { useCallback } from '@codeleap/hooks';
5
+ import { SectionList } from 'react-native';
6
+ import { View } from '../View';
7
+ import { RefreshControl } from '../RefreshControl';
8
+ import { useKeyboardPaddingStyle } from '../../utils';
9
+ import { MobileStyleRegistry } from '../../Registry';
10
+ import { useStylesFor } from '../../hooks';
11
+ import { EmptyPlaceholder } from '../EmptyPlaceholder';
12
+ export * from './styles';
13
+ export * from './types';
14
+ const RenderSeparator = (props) => {
15
+ return _jsx(View, { style: props.separatorStyles });
16
+ };
17
+ /**
18
+ * Wraps React Native's SectionList. The `sections` data is augmented with a sequential `index`
19
+ * field internally — callers must not add their own `index` to section objects or it will be
20
+ * overwritten and position helpers (`isFirst`, `isLast`, `isOnly`) will break.
21
+ *
22
+ * There is no `keyExtractor` default — SectionList falls back to array index, which causes
23
+ * re-mount flicker on reorder. Always pass a `keyExtractor` when items can change order or identity.
24
+ */
25
+ export function Sections(sectionsProps) {
26
+ const { style, onRefresh, refreshing, placeholder, refreshControlProps, loading, keyboardAware, fakeEmpty = loading, contentContainerStyle, refreshControl, renderItem: providedRenderItem, sections: data, renderSectionHeader: providedRenderSectionHeader, renderSectionFooter: providedRenderSectionFooter, ...props } = {
27
+ ...Sections.defaultProps,
28
+ ...sectionsProps,
29
+ };
30
+ /** Deep-equality via JSON.stringify to avoid re-renders on reference changes; will miss non-serialisable values (functions, Dates) in section data. */
31
+ const sections = useMemo(() => {
32
+ return data?.map((section, index) => ({
33
+ ...section,
34
+ index,
35
+ }));
36
+ }, [JSON.stringify(data)]);
37
+ const styles = useStylesFor(Sections.styleRegistryName, style);
38
+ const separator = useCallback(() => {
39
+ if (!props?.separators)
40
+ return null;
41
+ return _jsx(RenderSeparator, { separatorStyles: styles.separator });
42
+ }, []);
43
+ const getSectionProps = (data) => {
44
+ const listLength = sections?.length || 0;
45
+ const isFirst = data?.section?.index === sections?.[0]?.index;
46
+ const isLast = data?.section?.index === sections?.[listLength - 1]?.index;
47
+ const isOnly = isFirst && isLast;
48
+ const title = data?.section?.title;
49
+ const index = data?.section?.index;
50
+ return { isFirst, isLast, isOnly, title, index };
51
+ };
52
+ const renderSectionHeader = useCallback((data) => {
53
+ if (!providedRenderSectionHeader)
54
+ return null;
55
+ const positionProps = getSectionProps(data);
56
+ return providedRenderSectionHeader({ ...data.section, ...positionProps });
57
+ }, [providedRenderSectionHeader, sections?.length]);
58
+ const renderSectionFooter = useCallback((data) => {
59
+ if (!providedRenderSectionFooter)
60
+ return null;
61
+ const positionProps = getSectionProps(data);
62
+ return providedRenderSectionFooter({ ...data.section, ...positionProps });
63
+ }, [providedRenderSectionFooter, sections?.length]);
64
+ const renderItem = useCallback((data) => {
65
+ if (!providedRenderItem)
66
+ return null;
67
+ const listLength = data?.section?.data?.length || 0;
68
+ const isFirst = data?.index === 0;
69
+ const isLast = data?.index === listLength - 1;
70
+ const isOnly = isFirst && isLast;
71
+ return providedRenderItem({
72
+ ...data,
73
+ isFirst,
74
+ isLast,
75
+ isOnly,
76
+ });
77
+ }, [providedRenderItem]);
78
+ const isEmpty = !sections || !sections?.length;
79
+ const _placeholder = {
80
+ ...placeholder,
81
+ loading: TypeGuards.isBoolean(placeholder?.loading) ? placeholder.loading : loading,
82
+ };
83
+ const keyboardStyle = useKeyboardPaddingStyle([
84
+ styles.content,
85
+ contentContainerStyle,
86
+ isEmpty && styles['content:empty'],
87
+ loading && styles['content:loading'],
88
+ ], keyboardAware && !props.horizontal);
89
+ const wrapperStyle = [styles.wrapper, isEmpty && styles['wrapper:empty'], loading && styles['wrapper:loading']];
90
+ return (_jsx(SectionList, { ItemSeparatorComponent: separator, refreshControl: TypeGuards.isFunction(onRefresh) ? (_jsx(RefreshControl, { refreshing: refreshing, onRefresh: onRefresh, ...refreshControlProps })) : null, ListEmptyComponent: _jsx(EmptyPlaceholder, { ..._placeholder }), showsVerticalScrollIndicator: false, showsHorizontalScrollIndicator: false, ...props, ListHeaderComponentStyle: styles.header, ListFooterComponentStyle: styles.footer, style: wrapperStyle, contentContainerStyle: keyboardStyle, sections: sections, renderItem: renderItem, renderSectionHeader: renderSectionHeader, renderSectionFooter: renderSectionFooter }));
91
+ }
92
+ Sections.styleRegistryName = 'Sections';
93
+ Sections.elements = ['wrapper', 'content', 'separator', 'header', 'footer', 'refreshControl'];
94
+ Sections.rootElement = 'wrapper';
95
+ Sections.withVariantTypes = (styles) => {
96
+ return Sections;
97
+ };
98
+ Sections.defaultProps = {
99
+ keyboardShouldPersistTaps: 'handled',
100
+ fakeEmpty: false,
101
+ loading: false,
102
+ keyboardAware: true,
103
+ };
104
+ MobileStyleRegistry.registerComponent(Sections);
105
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Sections/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/Sections/styles.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/Sections/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,20 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Text } from '../Text';
3
+ import { Touchable } from '../Touchable';
4
+ import { Icon } from '../Icon';
5
+ export const SegmentedControlOption = (props) => {
6
+ const { selected, onPress, debugName, style, variantStyles, label, value, icon, textProps, badge = null, ...touchableProps } = props;
7
+ return (_jsxs(Touchable, { debugName: `Segmented Control ${debugName}, option ${label}`, noFeedback: selected, style: [
8
+ variantStyles?.button,
9
+ selected && variantStyles['button:selected'],
10
+ style,
11
+ {
12
+ feedback: variantStyles.buttonFeedback,
13
+ }
14
+ ], onPress: onPress, ...touchableProps, children: [!!icon ? _jsx(Icon, { name: icon, style: variantStyles?.icon }) : null, _jsx(Text, { text: label, style: [
15
+ variantStyles?.text,
16
+ selected && variantStyles['text:selected'],
17
+ touchableProps?.disabled && variantStyles['text:disabled'],
18
+ ], ...textProps }), badge] }));
19
+ };
20
+ //# sourceMappingURL=Option.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Option.js","sourceRoot":"","sources":["../../../src/components/SegmentedControl/Option.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAC9B,OAAO,EAAE,SAAS,EAAkB,MAAM,cAAc,CAAA;AAExD,OAAO,EAAE,IAAI,EAAE,MAAM,SAAS,CAAA;AAc9B,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,KAAkC,EAAE,EAAE;IAC3E,MAAM,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,EACL,aAAa,EACb,KAAK,EACL,KAAK,EACL,IAAI,EACJ,SAAS,EACT,KAAK,GAAG,IAAI,EACZ,GAAG,cAAc,EAClB,GAAG,KAAK,CAAA;IAET,OAAO,CACL,MAAC,SAAS,IACR,SAAS,EAAE,qBAAqB,SAAS,YAAY,KAAK,EAAE,EAC5D,UAAU,EAAE,QAAQ,EACpB,KAAK,EAAE;YACL,aAAa,EAAE,MAAM;YACrB,QAAQ,IAAI,aAAa,CAAC,iBAAiB,CAAC;YAC5C,KAAK;YACL;gBACE,QAAQ,EAAE,aAAa,CAAC,cAAc;aACvC;SACF,EACD,OAAO,EAAE,OAAO,KACZ,cAAc,aAEjB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAC,IAAI,IAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,GAAI,CAAC,CAAC,CAAC,IAAI,EAEjE,KAAC,IAAI,IACH,IAAI,EAAE,KAAK,EACX,KAAK,EAAE;oBACL,aAAa,EAAE,IAAI;oBACnB,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC;oBAC1C,cAAc,EAAE,QAAQ,IAAI,aAAa,CAAC,eAAe,CAAC;iBAC3D,KACG,SAAS,GACb,EAED,KAAK,IACI,CACb,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,130 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import React, { useImperativeHandle, useMemo, useRef, useState } from 'react';
3
+ import { Easing, ScrollView } from 'react-native';
4
+ import { Text } from '../Text';
5
+ import { View } from '../View';
6
+ import { useAnimatedVariantStyles } from '../../utils';
7
+ import { SegmentedControlOption } from './Option';
8
+ import { useTheme } from '@codeleap/styles';
9
+ import { MobileStyleRegistry } from '../../Registry';
10
+ import { useStylesFor } from '../../hooks';
11
+ export * from './styles';
12
+ export * from './types';
13
+ const DefaultBubble = (props) => {
14
+ return _jsx(View, { animated: true, ...props });
15
+ };
16
+ const defaultAnimation = {
17
+ type: 'timing',
18
+ duration: 200,
19
+ easing: Easing.linear,
20
+ };
21
+ /**
22
+ * Always fully controlled — there is no internal selected state; `value` and `onValueChange`
23
+ * are required. The animated bubble position is driven by Reanimated worklets, so the bubble
24
+ * can only animate when `currentOptionIdx` changes (i.e. `value` changes from the parent).
25
+ */
26
+ export const SegmentedControl = React.forwardRef((props, ref) => {
27
+ const [themeValues, themeSpacing] = useTheme(store => [store.theme?.values, store.theme?.spacing]);
28
+ const { options = [], onValueChange, debugName, label, value, animation = {}, scrollProps = {},
29
+ /** Default divides total screen width equally; override `getItemWidth` when options have variable label lengths or the control doesn't fill the screen. */
30
+ getItemWidth = () => (themeValues?.width - themeSpacing?.value?.(4)) / options.length, renderBubble: BubbleView, scrollToCurrentOptionOnMount, renderOption: Option, touchableProps, style, ...viewProps } = {
31
+ ...SegmentedControl.defaultProps,
32
+ ...props,
33
+ };
34
+ const [bubbleWidth, setBubbleWidth] = useState(0);
35
+ const _animation = {
36
+ ...defaultAnimation,
37
+ ...animation,
38
+ };
39
+ const styles = useStylesFor(SegmentedControl.styleRegistryName, style);
40
+ const scrollRef = useRef(null);
41
+ function scrollTo(idx) {
42
+ if (!scrollRef.current)
43
+ return;
44
+ setTimeout(() => {
45
+ scrollRef.current?.scrollTo({
46
+ x: widthStyle.width * idx,
47
+ y: 0,
48
+ animated: true
49
+ });
50
+ });
51
+ }
52
+ const widthStyle = useMemo(() => {
53
+ if (getItemWidth) {
54
+ const sizes = options.map(getItemWidth);
55
+ const maxWidth = sizes.sort((a, b) => b - a)[0];
56
+ return { width: maxWidth };
57
+ }
58
+ return {
59
+ width: bubbleWidth,
60
+ };
61
+ }, [options, bubbleWidth]);
62
+ const currentOptionIdx = options.findIndex(o => o.value === value) || 0;
63
+ const onPress = (txt, idx) => {
64
+ return () => {
65
+ onValueChange(txt);
66
+ scrollTo(idx);
67
+ };
68
+ };
69
+ const hasScrolledInitially = useRef(false);
70
+ useImperativeHandle(ref, () => {
71
+ if (!scrollRef.current)
72
+ return null;
73
+ return {
74
+ ...(scrollRef.current),
75
+ scrollTo,
76
+ scrollToCurrent() {
77
+ if (!scrollRef.current)
78
+ return;
79
+ scrollTo(currentOptionIdx);
80
+ },
81
+ };
82
+ }, [
83
+ currentOptionIdx,
84
+ ]);
85
+ if (!hasScrolledInitially.current && scrollRef.current && scrollToCurrentOptionOnMount) {
86
+ scrollTo(currentOptionIdx);
87
+ hasScrolledInitially.current = true;
88
+ }
89
+ const bubbleAnimation = useAnimatedVariantStyles({
90
+ variantStyles: styles,
91
+ animatedProperties: [],
92
+ updater: () => {
93
+ 'worklet';
94
+ return {
95
+ translateX: currentOptionIdx * widthStyle.width,
96
+ };
97
+ },
98
+ transition: _animation,
99
+ dependencies: [currentOptionIdx, widthStyle.width],
100
+ });
101
+ /** Tracks the widest option measured during onLayout to set a uniform bubble width when `getItemWidth` is not provided; reset to 0 after each full pass so re-renders don't accumulate stale values. */
102
+ const largestWidth = useRef(0);
103
+ return (_jsxs(View, { style: styles?.wrapper, children: [label ? (_jsx(View, { ...viewProps, style: styles?.labelWrapper, children: _jsx(Text, { style: styles?.labelText, text: label }) })) : null, _jsx(ScrollView, { horizontal: true, showsHorizontalScrollIndicator: false, style: styles?.scroll, contentContainerStyle: styles?.scrollContent, ...scrollProps, ref: scrollRef, children: _jsxs(View, { style: styles?.innerWrapper, children: [_jsx(BubbleView, { options: options, animated: true, animatedStyle: bubbleAnimation, style: [
104
+ styles?.selectedBubble,
105
+ props?.touchableProps?.disabled && styles?.['selectedBubble:disabled'],
106
+ widthStyle,
107
+ ] }), options.map((o, idx) => (_jsx(Option, { debugName: debugName, label: o.label, value: o.value, icon: o.icon, onPress: onPress(o.value, idx), style: widthStyle, selected: value === o.value, variantStyles: styles, onLayout: e => {
108
+ const { width } = e.nativeEvent.layout;
109
+ if (width > largestWidth.current) {
110
+ largestWidth.current = width;
111
+ }
112
+ if (idx === options.length - 1) {
113
+ setBubbleWidth(largestWidth.current);
114
+ largestWidth.current = 0;
115
+ }
116
+ }, ...touchableProps }, idx)))] }) })] }));
117
+ });
118
+ SegmentedControl.styleRegistryName = 'SegmentedControl';
119
+ SegmentedControl.elements = ['wrapper', 'selectedBubble', 'innerWrapper', 'scroll', 'text', 'icon', 'button', 'label', 'badge'];
120
+ SegmentedControl.rootElement = 'scroll';
121
+ SegmentedControl.withVariantTypes = (styles) => {
122
+ return SegmentedControl;
123
+ };
124
+ SegmentedControl.defaultProps = {
125
+ renderBubble: DefaultBubble,
126
+ renderOption: SegmentedControlOption,
127
+ scrollToCurrentOptionOnMount: true,
128
+ };
129
+ MobileStyleRegistry.registerComponent(SegmentedControl);
130
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/SegmentedControl/index.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.js","sourceRoot":"","sources":["../../../src/components/SegmentedControl/styles.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/components/SegmentedControl/types.ts"],"names":[],"mappings":""}