@rsuci/shared-form-components 1.0.25 → 1.0.28
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/components/display/LabelDisplay.d.ts.map +1 -1
- package/dist/components/display/LabelDisplay.js +3 -1
- package/dist/components/inputs/CheckboxInput.d.ts +1 -0
- package/dist/components/inputs/CheckboxInput.d.ts.map +1 -1
- package/dist/components/inputs/CheckboxInput.js +9 -3
- package/dist/components/inputs/ComboboxInput.d.ts +1 -0
- package/dist/components/inputs/ComboboxInput.d.ts.map +1 -1
- package/dist/components/inputs/ComboboxInput.js +6 -2
- package/dist/components/inputs/DatePicker.d.ts +1 -0
- package/dist/components/inputs/DatePicker.d.ts.map +1 -1
- package/dist/components/inputs/DatePicker.js +17 -2
- package/dist/components/inputs/EmailInput.d.ts +1 -0
- package/dist/components/inputs/EmailInput.d.ts.map +1 -1
- package/dist/components/inputs/EmailInput.js +17 -2
- package/dist/components/inputs/GPSInput.d.ts +1 -0
- package/dist/components/inputs/GPSInput.d.ts.map +1 -1
- package/dist/components/inputs/GPSInput.js +7 -3
- package/dist/components/inputs/GeographicCascadeInput.d.ts +1 -0
- package/dist/components/inputs/GeographicCascadeInput.d.ts.map +1 -1
- package/dist/components/inputs/GeographicCascadeInput.js +5 -3
- package/dist/components/inputs/HourInput.d.ts +1 -0
- package/dist/components/inputs/HourInput.d.ts.map +1 -1
- package/dist/components/inputs/HourInput.js +15 -2
- package/dist/components/inputs/NumberInput.d.ts +1 -0
- package/dist/components/inputs/NumberInput.d.ts.map +1 -1
- package/dist/components/inputs/NumberInput.js +19 -2
- package/dist/components/inputs/PhoneInput.d.ts +1 -0
- package/dist/components/inputs/PhoneInput.d.ts.map +1 -1
- package/dist/components/inputs/PhoneInput.js +17 -2
- package/dist/components/inputs/RadioInput.d.ts +1 -0
- package/dist/components/inputs/RadioInput.d.ts.map +1 -1
- package/dist/components/inputs/RadioInput.js +8 -2
- package/dist/components/inputs/SelectInput.d.ts +1 -0
- package/dist/components/inputs/SelectInput.d.ts.map +1 -1
- package/dist/components/inputs/SelectInput.js +9 -3
- package/dist/components/inputs/StringInput.d.ts +1 -0
- package/dist/components/inputs/StringInput.d.ts.map +1 -1
- package/dist/components/inputs/StringInput.js +20 -3
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -0
- package/dist/lib/condition-engine.d.ts +19 -0
- package/dist/lib/condition-engine.d.ts.map +1 -1
- package/dist/lib/condition-engine.js +169 -2
- package/dist/lib/utils/date-functions.d.ts +35 -0
- package/dist/lib/utils/date-functions.d.ts.map +1 -0
- package/dist/lib/utils/date-functions.js +107 -0
- package/dist/types/enquete.d.ts +9 -0
- package/dist/types/enquete.d.ts.map +1 -1
- package/dist/utils/componentStateUtils.d.ts +57 -0
- package/dist/utils/componentStateUtils.d.ts.map +1 -0
- package/dist/utils/componentStateUtils.js +93 -0
- package/dist/utils/styleUtils.d.ts +29 -0
- package/dist/utils/styleUtils.d.ts.map +1 -0
- package/dist/utils/styleUtils.js +51 -0
- package/package.json +13 -11
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utilitaires pour la gestion de l'état des composants de formulaire
|
|
3
|
+
* RSU v2 - Moteur de Rendu des Formulaires d'Enquête
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Détermine si un composant doit être en lecture seule
|
|
7
|
+
*
|
|
8
|
+
* Règle de priorité: Mode Consultation > isReadonly
|
|
9
|
+
* - Si le formulaire est en mode consultation (isConsultationMode = true),
|
|
10
|
+
* tous les composants sont en lecture seule
|
|
11
|
+
* - Sinon, on utilise la propriété isReadonly de la variable
|
|
12
|
+
*
|
|
13
|
+
* @param variable - La variable de formulaire
|
|
14
|
+
* @param isConsultationMode - Indique si le formulaire est en mode consultation
|
|
15
|
+
* @returns true si le composant doit être en lecture seule
|
|
16
|
+
*/
|
|
17
|
+
export function isComponentReadonly(variable, isConsultationMode = false) {
|
|
18
|
+
// Mode consultation prioritaire: tout est readonly
|
|
19
|
+
if (isConsultationMode) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
// Sinon, on utilise la propriété isReadonly de la variable
|
|
23
|
+
return variable.isReadonly === true;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Détermine si un composant doit être désactivé (disabled)
|
|
27
|
+
* Un composant disabled ne peut pas recevoir le focus et est visuellement grisé
|
|
28
|
+
*
|
|
29
|
+
* @param disabled - Propriété disabled passée au composant
|
|
30
|
+
* @param variable - La variable de formulaire
|
|
31
|
+
* @param isConsultationMode - Indique si le formulaire est en mode consultation
|
|
32
|
+
* @returns true si le composant doit être désactivé
|
|
33
|
+
*/
|
|
34
|
+
export function isComponentDisabled(disabled = false, variable, isConsultationMode = false) {
|
|
35
|
+
// Si explicitement disabled, retourner true
|
|
36
|
+
if (disabled) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
// Pour certains composants qui ne supportent pas readonly,
|
|
40
|
+
// on utilise disabled à la place
|
|
41
|
+
if (isConsultationMode || variable.isReadonly === true) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
return false;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Retourne les attributs HTML appropriés pour le mode lecture seule
|
|
48
|
+
*
|
|
49
|
+
* @param variable - La variable de formulaire
|
|
50
|
+
* @param isConsultationMode - Indique si le formulaire est en mode consultation
|
|
51
|
+
* @param componentSupportsReadonly - Indique si le composant HTML supporte l'attribut readonly
|
|
52
|
+
* @returns Un objet avec les attributs readonly et/ou disabled
|
|
53
|
+
*/
|
|
54
|
+
export function getReadonlyAttributes(variable, isConsultationMode = false, componentSupportsReadonly = true) {
|
|
55
|
+
const shouldBeReadonly = isComponentReadonly(variable, isConsultationMode);
|
|
56
|
+
if (!shouldBeReadonly) {
|
|
57
|
+
return {};
|
|
58
|
+
}
|
|
59
|
+
// Si le composant supporte readonly (input, textarea), on utilise readonly
|
|
60
|
+
// Sinon (select, checkbox, radio), on utilise disabled
|
|
61
|
+
if (componentSupportsReadonly) {
|
|
62
|
+
return { readOnly: true };
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return { disabled: true };
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Classes CSS pour les composants en lecture seule
|
|
70
|
+
*/
|
|
71
|
+
export const readonlyClasses = {
|
|
72
|
+
// Style pour un composant readonly (focusable mais non modifiable)
|
|
73
|
+
readonly: 'bg-gray-50 cursor-default text-gray-700',
|
|
74
|
+
// Style pour un composant disabled (non focusable, grisé)
|
|
75
|
+
disabled: 'bg-gray-100 cursor-not-allowed text-gray-500',
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Retourne les classes CSS appropriées pour l'état du composant
|
|
79
|
+
*
|
|
80
|
+
* @param variable - La variable de formulaire
|
|
81
|
+
* @param isConsultationMode - Indique si le formulaire est en mode consultation
|
|
82
|
+
* @param isDisabled - Indique si le composant est explicitement désactivé
|
|
83
|
+
* @returns Les classes CSS à appliquer
|
|
84
|
+
*/
|
|
85
|
+
export function getReadonlyClasses(variable, isConsultationMode = false, isDisabled = false) {
|
|
86
|
+
if (isDisabled) {
|
|
87
|
+
return readonlyClasses.disabled;
|
|
88
|
+
}
|
|
89
|
+
if (isComponentReadonly(variable, isConsultationMode)) {
|
|
90
|
+
return readonlyClasses.readonly;
|
|
91
|
+
}
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ComponentStyle } from '../types/enquete';
|
|
2
|
+
import { CSSProperties } from 'react';
|
|
3
|
+
/**
|
|
4
|
+
* Génère un objet de style React à partir de ComponentStyle
|
|
5
|
+
* Utilise des styles inline pour les couleurs (Tailwind ne peut pas gérer les couleurs dynamiques)
|
|
6
|
+
*
|
|
7
|
+
* @param style - Configuration du style du composant
|
|
8
|
+
* @returns Objet de styles CSS pour le texte/contenu
|
|
9
|
+
*/
|
|
10
|
+
export declare function getStyleObject(style?: ComponentStyle): CSSProperties;
|
|
11
|
+
/**
|
|
12
|
+
* Génère le style du conteneur (background du composant)
|
|
13
|
+
*
|
|
14
|
+
* @param style - Configuration du style du composant
|
|
15
|
+
* @returns Objet de styles CSS pour le conteneur
|
|
16
|
+
*/
|
|
17
|
+
export declare function getContainerStyle(style?: ComponentStyle): CSSProperties;
|
|
18
|
+
/**
|
|
19
|
+
* Applique le style complet - retourne à la fois le style du texte et du conteneur
|
|
20
|
+
* Fonction de commodité qui combine getStyleObject et getContainerStyle
|
|
21
|
+
*
|
|
22
|
+
* @param style - Configuration du style du composant
|
|
23
|
+
* @returns Objet avec textStyle et containerStyle
|
|
24
|
+
*/
|
|
25
|
+
export declare function applyComponentStyle(style?: ComponentStyle): {
|
|
26
|
+
textStyle: CSSProperties;
|
|
27
|
+
containerStyle: CSSProperties;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=styleUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styleUtils.d.ts","sourceRoot":"","sources":["../../src/utils/styleUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAEtC;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,aAAa,CAsBpE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,CAAC,EAAE,cAAc,GAAG,aAAa,CAMvE;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,CAAC,EAAE,cAAc;;;EAKzD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Génère un objet de style React à partir de ComponentStyle
|
|
3
|
+
* Utilise des styles inline pour les couleurs (Tailwind ne peut pas gérer les couleurs dynamiques)
|
|
4
|
+
*
|
|
5
|
+
* @param style - Configuration du style du composant
|
|
6
|
+
* @returns Objet de styles CSS pour le texte/contenu
|
|
7
|
+
*/
|
|
8
|
+
export function getStyleObject(style) {
|
|
9
|
+
if (!style)
|
|
10
|
+
return {};
|
|
11
|
+
const styleObj = {};
|
|
12
|
+
if (style.fontColor) {
|
|
13
|
+
styleObj.color = style.fontColor;
|
|
14
|
+
}
|
|
15
|
+
if (style.fontBackgroundColor) {
|
|
16
|
+
styleObj.backgroundColor = style.fontBackgroundColor;
|
|
17
|
+
}
|
|
18
|
+
if (style.fontBold) {
|
|
19
|
+
styleObj.fontWeight = 'bold';
|
|
20
|
+
}
|
|
21
|
+
if (style.fontItalic) {
|
|
22
|
+
styleObj.fontStyle = 'italic';
|
|
23
|
+
}
|
|
24
|
+
return styleObj;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Génère le style du conteneur (background du composant)
|
|
28
|
+
*
|
|
29
|
+
* @param style - Configuration du style du composant
|
|
30
|
+
* @returns Objet de styles CSS pour le conteneur
|
|
31
|
+
*/
|
|
32
|
+
export function getContainerStyle(style) {
|
|
33
|
+
if (!style?.componentBackgroundColor)
|
|
34
|
+
return {};
|
|
35
|
+
return {
|
|
36
|
+
backgroundColor: style.componentBackgroundColor,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Applique le style complet - retourne à la fois le style du texte et du conteneur
|
|
41
|
+
* Fonction de commodité qui combine getStyleObject et getContainerStyle
|
|
42
|
+
*
|
|
43
|
+
* @param style - Configuration du style du composant
|
|
44
|
+
* @returns Objet avec textStyle et containerStyle
|
|
45
|
+
*/
|
|
46
|
+
export function applyComponentStyle(style) {
|
|
47
|
+
return {
|
|
48
|
+
textStyle: getStyleObject(style),
|
|
49
|
+
containerStyle: getContainerStyle(style),
|
|
50
|
+
};
|
|
51
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsuci/shared-form-components",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.28",
|
|
4
4
|
"description": "Composants partagés de rendu de formulaires RSU v2 - Package local pour frontend Admin et Public",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -20,23 +20,25 @@
|
|
|
20
20
|
"author": "RSU v2 Architecture Team",
|
|
21
21
|
"license": "MIT",
|
|
22
22
|
"peerDependencies": {
|
|
23
|
-
"react": "^
|
|
24
|
-
"react-dom": "^18.0.0 || ^19.0.0",
|
|
23
|
+
"lucide-react": "^0.263.0 || ^0.525.0",
|
|
25
24
|
"next": "^14.0.0 || ^15.0.0",
|
|
26
|
-
"
|
|
25
|
+
"react": "^18.0.0 || ^19.0.0",
|
|
26
|
+
"react-dom": "^18.0.0 || ^19.0.0"
|
|
27
27
|
},
|
|
28
28
|
"devDependencies": {
|
|
29
|
+
"@testing-library/jest-dom": "^6.0.0",
|
|
30
|
+
"@testing-library/react": "^14.0.0",
|
|
31
|
+
"@types/jest": "^30.0.0",
|
|
29
32
|
"@types/react": "^18.3.0",
|
|
30
33
|
"@types/react-dom": "^18.3.0",
|
|
31
|
-
"typescript": "^5.0.0",
|
|
32
|
-
"@testing-library/react": "^14.0.0",
|
|
33
|
-
"@testing-library/jest-dom": "^6.0.0",
|
|
34
34
|
"jest": "^29.0.0",
|
|
35
|
-
"jest-environment-jsdom": "^29.0.0"
|
|
35
|
+
"jest-environment-jsdom": "^29.0.0",
|
|
36
|
+
"ts-jest": "^29.4.6",
|
|
37
|
+
"typescript": "^5.0.0"
|
|
36
38
|
},
|
|
37
39
|
"dependencies": {
|
|
38
40
|
"clsx": "^2.0.0",
|
|
39
|
-
"
|
|
40
|
-
"
|
|
41
|
+
"lucide-react": "^0.263.0 || ^0.525.0",
|
|
42
|
+
"tailwind-merge": "^2.0.0"
|
|
41
43
|
}
|
|
42
|
-
}
|
|
44
|
+
}
|