@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,106 @@
1
+ /**
2
+ * CardEquip — equipment resource card.
3
+ * Extends the base Card with an image slot, name, info line, scrollable tag row and optional badges.
4
+ * Supports selected and selectable states as defined in the Figma "Card equip" spec.
5
+ */
6
+ import React from 'react';
7
+ import { Image, Text, View } from 'react-native';
8
+ import { LinearGradient } from 'expo-linear-gradient';
9
+ import { Broadcast, Package } from 'phosphor-react-native';
10
+ import { useTheme } from '../../context/ThemeContext';
11
+ import { Card } from '../Card';
12
+ import { Tag } from '../Tag';
13
+ import { Checkbox } from '../Checkbox';
14
+ import { AssociationTag } from '../AssociationTag';
15
+ import { styles } from './CardEquip.styles';
16
+ // ---------------------------------------------------------------------------
17
+ // Helpers
18
+ // ---------------------------------------------------------------------------
19
+ const toArray = (value) => {
20
+ if (!value)
21
+ return [];
22
+ return Array.isArray(value) ? value : [value];
23
+ };
24
+ /** Build rgba string from a 6-digit hex color */
25
+ const hexToRgba = (hex, alpha) => {
26
+ const r = parseInt(hex.slice(1, 3), 16);
27
+ const g = parseInt(hex.slice(3, 5), 16);
28
+ const b = parseInt(hex.slice(5, 7), 16);
29
+ return `rgba(${r},${g},${b},${alpha})`;
30
+ };
31
+ // ---------------------------------------------------------------------------
32
+ // Component
33
+ // ---------------------------------------------------------------------------
34
+ export function CardEquip({ name, image, showImagePlaceholder, tags, model, brand, address, association, badge, selected = false, selectable = false, onPress, disabled = false, width, style, testID, accessibilityLabel, }) {
35
+ const { colors, fontFamily } = useTheme();
36
+ const associations = toArray(association);
37
+ const hasBrandModel = !!(brand || model);
38
+ const hasTags = !!(tags && tags.length > 0);
39
+ const showImage = !!(image || showImagePlaceholder);
40
+ // Selected state overrides border
41
+ const selectedOverride = selected
42
+ ? { borderWidth: 2, borderColor: colors.text.primary }
43
+ : null;
44
+ return (<Card onPress={onPress} disabled={disabled} testID={testID} width={width} style={[styles.cardOverride, selectedOverride, style]} accessibilityLabel={accessibilityLabel ?? name}>
45
+ {/* ── Left: image slot ── */}
46
+ {showImage && (<View style={[styles.imageContainer, { backgroundColor: colors.background.tertiary }]}>
47
+ {image ? (<Image source={{ uri: image }} style={styles.image} resizeMode="cover"/>) : (<View style={[styles.imagePlaceholder, { backgroundColor: colors.background.tertiary }]}>
48
+ <View style={styles.packageIconWrapper}>
49
+ <Package size={40} color={colors.text.secondary} weight="duotone"/>
50
+ </View>
51
+ </View>)}
52
+ </View>)}
53
+
54
+ {/* ── Right: content column ── */}
55
+ <View style={styles.content}>
56
+
57
+ {/* Name + beacon tag */}
58
+ <View style={styles.nameRow}>
59
+ <Text style={[styles.name, { color: colors.text.primary, fontFamily }]} numberOfLines={1} ellipsizeMode="tail">
60
+ {name}
61
+ </Text>
62
+
63
+ {associations.length > 0 && (<View style={styles.beaconContainer}>
64
+ {associations.map((mac, i) => (<AssociationTag key={i} text={mac} iconLeft={<Broadcast size={12} weight="duotone"/>}/>))}
65
+ </View>)}
66
+ </View>
67
+
68
+ {/* Second line: brand · model OR address */}
69
+ {hasBrandModel && (<View style={styles.infoRow}>
70
+ {brand && (<Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{brand}</Text>)}
71
+ {brand && model && (<View style={[styles.dot, { backgroundColor: colors.text.primary }]}/>)}
72
+ {model && (<Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{model}</Text>)}
73
+ </View>)}
74
+ {!hasBrandModel && address && (<Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{address}</Text>)}
75
+
76
+ {/* Tags row + doc badge */}
77
+ {(hasTags || badge) && (<View style={styles.tagsRow}>
78
+ {hasTags && (<View style={styles.tagsContainer}>
79
+ {tags.map((tag, i) => {
80
+ const t = typeof tag === 'string' ? { label: tag } : tag;
81
+ return (<Tag key={i} label={t.label} size="xs" shape="pill" color={t.color} textColor={t.textColor} iconLeft={t.iconLeft}/>);
82
+ })}
83
+ {/* Fade overlay — gradient mask from transparent to card bg */}
84
+ <LinearGradient colors={[hexToRgba(colors.background.primary, 0), hexToRgba(colors.background.primary, 0.8)]} start={{ x: 0, y: 0 }} end={{ x: 1, y: 0 }} style={styles.tagsFade} pointerEvents="none"/>
85
+ </View>)}
86
+
87
+ {hasTags && badge && (<View style={[styles.tagBadgeSeparator, { backgroundColor: colors.border.default }]}/>)}
88
+
89
+ {badge && (<View style={[styles.docBadge, {
90
+ borderColor: colors.border.window,
91
+ backgroundColor: colors.background.primary,
92
+ shadowColor: colors.shadow.minimal,
93
+ }]}>
94
+ <Text style={[styles.docBadgeLabel, { color: colors.text.primary, fontFamily }]}>
95
+ {badge.label}
96
+ </Text>
97
+ {badge.icon}
98
+ </View>)}
99
+ </View>)}
100
+ </View>
101
+
102
+ {/* ── Checkbox overlay (selectable mode) ── */}
103
+ {selectable && (<Checkbox checked={selected} onPress={onPress ?? (() => { })} disabled={disabled} size="m" style={styles.checkboxOverlay}/>)}
104
+ </Card>);
105
+ }
106
+ //# sourceMappingURL=CardEquip.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardEquip.js","sourceRoot":"","sources":["../../../src/components/CardEquip/CardEquip.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * CardEquip — equipment resource card.\n * Extends the base Card with an image slot, name, info line, scrollable tag row and optional badges.\n * Supports selected and selectable states as defined in the Figma \"Card equip\" spec.\n */\nimport React from 'react';\nimport { Image, Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { LinearGradient } from 'expo-linear-gradient';\nimport { Broadcast, Package } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { Card } from '../Card';\nimport { Tag } from '../Tag';\nimport { Checkbox } from '../Checkbox';\nimport { AssociationTag } from '../AssociationTag';\nimport { styles } from './CardEquip.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface CardEquipTag {\n /** Tag label */\n label: string;\n /** Custom background color override */\n color?: string;\n /** Custom text and icon color override */\n textColor?: string;\n /** Optional left icon node */\n iconLeft?: React.ReactNode;\n}\n\nexport interface CardEquipProps {\n /** Equipment name */\n name: string;\n /** Image URL displayed on the left */\n image?: string;\n /** Show a Package icon placeholder when no image URL is provided */\n showImagePlaceholder?: boolean;\n /** Tags displayed as pills in the bottom row — supports label-only strings or full CardEquipTag objects */\n tags?: (string | CardEquipTag)[];\n /** Equipment model */\n model?: string;\n /** Equipment brand */\n brand?: string;\n /** Postal address — shown when brand and model are both absent */\n address?: string;\n /** Associated beacon/gateway/tracker — MAC address(es) shown as a green badge top-right */\n association?: string | string[];\n /** Badge displayed to the right of the tags row (e.g. annex document count) */\n badge?: {\n /** Badge label */\n label: string;\n /** Icon element displayed alongside the label */\n icon: React.ReactNode;\n };\n /** Selected state — thicker dark border */\n selected?: boolean;\n /** Selectable mode — shows a checkbox overlay */\n selectable?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Disabled state */\n disabled?: boolean;\n /** Card width — number (px), string ('100%') or undefined (auto) */\n width?: number | string;\n /** Additional container styles */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n /** Accessibility label for screen readers — only relevant when onPress is provided */\n accessibilityLabel?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst toArray = (value?: string | string[]): string[] => {\n if (!value) return [];\n return Array.isArray(value) ? value : [value];\n};\n\n/** Build rgba string from a 6-digit hex color */\nconst hexToRgba = (hex: string, alpha: number): string => {\n const r = parseInt(hex.slice(1, 3), 16);\n const g = parseInt(hex.slice(3, 5), 16);\n const b = parseInt(hex.slice(5, 7), 16);\n return `rgba(${r},${g},${b},${alpha})`;\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CardEquip({\n name,\n image,\n showImagePlaceholder,\n tags,\n model,\n brand,\n address,\n association,\n badge,\n selected = false,\n selectable = false,\n onPress,\n disabled = false,\n width,\n style,\n testID,\n accessibilityLabel,\n}: CardEquipProps) {\n const { colors, fontFamily } = useTheme();\n const associations = toArray(association);\n const hasBrandModel = !!(brand || model);\n const hasTags = !!(tags && tags.length > 0);\n const showImage = !!(image || showImagePlaceholder);\n\n // Selected state overrides border\n const selectedOverride: ViewStyle | null = selected\n ? { borderWidth: 2, borderColor: colors.text.primary }\n : null;\n\n return (\n <Card\n onPress={onPress}\n disabled={disabled}\n testID={testID}\n width={width}\n style={[styles.cardOverride, selectedOverride, style]}\n accessibilityLabel={accessibilityLabel ?? name}\n >\n {/* ── Left: image slot ── */}\n {showImage && (\n <View style={[styles.imageContainer, { backgroundColor: colors.background.tertiary }]}>\n {image ? (\n <Image source={{ uri: image }} style={styles.image} resizeMode=\"cover\" />\n ) : (\n <View style={[styles.imagePlaceholder, { backgroundColor: colors.background.tertiary }]}>\n <View style={styles.packageIconWrapper}>\n <Package size={40} color={colors.text.secondary} weight=\"duotone\" />\n </View>\n </View>\n )}\n </View>\n )}\n\n {/* ── Right: content column ── */}\n <View style={styles.content}>\n\n {/* Name + beacon tag */}\n <View style={styles.nameRow}>\n <Text\n style={[styles.name, { color: colors.text.primary, fontFamily }]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {name}\n </Text>\n\n {associations.length > 0 && (\n <View style={styles.beaconContainer}>\n {associations.map((mac, i) => (\n <AssociationTag\n key={i}\n text={mac}\n iconLeft={<Broadcast size={12} weight=\"duotone\" />}\n />\n ))}\n </View>\n )}\n </View>\n\n {/* Second line: brand · model OR address */}\n {hasBrandModel && (\n <View style={styles.infoRow}>\n {brand && (\n <Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{brand}</Text>\n )}\n {brand && model && (\n <View style={[styles.dot, { backgroundColor: colors.text.primary }]} />\n )}\n {model && (\n <Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{model}</Text>\n )}\n </View>\n )}\n {!hasBrandModel && address && (\n <Text style={[styles.infoText, { color: colors.text.primary, fontFamily }]}>{address}</Text>\n )}\n\n {/* Tags row + doc badge */}\n {(hasTags || badge) && (\n <View style={styles.tagsRow}>\n {hasTags && (\n <View style={styles.tagsContainer}>\n {tags!.map((tag, i) => {\n const t = typeof tag === 'string' ? { label: tag } : tag;\n return (\n <Tag\n key={i}\n label={t.label}\n size=\"xs\"\n shape=\"pill\"\n color={t.color}\n textColor={t.textColor}\n iconLeft={t.iconLeft}\n />\n );\n })}\n {/* Fade overlay — gradient mask from transparent to card bg */}\n <LinearGradient\n colors={[hexToRgba(colors.background.primary, 0), hexToRgba(colors.background.primary, 0.8)]}\n start={{ x: 0, y: 0 }}\n end={{ x: 1, y: 0 }}\n style={styles.tagsFade}\n pointerEvents=\"none\"\n />\n </View>\n )}\n\n {hasTags && badge && (\n <View style={[styles.tagBadgeSeparator, { backgroundColor: colors.border.default }]} />\n )}\n\n {badge && (\n <View style={[styles.docBadge, {\n borderColor: colors.border.window,\n backgroundColor: colors.background.primary,\n shadowColor: colors.shadow.minimal,\n }]}>\n <Text style={[styles.docBadgeLabel, { color: colors.text.primary, fontFamily }]}>\n {badge.label}\n </Text>\n {badge.icon}\n </View>\n )}\n </View>\n )}\n </View>\n\n {/* ── Checkbox overlay (selectable mode) ── */}\n {selectable && (\n <Checkbox\n checked={selected}\n onPress={onPress ?? (() => {})}\n disabled={disabled}\n size=\"m\"\n style={styles.checkboxOverlay}\n />\n )}\n </Card>\n );\n}\n"]}
@@ -0,0 +1,125 @@
1
+ export declare const styles: {
2
+ cardOverride: {
3
+ flexDirection: "row";
4
+ alignItems: "flex-start";
5
+ padding: number;
6
+ gap: number;
7
+ };
8
+ imageContainer: {
9
+ width: number;
10
+ height: number;
11
+ borderRadius: number;
12
+ overflow: "hidden";
13
+ flexShrink: number;
14
+ alignSelf: "stretch";
15
+ };
16
+ image: {
17
+ width: "100%";
18
+ height: "100%";
19
+ };
20
+ imagePlaceholder: {
21
+ width: number;
22
+ height: number;
23
+ borderRadius: number;
24
+ alignItems: "center";
25
+ justifyContent: "center";
26
+ };
27
+ packageIconWrapper: {
28
+ opacity: number;
29
+ };
30
+ content: {
31
+ flex: number;
32
+ gap: number;
33
+ minWidth: number;
34
+ };
35
+ nameRow: {
36
+ flexDirection: "row";
37
+ alignItems: "flex-start";
38
+ gap: number;
39
+ };
40
+ name: {
41
+ flex: number;
42
+ fontSize: number;
43
+ fontWeight: "700";
44
+ fontFamily: string;
45
+ lineHeight: number;
46
+ minWidth: number;
47
+ };
48
+ beaconContainer: {
49
+ flexShrink: number;
50
+ width: number;
51
+ gap: number;
52
+ };
53
+ infoRow: {
54
+ flexDirection: "row";
55
+ alignItems: "center";
56
+ gap: number;
57
+ flexWrap: "wrap";
58
+ };
59
+ infoText: {
60
+ fontSize: number;
61
+ fontWeight: "500";
62
+ fontFamily: string;
63
+ lineHeight: number;
64
+ };
65
+ dot: {
66
+ width: number;
67
+ height: number;
68
+ borderRadius: number;
69
+ flexShrink: number;
70
+ };
71
+ tagsRow: {
72
+ flexDirection: "row";
73
+ alignItems: "center";
74
+ gap: number;
75
+ };
76
+ tagsContainer: {
77
+ flex: number;
78
+ flexDirection: "row";
79
+ gap: number;
80
+ overflow: "hidden";
81
+ alignItems: "center";
82
+ };
83
+ tagsFade: {
84
+ position: "absolute";
85
+ top: number;
86
+ bottom: number;
87
+ right: number;
88
+ width: number;
89
+ flexDirection: "row";
90
+ };
91
+ tagBadgeSeparator: {
92
+ width: number;
93
+ alignSelf: "stretch";
94
+ };
95
+ docBadge: {
96
+ flexShrink: number;
97
+ flexDirection: "row";
98
+ alignItems: "center";
99
+ alignSelf: "stretch";
100
+ gap: number;
101
+ paddingHorizontal: number;
102
+ borderRadius: number;
103
+ borderWidth: number;
104
+ shadowOffset: {
105
+ width: number;
106
+ height: number;
107
+ };
108
+ shadowOpacity: number;
109
+ shadowRadius: number;
110
+ elevation: number;
111
+ };
112
+ docBadgeLabel: {
113
+ fontSize: number;
114
+ fontWeight: "600";
115
+ fontFamily: string;
116
+ lineHeight: number;
117
+ };
118
+ checkboxOverlay: {
119
+ position: "absolute";
120
+ top: number;
121
+ bottom: number;
122
+ right: number;
123
+ };
124
+ };
125
+ //# sourceMappingURL=CardEquip.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardEquip.styles.d.ts","sourceRoot":"","sources":["../../../src/components/CardEquip/CardEquip.styles.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8IjB,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Static styles for the CardEquip component.
3
+ * Dynamic (theme-dependent) colors are applied inline in CardEquip.tsx.
4
+ */
5
+ import { StyleSheet } from 'react-native';
6
+ export const styles = StyleSheet.create({
7
+ // Overrides for the base Card container
8
+ cardOverride: {
9
+ flexDirection: 'row',
10
+ alignItems: 'flex-start',
11
+ padding: 10,
12
+ gap: 10,
13
+ },
14
+ // Image slot
15
+ imageContainer: {
16
+ width: 64,
17
+ height: 64,
18
+ borderRadius: 6,
19
+ overflow: 'hidden',
20
+ flexShrink: 0,
21
+ alignSelf: 'stretch',
22
+ },
23
+ image: {
24
+ width: '100%',
25
+ height: '100%',
26
+ },
27
+ imagePlaceholder: {
28
+ width: 64,
29
+ height: 64,
30
+ borderRadius: 6,
31
+ alignItems: 'center',
32
+ justifyContent: 'center',
33
+ },
34
+ packageIconWrapper: {
35
+ opacity: 0.6,
36
+ },
37
+ // Content column
38
+ content: {
39
+ flex: 1,
40
+ gap: 4,
41
+ minWidth: 0,
42
+ },
43
+ // Name row
44
+ nameRow: {
45
+ flexDirection: 'row',
46
+ alignItems: 'flex-start',
47
+ gap: 10,
48
+ },
49
+ name: {
50
+ flex: 1,
51
+ fontSize: 14,
52
+ fontWeight: '700',
53
+ fontFamily: 'Urbanist',
54
+ lineHeight: 20,
55
+ minWidth: 0,
56
+ },
57
+ // Association tags column (top-right)
58
+ beaconContainer: {
59
+ flexShrink: 0,
60
+ width: 100,
61
+ gap: 2,
62
+ },
63
+ // Info line: brand · model OR address
64
+ infoRow: {
65
+ flexDirection: 'row',
66
+ alignItems: 'center',
67
+ gap: 6,
68
+ flexWrap: 'wrap',
69
+ },
70
+ infoText: {
71
+ fontSize: 12,
72
+ fontWeight: '500',
73
+ fontFamily: 'Urbanist',
74
+ lineHeight: 16,
75
+ },
76
+ dot: {
77
+ width: 3,
78
+ height: 3,
79
+ borderRadius: 9999,
80
+ flexShrink: 0,
81
+ },
82
+ // Tags row
83
+ tagsRow: {
84
+ flexDirection: 'row',
85
+ alignItems: 'center',
86
+ gap: 6,
87
+ },
88
+ tagsContainer: {
89
+ flex: 1,
90
+ flexDirection: 'row',
91
+ gap: 4,
92
+ overflow: 'hidden',
93
+ alignItems: 'center',
94
+ },
95
+ // Gradient fade overlay — right edge of tags container
96
+ tagsFade: {
97
+ position: 'absolute',
98
+ top: 0,
99
+ bottom: 0,
100
+ right: 0,
101
+ width: 20,
102
+ flexDirection: 'row',
103
+ },
104
+ // Separator between tags and badge
105
+ tagBadgeSeparator: {
106
+ width: 1,
107
+ alignSelf: 'stretch',
108
+ },
109
+ // Doc / annex badge (bottom-right)
110
+ docBadge: {
111
+ flexShrink: 0,
112
+ flexDirection: 'row',
113
+ alignItems: 'center',
114
+ alignSelf: 'stretch',
115
+ gap: 4,
116
+ paddingHorizontal: 8,
117
+ borderRadius: 4,
118
+ borderWidth: 1,
119
+ // iOS shadow — Below/Minimal: 0 4px 5px 0
120
+ shadowOffset: { width: 0, height: 4 },
121
+ shadowOpacity: 1,
122
+ shadowRadius: 5,
123
+ elevation: 1,
124
+ },
125
+ docBadgeLabel: {
126
+ fontSize: 12,
127
+ fontWeight: '600',
128
+ fontFamily: 'Urbanist',
129
+ lineHeight: 16,
130
+ },
131
+ // Checkbox overlay (selectable mode) — vertically centered, respects card padding
132
+ checkboxOverlay: {
133
+ position: 'absolute',
134
+ top: 0,
135
+ bottom: 0,
136
+ right: 10,
137
+ },
138
+ });
139
+ //# sourceMappingURL=CardEquip.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardEquip.styles.js","sourceRoot":"","sources":["../../../src/components/CardEquip/CardEquip.styles.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,wCAAwC;IACxC,YAAY,EAAE;QACZ,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,YAAY;QACxB,OAAO,EAAE,EAAE;QACX,GAAG,EAAE,EAAE;KACR;IAED,aAAa;IACb,cAAc,EAAE;QACd,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,CAAC;QACb,SAAS,EAAE,SAAS;KACrB;IACD,KAAK,EAAE;QACL,KAAK,EAAE,MAAM;QACb,MAAM,EAAE,MAAM;KACf;IACD,gBAAgB,EAAE;QAChB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,CAAC;QACf,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,kBAAkB,EAAE;QAClB,OAAO,EAAE,GAAG;KACb;IAED,iBAAiB;IACjB,OAAO,EAAE;QACP,IAAI,EAAE,CAAC;QACP,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,CAAC;KACZ;IAED,WAAW;IACX,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,YAAY;QACxB,GAAG,EAAE,EAAE;KACR;IACD,IAAI,EAAE;QACJ,IAAI,EAAE,CAAC;QACP,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,EAAE;QACd,QAAQ,EAAE,CAAC;KACZ;IAED,sCAAsC;IACtC,eAAe,EAAE;QACf,UAAU,EAAE,CAAC;QACb,KAAK,EAAE,GAAG;QACV,GAAG,EAAE,CAAC;KACP;IAED,wCAAwC;IACxC,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,MAAM;KACjB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,EAAE;KACf;IACD,GAAG,EAAE;QACH,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,CAAC;KACd;IAED,WAAW;IACX,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;KACP;IACD,aAAa,EAAE;QACb,IAAI,EAAE,CAAC;QACP,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,CAAC;QACN,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,QAAQ;KACrB;IAED,uDAAuD;IACvD,QAAQ,EAAE;QACR,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,EAAE;QACT,aAAa,EAAE,KAAK;KACrB;IAED,mCAAmC;IACnC,iBAAiB,EAAE;QACjB,KAAK,EAAE,CAAC;QACR,SAAS,EAAE,SAAS;KACrB;IAED,mCAAmC;IACnC,QAAQ,EAAE;QACR,UAAU,EAAE,CAAC;QACb,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,SAAS;QACpB,GAAG,EAAE,CAAC;QACN,iBAAiB,EAAE,CAAC;QACpB,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;QACd,0CAA0C;QAC1C,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACrC,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,CAAC;QACf,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE;QACb,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,EAAE;KACf;IAED,kFAAkF;IAClF,eAAe,EAAE;QACf,QAAQ,EAAE,UAAU;QACpB,GAAG,EAAE,CAAC;QACN,MAAM,EAAE,CAAC;QACT,KAAK,EAAE,EAAE;KACV;CACF,CAAC,CAAC","sourcesContent":["/**\n * Static styles for the CardEquip component.\n * Dynamic (theme-dependent) colors are applied inline in CardEquip.tsx.\n */\nimport { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n // Overrides for the base Card container\n cardOverride: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n padding: 10,\n gap: 10,\n },\n\n // Image slot\n imageContainer: {\n width: 64,\n height: 64,\n borderRadius: 6,\n overflow: 'hidden',\n flexShrink: 0,\n alignSelf: 'stretch',\n },\n image: {\n width: '100%',\n height: '100%',\n },\n imagePlaceholder: {\n width: 64,\n height: 64,\n borderRadius: 6,\n alignItems: 'center',\n justifyContent: 'center',\n },\n packageIconWrapper: {\n opacity: 0.6,\n },\n\n // Content column\n content: {\n flex: 1,\n gap: 4,\n minWidth: 0,\n },\n\n // Name row\n nameRow: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: 10,\n },\n name: {\n flex: 1,\n fontSize: 14,\n fontWeight: '700',\n fontFamily: 'Urbanist',\n lineHeight: 20,\n minWidth: 0,\n },\n\n // Association tags column (top-right)\n beaconContainer: {\n flexShrink: 0,\n width: 100,\n gap: 2,\n },\n\n // Info line: brand · model OR address\n infoRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n flexWrap: 'wrap',\n },\n infoText: {\n fontSize: 12,\n fontWeight: '500',\n fontFamily: 'Urbanist',\n lineHeight: 16,\n },\n dot: {\n width: 3,\n height: 3,\n borderRadius: 9999,\n flexShrink: 0,\n },\n\n // Tags row\n tagsRow: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n tagsContainer: {\n flex: 1,\n flexDirection: 'row',\n gap: 4,\n overflow: 'hidden',\n alignItems: 'center',\n },\n\n // Gradient fade overlay — right edge of tags container\n tagsFade: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 0,\n width: 20,\n flexDirection: 'row',\n },\n\n // Separator between tags and badge\n tagBadgeSeparator: {\n width: 1,\n alignSelf: 'stretch',\n },\n\n // Doc / annex badge (bottom-right)\n docBadge: {\n flexShrink: 0,\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'stretch',\n gap: 4,\n paddingHorizontal: 8,\n borderRadius: 4,\n borderWidth: 1,\n // iOS shadow — Below/Minimal: 0 4px 5px 0\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 5,\n elevation: 1,\n },\n docBadgeLabel: {\n fontSize: 12,\n fontWeight: '600',\n fontFamily: 'Urbanist',\n lineHeight: 16,\n },\n\n // Checkbox overlay (selectable mode) — vertically centered, respects card padding\n checkboxOverlay: {\n position: 'absolute',\n top: 0,\n bottom: 0,\n right: 10,\n },\n});\n"]}
@@ -0,0 +1,3 @@
1
+ export { CardEquip } from './CardEquip';
2
+ export type { CardEquipProps, CardEquipTag } from './CardEquip';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/CardEquip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { CardEquip } from './CardEquip';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/CardEquip/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC","sourcesContent":["export { CardEquip } from './CardEquip';\nexport type { CardEquipProps, CardEquipTag } from './CardEquip';\n"]}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * CardProfile — stacked card combining a CardEquip (top) and a location pocket (bottom).
3
+ * The pocket shows a location button (address / vehicle / pin / no-data) and an optional map action button.
4
+ * The top card overlaps the pocket by 30px to create the layered visual effect.
5
+ */
6
+ import React from 'react';
7
+ import type { StyleProp, ViewStyle } from 'react-native';
8
+ import type { CardEquipProps, CardEquipTag } from '../CardEquip';
9
+ /** Determines the icon shown in the location button and whether the map action is available */
10
+ export type CardProfileLocationType = 'address' | 'car' | 'pin' | 'no-data';
11
+ export interface CardProfileProps {
12
+ /** Equipment name */
13
+ name: string;
14
+ /** Tags displayed as pills */
15
+ tags?: (string | CardEquipTag)[];
16
+ /** Equipment model */
17
+ model?: string;
18
+ /** Equipment brand */
19
+ brand?: string;
20
+ /** Postal address — shown on the info line when brand and model are absent */
21
+ address?: string;
22
+ /** Associated beacon/gateway/tracker — MAC address(es) */
23
+ association?: string | string[];
24
+ /** Badge to the right of the tags row */
25
+ badge?: CardEquipProps['badge'];
26
+ /** Selected state — thicker dark border on the top card */
27
+ selected?: boolean;
28
+ /** Selectable mode — shows a checkbox overlay on the top card */
29
+ selectable?: boolean;
30
+ /** Press handler forwarded to the top card */
31
+ onPress?: () => void;
32
+ /** Disabled state — applies to both cards */
33
+ disabled?: boolean;
34
+ /** Show the Package icon placeholder when no image URL is provided */
35
+ showImagePlaceholder?: boolean;
36
+ /** Icon variant for the location button — drives the left icon */
37
+ locationType?: CardProfileLocationType;
38
+ /** Text displayed in the location button */
39
+ locationLabel?: string;
40
+ /** Press handler for the location button */
41
+ onLocationPress?: () => void;
42
+ /**
43
+ * Press handler for the dark map action button.
44
+ * When provided, the button is shown. Automatically hidden for 'no-data'.
45
+ */
46
+ onMapPress?: () => void;
47
+ /** Card width — number (px), string ('100%') or undefined (auto) */
48
+ width?: number | string;
49
+ /** Additional styles on the outer container */
50
+ style?: StyleProp<ViewStyle>;
51
+ /** Test ID for automated testing */
52
+ testID?: string;
53
+ }
54
+ export declare function CardProfile({ name, tags, model, brand, address, association, badge, selected, selectable, onPress, disabled, showImagePlaceholder, locationType, locationLabel, onLocationPress, onMapPress, width, style, testID, }: CardProfileProps): React.JSX.Element;
55
+ //# sourceMappingURL=CardProfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardProfile.d.ts","sourceRoot":"","sources":["../../../src/components/CardProfile/CardProfile.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAIzD,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAOjE,+FAA+F;AAC/F,MAAM,MAAM,uBAAuB,GAAG,SAAS,GAAG,KAAK,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5E,MAAM,WAAW,gBAAgB;IAG/B,qBAAqB;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,YAAY,CAAC,EAAE,CAAC;IACjC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8EAA8E;IAC9E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAChC,yCAAyC;IACzC,KAAK,CAAC,EAAE,cAAc,CAAC,OAAO,CAAC,CAAC;IAChC,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,iEAAiE;IACjE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,8CAA8C;IAC9C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,sEAAsE;IACtE,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAI/B,kEAAkE;IAClE,YAAY,CAAC,EAAE,uBAAuB,CAAC;IACvC,4CAA4C;IAC5C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B;;;OAGG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAC;IAIxB,oEAAoE;IACpE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,+CAA+C;IAC/C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAiBD,wBAAgB,WAAW,CAAC,EAC1B,IAAI,EACJ,IAAI,EACJ,KAAK,EACL,KAAK,EACL,OAAO,EACP,WAAW,EACX,KAAK,EACL,QAAgB,EAChB,UAAkB,EAClB,OAAO,EACP,QAAgB,EAChB,oBAAoB,EACpB,YAAwB,EACxB,aAAa,EACb,eAAe,EACf,UAAU,EACV,KAAK,EACL,KAAK,EACL,MAAM,GACP,EAAE,gBAAgB,qBA6FlB"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * CardProfile — stacked card combining a CardEquip (top) and a location pocket (bottom).
3
+ * The pocket shows a location button (address / vehicle / pin / no-data) and an optional map action button.
4
+ * The top card overlaps the pocket by 30px to create the layered visual effect.
5
+ */
6
+ import React from 'react';
7
+ import { Pressable, Text, View } from 'react-native';
8
+ import { Car, House, MapPin, MapTrifold, WifiSlash } from 'phosphor-react-native';
9
+ import { useTheme } from '../../context/ThemeContext';
10
+ import { CardEquip } from '../CardEquip';
11
+ import { styles } from './CardProfile.styles';
12
+ // ---------------------------------------------------------------------------
13
+ // Helpers
14
+ // ---------------------------------------------------------------------------
15
+ const LOCATION_ICON = {
16
+ address: (color) => <House size={16} color={color} weight="duotone"/>,
17
+ car: (color) => <Car size={16} color={color} weight="duotone"/>,
18
+ pin: (color) => <MapPin size={16} color={color} weight="duotone"/>,
19
+ 'no-data': (color) => <WifiSlash size={16} color={color} weight="duotone"/>,
20
+ };
21
+ // ---------------------------------------------------------------------------
22
+ // Component
23
+ // ---------------------------------------------------------------------------
24
+ export function CardProfile({ name, tags, model, brand, address, association, badge, selected = false, selectable = false, onPress, disabled = false, showImagePlaceholder, locationType = 'address', locationLabel, onLocationPress, onMapPress, width, style, testID, }) {
25
+ const { colors, fontFamily } = useTheme();
26
+ const showMapButton = !!onMapPress && locationType !== 'no-data';
27
+ const renderIcon = LOCATION_ICON[locationType];
28
+ const containerStyle = [
29
+ styles.container,
30
+ ...(width !== undefined ? [{ width }] : []),
31
+ ...(style ? [style] : []),
32
+ ];
33
+ return (<View style={containerStyle} testID={testID}>
34
+ {/* ── Top: CardEquip (z-index 2) ── */}
35
+ <CardEquip name={name} tags={tags} model={model} brand={brand} address={address} association={association} badge={badge} selected={selected} selectable={selectable} showImagePlaceholder={showImagePlaceholder} onPress={onPress} disabled={disabled} width="100%" style={[styles.topCard, { shadowColor: colors.shadow.minimal }]}/>
36
+
37
+ {/* ── Bottom: pocket card (z-index 1) ── */}
38
+ <View style={[
39
+ styles.pocket,
40
+ {
41
+ borderColor: colors.border.window,
42
+ backgroundColor: colors.background.secondary,
43
+ shadowColor: colors.shadow.minimal,
44
+ },
45
+ ]}>
46
+ {/* Location button */}
47
+ <Pressable onPress={onLocationPress} disabled={!onLocationPress || disabled} style={[
48
+ styles.locationButton,
49
+ {
50
+ backgroundColor: colors.background.primary,
51
+ borderColor: colors.border.window,
52
+ opacity: (!onLocationPress || disabled) ? 0.5 : 1,
53
+ },
54
+ ]} accessibilityRole="button" accessibilityLabel={locationLabel ?? 'Localisation'} accessibilityState={{ disabled: !onLocationPress || disabled }}>
55
+ {renderIcon(colors.text.primary)}
56
+ {locationLabel ? (<Text style={[styles.locationButtonText, { color: colors.text.primary, fontFamily }]} numberOfLines={1} ellipsizeMode="tail">
57
+ {locationLabel}
58
+ </Text>) : null}
59
+ </Pressable>
60
+
61
+ {/* Map action button */}
62
+ {showMapButton && (<Pressable onPress={onMapPress} disabled={disabled} style={[
63
+ styles.mapButton,
64
+ {
65
+ backgroundColor: colors.text.primary,
66
+ opacity: disabled ? 0.5 : 1,
67
+ },
68
+ ]} accessibilityRole="button" accessibilityLabel="Ouvrir la carte" accessibilityState={{ disabled }}>
69
+ <MapTrifold size={16} color={colors.text.onColor} weight="duotone"/>
70
+ </Pressable>)}
71
+ </View>
72
+ </View>);
73
+ }
74
+ //# sourceMappingURL=CardProfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CardProfile.js","sourceRoot":"","sources":["../../../src/components/CardProfile/CardProfile.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * CardProfile — stacked card combining a CardEquip (top) and a location pocket (bottom).\n * The pocket shows a location button (address / vehicle / pin / no-data) and an optional map action button.\n * The top card overlaps the pocket by 30px to create the layered visual effect.\n */\nimport React from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Car, House, MapPin, MapTrifold, WifiSlash } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { CardEquip } from '../CardEquip';\nimport type { CardEquipProps, CardEquipTag } from '../CardEquip';\nimport { styles } from './CardProfile.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\n/** Determines the icon shown in the location button and whether the map action is available */\nexport type CardProfileLocationType = 'address' | 'car' | 'pin' | 'no-data';\n\nexport interface CardProfileProps {\n // ── Forwarded to the top CardEquip ──\n\n /** Equipment name */\n name: string;\n /** Tags displayed as pills */\n tags?: (string | CardEquipTag)[];\n /** Equipment model */\n model?: string;\n /** Equipment brand */\n brand?: string;\n /** Postal address — shown on the info line when brand and model are absent */\n address?: string;\n /** Associated beacon/gateway/tracker — MAC address(es) */\n association?: string | string[];\n /** Badge to the right of the tags row */\n badge?: CardEquipProps['badge'];\n /** Selected state — thicker dark border on the top card */\n selected?: boolean;\n /** Selectable mode — shows a checkbox overlay on the top card */\n selectable?: boolean;\n /** Press handler forwarded to the top card */\n onPress?: () => void;\n /** Disabled state — applies to both cards */\n disabled?: boolean;\n /** Show the Package icon placeholder when no image URL is provided */\n showImagePlaceholder?: boolean;\n\n // ── Bottom pocket ──\n\n /** Icon variant for the location button — drives the left icon */\n locationType?: CardProfileLocationType;\n /** Text displayed in the location button */\n locationLabel?: string;\n /** Press handler for the location button */\n onLocationPress?: () => void;\n /**\n * Press handler for the dark map action button.\n * When provided, the button is shown. Automatically hidden for 'no-data'.\n */\n onMapPress?: () => void;\n\n // ── Container ──\n\n /** Card width — number (px), string ('100%') or undefined (auto) */\n width?: number | string;\n /** Additional styles on the outer container */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst LOCATION_ICON: Record<CardProfileLocationType, (color: string) => React.ReactNode> = {\n address: (color) => <House size={16} color={color} weight=\"duotone\" />,\n car: (color) => <Car size={16} color={color} weight=\"duotone\" />,\n pin: (color) => <MapPin size={16} color={color} weight=\"duotone\" />,\n 'no-data': (color) => <WifiSlash size={16} color={color} weight=\"duotone\" />,\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function CardProfile({\n name,\n tags,\n model,\n brand,\n address,\n association,\n badge,\n selected = false,\n selectable = false,\n onPress,\n disabled = false,\n showImagePlaceholder,\n locationType = 'address',\n locationLabel,\n onLocationPress,\n onMapPress,\n width,\n style,\n testID,\n}: CardProfileProps) {\n const { colors, fontFamily } = useTheme();\n\n const showMapButton = !!onMapPress && locationType !== 'no-data';\n const renderIcon = LOCATION_ICON[locationType];\n\n const containerStyle: ViewStyle[] = [\n styles.container,\n ...(width !== undefined ? [{ width } as ViewStyle] : []),\n ...(style ? [style as ViewStyle] : []),\n ];\n\n return (\n <View style={containerStyle} testID={testID}>\n {/* ── Top: CardEquip (z-index 2) ── */}\n <CardEquip\n name={name}\n tags={tags}\n model={model}\n brand={brand}\n address={address}\n association={association}\n badge={badge}\n selected={selected}\n selectable={selectable}\n showImagePlaceholder={showImagePlaceholder}\n onPress={onPress}\n disabled={disabled}\n width=\"100%\"\n style={[styles.topCard, { shadowColor: colors.shadow.minimal }]}\n />\n\n {/* ── Bottom: pocket card (z-index 1) ── */}\n <View\n style={[\n styles.pocket,\n {\n borderColor: colors.border.window,\n backgroundColor: colors.background.secondary,\n shadowColor: colors.shadow.minimal,\n },\n ]}\n >\n {/* Location button */}\n <Pressable\n onPress={onLocationPress}\n disabled={!onLocationPress || disabled}\n style={[\n styles.locationButton,\n {\n backgroundColor: colors.background.primary,\n borderColor: colors.border.window,\n opacity: (!onLocationPress || disabled) ? 0.5 : 1,\n },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel={locationLabel ?? 'Localisation'}\n accessibilityState={{ disabled: !onLocationPress || disabled }}\n >\n {renderIcon(colors.text.primary)}\n {locationLabel ? (\n <Text\n style={[styles.locationButtonText, { color: colors.text.primary, fontFamily }]}\n numberOfLines={1}\n ellipsizeMode=\"tail\"\n >\n {locationLabel}\n </Text>\n ) : null}\n </Pressable>\n\n {/* Map action button */}\n {showMapButton && (\n <Pressable\n onPress={onMapPress}\n disabled={disabled}\n style={[\n styles.mapButton,\n {\n backgroundColor: colors.text.primary,\n opacity: disabled ? 0.5 : 1,\n },\n ]}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Ouvrir la carte\"\n accessibilityState={{ disabled }}\n >\n <MapTrifold size={16} color={colors.text.onColor} weight=\"duotone\" />\n </Pressable>\n )}\n </View>\n </View>\n );\n}\n"]}