@demlanide/react-lucky-components 0.1.0

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 (340) hide show
  1. package/README.md +184 -0
  2. package/dist/Alert/Alert.d.ts +3 -0
  3. package/dist/Alert/Alert.d.ts.map +1 -0
  4. package/dist/Alert/Alert.js +7 -0
  5. package/dist/Alert/constants.d.ts +38 -0
  6. package/dist/Alert/constants.d.ts.map +1 -0
  7. package/dist/Alert/constants.js +34 -0
  8. package/dist/Alert/index.d.ts +3 -0
  9. package/dist/Alert/index.d.ts.map +1 -0
  10. package/dist/Alert/index.js +1 -0
  11. package/dist/Alert/styles.d.ts +11 -0
  12. package/dist/Alert/styles.d.ts.map +1 -0
  13. package/dist/Alert/styles.js +49 -0
  14. package/dist/Alert/types.d.ts +20 -0
  15. package/dist/Alert/types.d.ts.map +1 -0
  16. package/dist/Alert/types.js +1 -0
  17. package/dist/Avatar/Avatar.d.ts +3 -0
  18. package/dist/Avatar/Avatar.d.ts.map +1 -0
  19. package/dist/Avatar/Avatar.js +33 -0
  20. package/dist/Avatar/Shapes/.map.json +42 -0
  21. package/dist/Avatar/Shapes/romb.png +0 -0
  22. package/dist/Avatar/consts.d.ts +21 -0
  23. package/dist/Avatar/consts.d.ts.map +1 -0
  24. package/dist/Avatar/consts.js +20 -0
  25. package/dist/Avatar/index.d.ts +3 -0
  26. package/dist/Avatar/index.d.ts.map +1 -0
  27. package/dist/Avatar/index.js +1 -0
  28. package/dist/Avatar/styles.d.ts +27 -0
  29. package/dist/Avatar/styles.d.ts.map +1 -0
  30. package/dist/Avatar/styles.js +83 -0
  31. package/dist/Avatar/types.d.ts +31 -0
  32. package/dist/Avatar/types.d.ts.map +1 -0
  33. package/dist/Avatar/types.js +1 -0
  34. package/dist/Avatar/utilities.d.ts +8 -0
  35. package/dist/Avatar/utilities.d.ts.map +1 -0
  36. package/dist/Avatar/utilities.js +66 -0
  37. package/dist/Badge/Badge.d.ts +3 -0
  38. package/dist/Badge/Badge.d.ts.map +1 -0
  39. package/dist/Badge/Badge.js +8 -0
  40. package/dist/Badge/constants.d.ts +20 -0
  41. package/dist/Badge/constants.d.ts.map +1 -0
  42. package/dist/Badge/constants.js +32 -0
  43. package/dist/Badge/index.d.ts +3 -0
  44. package/dist/Badge/index.d.ts.map +1 -0
  45. package/dist/Badge/index.js +1 -0
  46. package/dist/Badge/styles.d.ts +10 -0
  47. package/dist/Badge/styles.d.ts.map +1 -0
  48. package/dist/Badge/styles.js +28 -0
  49. package/dist/Badge/types.d.ts +18 -0
  50. package/dist/Badge/types.d.ts.map +1 -0
  51. package/dist/Badge/types.js +1 -0
  52. package/dist/BigInput/BigInput.d.ts +3 -0
  53. package/dist/BigInput/BigInput.d.ts.map +1 -0
  54. package/dist/BigInput/BigInput.js +46 -0
  55. package/dist/BigInput/constants.d.ts +32 -0
  56. package/dist/BigInput/constants.d.ts.map +1 -0
  57. package/dist/BigInput/constants.js +31 -0
  58. package/dist/BigInput/index.d.ts +3 -0
  59. package/dist/BigInput/index.d.ts.map +1 -0
  60. package/dist/BigInput/index.js +1 -0
  61. package/dist/BigInput/styles.d.ts +14 -0
  62. package/dist/BigInput/styles.d.ts.map +1 -0
  63. package/dist/BigInput/styles.js +80 -0
  64. package/dist/BigInput/types.d.ts +23 -0
  65. package/dist/BigInput/types.d.ts.map +1 -0
  66. package/dist/BigInput/types.js +1 -0
  67. package/dist/Button/Button.d.ts +3 -0
  68. package/dist/Button/Button.d.ts.map +1 -0
  69. package/dist/Button/Button.js +7 -0
  70. package/dist/Button/constants.d.ts +23 -0
  71. package/dist/Button/constants.d.ts.map +1 -0
  72. package/dist/Button/constants.js +28 -0
  73. package/dist/Button/index.d.ts +3 -0
  74. package/dist/Button/index.d.ts.map +1 -0
  75. package/dist/Button/index.js +1 -0
  76. package/dist/Button/styles.d.ts +13 -0
  77. package/dist/Button/styles.d.ts.map +1 -0
  78. package/dist/Button/styles.js +34 -0
  79. package/dist/Button/types.d.ts +20 -0
  80. package/dist/Button/types.d.ts.map +1 -0
  81. package/dist/Button/types.js +1 -0
  82. package/dist/CardStack/BehindCard.d.ts +12 -0
  83. package/dist/CardStack/BehindCard.d.ts.map +1 -0
  84. package/dist/CardStack/BehindCard.js +18 -0
  85. package/dist/CardStack/CardStack.d.ts +3 -0
  86. package/dist/CardStack/CardStack.d.ts.map +1 -0
  87. package/dist/CardStack/CardStack.js +77 -0
  88. package/dist/CardStack/CardStackDots.d.ts +3 -0
  89. package/dist/CardStack/CardStackDots.d.ts.map +1 -0
  90. package/dist/CardStack/CardStackDots.js +121 -0
  91. package/dist/CardStack/StackCard.d.ts +27 -0
  92. package/dist/CardStack/StackCard.d.ts.map +1 -0
  93. package/dist/CardStack/StackCard.js +45 -0
  94. package/dist/CardStack/constants.d.ts +32 -0
  95. package/dist/CardStack/constants.d.ts.map +1 -0
  96. package/dist/CardStack/constants.js +31 -0
  97. package/dist/CardStack/index.d.ts +4 -0
  98. package/dist/CardStack/index.d.ts.map +1 -0
  99. package/dist/CardStack/index.js +2 -0
  100. package/dist/CardStack/types.d.ts +39 -0
  101. package/dist/CardStack/types.d.ts.map +1 -0
  102. package/dist/CardStack/types.js +1 -0
  103. package/dist/CardStack/useSwipeGesture.d.ts +18 -0
  104. package/dist/CardStack/useSwipeGesture.d.ts.map +1 -0
  105. package/dist/CardStack/useSwipeGesture.js +70 -0
  106. package/dist/DatePicker/CalendarModal.d.ts +15 -0
  107. package/dist/DatePicker/CalendarModal.d.ts.map +1 -0
  108. package/dist/DatePicker/CalendarModal.js +129 -0
  109. package/dist/DatePicker/DatePicker.d.ts +3 -0
  110. package/dist/DatePicker/DatePicker.d.ts.map +1 -0
  111. package/dist/DatePicker/DatePicker.js +57 -0
  112. package/dist/DatePicker/DayCell.d.ts +14 -0
  113. package/dist/DatePicker/DayCell.d.ts.map +1 -0
  114. package/dist/DatePicker/DayCell.js +16 -0
  115. package/dist/DatePicker/constants.d.ts +46 -0
  116. package/dist/DatePicker/constants.d.ts.map +1 -0
  117. package/dist/DatePicker/constants.js +51 -0
  118. package/dist/DatePicker/icons.d.ts +4 -0
  119. package/dist/DatePicker/icons.d.ts.map +1 -0
  120. package/dist/DatePicker/icons.js +12 -0
  121. package/dist/DatePicker/index.d.ts +3 -0
  122. package/dist/DatePicker/index.d.ts.map +1 -0
  123. package/dist/DatePicker/index.js +1 -0
  124. package/dist/DatePicker/styles.d.ts +40 -0
  125. package/dist/DatePicker/styles.d.ts.map +1 -0
  126. package/dist/DatePicker/styles.js +134 -0
  127. package/dist/DatePicker/types.d.ts +39 -0
  128. package/dist/DatePicker/types.d.ts.map +1 -0
  129. package/dist/DatePicker/types.js +1 -0
  130. package/dist/DatePicker/utils.d.ts +15 -0
  131. package/dist/DatePicker/utils.d.ts.map +1 -0
  132. package/dist/DatePicker/utils.js +133 -0
  133. package/dist/DimmedScrollView/DimmedScrollView.d.ts +5 -0
  134. package/dist/DimmedScrollView/DimmedScrollView.d.ts.map +1 -0
  135. package/dist/DimmedScrollView/DimmedScrollView.js +18 -0
  136. package/dist/DimmedScrollView/index.d.ts +3 -0
  137. package/dist/DimmedScrollView/index.d.ts.map +1 -0
  138. package/dist/DimmedScrollView/index.js +1 -0
  139. package/dist/DimmedScrollView/styles.d.ts +15 -0
  140. package/dist/DimmedScrollView/styles.d.ts.map +1 -0
  141. package/dist/DimmedScrollView/styles.js +32 -0
  142. package/dist/DimmedScrollView/types.d.ts +20 -0
  143. package/dist/DimmedScrollView/types.d.ts.map +1 -0
  144. package/dist/DimmedScrollView/types.js +1 -0
  145. package/dist/FadingEdge/FadingEdge.d.ts +3 -0
  146. package/dist/FadingEdge/FadingEdge.d.ts.map +1 -0
  147. package/dist/FadingEdge/FadingEdge.js +30 -0
  148. package/dist/FadingEdge/index.d.ts +3 -0
  149. package/dist/FadingEdge/index.d.ts.map +1 -0
  150. package/dist/FadingEdge/index.js +1 -0
  151. package/dist/FadingEdge/types.d.ts +14 -0
  152. package/dist/FadingEdge/types.d.ts.map +1 -0
  153. package/dist/FadingEdge/types.js +1 -0
  154. package/dist/Icon/Icon.d.ts +6 -0
  155. package/dist/Icon/Icon.d.ts.map +1 -0
  156. package/dist/Icon/Icon.js +16 -0
  157. package/dist/Icon/defaults.d.ts +7 -0
  158. package/dist/Icon/defaults.d.ts.map +1 -0
  159. package/dist/Icon/defaults.js +80 -0
  160. package/dist/Icon/icons/navigation.d.ts +10 -0
  161. package/dist/Icon/icons/navigation.d.ts.map +1 -0
  162. package/dist/Icon/icons/navigation.js +10 -0
  163. package/dist/Icon/icons/system.d.ts +29 -0
  164. package/dist/Icon/icons/system.d.ts.map +1 -0
  165. package/dist/Icon/icons/system.js +29 -0
  166. package/dist/Icon/icons/tabs.d.ts +6 -0
  167. package/dist/Icon/icons/tabs.d.ts.map +1 -0
  168. package/dist/Icon/icons/tabs.js +6 -0
  169. package/dist/Icon/index.d.ts +3 -0
  170. package/dist/Icon/index.d.ts.map +1 -0
  171. package/dist/Icon/index.js +1 -0
  172. package/dist/Icon/registry.d.ts +3 -0
  173. package/dist/Icon/registry.d.ts.map +1 -0
  174. package/dist/Icon/registry.js +43 -0
  175. package/dist/Icon/types.d.ts +20 -0
  176. package/dist/Icon/types.d.ts.map +1 -0
  177. package/dist/Icon/types.js +40 -0
  178. package/dist/Input/Input.d.ts +5 -0
  179. package/dist/Input/Input.d.ts.map +1 -0
  180. package/dist/Input/Input.js +64 -0
  181. package/dist/Input/constants.d.ts +56 -0
  182. package/dist/Input/constants.d.ts.map +1 -0
  183. package/dist/Input/constants.js +61 -0
  184. package/dist/Input/index.d.ts +3 -0
  185. package/dist/Input/index.d.ts.map +1 -0
  186. package/dist/Input/index.js +1 -0
  187. package/dist/Input/styles.d.ts +23 -0
  188. package/dist/Input/styles.d.ts.map +1 -0
  189. package/dist/Input/styles.js +99 -0
  190. package/dist/Input/types.d.ts +21 -0
  191. package/dist/Input/types.d.ts.map +1 -0
  192. package/dist/Input/types.js +1 -0
  193. package/dist/ListCell/CheckMark.d.ts +10 -0
  194. package/dist/ListCell/CheckMark.d.ts.map +1 -0
  195. package/dist/ListCell/CheckMark.js +12 -0
  196. package/dist/ListCell/Chevron.d.ts +14 -0
  197. package/dist/ListCell/Chevron.d.ts.map +1 -0
  198. package/dist/ListCell/Chevron.js +22 -0
  199. package/dist/ListCell/ListCell.d.ts +3 -0
  200. package/dist/ListCell/ListCell.d.ts.map +1 -0
  201. package/dist/ListCell/ListCell.js +120 -0
  202. package/dist/ListCell/PickerModal.d.ts +13 -0
  203. package/dist/ListCell/PickerModal.d.ts.map +1 -0
  204. package/dist/ListCell/PickerModal.js +8 -0
  205. package/dist/ListCell/RadioButton.d.ts +10 -0
  206. package/dist/ListCell/RadioButton.d.ts.map +1 -0
  207. package/dist/ListCell/RadioButton.js +12 -0
  208. package/dist/ListCell/SwitchTrack.d.ts +19 -0
  209. package/dist/ListCell/SwitchTrack.d.ts.map +1 -0
  210. package/dist/ListCell/SwitchTrack.js +8 -0
  211. package/dist/ListCell/constants.d.ts +30 -0
  212. package/dist/ListCell/constants.d.ts.map +1 -0
  213. package/dist/ListCell/constants.js +35 -0
  214. package/dist/ListCell/index.d.ts +3 -0
  215. package/dist/ListCell/index.d.ts.map +1 -0
  216. package/dist/ListCell/index.js +1 -0
  217. package/dist/ListCell/styles.d.ts +28 -0
  218. package/dist/ListCell/styles.d.ts.map +1 -0
  219. package/dist/ListCell/styles.js +111 -0
  220. package/dist/ListCell/types.d.ts +68 -0
  221. package/dist/ListCell/types.d.ts.map +1 -0
  222. package/dist/ListCell/types.js +1 -0
  223. package/dist/ListCell/useSwitchAnimation.d.ts +12 -0
  224. package/dist/ListCell/useSwitchAnimation.d.ts.map +1 -0
  225. package/dist/ListCell/useSwitchAnimation.js +31 -0
  226. package/dist/ListCell/utilities.d.ts +24 -0
  227. package/dist/ListCell/utilities.d.ts.map +1 -0
  228. package/dist/ListCell/utilities.js +29 -0
  229. package/dist/Picker/Picker.d.ts +3 -0
  230. package/dist/Picker/Picker.d.ts.map +1 -0
  231. package/dist/Picker/Picker.js +76 -0
  232. package/dist/Picker/PickerHeader.d.ts +7 -0
  233. package/dist/Picker/PickerHeader.d.ts.map +1 -0
  234. package/dist/Picker/PickerHeader.js +6 -0
  235. package/dist/Picker/PickerRow.d.ts +9 -0
  236. package/dist/Picker/PickerRow.d.ts.map +1 -0
  237. package/dist/Picker/PickerRow.js +9 -0
  238. package/dist/Picker/SearchField.d.ts +8 -0
  239. package/dist/Picker/SearchField.d.ts.map +1 -0
  240. package/dist/Picker/SearchField.js +8 -0
  241. package/dist/Picker/constants.d.ts +24 -0
  242. package/dist/Picker/constants.d.ts.map +1 -0
  243. package/dist/Picker/constants.js +29 -0
  244. package/dist/Picker/icons.d.ts +3 -0
  245. package/dist/Picker/icons.d.ts.map +1 -0
  246. package/dist/Picker/icons.js +9 -0
  247. package/dist/Picker/index.d.ts +3 -0
  248. package/dist/Picker/index.d.ts.map +1 -0
  249. package/dist/Picker/index.js +1 -0
  250. package/dist/Picker/styles.d.ts +34 -0
  251. package/dist/Picker/styles.d.ts.map +1 -0
  252. package/dist/Picker/styles.js +192 -0
  253. package/dist/Picker/types.d.ts +40 -0
  254. package/dist/Picker/types.d.ts.map +1 -0
  255. package/dist/Picker/types.js +1 -0
  256. package/dist/Picker/useFilteredItems.d.ts +3 -0
  257. package/dist/Picker/useFilteredItems.d.ts.map +1 -0
  258. package/dist/Picker/useFilteredItems.js +18 -0
  259. package/dist/SegmentedTabs/SegmentedTabs.d.ts +3 -0
  260. package/dist/SegmentedTabs/SegmentedTabs.d.ts.map +1 -0
  261. package/dist/SegmentedTabs/SegmentedTabs.js +70 -0
  262. package/dist/SegmentedTabs/index.d.ts +3 -0
  263. package/dist/SegmentedTabs/index.d.ts.map +1 -0
  264. package/dist/SegmentedTabs/index.js +1 -0
  265. package/dist/SegmentedTabs/types.d.ts +10 -0
  266. package/dist/SegmentedTabs/types.d.ts.map +1 -0
  267. package/dist/SegmentedTabs/types.js +1 -0
  268. package/dist/Select/Select.d.ts +3 -0
  269. package/dist/Select/Select.d.ts.map +1 -0
  270. package/dist/Select/Select.js +60 -0
  271. package/dist/Select/index.d.ts +3 -0
  272. package/dist/Select/index.d.ts.map +1 -0
  273. package/dist/Select/index.js +1 -0
  274. package/dist/Select/styles.d.ts +8 -0
  275. package/dist/Select/styles.d.ts.map +1 -0
  276. package/dist/Select/styles.js +36 -0
  277. package/dist/Select/types.d.ts +37 -0
  278. package/dist/Select/types.d.ts.map +1 -0
  279. package/dist/Select/types.js +1 -0
  280. package/dist/Tabs/FloatingTabBar.d.ts +9 -0
  281. package/dist/Tabs/FloatingTabBar.d.ts.map +1 -0
  282. package/dist/Tabs/FloatingTabBar.js +55 -0
  283. package/dist/Tabs/Tabs.d.ts +21 -0
  284. package/dist/Tabs/Tabs.d.ts.map +1 -0
  285. package/dist/Tabs/Tabs.js +29 -0
  286. package/dist/Tabs/constants.d.ts +35 -0
  287. package/dist/Tabs/constants.d.ts.map +1 -0
  288. package/dist/Tabs/constants.js +36 -0
  289. package/dist/Tabs/icons.d.ts +16 -0
  290. package/dist/Tabs/icons.d.ts.map +1 -0
  291. package/dist/Tabs/icons.js +8 -0
  292. package/dist/Tabs/index.d.ts +6 -0
  293. package/dist/Tabs/index.d.ts.map +1 -0
  294. package/dist/Tabs/index.js +4 -0
  295. package/dist/Tabs/styles.d.ts +224 -0
  296. package/dist/Tabs/styles.d.ts.map +1 -0
  297. package/dist/Tabs/styles.js +121 -0
  298. package/dist/Tabs/types.d.ts +61 -0
  299. package/dist/Tabs/types.d.ts.map +1 -0
  300. package/dist/Tabs/types.js +4 -0
  301. package/dist/Tabs/useFloatingTabBarScrollPadding.d.ts +7 -0
  302. package/dist/Tabs/useFloatingTabBarScrollPadding.d.ts.map +1 -0
  303. package/dist/Tabs/useFloatingTabBarScrollPadding.js +11 -0
  304. package/dist/Tabs/utilities.d.ts +7 -0
  305. package/dist/Tabs/utilities.d.ts.map +1 -0
  306. package/dist/Tabs/utilities.js +18 -0
  307. package/dist/ToggleSection/ToggleSection.d.ts +3 -0
  308. package/dist/ToggleSection/ToggleSection.d.ts.map +1 -0
  309. package/dist/ToggleSection/ToggleSection.js +18 -0
  310. package/dist/ToggleSection/index.d.ts +3 -0
  311. package/dist/ToggleSection/index.d.ts.map +1 -0
  312. package/dist/ToggleSection/index.js +1 -0
  313. package/dist/ToggleSection/styles.d.ts +15 -0
  314. package/dist/ToggleSection/styles.d.ts.map +1 -0
  315. package/dist/ToggleSection/styles.js +49 -0
  316. package/dist/ToggleSection/types.d.ts +36 -0
  317. package/dist/ToggleSection/types.d.ts.map +1 -0
  318. package/dist/ToggleSection/types.js +1 -0
  319. package/dist/assets/fonts/.map.json +51 -0
  320. package/dist/assets/fonts/SB Sans Text.ttf +0 -0
  321. package/dist/assets/fonts/sf-pro-display/.map.json +114 -0
  322. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYBLACKITALIC.OTF +0 -0
  323. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYBOLD.OTF +0 -0
  324. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYHEAVYITALIC.OTF +0 -0
  325. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYLIGHTITALIC.OTF +0 -0
  326. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYMEDIUM.OTF +0 -0
  327. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYREGULAR.otf +0 -0
  328. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYSEMIBOLDITALIC.OTF +0 -0
  329. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYTHINITALIC.OTF +0 -0
  330. package/dist/assets/fonts/sf-pro-display/SFPRODISPLAYULTRALIGHTITALIC.OTF +0 -0
  331. package/dist/fonts.d.ts +6 -0
  332. package/dist/fonts.d.ts.map +1 -0
  333. package/dist/fonts.js +8 -0
  334. package/dist/index.d.ts +38 -0
  335. package/dist/index.d.ts.map +1 -0
  336. package/dist/index.js +20 -0
  337. package/dist/theme.d.ts +19 -0
  338. package/dist/theme.d.ts.map +1 -0
  339. package/dist/theme.js +18 -0
  340. package/package.json +76 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Button/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export { Button } from './Button';
