@situaction/traquiste-mobile 1.0.0-next.5 → 1.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 (463) hide show
  1. package/README.md +60 -90
  2. package/build/components/AssociationTag/AssociationTag.d.ts +19 -0
  3. package/build/components/AssociationTag/AssociationTag.d.ts.map +1 -0
  4. package/build/components/AssociationTag/AssociationTag.js +29 -0
  5. package/build/components/AssociationTag/AssociationTag.js.map +1 -0
  6. package/build/components/AssociationTag/AssociationTag.styles.d.ts +21 -0
  7. package/build/components/AssociationTag/AssociationTag.styles.d.ts.map +1 -0
  8. package/build/components/AssociationTag/AssociationTag.styles.js +26 -0
  9. package/build/components/AssociationTag/AssociationTag.styles.js.map +1 -0
  10. package/build/components/AssociationTag/index.d.ts +3 -0
  11. package/build/components/AssociationTag/index.d.ts.map +1 -0
  12. package/build/components/AssociationTag/index.js +2 -0
  13. package/build/components/AssociationTag/index.js.map +1 -0
  14. package/build/components/BottomSheet/BottomSheet.d.ts +36 -0
  15. package/build/components/BottomSheet/BottomSheet.d.ts.map +1 -0
  16. package/build/components/BottomSheet/BottomSheet.js +76 -0
  17. package/build/components/BottomSheet/BottomSheet.js.map +1 -0
  18. package/build/components/BottomSheet/BottomSheet.styles.d.ts +32 -0
  19. package/build/components/BottomSheet/BottomSheet.styles.d.ts.map +1 -0
  20. package/build/components/BottomSheet/BottomSheet.styles.js +31 -0
  21. package/build/components/BottomSheet/BottomSheet.styles.js.map +1 -0
  22. package/build/components/BottomSheet/index.d.ts +3 -0
  23. package/build/components/BottomSheet/index.d.ts.map +1 -0
  24. package/build/components/BottomSheet/index.js +2 -0
  25. package/build/components/BottomSheet/index.js.map +1 -0
  26. package/build/components/Button/Button.d.ts +5 -1
  27. package/build/components/Button/Button.d.ts.map +1 -1
  28. package/build/components/Button/Button.js +11 -5
  29. package/build/components/Button/Button.js.map +1 -1
  30. package/build/components/ButtonAction/ButtonAction.d.ts +5 -1
  31. package/build/components/ButtonAction/ButtonAction.d.ts.map +1 -1
  32. package/build/components/ButtonAction/ButtonAction.js +2 -2
  33. package/build/components/ButtonAction/ButtonAction.js.map +1 -1
  34. package/build/components/ButtonMap/ButtonMap.d.ts +5 -1
  35. package/build/components/ButtonMap/ButtonMap.d.ts.map +1 -1
  36. package/build/components/ButtonMap/ButtonMap.js +11 -9
  37. package/build/components/ButtonMap/ButtonMap.js.map +1 -1
  38. package/build/components/ButtonMenu/ButtonMenu.d.ts +7 -2
  39. package/build/components/ButtonMenu/ButtonMenu.d.ts.map +1 -1
  40. package/build/components/ButtonMenu/ButtonMenu.js +15 -15
  41. package/build/components/ButtonMenu/ButtonMenu.js.map +1 -1
  42. package/build/components/Calendar/Calendar.d.ts +4 -0
  43. package/build/components/Calendar/Calendar.d.ts.map +1 -0
  44. package/build/components/Calendar/Calendar.i18n.d.ts +34 -0
  45. package/build/components/Calendar/Calendar.i18n.d.ts.map +1 -0
  46. package/build/components/Calendar/Calendar.i18n.js +34 -0
  47. package/build/components/Calendar/Calendar.i18n.js.map +1 -0
  48. package/build/components/Calendar/Calendar.js +172 -0
  49. package/build/components/Calendar/Calendar.js.map +1 -0
  50. package/build/components/Calendar/Calendar.styles.d.ts +254 -0
  51. package/build/components/Calendar/Calendar.styles.d.ts.map +1 -0
  52. package/build/components/Calendar/Calendar.styles.js +231 -0
  53. package/build/components/Calendar/Calendar.styles.js.map +1 -0
  54. package/build/components/Calendar/Calendar.types.d.ts +62 -0
  55. package/build/components/Calendar/Calendar.types.d.ts.map +1 -0
  56. package/build/components/Calendar/Calendar.types.js +2 -0
  57. package/build/components/Calendar/Calendar.types.js.map +1 -0
  58. package/build/components/Calendar/CalendarDay.d.ts +4 -0
  59. package/build/components/Calendar/CalendarDay.d.ts.map +1 -0
  60. package/build/components/Calendar/CalendarDay.js +52 -0
  61. package/build/components/Calendar/CalendarDay.js.map +1 -0
  62. package/build/components/Calendar/CalendarHeader.d.ts +4 -0
  63. package/build/components/Calendar/CalendarHeader.d.ts.map +1 -0
  64. package/build/components/Calendar/CalendarHeader.js +16 -0
  65. package/build/components/Calendar/CalendarHeader.js.map +1 -0
  66. package/build/components/Calendar/CalendarLegend.d.ts +3 -0
  67. package/build/components/Calendar/CalendarLegend.d.ts.map +1 -0
  68. package/build/components/Calendar/CalendarLegend.js +38 -0
  69. package/build/components/Calendar/CalendarLegend.js.map +1 -0
  70. package/build/components/Calendar/CalendarYearPicker.d.ts +19 -0
  71. package/build/components/Calendar/CalendarYearPicker.d.ts.map +1 -0
  72. package/build/components/Calendar/CalendarYearPicker.js +158 -0
  73. package/build/components/Calendar/CalendarYearPicker.js.map +1 -0
  74. package/build/components/Calendar/index.d.ts +5 -0
  75. package/build/components/Calendar/index.d.ts.map +1 -0
  76. package/build/components/Calendar/index.js +3 -0
  77. package/build/components/Calendar/index.js.map +1 -0
  78. package/build/components/Card/Card.d.ts +25 -0
  79. package/build/components/Card/Card.d.ts.map +1 -0
  80. package/build/components/Card/Card.js +31 -0
  81. package/build/components/Card/Card.js.map +1 -0
  82. package/build/components/Card/Card.styles.d.ts +15 -0
  83. package/build/components/Card/Card.styles.d.ts.map +1 -0
  84. package/build/components/Card/Card.styles.js +18 -0
  85. package/build/components/Card/Card.styles.js.map +1 -0
  86. package/build/components/Card/index.d.ts +3 -0
  87. package/build/components/Card/index.d.ts.map +1 -0
  88. package/build/components/Card/index.js +2 -0
  89. package/build/components/Card/index.js.map +1 -0
  90. package/build/components/CardEquip/CardEquip.d.ts +60 -0
  91. package/build/components/CardEquip/CardEquip.d.ts.map +1 -0
  92. package/build/components/CardEquip/CardEquip.js +106 -0
  93. package/build/components/CardEquip/CardEquip.js.map +1 -0
  94. package/build/components/CardEquip/CardEquip.styles.d.ts +125 -0
  95. package/build/components/CardEquip/CardEquip.styles.d.ts.map +1 -0
  96. package/build/components/CardEquip/CardEquip.styles.js +139 -0
  97. package/build/components/CardEquip/CardEquip.styles.js.map +1 -0
  98. package/build/components/CardEquip/index.d.ts +3 -0
  99. package/build/components/CardEquip/index.d.ts.map +1 -0
  100. package/build/components/CardEquip/index.js +2 -0
  101. package/build/components/CardEquip/index.js.map +1 -0
  102. package/build/components/CardProfile/CardProfile.d.ts +55 -0
  103. package/build/components/CardProfile/CardProfile.d.ts.map +1 -0
  104. package/build/components/CardProfile/CardProfile.js +74 -0
  105. package/build/components/CardProfile/CardProfile.js.map +1 -0
  106. package/build/components/CardProfile/CardProfile.styles.d.ts +62 -0
  107. package/build/components/CardProfile/CardProfile.styles.d.ts.map +1 -0
  108. package/build/components/CardProfile/CardProfile.styles.js +65 -0
  109. package/build/components/CardProfile/CardProfile.styles.js.map +1 -0
  110. package/build/components/CardProfile/index.d.ts +3 -0
  111. package/build/components/CardProfile/index.d.ts.map +1 -0
  112. package/build/components/CardProfile/index.js +2 -0
  113. package/build/components/CardProfile/index.js.map +1 -0
  114. package/build/components/Checkbox/Checkbox.d.ts +28 -0
  115. package/build/components/Checkbox/Checkbox.d.ts.map +1 -0
  116. package/build/components/Checkbox/Checkbox.js +78 -0
  117. package/build/components/Checkbox/Checkbox.js.map +1 -0
  118. package/build/components/Checkbox/Checkbox.styles.d.ts +34 -0
  119. package/build/components/Checkbox/Checkbox.styles.d.ts.map +1 -0
  120. package/build/components/Checkbox/Checkbox.styles.js +39 -0
  121. package/build/components/Checkbox/Checkbox.styles.js.map +1 -0
  122. package/build/components/Checkbox/Checkbox.types.d.ts +25 -0
  123. package/build/components/Checkbox/Checkbox.types.d.ts.map +1 -0
  124. package/build/components/Checkbox/Checkbox.types.js +5 -0
  125. package/build/components/Checkbox/Checkbox.types.js.map +1 -0
  126. package/build/components/Checkbox/index.d.ts +3 -0
  127. package/build/components/Checkbox/index.d.ts.map +1 -0
  128. package/build/components/Checkbox/index.js +2 -0
  129. package/build/components/Checkbox/index.js.map +1 -0
  130. package/build/components/Cluster/Cluster.d.ts +23 -0
  131. package/build/components/Cluster/Cluster.d.ts.map +1 -0
  132. package/build/components/Cluster/Cluster.js +34 -0
  133. package/build/components/Cluster/Cluster.js.map +1 -0
  134. package/build/components/Cluster/Cluster.styles.d.ts +33 -0
  135. package/build/components/Cluster/Cluster.styles.d.ts.map +1 -0
  136. package/build/components/Cluster/Cluster.styles.js +34 -0
  137. package/build/components/Cluster/Cluster.styles.js.map +1 -0
  138. package/build/components/Cluster/index.d.ts +3 -0
  139. package/build/components/Cluster/index.d.ts.map +1 -0
  140. package/build/components/Cluster/index.js +2 -0
  141. package/build/components/Cluster/index.js.map +1 -0
  142. package/build/components/ColorPicker/ColorPicker.d.ts +20 -0
  143. package/build/components/ColorPicker/ColorPicker.d.ts.map +1 -0
  144. package/build/components/ColorPicker/ColorPicker.js +17 -0
  145. package/build/components/ColorPicker/ColorPicker.js.map +1 -0
  146. package/build/components/ColorPicker/ColorPicker.styles.d.ts +10 -0
  147. package/build/components/ColorPicker/ColorPicker.styles.d.ts.map +1 -0
  148. package/build/components/ColorPicker/ColorPicker.styles.js +11 -0
  149. package/build/components/ColorPicker/ColorPicker.styles.js.map +1 -0
  150. package/build/components/ColorPicker/index.d.ts +3 -0
  151. package/build/components/ColorPicker/index.d.ts.map +1 -0
  152. package/build/components/ColorPicker/index.js +2 -0
  153. package/build/components/ColorPicker/index.js.map +1 -0
  154. package/build/components/ColorSwatch/ColorSwatch.d.ts +20 -0
  155. package/build/components/ColorSwatch/ColorSwatch.d.ts.map +1 -0
  156. package/build/components/ColorSwatch/ColorSwatch.js +35 -0
  157. package/build/components/ColorSwatch/ColorSwatch.js.map +1 -0
  158. package/build/components/ColorSwatch/ColorSwatch.styles.d.ts +16 -0
  159. package/build/components/ColorSwatch/ColorSwatch.styles.d.ts.map +1 -0
  160. package/build/components/ColorSwatch/ColorSwatch.styles.js +19 -0
  161. package/build/components/ColorSwatch/ColorSwatch.styles.js.map +1 -0
  162. package/build/components/ColorSwatch/index.d.ts +3 -0
  163. package/build/components/ColorSwatch/index.d.ts.map +1 -0
  164. package/build/components/ColorSwatch/index.js +2 -0
  165. package/build/components/ColorSwatch/index.js.map +1 -0
  166. package/build/components/FileCard/FileCard.d.ts +29 -0
  167. package/build/components/FileCard/FileCard.d.ts.map +1 -0
  168. package/build/components/FileCard/FileCard.js +66 -0
  169. package/build/components/FileCard/FileCard.js.map +1 -0
  170. package/build/components/FileCard/FileCard.styles.d.ts +54 -0
  171. package/build/components/FileCard/FileCard.styles.d.ts.map +1 -0
  172. package/build/components/FileCard/FileCard.styles.js +56 -0
  173. package/build/components/FileCard/FileCard.styles.js.map +1 -0
  174. package/build/components/FileCard/index.d.ts +3 -0
  175. package/build/components/FileCard/index.d.ts.map +1 -0
  176. package/build/components/FileCard/index.js +2 -0
  177. package/build/components/FileCard/index.js.map +1 -0
  178. package/build/components/FilterChip/FilterChip.d.ts +5 -1
  179. package/build/components/FilterChip/FilterChip.d.ts.map +1 -1
  180. package/build/components/FilterChip/FilterChip.js +12 -11
  181. package/build/components/FilterChip/FilterChip.js.map +1 -1
  182. package/build/components/FilterNav/FilterNav.d.ts +53 -0
  183. package/build/components/FilterNav/FilterNav.d.ts.map +1 -0
  184. package/build/components/FilterNav/FilterNav.js +39 -0
  185. package/build/components/FilterNav/FilterNav.js.map +1 -0
  186. package/build/components/FilterNav/FilterNav.styles.d.ts +10 -0
  187. package/build/components/FilterNav/FilterNav.styles.d.ts.map +1 -0
  188. package/build/components/FilterNav/FilterNav.styles.js +11 -0
  189. package/build/components/FilterNav/FilterNav.styles.js.map +1 -0
  190. package/build/components/FilterNav/index.d.ts +3 -0
  191. package/build/components/FilterNav/index.d.ts.map +1 -0
  192. package/build/components/FilterNav/index.js +2 -0
  193. package/build/components/FilterNav/index.js.map +1 -0
  194. package/build/components/ImgPicker/ImgPicker.d.ts +47 -0
  195. package/build/components/ImgPicker/ImgPicker.d.ts.map +1 -0
  196. package/build/components/ImgPicker/ImgPicker.js +49 -0
  197. package/build/components/ImgPicker/ImgPicker.js.map +1 -0
  198. package/build/components/ImgPicker/ImgPicker.styles.d.ts +18 -0
  199. package/build/components/ImgPicker/ImgPicker.styles.d.ts.map +1 -0
  200. package/build/components/ImgPicker/ImgPicker.styles.js +19 -0
  201. package/build/components/ImgPicker/ImgPicker.styles.js.map +1 -0
  202. package/build/components/ImgPicker/index.d.ts +3 -0
  203. package/build/components/ImgPicker/index.d.ts.map +1 -0
  204. package/build/components/ImgPicker/index.js +2 -0
  205. package/build/components/ImgPicker/index.js.map +1 -0
  206. package/build/components/InlineInfo/InlineInfo.d.ts +60 -0
  207. package/build/components/InlineInfo/InlineInfo.d.ts.map +1 -0
  208. package/build/components/InlineInfo/InlineInfo.js +115 -0
  209. package/build/components/InlineInfo/InlineInfo.js.map +1 -0
  210. package/build/components/InlineInfo/InlineInfo.styles.d.ts +42 -0
  211. package/build/components/InlineInfo/InlineInfo.styles.d.ts.map +1 -0
  212. package/build/components/InlineInfo/InlineInfo.styles.js +50 -0
  213. package/build/components/InlineInfo/InlineInfo.styles.js.map +1 -0
  214. package/build/components/InlineInfo/index.d.ts +3 -0
  215. package/build/components/InlineInfo/index.d.ts.map +1 -0
  216. package/build/components/InlineInfo/index.js +2 -0
  217. package/build/components/InlineInfo/index.js.map +1 -0
  218. package/build/components/Input/Input.d.ts +57 -0
  219. package/build/components/Input/Input.d.ts.map +1 -0
  220. package/build/components/Input/Input.js +104 -0
  221. package/build/components/Input/Input.js.map +1 -0
  222. package/build/components/Input/Input.styles.d.ts +34 -0
  223. package/build/components/Input/Input.styles.d.ts.map +1 -0
  224. package/build/components/Input/Input.styles.js +35 -0
  225. package/build/components/Input/Input.styles.js.map +1 -0
  226. package/build/components/Input/index.d.ts +3 -0
  227. package/build/components/Input/index.d.ts.map +1 -0
  228. package/build/components/Input/index.js +2 -0
  229. package/build/components/Input/index.js.map +1 -0
  230. package/build/components/ListItem/ListItem.d.ts +42 -0
  231. package/build/components/ListItem/ListItem.d.ts.map +1 -0
  232. package/build/components/ListItem/ListItem.js +66 -0
  233. package/build/components/ListItem/ListItem.js.map +1 -0
  234. package/build/components/ListItem/ListItem.styles.d.ts +66 -0
  235. package/build/components/ListItem/ListItem.styles.d.ts.map +1 -0
  236. package/build/components/ListItem/ListItem.styles.js +70 -0
  237. package/build/components/ListItem/ListItem.styles.js.map +1 -0
  238. package/build/components/ListItem/index.d.ts +3 -0
  239. package/build/components/ListItem/index.d.ts.map +1 -0
  240. package/build/components/ListItem/index.js +2 -0
  241. package/build/components/ListItem/index.js.map +1 -0
  242. package/build/components/MapPin/MapPin.d.ts +61 -0
  243. package/build/components/MapPin/MapPin.d.ts.map +1 -0
  244. package/build/components/MapPin/MapPin.js +118 -0
  245. package/build/components/MapPin/MapPin.js.map +1 -0
  246. package/build/components/MapPin/MapPin.styles.d.ts +93 -0
  247. package/build/components/MapPin/MapPin.styles.d.ts.map +1 -0
  248. package/build/components/MapPin/MapPin.styles.js +101 -0
  249. package/build/components/MapPin/MapPin.styles.js.map +1 -0
  250. package/build/components/MapPin/index.d.ts +3 -0
  251. package/build/components/MapPin/index.d.ts.map +1 -0
  252. package/build/components/MapPin/index.js +2 -0
  253. package/build/components/MapPin/index.js.map +1 -0
  254. package/build/components/MediaPicker/MediaPicker.d.ts +74 -0
  255. package/build/components/MediaPicker/MediaPicker.d.ts.map +1 -0
  256. package/build/components/MediaPicker/MediaPicker.js +43 -0
  257. package/build/components/MediaPicker/MediaPicker.js.map +1 -0
  258. package/build/components/MediaPicker/MediaPicker.styles.d.ts +30 -0
  259. package/build/components/MediaPicker/MediaPicker.styles.d.ts.map +1 -0
  260. package/build/components/MediaPicker/MediaPicker.styles.js +31 -0
  261. package/build/components/MediaPicker/MediaPicker.styles.js.map +1 -0
  262. package/build/components/MediaPicker/index.d.ts +3 -0
  263. package/build/components/MediaPicker/index.d.ts.map +1 -0
  264. package/build/components/MediaPicker/index.js +2 -0
  265. package/build/components/MediaPicker/index.js.map +1 -0
  266. package/build/components/PhotoCard/PhotoCard.d.ts +28 -0
  267. package/build/components/PhotoCard/PhotoCard.d.ts.map +1 -0
  268. package/build/components/PhotoCard/PhotoCard.js +53 -0
  269. package/build/components/PhotoCard/PhotoCard.js.map +1 -0
  270. package/build/components/PhotoCard/PhotoCard.styles.d.ts +47 -0
  271. package/build/components/PhotoCard/PhotoCard.styles.d.ts.map +1 -0
  272. package/build/components/PhotoCard/PhotoCard.styles.js +45 -0
  273. package/build/components/PhotoCard/PhotoCard.styles.js.map +1 -0
  274. package/build/components/PhotoCard/index.d.ts +3 -0
  275. package/build/components/PhotoCard/index.d.ts.map +1 -0
  276. package/build/components/PhotoCard/index.js +2 -0
  277. package/build/components/PhotoCard/index.js.map +1 -0
  278. package/build/components/ProgressStep/ProgressStep.d.ts +9 -0
  279. package/build/components/ProgressStep/ProgressStep.d.ts.map +1 -0
  280. package/build/components/ProgressStep/ProgressStep.js +23 -0
  281. package/build/components/ProgressStep/ProgressStep.js.map +1 -0
  282. package/build/components/ProgressStep/ProgressStep.styles.d.ts +12 -0
  283. package/build/components/ProgressStep/ProgressStep.styles.d.ts.map +1 -0
  284. package/build/components/ProgressStep/ProgressStep.styles.js +13 -0
  285. package/build/components/ProgressStep/ProgressStep.styles.js.map +1 -0
  286. package/build/components/ProgressStep/index.d.ts +3 -0
  287. package/build/components/ProgressStep/index.d.ts.map +1 -0
  288. package/build/components/ProgressStep/index.js +2 -0
  289. package/build/components/ProgressStep/index.js.map +1 -0
  290. package/build/components/RadioButton/RadioButton.d.ts +29 -0
  291. package/build/components/RadioButton/RadioButton.d.ts.map +1 -0
  292. package/build/components/RadioButton/RadioButton.js +71 -0
  293. package/build/components/RadioButton/RadioButton.js.map +1 -0
  294. package/build/components/RadioButton/RadioButton.styles.d.ts +27 -0
  295. package/build/components/RadioButton/RadioButton.styles.d.ts.map +1 -0
  296. package/build/components/RadioButton/RadioButton.styles.js +30 -0
  297. package/build/components/RadioButton/RadioButton.styles.js.map +1 -0
  298. package/build/components/RadioButton/index.d.ts +3 -0
  299. package/build/components/RadioButton/index.d.ts.map +1 -0
  300. package/build/components/RadioButton/index.js +2 -0
  301. package/build/components/RadioButton/index.js.map +1 -0
  302. package/build/components/SearchBar/SearchBar.d.ts +33 -0
  303. package/build/components/SearchBar/SearchBar.d.ts.map +1 -0
  304. package/build/components/SearchBar/SearchBar.js +83 -0
  305. package/build/components/SearchBar/SearchBar.js.map +1 -0
  306. package/build/components/SearchBar/SearchBar.styles.d.ts +19 -0
  307. package/build/components/SearchBar/SearchBar.styles.d.ts.map +1 -0
  308. package/build/components/SearchBar/SearchBar.styles.js +21 -0
  309. package/build/components/SearchBar/SearchBar.styles.js.map +1 -0
  310. package/build/components/SearchBar/index.d.ts +3 -0
  311. package/build/components/SearchBar/index.d.ts.map +1 -0
  312. package/build/components/SearchBar/index.js +2 -0
  313. package/build/components/SearchBar/index.js.map +1 -0
  314. package/build/components/Spinner/Spinner.d.ts +12 -0
  315. package/build/components/Spinner/Spinner.d.ts.map +1 -0
  316. package/build/components/Spinner/Spinner.js +80 -0
  317. package/build/components/Spinner/Spinner.js.map +1 -0
  318. package/build/components/Spinner/Spinner.styles.d.ts +21 -0
  319. package/build/components/Spinner/Spinner.styles.d.ts.map +1 -0
  320. package/build/components/Spinner/Spinner.styles.js +22 -0
  321. package/build/components/Spinner/Spinner.styles.js.map +1 -0
  322. package/build/components/Spinner/index.d.ts +3 -0
  323. package/build/components/Spinner/index.d.ts.map +1 -0
  324. package/build/components/Spinner/index.js +2 -0
  325. package/build/components/Spinner/index.js.map +1 -0
  326. package/build/components/StepSheet/StepSheet.d.ts +77 -0
  327. package/build/components/StepSheet/StepSheet.d.ts.map +1 -0
  328. package/build/components/StepSheet/StepSheet.js +30 -0
  329. package/build/components/StepSheet/StepSheet.js.map +1 -0
  330. package/build/components/StepSheet/StepSheet.styles.d.ts +6 -0
  331. package/build/components/StepSheet/StepSheet.styles.d.ts.map +1 -0
  332. package/build/components/StepSheet/StepSheet.styles.js +7 -0
  333. package/build/components/StepSheet/StepSheet.styles.js.map +1 -0
  334. package/build/components/StepSheet/index.d.ts +3 -0
  335. package/build/components/StepSheet/index.d.ts.map +1 -0
  336. package/build/components/StepSheet/index.js +2 -0
  337. package/build/components/StepSheet/index.js.map +1 -0
  338. package/build/components/Stepper/Stepper.d.ts +50 -0
  339. package/build/components/Stepper/Stepper.d.ts.map +1 -0
  340. package/build/components/Stepper/Stepper.js +48 -0
  341. package/build/components/Stepper/Stepper.js.map +1 -0
  342. package/build/components/Stepper/Stepper.styles.d.ts +27 -0
  343. package/build/components/Stepper/Stepper.styles.d.ts.map +1 -0
  344. package/build/components/Stepper/Stepper.styles.js +28 -0
  345. package/build/components/Stepper/Stepper.styles.js.map +1 -0
  346. package/build/components/Stepper/index.d.ts +3 -0
  347. package/build/components/Stepper/index.d.ts.map +1 -0
  348. package/build/components/Stepper/index.js +2 -0
  349. package/build/components/Stepper/index.js.map +1 -0
  350. package/build/components/Switch/Switch.d.ts +29 -0
  351. package/build/components/Switch/Switch.d.ts.map +1 -0
  352. package/build/components/Switch/Switch.js +83 -0
  353. package/build/components/Switch/Switch.js.map +1 -0
  354. package/build/components/Switch/Switch.styles.d.ts +29 -0
  355. package/build/components/Switch/Switch.styles.d.ts.map +1 -0
  356. package/build/components/Switch/Switch.styles.js +26 -0
  357. package/build/components/Switch/Switch.styles.js.map +1 -0
  358. package/build/components/Switch/index.d.ts +3 -0
  359. package/build/components/Switch/index.d.ts.map +1 -0
  360. package/build/components/Switch/index.js +2 -0
  361. package/build/components/Switch/index.js.map +1 -0
  362. package/build/components/Tab/Tab.d.ts +50 -0
  363. package/build/components/Tab/Tab.d.ts.map +1 -0
  364. package/build/components/Tab/Tab.js +117 -0
  365. package/build/components/Tab/Tab.js.map +1 -0
  366. package/build/components/Tab/Tab.styles.d.ts +55 -0
  367. package/build/components/Tab/Tab.styles.d.ts.map +1 -0
  368. package/build/components/Tab/Tab.styles.js +60 -0
  369. package/build/components/Tab/Tab.styles.js.map +1 -0
  370. package/build/components/Tab/index.d.ts +3 -0
  371. package/build/components/Tab/index.d.ts.map +1 -0
  372. package/build/components/Tab/index.js +2 -0
  373. package/build/components/Tab/index.js.map +1 -0
  374. package/build/components/Tag/Tag.d.ts +4 -0
  375. package/build/components/Tag/Tag.d.ts.map +1 -0
  376. package/build/components/Tag/Tag.js +40 -0
  377. package/build/components/Tag/Tag.js.map +1 -0
  378. package/build/components/Tag/Tag.styles.d.ts +33 -0
  379. package/build/components/Tag/Tag.styles.d.ts.map +1 -0
  380. package/build/components/Tag/Tag.styles.js +43 -0
  381. package/build/components/Tag/Tag.styles.js.map +1 -0
  382. package/build/components/Tag/Tag.types.d.ts +23 -0
  383. package/build/components/Tag/Tag.types.d.ts.map +1 -0
  384. package/build/components/Tag/Tag.types.js +2 -0
  385. package/build/components/Tag/Tag.types.js.map +1 -0
  386. package/build/components/Tag/index.d.ts +3 -0
  387. package/build/components/Tag/index.d.ts.map +1 -0
  388. package/build/components/Tag/index.js +2 -0
  389. package/build/components/Tag/index.js.map +1 -0
  390. package/build/components/navigation/GeneralNav/GeneralNav.d.ts +19 -0
  391. package/build/components/navigation/GeneralNav/GeneralNav.d.ts.map +1 -0
  392. package/build/components/navigation/GeneralNav/GeneralNav.js +27 -0
  393. package/build/components/navigation/GeneralNav/GeneralNav.js.map +1 -0
  394. package/build/components/navigation/GeneralNav/GeneralNav.styles.d.ts +33 -0
  395. package/build/components/navigation/GeneralNav/GeneralNav.styles.d.ts.map +1 -0
  396. package/build/components/navigation/GeneralNav/GeneralNav.styles.js +35 -0
  397. package/build/components/navigation/GeneralNav/GeneralNav.styles.js.map +1 -0
  398. package/build/components/navigation/GeneralNav/index.d.ts +3 -0
  399. package/build/components/navigation/GeneralNav/index.d.ts.map +1 -0
  400. package/build/components/navigation/GeneralNav/index.js +2 -0
  401. package/build/components/navigation/GeneralNav/index.js.map +1 -0
  402. package/build/components/navigation/MobileCanva/MobileCanva.d.ts +11 -0
  403. package/build/components/navigation/MobileCanva/MobileCanva.d.ts.map +1 -0
  404. package/build/components/navigation/MobileCanva/MobileCanva.js +45 -0
  405. package/build/components/navigation/MobileCanva/MobileCanva.js.map +1 -0
  406. package/build/components/navigation/MobileCanva/MobileCanva.styles.d.ts +93 -0
  407. package/build/components/navigation/MobileCanva/MobileCanva.styles.d.ts.map +1 -0
  408. package/build/components/navigation/MobileCanva/MobileCanva.styles.js +94 -0
  409. package/build/components/navigation/MobileCanva/MobileCanva.styles.js.map +1 -0
  410. package/build/components/navigation/MobileCanva/MobileCanva.types.d.ts +21 -0
  411. package/build/components/navigation/MobileCanva/MobileCanva.types.d.ts.map +1 -0
  412. package/build/components/navigation/MobileCanva/MobileCanva.types.js +2 -0
  413. package/build/components/navigation/MobileCanva/MobileCanva.types.js.map +1 -0
  414. package/build/components/navigation/MobileCanva/index.d.ts +3 -0
  415. package/build/components/navigation/MobileCanva/index.d.ts.map +1 -0
  416. package/build/components/navigation/MobileCanva/index.js +2 -0
  417. package/build/components/navigation/MobileCanva/index.js.map +1 -0
  418. package/build/components/navigation/PageNav/PageNav.d.ts +46 -0
  419. package/build/components/navigation/PageNav/PageNav.d.ts.map +1 -0
  420. package/build/components/navigation/PageNav/PageNav.js +48 -0
  421. package/build/components/navigation/PageNav/PageNav.js.map +1 -0
  422. package/build/components/navigation/PageNav/PageNav.styles.d.ts +60 -0
  423. package/build/components/navigation/PageNav/PageNav.styles.d.ts.map +1 -0
  424. package/build/components/navigation/PageNav/PageNav.styles.js +60 -0
  425. package/build/components/navigation/PageNav/PageNav.styles.js.map +1 -0
  426. package/build/components/navigation/PageNav/index.d.ts +3 -0
  427. package/build/components/navigation/PageNav/index.d.ts.map +1 -0
  428. package/build/components/navigation/PageNav/index.js +2 -0
  429. package/build/components/navigation/PageNav/index.js.map +1 -0
  430. package/build/components/navigation/TabBar/TabBar.d.ts +22 -0
  431. package/build/components/navigation/TabBar/TabBar.d.ts.map +1 -0
  432. package/build/components/navigation/TabBar/TabBar.js +13 -0
  433. package/build/components/navigation/TabBar/TabBar.js.map +1 -0
  434. package/build/components/navigation/TabBar/TabBar.styles.d.ts +14 -0
  435. package/build/components/navigation/TabBar/TabBar.styles.d.ts.map +1 -0
  436. package/build/components/navigation/TabBar/TabBar.styles.js +16 -0
  437. package/build/components/navigation/TabBar/TabBar.styles.js.map +1 -0
  438. package/build/components/navigation/TabBar/index.d.ts +3 -0
  439. package/build/components/navigation/TabBar/index.d.ts.map +1 -0
  440. package/build/components/navigation/TabBar/index.js +2 -0
  441. package/build/components/navigation/TabBar/index.js.map +1 -0
  442. package/build/context/BottomSheetContext.d.ts +42 -0
  443. package/build/context/BottomSheetContext.d.ts.map +1 -0
  444. package/build/context/BottomSheetContext.js +51 -0
  445. package/build/context/BottomSheetContext.js.map +1 -0
  446. package/build/context/ThemeContext.d.ts +6 -2
  447. package/build/context/ThemeContext.d.ts.map +1 -1
  448. package/build/context/ThemeContext.js +5 -3
  449. package/build/context/ThemeContext.js.map +1 -1
  450. package/build/index.d.ts +75 -1
  451. package/build/index.d.ts.map +1 -1
  452. package/build/index.js +37 -0
  453. package/build/index.js.map +1 -1
  454. package/build/theme/tokens/dark.d.ts.map +1 -1
  455. package/build/theme/tokens/dark.js +263 -10
  456. package/build/theme/tokens/dark.js.map +1 -1
  457. package/build/theme/tokens/light.d.ts.map +1 -1
  458. package/build/theme/tokens/light.js +252 -7
  459. package/build/theme/tokens/light.js.map +1 -1
  460. package/build/theme/type.d.ts +398 -0
  461. package/build/theme/type.d.ts.map +1 -1
  462. package/build/theme/type.js.map +1 -1
  463. package/package.json +8 -5
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Stepper — step-by-step wizard.
3
+ * Manages navigation between steps, renders a ProgressStep indicator
4
+ * and contextual footer buttons (cancel/back + next/confirm).
5
+ */
6
+ import React from 'react';
7
+ export interface StepperProps {
8
+ /** Ordered list of step content to render */
9
+ steps: React.ReactNode[];
10
+ /** Called when the user cancels on the first step */
11
+ onCancel: () => void;
12
+ /** Called when the user confirms on the last step */
13
+ onConfirm: () => void;
14
+ /**
15
+ * Called before advancing to the next step.
16
+ * Return false to block navigation (e.g. validation failed).
17
+ */
18
+ onStepNext?: (stepIndex: number) => boolean | Promise<boolean>;
19
+ /** Disables the confirm/next button while an async operation is pending */
20
+ isLoading?: boolean;
21
+ /**
22
+ * Extra bottom padding added to the footer — pass `useSafeAreaInsets().bottom`
23
+ * from your app to handle home indicator on iOS.
24
+ * @default 0
25
+ */
26
+ bottomInset?: number;
27
+ /** @default 'Annuler' */
28
+ labelCancel?: string;
29
+ /** @default 'Précédent' */
30
+ labelBack?: string;
31
+ /** @default 'Suivant' */
32
+ labelNext?: string;
33
+ /** @default 'Confirmer' */
34
+ labelConfirm?: string;
35
+ /**
36
+ * Button sizing mode.
37
+ * - `'stretch'` — buttons share available width equally (default)
38
+ * - `'fit'` — buttons size to their label content
39
+ * @default 'stretch'
40
+ */
41
+ buttonLayout?: 'stretch' | 'fit';
42
+ /**
43
+ * Hide the back/cancel button on the last step so the confirm button fills the full width.
44
+ * @default false
45
+ */
46
+ hideBackOnLastStep?: boolean;
47
+ }
48
+ export declare function Stepper({ steps, onCancel, onConfirm, onStepNext, isLoading, bottomInset, buttonLayout, hideBackOnLastStep, labelCancel, labelBack, labelNext, labelConfirm, }: StepperProps): React.JSX.Element;
49
+ export default Stepper;
50
+ //# sourceMappingURL=Stepper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.d.ts","sourceRoot":"","sources":["../../../src/components/Stepper/Stepper.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAOxC,MAAM,WAAW,YAAY;IAC3B,6CAA6C;IAC7C,KAAK,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;IACzB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,IAAI,CAAC;IACrB,qDAAqD;IACrD,SAAS,EAAE,MAAM,IAAI,CAAC;IACtB;;;OAGG;IACH,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC/D,2EAA2E;IAC3E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,yBAAyB;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yBAAyB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;;;OAKG;IACH,YAAY,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC;IACjC;;;OAGG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,OAAO,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,UAAU,EACV,SAAiB,EACjB,WAAe,EACf,YAAwB,EACxB,kBAA0B,EAC1B,WAAuB,EACvB,SAAuB,EACvB,SAAqB,EACrB,YAA0B,GAC3B,EAAE,YAAY,qBAkDd;AAED,eAAe,OAAO,CAAC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Stepper — step-by-step wizard.
3
+ * Manages navigation between steps, renders a ProgressStep indicator
4
+ * and contextual footer buttons (cancel/back + next/confirm).
5
+ */
6
+ import React, { useState } from 'react';
7
+ import { View } from 'react-native';
8
+ import { Button } from '../Button';
9
+ import { ProgressStep } from '../ProgressStep';
10
+ import { useTheme } from '../../context/ThemeContext';
11
+ import { styles } from './Stepper.styles';
12
+ export function Stepper({ steps, onCancel, onConfirm, onStepNext, isLoading = false, bottomInset = 0, buttonLayout = 'stretch', hideBackOnLastStep = false, labelCancel = 'Annuler', labelBack = 'Précédent', labelNext = 'Suivant', labelConfirm = 'Confirmer', }) {
13
+ const { colors } = useTheme();
14
+ const [currentStep, setCurrentStep] = useState(0);
15
+ const isFirst = currentStep === 0;
16
+ const isLast = currentStep === steps.length - 1;
17
+ const handleNext = async () => {
18
+ if (isLast)
19
+ return;
20
+ if (onStepNext) {
21
+ const canProceed = await onStepNext(currentStep);
22
+ if (!canProceed)
23
+ return;
24
+ }
25
+ setCurrentStep((s) => s + 1);
26
+ };
27
+ const handleBack = () => {
28
+ if (!isFirst)
29
+ setCurrentStep((s) => s - 1);
30
+ };
31
+ return (<View style={styles.root}>
32
+ <View style={styles.content}>{steps[currentStep]}</View>
33
+
34
+ <View style={[
35
+ styles.footer,
36
+ { paddingBottom: bottomInset + 16, borderTopColor: colors.border.window },
37
+ ]}>
38
+ <ProgressStep totalSteps={steps.length} currentStep={currentStep}/>
39
+
40
+ <View style={[styles.buttons, buttonLayout === 'stretch' ? styles.buttonsStretch : styles.buttonsFit]}>
41
+ {(!isLast || !hideBackOnLastStep) && (<Button style={buttonLayout === 'stretch' ? styles.buttonStretch : undefined} variant="tertiary" label={isFirst ? labelCancel : labelBack} onPress={isFirst ? onCancel : handleBack}/>)}
42
+ <Button style={isLast && hideBackOnLastStep ? styles.buttonStretch : buttonLayout === 'stretch' ? styles.buttonStretch : undefined} variant="primary" label={isLast ? labelConfirm : labelNext} disabled={isLoading} onPress={isLast ? onConfirm : handleNext}/>
43
+ </View>
44
+ </View>
45
+ </View>);
46
+ }
47
+ export default Stepper;
48
+ //# sourceMappingURL=Stepper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.js","sourceRoot":"","sources":["../../../src/components/Stepper/Stepper.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Stepper — step-by-step wizard.\n * Manages navigation between steps, renders a ProgressStep indicator\n * and contextual footer buttons (cancel/back + next/confirm).\n */\nimport React, { useState } from 'react';\nimport { View } from 'react-native';\nimport { Button } from '../Button';\nimport { ProgressStep } from '../ProgressStep';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Stepper.styles';\n\nexport interface StepperProps {\n /** Ordered list of step content to render */\n steps: React.ReactNode[];\n /** Called when the user cancels on the first step */\n onCancel: () => void;\n /** Called when the user confirms on the last step */\n onConfirm: () => void;\n /**\n * Called before advancing to the next step.\n * Return false to block navigation (e.g. validation failed).\n */\n onStepNext?: (stepIndex: number) => boolean | Promise<boolean>;\n /** Disables the confirm/next button while an async operation is pending */\n isLoading?: boolean;\n /**\n * Extra bottom padding added to the footer — pass `useSafeAreaInsets().bottom`\n * from your app to handle home indicator on iOS.\n * @default 0\n */\n bottomInset?: number;\n /** @default 'Annuler' */\n labelCancel?: string;\n /** @default 'Précédent' */\n labelBack?: string;\n /** @default 'Suivant' */\n labelNext?: string;\n /** @default 'Confirmer' */\n labelConfirm?: string;\n /**\n * Button sizing mode.\n * - `'stretch'` — buttons share available width equally (default)\n * - `'fit'` — buttons size to their label content\n * @default 'stretch'\n */\n buttonLayout?: 'stretch' | 'fit';\n /**\n * Hide the back/cancel button on the last step so the confirm button fills the full width.\n * @default false\n */\n hideBackOnLastStep?: boolean;\n}\n\nexport function Stepper({\n steps,\n onCancel,\n onConfirm,\n onStepNext,\n isLoading = false,\n bottomInset = 0,\n buttonLayout = 'stretch',\n hideBackOnLastStep = false,\n labelCancel = 'Annuler',\n labelBack = 'Précédent',\n labelNext = 'Suivant',\n labelConfirm = 'Confirmer',\n}: StepperProps) {\n const { colors } = useTheme();\n const [currentStep, setCurrentStep] = useState(0);\n\n const isFirst = currentStep === 0;\n const isLast = currentStep === steps.length - 1;\n\n const handleNext = async () => {\n if (isLast) return;\n if (onStepNext) {\n const canProceed = await onStepNext(currentStep);\n if (!canProceed) return;\n }\n setCurrentStep((s) => s + 1);\n };\n\n const handleBack = () => {\n if (!isFirst) setCurrentStep((s) => s - 1);\n };\n\n return (\n <View style={styles.root}>\n <View style={styles.content}>{steps[currentStep]}</View>\n\n <View style={[\n styles.footer,\n { paddingBottom: bottomInset + 16, borderTopColor: colors.border.window },\n ]}>\n <ProgressStep totalSteps={steps.length} currentStep={currentStep} />\n\n <View style={[styles.buttons, buttonLayout === 'stretch' ? styles.buttonsStretch : styles.buttonsFit]}>\n {(!isLast || !hideBackOnLastStep) && (\n <Button\n style={buttonLayout === 'stretch' ? styles.buttonStretch : undefined}\n variant=\"tertiary\"\n label={isFirst ? labelCancel : labelBack}\n onPress={isFirst ? onCancel : handleBack}\n />\n )}\n <Button\n style={isLast && hideBackOnLastStep ? styles.buttonStretch : buttonLayout === 'stretch' ? styles.buttonStretch : undefined}\n variant=\"primary\"\n label={isLast ? labelConfirm : labelNext}\n disabled={isLoading}\n onPress={isLast ? onConfirm : handleNext}\n />\n </View>\n </View>\n </View>\n );\n}\n\nexport default Stepper;\n\n"]}
@@ -0,0 +1,27 @@
1
+ export declare const styles: {
2
+ root: {
3
+ flex: number;
4
+ };
5
+ content: {
6
+ flex: number;
7
+ };
8
+ footer: {
9
+ paddingTop: number;
10
+ paddingHorizontal: number;
11
+ gap: number;
12
+ };
13
+ buttons: {
14
+ flexDirection: "row";
15
+ gap: number;
16
+ };
17
+ buttonsStretch: {
18
+ alignItems: "stretch";
19
+ };
20
+ buttonsFit: {
21
+ justifyContent: "space-between";
22
+ };
23
+ buttonStretch: {
24
+ flex: number;
25
+ };
26
+ };
27
+ //# sourceMappingURL=Stepper.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Stepper/Stepper.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;CAyBjB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { StyleSheet } from 'react-native';
2
+ export const styles = StyleSheet.create({
3
+ root: {
4
+ flex: 1,
5
+ },
6
+ content: {
7
+ flex: 1,
8
+ },
9
+ footer: {
10
+ paddingTop: 10,
11
+ paddingHorizontal: 10,
12
+ gap: 10,
13
+ },
14
+ buttons: {
15
+ flexDirection: 'row',
16
+ gap: 12,
17
+ },
18
+ buttonsStretch: {
19
+ alignItems: 'stretch',
20
+ },
21
+ buttonsFit: {
22
+ justifyContent: 'space-between',
23
+ },
24
+ buttonStretch: {
25
+ flex: 1,
26
+ },
27
+ });
28
+ //# sourceMappingURL=Stepper.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Stepper.styles.js","sourceRoot":"","sources":["../../../src/components/Stepper/Stepper.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC;KACR;IACD,OAAO,EAAE;QACP,IAAI,EAAE,CAAC;KACR;IACD,MAAM,EAAE;QACN,UAAU,EAAE,EAAE;QACd,iBAAiB,EAAE,EAAE;QACrB,GAAG,EAAE,EAAE;KACR;IACD,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,EAAE;KACR;IACD,cAAc,EAAE;QACd,UAAU,EAAE,SAAS;KACtB;IACD,UAAU,EAAE;QACV,cAAc,EAAE,eAAe;KAChC;IACD,aAAa,EAAE;QACb,IAAI,EAAE,CAAC;KACR;CACF,CAAC,CAAC","sourcesContent":["import { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n root: {\n flex: 1,\n },\n content: {\n flex: 1,\n },\n footer: {\n paddingTop: 10,\n paddingHorizontal: 10,\n gap: 10,\n },\n buttons: {\n flexDirection: 'row',\n gap: 12,\n },\n buttonsStretch: {\n alignItems: 'stretch',\n },\n buttonsFit: {\n justifyContent: 'space-between',\n },\n buttonStretch: {\n flex: 1,\n },\n});\n"]}
@@ -0,0 +1,3 @@
1
+ export { Stepper } from './Stepper';
2
+ export type { StepperProps } from './Stepper';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Stepper } from './Stepper';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Stepper/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC","sourcesContent":["export { Stepper } from './Stepper';\nexport type { StepperProps } from './Stepper';"]}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Switch — controlled on/off toggle.
3
+ * Custom implementation (not the RN native Switch) to match the Figma pixel-perfect.
4
+ * 4 sizes: s / m / l / xl. Animated thumb translation via Animated.timing.
5
+ * Track color changes instantly; thumb slides with ease-out cubic.
6
+ */
7
+ import React from 'react';
8
+ import type { StyleProp, ViewStyle } from 'react-native';
9
+ export type SwitchSize = 's' | 'm' | 'l' | 'xl';
10
+ export interface SwitchProps {
11
+ /** Current on/off value — controlled */
12
+ value: boolean;
13
+ /** Toggle handler */
14
+ onValueChange: (value: boolean) => void;
15
+ /** Content displayed to the left of the switch */
16
+ childrenLeft?: React.ReactNode;
17
+ /** Content displayed to the right of the switch */
18
+ childrenRight?: React.ReactNode;
19
+ /** Switch size — s: 28×16, m: 36×20, l: 44×24, xl: 52×28 */
20
+ size?: SwitchSize;
21
+ /** Disabled — no interaction, muted colors */
22
+ disabled?: boolean;
23
+ /** Additional styles on the wrapper */
24
+ style?: StyleProp<ViewStyle>;
25
+ /** Test ID for automated testing */
26
+ testID?: string;
27
+ }
28
+ export declare const Switch: ({ value, onValueChange, childrenLeft, childrenRight, size, disabled, style, testID, }: SwitchProps) => React.JSX.Element;
29
+ //# sourceMappingURL=Switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAA4B,MAAM,OAAO,CAAC;AAEjD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,MAAM,UAAU,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,CAAC;AAEhD,MAAM,WAAW,WAAW;IAC1B,wCAAwC;IACxC,KAAK,EAAE,OAAO,CAAC;IACf,qBAAqB;IACrB,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,CAAC;IACxC,kDAAkD;IAClD,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC/B,mDAAmD;IACnD,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAChC,4DAA4D;IAC5D,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,uCAAuC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAyBD,eAAO,MAAM,MAAM,GAAI,uFASpB,WAAW,sBA4Eb,CAAC"}
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Switch — controlled on/off toggle.
3
+ * Custom implementation (not the RN native Switch) to match the Figma pixel-perfect.
4
+ * 4 sizes: s / m / l / xl. Animated thumb translation via Animated.timing.
5
+ * Track color changes instantly; thumb slides with ease-out cubic.
6
+ */
7
+ import React, { useEffect, useRef } from 'react';
8
+ import { Animated, Easing, Pressable, View } from 'react-native';
9
+ import { useTheme } from '../../context/ThemeContext';
10
+ import { styles } from './Switch.styles';
11
+ // ---------------------------------------------------------------------------
12
+ // Size config — derived from Figma measurements (2px thumb padding)
13
+ // ---------------------------------------------------------------------------
14
+ const THUMB_PADDING = 2;
15
+ const SIZE_CONFIG = {
16
+ s: { trackWidth: 28, trackHeight: 16, thumbSize: 12 },
17
+ m: { trackWidth: 36, trackHeight: 20, thumbSize: 16 },
18
+ l: { trackWidth: 44, trackHeight: 24, thumbSize: 20 },
19
+ xl: { trackWidth: 52, trackHeight: 28, thumbSize: 24 },
20
+ };
21
+ const ANIMATION_DURATION = 200;
22
+ // ---------------------------------------------------------------------------
23
+ // Component
24
+ // ---------------------------------------------------------------------------
25
+ export const Switch = ({ value, onValueChange, childrenLeft, childrenRight, size = 'm', disabled = false, style, testID, }) => {
26
+ const { colors } = useTheme();
27
+ const cfg = SIZE_CONFIG[size];
28
+ const animValue = useRef(new Animated.Value(value ? 1 : 0)).current;
29
+ // Animate thumb on value change
30
+ useEffect(() => {
31
+ const anim = Animated.timing(animValue, {
32
+ toValue: value ? 1 : 0,
33
+ duration: ANIMATION_DURATION,
34
+ easing: Easing.out(Easing.cubic),
35
+ useNativeDriver: true,
36
+ });
37
+ anim.start();
38
+ return () => anim.stop();
39
+ }, [value, animValue]);
40
+ // Max translation: from left edge + padding to right edge - padding - thumbSize
41
+ const travelX = cfg.trackWidth - cfg.thumbSize - THUMB_PADDING * 2;
42
+ const thumbTranslateX = animValue.interpolate({
43
+ inputRange: [0, 1],
44
+ outputRange: [0, travelX],
45
+ });
46
+ const t = colors.toggle;
47
+ const trackColor = disabled
48
+ ? (value ? t.trackOnDisabled : t.trackOffDisabled)
49
+ : (value ? t.trackOn : t.trackOff);
50
+ const thumbColor = disabled
51
+ ? t.thumbDisabled
52
+ : (value ? t.thumbOn : t.thumbOff);
53
+ const track = (<View style={[
54
+ styles.track,
55
+ {
56
+ width: cfg.trackWidth,
57
+ height: cfg.trackHeight,
58
+ borderRadius: cfg.trackHeight / 2,
59
+ backgroundColor: trackColor,
60
+ shadowColor: colors.shadow.minimal,
61
+ },
62
+ ]}>
63
+ <Animated.View style={[
64
+ styles.thumb,
65
+ {
66
+ width: cfg.thumbSize,
67
+ height: cfg.thumbSize,
68
+ borderRadius: cfg.thumbSize / 2,
69
+ top: THUMB_PADDING,
70
+ left: THUMB_PADDING,
71
+ backgroundColor: thumbColor,
72
+ transform: [{ translateX: thumbTranslateX }],
73
+ shadowColor: colors.shadow.minimal,
74
+ },
75
+ ]}/>
76
+ </View>);
77
+ return (<Pressable onPress={disabled ? undefined : () => onValueChange(!value)} accessibilityRole="switch" accessibilityState={{ checked: value, disabled }} style={[styles.wrapper, style]} testID={testID}>
78
+ {childrenLeft}
79
+ {track}
80
+ {childrenRight}
81
+ </Pressable>);
82
+ };
83
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Switch — controlled on/off toggle.\n * Custom implementation (not the RN native Switch) to match the Figma pixel-perfect.\n * 4 sizes: s / m / l / xl. Animated thumb translation via Animated.timing.\n * Track color changes instantly; thumb slides with ease-out cubic.\n */\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, Pressable, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Switch.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type SwitchSize = 's' | 'm' | 'l' | 'xl';\n\nexport interface SwitchProps {\n /** Current on/off value — controlled */\n value: boolean;\n /** Toggle handler */\n onValueChange: (value: boolean) => void;\n /** Content displayed to the left of the switch */\n childrenLeft?: React.ReactNode;\n /** Content displayed to the right of the switch */\n childrenRight?: React.ReactNode;\n /** Switch size — s: 28×16, m: 36×20, l: 44×24, xl: 52×28 */\n size?: SwitchSize;\n /** Disabled — no interaction, muted colors */\n disabled?: boolean;\n /** Additional styles on the wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Size config — derived from Figma measurements (2px thumb padding)\n// ---------------------------------------------------------------------------\n\nconst THUMB_PADDING = 2;\n\nconst SIZE_CONFIG: Record<SwitchSize, {\n trackWidth: number;\n trackHeight: number;\n thumbSize: number;\n}> = {\n s: { trackWidth: 28, trackHeight: 16, thumbSize: 12 },\n m: { trackWidth: 36, trackHeight: 20, thumbSize: 16 },\n l: { trackWidth: 44, trackHeight: 24, thumbSize: 20 },\n xl: { trackWidth: 52, trackHeight: 28, thumbSize: 24 },\n};\n\nconst ANIMATION_DURATION = 200;\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Switch = ({\n value,\n onValueChange,\n childrenLeft,\n childrenRight,\n size = 'm',\n disabled = false,\n style,\n testID,\n}: SwitchProps) => {\n const { colors } = useTheme();\n const cfg = SIZE_CONFIG[size];\n const animValue = useRef(new Animated.Value(value ? 1 : 0)).current;\n\n // Animate thumb on value change\n useEffect(() => {\n const anim = Animated.timing(animValue, {\n toValue: value ? 1 : 0,\n duration: ANIMATION_DURATION,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n });\n anim.start();\n return () => anim.stop();\n }, [value, animValue]);\n\n // Max translation: from left edge + padding to right edge - padding - thumbSize\n const travelX = cfg.trackWidth - cfg.thumbSize - THUMB_PADDING * 2;\n const thumbTranslateX = animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, travelX],\n });\n\n const t = colors.toggle;\n const trackColor = disabled\n ? (value ? t.trackOnDisabled : t.trackOffDisabled)\n : (value ? t.trackOn : t.trackOff);\n const thumbColor = disabled\n ? t.thumbDisabled\n : (value ? t.thumbOn : t.thumbOff);\n\n const track = (\n <View\n style={[\n styles.track,\n {\n width: cfg.trackWidth,\n height: cfg.trackHeight,\n borderRadius: cfg.trackHeight / 2,\n backgroundColor: trackColor,\n shadowColor: colors.shadow.minimal,\n },\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: cfg.thumbSize,\n height: cfg.thumbSize,\n borderRadius: cfg.thumbSize / 2,\n top: THUMB_PADDING,\n left: THUMB_PADDING,\n backgroundColor: thumbColor,\n transform: [{ translateX: thumbTranslateX }],\n shadowColor: colors.shadow.minimal,\n },\n ]}\n />\n </View>\n );\n\n return (\n <Pressable\n onPress={disabled ? undefined : () => onValueChange(!value)}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n style={[styles.wrapper, style]}\n testID={testID}\n >\n {childrenLeft}\n {track}\n {childrenRight}\n </Pressable>\n );\n};\n\n"]}
@@ -0,0 +1,29 @@
1
+ export declare const styles: {
2
+ wrapper: {
3
+ flexDirection: "row";
4
+ alignItems: "center";
5
+ gap: number;
6
+ alignSelf: "flex-start";
7
+ };
8
+ track: {
9
+ overflow: "hidden";
10
+ shadowOffset: {
11
+ width: number;
12
+ height: number;
13
+ };
14
+ shadowOpacity: number;
15
+ shadowRadius: number;
16
+ elevation: number;
17
+ };
18
+ thumb: {
19
+ position: "absolute";
20
+ shadowOffset: {
21
+ width: number;
22
+ height: number;
23
+ };
24
+ shadowOpacity: number;
25
+ shadowRadius: number;
26
+ elevation: number;
27
+ };
28
+ };
29
+ //# sourceMappingURL=Switch.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/Switch.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;CAuBjB,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { StyleSheet } from 'react-native';
2
+ export const styles = StyleSheet.create({
3
+ wrapper: {
4
+ flexDirection: 'row',
5
+ alignItems: 'center',
6
+ gap: 8,
7
+ alignSelf: 'flex-start',
8
+ },
9
+ track: {
10
+ overflow: 'hidden',
11
+ // shadow on track
12
+ shadowOffset: { width: 0, height: 4 },
13
+ shadowOpacity: 1,
14
+ shadowRadius: 5,
15
+ elevation: 2,
16
+ },
17
+ thumb: {
18
+ position: 'absolute',
19
+ // shadow on thumb (visible before overflow:hidden clips it)
20
+ shadowOffset: { width: 0, height: 4 },
21
+ shadowOpacity: 1,
22
+ shadowRadius: 5,
23
+ elevation: 2,
24
+ },
25
+ });
26
+ //# sourceMappingURL=Switch.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.styles.js","sourceRoot":"","sources":["../../../src/components/Switch/Switch.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,SAAS,EAAE,YAAY;KACxB;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,QAAQ;QAClB,kBAAkB;QAClB,YAAY,EAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACtC,aAAa,EAAE,CAAC;QAChB,YAAY,EAAG,CAAC;QAChB,SAAS,EAAM,CAAC;KACjB;IACD,KAAK,EAAE;QACL,QAAQ,EAAM,UAAU;QACxB,4DAA4D;QAC5D,YAAY,EAAG,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACtC,aAAa,EAAE,CAAC;QAChB,YAAY,EAAG,CAAC;QAChB,SAAS,EAAM,CAAC;KACjB;CACF,CAAC,CAAC","sourcesContent":["import { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n wrapper: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n alignSelf: 'flex-start',\n },\n track: {\n overflow: 'hidden',\n // shadow on track\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 5,\n elevation: 2,\n },\n thumb: {\n position: 'absolute',\n // shadow on thumb (visible before overflow:hidden clips it)\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 5,\n elevation: 2,\n },\n});\n"]}
@@ -0,0 +1,3 @@
1
+ export { Switch } from './Switch';
2
+ export type { SwitchProps, SwitchSize } from './Switch';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Switch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { Switch } from './Switch';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/Switch/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { Switch } from './Switch';\nexport type { SwitchProps, SwitchSize } from './Switch';\n"]}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tab — horizontal tab navigation bar.
3
+ *
4
+ * Two visual variants:
5
+ * - 'line' → underline indicator. Full-width strip, each tab flex:1.
6
+ * - 'button' → pill/segmented container. Active tab gets a card background.
7
+ *
8
+ * Controlled: activeIndex + onChange always required.
9
+ * Optional horizontal ScrollView when `scrollable` is true.
10
+ */
11
+ import React from 'react';
12
+ import type { StyleProp, ViewStyle } from 'react-native';
13
+ export interface TabItem {
14
+ /** Tab label text — optional when icon is provided */
15
+ label?: string;
16
+ /** Optional Phosphor icon — rendered at 24px (line) or 20px (button) */
17
+ icon?: React.ReactElement;
18
+ /** Disabled — no interaction, muted color */
19
+ disabled?: boolean;
20
+ }
21
+ export interface TabProps {
22
+ /** Tab definitions */
23
+ items: TabItem[];
24
+ /** Index of the currently active tab — controlled */
25
+ activeIndex: number;
26
+ /** Called with the new index when the user taps a tab */
27
+ onChange: (index: number) => void;
28
+ /**
29
+ * Visual variant:
30
+ * - 'line' → underline indicator, tabs stretch to fill width
31
+ * - 'button' → pill/segmented container
32
+ */
33
+ variant?: 'line' | 'button';
34
+ /** When true, wraps tabs in a horizontal ScrollView (for many tabs) */
35
+ scrollable?: boolean;
36
+ /** When true, truncates labels with "…" — defaults to false (full text, no wrap) */
37
+ truncateLabels?: boolean;
38
+ /** Forces the container to fill 100% of its parent width */
39
+ fullWidth?: boolean;
40
+ /** Each tab gets flex:1 and shares the container width equally — implies fullWidth */
41
+ stretchItems?: boolean;
42
+ /** Horizontal alignment of tabs within the container — defaults to 'left' */
43
+ align?: 'left' | 'center' | 'right';
44
+ /** Additional styles on the outer wrapper */
45
+ style?: StyleProp<ViewStyle>;
46
+ /** Test ID for automated testing */
47
+ testID?: string;
48
+ }
49
+ export declare const Tab: ({ items, activeIndex, onChange, variant, scrollable, truncateLabels, fullWidth, stretchItems, align, style, testID, }: TabProps) => React.JSX.Element;
50
+ //# sourceMappingURL=Tab.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,GAAG,GAAI,uHAYjB,QAAQ,sBA8JV,CAAC"}
@@ -0,0 +1,117 @@
1
+ /**
2
+ * Tab — horizontal tab navigation bar.
3
+ *
4
+ * Two visual variants:
5
+ * - 'line' → underline indicator. Full-width strip, each tab flex:1.
6
+ * - 'button' → pill/segmented container. Active tab gets a card background.
7
+ *
8
+ * Controlled: activeIndex + onChange always required.
9
+ * Optional horizontal ScrollView when `scrollable` is true.
10
+ */
11
+ import React from 'react';
12
+ import { Pressable, ScrollView, Text, View, } from 'react-native';
13
+ import { useTheme } from '../../context/ThemeContext';
14
+ import { styles } from './Tab.styles';
15
+ // ---------------------------------------------------------------------------
16
+ // Component
17
+ // ---------------------------------------------------------------------------
18
+ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable = false, truncateLabels = false, fullWidth = false, stretchItems = false, align = 'left', style, testID, }) => {
19
+ const { colors } = useTheme();
20
+ const t = colors.tabs;
21
+ const justifyContent = align === 'center' ? 'center' :
22
+ align === 'right' ? 'flex-end' :
23
+ 'flex-start';
24
+ // stretchItems implies full-width container
25
+ const effectiveFullWidth = fullWidth || stretchItems;
26
+ // items get flex:1 when stretchItems or truncateLabels (truncation needs a bounded width)
27
+ const itemFlex = !scrollable && (stretchItems || truncateLabels);
28
+ // autoSize: shrink to content when items are intrinsic width and container not forced full
29
+ const sizeStyle = !itemFlex && !effectiveFullWidth ? styles.autoSize : undefined;
30
+ // -----------------------------------------------------------------------
31
+ // Line variant
32
+ // -----------------------------------------------------------------------
33
+ if (variant === 'line') {
34
+ const tabs = items.map((item, index) => {
35
+ const isActive = index === activeIndex;
36
+ const isDisabled = item.disabled ?? false;
37
+ const textColor = isDisabled
38
+ ? t.line.disabled.text
39
+ : isActive
40
+ ? t.line.active.text
41
+ : t.line.inactive.text;
42
+ const iconElement = item.icon
43
+ ? React.cloneElement(item.icon, {
44
+ color: textColor,
45
+ size: 24,
46
+ })
47
+ : null;
48
+ return (<Pressable key={index} onPress={isDisabled ? undefined : () => onChange(index)} accessibilityRole="tab" accessibilityState={{ selected: isActive, disabled: isDisabled }} style={[
49
+ styles.lineTab,
50
+ itemFlex && styles.lineTabFlex,
51
+ isActive && {
52
+ borderBottomWidth: 2,
53
+ borderBottomColor: t.line.active.indicator,
54
+ },
55
+ ]}>
56
+ {iconElement}
57
+ {item.label != null && (<Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>)}
58
+ </Pressable>);
59
+ });
60
+ const container = (<View style={[
61
+ styles.lineContainer,
62
+ { borderBottomColor: t.line.containerBorder, justifyContent },
63
+ sizeStyle,
64
+ style,
65
+ ]} testID={testID}>
66
+ {scrollable ? (<ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.lineScrollContent}>
67
+ {tabs}
68
+ </ScrollView>) : (tabs)}
69
+ </View>);
70
+ return container;
71
+ }
72
+ // -----------------------------------------------------------------------
73
+ // Button variant
74
+ // -----------------------------------------------------------------------
75
+ const tabs = items.map((item, index) => {
76
+ const isActive = index === activeIndex;
77
+ const isDisabled = item.disabled ?? false;
78
+ const textColor = isDisabled
79
+ ? t.button.disabled.text
80
+ : isActive
81
+ ? t.button.active.text
82
+ : t.button.default.text;
83
+ const iconElement = item.icon
84
+ ? React.cloneElement(item.icon, {
85
+ color: textColor,
86
+ size: 20,
87
+ })
88
+ : null;
89
+ return (<Pressable key={index} onPress={isDisabled ? undefined : () => onChange(index)} accessibilityRole="tab" accessibilityState={{ selected: isActive, disabled: isDisabled }} style={[
90
+ styles.buttonTab,
91
+ itemFlex && styles.buttonTabFlex,
92
+ isActive && {
93
+ backgroundColor: t.button.active.background,
94
+ borderWidth: 1,
95
+ borderColor: t.button.active.border,
96
+ },
97
+ ]}>
98
+ {iconElement}
99
+ {item.label != null && (<Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>)}
100
+ </Pressable>);
101
+ });
102
+ return (<View style={[
103
+ styles.buttonContainer,
104
+ {
105
+ backgroundColor: t.button.container.background,
106
+ borderColor: t.button.container.border,
107
+ justifyContent,
108
+ },
109
+ sizeStyle,
110
+ style,
111
+ ]} testID={testID}>
112
+ {scrollable ? (<ScrollView horizontal showsHorizontalScrollIndicator={false} contentContainerStyle={styles.buttonScrollContent}>
113
+ {tabs}
114
+ </ScrollView>) : (tabs)}
115
+ </View>);
116
+ };
117
+ //# sourceMappingURL=Tab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tab — horizontal tab navigation bar.\n *\n * Two visual variants:\n * - 'line' → underline indicator. Full-width strip, each tab flex:1.\n * - 'button' → pill/segmented container. Active tab gets a card background.\n *\n * Controlled: activeIndex + onChange always required.\n * Optional horizontal ScrollView when `scrollable` is true.\n */\nimport React from 'react';\nimport {\n Pressable,\n ScrollView,\n Text,\n View,\n} from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Tab.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TabItem {\n /** Tab label text — optional when icon is provided */\n label?: string;\n /** Optional Phosphor icon — rendered at 24px (line) or 20px (button) */\n icon?: React.ReactElement;\n /** Disabled — no interaction, muted color */\n disabled?: boolean;\n}\n\nexport interface TabProps {\n /** Tab definitions */\n items: TabItem[];\n /** Index of the currently active tab — controlled */\n activeIndex: number;\n /** Called with the new index when the user taps a tab */\n onChange: (index: number) => void;\n /**\n * Visual variant:\n * - 'line' → underline indicator, tabs stretch to fill width\n * - 'button' → pill/segmented container\n */\n variant?: 'line' | 'button';\n /** When true, wraps tabs in a horizontal ScrollView (for many tabs) */\n scrollable?: boolean;\n /** When true, truncates labels with \"…\" — defaults to false (full text, no wrap) */\n truncateLabels?: boolean;\n /** Forces the container to fill 100% of its parent width */\n fullWidth?: boolean;\n /** Each tab gets flex:1 and shares the container width equally — implies fullWidth */\n stretchItems?: boolean;\n /** Horizontal alignment of tabs within the container — defaults to 'left' */\n align?: 'left' | 'center' | 'right';\n /** Additional styles on the outer wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Tab = ({\n items,\n activeIndex,\n onChange,\n variant = 'line',\n scrollable = false,\n truncateLabels = false,\n fullWidth = false,\n stretchItems = false,\n align = 'left',\n style,\n testID,\n}: TabProps) => {\n const { colors } = useTheme();\n const t = colors.tabs;\n\n const justifyContent =\n align === 'center' ? 'center' :\n align === 'right' ? 'flex-end' :\n 'flex-start';\n\n // stretchItems implies full-width container\n const effectiveFullWidth = fullWidth || stretchItems;\n // items get flex:1 when stretchItems or truncateLabels (truncation needs a bounded width)\n const itemFlex = !scrollable && (stretchItems || truncateLabels);\n // autoSize: shrink to content when items are intrinsic width and container not forced full\n const sizeStyle = !itemFlex && !effectiveFullWidth ? styles.autoSize : undefined;\n\n // -----------------------------------------------------------------------\n // Line variant\n // -----------------------------------------------------------------------\n if (variant === 'line') {\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.line.disabled.text\n : isActive\n ? t.line.active.text\n : t.line.inactive.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 24,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.lineTab,\n itemFlex && styles.lineTabFlex,\n isActive && {\n borderBottomWidth: 2,\n borderBottomColor: t.line.active.indicator,\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n const container = (\n <View\n style={[\n styles.lineContainer,\n { borderBottomColor: t.line.containerBorder, justifyContent },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.lineScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n\n return container;\n }\n\n // -----------------------------------------------------------------------\n // Button variant\n // -----------------------------------------------------------------------\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.button.disabled.text\n : isActive\n ? t.button.active.text\n : t.button.default.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 20,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.buttonTab,\n itemFlex && styles.buttonTabFlex,\n isActive && {\n backgroundColor: t.button.active.background,\n borderWidth: 1,\n borderColor: t.button.active.border,\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n return (\n <View\n style={[\n styles.buttonContainer,\n {\n backgroundColor: t.button.container.background,\n borderColor: t.button.container.border,\n justifyContent,\n },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.buttonScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n};\n\n"]}