@fto-consult/expo-ui 6.81.3 → 6.83.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/bin/create-app/App.js +4 -0
- package/bin/create-app/src/screens/TableData/TableDataScreen.js +36 -0
- package/bin/create-app/src/screens/TableData/index.js +1 -0
- package/bin/create-app/src/screens/TableDataListScreen.js +10 -0
- package/package.json +2 -2
- package/src/components/AppBar/utils.js +1 -1
- package/src/components/Avatar/Text.js +1 -1
- package/src/components/Avatar/index.js +1 -1
- package/src/components/BackToTop/index.js +1 -1
- package/src/components/Button/index.js +1 -7
- package/src/components/Chip/index.js +2 -8
- package/src/components/Color/index.js +1 -1
- package/src/components/Datagrid/Accordion/Row.js +1 -1
- package/src/components/Datagrid/Accordion/index.js +1 -2
- package/src/components/Datagrid/Actions/Header.js +3 -1
- package/src/components/Datagrid/Actions/index.js +5 -1
- package/src/components/Datagrid/Common/Common.js +7 -1
- package/src/components/Datagrid/Common/utils.js +1 -1
- package/src/components/Dialog/DropdownAlert/index.js +0 -4
- package/src/components/Drawer/DrawerItems/_DrawerItem.js +3 -5
- package/src/components/Drawer/DrawerItems/index.js +2 -2
- package/src/components/Dropdown/index.js +2 -3
- package/src/components/ErrorBoundary/ErrorMessage.js +3 -3
- package/src/components/Expandable/Item.js +4 -4
- package/src/components/Expandable/index.js +2 -4
- package/src/components/Fab/GroupComponent.js +8 -12
- package/src/components/Filter/BetweenComponent.js +1 -1
- package/src/components/Image/index.js +1 -1
- package/src/components/Label/index.js +5 -5
- package/src/components/Menu/Item.js +3 -6
- package/src/components/Menu/Menu.js +2 -3
- package/src/components/Modal/index.js +1 -1
- package/src/components/Paragraph/index.js +1 -1
- package/src/components/PhoneInput/index.js +1 -1
- package/src/components/SimpleSelect/index.js +1 -1
- package/src/components/Switch/index.js +1 -1
- package/src/components/TextField/index.js +1 -1
- package/src/screens/Help/openLibraries.js +1 -1
package/bin/create-app/App.js
CHANGED
@@ -3,6 +3,8 @@ import screens from "$screens";
|
|
3
3
|
import drawerItems from "$navigation/drawerItems";
|
4
4
|
import Logo from "$components/Logo";
|
5
5
|
import drawerSections from "$navigation/drawerSections";
|
6
|
+
import TableDataListScreen from "$screens/TableDataListScreen";
|
7
|
+
import TableDataScreen from "$screens/TableData/TableDataScreen";
|
6
8
|
|
7
9
|
export default function AppMainEntry(){
|
8
10
|
return <ExpoUIProvider
|
@@ -32,6 +34,8 @@ export default function AppMainEntry(){
|
|
32
34
|
profilePropsMutator : ({fields,...props})=>({fields,...props}),//la fonction permettant de muter les champs liés à l'écran de mise à jour d'un profil utilisateur
|
33
35
|
}}
|
34
36
|
components = {{
|
37
|
+
TableDataListScreen,
|
38
|
+
TableDataScreen,
|
35
39
|
datagrid : {
|
36
40
|
///les props par défaut à passer au composant SWRDatagrid
|
37
41
|
},
|
@@ -0,0 +1,36 @@
|
|
1
|
+
// Copyright 2022 @fto-consult/Boris Fouomene. All rights reserved.
|
2
|
+
// Use of this source code is governed by a BSD-style
|
3
|
+
// license that can be found in the LICENSE file.
|
4
|
+
|
5
|
+
// Copyright 2022 @fto-consult/Boris Fouomene. All rights reserved.
|
6
|
+
// Use of this source code is governed by a BSD-style
|
7
|
+
// license that can be found in the LICENSE file.
|
8
|
+
|
9
|
+
import TableData from "$eScreen/TableData";
|
10
|
+
|
11
|
+
|
12
|
+
export default class TableDataScreenItem extends TableData{
|
13
|
+
/**** cette méthode est très utile pour la vérification des id de type unique en base de données
|
14
|
+
par exemple, vous avez une table en base de données dont l'id est le code et en création de la nouvelle données, vous vérifiez si celle entrée par l'utilisateur existe déjà en base ou non
|
15
|
+
Cette fonction doit retourner une promise, qui lorsque la donnée existe, elle doit retourner l'objet correspondant à l'id recherché en bd ou généer une exception si elle n'existe pas
|
16
|
+
|
17
|
+
*/
|
18
|
+
fetchUniqueId ({value,field,fieldName,foreignKeyColumn,table:customT,foreignKeyTable}){
|
19
|
+
return Promise.resolve({});
|
20
|
+
}
|
21
|
+
/*** implémenter la routine beforeSave, avant l'enregistrement de la données liée à la table encours
|
22
|
+
-si cette fonction retourne une chaine de caractère, alors cette chaine est considérée comme une erreur et elle est affichée via une notification à l'utilisateur
|
23
|
+
-si cette fonction retourne false, alors la donnée en cours de modification ne peut être enregistrée
|
24
|
+
*/
|
25
|
+
beforeSave({data,tableName,...rest}){
|
26
|
+
return data;
|
27
|
+
}
|
28
|
+
/*** implémenter la logique d'isertion ou de mise à jour de la données, en cours d'enregistrement en base de données distante
|
29
|
+
@return {Promise<object>} la données insérée ou mise à jour issue de la base de données
|
30
|
+
*/
|
31
|
+
upsertToDB({data,tableName,...rest}){
|
32
|
+
return Promise.resolve({data});
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
TableDataScreenItem.Modal = true; //spécifiez si cet écran s'affiche en model ou non
|
@@ -0,0 +1 @@
|
|
1
|
+
export default [];
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import Screen from "$eScreen";
|
2
|
+
import SWRDatagrid from "$ecomponents/Datagrid/SWRDatagrid";
|
3
|
+
|
4
|
+
export default function TableDataListScreen (props){
|
5
|
+
return <Screen {...props}>
|
6
|
+
<SWRDatagrid {...props}/>
|
7
|
+
</Screen>
|
8
|
+
}
|
9
|
+
|
10
|
+
TableDataListScreen.withFab = false;//if you want to display main FAB layout on this screen toggle this value to true
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@fto-consult/expo-ui",
|
3
|
-
"version": "6.
|
3
|
+
"version": "6.83.0",
|
4
4
|
"description": "Bibliothèque de composants UI Expo,react-native",
|
5
5
|
"main": "main",
|
6
6
|
"scripts": {
|
@@ -71,7 +71,7 @@
|
|
71
71
|
"@expo/html-elements": "^0.5.1",
|
72
72
|
"@expo/vector-icons": "^13.0.0",
|
73
73
|
"@faker-js/faker": "^8.0.2",
|
74
|
-
"@fto-consult/common": "^3.65.
|
74
|
+
"@fto-consult/common": "^3.65.12",
|
75
75
|
"@pchmn/expo-material3-theme": "^1.3.1",
|
76
76
|
"@react-native-async-storage/async-storage": "1.18.2",
|
77
77
|
"@react-native-community/datetimepicker": "7.2.0",
|
@@ -33,7 +33,7 @@ const renderAction = ({action,isAlert,actionProps,opts,isAppBarAction,isAppBarAc
|
|
33
33
|
let {Component,isFormAction,...rest} = action;
|
34
34
|
actionProps = defaultObj(actionProps);
|
35
35
|
rest = Object.assign({},rest);
|
36
|
-
rest
|
36
|
+
rest["aria-label"] = defaultStr(rest["aria-label"],rest.title,rest.text,rest.label,rest.children);
|
37
37
|
const {color} = getThemeColors();
|
38
38
|
|
39
39
|
rest.style = {...defaultObj(StyleSheet.flatten(actionProps.style)),elevation:0,...defaultObj(StyleSheet.flatten(rest.style))};
|
@@ -46,7 +46,7 @@ const AvatarTextComponent = (props) => {
|
|
46
46
|
const onPress = typeof customOnPress =='function' ? customOnPress : undefined;
|
47
47
|
const C = onPress? Pressable : View;
|
48
48
|
return (
|
49
|
-
<C testID={testID+"_Container"}
|
49
|
+
<C testID={testID+"_Container"} {...containerProps} style={[{pointerEvents:onPress?"auto":'none'},styles.container,style,containerProps.style,textContainerStyle,{borderRadius:size/2}]}>
|
50
50
|
{ <Text
|
51
51
|
testID={testID}
|
52
52
|
style={[{
|
@@ -40,7 +40,7 @@ const AvatarComponent = React.forwardRef((props,ref)=>{
|
|
40
40
|
handleOnPress = true;
|
41
41
|
} else if(label){
|
42
42
|
cProps.label = label;
|
43
|
-
cProps.
|
43
|
+
cProps.style = [cProps.style,{pointerEvents:"none"}];
|
44
44
|
cProps.labelStyle = StyleSheet.flatten(cProps.labelStyle) || {};
|
45
45
|
Component = Text;
|
46
46
|
}
|
@@ -58,7 +58,7 @@ const BackToTopComponent = React.forwardRef((props,ref)=>{
|
|
58
58
|
},[])
|
59
59
|
return !visible ? null : <Fab
|
60
60
|
{...rest}
|
61
|
-
|
61
|
+
aria-label = {defaultStr(rest["aria-label"],'Retour en haut')}
|
62
62
|
onPress = {(e)=>{
|
63
63
|
React.stopEventPropagation(e);
|
64
64
|
if(onPress){
|
@@ -31,7 +31,6 @@ const ButtonComponent = React.forwardRef((prs,ref) => {
|
|
31
31
|
isCancelButton,
|
32
32
|
error,
|
33
33
|
upperCase = true,
|
34
|
-
accessibilityLabel,
|
35
34
|
onPress,
|
36
35
|
iconPosition,
|
37
36
|
iconBefore,
|
@@ -239,7 +238,6 @@ const ButtonComponent = React.forwardRef((prs,ref) => {
|
|
239
238
|
onLongPress={onLongPress}
|
240
239
|
onPressIn={handlePressIn}
|
241
240
|
onPressOut={handlePressOut}
|
242
|
-
accessibilityLabel={accessibilityLabel}
|
243
241
|
// @ts-expect-error We keep old a11y props for backwards compat with old RN versions
|
244
242
|
accessibilityTraits={disabled ? ['button', 'disabled'] : 'button'}
|
245
243
|
accessibilityComponentType="button"
|
@@ -289,7 +287,7 @@ const ButtonComponent = React.forwardRef((prs,ref) => {
|
|
289
287
|
/>
|
290
288
|
) : null}
|
291
289
|
<Label
|
292
|
-
|
290
|
+
userSelect={false}
|
293
291
|
numberOfLines={1}
|
294
292
|
testID = {testID+"_Label"}
|
295
293
|
{...labelProps}
|
@@ -420,10 +418,6 @@ ButtonComponent.propTypes = {
|
|
420
418
|
* Make the label text upperCased. Note that this won't work if you pass React elements as children.
|
421
419
|
*/
|
422
420
|
upperCase:PropTypes.bool,
|
423
|
-
/**
|
424
|
-
* Accessibility label for the button. This is read by the screen reader when the user taps the button.
|
425
|
-
*/
|
426
|
-
accessibilityLabel:PropTypes.string,
|
427
421
|
/**
|
428
422
|
* Function to execute on press.
|
429
423
|
*/
|
@@ -21,7 +21,6 @@ const ChipComponent = React.forwardRef(({
|
|
21
21
|
avatar,
|
22
22
|
selected = false,
|
23
23
|
disabled = false,
|
24
|
-
accessibilityLabel,
|
25
24
|
closeIconAccessibilityLabel = 'Close',
|
26
25
|
onPress,
|
27
26
|
onLongPress,
|
@@ -127,7 +126,6 @@ const ChipComponent = React.forwardRef(({
|
|
127
126
|
onPressOut={handlePressOut}
|
128
127
|
underlayColor={underlayColor}
|
129
128
|
disabled={disabled}
|
130
|
-
accessibilityLabel={accessibilityLabel}
|
131
129
|
// @ts-expect-error We keep old a11y props for backwards compat with old RN versions
|
132
130
|
accessibilityTraits={accessibilityTraits}
|
133
131
|
accessibilityComponentType="button"
|
@@ -172,11 +170,11 @@ const ChipComponent = React.forwardRef(({
|
|
172
170
|
</View>
|
173
171
|
) : null}
|
174
172
|
<Text
|
175
|
-
selectable={false}
|
176
173
|
numberOfLines={1}
|
177
174
|
testID={testID+"_Text"}
|
178
175
|
{...labelProps}
|
179
176
|
style={StyleSheet.flatten([
|
177
|
+
{userSelect:"none"},
|
180
178
|
styles.text,
|
181
179
|
{
|
182
180
|
...theme.fonts.regular,
|
@@ -201,7 +199,7 @@ const ChipComponent = React.forwardRef(({
|
|
201
199
|
accessibilityTraits="button"
|
202
200
|
accessibilityComponentType="button"
|
203
201
|
//role="button"
|
204
|
-
|
202
|
+
aria-label={closeIconAccessibilityLabel}
|
205
203
|
testID={testID+"_CloseButtonRipple"}
|
206
204
|
>
|
207
205
|
<View testID={testID+"_ContentContainer"} style={[styles.icon, styles.closeIcon]}>
|
@@ -313,10 +311,6 @@ ChipComponent.propTypes = {
|
|
313
311
|
* Whether the chip is disabled. A disabled chip is greyed out and `onPress` is not called on touch.
|
314
312
|
*/
|
315
313
|
disabled: PropTypes.bool,
|
316
|
-
/**
|
317
|
-
* Accessibility label for the chip. This is read by the screen reader when the user taps the chip.
|
318
|
-
*/
|
319
|
-
accessibilityLabel: PropTypes.string,
|
320
314
|
/**
|
321
315
|
* Accessibility label for the close icon. This is read by the screen reader when the user taps the close icon.
|
322
316
|
*/
|
@@ -72,7 +72,7 @@ const ColorPickerComponent = React.forwardRef ((props,ref)=>{
|
|
72
72
|
//role="button"
|
73
73
|
disabled = {!isEditable}
|
74
74
|
pointerEvents = {pointerEvents}
|
75
|
-
|
75
|
+
aria-label={defaultStr(label,text)}
|
76
76
|
style = {[styles.container,containerProp]}
|
77
77
|
onPress={openPicker}
|
78
78
|
rippleColor={rippleColor}
|
@@ -146,7 +146,7 @@ const DatagridAccordionRow = React.forwardRef((props,ref)=>{
|
|
146
146
|
{title}
|
147
147
|
{description}
|
148
148
|
</View>
|
149
|
-
{right && React.isValidElement(right,true) ? <Label testID={testID+"_Right"} primary
|
149
|
+
{right && React.isValidElement(right,true) ? <Label testID={testID+"_Right"} primary {...rightProps} style={[{userSelect:selectable?"all":"none"},styles.right,styles.label,rStyles.lineHeight,rightProps.style]}>
|
150
150
|
{right}
|
151
151
|
</Label> : null}
|
152
152
|
</View>
|
@@ -364,12 +364,11 @@ const DatagridFactory = (Factory)=>{
|
|
364
364
|
const labelStyle = Object.assign({},StyleSheet.flatten(titleProps.style));
|
365
365
|
const titleColor = Colors.isValid(labelStyle.color)? labelStyle.color : Colors.isValid(titleProps.color)? titleProps.color : Colors.setAlpha(theme.colors.text,0.87);
|
366
366
|
this.accordionTitleProps = {
|
367
|
-
selectable: true,
|
368
367
|
ellipsizeMode: EllipsizeMode.tail,
|
369
368
|
numberOfLines : 1,
|
370
369
|
...titleProps,
|
371
370
|
color: titleColor,
|
372
|
-
style : [styles.title,rStyles.lineHeight,titleProps.style]
|
371
|
+
style : [styles.title,{userSelect:"all"},rStyles.lineHeight,titleProps.style]
|
373
372
|
}
|
374
373
|
filter = defaultFunc(filter,x=>true);
|
375
374
|
const showFooters = this.canShowFooters();
|
@@ -12,7 +12,7 @@ const selectedTitle ='#f50057';
|
|
12
12
|
|
13
13
|
export const getSelectedBackgroundColor = x=> theme.isDark()?theme.colors.surface : selectedBackgroundColor;
|
14
14
|
|
15
|
-
export default function DatagridActionsHeaderComponent({title,selected,testID,children,style,pointerEvents,...props}) {
|
15
|
+
export default function DatagridActionsHeaderComponent({title,leftActions,selected,testID,children,style,pointerEvents,...props}) {
|
16
16
|
title = React.isValidElement(title,true)? title : "";
|
17
17
|
const bStyle = selected && theme.isDark()? {
|
18
18
|
borderBottomColor : theme.colors.divider,
|
@@ -26,6 +26,7 @@ export default function DatagridActionsHeaderComponent({title,selected,testID,ch
|
|
26
26
|
{title ? <Label testID={testID+"Label"} style={[styles.title,selected?[styles.selectedTitle,{color:!theme.isDark()?selectedTitle:theme.colors.primaryOnSurface}]:undefined]}>
|
27
27
|
{title}
|
28
28
|
</Label> : null}
|
29
|
+
{React.isValidElement(leftActions) ? leftActions : null}
|
29
30
|
{React.isValidElement(children) && <View testID={testID+"_Content"} style={[styles.children,styles.row]}>
|
30
31
|
{children}
|
31
32
|
</View>}
|
@@ -38,6 +39,7 @@ const styles = StyleSheet.create({
|
|
38
39
|
flexDirection : 'row',
|
39
40
|
justifyContent:'space-between',
|
40
41
|
alignItems : 'center',
|
42
|
+
flexWrap : "wrap",
|
41
43
|
},
|
42
44
|
container : {
|
43
45
|
paddingVertical : 0,
|
@@ -13,8 +13,9 @@ import { useWindowDimensions } from "react-native";
|
|
13
13
|
import {useDatagrid,useGetSelectedRowsCount} from "../hooks";
|
14
14
|
export default function DatagridActions ({actions,title,actionProps,...props}){
|
15
15
|
const {context} = useDatagrid();
|
16
|
-
const
|
16
|
+
const actionsProps = defaultObj(context?.props?.actionsProps);
|
17
17
|
const selectedRowsCount = useGetSelectedRowsCount();
|
18
|
+
const leftActions = context?.props?.leftActions;
|
18
19
|
useWindowDimensions();
|
19
20
|
const selected = selectedRowsCount>0;
|
20
21
|
actions = selected ? context?.renderSelectedRowsActions.call(context,{}) : actions;
|
@@ -56,8 +57,11 @@ export default function DatagridActions ({actions,title,actionProps,...props}){
|
|
56
57
|
}
|
57
58
|
});
|
58
59
|
return <Header
|
60
|
+
{...actionsProps}
|
59
61
|
{...props}
|
62
|
+
style = {[actionsProps.style,props.style]}
|
60
63
|
title = {contextualTitle}
|
64
|
+
leftActions = {leftActions}
|
61
65
|
selected = {selected}
|
62
66
|
>
|
63
67
|
{children || <Label style={{padding:15}}>ACTIONS</Label>}
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import theme from
|
1
|
+
import theme,{ StyleProps} from '$theme';
|
2
2
|
import APP from "$capp";
|
3
3
|
import {isMobileOrTabletMedia} from "$cplatform/dimensions";
|
4
4
|
import PropTypes from "prop-types";
|
@@ -4096,6 +4096,12 @@ CommonDatagridComponent.propTypes = {
|
|
4096
4096
|
baseId : PropTypes.string,
|
4097
4097
|
mobile: PropTypes.bool,
|
4098
4098
|
tablet: PropTypes.bool,
|
4099
|
+
/*** les props des actions du datagrid */
|
4100
|
+
actionsProps : PropTypes.shape({
|
4101
|
+
///style : les styles
|
4102
|
+
style : StyleProps,
|
4103
|
+
testID : PropTypes.string,///le test id
|
4104
|
+
}),
|
4099
4105
|
///pour l'affichage où non des filtres
|
4100
4106
|
toggleFilters : PropTypes.bool,
|
4101
4107
|
desktop: PropTypes.bool,
|
@@ -175,7 +175,7 @@ export const renderRowCell = (arg)=>{
|
|
175
175
|
return React.getTextContent(_render);
|
176
176
|
}
|
177
177
|
if((typeof _render ==='string' || typeof _render =='number')){
|
178
|
-
_render = <Label
|
178
|
+
_render = <Label userSelect>{_render}</Label>
|
179
179
|
}
|
180
180
|
_render = React.isValidElement(_render)|| Array.isArray(_render)?_render:null;
|
181
181
|
return {render:_render,style,extra,key};
|
@@ -111,7 +111,6 @@ export default class DropdownAlert extends Component {
|
|
111
111
|
renderTitle: PropTypes.func,
|
112
112
|
renderMessage: PropTypes.func,
|
113
113
|
testID: PropTypes.string,
|
114
|
-
accessibilityLabel: PropTypes.string,
|
115
114
|
accessible: PropTypes.bool,
|
116
115
|
titleTextProps: PropTypes.object,
|
117
116
|
messageTextProps: PropTypes.object,
|
@@ -199,7 +198,6 @@ export default class DropdownAlert extends Component {
|
|
199
198
|
renderTitle: undefined,
|
200
199
|
renderMessage: undefined,
|
201
200
|
testID: undefined,
|
202
|
-
accessibilityLabel: undefined,
|
203
201
|
accessible: false,
|
204
202
|
titleTextProps: undefined,
|
205
203
|
messageTextProps: undefined,
|
@@ -607,7 +605,6 @@ export default class DropdownAlert extends Component {
|
|
607
605
|
zIndex,
|
608
606
|
wrapperStyle,
|
609
607
|
tapToCloseEnabled,
|
610
|
-
accessibilityLabel,
|
611
608
|
testID:customTestId,
|
612
609
|
accessible,
|
613
610
|
contentContainerStyle,
|
@@ -669,7 +666,6 @@ export default class DropdownAlert extends Component {
|
|
669
666
|
disabled={!tapToCloseEnabled}
|
670
667
|
onLayout={(event) => this._onLayoutEvent(event)}
|
671
668
|
testID={testID}
|
672
|
-
accessibilityLabel={accessibilityLabel}
|
673
669
|
accessible={accessible}>
|
674
670
|
<View style={style} testID={testID+"_ContentContainer"}>
|
675
671
|
<View testID={testID+"_ContentWrapper"} style={[contentContainerStyle]}
|
@@ -14,7 +14,7 @@ import PropTypes from "prop-types";
|
|
14
14
|
* update by @borisFouomene. for usage, @see : https://callstack.github.io/react-native-paper/drawer-item.html
|
15
15
|
*/
|
16
16
|
const DrawerItem = ({icon,iconProps,borderRadius,color,minimized,contentContainerProps,labelProps,contentProps,label,text,
|
17
|
-
active,style,onPress,
|
17
|
+
active,style,onPress,isExpandable,right,divider, dividerProps,
|
18
18
|
testID,
|
19
19
|
left,
|
20
20
|
title,
|
@@ -46,11 +46,10 @@ const DrawerItem = ({icon,iconProps,borderRadius,color,minimized,contentContaine
|
|
46
46
|
left = React.isValidElement(left)? left : null;
|
47
47
|
|
48
48
|
borderRadius = typeof borderRadius =='number'? borderRadius : 18;
|
49
|
-
accessibilityLabel = defaultStr(accessibilityLabel);
|
50
49
|
const labelContent = React.useStableMemo(()=>{
|
51
50
|
const lProps = {
|
52
51
|
testID:testID+"_DrawerItemLabel",
|
53
|
-
|
52
|
+
userSelect:false,
|
54
53
|
numberOfLines:1,
|
55
54
|
...labelProps,
|
56
55
|
style : [{
|
@@ -85,7 +84,6 @@ const DrawerItem = ({icon,iconProps,borderRadius,color,minimized,contentContaine
|
|
85
84
|
accessibilityTraits={active ? ['button', 'selected'] : 'button'}
|
86
85
|
//accessibilityComponentType="button"
|
87
86
|
accessibilityState={{ selected: active }}
|
88
|
-
accessibilityLabel={accessibilityLabel}
|
89
87
|
>
|
90
88
|
<View {...contentContainerProps} style={[styles.contentContainer,contentContainerProps.style]} testID={testID+"_DrawerItemContentContainer"}>
|
91
89
|
<View {...contentProps} style={[styles.content,contentProps.style]} testID={testID+"_DrawerItemContent"}>
|
@@ -94,7 +92,7 @@ const DrawerItem = ({icon,iconProps,borderRadius,color,minimized,contentContaine
|
|
94
92
|
<Icon testID={testID+"_DrawerItemIcon"} icon={icon} {...iconProps}
|
95
93
|
style={[iconProps.style,styles.icon,!minimized?{
|
96
94
|
alignItems : 'flex-start'
|
97
|
-
}:{alignItems:isExpandable?'flex-end':'center'}]} tooltip={minimized?defaultStr(title,label
|
95
|
+
}:{alignItems:isExpandable?'flex-end':'center'}]} tooltip={minimized?defaultStr(title,label):""}
|
98
96
|
position={minimized?'top':"right"}
|
99
97
|
size={minimized ?MINIMIZED_ICON_SIZE : ICON_SIZE} onPress={minimized?onPress:undefined} color={contentColor} />
|
100
98
|
) : null}
|
@@ -122,8 +122,8 @@ DrawerItemsComponent.propTypes = {
|
|
122
122
|
|
123
123
|
const getDefaultProps = function(item){
|
124
124
|
if(!isObj(item)) return null;
|
125
|
-
item.label = defaultVal(item.label,item.text,item
|
126
|
-
item
|
125
|
+
item.label = defaultVal(item.label,item.text,item["aria-label"]);
|
126
|
+
item["aria-label"] = defaultVal(item["aria-label"],item.tooltip,item.label);
|
127
127
|
item.title = defaultVal(item.title,item.label);
|
128
128
|
return item;
|
129
129
|
}
|
@@ -677,7 +677,6 @@ class DropdownComponent extends AppComponent {
|
|
677
677
|
helperText,
|
678
678
|
error,
|
679
679
|
onChange,
|
680
|
-
accessibilityLabel,
|
681
680
|
onMount,
|
682
681
|
filter,
|
683
682
|
onUnmount,
|
@@ -890,7 +889,7 @@ class DropdownComponent extends AppComponent {
|
|
890
889
|
disabled = {disabled}
|
891
890
|
onLayout={bindResizeEvents === false ? undefined : this.onLayout.bind(this)}
|
892
891
|
style = {{pointerEvents}}
|
893
|
-
|
892
|
+
aria-label={defaultStr(dropdownProps["aria-label"],label,text)}
|
894
893
|
testID = {testID}
|
895
894
|
>
|
896
895
|
<View {...dropdownProps} {...contentContainerProps} style={[contentContainerProps.style,{pointerEvents},flattenStyle]}
|
@@ -1282,7 +1281,7 @@ DropdownComponent.propTypes = {
|
|
1282
1281
|
placeholder : PropTypes.string,
|
1283
1282
|
inputProps : PropTypes.object,
|
1284
1283
|
selectedColor:PropTypes.string,
|
1285
|
-
|
1284
|
+
"aria-label" : PropTypes.string,
|
1286
1285
|
compare : PropTypes.func,
|
1287
1286
|
temProps : PropTypes.object,
|
1288
1287
|
itemLabel : PropTypes.string,//le nom du champ à utiliser pour le rendu du libelé la méthode appelée pour retourne le libelé de l'item
|
@@ -27,12 +27,12 @@ const ErrorMessage = React.forwardRef(function(props,ref){
|
|
27
27
|
const pointerEvents = 'auto';
|
28
28
|
const {width,height} = useWindowDimensions();
|
29
29
|
return <Portal>
|
30
|
-
<View ref={ref} testID={`${testID}_ErrorMessageContainer`}
|
31
|
-
<View style={styles.content} testID={`${testID}_ErrorMessageContentContainer`}
|
30
|
+
<View ref={ref} testID={`${testID}_ErrorMessageContainer`} style={[{pointerEvents},styles.container,isWeb()?{position:'fixed'}:null,{backgroundColor:theme.colors.surface,width,height}]}>
|
31
|
+
<View style={[styles.content,{pointerEvents}]} testID={`${testID}_ErrorMessageContentContainer`}>
|
32
32
|
<Label style={styles.title}>Oops!</Label>
|
33
33
|
<Label style={styles.subtitle}>{'Une erreur est survenue'}</Label>
|
34
34
|
<Label style={styles.error}>{error.toString()}</Label>
|
35
|
-
<Button mode="contained"
|
35
|
+
<Button mode="contained" iconProps={{marginVertical:0,pointerEvents,paddingVertical:0}} icon='home-variant' style={{backgroundColor:theme.colors.primary,marginHorizontal:10}} labelStyle={{color:theme.colors.primaryLabel}} onPress={goToHome}>
|
36
36
|
Retour à l'accueil
|
37
37
|
</Button>
|
38
38
|
<Expandable title="Plus de détail sur l'erreur">
|
@@ -37,14 +37,14 @@ const ExpandableItem = ({left,right,title,description,
|
|
37
37
|
testID = defaultStr(testID,"RN_ExpandableItemComponent")
|
38
38
|
const renderDescription = (descriptionColor,description) => {
|
39
39
|
return typeof description === 'function' ? (description({
|
40
|
-
|
40
|
+
userSelect: false,
|
41
41
|
ellipsizeMode: descriptionEllipsizeMode,
|
42
42
|
color: descriptionColor,
|
43
43
|
fontSize: styles.description.fontSize,
|
44
44
|
})
|
45
45
|
) : (
|
46
46
|
<Label
|
47
|
-
|
47
|
+
userSelect={false}
|
48
48
|
numberOfLines={descriptionNumberOfLines}
|
49
49
|
ellipsizeMode={descriptionEllipsizeMode}
|
50
50
|
testID = {testID+"_Description"}
|
@@ -66,14 +66,14 @@ const ExpandableItem = ({left,right,title,description,
|
|
66
66
|
|
67
67
|
return typeof title === 'function' ? (
|
68
68
|
title({
|
69
|
-
|
69
|
+
userSelect: false,
|
70
70
|
ellipsizeMode: titleEllipsizeMode,
|
71
71
|
color: titleColor,
|
72
72
|
fontSize: styles.title.fontSize,
|
73
73
|
})
|
74
74
|
) : (
|
75
75
|
<Label
|
76
|
-
|
76
|
+
userSelect={false}
|
77
77
|
ellipsizeMode={titleEllipsizeMode}
|
78
78
|
numberOfLines={titleNumberOfLines}
|
79
79
|
testID = {testID+'_Title'}
|
@@ -25,7 +25,6 @@ const ExpandableComponent = React.forwardRef(({
|
|
25
25
|
onPress,
|
26
26
|
onLongPress,
|
27
27
|
expanded: expandedProp,
|
28
|
-
accessibilityLabel,
|
29
28
|
expandedIcon,
|
30
29
|
expandIconProps,
|
31
30
|
unexpandedIcon,
|
@@ -115,7 +114,6 @@ const ExpandableComponent = React.forwardRef(({
|
|
115
114
|
onPress={handlePressAction}
|
116
115
|
onLongPress={onLongPress}
|
117
116
|
accessibilityState={{ expanded: isExpanded }}
|
118
|
-
accessibilityLabel={accessibilityLabel}
|
119
117
|
testID={testID+"_Container"}
|
120
118
|
>
|
121
119
|
<View testID={testID+'_ContentContainer'} {...contentContainerProps} style={[styles.row,theme.styles.cursorPointer,contentContainerProps.style]} pointerEvents1="none">
|
@@ -127,7 +125,7 @@ const ExpandableComponent = React.forwardRef(({
|
|
127
125
|
: null}
|
128
126
|
<View testID={testID+'_Center'} {...centerProps} style={[styles.item, styles.content,styles.center,centerProps.style]}>
|
129
127
|
{isNonNullString(title)? <Label
|
130
|
-
|
128
|
+
userSelect={false}
|
131
129
|
numberOfLines={titleNumberOfLines}
|
132
130
|
{...titleProps}
|
133
131
|
>
|
@@ -136,7 +134,7 @@ const ExpandableComponent = React.forwardRef(({
|
|
136
134
|
{isNonNullString(description) ? (
|
137
135
|
<Label
|
138
136
|
testID={testID+'_Description'}
|
139
|
-
|
137
|
+
userSelect={false}
|
140
138
|
numberOfLines={descriptionNumberOfLines}
|
141
139
|
{...descriptionProps}
|
142
140
|
style={[
|
@@ -21,7 +21,6 @@ const FABGroup = ({
|
|
21
21
|
icon,
|
22
22
|
open,
|
23
23
|
onPress,
|
24
|
-
accessibilityLabel,
|
25
24
|
label,
|
26
25
|
style,
|
27
26
|
screenName,
|
@@ -170,7 +169,6 @@ const FABGroup = ({
|
|
170
169
|
label = {label}
|
171
170
|
icon={icon}
|
172
171
|
color={colorProp}
|
173
|
-
accessibilityLabel={accessibilityLabel}
|
174
172
|
// @ts-expect-error We keep old a11y props for backwards compat with old RN versions
|
175
173
|
accessibilityTraits="button"
|
176
174
|
accessibilityComponentType="button"
|
@@ -202,7 +200,6 @@ FABGroup.propTypes = {
|
|
202
200
|
* An action item should contain the following properties:
|
203
201
|
* - `icon`: icon to display (required)
|
204
202
|
* - `label`: optional label text
|
205
|
-
* - `accessibilityLabel`: accessibility label for the action, uses label by default if specified
|
206
203
|
* - `color`: custom icon color of the action item
|
207
204
|
* - `labelTextColor`: custom label text color of the action item
|
208
205
|
* - `style`: pass additional styles for the fab item, for example, `backgroundColor`
|
@@ -215,7 +212,6 @@ FABGroup.propTypes = {
|
|
215
212
|
label: PropTypes.string,
|
216
213
|
color: PropTypes.string,
|
217
214
|
labelTextColor: PropTypes.string,
|
218
|
-
accessibilityLabel: PropTypes.string,
|
219
215
|
style: StylePropTypes,
|
220
216
|
labelStyle: StylePropTypes,
|
221
217
|
small: PropTypes.bool,
|
@@ -230,7 +226,7 @@ FABGroup.propTypes = {
|
|
230
226
|
/**
|
231
227
|
* Accessibility label for the FAB. This is read by the screen reader when the user taps the FAB.
|
232
228
|
*/
|
233
|
-
|
229
|
+
"aria-label" : PropTypes.string,
|
234
230
|
/**
|
235
231
|
* Custom color for the `FAB`.
|
236
232
|
*/
|
@@ -272,7 +268,7 @@ FABGroup.propTypes = {
|
|
272
268
|
}
|
273
269
|
|
274
270
|
|
275
|
-
const _FabItem = function({children,label,disabled:customDisabled,pointerEvents,open,close,testID:customTestID,labelStyle,
|
271
|
+
const _FabItem = function({children,label,disabled:customDisabled,pointerEvents,open,close,testID:customTestID,labelStyle,icon,backgroundColor,scale,opacity,color,style,small,onPress,...rest}){
|
276
272
|
const disabled = typeof customDisabled =='boolean'? customDisabled : false;
|
277
273
|
const testID = defaultStr(customTestID,"RN_FabItemComponent")
|
278
274
|
style = StyleSheet.flatten(style) || {};
|
@@ -303,9 +299,9 @@ const _FabItem = function({children,label,disabled:customDisabled,pointerEvents,
|
|
303
299
|
]
|
304
300
|
}
|
305
301
|
onPress={_onPress}
|
306
|
-
|
307
|
-
|
308
|
-
?
|
302
|
+
aria-label ={
|
303
|
+
rest["aria-label"] !== 'undefined'
|
304
|
+
? rest["aria-label"]
|
309
305
|
: label
|
310
306
|
}
|
311
307
|
accessibilityTraits="button"
|
@@ -337,9 +333,9 @@ const _FabItem = function({children,label,disabled:customDisabled,pointerEvents,
|
|
337
333
|
]
|
338
334
|
}
|
339
335
|
onPress={_onPress}
|
340
|
-
|
341
|
-
typeof
|
342
|
-
?
|
336
|
+
aria-label={
|
337
|
+
typeof rest["aria-label"] !== 'undefined'
|
338
|
+
? rest["aria-label"]
|
343
339
|
: label
|
344
340
|
}
|
345
341
|
// @ts-expect-error We keep old a11y props for backwards compat with old RN versions
|
@@ -7,7 +7,7 @@ import {defaultObj} from "$cutils";
|
|
7
7
|
|
8
8
|
const FilterBetweenComponent = React.forwardRef(({inputProps,contentContainerProps,...props},ref)=>{
|
9
9
|
contentContainerProps = defaultObj(contentContainerProps);
|
10
|
-
contentContainerProps.
|
10
|
+
contentContainerProps.style = [{pointerEvents: "auto"},contentContainerProps.style];
|
11
11
|
return <TextField
|
12
12
|
ref = {ref}
|
13
13
|
{...props}
|
@@ -257,7 +257,7 @@ export default function ImageComponent(props){
|
|
257
257
|
{...menuProps}
|
258
258
|
disabled = {isDisabled}
|
259
259
|
anchor = {(props)=>{
|
260
|
-
return <View
|
260
|
+
return <View aria-label={_label} testID={testID+"_Container"} {...containerProps} style={[label?styles.align:null,containerProps.style,{pointerEvents:disabled|| readOnly? "none":"auto"},label?styles.container:null]}>
|
261
261
|
{<Label testID={testID+"_Label"} {...labelProps} disabled={disabled} style={[styles.label,labelProps.style]}>{label}</Label>}
|
262
262
|
{<Avatar
|
263
263
|
resizeMethod = {"auto"}
|
@@ -10,7 +10,7 @@ const defaultSelectable = canTextBeSelectable();
|
|
10
10
|
|
11
11
|
export const EllipsizeMode = {'head':'head','middle':'middle', 'tail':'tail' , 'clip':'clip'}
|
12
12
|
|
13
|
-
const LabelComponent = React.forwardRef(({ children,
|
13
|
+
const LabelComponent = React.forwardRef(({ children,userSelect,role,color,upperCase,fontSize,testID,wrap,id,wrapText,error,underlined,splitText,secondary,primary,bold,textBold,disabled,text,style,...rest},ref)=> {
|
14
14
|
children = defaultVal(children,text);
|
15
15
|
let isText = false;
|
16
16
|
if(!React.isValidElement(children) && Array.isArray(children) && children.length){
|
@@ -58,8 +58,8 @@ const LabelComponent = React.forwardRef(({ children,selectable,role,color,upperC
|
|
58
58
|
if(disabled){
|
59
59
|
r1.pointerEvents = "none";
|
60
60
|
}
|
61
|
-
|
62
|
-
r2.userSelect = !
|
61
|
+
userSelect = userSelect === false || defaultSelectable === false ? false : true;
|
62
|
+
r2.userSelect = !userSelect?"none":"all";
|
63
63
|
if(isNonNullString(children) || isText || typeof children ==='number'){
|
64
64
|
if(!isText){
|
65
65
|
children +="";
|
@@ -70,7 +70,7 @@ const LabelComponent = React.forwardRef(({ children,selectable,role,color,upperC
|
|
70
70
|
if(fontSize){
|
71
71
|
r1.fontSize = fontSize;
|
72
72
|
}
|
73
|
-
if(
|
73
|
+
if(userSelect){
|
74
74
|
r2.userSelect = "text";
|
75
75
|
}
|
76
76
|
return (<Text allowFontScaling = {true} ref = {ref}
|
@@ -117,7 +117,7 @@ LabelComponentExported.propTypes = {
|
|
117
117
|
error : PropTypes.bool,///si le label est liée à une text field sur laquelle il y a erreur
|
118
118
|
secondary : PropTypes.bool,
|
119
119
|
color : PropTypes.string,
|
120
|
-
|
120
|
+
userSelect : PropTypes.bool, //si le texte est sélectionnable
|
121
121
|
underlined : PropTypes.bool,//si le style underlined sera appliqué au label
|
122
122
|
splitText : PropTypes.bool,///si le texte lorsqu'il est long sera splité,
|
123
123
|
/*useSelect : PropTypes.oneOfType([
|
@@ -34,7 +34,6 @@ const MenuItemComponent = React.forwardRef(({
|
|
34
34
|
secondary,
|
35
35
|
iconProps,
|
36
36
|
isBottomSheetItem,
|
37
|
-
accessibilityLabel,
|
38
37
|
right,
|
39
38
|
labelProps,
|
40
39
|
contentContainerProps,
|
@@ -79,14 +78,12 @@ const MenuItemComponent = React.forwardRef(({
|
|
79
78
|
{...defaultObj(rest)}
|
80
79
|
tooltip = {defaultVal(rest.tooltip,title,label,text)}
|
81
80
|
Component = {TouchableRipple}
|
82
|
-
style={[styles.container, style,maxWidthStyle,disabledStyle]}
|
81
|
+
style={[styles.container,{pointerEvents}, style,maxWidthStyle,disabledStyle]}
|
83
82
|
onPress={onPress}
|
84
83
|
disabled={disabled}
|
85
84
|
testID={testID}
|
86
|
-
accessibilityLabel={accessibilityLabel}
|
87
85
|
role="menuitem"
|
88
86
|
accessibilityState={{ disabled }}
|
89
|
-
pointerEvents = {pointerEvents}
|
90
87
|
>
|
91
88
|
<View style={[styles.row]} ref={ref} testID={testID+"_ContentContainer"}>
|
92
89
|
{icon ? (
|
@@ -111,7 +108,7 @@ const MenuItemComponent = React.forwardRef(({
|
|
111
108
|
>
|
112
109
|
<Label
|
113
110
|
testID={testID+"_Label"}
|
114
|
-
|
111
|
+
userSelect={false}
|
115
112
|
numberOfLines={1}
|
116
113
|
splitText
|
117
114
|
{...labelProps}
|
@@ -218,7 +215,7 @@ MenuItemComponent.propTypes = {
|
|
218
215
|
/**
|
219
216
|
* Accessibility label for the Touchable. This is read by the screen reader when the user taps the component.
|
220
217
|
*/
|
221
|
-
|
218
|
+
"aria-label" : PropTypes.string,
|
222
219
|
};
|
223
220
|
|
224
221
|
|
@@ -473,7 +473,7 @@ class _Menu extends AppComponent {
|
|
473
473
|
<Portal>
|
474
474
|
{rendered ? <TouchableWithoutFeedback
|
475
475
|
testID={testID+"_Menu_TouchableWithoutFeedBack"}
|
476
|
-
|
476
|
+
aria-label={overlayAccessibilityLabel}
|
477
477
|
//role="button"
|
478
478
|
onPress={onDismiss}
|
479
479
|
style = {[hiddenStyle]}
|
@@ -487,8 +487,7 @@ class _Menu extends AppComponent {
|
|
487
487
|
}}
|
488
488
|
collapsable={false}
|
489
489
|
accessibilityViewIsModal={visible}
|
490
|
-
style={[styles.wrapper, positionStyle, style,hiddenStyle]}
|
491
|
-
pointerEvents={visible ? 'box-none' : 'none'}
|
490
|
+
style={[styles.wrapper, positionStyle, style,hiddenStyle,{pointerEvents:visible ? 'box-none' : 'none'}]}
|
492
491
|
onAccessibilityEscape={onDismiss}
|
493
492
|
>
|
494
493
|
{rendered?<Animated.View style={{ transform: positionTransforms }} testID={testID+"_Animated"}>
|
@@ -120,7 +120,7 @@ const ModalComponent = React.forwardRef((props,ref)=>{
|
|
120
120
|
animationPosition = {animationPosition}
|
121
121
|
>
|
122
122
|
<TouchableWithoutFeedback
|
123
|
-
|
123
|
+
aria-label={overlayAccessibilityLabel}
|
124
124
|
//role="button"
|
125
125
|
disabled={!dismissable}
|
126
126
|
onPress={dismissable ? hideModal : undefined}
|
@@ -157,7 +157,7 @@ export default function PhoneInputComponent(props){
|
|
157
157
|
helperText = {helperText}
|
158
158
|
contentContainerProps = {contentContainerProps}
|
159
159
|
label = {label}
|
160
|
-
|
160
|
+
aria-label = {defaultStr(label,text)}
|
161
161
|
formatValue = {false}
|
162
162
|
disabled = {props.disabled}
|
163
163
|
pointerEvents = {pointerEvents}
|
@@ -285,7 +285,7 @@ const SimpleSelect = React.forwardRef((props,ref)=>{
|
|
285
285
|
{...anchorContainerProps}
|
286
286
|
onPress={show}
|
287
287
|
disabled = {!isEditable}
|
288
|
-
|
288
|
+
aria-label={defaultStr(label,text)}
|
289
289
|
rippleColor={undefined}
|
290
290
|
onLayout={onLayout}
|
291
291
|
style = {[{pointerEvents},anchorContainerProps.style]}
|
@@ -464,7 +464,7 @@ const TextFieldComponent = React.forwardRef((componentProps,inputRef)=>{
|
|
464
464
|
{...iconProps}
|
465
465
|
disabled = {!isEditable}
|
466
466
|
forceTextInputFocus={false}
|
467
|
-
|
467
|
+
aria-label ={!secureTextEntry?"Cliquez pour masquer le contenu":"Cliquez pour afficher le contenu"}
|
468
468
|
icon={secureTextEntry?'eye-off':'eye'}
|
469
469
|
onPress={()=>{
|
470
470
|
setSecureTextEntry(!secureTextEntry);
|
@@ -1 +1 @@
|
|
1
|
-
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.
|
1
|
+
module.exports = {"@fto-consult/expo-ui":{"name":"@fto-consult/expo-ui","version":"6.83.0","repository":{"type":"git","url":"git+https://github.com/borispipo/expo-ui.git"},"homepage":"https://github.com/borispipo/expo-ui#readme"},"@babel/plugin-proposal-export-namespace-from":{"version":"7.18.9","url":"https://babel.dev/docs/en/next/babel-plugin-proposal-export-namespace-from","license":"MIT"},"@emotion/native":{"version":"11.11.0","url":"https://emotion.sh","license":"MIT"},"@emotion/react":{"version":"11.11.1","url":"https://github.com/emotion-js/emotion/tree/main/packages/react","license":"MIT"},"@expo/html-elements":{"version":"0.5.1","url":"https://github.com/expo/expo/tree/main/packages/html-elements","license":"MIT"},"@expo/metro-config":{"version":"0.10.7","url":"https://github.com/expo/expo.git","license":"MIT"},"@expo/vector-icons":{"version":"13.0.0","url":"https://expo.github.io/vector-icons","license":"MIT"},"@expo/webpack-config":{"version":"19.0.0","url":"https://github.com/expo/expo-cli.git","license":"MIT"},"@faker-js/faker":{"version":"8.0.2","url":"https://github.com/faker-js/faker.git","license":"MIT"},"@fto-consult/common":{"version":"3.65.12","url":"https://github.com/borispipo/common#readme","license":"ISC"},"@pchmn/expo-material3-theme":{"version":"1.3.1","url":"https://github.com/pchmn/expo-material3-theme#readme","license":"MIT"},"@react-native-async-storage/async-storage":{"version":"1.18.2","url":"https://github.com/react-native-async-storage/async-storage#readme","license":"MIT"},"@react-native-community/datetimepicker":{"version":"7.2.0","url":"https://github.com/react-native-community/datetimepicker#readme","license":"MIT"},"@react-native-community/netinfo":{"version":"9.3.10","url":"https://github.com/react-native-netinfo/react-native-netinfo#readme","license":"MIT"},"@react-native/assets-registry":{"version":"0.72.0","url":"git@github.com:facebook/react-native.git","license":"MIT"},"@react-navigation/native":{"version":"6.1.9","url":"https://reactnavigation.org","license":"MIT"},"@react-navigation/native-stack":{"version":"6.9.17","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"@react-navigation/stack":{"version":"6.3.20","url":"https://reactnavigation.org/docs/stack-navigator/","license":"MIT"},"@shopify/flash-list":{"version":"1.4.3","url":"https://shopify.github.io/flash-list/","license":"MIT"},"apexcharts":{"version":"3.44.0","url":"https://apexcharts.com","license":"MIT"},"babel-plugin-inline-dotenv":{"version":"1.7.0","url":"https://github.com/brysgo/babel-plugin-inline-dotenv#readme","license":"ISC"},"babel-plugin-module-resolver":{"version":"5.0.0","url":"https://github.com/tleunen/babel-plugin-module-resolver.git","license":"MIT"},"expo":{"version":"49.0.20","url":"https://github.com/expo/expo/tree/main/packages/expo","license":"MIT"},"expo-camera":{"version":"13.4.4","url":"https://docs.expo.dev/versions/latest/sdk/camera/","license":"MIT"},"expo-clipboard":{"version":"4.3.1","url":"https://docs.expo.dev/versions/latest/sdk/clipboard","license":"MIT"},"expo-font":{"version":"11.4.0","url":"https://docs.expo.dev/versions/latest/sdk/font/","license":"MIT"},"expo-image-picker":{"version":"14.3.2","url":"https://docs.expo.dev/versions/latest/sdk/imagepicker/","license":"MIT"},"expo-linking":{"version":"5.0.2","url":"https://docs.expo.dev/versions/latest/sdk/linking","license":"MIT"},"expo-sharing":{"version":"11.5.0","url":"https://docs.expo.dev/versions/latest/sdk/sharing/","license":"MIT"},"expo-sqlite":{"version":"11.3.3","url":"https://docs.expo.dev/versions/latest/sdk/sqlite/","license":"MIT"},"expo-status-bar":{"version":"1.6.0","url":"https://docs.expo.dev/versions/latest/sdk/status-bar/","license":"MIT"},"expo-system-ui":{"version":"2.4.0","url":"https://docs.expo.dev/versions/latest/sdk/system-ui","license":"MIT"},"expo-web-browser":{"version":"12.3.2","url":"https://docs.expo.dev/versions/latest/sdk/webbrowser/","license":"MIT"},"file-saver":{"version":"2.0.5","url":"https://github.com/eligrey/FileSaver.js#readme","license":"MIT"},"fs-extra":{"version":"11.1.1","url":"https://github.com/jprichardson/node-fs-extra","license":"MIT"},"google-libphonenumber":{"version":"3.2.33","url":"https://ruimarinho.github.io/google-libphonenumber/","license":"(MIT AND Apache-2.0)"},"htmlparser2-without-node-native":{"version":"3.9.2","url":"git://github.com/fb55/htmlparser2.git","license":"MIT"},"is-plain-obj":{"version":"4.1.0","license":"MIT"},"js-base64":{"version":"3.7.5","license":"BSD-3-Clause"},"pdfmake":{"version":"0.2.8","url":"http://pdfmake.org","license":"MIT"},"process":{"version":"0.11.10","url":"git://github.com/shtylman/node-process.git","license":"MIT"},"prop-types":{"version":"15.8.1","url":"https://facebook.github.io/react/","license":"MIT"},"react":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-content-loader":{"version":"6.2.1","url":"https://github.com/danilowoz/react-content-loader","license":"MIT"},"react-dom":{"version":"18.2.0","url":"https://reactjs.org/","license":"MIT"},"react-native":{"version":"0.72.6","license":"MIT"},"react-native-big-list":{"version":"1.6.1","url":"https://marcocesarato.github.io/react-native-big-list-docs/","license":"GPL-3.0-or-later"},"react-native-blob-util":{"version":"0.18.6","url":"https://github.com/RonRadtke/react-native-blob-util","license":"MIT"},"react-native-get-random-values":{"version":"1.9.0","license":"MIT"},"react-native-iphone-x-helper":{"version":"1.3.1","url":"https://github.com/ptelad/react-native-iphone-x-helper#readme","license":"MIT"},"react-native-mime-types":{"version":"2.4.0","license":"MIT"},"react-native-paper":{"version":"5.11.1","url":"https://callstack.github.io/react-native-paper","license":"MIT"},"react-native-paper-dates":{"version":"0.20.4","url":"https://github.com/web-ridge/react-native-paper-dates#readme","license":"MIT"},"react-native-reanimated":{"version":"3.3.0","url":"https://github.com/software-mansion/react-native-reanimated#readme","license":"MIT"},"react-native-safe-area-context":{"version":"4.6.3","url":"https://github.com/th3rdwave/react-native-safe-area-context#readme","license":"MIT"},"react-native-screens":{"version":"3.22.1","url":"https://github.com/software-mansion/react-native-screens#readme","license":"MIT"},"react-native-svg":{"version":"13.9.0","url":"https://github.com/react-native-community/react-native-svg","license":"MIT"},"react-native-web":{"version":"0.19.9","url":"git://github.com/necolas/react-native-web.git","license":"MIT"},"react-native-webview":{"version":"13.2.2","url":"https://github.com/react-native-webview/react-native-webview#readme","license":"MIT"},"react-virtuoso":{"version":"4.6.2","url":"https://virtuoso.dev/","license":"MIT"},"sharp-cli":{"version":"2.1.0","url":"https://github.com/vseventer/sharp-cli","license":"MIT"},"tippy.js":{"version":"6.3.7","url":"https://atomiks.github.io/tippyjs/","license":"MIT"},"websql":{"version":"2.0.3","url":"git://github.com/nolanlawson/node-websql.git","license":"Apache-2.0"},"xlsx":{"version":"0.18.5","url":"https://sheetjs.com/","license":"Apache-2.0"}};
|