@alveole/components 2.0.0-alpha.24 → 2.0.0-alpha.27
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/dist/generated/version.d.ts +1 -1
- package/dist/generated/version.js +1 -1
- package/dist/pdfjs/pdf.min.mjs +4 -4
- package/dist/pdfjs/pdf.worker.min.mjs +4 -4
- package/dist/ui/FormControl/TextInputPassword.d.ts +3 -0
- package/dist/ui/FormControl/TextInputPassword.d.ts.map +1 -1
- package/dist/ui/FormControl/TextInputPassword.js +3 -1
- package/dist/ui/Switch/Switch.d.ts +5 -0
- package/dist/ui/Switch/Switch.d.ts.map +1 -1
- package/dist/ui/Switch/Switch.js +16 -12
- package/dist/ui/Switch/Switch.stories.d.ts +2 -1
- package/dist/ui/Switch/Switch.stories.d.ts.map +1 -1
- package/dist/ui/Switch/Switch.stories.js +1 -0
- package/dist/ui/Switch/Switch.stories.sources.d.ts +2 -0
- package/dist/ui/Switch/Switch.stories.sources.d.ts.map +1 -1
- package/dist/ui/Switch/Switch.stories.sources.js +2 -0
- package/dist/ui/Switch/Switch.styles.d.ts +0 -1
- package/dist/ui/Switch/Switch.styles.d.ts.map +1 -1
- package/dist/ui/Switch/Switch.styles.js +1 -2
- package/package.json +14 -9
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
+
import { LucideIconName } from '../LucideIcon/LucideIcon.props';
|
|
2
3
|
import { TextInputElement } from './TextInput.types';
|
|
4
|
+
/** L'oeil montre l'action et non l'etat : ouvert pour reveler, barre pour masquer. */
|
|
5
|
+
export declare const iconeDeLOeil: (masque: boolean) => LucideIconName;
|
|
3
6
|
/** Le mot de passe : une saisie ordinaire, masquee, qu'un oeil permet de reveler. */
|
|
4
7
|
export declare const TextInputPassword: React.ForwardRefExoticComponent<Omit<import("react-native").TextInputProps, "style"> & {
|
|
5
8
|
type?: "text" | "email" | "tel" | "password";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextInputPassword.d.ts","sourceRoot":"","sources":["../../../src/ui/FormControl/TextInputPassword.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AAYrE,qFAAqF;AACrF,eAAO,MAAM,iBAAiB;;;;;;;;;;;0CAyB7B,CAAC"}
|
|
1
|
+
{"version":3,"file":"TextInputPassword.d.ts","sourceRoot":"","sources":["../../../src/ui/FormControl/TextInputPassword.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,OAAO,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAkB,MAAM,mBAAmB,CAAC;AAYrE,sFAAsF;AACtF,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,KAAG,cAA6C,CAAC;AAE7F,qFAAqF;AACrF,eAAO,MAAM,iBAAiB;;;;;;;;;;;0CAyB7B,CAAC"}
|
|
@@ -11,8 +11,10 @@ const boutonAccole = {
|
|
|
11
11
|
paddingTop: 0,
|
|
12
12
|
paddingBottom: 0,
|
|
13
13
|
};
|
|
14
|
+
/** L'oeil montre l'action et non l'etat : ouvert pour reveler, barre pour masquer. */
|
|
15
|
+
export const iconeDeLOeil = (masque) => (masque ? 'Eye' : 'EyeOff');
|
|
14
16
|
/** Le mot de passe : une saisie ordinaire, masquee, qu'un oeil permet de reveler. */
|
|
15
17
|
export const TextInputPassword = React.forwardRef(function TextInputPassword(props, ref) {
|
|
16
18
|
const [masque, setMasque] = React.useState(true);
|
|
17
|
-
return (_jsx(TextInputInline, { secureTextEntry: masque, autoComplete: "current-password", textContentType: "password", autoCapitalize: "none", endAdornment: _jsx(ButtonIcon, { size: "sm", variant: "tertiary", style: boutonAccole, icon: masque
|
|
19
|
+
return (_jsx(TextInputInline, { secureTextEntry: masque, autoComplete: "current-password", textContentType: "password", autoCapitalize: "none", endAdornment: _jsx(ButtonIcon, { size: "sm", variant: "tertiary", style: boutonAccole, icon: iconeDeLOeil(masque), accessibilityLabel: masque ? 'Afficher le mot de passe' : 'Masquer le mot de passe', onPress: () => setMasque(actuel => !actuel) }), ...props, ref: ref }));
|
|
18
20
|
});
|
|
@@ -8,7 +8,10 @@ export type SwitchProps = Omit<TamaguiSwitchProps, 'value' | 'onChange'> & {
|
|
|
8
8
|
error?: string;
|
|
9
9
|
success?: string;
|
|
10
10
|
noPadding?: boolean;
|
|
11
|
+
/** `md` par défaut ; `lg` reprend la taille d'avant la 2.0. */
|
|
12
|
+
size?: SwitchTaille;
|
|
11
13
|
};
|
|
14
|
+
export type SwitchTaille = 'sm' | 'md' | 'lg';
|
|
12
15
|
export declare const Switch: React.ForwardRefExoticComponent<Omit<TamaguiSwitchProps, "onChange" | "value"> & {
|
|
13
16
|
id?: string;
|
|
14
17
|
label?: string;
|
|
@@ -16,5 +19,7 @@ export declare const Switch: React.ForwardRefExoticComponent<Omit<TamaguiSwitchP
|
|
|
16
19
|
error?: string;
|
|
17
20
|
success?: string;
|
|
18
21
|
noPadding?: boolean;
|
|
22
|
+
/** `md` par défaut ; `lg` reprend la taille d'avant la 2.0. */
|
|
23
|
+
size?: SwitchTaille;
|
|
19
24
|
} & React.RefAttributes<TamaguiElement>>;
|
|
20
25
|
//# sourceMappingURL=Switch.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAS,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,cAAc,EAA2B,WAAW,IAAI,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASrG,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;
|
|
1
|
+
{"version":3,"file":"Switch.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,aAAa,EAAS,MAAM,OAAO,CAAC;AAEpD,OAAO,EAAE,cAAc,EAA2B,WAAW,IAAI,kBAAkB,EAAE,MAAM,SAAS,CAAC;AASrG,MAAM,MAAM,aAAa,GAAG,cAAc,CAAC;AAC3C,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,kBAAkB,EAAE,OAAO,GAAG,UAAU,CAAC,GAAG;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+DAA+D;IAC/D,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAuC9C,eAAO,MAAM,MAAM;SAjDZ,MAAM;YACH,MAAM;YACN,aAAa;YACb,MAAM;cACJ,MAAM;gBACJ,OAAO;IACnB,+DAA+D;WACxD,YAAY;wCA+GnB,CAAC"}
|
package/dist/ui/Switch/Switch.js
CHANGED
|
@@ -15,24 +15,28 @@ const SwitchLabel = ({ id, checked, disabled, onChange, children }) => Platform.
|
|
|
15
15
|
// 4 px pour le padding et la bordure qu'Alveole pose de chaque cote. La v2 ne compte plus ces
|
|
16
16
|
// 4 px, et le pouce debordait de sa piste. La taille de reference etait le token `$true` de la
|
|
17
17
|
// config de l'application, 44 px ; la config v5 de Tamagui v3 ne le fournit plus, Alveole la fixe.
|
|
18
|
-
|
|
19
|
-
const
|
|
18
|
+
// `lg` garde ce pouce historique ; `md` et `sm` le réduisent.
|
|
19
|
+
const POUCES = { sm: 16, md: 22, lg: Math.round(44 * 0.65) };
|
|
20
|
+
const dimensionsDeLaPiste = (pouce) => ({ width: 2 * pouce + 4, height: pouce + 4, minHeight: pouce + 4 });
|
|
21
|
+
// En mode contrôlé, `checked` fait foi et l'état local reste inutilisé.
|
|
22
|
+
const useValeur = (checked, onCheckedChange) => {
|
|
23
|
+
const [model, setModel] = React.useState(Boolean(checked));
|
|
24
|
+
const onChange = (newValue) => {
|
|
25
|
+
setModel(newValue);
|
|
26
|
+
onCheckedChange?.(newValue);
|
|
27
|
+
};
|
|
28
|
+
return [checked ?? model, onChange];
|
|
29
|
+
};
|
|
20
30
|
export const Switch = React.forwardRef(function Switch(props, ref) {
|
|
21
|
-
const { checked, style, label, error, success, disabled, noPadding, onCheckedChange, ...switchProps } = props;
|
|
31
|
+
const { checked, style, label, error, success, disabled, noPadding, size = 'md', onCheckedChange, ...switchProps } = props;
|
|
22
32
|
let { id } = props;
|
|
23
|
-
const
|
|
24
|
-
const [model, setModel] = React.useState(Boolean(checked));
|
|
25
|
-
const value = isControlled ? checked : model;
|
|
33
|
+
const [value, onChange] = useValeur(checked, onCheckedChange);
|
|
26
34
|
const styles = useStyles();
|
|
35
|
+
const pouceTaille = POUCES[size];
|
|
27
36
|
const uniqId = useId();
|
|
28
37
|
id = id || `switch--${uniqId}`;
|
|
29
|
-
const onChange = (newValue) => {
|
|
30
|
-
if (!isControlled)
|
|
31
|
-
setModel(newValue);
|
|
32
|
-
onCheckedChange?.(newValue);
|
|
33
|
-
};
|
|
34
38
|
const { bouton, pouce, libelle } = apparenceDuSwitch(styles, { value, disabled, noPadding, style });
|
|
35
|
-
const Toggle = (_jsx(TamaguiSwitch, { id: id, ref: ref, borderWidth: 1, ...
|
|
39
|
+
const Toggle = (_jsx(TamaguiSwitch, { id: id, ref: ref, borderWidth: 1, ...dimensionsDeLaPiste(pouceTaille), checked: value, onCheckedChange: onChange, style: bouton, disabled: disabled, accessibilityLabel: label, accessibilityRole: "switch", accessibilityState: { checked: Boolean(value), disabled: Boolean(disabled) }, ...focusRingProps(), ...switchProps, children: _jsx(TamaguiSwitch.Thumb, { ...animer('quicker'), width: pouceTaille, height: pouceTaille, style: pouce }) }));
|
|
36
40
|
const ToggleWithLabel = (_jsxs(_Fragment, { children: [_jsx(SwitchLabel, { id: id, checked: value, disabled: disabled, onChange: onChange, children: _jsxs(Box, { tag: "switch", style: styles.switch, children: [Toggle, !!label && (_jsx(Typography, { htmlFor: id, style: libelle, children: label }))] }) }), (error ?? success) && _jsx(FormControlCaption, { error: error, success: success })] }));
|
|
37
41
|
return (_jsx(Box, { tag: "switch", gap: error || success ? '1W' : '0V', style: styles.switchContainer, children: !label ? Toggle : ToggleWithLabel }));
|
|
38
42
|
});
|
|
@@ -10,6 +10,7 @@ declare const _default: {
|
|
|
10
10
|
error?: string;
|
|
11
11
|
success?: string;
|
|
12
12
|
noPadding?: boolean;
|
|
13
|
+
size?: import("./Switch").SwitchTaille;
|
|
13
14
|
} & import("react").RefAttributes<import("tamagui").TamaguiElement>>;
|
|
14
15
|
styleFn: () => {
|
|
15
16
|
switchContainer: {};
|
|
@@ -24,7 +25,6 @@ declare const _default: {
|
|
|
24
25
|
backgroundColor: import("@alveole/theme").ThemeColor;
|
|
25
26
|
cursor: "pointer";
|
|
26
27
|
padding: number;
|
|
27
|
-
minHeight: string | number;
|
|
28
28
|
marginTop: string;
|
|
29
29
|
marginBottom: string;
|
|
30
30
|
};
|
|
@@ -70,6 +70,7 @@ declare const _default: {
|
|
|
70
70
|
};
|
|
71
71
|
export default _default;
|
|
72
72
|
export declare const Default: () => import("react").JSX.Element;
|
|
73
|
+
export declare const Sizes: () => import("react").JSX.Element;
|
|
73
74
|
export declare const Controlled: () => import("react").JSX.Element;
|
|
74
75
|
export * as Sources from './Switch.stories.sources';
|
|
75
76
|
//# sourceMappingURL=Switch.stories.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBAOkB;AAElB,eAAO,MAAM,OAAO,mCAOnB,CAAC;AAEF,eAAO,MAAM,UAAU,mCAGtB,CAAC;AAEF,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC"}
|
|
1
|
+
{"version":3,"file":"Switch.stories.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.stories.tsx"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,wBAOkB;AAElB,eAAO,MAAM,OAAO,mCAOnB,CAAC;AAEF,eAAO,MAAM,KAAK,mCAMjB,CAAC;AAEF,eAAO,MAAM,UAAU,mCAGtB,CAAC;AAEF,OAAO,KAAK,OAAO,MAAM,0BAA0B,CAAC"}
|
|
@@ -12,6 +12,7 @@ export default {
|
|
|
12
12
|
styleFn: useStyles,
|
|
13
13
|
};
|
|
14
14
|
export const Default = () => (_jsxs(Box, { display: "flex", flexDirection: "column", gap: "3W", children: [_jsx(Switch, { label: "Non activ\u00E9" }), _jsx(Switch, { label: "Activ\u00E9", checked: true }), _jsx(Switch, { label: "D\u00E9sactiv\u00E9", disabled: true }), _jsx(Switch, { label: "Activ\u00E9 d\u00E9sactiv\u00E9", checked: true, disabled: true })] }));
|
|
15
|
+
export const Sizes = () => (_jsxs(Box, { display: "flex", flexDirection: "column", gap: "3W", children: [_jsx(Switch, { label: "Sm", size: "sm", checked: true }), _jsx(Switch, { label: "Md", size: "md", checked: true }), _jsx(Switch, { label: "Lg", size: "lg", checked: true })] }));
|
|
15
16
|
export const Controlled = () => {
|
|
16
17
|
const [value, setValue] = useState(false);
|
|
17
18
|
return _jsx(Switch, { label: value ? 'Activé' : 'Désactivé', checked: value, onCheckedChange: v => setValue(!!v) });
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export declare const Default: () => string;
|
|
2
|
+
export declare const Sizes: () => string;
|
|
2
3
|
export declare const Controlled: () => string;
|
|
3
4
|
export declare const storySources: {
|
|
4
5
|
readonly Default: () => string;
|
|
6
|
+
readonly Sizes: () => string;
|
|
5
7
|
readonly Controlled: () => string;
|
|
6
8
|
};
|
|
7
9
|
export type StorySourceName = keyof typeof storySources;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAA4S,CAAC;AAEjU,eAAO,MAAM,UAAU,cAAgN,CAAC;AAExO,eAAO,MAAM,YAAY
|
|
1
|
+
{"version":3,"file":"Switch.stories.sources.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.stories.sources.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,OAAO,cAA4S,CAAC;AAEjU,eAAO,MAAM,KAAK,cAAsQ,CAAC;AAEzR,eAAO,MAAM,UAAU,cAAgN,CAAC;AAExO,eAAO,MAAM,YAAY;;;;CAIf,CAAC;AAEX,MAAM,MAAM,eAAe,GAAG,MAAM,OAAO,YAAY,CAAC"}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
// This file is generated. Do not edit manually.
|
|
2
2
|
// Source: src/ui/Switch/Switch.stories.tsx
|
|
3
3
|
export const Default = () => "export const Default = () => (\n <Box display=\"flex\" flexDirection=\"column\" gap=\"3W\">\n <Switch label=\"Non activé\" />\n <Switch label=\"Activé\" checked />\n <Switch label=\"Désactivé\" disabled />\n <Switch label=\"Activé désactivé\" checked disabled />\n </Box>\n);";
|
|
4
|
+
export const Sizes = () => "export const Sizes = () => (\n <Box display=\"flex\" flexDirection=\"column\" gap=\"3W\">\n <Switch label=\"Sm\" size=\"sm\" checked />\n <Switch label=\"Md\" size=\"md\" checked />\n <Switch label=\"Lg\" size=\"lg\" checked />\n </Box>\n);";
|
|
4
5
|
export const Controlled = () => "export const Controlled = () => {\n const [value, setValue] = useState(false);\n return <Switch label={value ? 'Activé' : 'Désactivé'} checked={value} onCheckedChange={v => setValue(!!v)} />;\n};";
|
|
5
6
|
export const storySources = {
|
|
6
7
|
Default,
|
|
8
|
+
Sizes,
|
|
7
9
|
Controlled,
|
|
8
10
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Switch.styles.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS
|
|
1
|
+
{"version":3,"file":"Switch.styles.d.ts","sourceRoot":"","sources":["../../../src/ui/Switch/Switch.styles.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmDnB,CAAC"}
|
|
@@ -13,7 +13,6 @@ export const useStyles = makeStyles(({ text, color, spacing }) => ({
|
|
|
13
13
|
backgroundColor: color.background.default,
|
|
14
14
|
cursor: 'pointer',
|
|
15
15
|
padding: 1,
|
|
16
|
-
minHeight: spacing('4W'),
|
|
17
16
|
marginTop: 'auto',
|
|
18
17
|
marginBottom: 'auto',
|
|
19
18
|
},
|
|
@@ -33,7 +32,7 @@ export const useStyles = makeStyles(({ text, color, spacing }) => ({
|
|
|
33
32
|
boxShadow: 'none',
|
|
34
33
|
},
|
|
35
34
|
switchThumbChecked: {
|
|
36
|
-
backgroundColor: color.primary,
|
|
35
|
+
backgroundColor: color.light.background['action-high-primary'],
|
|
37
36
|
},
|
|
38
37
|
switchThumbDisabled: {
|
|
39
38
|
backgroundColor: color.background['disabled-grey'],
|
package/package.json
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@alveole/components",
|
|
3
|
-
"version": "2.0.0-alpha.
|
|
3
|
+
"version": "2.0.0-alpha.27",
|
|
4
4
|
"description": "Shared UI components.",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "git+https://github.com/captive-studio/alveole-js.git",
|
|
8
|
+
"directory": "packages/components"
|
|
9
|
+
},
|
|
5
10
|
"main": "dist/index.js",
|
|
6
11
|
"types": "dist/index.d.ts",
|
|
7
12
|
"exports": {
|
|
@@ -28,28 +33,28 @@
|
|
|
28
33
|
"@react-native-community/datetimepicker": "9.2.1",
|
|
29
34
|
"@react-native/jest-preset": "0.88.0",
|
|
30
35
|
"@shopify/flash-list": "2.3.2",
|
|
31
|
-
"@tamagui/core": "3.
|
|
32
|
-
"@tamagui/toast": "3.
|
|
36
|
+
"@tamagui/core": "3.2.3",
|
|
37
|
+
"@tamagui/toast": "3.2.3",
|
|
33
38
|
"@testing-library/react": "16.3.3",
|
|
34
39
|
"@testing-library/react-native": "14.1.0",
|
|
35
40
|
"@types/react-syntax-highlighter": "15.5.13",
|
|
36
41
|
"babel-preset-expo": "58.0.20",
|
|
37
42
|
"eslint": "10.14.0",
|
|
38
|
-
"expo": "58.0.
|
|
43
|
+
"expo": "58.0.23",
|
|
39
44
|
"expo-application": "58.1.2",
|
|
40
|
-
"expo-asset": "58.0.
|
|
45
|
+
"expo-asset": "58.0.20",
|
|
41
46
|
"expo-document-picker": "58.0.4",
|
|
42
47
|
"expo-image-picker": "58.0.10",
|
|
43
48
|
"expo-in-app-updates": "0.13.0",
|
|
44
49
|
"expo-linear-gradient": "58.0.3",
|
|
45
|
-
"expo-modules-core": "58.0.
|
|
46
|
-
"expo-router": "58.0.
|
|
50
|
+
"expo-modules-core": "58.0.30",
|
|
51
|
+
"expo-router": "58.0.30",
|
|
47
52
|
"expo-system-ui": "58.0.7",
|
|
48
53
|
"expo-web-browser": "58.0.7",
|
|
49
54
|
"jest": "29.7.0",
|
|
50
55
|
"jest-environment-jsdom": "30.5.2",
|
|
51
56
|
"jest-expo": "58.0.12",
|
|
52
|
-
"pdfjs-dist": "6.
|
|
57
|
+
"pdfjs-dist": "6.5.438",
|
|
53
58
|
"react": "19.3.0",
|
|
54
59
|
"react-dom": "19.3.0",
|
|
55
60
|
"react-native": "0.88.1",
|
|
@@ -58,7 +63,7 @@
|
|
|
58
63
|
"react-native-web": "0.21.4",
|
|
59
64
|
"react-select": "5.10.2",
|
|
60
65
|
"react-syntax-highlighter": "16.1.2",
|
|
61
|
-
"tamagui": "3.
|
|
66
|
+
"tamagui": "3.2.3",
|
|
62
67
|
"test-renderer": "1.3.1"
|
|
63
68
|
},
|
|
64
69
|
"dependencies": {
|