aport-tools 4.2.11 → 4.2.13

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.
@@ -0,0 +1,16 @@
1
+ import React from "react";
2
+ interface InputCheckProps {
3
+ name: string;
4
+ options: {
5
+ id: string;
6
+ label: string;
7
+ icon?: string;
8
+ }[];
9
+ multi?: boolean;
10
+ max?: number;
11
+ rowAmount?: number;
12
+ iconPosition?: "row" | "column";
13
+ disabled?: boolean;
14
+ }
15
+ declare const InputCheck: React.FC<InputCheckProps>;
16
+ export default InputCheck;
@@ -4,4 +4,5 @@ export { default as TextArea } from './TextArea';
4
4
  export { default as Label } from './Label';
5
5
  export { default as ErrorList } from './ErrorList';
6
6
  export { InputList } from './InputList';
7
+ export { default as InputCheck } from './InputCheck';
7
8
  export { default as InputAttach } from './InputAttach';
package/dist/index.esm.js CHANGED
@@ -1,6 +1,6 @@
1
- /*! aport-tools v4.2.11 | ISC */
1
+ /*! aport-tools v4.2.13 | ISC */
2
2
  import React, { useContext, useState, createContext, useCallback, useMemo } from 'react';
3
- import { StyleSheet, Text as Text$1, View, TextInput, TouchableOpacity, Modal, Pressable, FlatList, Keyboard, Image, Alert, ActivityIndicator, Platform } from 'react-native';
3
+ import { StyleSheet, Text as Text$1, View, TextInput, TouchableOpacity, Modal, Pressable, FlatList, Keyboard, Platform, Image, Alert, ActivityIndicator } from 'react-native';
4
4
  import { ThemeContext } from 'aport-themes';
5
5
  import * as ImagePicker from 'expo-image-picker';
6
6
 