@@ -0,0 +1,13 @@
1
+ /// <reference types="react" />
2
+ import type { ButtonVariant } from './types';
3
+ export declare const ButtonContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").TouchableOpacityProps & import("react").RefAttributes<import("react-native").View>, {
4
+ $variant: ButtonVariant;
5
+ $isDisabled: boolean;
6
+ $fullWidth: boolean;
7
+ }>>;
8
+ export declare const ContentRow: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
9
+ export declare const IconWrap: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
10
+ export declare const ButtonLabel: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").TextProps, {
11
+ $variant: ButtonVariant;
12
+ }>>;
13
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Button/styles.ts"],"names":[],"mappings":";AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAE7C,eAAO,MAAM,eAAe;cAChB,aAAa;iBACV,OAAO;gBACR,OAAO;GAgBpB,CAAC;AAEF,eAAO,MAAM,UAAU,+KAKtB,CAAC;AAEF,eAAO,MAAM,QAAQ,+KAGpB,CAAC;AAEF,eAAO,MAAM,WAAW;cAA2B,aAAa;GAO/D,CAAC"}
@@ -0,0 +1,34 @@
1
+ import styled from 'styled-components/native';
2
+ import { BUTTON_TOKENS, BUTTON_VARIANT_COLORS } from './constants';
3
+ export const ButtonContainer = styled.TouchableOpacity `
4
+ flex-direction: row;
5
+ justify-content: center;
6
+ align-items: center;
7
+ min-height: ${BUTTON_TOKENS.minHeight}px;
8
+ padding: ${BUTTON_TOKENS.paddingVertical}px ${BUTTON_TOKENS.paddingHorizontal}px;
9
+ border-radius: ${BUTTON_TOKENS.borderRadius}px;
10
+ width: ${({ $fullWidth }) => ($fullWidth ? '100%' : 'auto')};
11
+ overflow: hidden;
12
+ background-color: ${({ $variant, $isDisabled }) => $isDisabled
13
+ ? BUTTON_VARIANT_COLORS[$variant].disabledBackgroundColor
14
+ : BUTTON_VARIANT_COLORS[$variant].backgroundColor};
15
+ opacity: ${({ $variant, $isDisabled }) => $variant === 'secondary' && $isDisabled ? 0.55 : 1};
16
+ `;
17
+ export const ContentRow = styled.View `
18
+ flex-direction: row;
19
+ align-items: center;
20
+ justify-content: center;
21
+ gap: ${BUTTON_TOKENS.gap}px;
22
+ `;
23
+ export const IconWrap = styled.View `
24
+ align-items: center;
25
+ justify-content: center;
26
+ `;
27
+ export const ButtonLabel = styled.Text `
28
+ font-family: 'SF Pro';
29
+ font-size: ${BUTTON_TOKENS.typography.fontSize}px;
30
+ font-weight: ${BUTTON_TOKENS.typography.fontWeight};
31
+ line-height: ${BUTTON_TOKENS.typography.lineHeight}px;
32
+ letter-spacing: ${BUTTON_TOKENS.typography.letterSpacing}px;
33
+ color: ${({ $variant }) => BUTTON_VARIANT_COLORS[$variant].textColor};
34
+ `;
@@ -0,0 +1,20 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StyleProp, TextStyle, TouchableOpacityProps, ViewStyle } from 'react-native';
3
+ export type ButtonVariant = 'primary' | 'secondary';
4
+ export interface ButtonProps extends Omit<TouchableOpacityProps, 'children' | 'style'> {
5
+ /** Button content */
6
+ children: ReactNode;
7
+ /** Visual style variant. Currently only `primary` is supported. */
8
+ variant?: ButtonVariant;
9
+ /** Full width button container */
10
+ fullWidth?: boolean;
11
+ /** Element rendered before the label/content */
12
+ iconLeft?: ReactNode;
13
+ /** Element rendered after the label/content */
14
+ iconRight?: ReactNode;
15
+ /** Optional container style overrides */
16
+ style?: StyleProp<ViewStyle>;
17
+ /** Optional text style overrides for the label */
18
+ textStyle?: StyleProp<TextStyle>;
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Button/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3F,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,WAAW,CAAC;AAEpD,MAAM,WAAW,WAAY,SAAQ,IAAI,CAAC,qBAAqB,EAAE,UAAU,GAAG,OAAO,CAAC;IACpF,qBAAqB;IACrB,QAAQ,EAAE,SAAS,CAAC;IACpB,mEAAmE;IACnE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,QAAQ,CAAC,EAAE,SAAS,CAAC;IACrB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,kDAAkD;IAClD,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,12 @@
1
+ import React from 'react';
2
+ import Animated from 'react-native-reanimated';
3
+ interface BehindCardProps {
4
+ position: number;
5
+ progress: Animated.SharedValue<number>;
6
+ maxVisible: number;
7
+ style: any;
8
+ children: React.ReactNode;
9
+ }
10
+ export declare function BehindCard({ position, progress, maxVisible, style, children, }: BehindCardProps): import("react/jsx-runtime").JSX.Element;
11
+ export {};
12
+ //# sourceMappingURL=BehindCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BehindCard.d.ts","sourceRoot":"","sources":["../../src/CardStack/BehindCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,QAIN,MAAM,yBAAyB,CAAC;AAGjC,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IACvC,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,eAAe,2CAgCjB"}
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import Animated, { Extrapolation, useAnimatedStyle, interpolate, } from 'react-native-reanimated';
3
+ import { CARD_STACK_TOKENS as T } from './constants';
4
+ export function BehindCard({ position, progress, maxVisible, style, children, }) {
5
+ const animStyle = useAnimatedStyle(() => ({
6
+ transform: [
7
+ {
8
+ scale: interpolate(progress.value, [0, 1], [1 - T.scaleStep * position, 1 - T.scaleStep * (position - 1)]),
9
+ },
10
+ {
11
+ translateY: interpolate(progress.value, [0, 1], [T.offsetStep * position, T.offsetStep * (position - 1)]),
12
+ },
13
+ ],
14
+ opacity: interpolate(progress.value, [0, 0.001], [0, 1], Extrapolation.CLAMP),
15
+ zIndex: maxVisible - position,
16
+ }));
17
+ return (_jsx(Animated.View, { style: [style, animStyle], pointerEvents: "none", children: children }));
18
+ }
@@ -0,0 +1,3 @@
1
+ import type { CardStackProps } from './types';
2
+ export declare function CardStack<Item>({ data, activeIndex, onSwipeRelease, onSwiped, showDots, dotsActiveIndex, dotsPosition, onDotPress, dotsStyle, renderCard, keyExtractor, maxVisible, swipeThreshold, swipeVelocity, swipeCommitDuration, style, cardStyle, }: CardStackProps<Item>): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=CardStack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardStack.d.ts","sourceRoot":"","sources":["../../src/CardStack/CardStack.tsx"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,wBAAgB,SAAS,CAAC,IAAI,EAAE,EAC9B,IAAI,EACJ,WAAW,EACX,cAAc,EACd,QAAQ,EACR,QAAgB,EAChB,eAAe,EACf,YAAuB,EACvB,UAAU,EACV,SAAS,EACT,UAAU,EACV,YAAY,EACZ,UAAyB,EACzB,cAAiC,EACjC,aAA+B,EAC/B,mBAA2C,EAC3C,KAAK,EACL,SAAS,GACV,EAAE,cAAc,CAAC,IAAI,CAAC,kDAiFtB"}
@@ -0,0 +1,77 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { StyleSheet, View } from 'react-native';
3
+ import { CARD_STACK_TOKENS as T } from './constants';
4
+ import { useSwipeGesture } from './useSwipeGesture';
5
+ import { StackCard } from './StackCard';
6
+ import { CardStackDots } from './CardStackDots';
7
+ export function CardStack({ data, activeIndex, onSwipeRelease, onSwiped, showDots = false, dotsActiveIndex, dotsPosition = 'bottom', onDotPress, dotsStyle, renderCard, keyExtractor, maxVisible = T.maxVisible, swipeThreshold = T.swipeThreshold, swipeVelocity = T.swipeVelocity, swipeCommitDuration = T.swipeCommitDuration, style, cardStyle, }) {
8
+ const canCommitSwipe = data.length > 1;
9
+ const { pan, tx, ty, progress } = useSwipeGesture({
10
+ activeIndex,
11
+ swipeThreshold,
12
+ swipeVelocity,
13
+ swipeCommitDuration,
14
+ maxVisible,
15
+ canCommitSwipe,
16
+ onSwipeRelease,
17
+ onSwiped,
18
+ });
19
+ if (data.length === 0)
20
+ return null;
21
+ const cards = [];
22
+ const dotsIndex = dotsActiveIndex ?? activeIndex;
23
+ const flatCardStyle = cardStyle
24
+ ? StyleSheet.flatten([styles.card, cardStyle])
25
+ : styles.card;
26
+ for (let di = 0; di < data.length; di++) {
27
+ const item = data[di];
28
+ const key = keyExtractor(item, di);
29
+ const offset = (di - activeIndex + data.length) % data.length;
30
+ const isTop = offset === 0;
31
+ const isVisible = offset < maxVisible;
32
+ cards.push(_jsx(StackCard, { isTop: isTop, position: offset, visible: isVisible, pan: pan, tx: tx, ty: ty, progress: progress, maxVisible: maxVisible, style: flatCardStyle, children: renderCard(item, { index: di }) }, key));
33
+ }
34
+ const dots = showDots && onDotPress ? (_jsx(CardStackDots, { count: data.length, activeIndex: dotsIndex, onDotPress: onDotPress, position: dotsPosition, style: dotsStyle })) : null;
35
+ const isVerticalDots = dotsPosition === 'left' || dotsPosition === 'right';
36
+ return (_jsxs(View, { style: [styles.stack, style], children: [dots && !isVerticalDots && dotsPosition === 'top' && (_jsx(View, { style: [styles.dotsSlot, styles.dotsTop], children: dots })), _jsxs(View, { style: isVerticalDots ? styles.contentRow : styles.contentColumn, children: [dots && isVerticalDots && dotsPosition === 'left' && (_jsx(View, { style: [styles.dotsSlot, styles.dotsLeft], children: dots })), _jsx(View, { style: styles.cardsViewport, children: cards }), dots && isVerticalDots && dotsPosition === 'right' && (_jsx(View, { style: [styles.dotsSlot, styles.dotsRight], children: dots }))] }), dots && !isVerticalDots && dotsPosition === 'bottom' && (_jsx(View, { style: [styles.dotsSlot, styles.dotsBottom], children: dots }))] }));
37
+ }
38
+ const styles = StyleSheet.create({
39
+ stack: {
40
+ flex: 1,
41
+ },
42
+ contentColumn: {
43
+ flex: 1,
44
+ },
45
+ contentRow: {
46
+ flex: 1,
47
+ flexDirection: 'row',
48
+ },
49
+ cardsViewport: {
50
+ flex: 1,
51
+ position: 'relative',
52
+ },
53
+ dotsSlot: {
54
+ zIndex: T.maxVisible + 1,
55
+ },
56
+ dotsTop: {
57
+ marginBottom: 8,
58
+ alignItems: 'center',
59
+ },
60
+ dotsBottom: {
61
+ marginTop: 8,
62
+ alignItems: 'center',
63
+ },
64
+ dotsLeft: {
65
+ justifyContent: 'center',
66
+ },
67
+ dotsRight: {
68
+ justifyContent: 'center',
69
+ },
70
+ card: {
71
+ position: 'absolute',
72
+ top: 0,
73
+ bottom: 0,
74
+ left: T.cardHorizontalInset,
75
+ right: T.cardHorizontalInset,
76
+ },
77
+ });
@@ -0,0 +1,3 @@
1
+ import type { CardStackDotsProps } from './types';
2
+ export declare function CardStackDots({ count, activeIndex, onDotPress, position, dotSize, dotGap, dotColor, dotActiveOpacity, dotInactiveOpacity, glassIntensity, glassTint, style, }: CardStackDotsProps): import("react/jsx-runtime").JSX.Element | null;
3
+ //# sourceMappingURL=CardStackDots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardStackDots.d.ts","sourceRoot":"","sources":["../../src/CardStack/CardStackDots.tsx"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAElD,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,WAAW,EACX,UAAU,EACV,QAAmB,EACnB,OAAmB,EACnB,MAAiB,EACjB,QAAqB,EACrB,gBAAqC,EACrC,kBAAyC,EACzC,cAAiC,EACjC,SAAuB,EACvB,KAAK,GACN,EAAE,kBAAkB,kDAgIpB"}
@@ -0,0 +1,121 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback } from 'react';
3
+ import { StyleSheet, View, TouchableOpacity } from 'react-native';
4
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
5
+ import Animated, { useSharedValue, useAnimatedStyle, withTiming, runOnJS, } from 'react-native-reanimated';
6
+ import { BlurView } from 'expo-blur';
7
+ import { CARD_STACK_DOTS_TOKENS as D } from './constants';
8
+ export function CardStackDots({ count, activeIndex, onDotPress, position = 'bottom', dotSize = D.dotSize, dotGap = D.dotGap, dotColor = D.dotColor, dotActiveOpacity = D.dotActiveOpacity, dotInactiveOpacity = D.dotInactiveOpacity, glassIntensity = D.glassIntensity, glassTint = D.glassTint, style, }) {
9
+ const isVertical = position === 'left' || position === 'right';
10
+ const containerX = useSharedValue(0);
11
+ const containerY = useSharedValue(0);
12
+ const containerW = useSharedValue(0);
13
+ const containerH = useSharedValue(0);
14
+ const lastPanIdx = useSharedValue(-1);
15
+ const pressing = useSharedValue(0);
16
+ const dotStep = dotSize + dotGap;
17
+ const handleLayout = useCallback((e) => {
18
+ containerW.value = e.nativeEvent.layout.width;
19
+ containerH.value = e.nativeEvent.layout.height;
20
+ e.target.measureInWindow?.((x, y) => {
21
+ containerX.value = x;
22
+ containerY.value = y;
23
+ });
24
+ }, [containerW, containerH, containerX, containerY]);
25
+ const handlePan = useCallback((absoluteX, absoluteY) => {
26
+ 'worklet';
27
+ const total = count * dotStep - dotGap;
28
+ const start = isVertical
29
+ ? containerY.value + (containerH.value - total) / 2
30
+ : containerX.value + (containerW.value - total) / 2;
31
+ const coord = isVertical ? absoluteY : absoluteX;
32
+ const idx = Math.round((coord - start) / dotStep);
33
+ const clamped = Math.max(0, Math.min(count - 1, idx));
34
+ if (clamped !== lastPanIdx.value) {
35
+ lastPanIdx.value = clamped;
36
+ runOnJS(onDotPress)(clamped);
37
+ }
38
+ }, [
39
+ count,
40
+ dotStep,
41
+ dotGap,
42
+ isVertical,
43
+ containerX,
44
+ containerY,
45
+ containerW,
46
+ containerH,
47
+ lastPanIdx,
48
+ onDotPress,
49
+ ]);
50
+ const panGesture = Gesture.Pan()
51
+ .onBegin((e) => {
52
+ pressing.value = withTiming(1, { duration: D.pressAnimateIn });
53
+ lastPanIdx.value = -1;
54
+ handlePan(e.absoluteX, e.absoluteY);
55
+ })
56
+ .onUpdate((e) => {
57
+ handlePan(e.absoluteX, e.absoluteY);
58
+ })
59
+ .onEnd(() => {
60
+ pressing.value = withTiming(0, { duration: D.pressAnimateOut });
61
+ lastPanIdx.value = -1;
62
+ })
63
+ .onFinalize(() => {
64
+ pressing.value = withTiming(0, { duration: D.pressAnimateOut });
65
+ });
66
+ const glassStyle = useAnimatedStyle(() => ({
67
+ opacity: pressing.value * 0.8,
68
+ transform: [{ scale: D.glassRestScale + pressing.value * (1 - D.glassRestScale) }],
69
+ }));
70
+ if (count <= 1)
71
+ return null;
72
+ return (_jsx(View, { style: [
73
+ styles.outerWrap,
74
+ isVertical ? styles.outerWrapVertical : styles.outerWrapHorizontal,
75
+ style,
76
+ ], children: _jsx(GestureDetector, { gesture: panGesture, children: _jsxs(View, { style: [
77
+ styles.touchArea,
78
+ isVertical ? styles.touchAreaVertical : styles.touchAreaHorizontal,
79
+ {
80
+ gap: dotGap,
81
+ paddingHorizontal: D.pillHorizontalPadding,
82
+ paddingVertical: D.pillVerticalPadding,
83
+ },
84
+ ], onLayout: handleLayout, children: [_jsx(Animated.View, { style: [styles.glassPill, glassStyle], children: _jsx(BlurView, { intensity: glassIntensity, tint: glassTint, style: StyleSheet.absoluteFill }) }), Array.from({ length: count }, (_, i) => (_jsx(TouchableOpacity, { onPress: () => onDotPress(i), hitSlop: { top: 12, bottom: 12, left: 4, right: 4 }, accessibilityRole: "button", accessibilityLabel: `Go to item ${i + 1}`, children: _jsx(View, { style: {
85
+ width: dotSize,
86
+ height: dotSize,
87
+ borderRadius: dotSize / 2,
88
+ backgroundColor: dotColor,
89
+ opacity: i === activeIndex ? dotActiveOpacity : dotInactiveOpacity,
90
+ } }) }, i)))] }) }) }));
91
+ }
92
+ const styles = StyleSheet.create({
93
+ outerWrap: {
94
+ alignItems: 'center',
95
+ },
96
+ outerWrapHorizontal: {
97
+ paddingBottom: 0,
98
+ },
99
+ outerWrapVertical: {
100
+ justifyContent: 'center',
101
+ },
102
+ touchArea: {
103
+ alignItems: 'center',
104
+ justifyContent: 'center',
105
+ minHeight: 28,
106
+ },
107
+ touchAreaHorizontal: {
108
+ flexDirection: 'row',
109
+ },
110
+ touchAreaVertical: {
111
+ flexDirection: 'column',
112
+ minHeight: 0,
113
+ minWidth: 28,
114
+ },
115
+ glassPill: {
116
+ ...StyleSheet.absoluteFillObject,
117
+ borderRadius: 50,
118
+ overflow: 'hidden',
119
+ backgroundColor: `rgba(0, 0, 0, ${D.glassBaseOpacity})`,
120
+ },
121
+ });
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { Gesture } from 'react-native-gesture-handler';
3
+ import { type SharedValue } from 'react-native-reanimated';
4
+ interface StackCardProps {
5
+ isTop: boolean;
6
+ position: number;
7
+ visible: boolean;
8
+ pan: ReturnType<typeof Gesture.Pan>;
9
+ tx: SharedValue<number>;
10
+ ty: SharedValue<number>;
11
+ progress: SharedValue<number>;
12
+ maxVisible: number;
13
+ style: any;
14
+ children: React.ReactNode;
15
+ }
16
+ /**
17
+ * Unified card wrapper that keeps a stable React identity regardless of
18
+ * whether the card is the active (top) card or a behind/off-screen card.
19
+ *
20
+ * Uses a single useAnimatedStyle for both states so that Reanimated never
21
+ * needs to swap one animated style object for another on the native view,
22
+ * which avoids stale property issues (e.g. opacity: 0 lingering after a
23
+ * card transitions from behind to top).
24
+ */
25
+ export declare function StackCard({ isTop, position, visible, pan, tx, ty, progress, maxVisible, style, children, }: StackCardProps): import("react/jsx-runtime").JSX.Element;
26
+ export {};
27
+ //# sourceMappingURL=StackCard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StackCard.d.ts","sourceRoot":"","sources":["../../src/CardStack/StackCard.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAiB,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,OAAO,EAAmB,MAAM,8BAA8B,CAAC;AACxE,OAAiB,EAIf,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAGjC,UAAU,cAAc;IACtB,KAAK,EAAE,OAAO,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;IACpC,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,EAAE,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACxB,QAAQ,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,GAAG,CAAC;IACX,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;CAC3B;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,EACxB,KAAK,EACL,QAAQ,EACR,OAAO,EACP,GAAG,EACH,EAAE,EACF,EAAE,EACF,QAAQ,EACR,UAAU,EACV,KAAK,EACL,QAAQ,GACT,EAAE,cAAc,2CAkDhB"}
@@ -0,0 +1,45 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useRef } from 'react';
3
+ import { Gesture, GestureDetector } from 'react-native-gesture-handler';
4
+ import Animated, { Extrapolation, useAnimatedStyle, interpolate, } from 'react-native-reanimated';
5
+ import { CARD_STACK_TOKENS as T } from './constants';
6
+ /**
7
+ * Unified card wrapper that keeps a stable React identity regardless of
8
+ * whether the card is the active (top) card or a behind/off-screen card.
9
+ *
10
+ * Uses a single useAnimatedStyle for both states so that Reanimated never
11
+ * needs to swap one animated style object for another on the native view,
12
+ * which avoids stale property issues (e.g. opacity: 0 lingering after a
13
+ * card transitions from behind to top).
14
+ */
15
+ export function StackCard({ isTop, position, visible, pan, tx, ty, progress, maxVisible, style, children, }) {
16
+ const noop = useRef(Gesture.Manual()).current;
17
+ const animStyle = useAnimatedStyle(() => {
18
+ if (isTop) {
19
+ return {
20
+ transform: [
21
+ { translateX: tx.value },
22
+ { translateY: ty.value },
23
+ { rotate: `${tx.value * T.rotationPerPx}deg` },
24
+ ],
25
+ opacity: 1,
26
+ zIndex: maxVisible,
27
+ };
28
+ }
29
+ return {
30
+ transform: [
31
+ {
32
+ scale: interpolate(progress.value, [0, 1], [1 - T.scaleStep * position, 1 - T.scaleStep * (position - 1)]),
33
+ },
34
+ {
35
+ translateY: interpolate(progress.value, [0, 1], [T.offsetStep * position, T.offsetStep * (position - 1)]),
36
+ },
37
+ ],
38
+ opacity: visible
39
+ ? interpolate(progress.value, [0, 0.001], [0, 1], Extrapolation.CLAMP)
40
+ : 0,
41
+ zIndex: visible ? maxVisible - position : -1,
42
+ };
43
+ });
44
+ return (_jsx(GestureDetector, { gesture: isTop ? pan : noop, children: _jsx(Animated.View, { style: [style, animStyle], pointerEvents: isTop ? 'auto' : 'none', children: children }) }));
45
+ }
@@ -0,0 +1,32 @@
1
+ export declare const CARD_STACK_TOKENS: {
2
+ readonly swipeThreshold: 120;
3
+ readonly swipeVelocity: 800;
4
+ readonly swipeCommitDuration: 80;
5
+ readonly flyDuration: 800;
6
+ readonly flyDistance: 1500;
7
+ readonly maxVisible: 3;
8
+ readonly scaleStep: 0.05;
9
+ readonly offsetStep: 8;
10
+ readonly rotationPerPx: 0.08;
11
+ readonly peekDeadZone: 0.08;
12
+ readonly peekFadeRange: 0.1;
13
+ readonly springDamping: 20;
14
+ readonly springStiffness: 200;
15
+ readonly cardHorizontalInset: 16;
16
+ };
17
+ export declare const CARD_STACK_DOTS_TOKENS: {
18
+ readonly dotSize: 8;
19
+ readonly dotGap: 8;
20
+ readonly dotColor: "#000000";
21
+ readonly dotActiveOpacity: 1;
22
+ readonly dotInactiveOpacity: 0.3;
23
+ readonly pillVerticalPadding: 8;
24
+ readonly pillHorizontalPadding: 12;
25
+ readonly glassIntensity: 40;
26
+ readonly glassTint: "dark";
27
+ readonly glassBaseOpacity: 0.25;
28
+ readonly glassRestScale: 0.92;
29
+ readonly pressAnimateIn: 120;
30
+ readonly pressAnimateOut: 200;
31
+ };
32
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/CardStack/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;CAepB,CAAC;AAEX,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;CAczB,CAAC"}
@@ -0,0 +1,31 @@
1
+ export const CARD_STACK_TOKENS = {
2
+ swipeThreshold: 120,
3
+ swipeVelocity: 800,
4
+ swipeCommitDuration: 80,
5
+ flyDuration: 800,
6
+ flyDistance: 1500,
7
+ maxVisible: 3,
8
+ scaleStep: 0.05,
9
+ offsetStep: 8,
10
+ rotationPerPx: 0.08,
11
+ peekDeadZone: 0.08,
12
+ peekFadeRange: 0.1,
13
+ springDamping: 20,
14
+ springStiffness: 200,
15
+ cardHorizontalInset: 16,
16
+ };
17
+ export const CARD_STACK_DOTS_TOKENS = {
18
+ dotSize: 8,
19
+ dotGap: 8,
20
+ dotColor: '#000000',
21
+ dotActiveOpacity: 1,
22
+ dotInactiveOpacity: 0.3,
23
+ pillVerticalPadding: 8,
24
+ pillHorizontalPadding: 12,
25
+ glassIntensity: 40,
26
+ glassTint: 'dark',
27
+ glassBaseOpacity: 0.25,
28
+ glassRestScale: 0.92,
29
+ pressAnimateIn: 120,
30
+ pressAnimateOut: 200,
31
+ };
@@ -0,0 +1,4 @@
1
+ export { CardStack } from './CardStack';
2
+ export { CardStackDots } from './CardStackDots';
3
+ export type { CardStackProps, CardStackDotsProps, CardStackDotsPosition, } from './types';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/CardStack/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CardStack } from './CardStack';
2
+ export { CardStackDots } from './CardStackDots';
@@ -0,0 +1,39 @@
1
+ import type { ReactNode } from 'react';
2
+ import type { StyleProp, ViewStyle } from 'react-native';
3
+ export type CardStackDotsPosition = 'top' | 'bottom' | 'left' | 'right';
4
+ export interface CardStackProps<T> {
5
+ data: T[];
6
+ activeIndex: number;
7
+ onSwipeRelease?: () => void;
8
+ onSwiped: () => void;
9
+ showDots?: boolean;
10
+ dotsActiveIndex?: number;
11
+ dotsPosition?: CardStackDotsPosition;
12
+ onDotPress?: (index: number) => void;
13
+ dotsStyle?: StyleProp<ViewStyle>;
14
+ renderCard: (item: T, info: {
15
+ index: number;
16
+ }) => ReactNode;
17
+ keyExtractor: (item: T, index: number) => string;
18
+ maxVisible?: number;
19
+ swipeThreshold?: number;
20
+ swipeVelocity?: number;
21
+ swipeCommitDuration?: number;
22
+ style?: StyleProp<ViewStyle>;
23
+ cardStyle?: StyleProp<ViewStyle>;
24
+ }
25
+ export interface CardStackDotsProps {
26
+ count: number;
27
+ activeIndex: number;
28
+ onDotPress: (index: number) => void;
29
+ position?: CardStackDotsPosition;
30
+ dotSize?: number;
31
+ dotGap?: number;
32
+ dotColor?: string;
33
+ dotActiveOpacity?: number;
34
+ dotInactiveOpacity?: number;
35
+ glassIntensity?: number;
36
+ glassTint?: 'light' | 'dark' | 'default';
37
+ style?: StyleProp<ViewStyle>;
38
+ }
39
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/CardStack/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzD,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;AAExE,MAAM,WAAW,cAAc,CAAC,CAAC;IAC/B,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,qBAAqB,CAAC;IACrC,UAAU,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACjC,UAAU,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,SAAS,CAAC;IAC5D,YAAY,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,KAAK,MAAM,CAAC;IACjD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACpC,QAAQ,CAAC,EAAE,qBAAqB,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAAC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,18 @@
1
+ interface UseSwipeGestureOptions {
2
+ activeIndex: number;
3
+ swipeThreshold: number;
4
+ swipeVelocity: number;
5
+ swipeCommitDuration: number;
6
+ maxVisible: number;
7
+ canCommitSwipe: boolean;
8
+ onSwipeRelease?: () => void;
9
+ onSwiped: () => void;
10
+ }
11
+ export declare function useSwipeGesture({ activeIndex, swipeThreshold, swipeVelocity, swipeCommitDuration, maxVisible, canCommitSwipe, onSwipeRelease, onSwiped, }: UseSwipeGestureOptions): {
12
+ pan: import("react-native-gesture-handler/lib/typescript/handlers/gestures/panGesture").PanGesture;
13
+ tx: import("react-native-reanimated").SharedValue<number>;
14
+ ty: import("react-native-reanimated").SharedValue<number>;
15
+ progress: import("react-native-reanimated").DerivedValue<number>;
16
+ };
17
+ export {};
18
+ //# sourceMappingURL=useSwipeGesture.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useSwipeGesture.d.ts","sourceRoot":"","sources":["../../src/CardStack/useSwipeGesture.ts"],"names":[],"mappings":"AAaA,UAAU,sBAAsB;IAC9B,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,QAAQ,EAAE,MAAM,IAAI,CAAC;CACtB;AAED,wBAAgB,eAAe,CAAC,EAC9B,WAAW,EACX,cAAc,EACd,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,cAAc,EACd,cAAc,EACd,QAAQ,GACT,EAAE,sBAAsB;;;;;EAuFxB"}
@@ -0,0 +1,70 @@
1
+ import { useCallback, useRef } from 'react';
2
+ import { Gesture } from 'react-native-gesture-handler';
3
+ import { useSharedValue, useDerivedValue, withTiming, withSpring, runOnJS, Easing, } from 'react-native-reanimated';
4
+ import { CARD_STACK_TOKENS as T } from './constants';
5
+ export function useSwipeGesture({ activeIndex, swipeThreshold, swipeVelocity, swipeCommitDuration, maxVisible, canCommitSwipe, onSwipeRelease, onSwiped, }) {
6
+ const tx = useSharedValue(0);
7
+ const ty = useSharedValue(0);
8
+ const flying = useSharedValue(false);
9
+ const swipeCommitProgress = useSharedValue(0);
10
+ const prevIndex = useRef(activeIndex);
11
+ if (prevIndex.current !== activeIndex) {
12
+ prevIndex.current = activeIndex;
13
+ tx.value = 0;
14
+ ty.value = 0;
15
+ flying.value = false;
16
+ swipeCommitProgress.value = 0;
17
+ }
18
+ const progress = useDerivedValue(() => {
19
+ if (flying.value)
20
+ return 1;
21
+ return Math.min(Math.sqrt(tx.value ** 2 + ty.value ** 2) / swipeThreshold, 1);
22
+ });
23
+ const onSwipeEnd = useCallback(() => {
24
+ onSwiped();
25
+ }, [onSwiped]);
26
+ const onSwipeReleaseStart = useCallback(() => {
27
+ onSwipeRelease?.();
28
+ }, [onSwipeRelease]);
29
+ const pan = Gesture.Pan()
30
+ .activeOffsetX([-10, 10])
31
+ .activeOffsetY([-10, 10])
32
+ .onUpdate((e) => {
33
+ if (flying.value)
34
+ return;
35
+ tx.value = e.translationX;
36
+ ty.value = e.translationY;
37
+ })
38
+ .onEnd((e) => {
39
+ if (flying.value)
40
+ return;
41
+ const dist = Math.sqrt(e.translationX ** 2 + e.translationY ** 2);
42
+ const vel = Math.sqrt(e.velocityX ** 2 + e.velocityY ** 2);
43
+ if (canCommitSwipe && (dist > swipeThreshold || vel > swipeVelocity)) {
44
+ flying.value = true;
45
+ runOnJS(onSwipeReleaseStart)();
46
+ const angle = Math.atan2(e.translationY + e.velocityY * 0.15, e.translationX + e.velocityX * 0.15);
47
+ const targetX = Math.cos(angle) * T.flyDistance;
48
+ const targetY = Math.sin(angle) * T.flyDistance;
49
+ const commitDuration = Math.max(0, Math.min(swipeCommitDuration, T.flyDuration));
50
+ tx.value = withTiming(targetX, { duration: T.flyDuration, easing: Easing.out(Easing.cubic) });
51
+ ty.value = withTiming(targetY, { duration: T.flyDuration, easing: Easing.out(Easing.cubic) });
52
+ swipeCommitProgress.value = 0;
53
+ swipeCommitProgress.value = withTiming(1, { duration: commitDuration, easing: Easing.linear }, (finished) => {
54
+ if (finished)
55
+ runOnJS(onSwipeEnd)();
56
+ });
57
+ }
58
+ else {
59
+ tx.value = withSpring(0, {
60
+ damping: T.springDamping,
61
+ stiffness: T.springStiffness,
62
+ });
63
+ ty.value = withSpring(0, {
64
+ damping: T.springDamping,
65
+ stiffness: T.springStiffness,
66
+ });
67
+ }
68
+ });
69
+ return { pan, tx, ty, progress };
70
+ }