@controleonline/ui-default 1.0.270 → 1.0.273

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 (100) hide show
  1. package/.github/workflows/integration-source-gate.yml +68 -0
  2. package/.github/workflows/manager-worker.yml +19 -0
  3. package/.github/workflows/publish-npm.yml +91 -0
  4. package/AGENTS.md +46 -50
  5. package/docs/technical/Contrato-de-colunas.md +67 -0
  6. package/docs/technical/Default-Components.md +76 -0
  7. package/docs/technical/DefaultForm.md +80 -0
  8. package/docs/technical/DefaultInput-e-DefaultSelect.md +73 -0
  9. package/docs/technical/DefaultTable.md +272 -0
  10. package/docs/wiki.md +1 -0
  11. package/package.json +4 -3
  12. package/scripts/validate-wiki-pointer.cjs +13 -0
  13. package/src/react/components/address/DefaultAddress.js +446 -0
  14. package/src/react/components/address/DefaultAddress.styles.js +133 -0
  15. package/src/react/components/address/DefaultAddressCoordFields.js +59 -0
  16. package/src/react/components/address/DefaultAddressMapPane.js +55 -0
  17. package/src/react/components/address/LatLonReadonlyFields.js +51 -0
  18. package/src/react/components/address/defaultAddressHelpers.js +163 -0
  19. package/src/react/components/address/defaultAddressStyles.js +148 -0
  20. package/src/react/components/address/defaultAddressUtils.js +129 -0
  21. package/src/react/components/extra-data/DefaultExtraData.js +152 -0
  22. package/src/react/components/extra-data/DefaultExtraData.styles.js +61 -0
  23. package/src/react/components/files/DefaultFile.js +231 -46
  24. package/src/react/components/files/DefaultFileColumn.js +123 -0
  25. package/src/react/components/files/DefaultFileColumn.styles.js +52 -0
  26. package/src/react/components/files/DefaultFileColumn.utils.js +104 -0
  27. package/src/react/components/filters/CompactFilterSelector.js +51 -35
  28. package/src/react/components/filters/DefaultColumnFilter.js +60 -48
  29. package/src/react/components/filters/DefaultExternalFilters.js +324 -265
  30. package/src/react/components/filters/filterValue.js +65 -0
  31. package/src/react/components/form/DefaultForm.js +99 -79
  32. package/src/react/components/help/DefaultTooltip.js +48 -12
  33. package/src/react/components/help/DefaultTooltip.styles.js +20 -0
  34. package/src/react/components/inputs/DefaultColorInput.js +153 -0
  35. package/src/react/components/inputs/DefaultFeatherIconPicker.js +146 -0
  36. package/src/react/components/inputs/DefaultFeatherIconPicker.styles.js +113 -0
  37. package/src/react/components/inputs/DefaultInput.js +296 -141
  38. package/src/react/components/inputs/DefaultInput.styles.js +26 -0
  39. package/src/react/components/inputs/DefaultSelect.js +134 -123
  40. package/src/react/components/inputs/defaultInputUtils.js +262 -213
  41. package/src/react/components/map/DefaultMap.native.js +73 -73
  42. package/src/react/components/map/DefaultMap.shared.js +911 -762
  43. package/src/react/components/map/DefaultMap.web.js +124 -68
  44. package/src/react/components/table/DefaultColumnMenu.js +22 -3
  45. package/src/react/components/table/DefaultDebug.js +44 -37
  46. package/src/react/components/table/DefaultSearchModal.js +9 -1
  47. package/src/react/components/table/DefaultTable.grouping.js +98 -0
  48. package/src/react/components/table/DefaultTable.js +217 -111
  49. package/src/react/components/table/DefaultTable.styles.js +369 -310
  50. package/src/react/components/table/DefaultTable.utils.js +38 -4
  51. package/src/react/components/table/DefaultTableBody.js +13 -8
  52. package/src/react/components/table/DefaultTableCards.js +20 -1
  53. package/src/react/components/table/DefaultTableControls.js +180 -205
  54. package/src/react/components/table/DefaultTableImportModal.js +108 -0
  55. package/src/react/components/table/DefaultTableInput.js +1 -0
  56. package/src/react/components/table/DefaultTableRowActions.js +1 -1
  57. package/src/react/components/table/DefaultTableRows.js +357 -325
  58. package/src/react/components/table/DefaultTableSearch.js +28 -5
  59. package/src/react/components/table/DefaultTableToolbar.js +92 -3
  60. package/src/react/components/table/useDefaultTablePagination.js +56 -7
  61. package/src/react/components/table/useDefaultTableStoreSync.js +164 -0
  62. package/src/react/components/upload/DefaultUpload.js +406 -0
  63. package/src/react/components/upload/DefaultUpload.styles.js +153 -0
  64. package/src/react/components/upload/DefaultUploadAttachmentsList.js +146 -0
  65. package/src/react/components/upload/DefaultUploadManagerModal.js +247 -0
  66. package/src/react/components/upload/defaultUploadHelpers.js +108 -0
  67. package/src/react/components/upload/defaultUploadLibrary.js +248 -0
  68. package/src/react/components/upload/fileUpload.js +93 -0
  69. package/src/react/hooks/usePostalCodeLookup.js +159 -0
  70. package/src/react/index.js +6 -0
  71. package/src/react/services/addressFormUtils.js +262 -0
  72. package/src/react/services/addressGeo.js +230 -0
  73. package/src/react/utils/tableVisibleColumnsPreferences.js +113 -15
  74. package/src/tests/react/components/address/defaultAddressHelpers.test.js +104 -0
  75. package/src/tests/react/components/files/DefaultFile.test.js +22 -6
  76. package/src/tests/react/components/files/DefaultFileColumn.company.test.js +24 -0
  77. package/src/tests/react/components/form/DefaultForm.test.js +123 -0
  78. package/src/tests/react/components/help/DefaultTooltip.test.js +93 -0
  79. package/src/tests/react/components/inputs/DefaultSelect.test.js +108 -79
  80. package/src/tests/react/components/table/DefaultTable.grouping.test.js +49 -0
  81. package/src/tests/react/components/table/DefaultTable.test.js +53 -2
  82. package/src/tests/react/components/table/DefaultTable.utils.test.js +10 -0
  83. package/src/tests/react/components/table/DefaultTableControls.filters.test.mjs +21 -0
  84. package/src/tests/react/components/table/DefaultTableRowActions.test.js +23 -0
  85. package/src/tests/react/components/table/DefaultTableRows.rowActions.test.js +152 -0
  86. package/src/tests/react/components/table/resolveRowBackgroundColor.test.mjs +45 -0
  87. package/src/tests/react/components/table/useDefaultTableStoreSync.test.js +161 -0
  88. package/src/tests/react/components/upload/DefaultUpload.test.js +353 -0
  89. package/src/tests/react/components/upload/defaultUploadLibrary.test.js +104 -0
  90. package/src/tests/react/components/upload/peopleMediaLibraryPreview.test.mjs +57 -0
  91. package/src/tests/react/filters/filterValue.test.js +46 -0
  92. package/src/tests/react/hooks/usePostalCodeLookup.test.js +107 -0
  93. package/src/tests/react/inputs/defaultInputUtils.test.js +9 -1
  94. package/src/tests/react/services/SMOKE-637-cep-hydrate.md +45 -0
  95. package/src/tests/react/services/addressFormUtils.test.js +179 -0
  96. package/src/tests/react/services/addressGeoLookup.async.test.js +104 -0
  97. package/src/tests/react/services/addressGeoLookup.test.js +105 -0
  98. package/src/tests/react/services/smoke-637/form-cep-12941040.png +0 -0
  99. package/src/tests/react/services/smoke-637/index.html +132 -0
  100. package/src/tests/react/utils/tableVisibleColumnsPreferences.test.js +96 -49