@@ -231,23 +231,23 @@ var ErrorList = function ErrorList(_a) {
231
231
  var theme = useContext(ThemeContext).theme;
232
232
  var colors = theme.colors;
233
233
  return /*#__PURE__*/React.createElement(View, {
234
- style: styles$7.container
234
+ style: styles$8.container
235
235
  }, errors.map(function (error, index) {
236
236
  return /*#__PURE__*/React.createElement(View, {
237
237
  key: index,
238
- style: styles$7.errorItem
238
+ style: styles$8.errorItem
239
239
  }, /*#__PURE__*/React.createElement(Text, {
240
- style: [styles$7.bullet, {
240
+ style: [styles$8.bullet, {
241
241
  color: colors.error.hex
242
242
  }]
243
243
  }, "\u2022"), /*#__PURE__*/React.createElement(Text, {
244
- style: [styles$7.errorText, {
244
+ style: [styles$8.errorText, {
245
245
  color: colors.error.hex
246
246
  }]
247
247
  }, error));
248
248
  }));
249
249
  };
250
- var styles$7 = StyleSheet.create({
250
+ var styles$8 = StyleSheet.create({
251
251
  container: {
252
252
  marginTop: 4
253
253
  },
@@ -325,13 +325,13 @@ var Input = function Input(_a) {
325
325
  setFormValue(name, formattedText);
326
326
  };
327
327
  return /*#__PURE__*/React.createElement(View, {
328
- style: styles$6.container
328
+ style: styles$7.container
329
329
  }, /*#__PURE__*/React.createElement(Text, {
330
- style: [styles$6.label, {
330
+ style: [styles$7.label, {
331
331
  color: colors.text.hex
332
332
  }]
333
333
  }, label), /*#__PURE__*/React.createElement(TextInput, __assign({
334
- style: [styles$6.input, {
334
+ style: [styles$7.input, {
335
335
  backgroundColor: colors.body.hex,
336
336
  borderColor: formErrors[name] ? colors.error.hex : "#CCC",
337
337
  color: colors.text.hex
@@ -344,7 +344,7 @@ var Input = function Input(_a) {
344
344
  errors: formErrors[name]
345
345
  })));
346
346
  };
347
- var styles$6 = StyleSheet.create({
347
+ var styles$7 = StyleSheet.create({
348
348
  container: {
349
349
  marginBottom: 16
350
350
  },
@@ -377,13 +377,13 @@ var TextArea = function TextArea(_a) {
377
377
  setFormValue(name, text);
378
378
  };
379
379
  return /*#__PURE__*/React.createElement(View, {
380
- style: styles$5.container
380
+ style: styles$6.container
381
381
  }, /*#__PURE__*/React.createElement(Text, {
382
- style: [styles$5.label, {
382
+ style: [styles$6.label, {
383
383
  color: colors.text.hex
384
384
  }]
385
385
  }, label), /*#__PURE__*/React.createElement(TextInput, __assign({
386
- style: [styles$5.textArea, style, {
386
+ style: [styles$6.textArea, style, {
387
387
  backgroundColor: colors.body.hex,
388
388
  color: colors.text.hex,
389
389
  borderColor: colors.placeHolder.hex
@@ -400,7 +400,7 @@ var TextArea = function TextArea(_a) {
400
400
  errors: formErrors[name]
401
401
  })));
402
402
  };
403
- var styles$5 = StyleSheet.create({
403
+ var styles$6 = StyleSheet.create({
404
404
  container: {
405
405
  marginBottom: 16
406
406
  },
@@ -423,12 +423,12 @@ var Label = function Label(_a) {
423
423
  var theme = useContext(ThemeContext).theme;
424
424
  var colors = theme.colors;
425
425
  return /*#__PURE__*/React.createElement(Text, {
426
- style: [styles$4.label, style, {
426
+ style: [styles$5.label, style, {
427
427
  color: colors.text.hex
428
428
  }]
429
429
  }, text);
430
430
  };
431
- var styles$4 = StyleSheet.create({
431
+ var styles$5 = StyleSheet.create({
432
432
  label: {
433
433
  marginBottom: 4,
434
434
  fontWeight: '500'
@@ -541,14 +541,14 @@ var InputList = function InputList(_a) {
541
541
  });
542
542
  };
543
543
  return /*#__PURE__*/React.createElement(View, {
544
- style: [styles$3.container, style]
544
+ style: [styles$4.container, style]
545
545
  }, /*#__PURE__*/React.createElement(Text$1, {
546
546
  style: {
547
547
  color: colors.text.hex,
548
548
  marginBottom: 4
549
549
  }
550
550
  }, name), /*#__PURE__*/React.createElement(TouchableOpacity, {
551
- style: styles$3.inputContainer,
551
+ style: styles$4.inputContainer,
552
552
  onPress: toggleDropdown,
553
553
  disabled: disabled
554
554
  }, /*#__PURE__*/React.createElement(Text$1, {
@@ -560,10 +560,10 @@ var InputList = function InputList(_a) {
560
560
  transparent: true,
561
561
  animationType: "fade"
562
562
  }, /*#__PURE__*/React.createElement(Pressable, {
563
- style: styles$3.overlay,
563
+ style: styles$4.overlay,
564
564
  onPress: handleCloseDropdown
565
565
  }), /*#__PURE__*/React.createElement(View, {
566
- style: [styles$3.dropdownContainer, {
566
+ style: [styles$4.dropdownContainer, {
567
567
  backgroundColor: colors.body.hex
568
568
  }]
569
569
  }, /*#__PURE__*/React.createElement(FlatList, {
@@ -581,7 +581,7 @@ var InputList = function InputList(_a) {
581
581
  onPress: function onPress() {
582
582
  return handleSelectOption(item);
583
583
  },
584
- style: [styles$3.optionItem, isSelected ? {
584
+ style: [styles$4.optionItem, isSelected ? {
585
585
  backgroundColor: colors.primary.hex
586
586
  } : {}, isDisabled ? {
587
587
  backgroundColor: colors.placeHolder.hex
@@ -592,18 +592,18 @@ var InputList = function InputList(_a) {
592
592
  color: colors.body.hex
593
593
  } : {
594
594
  color: colors.text.hex
595
- }, isDisabled ? styles$3.disabledText : {}]
595
+ }, isDisabled ? styles$4.disabledText : {}]
596
596
  }, item.label));
597
597
  },
598
598
  ItemSeparatorComponent: function ItemSeparatorComponent() {
599
599
  return separator ? /*#__PURE__*/React.createElement(View, {
600
- style: styles$3.separator
600
+ style: styles$4.separator
601
601
  }) : null;
602
602
  },
603
603
  scrollEnabled: !closeOnScroll
604
604
  }))));
605
605
  };
606
- var styles$3 = StyleSheet.create({
606
+ var styles$4 = StyleSheet.create({
607
607
  container: {},
608
608
  inputContainer: {
609
609
  padding: 12,
@@ -639,6 +639,178 @@ var styles$3 = StyleSheet.create({
639
639
  }
640
640
  });
641
641
 
642
+ // src/cards/Card.tsx
643
+ /**
644
+ * Card component that adapts its styles based on the current theme.
645
+ * Supports dynamic styling, shadows, and press animations.
646
+ *
647
+ * @param children - The content to be displayed inside the Card.
648
+ * @param style - Additional styles to apply to the Card.
649
+ * @param onPress - Function to execute when the Card is pressed.
650
+ * @param pressable - Determines if the Card is pressable. Defaults to false.
651
+ * @param borderRadius - Border radius of the Card. Defaults to 12.
652
+ * @param elevation - Elevation for Android shadow. Overrides default.
653
+ * @param shadowProps - Custom shadow properties for iOS. Overrides defaults.
654
+ */
655
+ var Card = function Card(_a) {
656
+ var children = _a.children,
657
+ style = _a.style,
658
+ onPress = _a.onPress,
659
+ _b = _a.pressable,
660
+ pressable = _b === void 0 ? false : _b,
661
+ _c = _a.borderRadius,
662
+ borderRadius = _c === void 0 ? 12 : _c,
663
+ _d = _a.elevation,
664
+ elevation = _d === void 0 ? 4 : _d,
665
+ _e = _a.shadowProps,
666
+ shadowProps = _e === void 0 ? {} : _e;
667
+ var theme = useContext(ThemeContext).theme;
668
+ var colors = theme.colors;
669
+ // Animation state for pressable effect
670
+ // Default shadow styles (improved platform-specific handling)
671
+ var defaultShadow = Platform.select({
672
+ ios: {
673
+ shadowColor: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowColor) || colors.text.hex,
674
+ // Defaulting to theme text color
675
+ shadowOffset: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowOffset) || {
676
+ width: 0,
677
+ height: 2
678
+ },
679
+ shadowOpacity: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowOpacity) || 0.1,
680
+ shadowRadius: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowRadius) || 4
681
+ },
682
+ android: {
683
+ elevation: elevation // Only applies to Android
684
+ }
685
+ });
686
+ var cardStyles = [styles$3.container, {
687
+ borderRadius: borderRadius,
688
+ backgroundColor: colors.background.hex
689
+ }, defaultShadow,
690
+ // Dynamic shadows based on platform
691
+ style // External styles
692
+ ];
693
+ return pressable ? (/*#__PURE__*/React.createElement(TouchableOpacity, {
694
+ activeOpacity: 0.8,
695
+ onPress: onPress,
696
+ style: cardStyles
697
+ }, children)) : (/*#__PURE__*/React.createElement(View, {
698
+ style: cardStyles
699
+ }, children));
700
+ };
701
+ var styles$3 = StyleSheet.create({
702
+ container: {
703
+ padding: 16,
704
+ borderRadius: 12
705
+ // Shadows handled dynamically with platform logic
706
+ }
707
+ });
708
+
709
+ var InputCheck = function InputCheck(_a) {
710
+ var name = _a.name,
711
+ options = _a.options,
712
+ _b = _a.multi,
713
+ multi = _b === void 0 ? false : _b,
714
+ max = _a.max,
715
+ _c = _a.rowAmount,
716
+ rowAmount = _c === void 0 ? 3 : _c,
717
+ _d = _a.iconPosition,
718
+ iconPosition = _d === void 0 ? "row" : _d,
719
+ _e = _a.disabled,
720
+ disabled = _e === void 0 ? false : _e;
721
+ var _f = useFormContext(),
722
+ formValues = _f.formValues,
723
+ setFormValue = _f.setFormValue;
724
+ var _g = useState(formValues[name] || []),
725
+ selectedValues = _g[0],
726
+ setSelectedValues = _g[1];
727
+ var theme = useContext(ThemeContext).theme;
728
+ var colors = theme.colors;
729
+ var handleSelect = function handleSelect(id) {
730
+ if (disabled) return;
731
+ var updatedSelection;
732
+ if (multi) {
733
+ if (selectedValues.includes(id)) {
734
+ updatedSelection = selectedValues.filter(function (value) {
735
+ return value !== id;
736
+ });
737
+ } else {
738
+ if (max && selectedValues.length >= max) return; // Prevent selection beyond max
739
+ updatedSelection = __spreadArray(__spreadArray([], selectedValues, true), [id], false);
740
+ }
741
+ } else {
742
+ updatedSelection = [id];
743
+ }
744
+ setSelectedValues(updatedSelection);
745
+ setFormValue(name, updatedSelection);
746
+ };
747
+ var renderItem = function renderItem(_a) {
748
+ var item = _a.item;
749
+ var isSelected = selectedValues.includes(item.id);
750
+ return /*#__PURE__*/React.createElement(Card, {
751
+ pressable: true,
752
+ onPress: function onPress() {
753
+ return handleSelect(item.id);
754
+ },
755
+ style: [styles$2.card, isSelected && {
756
+ backgroundColor: colors.primary.hex
757
+ },
758
+ // Replace with colors.primary.hex if available
759
+ disabled && styles$2.cardDisabled]
760
+ }, item.icon && (/*#__PURE__*/React.createElement(Image, {
761
+ source: {
762
+ uri: item.icon
763
+ },
764
+ style: [styles$2.icon, iconPosition === "column" && styles$2.iconColumn]
765
+ })), /*#__PURE__*/React.createElement(Text, {
766
+ style: [styles$2.label, {
767
+ color: isSelected ? colors.textButton.hex : colors.text.hex
768
+ } // Replace with colors.textButton.hex
769
+ ]
770
+ }, item.label));
771
+ };
772
+ return /*#__PURE__*/React.createElement(FlatList, {
773
+ data: options,
774
+ renderItem: renderItem,
775
+ keyExtractor: function keyExtractor(item) {
776
+ return item.id;
777
+ },
778
+ numColumns: rowAmount,
779
+ columnWrapperStyle: rowAmount > 1 ? styles$2.row : undefined,
780
+ scrollEnabled: false
781
+ });
782
+ };
783
+ var styles$2 = StyleSheet.create({
784
+ card: {
785
+ flex: 1,
786
+ margin: 5,
787
+ padding: 10,
788
+ borderWidth: 1,
789
+ borderColor: "#ccc",
790
+ borderRadius: 8,
791
+ alignItems: "center",
792
+ justifyContent: "center"
793
+ },
794
+ cardDisabled: {
795
+ opacity: 0.5
796
+ },
797
+ icon: {
798
+ width: 40,
799
+ height: 40,
800
+ marginBottom: 5
801
+ },
802
+ iconColumn: {
803
+ marginBottom: 10
804
+ },
805
+ label: {
806
+ fontSize: 14,
807
+ textAlign: "center"
808
+ },
809
+ row: {
810
+ justifyContent: "space-between"
811
+ }
812
+ });
813
+
642
814
  // src/components/InputAttach.tsx
643
815
  var InputAttach = function InputAttach(_a) {
644
816
  var name = _a.name,
@@ -720,49 +892,49 @@ var InputAttach = function InputAttach(_a) {
720
892
  setFormValue(name, updatedFiles); // Update form context
721
893
  };
722
894
  return /*#__PURE__*/React.createElement(View, {
723
- style: styles$2.container
895
+ style: styles$1.container
724
896
  }, /*#__PURE__*/React.createElement(Text, {
725
- style: [styles$2.label, {
897
+ style: [styles$1.label, {
726
898
  color: colors.text.hex
727
899
  }]
728
900
  }, placeholder), /*#__PURE__*/React.createElement(View, {
729
- style: styles$2.fileContainer
901
+ style: styles$1.fileContainer
730
902
  }, selectedFiles.map(function (file, index) {
731
903
  return /*#__PURE__*/React.createElement(View, {
732
904
  key: index,
733
- style: styles$2.fileItem
905
+ style: styles$1.fileItem
734
906
  }, /*#__PURE__*/React.createElement(Image, {
735
907
  source: {
736
908
  uri: file.uri
737
909
  },
738
- style: styles$2.imagePreview
910
+ style: styles$1.imagePreview
739
911
  }), /*#__PURE__*/React.createElement(TouchableOpacity, {
740
912
  onPress: function onPress() {
741
913
  return removeFile(index);
742
914
  },
743
- style: [styles$2.removeButton, {
915
+ style: [styles$1.removeButton, {
744
916
  backgroundColor: colors.error.hex
745
917
  }]
746
918
  }, /*#__PURE__*/React.createElement(Text, {
747
- style: styles$2.removeButtonText
919
+ style: styles$1.removeButtonText
748
920
  }, "X")));
749
921
  }), selectedFiles.length < amount && (/*#__PURE__*/React.createElement(TouchableOpacity, {
750
922
  onPress: pickImage,
751
- style: [styles$2.addButton, {
923
+ style: [styles$1.addButton, {
752
924
  backgroundColor: colors.body.hex
753
925
  }],
754
926
  disabled: disabled
755
927
  }, /*#__PURE__*/React.createElement(Text, {
756
- style: [styles$2.addButtonText, {
928
+ style: [styles$1.addButtonText, {
757
929
  color: colors.placeHolder.hex
758
930
  }]
759
931
  }, "+")))), errors[name] && /*#__PURE__*/React.createElement(Text, {
760
- style: [styles$2.error, {
932
+ style: [styles$1.error, {
761
933
  color: colors.error.hex
762
934
  }]
763
935
  }, errors[name].join(", ")));
764
936
  };
765
- var styles$2 = StyleSheet.create({
937
+ var styles$1 = StyleSheet.create({
766
938
  container: {
767
939
  marginVertical: 10
768
940
  },
@@ -878,11 +1050,11 @@ var Button = function Button(_a) {
878
1050
  var colors = theme.colors;
879
1051
  var handleSubmit = useFormContext().handleSubmit;
880
1052
  var computedStyles = useMemo(function () {
881
- return StyleSheet.flatten([styles$1.button, typeStyles(type, disabled, colors), rounded && {
1053
+ return StyleSheet.flatten([styles.button, typeStyles(type, disabled, colors), rounded && {
882
1054
  borderRadius: borderRadius
883
1055
  }, isFullWidth && {
884
1056
  width: '100%'
885
- }, (disabled || loading) && styles$1.disabled]);
1057
+ }, (disabled || loading) && styles.disabled]);
886
1058
  }, [type, disabled, loading, rounded, borderRadius, isFullWidth, colors]);
887
1059
  var textColor = useMemo(function () {
888
1060
  return type === "cancel" ? {
@@ -913,7 +1085,7 @@ var Button = function Button(_a) {
913
1085
  style: textColor
914
1086
  }, Array.isArray(children) ? children.join('').toUpperCase() : children === null || children === void 0 ? void 0 : children.toUpperCase())));
915
1087
  };
916
- var styles$1 = StyleSheet.create({
1088
+ var styles = StyleSheet.create({
917
1089
  button: {
918
1090
  justifyContent: 'center',
919
1091
  alignItems: 'center',
@@ -925,72 +1097,5 @@ var styles$1 = StyleSheet.create({
925
1097
  }
926
1098
  });
927
1099
 
928
- // src/cards/Card.tsx
929
- /**
930
- * Card component that adapts its styles based on the current theme.
931
- * Supports dynamic styling, shadows, and press animations.
932
- *
933
- * @param children - The content to be displayed inside the Card.
934
- * @param style - Additional styles to apply to the Card.
935
- * @param onPress - Function to execute when the Card is pressed.
936
- * @param pressable - Determines if the Card is pressable. Defaults to false.
937
- * @param borderRadius - Border radius of the Card. Defaults to 12.
938
- * @param elevation - Elevation for Android shadow. Overrides default.
939
- * @param shadowProps - Custom shadow properties for iOS. Overrides defaults.
940
- */
941
- var Card = function Card(_a) {
942
- var children = _a.children,
943
- style = _a.style,
944
- onPress = _a.onPress,
945
- _b = _a.pressable,
946
- pressable = _b === void 0 ? false : _b,
947
- _c = _a.borderRadius,
948
- borderRadius = _c === void 0 ? 12 : _c,
949
- _d = _a.elevation,
950
- elevation = _d === void 0 ? 4 : _d,
951
- _e = _a.shadowProps,
952
- shadowProps = _e === void 0 ? {} : _e;
953
- var theme = useContext(ThemeContext).theme;
954
- var colors = theme.colors;
955
- // Animation state for pressable effect
956
- // Default shadow styles (improved platform-specific handling)
957
- var defaultShadow = Platform.select({
958
- ios: {
959
- shadowColor: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowColor) || colors.text.hex,
960
- // Defaulting to theme text color
961
- shadowOffset: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowOffset) || {
962
- width: 0,
963
- height: 2
964
- },
965
- shadowOpacity: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowOpacity) || 0.1,
966
- shadowRadius: (shadowProps === null || shadowProps === void 0 ? void 0 : shadowProps.shadowRadius) || 4
967
- },
968
- android: {
969
- elevation: elevation // Only applies to Android
970
- }
971
- });
972
- var cardStyles = [styles.container, {
973
- borderRadius: borderRadius,
974
- backgroundColor: colors.background.hex
975
- }, defaultShadow,
976
- // Dynamic shadows based on platform
977
- style // External styles
978
- ];
979
- return pressable ? (/*#__PURE__*/React.createElement(TouchableOpacity, {
980
- activeOpacity: 0.8,
981
- onPress: onPress,
982
- style: cardStyles
983
- }, children)) : (/*#__PURE__*/React.createElement(View, {
984
- style: cardStyles
985
- }, children));
986
- };
987
- var styles = StyleSheet.create({
988
- container: {
989
- padding: 16,
990
- borderRadius: 12
991
- // Shadows handled dynamically with platform logic
992
- }
993
- });
994
-
995
- export { Button, Card, ErrorList, Form, Input, InputAttach, InputList, Label, Text, TextArea, useFormContext };
1100
+ export { Button, Card, ErrorList, Form, Input, InputAttach, InputCheck, InputList, Label, Text, TextArea, useFormContext };
996
1101
  //# sourceMappingURL=index.esm.js.map