@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
package/README.md ADDED
@@ -0,0 +1,184 @@
1
+ # @demlanide/react-lucky-components
2
+
3
+ Styled React Native components extracted for reuse: **ListCell**, **Tabs** (floating glass tab bar), and tab icons. Built for Expo / React Native with TypeScript.
4
+
5
+ ## Contents
6
+
7
+ - **ListCell** – Versatile list-cell row with two trailing modes: **switch** (animated toggle) and **navigation** (detail text + chevron). Also works as a standalone toggle when no title is provided.
8
+ - **Tabs** – Bottom tab navigator with frosted-glass pill design; uses `@react-navigation/bottom-tabs` with a custom tab bar.
9
+ - **Tab icons** – `GroupTabIcon`, `ActivityTabIcon`, `AccountTabIcon` (SVG).
10
+ - **useFloatingTabBarScrollPadding** – Hook for scroll padding above the floating tab bar.
11
+
12
+ ## Install
13
+
14
+ In your React Native / Expo app:
15
+
16
+ ```bash
17
+ npm install @demlanide/react-lucky-components
18
+ ```
19
+
20
+ Peer dependencies (install if not already present):
21
+
22
+ - `react`, `react-native`
23
+ - `@react-navigation/bottom-tabs`
24
+ - `expo-blur`
25
+ - `react-native-reanimated`
26
+ - `react-native-safe-area-context`
27
+ - `react-native-svg`
28
+
29
+ ## Usage
30
+
31
+ ### ListCell
32
+
33
+ ```tsx
34
+ import { ListCell } from '@demlanide/react-lucky-components';
35
+
36
+ // Standalone toggle (no title)
37
+ <ListCell value={on} onValueChange={setOn} />
38
+
39
+ // List cell with switch trailing (default)
40
+ <ListCell
41
+ value={notifications}
42
+ onValueChange={setNotifications}
43
+ title="Notifications"
44
+ subtitle="About transactions, debt, new expenses"
45
+ />
46
+
47
+ // Navigation with detail text + chevron
48
+ <ListCell
49
+ trailing="navigation"
50
+ title="Preferred Currency"
51
+ detail="£ · GBR"
52
+ onPress={() => navigation.navigate('Currency')}
53
+ />
54
+
55
+ // Navigation with chevron only
56
+ <ListCell
57
+ trailing="navigation"
58
+ title="Policies and terms"
59
+ onPress={() => navigation.navigate('Policies')}
60
+ />
61
+ ```
62
+
63
+ > **Migration note:** `Switch` is still exported as an alias for backward
64
+ > compatibility. New code should use `ListCell`.
65
+
66
+ ### Tabs
67
+
68
+ ```tsx
69
+ import {
70
+ Tabs,
71
+ GroupTabIcon,
72
+ ActivityTabIcon,
73
+ AccountTabIcon,
74
+ useFloatingTabBarScrollPadding,
75
+ } from '@demlanide/react-lucky-components';
76
+ import type { TabItem } from '@demlanide/react-lucky-components';
77
+
78
+ const tabs: TabItem[] = [
79
+ {
80
+ name: 'Groups',
81
+ label: 'Group',
82
+ component: GroupsScreen,
83
+ icon: ({ color, size }) => <GroupTabIcon color={color} size={size} />,
84
+ },
85
+ {
86
+ name: 'Activity',
87
+ label: 'Activity',
88
+ component: ActivityScreen,
89
+ icon: ({ color, size }) => <ActivityTabIcon color={color} size={size} />,
90
+ },
91
+ {
92
+ name: 'Account',
93
+ label: 'Account',
94
+ component: AccountScreen,
95
+ icon: ({ color, size }) => <AccountTabIcon color={color} size={size} />,
96
+ },
97
+ ];
98
+
99
+ function App() {
100
+ return <Tabs tabs={tabs} initialTab="Groups" />;
101
+ }
102
+
103
+ // In a tab root screen with ScrollView:
104
+ function AccountScreen() {
105
+ const paddingBottom = useFloatingTabBarScrollPadding();
106
+ return (
107
+ <ScrollView contentContainerStyle={{ paddingBottom }}>
108
+ {/* ... */}
109
+ </ScrollView>
110
+ );
111
+ }
112
+ ```
113
+
114
+ ### Theming
115
+
116
+ Components use a small built-in theme (`colors.primary`, `colors.gray300`, etc.). Override via props where supported (e.g. `activeTintColor`, `inactiveTintColor` on `Tabs`; `activeTrackColor`, `inactiveTrackColor`, `thumbColor` on `ListCell`). The package also exports `colors` and `typography` from `./theme` if you need them.
117
+
118
+ ## Repo setup: вынести в отдельный GitHub и публикация в npm
119
+
120
+ ### 1. Вынести в отдельный репозиторий
121
+
122
+ 1. Создай новый репозиторий на GitHub (например `your-username/react-native-components`).
123
+ 2. Скопируй **содержимое** папки `packages/react-native-components` в **корень** нового репо (чтобы в корне лежали `package.json`, `src/`, `README.md`, `.storybook/`, `tsconfig.json`, `tsconfig.build.json`). Папку `node_modules` и `dist` копировать не нужно.
124
+ 3. В новом репо в `package.json`:
125
+ - поменяй `"name"` на свой scope или имя (например `"@your-username/react-native-components"` или `"react-native-glass-tabs"`);
126
+ - в `"repository"` укажи URL нового репо.
127
+
128
+ ### 2. Сборка и публикация в npm
129
+
130
+ В корне нового репо:
131
+
132
+ ```bash
133
+ npm install
134
+ npm run build # собирает dist/ (JS + .d.ts)
135
+ npm publish # для публичного пакета
136
+ # или npm publish --access public если имя со scope (@username/...)
137
+ ```
138
+
139
+ Перед первым `npm publish` нужно залогиниться: `npm login`.
140
+ В npm уходит только то, что указано в `"files": ["dist", "README.md"]` — то есть собранный код и README; исходники и Storybook в пакет не попадают.
141
+
142
+ ### 3. Подключить пакет обратно в split-buddy
143
+
144
+ **Вариант A — пакет опубликован в npm**
145
+
146
+ В `mobile/package.json` добавь зависимость:
147
+
148
+ ```json
149
+ "@your-username/react-native-components": "^0.1.0"
150
+ ```
151
+
152
+ Потом замени импорты с `components-pack` на пакет, например:
153
+
154
+ - `from '../../components-pack/Tabs'` → `from '@your-username/react-native-components'`
155
+ - `from '../../components-pack'` (Switch) → `from '@your-username/react-native-components'`
156
+
157
+ Папку/алиас `src/components-pack` в mobile можно удалить (если там только реэкспорт из этого пакета).
158
+
159
+ **Вариант B — разработка до публикации (локально или с GitHub)**
160
+
161
+ Локальная папка (путь относительно `mobile/`):
162
+
163
+ ```json
164
+ "@your-username/react-native-components": "file:../path/to/react-native-components"
165
+ ```
166
+
167
+ Или с GitHub (пока не опубликовал в npm):
168
+
169
+ ```json
170
+ "@your-username/react-native-components": "github:your-username/react-native-components#main"
171
+ ```
172
+
173
+ После смены зависимости выполни в `mobile/`: `npm install`. Если используешь локальный `file:`, после правок в библиотеке нужно в ней запускать `npm run build`, чтобы обновился `dist/`.
174
+
175
+ ## Scripts
176
+
177
+ - `npm run type-check` – проверка типов (без сборки).
178
+ - `npm run build` – сборка в `dist/` (JS + декларации). Запускается автоматически перед `npm publish` (`prepublishOnly`).
179
+ - `npm run storybook` – Storybook в браузере (порт 6006).
180
+ - `npm run build-storybook` – статическая сборка Storybook в `storybook-static/`.
181
+
182
+ ## License
183
+
184
+ MIT
@@ -0,0 +1,3 @@
1
+ import type { AlertProps } from './types';
2
+ export declare function Alert({ title, description, emoji, image, style, titleStyle, descriptionStyle, type, }: AlertProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Alert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Alert.d.ts","sourceRoot":"","sources":["../../src/Alert/Alert.tsx"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C,wBAAgB,KAAK,CAAC,EACpB,KAAK,EACL,WAAW,EACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,UAAU,EACV,gBAAgB,EAChB,IAAa,GACd,EAAE,UAAU,2CA6BZ"}
@@ -0,0 +1,7 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Image } from 'react-native';
3
+ import { ALERT_TOKENS } from './constants';
4
+ import { AlertCard, AlertWrapper, ContentContainer, DescriptionText, EmojiContainer, EmojiText, ImageContainer, TitleText, } from './styles';
5
+ export function Alert({ title, description, emoji, image, style, titleStyle, descriptionStyle, type = 'info', }) {
6
+ return (_jsxs(AlertWrapper, { style: style, children: [_jsx(AlertCard, { type: type, children: _jsxs(ContentContainer, { children: [title != null && (_jsx(TitleText, { style: titleStyle, children: title })), description != null && (_jsx(DescriptionText, { style: descriptionStyle, children: description }))] }) }), emoji != null && (_jsx(EmojiContainer, { style: { transform: [{ rotate: ALERT_TOKENS.emoji.rotation }] }, children: _jsx(EmojiText, { children: emoji }) })), image != null && (_jsx(ImageContainer, { children: _jsx(Image, { source: image, style: { width: 85, height: 85 } }) }))] }));
7
+ }
@@ -0,0 +1,38 @@
1
+ export declare const ALERT_TOKENS: {
2
+ readonly borderRadius: 24;
3
+ readonly padding: 20;
4
+ readonly titleDescriptionGap: 2;
5
+ readonly backgroundColor: "#E1EEFF";
6
+ readonly backgroundColorError: "#FFE2D5";
7
+ readonly shadowColor: "#FFFFFF";
8
+ readonly shadowOffset: {
9
+ readonly width: 0;
10
+ readonly height: 4;
11
+ };
12
+ readonly shadowOpacity: 1;
13
+ readonly shadowRadius: 20;
14
+ readonly elevation: 4;
15
+ readonly emoji: {
16
+ readonly fontSize: 58;
17
+ readonly lineHeight: 70;
18
+ readonly rotation: "16.92deg";
19
+ readonly topOffset: -27;
20
+ readonly rightOffset: -12;
21
+ };
22
+ readonly titleTypography: {
23
+ readonly fontFamily: "SF Pro";
24
+ readonly fontSize: 16;
25
+ readonly fontWeight: "500";
26
+ readonly lineHeight: 21;
27
+ readonly letterSpacing: -0.31;
28
+ };
29
+ readonly descriptionTypography: {
30
+ readonly fontFamily: "SF Pro";
31
+ readonly fontSize: 16;
32
+ readonly fontWeight: "400";
33
+ readonly lineHeight: 21;
34
+ readonly letterSpacing: -0.31;
35
+ };
36
+ readonly textColor: "#262626";
37
+ };
38
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/Alert/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCf,CAAC"}
@@ -0,0 +1,34 @@
1
+ export const ALERT_TOKENS = {
2
+ borderRadius: 24,
3
+ padding: 20,
4
+ titleDescriptionGap: 2,
5
+ backgroundColor: '#E1EEFF',
6
+ backgroundColorError: '#FFE2D5',
7
+ shadowColor: '#FFFFFF',
8
+ shadowOffset: { width: 0, height: 4 },
9
+ shadowOpacity: 1,
10
+ shadowRadius: 20,
11
+ elevation: 4,
12
+ emoji: {
13
+ fontSize: 58,
14
+ lineHeight: 70,
15
+ rotation: '16.92deg',
16
+ topOffset: -27,
17
+ rightOffset: -12,
18
+ },
19
+ titleTypography: {
20
+ fontFamily: 'SF Pro',
21
+ fontSize: 16,
22
+ fontWeight: '500',
23
+ lineHeight: 21,
24
+ letterSpacing: -0.31,
25
+ },
26
+ descriptionTypography: {
27
+ fontFamily: 'SF Pro',
28
+ fontSize: 16,
29
+ fontWeight: '400',
30
+ lineHeight: 21,
31
+ letterSpacing: -0.31,
32
+ },
33
+ textColor: '#262626',
34
+ };
@@ -0,0 +1,3 @@
1
+ export { Alert } from './Alert';
2
+ export type { AlertProps } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Alert/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export { Alert } from './Alert';
@@ -0,0 +1,11 @@
1
+ export declare const AlertWrapper: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
2
+ export declare const AlertCard: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
3
+ type: 'info' | 'error';
4
+ }>>;
5
+ export declare const ContentContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
6
+ export declare const TitleText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
7
+ export declare const DescriptionText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
8
+ export declare const EmojiContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
9
+ export declare const EmojiText: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
10
+ export declare const ImageContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
11
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Alert/styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,YAAY,+KAExB,CAAC;AAEF,eAAO,MAAM,SAAS;UAAuB,MAAM,GAAG,OAAO;GAU5D,CAAC;AAEF,eAAO,MAAM,gBAAgB,+KAE5B,CAAC;AAEF,eAAO,MAAM,SAAS,+KAOrB,CAAC;AAEF,eAAO,MAAM,eAAe,+KAO3B,CAAC;AAEF,eAAO,MAAM,cAAc,+KAI1B,CAAC;AAEF,eAAO,MAAM,SAAS,+KAGrB,CAAC;AAEF,eAAO,MAAM,cAAc,+KAI1B,CAAC"}
@@ -0,0 +1,49 @@
1
+ import styled from 'styled-components/native';
2
+ import { ALERT_TOKENS } from './constants';
3
+ export const AlertWrapper = styled.View `
4
+ position: relative;
5
+ `;
6
+ export const AlertCard = styled.View `
7
+ background-color: ${({ type }) => type === 'info' ? ALERT_TOKENS.backgroundColor : ALERT_TOKENS.backgroundColorError};
8
+ border-radius: ${ALERT_TOKENS.borderRadius}px;
9
+ padding: ${ALERT_TOKENS.padding}px;
10
+ shadow-color: ${ALERT_TOKENS.shadowColor};
11
+ shadow-offset: ${ALERT_TOKENS.shadowOffset.width}px ${ALERT_TOKENS.shadowOffset.height}px;
12
+ shadow-opacity: ${ALERT_TOKENS.shadowOpacity};
13
+ shadow-radius: ${ALERT_TOKENS.shadowRadius}px;
14
+ elevation: ${ALERT_TOKENS.elevation};
15
+ overflow: visible;
16
+ `;
17
+ export const ContentContainer = styled.View `
18
+ gap: ${ALERT_TOKENS.titleDescriptionGap}px;
19
+ `;
20
+ export const TitleText = styled.Text `
21
+ font-family: ${ALERT_TOKENS.titleTypography.fontFamily};
22
+ font-size: ${ALERT_TOKENS.titleTypography.fontSize}px;
23
+ font-weight: ${ALERT_TOKENS.titleTypography.fontWeight};
24
+ line-height: ${ALERT_TOKENS.titleTypography.lineHeight}px;
25
+ letter-spacing: ${ALERT_TOKENS.titleTypography.letterSpacing}px;
26
+ color: ${ALERT_TOKENS.textColor};
27
+ `;
28
+ export const DescriptionText = styled.Text `
29
+ font-family: ${ALERT_TOKENS.descriptionTypography.fontFamily};
30
+ font-size: ${ALERT_TOKENS.descriptionTypography.fontSize}px;
31
+ font-weight: ${ALERT_TOKENS.descriptionTypography.fontWeight};
32
+ line-height: ${ALERT_TOKENS.descriptionTypography.lineHeight}px;
33
+ letter-spacing: ${ALERT_TOKENS.descriptionTypography.letterSpacing}px;
34
+ color: ${ALERT_TOKENS.textColor};
35
+ `;
36
+ export const EmojiContainer = styled.View `
37
+ position: absolute;
38
+ top: ${ALERT_TOKENS.emoji.topOffset}px;
39
+ right: ${ALERT_TOKENS.emoji.rightOffset}px;
40
+ `;
41
+ export const EmojiText = styled.Text `
42
+ font-size: ${ALERT_TOKENS.emoji.fontSize}px;
43
+ line-height: ${ALERT_TOKENS.emoji.lineHeight}px;
44
+ `;
45
+ export const ImageContainer = styled.View `
46
+ position: absolute;
47
+ top: -45px;
48
+ right: ${ALERT_TOKENS.emoji.rightOffset}px;
49
+ `;
@@ -0,0 +1,20 @@
1
+ import type { ImageSourcePropType, StyleProp, TextStyle, ViewStyle } from 'react-native';
2
+ export interface AlertProps {
3
+ /** Primary heading text */
4
+ title?: string;
5
+ /** Secondary descriptive text shown below the title */
6
+ description?: string;
7
+ /** Decorative emoji displayed at the top-right corner of the card */
8
+ emoji?: string;
9
+ /** Optional image source */
10
+ image?: ImageSourcePropType;
11
+ /** Optional container style overrides */
12
+ style?: StyleProp<ViewStyle>;
13
+ /** Optional title text style overrides */
14
+ titleStyle?: StyleProp<TextStyle>;
15
+ /** Optional description text style overrides */
16
+ descriptionStyle?: StyleProp<TextStyle>;
17
+ /** Optional type of alert */
18
+ type?: 'info' | 'error';
19
+ }
20
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/Alert/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzF,MAAM,WAAW,UAAU;IACzB,2BAA2B;IAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B,yCAAyC;IACzC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,0CAA0C;IAC1C,UAAU,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAClC,gDAAgD;IAChD,gBAAgB,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IACxC,6BAA6B;IAC7B,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,3 @@
1
+ import { AvatarProps } from './types';
2
+ export declare function Avatar({ imageSource, name, email, size, style, backgroundColor, textColor, noDetails, shapes, onPhotoChange, testID, accessibilityLabel, }: AvatarProps): import("react/jsx-runtime").JSX.Element;
3
+ //# sourceMappingURL=Avatar.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Avatar.d.ts","sourceRoot":"","sources":["../../src/Avatar/Avatar.tsx"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAQtC,wBAAgB,MAAM,CAAC,EACrB,WAAW,EACX,IAAI,EACJ,KAAK,EACL,IAA0B,EAC1B,KAAK,EACL,eAA0C,EAC1C,SAA8B,EAC9B,SAAiB,EACjB,MAAM,EACN,aAAa,EACb,MAAM,EACN,kBAAkB,GACnB,EAAE,WAAW,2CA6Gb"}
@@ -0,0 +1,33 @@
1
+ import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { Alert, Pressable } from 'react-native';
3
+ import { AvatarContent, AvatarEmail, AvatarImage, AvatarInitials, AvatarName, AvatarNameContainer, BottomLeftShape, Container, EditBadge, TopRightShape, Wrapper, } from './styles';
4
+ import { getAvatarInitials, EditPhotoIcon, pickFromGallery, takePhoto } from './utilities';
5
+ import rombShape from './Shapes/romb.png';
6
+ import { AVATAR_COLORS, DEFAULT_AVATAR_SIZE } from './consts';
7
+ export function Avatar({ imageSource, name, email, size = DEFAULT_AVATAR_SIZE, style, backgroundColor = AVATAR_COLORS.background, textColor = AVATAR_COLORS.text, noDetails = false, shapes, onPhotoChange, testID, accessibilityLabel, }) {
8
+ const label = accessibilityLabel ?? (name ? `${name} avatar` : 'User avatar');
9
+ const editBadgeSize = 20;
10
+ const shapesMap = {
11
+ romb: rombShape,
12
+ };
13
+ const shapesNode = shapes && (_jsxs(_Fragment, { children: [_jsx(TopRightShape, { source: shapesMap[shapes], accessible: false, importantForAccessibility: "no-hide-descendants" }), _jsx(BottomLeftShape, { source: shapesMap[shapes], accessible: false, importantForAccessibility: "no-hide-descendants" })] }));
14
+ const avatarContentNode = (_jsx(AvatarContent, { size: size, backgroundColor: backgroundColor, borderColor: AVATAR_COLORS.border, children: imageSource ? (_jsx(AvatarImage, { source: imageSource, size: size })) : (_jsx(AvatarInitials, { size: size, textColor: textColor, children: getAvatarInitials(name) })) }));
15
+ const handleEditPhoto = () => {
16
+ if (!onPhotoChange)
17
+ return;
18
+ Alert.alert('Profile photo', 'Choose an option', [
19
+ {
20
+ text: 'Choose from gallery',
21
+ onPress: () => pickFromGallery(onPhotoChange),
22
+ },
23
+ {
24
+ text: 'Take photo',
25
+ onPress: () => takePhoto(onPhotoChange),
26
+ },
27
+ { text: 'Cancel', style: 'cancel' },
28
+ ]);
29
+ };
30
+ const avatarNode = (_jsxs(Container, { testID: testID, accessibilityRole: "image", accessibilityLabel: label, size: size, children: [shapesNode, avatarContentNode, onPhotoChange && (_jsx(EditBadge, { as: Pressable, onPress: handleEditPhoto, size: editBadgeSize, accessible: true, accessibilityRole: "button", accessibilityLabel: "Edit profile photo", importantForAccessibility: "no-hide-descendants", testID: "edit-avatar-button", backgroundColor: AVATAR_COLORS.editBadgeBackground, borderColor: AVATAR_COLORS.border, children: _jsx(EditPhotoIcon, { size: editBadgeSize, color: AVATAR_COLORS.editBadgeIcon }) }))] }));
31
+ const nameNode = (_jsxs(AvatarNameContainer, { children: [name && (_jsx(AvatarName, { numberOfLines: 1, children: name })), email && (_jsx(AvatarEmail, { numberOfLines: 1, children: email }))] }));
32
+ return (_jsxs(Wrapper, { style: style, children: [avatarNode, !noDetails && nameNode] }));
33
+ }
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "Shapes",
3
+ "path": "react-lucky-components/src/Avatar/Shapes",
4
+ "description": "Folder containing related project files for this area.",
5
+ "generatedAt": "2026-03-02T00:41:04.006Z",
6
+ "scope": {
7
+ "recursive": true,
8
+ "excludedDirectories": [
9
+ "node_modules",
10
+ "Pods",
11
+ "dist",
12
+ "storybook-static",
13
+ "build",
14
+ "coverage",
15
+ ".git",
16
+ ".next",
17
+ ".expo",
18
+ ".turbo",
19
+ ".gradle",
20
+ "DerivedData"
21
+ ]
22
+ },
23
+ "entries": [
24
+ {
25
+ "name": "map.json",
26
+ "path": "react-lucky-components/src/Avatar/Shapes/map.json",
27
+ "type": "file",
28
+ "extension": ".json",
29
+ "generated": true,
30
+ "description": "Directory map generated by Codex for this folder."
31
+ },
32
+ {
33
+ "name": "romb.png",
34
+ "path": "react-lucky-components/src/Avatar/Shapes/romb.png",
35
+ "type": "file",
36
+ "lastModified": "2026-02-14T04:46:29.289Z",
37
+ "extension": ".png",
38
+ "sizeBytes": 154445,
39
+ "description": "Image asset used by UI or documentation."
40
+ }
41
+ ]
42
+ }
Binary file
@@ -0,0 +1,21 @@
1
+ export declare const DEFAULT_EDIT_PHOTO_COPY: {
2
+ alertTitle: string;
3
+ alertMessage: string;
4
+ galleryLabel: string;
5
+ takePhotoLabel: string;
6
+ cancelLabel: string;
7
+ permissionLibrary: string;
8
+ permissionCamera: string;
9
+ errorSelect: string;
10
+ errorCapture: string;
11
+ };
12
+ export declare const DEFAULT_AVATAR_SIZE = 40;
13
+ export declare const FALLBACK_INITIALS = "?";
14
+ export declare const AVATAR_COLORS: {
15
+ readonly background: "#E5E5EA";
16
+ readonly text: "#1C1C1E";
17
+ readonly border: "#FFFFFF";
18
+ readonly editBadgeBackground: "#2C2C2C";
19
+ readonly editBadgeIcon: "#FFFFFF";
20
+ };
21
+ //# sourceMappingURL=consts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"consts.d.ts","sourceRoot":"","sources":["../../src/Avatar/consts.tsx"],"names":[],"mappings":"AAAA,eAAO,MAAM,uBAAuB;;;;;;;;;;CAUnC,CAAC;AAEF,eAAO,MAAM,mBAAmB,KAAK,CAAC;AACtC,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,eAAO,MAAM,aAAa;;;;;;CAMhB,CAAC"}
@@ -0,0 +1,20 @@
1
+ export const DEFAULT_EDIT_PHOTO_COPY = {
2
+ alertTitle: 'Profile photo',
3
+ alertMessage: 'Choose an option',
4
+ galleryLabel: 'Choose from gallery',
5
+ takePhotoLabel: 'Take photo',
6
+ cancelLabel: 'Cancel',
7
+ permissionLibrary: 'Please allow access to your photo library to choose a profile photo.',
8
+ permissionCamera: 'Please allow camera access to take a profile photo.',
9
+ errorSelect: 'Failed to select photo. Please try again.',
10
+ errorCapture: 'Failed to capture photo. Please try again.',
11
+ };
12
+ export const DEFAULT_AVATAR_SIZE = 40;
13
+ export const FALLBACK_INITIALS = '?';
14
+ export const AVATAR_COLORS = {
15
+ background: '#E5E5EA',
16
+ text: '#1C1C1E',
17
+ border: '#FFFFFF',
18
+ editBadgeBackground: '#2C2C2C',
19
+ editBadgeIcon: '#FFFFFF',
20
+ };
@@ -0,0 +1,3 @@
1
+ export { Avatar } from './Avatar';
2
+ export type { AvatarProps, AvatarShape } from './types';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/Avatar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC"}
@@ -0,0 +1 @@
1
+ export { Avatar } from './Avatar';
@@ -0,0 +1,27 @@
1
+ export declare const Wrapper: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
2
+ export declare const Container: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
3
+ size: number;
4
+ }>>;
5
+ export declare const TopRightShape: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ImageProps, never>>;
6
+ export declare const BottomLeftShape: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ImageProps, never>>;
7
+ export declare const AvatarContent: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
8
+ size: number;
9
+ backgroundColor: string;
10
+ borderColor: string;
11
+ }>>;
12
+ export declare const AvatarImage: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ImageProps, {
13
+ size: number;
14
+ }>>;
15
+ export declare const AvatarInitials: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").TextProps, {
16
+ size: number;
17
+ textColor: string;
18
+ }>>;
19
+ export declare const EditBadge: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").Substitute<import("react-native").ViewProps, {
20
+ size: number;
21
+ backgroundColor: string;
22
+ borderColor: string;
23
+ }>>;
24
+ export declare const AvatarNameContainer: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").ViewProps, never>>;
25
+ export declare const AvatarName: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
26
+ export declare const AvatarEmail: import("styled-components/native/dist/types").IStyledComponentBase<"native", import("styled-components/native/dist/types").FastOmit<import("react-native").TextProps, never>>;
27
+ //# sourceMappingURL=styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../src/Avatar/styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,+KAEnB,CAAC;AAEF,eAAO,MAAM,SAAS;UAAuB,MAAM;GAIlD,CAAC;AAEF,eAAO,MAAM,aAAa,gLAOzB,CAAC;AAEF,eAAO,MAAM,eAAe,gLAO3B,CAAC;AAEF,eAAO,MAAM,aAAa;UAAuB,MAAM;qBAAmB,MAAM;iBAAe,MAAM;GAQpG,CAAC;AAEF,eAAO,MAAM,WAAW;UAAwB,MAAM;GAGrD,CAAC;AAEF,eAAO,MAAM,cAAc;UAAuB,MAAM;eAAa,MAAM;GAM1E,CAAC;AAEF,eAAO,MAAM,SAAS;UAAuB,MAAM;qBAAmB,MAAM;iBAAe,MAAM;GAYhG,CAAC;AAEF,eAAO,MAAM,mBAAmB,+KAE/B,CAAC;AAEF,eAAO,MAAM,UAAU,+KAUtB,CAAC;AAEF,eAAO,MAAM,WAAW,+KASvB,CAAC"}
@@ -0,0 +1,83 @@
1
+ import styled from 'styled-components/native';
2
+ import { typography } from '../theme';
3
+ export const Wrapper = styled.View `
4
+ align-items: center;
5
+ `;
6
+ export const Container = styled.View `
7
+ position: relative;
8
+ width: ${({ size }) => `${size}px`};
9
+ height: ${({ size }) => `${size}px`};
10
+ `;
11
+ export const TopRightShape = styled.Image `
12
+ position: absolute;
13
+ width: 108px;
14
+ height: 109px;
15
+ top: -36px;
16
+ right: -35px;
17
+ z-index: 10;
18
+ `;
19
+ export const BottomLeftShape = styled.Image `
20
+ position: absolute;
21
+ width: 88px;
22
+ height: 89px;
23
+ left: -13px;
24
+ bottom: -13px;
25
+ z-index: 10;
26
+ `;
27
+ export const AvatarContent = styled.View `
28
+ width: ${({ size }) => `${size}px`};
29
+ height: ${({ size }) => `${size}px`};
30
+ border-radius: ${({ size }) => `${size / 2}px`};
31
+ background-color: ${({ backgroundColor }) => backgroundColor};
32
+ border-width: 1px;
33
+ border-color: ${({ borderColor }) => borderColor};
34
+ overflow: hidden;
35
+ `;
36
+ export const AvatarImage = styled.Image `
37
+ width: ${({ size }) => `${size}px`};
38
+ height: ${({ size }) => `${size}px`};
39
+ `;
40
+ export const AvatarInitials = styled.Text `
41
+ font-size: ${({ size }) => `${Math.max(12, Math.floor(size * 0.4))}px`};
42
+ color: ${({ textColor }) => textColor};
43
+ font-weight: ${typography.fontWeight.semibold};
44
+ text-align: center;
45
+ line-height: ${({ size }) => `${size}px`};
46
+ `;
47
+ export const EditBadge = styled.View `
48
+ border-radius: 100%;
49
+ right: 10px;
50
+ bottom: 10px;
51
+ padding: 12px;
52
+ position: absolute;
53
+ z-index: 2;
54
+ justify-content: center;
55
+ align-items: center;
56
+ background-color: ${({ backgroundColor }) => backgroundColor};
57
+ border-width: 1px;
58
+ border-color: ${({ borderColor }) => borderColor};
59
+ `;
60
+ export const AvatarNameContainer = styled.View `
61
+ margin-top: 16px;
62
+ `;
63
+ export const AvatarName = styled.Text `
64
+ overflow: hidden;
65
+ color: #2C2C2C;
66
+ text-overflow: ellipsis;
67
+ text-align: center;
68
+ font-family: "SF Pro";
69
+ font-size: 32px;
70
+ font-weight: 590;
71
+ letter-spacing: 0.16px;
72
+ margin-bottom: 4px;
73
+ `;
74
+ export const AvatarEmail = styled.Text `
75
+ overflow: hidden;
76
+ color: #738295;
77
+ text-align: center;
78
+ text-overflow: ellipsis;
79
+ font-family: "SF Pro";
80
+ font-size: 16px;
81
+ font-weight: 400;
82
+ letter-spacing: 0.08px;
83
+ `;