@situaction/traquiste-mobile 1.0.0 → 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 +5 -1
  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 +5 -1
  447. package/build/context/ThemeContext.d.ts.map +1 -1
  448. package/build/context/ThemeContext.js +4 -2
  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 @@
1
+ {"version":3,"file":"ListItem.styles.js","sourceRoot":"","sources":["../../../src/components/ListItem/ListItem.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,6BAA6B;IAC7B,OAAO,EAAE;QACP,YAAY,EAAE,CAAC;KAChB;IAED,gCAAgC;IAChC,GAAG,EAAE;QACH,aAAa,EAAM,KAAK;QACxB,UAAU,EAAS,QAAQ;QAC3B,SAAS,EAAU,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAI,EAAE;QACrB,GAAG,EAAgB,EAAE;KACtB;IACD,SAAS,EAAE;QACT,IAAI,EAAE,CAAC;QACP,GAAG,EAAG,CAAC;KACR;IACD,UAAU,EAAE;QACV,SAAS,EAAE,QAAQ;KACpB;IACD,cAAc,EAAE;QACd,IAAI,EAAE,CAAC;KACR;IACD,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAI,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAI,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,QAAQ,EAAE;QACR,UAAU,EAAE,UAAU;QACtB,QAAQ,EAAI,EAAE;QACd,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IACD,IAAI,EAAE;QACJ,UAAU,EAAM,QAAQ;QACxB,cAAc,EAAE,QAAQ;KACzB;IACD,YAAY,EAAE;QACZ,OAAO,EAAE,GAAG;KACb;IACD,OAAO,EAAE;QACP,MAAM,EAAY,UAAU,CAAC,aAAa;QAC1C,gBAAgB,EAAE,EAAE;KACrB;IAED,oBAAoB;IACpB,gBAAgB,EAAE;QAChB,SAAS,EAAU,EAAE;QACrB,iBAAiB,EAAE,EAAE;QACrB,eAAe,EAAI,CAAC;QACpB,cAAc,EAAK,QAAQ;KAC5B;IACD,YAAY,EAAE;QACZ,UAAU,EAAK,UAAU;QACzB,QAAQ,EAAO,EAAE;QACjB,UAAU,EAAK,KAAK;QACpB,UAAU,EAAK,EAAE;QACjB,aAAa,EAAE,GAAG;KACnB;CACF,CAAC,CAAC","sourcesContent":["import { StyleSheet } from 'react-native';\n\nexport const styles = StyleSheet.create({\n // -- Outer gap between items\n itemGap: {\n marginBottom: 4,\n },\n\n // -- Default row (inner layout)\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n minHeight: 48,\n paddingHorizontal: 12,\n paddingVertical: 12,\n gap: 12,\n },\n textStack: {\n flex: 1,\n gap: 2,\n },\n tagWrapper: {\n alignSelf: 'center',\n },\n tagWrapperFlex: {\n flex: 1,\n },\n labelLarge: {\n fontFamily: 'Urbanist',\n fontSize: 18,\n fontWeight: '600',\n lineHeight: 26,\n },\n labelSmall: {\n fontFamily: 'Urbanist',\n fontSize: 14,\n fontWeight: '600',\n lineHeight: 20,\n },\n sublabel: {\n fontFamily: 'Urbanist',\n fontSize: 12,\n fontWeight: '400',\n lineHeight: 16,\n },\n slot: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n disabledSlot: {\n opacity: 0.4,\n },\n divider: {\n height: StyleSheet.hairlineWidth,\n marginHorizontal: 12,\n },\n\n // -- Section header\n sectionContainer: {\n minHeight: 40,\n paddingHorizontal: 12,\n paddingVertical: 8,\n justifyContent: 'center',\n },\n sectionLabel: {\n fontFamily: 'Urbanist',\n fontSize: 12,\n fontWeight: '600',\n lineHeight: 16,\n letterSpacing: 0.8,\n },\n});"]}
@@ -0,0 +1,3 @@
1
+ export { ListItem } from './ListItem';
2
+ export type { ListItemProps } from './ListItem';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ListItem/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,YAAY,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { ListItem } from './ListItem';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/ListItem/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC","sourcesContent":["export { ListItem } from './ListItem';\nexport type { ListItemProps } from './ListItem';\n"]}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * MapPin — custom map marker for Google Maps / react-native-maps.
3
+ *
4
+ * Two layouts:
5
+ * - Simple (no count): circular icon badge + downward pointer tail (24×31px)
6
+ * - Pill (count provided): horizontal pill with icon(s) + count + tail
7
+ *
8
+ * Fully themeable via mapPin tokens. Icons are injected as props — the
9
+ * component clones them to override size and color based on the active state.
10
+ *
11
+ * Usage: render inside a react-native-maps <Marker> component.
12
+ */
13
+ import React from 'react';
14
+ import type { StyleProp, ViewStyle } from 'react-native';
15
+ export type MapPinState = 'default' | 'focus';
16
+ export type MapPinType = 'default' | 'lost';
17
+ /** Controls the label text style — 'map' for street view (dark text), 'satellite' for aerial view (white text + shadow) */
18
+ export type MapPinLabelVariant = 'map' | 'satellite';
19
+ /**
20
+ * Total rendered height of a MapPin in points (badge 24 + tail 9).
21
+ * Use this to anchor the pin tip to a coordinate:
22
+ * - react-native-maps: <Marker anchor={{ x: 0.5, y: 1 }}>
23
+ * - manual layout: top: targetY - MAP_PIN_HEIGHT, left: targetX - pinWidth / 2
24
+ */
25
+ export declare const MAP_PIN_HEIGHT = 33;
26
+ /** Width of a simple (non-pill) MapPin. Pill width is variable — measure at runtime. */
27
+ export declare const MAP_PIN_SIMPLE_WIDTH = 24;
28
+ export interface MapPinProps {
29
+ /** Primary icon (Phosphor). Size and color are injected automatically. */
30
+ icon: React.ReactElement;
31
+ /** Pin visual state — 'focus' inverts the badge colors */
32
+ state?: MapPinState;
33
+ /**
34
+ * Pin type — 'lost' uses red accent colors (maintenance / signal lost).
35
+ * Defaults to 'default'.
36
+ */
37
+ type?: MapPinType;
38
+ /**
39
+ * When provided, switches to pill mode and shows this number.
40
+ * Typically the count of clustered assets.
41
+ */
42
+ count?: number;
43
+ /** Second icon shown in pill mode (e.g. vehicle type). Optional. */
44
+ secondIcon?: React.ReactElement;
45
+ /** Optional text label displayed to the LEFT of the pin (right-aligned). */
46
+ labelLeft?: string;
47
+ /** Optional text label displayed to the RIGHT of the pin (left-aligned). */
48
+ label?: string;
49
+ /**
50
+ * Style variant for the label text (applies to both labelLeft and label).
51
+ * 'map' (default) = dark text for street map backgrounds.
52
+ * 'satellite' = white text + shadow for aerial/satellite map backgrounds.
53
+ */
54
+ labelVariant?: MapPinLabelVariant;
55
+ /** Additional style applied to the outermost container */
56
+ style?: StyleProp<ViewStyle>;
57
+ /** Test identifier for automated testing */
58
+ testID?: string;
59
+ }
60
+ export declare const MapPin: ({ icon, state, type, count, secondIcon, labelLeft, label, labelVariant, style, testID, }: MapPinProps) => React.JSX.Element;
61
+ //# sourceMappingURL=MapPin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapPin.d.ts","sourceRoot":"","sources":["../../../src/components/MapPin/MapPin.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AASzD,MAAM,MAAM,WAAW,GAAG,SAAS,GAAG,OAAO,CAAC;AAC9C,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAC5C,2HAA2H;AAC3H,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,WAAW,CAAC;AAErD;;;;;GAKG;AACH,eAAO,MAAM,cAAc,KAAK,CAAC;AACjC,wFAAwF;AACxF,eAAO,MAAM,oBAAoB,KAAK,CAAC;AAEvC,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,0DAA0D;IAC1D,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB;;;OAGG;IACH,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,UAAU,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAChC,4EAA4E;IAC5E,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4EAA4E;IAC5E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,YAAY,CAAC,EAAE,kBAAkB,CAAC;IAClC,0DAA0D;IAC1D,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoDD,eAAO,MAAM,MAAM,GAAI,0FAWpB,WAAW,sBA6Eb,CAAC"}
@@ -0,0 +1,118 @@
1
+ /**
2
+ * MapPin — custom map marker for Google Maps / react-native-maps.
3
+ *
4
+ * Two layouts:
5
+ * - Simple (no count): circular icon badge + downward pointer tail (24×31px)
6
+ * - Pill (count provided): horizontal pill with icon(s) + count + tail
7
+ *
8
+ * Fully themeable via mapPin tokens. Icons are injected as props — the
9
+ * component clones them to override size and color based on the active state.
10
+ *
11
+ * Usage: render inside a react-native-maps <Marker> component.
12
+ */
13
+ import React from 'react';
14
+ import { Text, View } from 'react-native';
15
+ import { useTheme } from '../../context/ThemeContext';
16
+ import { styles } from './MapPin.styles';
17
+ /**
18
+ * Total rendered height of a MapPin in points (badge 24 + tail 9).
19
+ * Use this to anchor the pin tip to a coordinate:
20
+ * - react-native-maps: <Marker anchor={{ x: 0.5, y: 1 }}>
21
+ * - manual layout: top: targetY - MAP_PIN_HEIGHT, left: targetX - pinWidth / 2
22
+ */
23
+ export const MAP_PIN_HEIGHT = 33;
24
+ /** Width of a simple (non-pill) MapPin. Pill width is variable — measure at runtime. */
25
+ export const MAP_PIN_SIMPLE_WIDTH = 24;
26
+ // ---------------------------------------------------------------------------
27
+ // Helpers
28
+ // ---------------------------------------------------------------------------
29
+ const ICON_SIZE = 12;
30
+ const cloneIcon = (el, color) => React.cloneElement(el, {
31
+ size: ICON_SIZE,
32
+ color,
33
+ weight: 'fill',
34
+ });
35
+ // ---------------------------------------------------------------------------
36
+ // Sub-components
37
+ // ---------------------------------------------------------------------------
38
+ /**
39
+ * Downward-pointing triangle tail with a border on all three sides.
40
+ *
41
+ * Three layers:
42
+ * 1. tailBorderTop — 1px × TAIL_WIDTH colored with borderColor → horizontal top edge
43
+ * 2. tailClip — overflow:hidden container (TAIL_WIDTH × TAIL_HEIGHT)
44
+ * 3. tailSquare — TAIL_SQUARE_SIZE square rotated 45°, centered at y=0 of the clip
45
+ * so overflow:hidden reveals only the bottom triangle.
46
+ *
47
+ * TAIL_SQUARE_SIZE = 8.5 = TAIL_WIDTH / √2: the diamond's widest point ≈ 12px = TAIL_WIDTH,
48
+ * so the diamond's left/right corners land flush at x=0 / x=12 at y=0, connecting
49
+ * seamlessly with the ends of the horizontal top-border line.
50
+ */
51
+ const Tail = ({ borderColor, backgroundColor }) => (<View style={styles.tailOuter}>
52
+ <View style={[styles.tailBorderTop, { backgroundColor: borderColor }]}/>
53
+ <View style={styles.tailClip}>
54
+ <View style={[styles.tailSquare, { backgroundColor, borderColor }]}/>
55
+ </View>
56
+ </View>);
57
+ /** Circular icon container */
58
+ const IconCircle = ({ children, color }) => (<View style={[styles.iconCircle, { backgroundColor: color }]}>
59
+ {children}
60
+ </View>);
61
+ // ---------------------------------------------------------------------------
62
+ // Component
63
+ // ---------------------------------------------------------------------------
64
+ export const MapPin = ({ icon, state = 'default', type = 'default', count, secondIcon, labelLeft, label, labelVariant = 'map', style, testID, }) => {
65
+ const { colors, fontFamily } = useTheme();
66
+ // Resolve the right token set from state + type
67
+ let tokens;
68
+ if (type === 'lost') {
69
+ tokens = state === 'focus' ? colors.mapPin.lostFocus : colors.mapPin.lostDefault;
70
+ }
71
+ else {
72
+ tokens = state === 'focus' ? colors.mapPin.focus : colors.mapPin.default;
73
+ }
74
+ const { background, simpleBackground, border, iconCircle, iconColor, countText } = tokens;
75
+ const isPill = count !== undefined;
76
+ const styledIcon = cloneIcon(icon, iconColor);
77
+ const styledSecondIcon = secondIcon ? cloneIcon(secondIcon, iconColor) : null;
78
+ const pinColumn = isPill ? (<View style={styles.pillRoot}>
79
+ <View style={[
80
+ styles.pillBadge,
81
+ { backgroundColor: background, borderColor: border },
82
+ state === 'focus' && { ...styles.pillShadow, shadowColor: colors.mapPin.pillShadowColor },
83
+ ]}>
84
+ <IconCircle color={iconCircle}>{styledIcon}</IconCircle>
85
+ {styledSecondIcon && (<IconCircle color={iconCircle}>{styledSecondIcon}</IconCircle>)}
86
+ <Text style={[styles.countText, { color: countText, fontFamily }]}>
87
+ {count}
88
+ </Text>
89
+ </View>
90
+ <Tail borderColor={border} backgroundColor={background}/>
91
+ </View>) : (<View style={styles.simpleRoot}>
92
+ <View style={[
93
+ styles.simpleBadge,
94
+ { backgroundColor: simpleBackground, borderColor: border },
95
+ ]}>
96
+ <IconCircle color={iconCircle}>{styledIcon}</IconCircle>
97
+ </View>
98
+ <Tail borderColor={border} backgroundColor={simpleBackground}/>
99
+ </View>);
100
+ if (label == null && labelLeft == null) {
101
+ return (<View style={style} testID={testID}>
102
+ {pinColumn}
103
+ </View>);
104
+ }
105
+ const isSatellite = labelVariant === 'satellite';
106
+ const labelColor = isSatellite ? colors.mapPin.label.satellite : colors.mapPin.label.map;
107
+ const labelStyle = [
108
+ styles.labelText,
109
+ isSatellite ? styles.labelTextSatellite : null,
110
+ { color: labelColor, fontFamily },
111
+ ];
112
+ return (<View style={[styles.row, style]} testID={testID}>
113
+ {labelLeft != null && (<Text style={[...labelStyle, styles.labelTextRight]}>{labelLeft}</Text>)}
114
+ {pinColumn}
115
+ {label != null && (<Text style={labelStyle}>{label}</Text>)}
116
+ </View>);
117
+ };
118
+ //# sourceMappingURL=MapPin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapPin.js","sourceRoot":"","sources":["../../../src/components/MapPin/MapPin.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * MapPin — custom map marker for Google Maps / react-native-maps.\n *\n * Two layouts:\n * - Simple (no count): circular icon badge + downward pointer tail (24×31px)\n * - Pill (count provided): horizontal pill with icon(s) + count + tail\n *\n * Fully themeable via mapPin tokens. Icons are injected as props — the\n * component clones them to override size and color based on the active state.\n *\n * Usage: render inside a react-native-maps <Marker> component.\n */\nimport React from 'react';\nimport { Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport type { MapPinStateTokens } from '../../theme/type';\nimport { styles } from './MapPin.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type MapPinState = 'default' | 'focus';\nexport type MapPinType = 'default' | 'lost';\n/** Controls the label text style — 'map' for street view (dark text), 'satellite' for aerial view (white text + shadow) */\nexport type MapPinLabelVariant = 'map' | 'satellite';\n\n/**\n * Total rendered height of a MapPin in points (badge 24 + tail 9).\n * Use this to anchor the pin tip to a coordinate:\n * - react-native-maps: <Marker anchor={{ x: 0.5, y: 1 }}>\n * - manual layout: top: targetY - MAP_PIN_HEIGHT, left: targetX - pinWidth / 2\n */\nexport const MAP_PIN_HEIGHT = 33;\n/** Width of a simple (non-pill) MapPin. Pill width is variable — measure at runtime. */\nexport const MAP_PIN_SIMPLE_WIDTH = 24;\n\nexport interface MapPinProps {\n /** Primary icon (Phosphor). Size and color are injected automatically. */\n icon: React.ReactElement;\n /** Pin visual state — 'focus' inverts the badge colors */\n state?: MapPinState;\n /**\n * Pin type — 'lost' uses red accent colors (maintenance / signal lost).\n * Defaults to 'default'.\n */\n type?: MapPinType;\n /**\n * When provided, switches to pill mode and shows this number.\n * Typically the count of clustered assets.\n */\n count?: number;\n /** Second icon shown in pill mode (e.g. vehicle type). Optional. */\n secondIcon?: React.ReactElement;\n /** Optional text label displayed to the LEFT of the pin (right-aligned). */\n labelLeft?: string;\n /** Optional text label displayed to the RIGHT of the pin (left-aligned). */\n label?: string;\n /**\n * Style variant for the label text (applies to both labelLeft and label).\n * 'map' (default) = dark text for street map backgrounds.\n * 'satellite' = white text + shadow for aerial/satellite map backgrounds.\n */\n labelVariant?: MapPinLabelVariant;\n /** Additional style applied to the outermost container */\n style?: StyleProp<ViewStyle>;\n /** Test identifier for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nconst ICON_SIZE = 12;\n\nconst cloneIcon = (el: React.ReactElement, color: string) =>\n React.cloneElement(el as React.ReactElement<{ size?: number; color?: string; weight?: string }>, {\n size: ICON_SIZE,\n color,\n weight: 'fill',\n });\n\n// ---------------------------------------------------------------------------\n// Sub-components\n// ---------------------------------------------------------------------------\n\n/**\n * Downward-pointing triangle tail with a border on all three sides.\n *\n * Three layers:\n * 1. tailBorderTop — 1px × TAIL_WIDTH colored with borderColor → horizontal top edge\n * 2. tailClip — overflow:hidden container (TAIL_WIDTH × TAIL_HEIGHT)\n * 3. tailSquare — TAIL_SQUARE_SIZE square rotated 45°, centered at y=0 of the clip\n * so overflow:hidden reveals only the bottom triangle.\n *\n * TAIL_SQUARE_SIZE = 8.5 = TAIL_WIDTH / √2: the diamond's widest point ≈ 12px = TAIL_WIDTH,\n * so the diamond's left/right corners land flush at x=0 / x=12 at y=0, connecting\n * seamlessly with the ends of the horizontal top-border line.\n */\nconst Tail = ({ borderColor, backgroundColor }: { borderColor: string; backgroundColor: string }) => (\n <View style={styles.tailOuter}>\n <View style={[styles.tailBorderTop, { backgroundColor: borderColor }]} />\n <View style={styles.tailClip}>\n <View style={[styles.tailSquare, { backgroundColor, borderColor }]} />\n </View>\n </View>\n);\n\n/** Circular icon container */\nconst IconCircle = ({ children, color }: { children: React.ReactNode; color: string }) => (\n <View style={[styles.iconCircle, { backgroundColor: color }]}>\n {children}\n </View>\n);\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const MapPin = ({\n icon,\n state = 'default',\n type = 'default',\n count,\n secondIcon,\n labelLeft,\n label,\n labelVariant = 'map',\n style,\n testID,\n}: MapPinProps) => {\n const { colors, fontFamily } = useTheme();\n\n // Resolve the right token set from state + type\n let tokens: MapPinStateTokens;\n if (type === 'lost') {\n tokens = state === 'focus' ? colors.mapPin.lostFocus : colors.mapPin.lostDefault;\n } else {\n tokens = state === 'focus' ? colors.mapPin.focus : colors.mapPin.default;\n }\n\n const { background, simpleBackground, border, iconCircle, iconColor, countText } = tokens;\n const isPill = count !== undefined;\n\n const styledIcon = cloneIcon(icon, iconColor);\n const styledSecondIcon = secondIcon ? cloneIcon(secondIcon, iconColor) : null;\n\n const pinColumn = isPill ? (\n <View style={styles.pillRoot}>\n <View\n style={[\n styles.pillBadge,\n { backgroundColor: background, borderColor: border },\n state === 'focus' && { ...styles.pillShadow, shadowColor: colors.mapPin.pillShadowColor },\n ]}\n >\n <IconCircle color={iconCircle}>{styledIcon}</IconCircle>\n {styledSecondIcon && (\n <IconCircle color={iconCircle}>{styledSecondIcon}</IconCircle>\n )}\n <Text style={[styles.countText, { color: countText, fontFamily }]}>\n {count}\n </Text>\n </View>\n <Tail borderColor={border} backgroundColor={background} />\n </View>\n ) : (\n <View style={styles.simpleRoot}>\n <View\n style={[\n styles.simpleBadge,\n { backgroundColor: simpleBackground, borderColor: border },\n ]}\n >\n <IconCircle color={iconCircle}>{styledIcon}</IconCircle>\n </View>\n <Tail borderColor={border} backgroundColor={simpleBackground} />\n </View>\n );\n\n if (label == null && labelLeft == null) {\n return (\n <View style={style} testID={testID}>\n {pinColumn}\n </View>\n );\n }\n\n const isSatellite = labelVariant === 'satellite';\n const labelColor = isSatellite ? colors.mapPin.label.satellite : colors.mapPin.label.map;\n const labelStyle = [\n styles.labelText,\n isSatellite ? styles.labelTextSatellite : null,\n { color: labelColor, fontFamily },\n ];\n\n return (\n <View style={[styles.row, style]} testID={testID}>\n {labelLeft != null && (\n <Text style={[...labelStyle, styles.labelTextRight]}>{labelLeft}</Text>\n )}\n {pinColumn}\n {label != null && (\n <Text style={labelStyle}>{label}</Text>\n )}\n </View>\n );\n};\n\n"]}
@@ -0,0 +1,93 @@
1
+ export declare const styles: {
2
+ simpleRoot: {
3
+ alignItems: "center";
4
+ width: number;
5
+ };
6
+ simpleBadge: {
7
+ alignItems: "center";
8
+ justifyContent: "center";
9
+ padding: number;
10
+ borderRadius: number;
11
+ borderWidth: number;
12
+ };
13
+ pillRoot: {
14
+ alignItems: "center";
15
+ };
16
+ pillBadge: {
17
+ flexDirection: "row";
18
+ alignItems: "center";
19
+ height: number;
20
+ paddingLeft: number;
21
+ paddingRight: number;
22
+ paddingVertical: number;
23
+ gap: number;
24
+ borderRadius: number;
25
+ borderWidth: number;
26
+ };
27
+ pillShadow: {
28
+ shadowOffset: {
29
+ width: number;
30
+ height: number;
31
+ };
32
+ shadowRadius: number;
33
+ shadowOpacity: number;
34
+ elevation: number;
35
+ };
36
+ iconCircle: {
37
+ alignItems: "center";
38
+ justifyContent: "center";
39
+ padding: number;
40
+ borderRadius: number;
41
+ };
42
+ row: {
43
+ flexDirection: "row";
44
+ alignItems: "flex-start";
45
+ gap: number;
46
+ };
47
+ labelText: {
48
+ fontSize: number;
49
+ fontWeight: "600";
50
+ lineHeight: number;
51
+ paddingTop: number;
52
+ };
53
+ labelTextRight: {
54
+ textAlign: "right";
55
+ };
56
+ labelTextSatellite: {
57
+ textShadowColor: string;
58
+ textShadowOffset: {
59
+ width: number;
60
+ height: number;
61
+ };
62
+ textShadowRadius: number;
63
+ };
64
+ countText: {
65
+ fontSize: number;
66
+ fontWeight: "600";
67
+ lineHeight: number;
68
+ };
69
+ tailOuter: {
70
+ alignItems: "center";
71
+ marginTop: number;
72
+ };
73
+ tailBorderTop: {
74
+ width: number;
75
+ height: number;
76
+ };
77
+ tailClip: {
78
+ width: number;
79
+ height: number;
80
+ overflow: "hidden";
81
+ alignItems: "center";
82
+ };
83
+ tailSquare: {
84
+ width: number;
85
+ height: number;
86
+ borderWidth: number;
87
+ marginTop: number;
88
+ transform: {
89
+ rotate: string;
90
+ }[];
91
+ };
92
+ };
93
+ //# sourceMappingURL=MapPin.styles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapPin.styles.d.ts","sourceRoot":"","sources":["../../../src/components/MapPin/MapPin.styles.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqGjB,CAAC"}
@@ -0,0 +1,101 @@
1
+ import { StyleSheet } from 'react-native';
2
+ const TAIL_WIDTH = 12;
3
+ const TAIL_HEIGHT = 6;
4
+ const TAIL_SQUARE_SIZE = 8.5;
5
+ export const styles = StyleSheet.create({
6
+ // -- Simple pin
7
+ simpleRoot: {
8
+ alignItems: 'center',
9
+ width: 24,
10
+ },
11
+ simpleBadge: {
12
+ alignItems: 'center',
13
+ justifyContent: 'center',
14
+ padding: 4,
15
+ borderRadius: 9999,
16
+ borderWidth: 1,
17
+ },
18
+ // -- Pill pin
19
+ pillRoot: {
20
+ alignItems: 'center',
21
+ },
22
+ pillBadge: {
23
+ flexDirection: 'row',
24
+ alignItems: 'center',
25
+ height: 24,
26
+ paddingLeft: 4,
27
+ paddingRight: 6,
28
+ paddingVertical: 4,
29
+ gap: 2,
30
+ borderRadius: 9999,
31
+ borderWidth: 1,
32
+ },
33
+ pillShadow: {
34
+ // shadowColor is injected inline from colors.mapPin.pillShadowColor
35
+ shadowOffset: { width: 0, height: 0 },
36
+ shadowRadius: 6,
37
+ shadowOpacity: 0.25,
38
+ elevation: 4,
39
+ },
40
+ // -- Icon circle
41
+ iconCircle: {
42
+ alignItems: 'center',
43
+ justifyContent: 'center',
44
+ padding: 2,
45
+ borderRadius: 9999,
46
+ },
47
+ // -- Row wrapper (pin + labels)
48
+ row: {
49
+ flexDirection: 'row',
50
+ alignItems: 'flex-start',
51
+ gap: 4,
52
+ },
53
+ // -- Side label text (aligns with the center of the 24px badge)
54
+ labelText: {
55
+ fontSize: 14,
56
+ fontWeight: '600',
57
+ lineHeight: 16,
58
+ paddingTop: 4,
59
+ },
60
+ // -- Right-aligned for labelLeft
61
+ labelTextRight: {
62
+ textAlign: 'right',
63
+ },
64
+ // satellite adds shadow; color is always injected dynamically from tokens
65
+ labelTextSatellite: {
66
+ textShadowColor: 'rgba(0,0,0,0.5)',
67
+ textShadowOffset: { width: 0, height: 0 },
68
+ textShadowRadius: 4,
69
+ },
70
+ // -- Count label
71
+ countText: {
72
+ fontSize: 12,
73
+ fontWeight: '600',
74
+ lineHeight: 14,
75
+ },
76
+ // -- Tail (downward triangle: separate top-border line + clipped rotated square)
77
+ tailOuter: {
78
+ alignItems: 'center',
79
+ marginTop: 2,
80
+ },
81
+ tailBorderTop: {
82
+ width: TAIL_WIDTH, // 12px — spans the full triangle base
83
+ height: 1, // 1px horizontal top border (colored inline)
84
+ },
85
+ tailClip: {
86
+ width: TAIL_WIDTH, // 12px
87
+ height: TAIL_HEIGHT, // 6px — shows only the bottom half of the diamond
88
+ overflow: 'hidden',
89
+ alignItems: 'center',
90
+ },
91
+ tailSquare: {
92
+ width: TAIL_SQUARE_SIZE, // 8.5px — S = TAIL_WIDTH/√2 → diamond width ≈ 12px at y=0
93
+ height: TAIL_SQUARE_SIZE,
94
+ borderWidth: 1,
95
+ // places the diamond's widest point at y=0 of tailClip so the diagonal
96
+ // borders start flush with the ends of the horizontal top-border line
97
+ marginTop: -(TAIL_SQUARE_SIZE / 2),
98
+ transform: [{ rotate: '45deg' }],
99
+ },
100
+ });
101
+ //# sourceMappingURL=MapPin.styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MapPin.styles.js","sourceRoot":"","sources":["../../../src/components/MapPin/MapPin.styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,MAAM,UAAU,GAAG,EAAE,CAAC;AACtB,MAAM,WAAW,GAAG,CAAC,CAAC;AACtB,MAAM,gBAAgB,GAAG,GAAG,CAAC;AAE7B,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,gBAAgB;IAChB,UAAU,EAAE;QACV,UAAU,EAAE,QAAQ;QACpB,KAAK,EAAE,EAAE;KACV;IACD,WAAW,EAAE;QACX,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,CAAC;KACf;IAED,cAAc;IACd,QAAQ,EAAE;QACR,UAAU,EAAE,QAAQ;KACrB;IACD,SAAS,EAAE;QACT,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,MAAM,EAAE,EAAE;QACV,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,CAAC;QAClB,GAAG,EAAE,CAAC;QACN,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,CAAC;KACf;IACD,UAAU,EAAE;QACV,oEAAoE;QACpE,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACrC,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,IAAI;QACnB,SAAS,EAAE,CAAC;KACb;IAED,iBAAiB;IACjB,UAAU,EAAE;QACV,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,IAAI;KACnB;IAED,gCAAgC;IAChC,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,YAAY;QACxB,GAAG,EAAE,CAAC;KACP;IAED,gEAAgE;IAChE,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;QACd,UAAU,EAAE,CAAC;KACd;IACD,iCAAiC;IACjC,cAAc,EAAE;QACd,SAAS,EAAE,OAAO;KACnB;IACD,0EAA0E;IAC1E,kBAAkB,EAAE;QAClB,eAAe,EAAE,iBAAiB;QAClC,gBAAgB,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACzC,gBAAgB,EAAE,CAAC;KACpB;IAED,iBAAiB;IACjB,SAAS,EAAE;QACT,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,EAAE;KACf;IAED,iFAAiF;IACjF,SAAS,EAAE;QACT,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,CAAC;KACb;IACD,aAAa,EAAE;QACb,KAAK,EAAE,UAAU,EAAG,sCAAsC;QAC1D,MAAM,EAAE,CAAC,EAAW,6CAA6C;KAClE;IACD,QAAQ,EAAE;QACR,KAAK,EAAE,UAAU,EAAI,OAAO;QAC5B,MAAM,EAAE,WAAW,EAAE,kDAAkD;QACvE,QAAQ,EAAE,QAAQ;QAClB,UAAU,EAAE,QAAQ;KACrB;IACD,UAAU,EAAE;QACV,KAAK,EAAE,gBAAgB,EAAI,0DAA0D;QACrF,MAAM,EAAE,gBAAgB;QACxB,WAAW,EAAE,CAAC;QACd,uEAAuE;QACvE,sEAAsE;QACtE,SAAS,EAAE,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC;QAClC,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;KACjC;CACF,CAAC,CAAC","sourcesContent":["import { StyleSheet } from 'react-native';\n\nconst TAIL_WIDTH = 12;\nconst TAIL_HEIGHT = 6;\nconst TAIL_SQUARE_SIZE = 8.5;\n\nexport const styles = StyleSheet.create({\n // -- Simple pin\n simpleRoot: {\n alignItems: 'center',\n width: 24,\n },\n simpleBadge: {\n alignItems: 'center',\n justifyContent: 'center',\n padding: 4,\n borderRadius: 9999,\n borderWidth: 1,\n },\n\n // -- Pill pin\n pillRoot: {\n alignItems: 'center',\n },\n pillBadge: {\n flexDirection: 'row',\n alignItems: 'center',\n height: 24,\n paddingLeft: 4,\n paddingRight: 6,\n paddingVertical: 4,\n gap: 2,\n borderRadius: 9999,\n borderWidth: 1,\n },\n pillShadow: {\n // shadowColor is injected inline from colors.mapPin.pillShadowColor\n shadowOffset: { width: 0, height: 0 },\n shadowRadius: 6,\n shadowOpacity: 0.25,\n elevation: 4,\n },\n\n // -- Icon circle\n iconCircle: {\n alignItems: 'center',\n justifyContent: 'center',\n padding: 2,\n borderRadius: 9999,\n },\n\n // -- Row wrapper (pin + labels)\n row: {\n flexDirection: 'row',\n alignItems: 'flex-start',\n gap: 4,\n },\n\n // -- Side label text (aligns with the center of the 24px badge)\n labelText: {\n fontSize: 14,\n fontWeight: '600',\n lineHeight: 16,\n paddingTop: 4,\n },\n // -- Right-aligned for labelLeft\n labelTextRight: {\n textAlign: 'right',\n },\n // satellite adds shadow; color is always injected dynamically from tokens\n labelTextSatellite: {\n textShadowColor: 'rgba(0,0,0,0.5)',\n textShadowOffset: { width: 0, height: 0 },\n textShadowRadius: 4,\n },\n\n // -- Count label\n countText: {\n fontSize: 12,\n fontWeight: '600',\n lineHeight: 14,\n },\n\n // -- Tail (downward triangle: separate top-border line + clipped rotated square)\n tailOuter: {\n alignItems: 'center',\n marginTop: 2,\n },\n tailBorderTop: {\n width: TAIL_WIDTH, // 12px — spans the full triangle base\n height: 1, // 1px horizontal top border (colored inline)\n },\n tailClip: {\n width: TAIL_WIDTH, // 12px\n height: TAIL_HEIGHT, // 6px — shows only the bottom half of the diamond\n overflow: 'hidden',\n alignItems: 'center',\n },\n tailSquare: {\n width: TAIL_SQUARE_SIZE, // 8.5px — S = TAIL_WIDTH/√2 → diamond width ≈ 12px at y=0\n height: TAIL_SQUARE_SIZE,\n borderWidth: 1,\n // places the diamond's widest point at y=0 of tailClip so the diagonal\n // borders start flush with the ends of the horizontal top-border line\n marginTop: -(TAIL_SQUARE_SIZE / 2),\n transform: [{ rotate: '45deg' }],\n },\n});\n"]}
@@ -0,0 +1,3 @@
1
+ export { MapPin, MAP_PIN_HEIGHT, MAP_PIN_SIMPLE_WIDTH } from './MapPin';
2
+ export type { MapPinProps, MapPinState, MapPinType, MapPinLabelVariant } from './MapPin';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/MapPin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { MapPin, MAP_PIN_HEIGHT, MAP_PIN_SIMPLE_WIDTH } from './MapPin';
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/MapPin/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { MapPin, MAP_PIN_HEIGHT, MAP_PIN_SIMPLE_WIDTH } from './MapPin';\nexport type { MapPinProps, MapPinState, MapPinType, MapPinLabelVariant } from './MapPin';\n"]}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * MediaPicker — field-level media attachment widget.
3
+ *
4
+ * Two modes:
5
+ * - 'image': uses ImgPicker — principale slot + divider + additional slots (horizontal scroll)
6
+ * - 'file': vertical list of FileCards + a full-width "Ajouter un fichier" button.
7
+ *
8
+ * The component is fully controlled — it fires callbacks and the parent updates
9
+ * the images/files arrays.
10
+ */
11
+ import type { StyleProp, ViewStyle } from 'react-native';
12
+ export type MediaPickerMode = 'image' | 'file';
13
+ export interface MediaPickerImageItem {
14
+ /** Unique identifier */
15
+ id: string;
16
+ /** Image URI */
17
+ uri: string;
18
+ }
19
+ export interface MediaPickerFileItem {
20
+ /** Unique identifier */
21
+ id: string;
22
+ /** Display file name */
23
+ filename: string;
24
+ /** First secondary text, shown left of the bullet (e.g. "4.3 Mo") */
25
+ detail?: string;
26
+ /** Second secondary text, shown right of the bullet (e.g. "17/04/2026") */
27
+ caption?: string;
28
+ /** MIME type — drives the icon choice */
29
+ mimeType?: string;
30
+ /** Image thumbnail URI — fills the icon area if provided */
31
+ thumbnailUri?: string;
32
+ }
33
+ export interface MediaPickerProps {
34
+ /** Picker mode: image slots or file list */
35
+ mode: MediaPickerMode;
36
+ /** Section label shown above the picker */
37
+ label?: string;
38
+ /** Optional subtitle / helper text below the label */
39
+ subtitle?: string;
40
+ /** Controlled principale image. If undefined, the principale slot is shown empty. */
41
+ principale?: MediaPickerImageItem;
42
+ /** Controlled additional image slots (independent from principale). */
43
+ additionalImages?: MediaPickerImageItem[];
44
+ /**
45
+ * Number of additional empty slots shown on first render.
46
+ * Default: 2 (matches Figma).
47
+ */
48
+ initialAdditionalSlots?: number;
49
+ /**
50
+ * Maximum total images (1 principale + additional).
51
+ * When reached, no more empty slot is appended. Default: undefined (no limit).
52
+ */
53
+ maxImages?: number;
54
+ /** Badge label on the principale slot. Default: "Principale" */
55
+ principaleLabel?: string;
56
+ /** Called when the user taps the empty principale slot */
57
+ onAddPrincipale?: () => void;
58
+ /** Called when the user taps an empty additional slot */
59
+ onAddAdditional?: () => void;
60
+ /** Called with the image id when the user taps the X remove button */
61
+ onRemoveImage?: (id: string) => void;
62
+ /** Controlled list of attached files */
63
+ files?: MediaPickerFileItem[];
64
+ /** Called when the user taps "Ajouter un fichier" */
65
+ onAddFile?: () => void;
66
+ /** Called with the file id when the user taps the remove button on a FileCard */
67
+ onRemoveFile?: (id: string) => void;
68
+ /** Additional style applied to the outer container */
69
+ style?: StyleProp<ViewStyle>;
70
+ /** Test identifier for automated testing */
71
+ testID?: string;
72
+ }
73
+ export declare const MediaPicker: ({ mode, label, subtitle, principale, additionalImages, initialAdditionalSlots, maxImages, principaleLabel, onAddPrincipale, onAddAdditional, onRemoveImage, files, onAddFile, onRemoveFile, style, testID, }: MediaPickerProps) => import("react").JSX.Element;
74
+ //# sourceMappingURL=MediaPicker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaPicker.d.ts","sourceRoot":"","sources":["../../../src/components/MediaPicker/MediaPicker.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAYzD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/C,MAAM,WAAW,oBAAoB;IACnC,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,gBAAgB;IAChB,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,wBAAwB;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,2EAA2E;IAC3E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,gBAAgB;IAC/B,4CAA4C;IAC5C,IAAI,EAAE,eAAe,CAAC;IACtB,2CAA2C;IAC3C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAGlB,qFAAqF;IACrF,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC1C;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gEAAgE;IAChE,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0DAA0D;IAC1D,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,yDAAyD;IACzD,eAAe,CAAC,EAAE,MAAM,IAAI,CAAC;IAC7B,sEAAsE;IACtE,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAGrC,wCAAwC;IACxC,KAAK,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC9B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,iFAAiF;IACjF,YAAY,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAC;IAEpC,sDAAsD;IACtD,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,WAAW,GAAI,8MAiBzB,gBAAgB,gCAoElB,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * MediaPicker — field-level media attachment widget.
3
+ *
4
+ * Two modes:
5
+ * - 'image': uses ImgPicker — principale slot + divider + additional slots (horizontal scroll)
6
+ * - 'file': vertical list of FileCards + a full-width "Ajouter un fichier" button.
7
+ *
8
+ * The component is fully controlled — it fires callbacks and the parent updates
9
+ * the images/files arrays.
10
+ */
11
+ import { Text, View } from 'react-native';
12
+ import { PlusCircle } from 'phosphor-react-native';
13
+ import { useTheme } from '../../context/ThemeContext';
14
+ import { ImgPicker } from '../ImgPicker';
15
+ import { FileCard } from '../FileCard';
16
+ import { Button } from '../Button';
17
+ import { styles } from './MediaPicker.styles';
18
+ // ---------------------------------------------------------------------------
19
+ // Component
20
+ // ---------------------------------------------------------------------------
21
+ export const MediaPicker = ({ mode, label, subtitle, principale, additionalImages, initialAdditionalSlots, maxImages, principaleLabel, onAddPrincipale, onAddAdditional, onRemoveImage, files = [], onAddFile, onRemoveFile, style, testID, }) => {
22
+ const { colors, fontFamily } = useTheme();
23
+ const mp = colors.mediaPicker;
24
+ return (<View style={[styles.container, style]} testID={testID}>
25
+ {/* Label section */}
26
+ {(label != null || subtitle != null) && (<View style={styles.labelBlock}>
27
+ {label != null && (<Text style={[styles.label, { color: mp.label, fontFamily }]}>{label}</Text>)}
28
+ {subtitle != null && (<Text style={[styles.subtitle, { color: mp.subtitle, fontFamily }]}>{subtitle}</Text>)}
29
+ </View>)}
30
+
31
+ {/* ── Image mode ────────────────────────────────────────────────── */}
32
+ {mode === 'image' && (<ImgPicker principale={principale} additionalImages={additionalImages} initialAdditionalSlots={initialAdditionalSlots} maxImages={maxImages} principaleLabel={principaleLabel} onAddPrincipale={onAddPrincipale} onAddAdditional={onAddAdditional} onRemoveImage={onRemoveImage}/>)}
33
+
34
+ {/* ── File mode ─────────────────────────────────────────────────── */}
35
+ {mode === 'file' && (<View style={styles.fileCol}>
36
+ {files.length > 0 && (<View style={styles.fileList}>
37
+ {files.map((f) => (<FileCard key={f.id} filename={f.filename} detail={f.detail} caption={f.caption} mimeType={f.mimeType} thumbnailUri={f.thumbnailUri} onRemove={onRemoveFile ? () => onRemoveFile(f.id) : undefined}/>))}
38
+ </View>)}
39
+ <Button variant="tertiary" size="M" label="Ajouter un fichier" iconLeft={<PlusCircle size={18} weight="duotone" color={colors.button.tertiary.default.icon}/>} onPress={onAddFile} style={styles.addButton}/>
40
+ </View>)}
41
+ </View>);
42
+ };
43
+ //# sourceMappingURL=MediaPicker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"MediaPicker.js","sourceRoot":"","sources":["../../../src/components/MediaPicker/MediaPicker.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * MediaPicker — field-level media attachment widget.\n *\n * Two modes:\n * - 'image': uses ImgPicker — principale slot + divider + additional slots (horizontal scroll)\n * - 'file': vertical list of FileCards + a full-width \"Ajouter un fichier\" button.\n *\n * The component is fully controlled — it fires callbacks and the parent updates\n * the images/files arrays.\n */\n\nimport { Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { PlusCircle } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { ImgPicker } from '../ImgPicker';\nimport { FileCard } from '../FileCard';\nimport { Button } from '../Button';\nimport { styles } from './MediaPicker.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type MediaPickerMode = 'image' | 'file';\n\nexport interface MediaPickerImageItem {\n /** Unique identifier */\n id: string;\n /** Image URI */\n uri: string;\n}\n\nexport interface MediaPickerFileItem {\n /** Unique identifier */\n id: string;\n /** Display file name */\n filename: string;\n /** First secondary text, shown left of the bullet (e.g. \"4.3 Mo\") */\n detail?: string;\n /** Second secondary text, shown right of the bullet (e.g. \"17/04/2026\") */\n caption?: string;\n /** MIME type — drives the icon choice */\n mimeType?: string;\n /** Image thumbnail URI — fills the icon area if provided */\n thumbnailUri?: string;\n}\n\nexport interface MediaPickerProps {\n /** Picker mode: image slots or file list */\n mode: MediaPickerMode;\n /** Section label shown above the picker */\n label?: string;\n /** Optional subtitle / helper text below the label */\n subtitle?: string;\n\n // --- Image mode ---\n /** Controlled principale image. If undefined, the principale slot is shown empty. */\n principale?: MediaPickerImageItem;\n /** Controlled additional image slots (independent from principale). */\n additionalImages?: MediaPickerImageItem[];\n /**\n * Number of additional empty slots shown on first render.\n * Default: 2 (matches Figma).\n */\n initialAdditionalSlots?: number;\n /**\n * Maximum total images (1 principale + additional).\n * When reached, no more empty slot is appended. Default: undefined (no limit).\n */\n maxImages?: number;\n /** Badge label on the principale slot. Default: \"Principale\" */\n principaleLabel?: string;\n /** Called when the user taps the empty principale slot */\n onAddPrincipale?: () => void;\n /** Called when the user taps an empty additional slot */\n onAddAdditional?: () => void;\n /** Called with the image id when the user taps the X remove button */\n onRemoveImage?: (id: string) => void;\n\n // --- File mode ---\n /** Controlled list of attached files */\n files?: MediaPickerFileItem[];\n /** Called when the user taps \"Ajouter un fichier\" */\n onAddFile?: () => void;\n /** Called with the file id when the user taps the remove button on a FileCard */\n onRemoveFile?: (id: string) => void;\n\n /** Additional style applied to the outer container */\n style?: StyleProp<ViewStyle>;\n /** Test identifier for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const MediaPicker = ({\n mode,\n label,\n subtitle,\n principale,\n additionalImages,\n initialAdditionalSlots,\n maxImages,\n principaleLabel,\n onAddPrincipale,\n onAddAdditional,\n onRemoveImage,\n files = [],\n onAddFile,\n onRemoveFile,\n style,\n testID,\n}: MediaPickerProps) => {\n const { colors, fontFamily } = useTheme();\n const mp = colors.mediaPicker;\n\n return (\n <View style={[styles.container, style]} testID={testID}>\n {/* Label section */}\n {(label != null || subtitle != null) && (\n <View style={styles.labelBlock}>\n {label != null && (\n <Text style={[styles.label, { color: mp.label, fontFamily }]}>{label}</Text>\n )}\n {subtitle != null && (\n <Text style={[styles.subtitle, { color: mp.subtitle, fontFamily }]}>{subtitle}</Text>\n )}\n </View>\n )}\n\n {/* ── Image mode ────────────────────────────────────────────────── */}\n {mode === 'image' && (\n <ImgPicker\n principale={principale}\n additionalImages={additionalImages}\n initialAdditionalSlots={initialAdditionalSlots}\n maxImages={maxImages}\n principaleLabel={principaleLabel}\n onAddPrincipale={onAddPrincipale}\n onAddAdditional={onAddAdditional}\n onRemoveImage={onRemoveImage}\n />\n )}\n\n {/* ── File mode ─────────────────────────────────────────────────── */}\n {mode === 'file' && (\n <View style={styles.fileCol}>\n {files.length > 0 && (\n <View style={styles.fileList}>\n {files.map((f) => (\n <FileCard\n key={f.id}\n filename={f.filename}\n detail={f.detail}\n caption={f.caption}\n mimeType={f.mimeType}\n thumbnailUri={f.thumbnailUri}\n onRemove={onRemoveFile ? () => onRemoveFile(f.id) : undefined}\n />\n ))}\n </View>\n )}\n <Button\n variant=\"tertiary\"\n size=\"M\"\n label=\"Ajouter un fichier\"\n iconLeft={\n <PlusCircle\n size={18}\n weight=\"duotone\"\n color={colors.button.tertiary.default.icon}\n />\n }\n onPress={onAddFile}\n style={styles.addButton}\n />\n </View>\n )}\n </View>\n );\n};\n\n"]}
@@ -0,0 +1,30 @@
1
+ export declare const styles: {
2
+ container: {
3
+ gap: number;
4
+ };
5
+ labelBlock: {
6
+ gap: number;
7
+ };
8
+ label: {
9
+ fontSize: number;
10
+ fontWeight: "600";
11
+ lineHeight: number;
12
+ letterSpacing: number;
13
+ textTransform: "uppercase";
14
+ };
15
+ subtitle: {
16
+ fontSize: number;
17
+ fontWeight: "500";
18
+ lineHeight: number;
19
+ };
20
+ fileCol: {
21
+ gap: number;
22
+ };
23
+ fileList: {
24
+ gap: number;
25
+ };
26
+ addButton: {
27
+ alignSelf: "stretch";
28
+ };
29
+ };
30
+ //# sourceMappingURL=MediaPicker.styles.d.ts.map