@situaction/traquiste-mobile 1.0.0 → 1.2.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.
- package/README.md +61 -90
- package/build/components/AssociationTag/AssociationTag.d.ts +19 -0
- package/build/components/AssociationTag/AssociationTag.d.ts.map +1 -0
- package/build/components/AssociationTag/AssociationTag.js +29 -0
- package/build/components/AssociationTag/AssociationTag.js.map +1 -0
- package/build/components/AssociationTag/AssociationTag.styles.d.ts +21 -0
- package/build/components/AssociationTag/AssociationTag.styles.d.ts.map +1 -0
- package/build/components/AssociationTag/AssociationTag.styles.js +26 -0
- package/build/components/AssociationTag/AssociationTag.styles.js.map +1 -0
- package/build/components/AssociationTag/index.d.ts +3 -0
- package/build/components/AssociationTag/index.d.ts.map +1 -0
- package/build/components/AssociationTag/index.js +2 -0
- package/build/components/AssociationTag/index.js.map +1 -0
- package/build/components/BottomSheet/BottomSheet.d.ts +36 -0
- package/build/components/BottomSheet/BottomSheet.d.ts.map +1 -0
- package/build/components/BottomSheet/BottomSheet.js +76 -0
- package/build/components/BottomSheet/BottomSheet.js.map +1 -0
- package/build/components/BottomSheet/BottomSheet.styles.d.ts +32 -0
- package/build/components/BottomSheet/BottomSheet.styles.d.ts.map +1 -0
- package/build/components/BottomSheet/BottomSheet.styles.js +31 -0
- package/build/components/BottomSheet/BottomSheet.styles.js.map +1 -0
- package/build/components/BottomSheet/index.d.ts +3 -0
- package/build/components/BottomSheet/index.d.ts.map +1 -0
- package/build/components/BottomSheet/index.js +2 -0
- package/build/components/BottomSheet/index.js.map +1 -0
- package/build/components/Button/Button.d.ts +5 -1
- package/build/components/Button/Button.d.ts.map +1 -1
- package/build/components/Button/Button.js +12 -6
- package/build/components/Button/Button.js.map +1 -1
- package/build/components/ButtonAction/ButtonAction.d.ts +5 -1
- package/build/components/ButtonAction/ButtonAction.d.ts.map +1 -1
- package/build/components/ButtonAction/ButtonAction.js +2 -2
- package/build/components/ButtonAction/ButtonAction.js.map +1 -1
- package/build/components/ButtonMap/ButtonMap.d.ts +5 -1
- package/build/components/ButtonMap/ButtonMap.d.ts.map +1 -1
- package/build/components/ButtonMap/ButtonMap.js +11 -9
- package/build/components/ButtonMap/ButtonMap.js.map +1 -1
- package/build/components/ButtonMenu/ButtonMenu.d.ts +5 -1
- package/build/components/ButtonMenu/ButtonMenu.d.ts.map +1 -1
- package/build/components/ButtonMenu/ButtonMenu.js +17 -17
- package/build/components/ButtonMenu/ButtonMenu.js.map +1 -1
- package/build/components/Calendar/Calendar.d.ts +4 -0
- package/build/components/Calendar/Calendar.d.ts.map +1 -0
- package/build/components/Calendar/Calendar.i18n.d.ts +34 -0
- package/build/components/Calendar/Calendar.i18n.d.ts.map +1 -0
- package/build/components/Calendar/Calendar.i18n.js +34 -0
- package/build/components/Calendar/Calendar.i18n.js.map +1 -0
- package/build/components/Calendar/Calendar.js +172 -0
- package/build/components/Calendar/Calendar.js.map +1 -0
- package/build/components/Calendar/Calendar.styles.d.ts +257 -0
- package/build/components/Calendar/Calendar.styles.d.ts.map +1 -0
- package/build/components/Calendar/Calendar.styles.js +234 -0
- package/build/components/Calendar/Calendar.styles.js.map +1 -0
- package/build/components/Calendar/Calendar.types.d.ts +62 -0
- package/build/components/Calendar/Calendar.types.d.ts.map +1 -0
- package/build/components/Calendar/Calendar.types.js +2 -0
- package/build/components/Calendar/Calendar.types.js.map +1 -0
- package/build/components/Calendar/CalendarDay.d.ts +4 -0
- package/build/components/Calendar/CalendarDay.d.ts.map +1 -0
- package/build/components/Calendar/CalendarDay.js +52 -0
- package/build/components/Calendar/CalendarDay.js.map +1 -0
- package/build/components/Calendar/CalendarHeader.d.ts +4 -0
- package/build/components/Calendar/CalendarHeader.d.ts.map +1 -0
- package/build/components/Calendar/CalendarHeader.js +16 -0
- package/build/components/Calendar/CalendarHeader.js.map +1 -0
- package/build/components/Calendar/CalendarLegend.d.ts +3 -0
- package/build/components/Calendar/CalendarLegend.d.ts.map +1 -0
- package/build/components/Calendar/CalendarLegend.js +38 -0
- package/build/components/Calendar/CalendarLegend.js.map +1 -0
- package/build/components/Calendar/CalendarYearPicker.d.ts +19 -0
- package/build/components/Calendar/CalendarYearPicker.d.ts.map +1 -0
- package/build/components/Calendar/CalendarYearPicker.js +158 -0
- package/build/components/Calendar/CalendarYearPicker.js.map +1 -0
- package/build/components/Calendar/index.d.ts +5 -0
- package/build/components/Calendar/index.d.ts.map +1 -0
- package/build/components/Calendar/index.js +3 -0
- package/build/components/Calendar/index.js.map +1 -0
- package/build/components/Card/Card.d.ts +25 -0
- package/build/components/Card/Card.d.ts.map +1 -0
- package/build/components/Card/Card.js +31 -0
- package/build/components/Card/Card.js.map +1 -0
- package/build/components/Card/Card.styles.d.ts +15 -0
- package/build/components/Card/Card.styles.d.ts.map +1 -0
- package/build/components/Card/Card.styles.js +18 -0
- package/build/components/Card/Card.styles.js.map +1 -0
- package/build/components/Card/index.d.ts +3 -0
- package/build/components/Card/index.d.ts.map +1 -0
- package/build/components/Card/index.js +2 -0
- package/build/components/Card/index.js.map +1 -0
- package/build/components/CardEquip/CardEquip.d.ts +60 -0
- package/build/components/CardEquip/CardEquip.d.ts.map +1 -0
- package/build/components/CardEquip/CardEquip.js +106 -0
- package/build/components/CardEquip/CardEquip.js.map +1 -0
- package/build/components/CardEquip/CardEquip.styles.d.ts +125 -0
- package/build/components/CardEquip/CardEquip.styles.d.ts.map +1 -0
- package/build/components/CardEquip/CardEquip.styles.js +139 -0
- package/build/components/CardEquip/CardEquip.styles.js.map +1 -0
- package/build/components/CardEquip/index.d.ts +3 -0
- package/build/components/CardEquip/index.d.ts.map +1 -0
- package/build/components/CardEquip/index.js +2 -0
- package/build/components/CardEquip/index.js.map +1 -0
- package/build/components/CardProfile/CardProfile.d.ts +55 -0
- package/build/components/CardProfile/CardProfile.d.ts.map +1 -0
- package/build/components/CardProfile/CardProfile.js +74 -0
- package/build/components/CardProfile/CardProfile.js.map +1 -0
- package/build/components/CardProfile/CardProfile.styles.d.ts +62 -0
- package/build/components/CardProfile/CardProfile.styles.d.ts.map +1 -0
- package/build/components/CardProfile/CardProfile.styles.js +65 -0
- package/build/components/CardProfile/CardProfile.styles.js.map +1 -0
- package/build/components/CardProfile/index.d.ts +3 -0
- package/build/components/CardProfile/index.d.ts.map +1 -0
- package/build/components/CardProfile/index.js +2 -0
- package/build/components/CardProfile/index.js.map +1 -0
- package/build/components/Checkbox/Checkbox.d.ts +28 -0
- package/build/components/Checkbox/Checkbox.d.ts.map +1 -0
- package/build/components/Checkbox/Checkbox.js +77 -0
- package/build/components/Checkbox/Checkbox.js.map +1 -0
- package/build/components/Checkbox/Checkbox.styles.d.ts +34 -0
- package/build/components/Checkbox/Checkbox.styles.d.ts.map +1 -0
- package/build/components/Checkbox/Checkbox.styles.js +39 -0
- package/build/components/Checkbox/Checkbox.styles.js.map +1 -0
- package/build/components/Checkbox/Checkbox.types.d.ts +25 -0
- package/build/components/Checkbox/Checkbox.types.d.ts.map +1 -0
- package/build/components/Checkbox/Checkbox.types.js +5 -0
- package/build/components/Checkbox/Checkbox.types.js.map +1 -0
- package/build/components/Checkbox/index.d.ts +3 -0
- package/build/components/Checkbox/index.d.ts.map +1 -0
- package/build/components/Checkbox/index.js +2 -0
- package/build/components/Checkbox/index.js.map +1 -0
- package/build/components/Cluster/Cluster.d.ts +23 -0
- package/build/components/Cluster/Cluster.d.ts.map +1 -0
- package/build/components/Cluster/Cluster.js +34 -0
- package/build/components/Cluster/Cluster.js.map +1 -0
- package/build/components/Cluster/Cluster.styles.d.ts +33 -0
- package/build/components/Cluster/Cluster.styles.d.ts.map +1 -0
- package/build/components/Cluster/Cluster.styles.js +34 -0
- package/build/components/Cluster/Cluster.styles.js.map +1 -0
- package/build/components/Cluster/index.d.ts +3 -0
- package/build/components/Cluster/index.d.ts.map +1 -0
- package/build/components/Cluster/index.js +2 -0
- package/build/components/Cluster/index.js.map +1 -0
- package/build/components/ColorPicker/ColorPicker.d.ts +20 -0
- package/build/components/ColorPicker/ColorPicker.d.ts.map +1 -0
- package/build/components/ColorPicker/ColorPicker.js +17 -0
- package/build/components/ColorPicker/ColorPicker.js.map +1 -0
- package/build/components/ColorPicker/ColorPicker.styles.d.ts +10 -0
- package/build/components/ColorPicker/ColorPicker.styles.d.ts.map +1 -0
- package/build/components/ColorPicker/ColorPicker.styles.js +11 -0
- package/build/components/ColorPicker/ColorPicker.styles.js.map +1 -0
- package/build/components/ColorPicker/index.d.ts +3 -0
- package/build/components/ColorPicker/index.d.ts.map +1 -0
- package/build/components/ColorPicker/index.js +2 -0
- package/build/components/ColorPicker/index.js.map +1 -0
- package/build/components/ColorSwatch/ColorSwatch.d.ts +20 -0
- package/build/components/ColorSwatch/ColorSwatch.d.ts.map +1 -0
- package/build/components/ColorSwatch/ColorSwatch.js +35 -0
- package/build/components/ColorSwatch/ColorSwatch.js.map +1 -0
- package/build/components/ColorSwatch/ColorSwatch.styles.d.ts +16 -0
- package/build/components/ColorSwatch/ColorSwatch.styles.d.ts.map +1 -0
- package/build/components/ColorSwatch/ColorSwatch.styles.js +19 -0
- package/build/components/ColorSwatch/ColorSwatch.styles.js.map +1 -0
- package/build/components/ColorSwatch/index.d.ts +3 -0
- package/build/components/ColorSwatch/index.d.ts.map +1 -0
- package/build/components/ColorSwatch/index.js +2 -0
- package/build/components/ColorSwatch/index.js.map +1 -0
- package/build/components/FileCard/FileCard.d.ts +29 -0
- package/build/components/FileCard/FileCard.d.ts.map +1 -0
- package/build/components/FileCard/FileCard.js +66 -0
- package/build/components/FileCard/FileCard.js.map +1 -0
- package/build/components/FileCard/FileCard.styles.d.ts +54 -0
- package/build/components/FileCard/FileCard.styles.d.ts.map +1 -0
- package/build/components/FileCard/FileCard.styles.js +56 -0
- package/build/components/FileCard/FileCard.styles.js.map +1 -0
- package/build/components/FileCard/index.d.ts +3 -0
- package/build/components/FileCard/index.d.ts.map +1 -0
- package/build/components/FileCard/index.js +2 -0
- package/build/components/FileCard/index.js.map +1 -0
- package/build/components/FilterChip/FilterChip.d.ts +5 -1
- package/build/components/FilterChip/FilterChip.d.ts.map +1 -1
- package/build/components/FilterChip/FilterChip.js +55 -25
- package/build/components/FilterChip/FilterChip.js.map +1 -1
- package/build/components/FilterNav/FilterNav.d.ts +53 -0
- package/build/components/FilterNav/FilterNav.d.ts.map +1 -0
- package/build/components/FilterNav/FilterNav.js +39 -0
- package/build/components/FilterNav/FilterNav.js.map +1 -0
- package/build/components/FilterNav/FilterNav.styles.d.ts +10 -0
- package/build/components/FilterNav/FilterNav.styles.d.ts.map +1 -0
- package/build/components/FilterNav/FilterNav.styles.js +11 -0
- package/build/components/FilterNav/FilterNav.styles.js.map +1 -0
- package/build/components/FilterNav/index.d.ts +3 -0
- package/build/components/FilterNav/index.d.ts.map +1 -0
- package/build/components/FilterNav/index.js +2 -0
- package/build/components/FilterNav/index.js.map +1 -0
- package/build/components/ImgPicker/ImgPicker.d.ts +47 -0
- package/build/components/ImgPicker/ImgPicker.d.ts.map +1 -0
- package/build/components/ImgPicker/ImgPicker.js +49 -0
- package/build/components/ImgPicker/ImgPicker.js.map +1 -0
- package/build/components/ImgPicker/ImgPicker.styles.d.ts +18 -0
- package/build/components/ImgPicker/ImgPicker.styles.d.ts.map +1 -0
- package/build/components/ImgPicker/ImgPicker.styles.js +19 -0
- package/build/components/ImgPicker/ImgPicker.styles.js.map +1 -0
- package/build/components/ImgPicker/index.d.ts +3 -0
- package/build/components/ImgPicker/index.d.ts.map +1 -0
- package/build/components/ImgPicker/index.js +2 -0
- package/build/components/ImgPicker/index.js.map +1 -0
- package/build/components/InlineInfo/InlineInfo.d.ts +60 -0
- package/build/components/InlineInfo/InlineInfo.d.ts.map +1 -0
- package/build/components/InlineInfo/InlineInfo.js +115 -0
- package/build/components/InlineInfo/InlineInfo.js.map +1 -0
- package/build/components/InlineInfo/InlineInfo.styles.d.ts +42 -0
- package/build/components/InlineInfo/InlineInfo.styles.d.ts.map +1 -0
- package/build/components/InlineInfo/InlineInfo.styles.js +50 -0
- package/build/components/InlineInfo/InlineInfo.styles.js.map +1 -0
- package/build/components/InlineInfo/index.d.ts +3 -0
- package/build/components/InlineInfo/index.d.ts.map +1 -0
- package/build/components/InlineInfo/index.js +2 -0
- package/build/components/InlineInfo/index.js.map +1 -0
- package/build/components/Input/Input.d.ts +57 -0
- package/build/components/Input/Input.d.ts.map +1 -0
- package/build/components/Input/Input.js +103 -0
- package/build/components/Input/Input.js.map +1 -0
- package/build/components/Input/Input.styles.d.ts +39 -0
- package/build/components/Input/Input.styles.d.ts.map +1 -0
- package/build/components/Input/Input.styles.js +40 -0
- package/build/components/Input/Input.styles.js.map +1 -0
- package/build/components/Input/index.d.ts +3 -0
- package/build/components/Input/index.d.ts.map +1 -0
- package/build/components/Input/index.js +2 -0
- package/build/components/Input/index.js.map +1 -0
- package/build/components/ListGroup/ListGroup.d.ts +24 -0
- package/build/components/ListGroup/ListGroup.d.ts.map +1 -0
- package/build/components/ListGroup/ListGroup.js +44 -0
- package/build/components/ListGroup/ListGroup.js.map +1 -0
- package/build/components/ListGroup/index.d.ts +3 -0
- package/build/components/ListGroup/index.d.ts.map +1 -0
- package/build/components/ListGroup/index.js +2 -0
- package/build/components/ListGroup/index.js.map +1 -0
- package/build/components/ListItem/ListItem.d.ts +44 -0
- package/build/components/ListItem/ListItem.d.ts.map +1 -0
- package/build/components/ListItem/ListItem.js +69 -0
- package/build/components/ListItem/ListItem.js.map +1 -0
- package/build/components/ListItem/ListItem.styles.d.ts +66 -0
- package/build/components/ListItem/ListItem.styles.d.ts.map +1 -0
- package/build/components/ListItem/ListItem.styles.js +70 -0
- package/build/components/ListItem/ListItem.styles.js.map +1 -0
- package/build/components/ListItem/index.d.ts +3 -0
- package/build/components/ListItem/index.d.ts.map +1 -0
- package/build/components/ListItem/index.js +2 -0
- package/build/components/ListItem/index.js.map +1 -0
- package/build/components/MapPin/MapPin.d.ts +61 -0
- package/build/components/MapPin/MapPin.d.ts.map +1 -0
- package/build/components/MapPin/MapPin.js +118 -0
- package/build/components/MapPin/MapPin.js.map +1 -0
- package/build/components/MapPin/MapPin.styles.d.ts +93 -0
- package/build/components/MapPin/MapPin.styles.d.ts.map +1 -0
- package/build/components/MapPin/MapPin.styles.js +101 -0
- package/build/components/MapPin/MapPin.styles.js.map +1 -0
- package/build/components/MapPin/index.d.ts +3 -0
- package/build/components/MapPin/index.d.ts.map +1 -0
- package/build/components/MapPin/index.js +2 -0
- package/build/components/MapPin/index.js.map +1 -0
- package/build/components/MediaPicker/MediaPicker.d.ts +74 -0
- package/build/components/MediaPicker/MediaPicker.d.ts.map +1 -0
- package/build/components/MediaPicker/MediaPicker.js +43 -0
- package/build/components/MediaPicker/MediaPicker.js.map +1 -0
- package/build/components/MediaPicker/MediaPicker.styles.d.ts +30 -0
- package/build/components/MediaPicker/MediaPicker.styles.d.ts.map +1 -0
- package/build/components/MediaPicker/MediaPicker.styles.js +31 -0
- package/build/components/MediaPicker/MediaPicker.styles.js.map +1 -0
- package/build/components/MediaPicker/index.d.ts +3 -0
- package/build/components/MediaPicker/index.d.ts.map +1 -0
- package/build/components/MediaPicker/index.js +2 -0
- package/build/components/MediaPicker/index.js.map +1 -0
- package/build/components/PhotoCard/PhotoCard.d.ts +28 -0
- package/build/components/PhotoCard/PhotoCard.d.ts.map +1 -0
- package/build/components/PhotoCard/PhotoCard.js +53 -0
- package/build/components/PhotoCard/PhotoCard.js.map +1 -0
- package/build/components/PhotoCard/PhotoCard.styles.d.ts +47 -0
- package/build/components/PhotoCard/PhotoCard.styles.d.ts.map +1 -0
- package/build/components/PhotoCard/PhotoCard.styles.js +45 -0
- package/build/components/PhotoCard/PhotoCard.styles.js.map +1 -0
- package/build/components/PhotoCard/index.d.ts +3 -0
- package/build/components/PhotoCard/index.d.ts.map +1 -0
- package/build/components/PhotoCard/index.js +2 -0
- package/build/components/PhotoCard/index.js.map +1 -0
- package/build/components/ProgressStep/ProgressStep.d.ts +9 -0
- package/build/components/ProgressStep/ProgressStep.d.ts.map +1 -0
- package/build/components/ProgressStep/ProgressStep.js +23 -0
- package/build/components/ProgressStep/ProgressStep.js.map +1 -0
- package/build/components/ProgressStep/ProgressStep.styles.d.ts +12 -0
- package/build/components/ProgressStep/ProgressStep.styles.d.ts.map +1 -0
- package/build/components/ProgressStep/ProgressStep.styles.js +13 -0
- package/build/components/ProgressStep/ProgressStep.styles.js.map +1 -0
- package/build/components/ProgressStep/index.d.ts +3 -0
- package/build/components/ProgressStep/index.d.ts.map +1 -0
- package/build/components/ProgressStep/index.js +2 -0
- package/build/components/ProgressStep/index.js.map +1 -0
- package/build/components/RadioButton/RadioButton.d.ts +29 -0
- package/build/components/RadioButton/RadioButton.d.ts.map +1 -0
- package/build/components/RadioButton/RadioButton.js +71 -0
- package/build/components/RadioButton/RadioButton.js.map +1 -0
- package/build/components/RadioButton/RadioButton.styles.d.ts +27 -0
- package/build/components/RadioButton/RadioButton.styles.d.ts.map +1 -0
- package/build/components/RadioButton/RadioButton.styles.js +30 -0
- package/build/components/RadioButton/RadioButton.styles.js.map +1 -0
- package/build/components/RadioButton/index.d.ts +3 -0
- package/build/components/RadioButton/index.d.ts.map +1 -0
- package/build/components/RadioButton/index.js +2 -0
- package/build/components/RadioButton/index.js.map +1 -0
- package/build/components/SearchBar/SearchBar.d.ts +33 -0
- package/build/components/SearchBar/SearchBar.d.ts.map +1 -0
- package/build/components/SearchBar/SearchBar.js +83 -0
- package/build/components/SearchBar/SearchBar.js.map +1 -0
- package/build/components/SearchBar/SearchBar.styles.d.ts +19 -0
- package/build/components/SearchBar/SearchBar.styles.d.ts.map +1 -0
- package/build/components/SearchBar/SearchBar.styles.js +21 -0
- package/build/components/SearchBar/SearchBar.styles.js.map +1 -0
- package/build/components/SearchBar/index.d.ts +3 -0
- package/build/components/SearchBar/index.d.ts.map +1 -0
- package/build/components/SearchBar/index.js +2 -0
- package/build/components/SearchBar/index.js.map +1 -0
- package/build/components/Spinner/Spinner.d.ts +12 -0
- package/build/components/Spinner/Spinner.d.ts.map +1 -0
- package/build/components/Spinner/Spinner.js +80 -0
- package/build/components/Spinner/Spinner.js.map +1 -0
- package/build/components/Spinner/Spinner.styles.d.ts +21 -0
- package/build/components/Spinner/Spinner.styles.d.ts.map +1 -0
- package/build/components/Spinner/Spinner.styles.js +22 -0
- package/build/components/Spinner/Spinner.styles.js.map +1 -0
- package/build/components/Spinner/index.d.ts +3 -0
- package/build/components/Spinner/index.d.ts.map +1 -0
- package/build/components/Spinner/index.js +2 -0
- package/build/components/Spinner/index.js.map +1 -0
- package/build/components/StepSheet/StepSheet.d.ts +77 -0
- package/build/components/StepSheet/StepSheet.d.ts.map +1 -0
- package/build/components/StepSheet/StepSheet.js +30 -0
- package/build/components/StepSheet/StepSheet.js.map +1 -0
- package/build/components/StepSheet/StepSheet.styles.d.ts +6 -0
- package/build/components/StepSheet/StepSheet.styles.d.ts.map +1 -0
- package/build/components/StepSheet/StepSheet.styles.js +7 -0
- package/build/components/StepSheet/StepSheet.styles.js.map +1 -0
- package/build/components/StepSheet/index.d.ts +3 -0
- package/build/components/StepSheet/index.d.ts.map +1 -0
- package/build/components/StepSheet/index.js +2 -0
- package/build/components/StepSheet/index.js.map +1 -0
- package/build/components/Stepper/Stepper.d.ts +50 -0
- package/build/components/Stepper/Stepper.d.ts.map +1 -0
- package/build/components/Stepper/Stepper.js +48 -0
- package/build/components/Stepper/Stepper.js.map +1 -0
- package/build/components/Stepper/Stepper.styles.d.ts +27 -0
- package/build/components/Stepper/Stepper.styles.d.ts.map +1 -0
- package/build/components/Stepper/Stepper.styles.js +28 -0
- package/build/components/Stepper/Stepper.styles.js.map +1 -0
- package/build/components/Stepper/index.d.ts +3 -0
- package/build/components/Stepper/index.d.ts.map +1 -0
- package/build/components/Stepper/index.js +2 -0
- package/build/components/Stepper/index.js.map +1 -0
- package/build/components/Switch/Switch.d.ts +29 -0
- package/build/components/Switch/Switch.d.ts.map +1 -0
- package/build/components/Switch/Switch.js +89 -0
- package/build/components/Switch/Switch.js.map +1 -0
- package/build/components/Switch/Switch.styles.d.ts +29 -0
- package/build/components/Switch/Switch.styles.d.ts.map +1 -0
- package/build/components/Switch/Switch.styles.js +26 -0
- package/build/components/Switch/Switch.styles.js.map +1 -0
- package/build/components/Switch/index.d.ts +3 -0
- package/build/components/Switch/index.d.ts.map +1 -0
- package/build/components/Switch/index.js +2 -0
- package/build/components/Switch/index.js.map +1 -0
- package/build/components/Tab/Tab.d.ts +52 -0
- package/build/components/Tab/Tab.d.ts.map +1 -0
- package/build/components/Tab/Tab.js +121 -0
- package/build/components/Tab/Tab.js.map +1 -0
- package/build/components/Tab/Tab.styles.d.ts +55 -0
- package/build/components/Tab/Tab.styles.d.ts.map +1 -0
- package/build/components/Tab/Tab.styles.js +60 -0
- package/build/components/Tab/Tab.styles.js.map +1 -0
- package/build/components/Tab/index.d.ts +3 -0
- package/build/components/Tab/index.d.ts.map +1 -0
- package/build/components/Tab/index.js +2 -0
- package/build/components/Tab/index.js.map +1 -0
- package/build/components/Tag/Tag.d.ts +4 -0
- package/build/components/Tag/Tag.d.ts.map +1 -0
- package/build/components/Tag/Tag.js +40 -0
- package/build/components/Tag/Tag.js.map +1 -0
- package/build/components/Tag/Tag.styles.d.ts +35 -0
- package/build/components/Tag/Tag.styles.d.ts.map +1 -0
- package/build/components/Tag/Tag.styles.js +43 -0
- package/build/components/Tag/Tag.styles.js.map +1 -0
- package/build/components/Tag/Tag.types.d.ts +23 -0
- package/build/components/Tag/Tag.types.d.ts.map +1 -0
- package/build/components/Tag/Tag.types.js +2 -0
- package/build/components/Tag/Tag.types.js.map +1 -0
- package/build/components/Tag/index.d.ts +3 -0
- package/build/components/Tag/index.d.ts.map +1 -0
- package/build/components/Tag/index.js +2 -0
- package/build/components/Tag/index.js.map +1 -0
- package/build/components/navigation/GeneralNav/GeneralNav.d.ts +21 -0
- package/build/components/navigation/GeneralNav/GeneralNav.d.ts.map +1 -0
- package/build/components/navigation/GeneralNav/GeneralNav.js +25 -0
- package/build/components/navigation/GeneralNav/GeneralNav.js.map +1 -0
- package/build/components/navigation/GeneralNav/GeneralNav.styles.d.ts +33 -0
- package/build/components/navigation/GeneralNav/GeneralNav.styles.d.ts.map +1 -0
- package/build/components/navigation/GeneralNav/GeneralNav.styles.js +35 -0
- package/build/components/navigation/GeneralNav/GeneralNav.styles.js.map +1 -0
- package/build/components/navigation/GeneralNav/index.d.ts +3 -0
- package/build/components/navigation/GeneralNav/index.d.ts.map +1 -0
- package/build/components/navigation/GeneralNav/index.js +2 -0
- package/build/components/navigation/GeneralNav/index.js.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.d.ts +11 -0
- package/build/components/navigation/MobileCanva/MobileCanva.d.ts.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.js +45 -0
- package/build/components/navigation/MobileCanva/MobileCanva.js.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.styles.d.ts +93 -0
- package/build/components/navigation/MobileCanva/MobileCanva.styles.d.ts.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.styles.js +94 -0
- package/build/components/navigation/MobileCanva/MobileCanva.styles.js.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.types.d.ts +21 -0
- package/build/components/navigation/MobileCanva/MobileCanva.types.d.ts.map +1 -0
- package/build/components/navigation/MobileCanva/MobileCanva.types.js +2 -0
- package/build/components/navigation/MobileCanva/MobileCanva.types.js.map +1 -0
- package/build/components/navigation/MobileCanva/index.d.ts +3 -0
- package/build/components/navigation/MobileCanva/index.d.ts.map +1 -0
- package/build/components/navigation/MobileCanva/index.js +2 -0
- package/build/components/navigation/MobileCanva/index.js.map +1 -0
- package/build/components/navigation/PageNav/PageNav.d.ts +46 -0
- package/build/components/navigation/PageNav/PageNav.d.ts.map +1 -0
- package/build/components/navigation/PageNav/PageNav.js +48 -0
- package/build/components/navigation/PageNav/PageNav.js.map +1 -0
- package/build/components/navigation/PageNav/PageNav.styles.d.ts +60 -0
- package/build/components/navigation/PageNav/PageNav.styles.d.ts.map +1 -0
- package/build/components/navigation/PageNav/PageNav.styles.js +60 -0
- package/build/components/navigation/PageNav/PageNav.styles.js.map +1 -0
- package/build/components/navigation/PageNav/index.d.ts +3 -0
- package/build/components/navigation/PageNav/index.d.ts.map +1 -0
- package/build/components/navigation/PageNav/index.js +2 -0
- package/build/components/navigation/PageNav/index.js.map +1 -0
- package/build/components/navigation/TabBar/TabBar.d.ts +22 -0
- package/build/components/navigation/TabBar/TabBar.d.ts.map +1 -0
- package/build/components/navigation/TabBar/TabBar.js +13 -0
- package/build/components/navigation/TabBar/TabBar.js.map +1 -0
- package/build/components/navigation/TabBar/TabBar.styles.d.ts +14 -0
- package/build/components/navigation/TabBar/TabBar.styles.d.ts.map +1 -0
- package/build/components/navigation/TabBar/TabBar.styles.js +16 -0
- package/build/components/navigation/TabBar/TabBar.styles.js.map +1 -0
- package/build/components/navigation/TabBar/index.d.ts +3 -0
- package/build/components/navigation/TabBar/index.d.ts.map +1 -0
- package/build/components/navigation/TabBar/index.js +2 -0
- package/build/components/navigation/TabBar/index.js.map +1 -0
- package/build/context/BottomSheetContext.d.ts +42 -0
- package/build/context/BottomSheetContext.d.ts.map +1 -0
- package/build/context/BottomSheetContext.js +51 -0
- package/build/context/BottomSheetContext.js.map +1 -0
- package/build/context/ThemeContext.d.ts +5 -1
- package/build/context/ThemeContext.d.ts.map +1 -1
- package/build/context/ThemeContext.js +4 -2
- package/build/context/ThemeContext.js.map +1 -1
- package/build/index.d.ts +77 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +38 -0
- package/build/index.js.map +1 -1
- package/build/theme/tokens/dark.d.ts.map +1 -1
- package/build/theme/tokens/dark.js +263 -10
- package/build/theme/tokens/dark.js.map +1 -1
- package/build/theme/tokens/light.d.ts.map +1 -1
- package/build/theme/tokens/light.js +252 -7
- package/build/theme/tokens/light.js.map +1 -1
- package/build/theme/type.d.ts +398 -0
- package/build/theme/type.d.ts.map +1 -1
- package/build/theme/type.js.map +1 -1
- 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":"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","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 @@
|
|
|
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 @@
|
|
|
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"]}
|