@@ -0,0 +1,146 @@
1
+ import React, {useEffect, useMemo, useState} from 'react';
2
+ import {
3
+ Modal,
4
+ ScrollView,
5
+ Text,
6
+ TextInput,
7
+ TouchableOpacity,
8
+ View,
9
+ } from 'react-native';
10
+ import Icon from 'react-native-vector-icons/Feather';
11
+ import FeatherGlyphMap from 'react-native-vector-icons/glyphmaps/Feather.json';
12
+ import styles from './DefaultFeatherIconPicker.styles';
13
+
14
+ export const FEATHER_ICON_OPTIONS = Object.keys(FeatherGlyphMap)
15
+ .sort((left, right) => left.localeCompare(right))
16
+ .map(name => ({
17
+ id: name,
18
+ icon: name,
19
+ label: name,
20
+ }));
21
+
22
+ export const isValidFeatherIconName = value =>
23
+ Boolean(FeatherGlyphMap[String(value || '').trim()]);
24
+
25
+ export const normalizeFeatherIconName = value => {
26
+ const icon = String(value || '').trim();
27
+ return isValidFeatherIconName(icon) ? icon : '';
28
+ };
29
+
30
+ const DefaultFeatherIconPicker = ({
31
+ accessibilityLabel = 'Selecionar icone',
32
+ modalTitle = 'Selecionar icone',
33
+ onChange,
34
+ placeholder = 'Buscar icone',
35
+ style,
36
+ value,
37
+ }) => {
38
+ const [open, setOpen] = useState(false);
39
+ const [query, setQuery] = useState('');
40
+ const selectedIcon = normalizeFeatherIconName(value);
41
+ const hasPreview = Boolean(selectedIcon);
42
+
43
+ useEffect(() => {
44
+ if (!open) {
45
+ setQuery('');
46
+ }
47
+ }, [open]);
48
+
49
+ const filteredOptions = useMemo(() => {
50
+ const normalizedQuery = query.trim().toLowerCase();
51
+ if (!normalizedQuery) return FEATHER_ICON_OPTIONS;
52
+
53
+ return FEATHER_ICON_OPTIONS.filter(option =>
54
+ option.label.toLowerCase().includes(normalizedQuery),
55
+ );
56
+ }, [query]);
57
+
58
+ const selectIcon = icon => {
59
+ onChange?.(icon);
60
+ setOpen(false);
61
+ };
62
+
63
+ return (
64
+ <>
65
+ <TouchableOpacity
66
+ accessibilityLabel={accessibilityLabel}
67
+ activeOpacity={0.82}
68
+ style={[styles.field, style]}
69
+ onPress={() => setOpen(true)}
70
+ >
71
+ <View style={styles.valueWrap}>
72
+ <Icon
73
+ name={hasPreview ? selectedIcon : 'search'}
74
+ size={17}
75
+ color={hasPreview ? '#0F172A' : '#64748B'}
76
+ />
77
+ <Text
78
+ numberOfLines={1}
79
+ style={[
80
+ styles.valueText,
81
+ !hasPreview && styles.placeholderText,
82
+ ]}
83
+ >
84
+ {selectedIcon || placeholder}
85
+ </Text>
86
+ </View>
87
+ <Icon name="chevron-down" size={14} color="#64748B" />
88
+ </TouchableOpacity>
89
+
90
+ <Modal visible={open} transparent animationType="fade" onRequestClose={() => setOpen(false)}>
91
+ <View style={styles.modalOverlay}>
92
+ <View style={styles.modalPanel}>
93
+ <View style={styles.modalHeader}>
94
+ <Text style={styles.modalTitle}>{modalTitle}</Text>
95
+ <TouchableOpacity style={styles.closeButton} onPress={() => setOpen(false)}>
96
+ <Icon name="x" size={18} color="#334155" />
97
+ </TouchableOpacity>
98
+ </View>
99
+ <TextInput
100
+ style={styles.searchInput}
101
+ value={query}
102
+ onChangeText={setQuery}
103
+ placeholder="Filtrar"
104
+ placeholderTextColor="#94A3B8"
105
+ />
106
+ <ScrollView contentContainerStyle={styles.options}>
107
+ {filteredOptions.map(option => {
108
+ const selected = option.id === selectedIcon;
109
+
110
+ return (
111
+ <TouchableOpacity
112
+ key={option.id}
113
+ style={[
114
+ styles.optionRow,
115
+ selected && styles.optionRowActive,
116
+ ]}
117
+ onPress={() => selectIcon(option.id)}
118
+ >
119
+ <View style={styles.optionGlyph}>
120
+ <Icon
121
+ name={option.icon}
122
+ size={18}
123
+ color={selected ? '#1D4ED8' : '#334155'}
124
+ />
125
+ </View>
126
+ <Text
127
+ numberOfLines={1}
128
+ style={[
129
+ styles.optionText,
130
+ selected && styles.optionTextActive,
131
+ ]}
132
+ >
133
+ {option.label}
134
+ </Text>
135
+ </TouchableOpacity>
136
+ );
137
+ })}
138
+ </ScrollView>
139
+ </View>
140
+ </View>
141
+ </Modal>
142
+ </>
143
+ );
144
+ };
145
+
146
+ export default DefaultFeatherIconPicker;
@@ -0,0 +1,113 @@
1
+ import {StyleSheet} from 'react-native';
2
+
3
+ export default StyleSheet.create({
4
+ field: {
5
+ alignItems: 'center',
6
+ backgroundColor: '#FFFFFF',
7
+ borderColor: '#CBD5E1',
8
+ borderRadius: 8,
9
+ borderWidth: 1,
10
+ flexDirection: 'row',
11
+ gap: 8,
12
+ justifyContent: 'space-between',
13
+ minHeight: 38,
14
+ paddingHorizontal: 10,
15
+ paddingVertical: 8,
16
+ },
17
+ valueWrap: {
18
+ alignItems: 'center',
19
+ flex: 1,
20
+ flexDirection: 'row',
21
+ gap: 8,
22
+ minWidth: 0,
23
+ },
24
+ valueText: {
25
+ color: '#0F172A',
26
+ flex: 1,
27
+ fontSize: 13,
28
+ fontWeight: '700',
29
+ minWidth: 0,
30
+ },
31
+ placeholderText: {
32
+ color: '#94A3B8',
33
+ },
34
+ modalOverlay: {
35
+ alignItems: 'center',
36
+ backgroundColor: 'rgba(15, 23, 42, 0.38)',
37
+ flex: 1,
38
+ justifyContent: 'center',
39
+ padding: 18,
40
+ },
41
+ modalPanel: {
42
+ backgroundColor: '#FFFFFF',
43
+ borderRadius: 8,
44
+ maxHeight: '82%',
45
+ maxWidth: 320,
46
+ padding: 14,
47
+ width: '100%',
48
+ },
49
+ modalHeader: {
50
+ alignItems: 'center',
51
+ flexDirection: 'row',
52
+ justifyContent: 'space-between',
53
+ marginBottom: 10,
54
+ },
55
+ modalTitle: {
56
+ color: '#0F172A',
57
+ fontSize: 16,
58
+ fontWeight: '800',
59
+ },
60
+ closeButton: {
61
+ alignItems: 'center',
62
+ backgroundColor: '#F1F5F9',
63
+ borderRadius: 8,
64
+ height: 34,
65
+ justifyContent: 'center',
66
+ width: 34,
67
+ },
68
+ searchInput: {
69
+ backgroundColor: '#F8FAFC',
70
+ borderColor: '#CBD5E1',
71
+ borderRadius: 8,
72
+ borderWidth: 1,
73
+ color: '#0F172A',
74
+ fontSize: 13,
75
+ fontWeight: '700',
76
+ marginBottom: 10,
77
+ minHeight: 38,
78
+ paddingHorizontal: 10,
79
+ },
80
+ options: {
81
+ gap: 6,
82
+ },
83
+ optionRow: {
84
+ alignItems: 'center',
85
+ borderColor: '#E2E8F0',
86
+ borderRadius: 8,
87
+ borderWidth: 1,
88
+ flexDirection: 'row',
89
+ gap: 10,
90
+ paddingHorizontal: 10,
91
+ paddingVertical: 9,
92
+ },
93
+ optionRowActive: {
94
+ backgroundColor: '#EFF6FF',
95
+ borderColor: '#93C5FD',
96
+ },
97
+ optionGlyph: {
98
+ alignItems: 'center',
99
+ height: 24,
100
+ justifyContent: 'center',
101
+ width: 24,
102
+ },
103
+ optionText: {
104
+ color: '#0F172A',
105
+ flex: 1,
106
+ fontSize: 13,
107
+ fontWeight: '800',
108
+ minWidth: 0,
109
+ },
110
+ optionTextActive: {
111
+ color: '#1D4ED8',
112
+ },
113
+ });