@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.
Files changed (56) hide show
  1. package/dist/components/display/LabelDisplay.d.ts.map +1 -1
  2. package/dist/components/display/LabelDisplay.js +3 -1
  3. package/dist/components/inputs/CheckboxInput.d.ts +1 -0
  4. package/dist/components/inputs/CheckboxInput.d.ts.map +1 -1
  5. package/dist/components/inputs/CheckboxInput.js +9 -3
  6. package/dist/components/inputs/ComboboxInput.d.ts +1 -0
  7. package/dist/components/inputs/ComboboxInput.d.ts.map +1 -1
  8. package/dist/components/inputs/ComboboxInput.js +6 -2
  9. package/dist/components/inputs/DatePicker.d.ts +1 -0
  10. package/dist/components/inputs/DatePicker.d.ts.map +1 -1
  11. package/dist/components/inputs/DatePicker.js +17 -2
  12. package/dist/components/inputs/EmailInput.d.ts +1 -0
  13. package/dist/components/inputs/EmailInput.d.ts.map +1 -1
  14. package/dist/components/inputs/EmailInput.js +17 -2
  15. package/dist/components/inputs/GPSInput.d.ts +1 -0
  16. package/dist/components/inputs/GPSInput.d.ts.map +1 -1
  17. package/dist/components/inputs/GPSInput.js +7 -3
  18. package/dist/components/inputs/GeographicCascadeInput.d.ts +1 -0
  19. package/dist/components/inputs/GeographicCascadeInput.d.ts.map +1 -1
  20. package/dist/components/inputs/GeographicCascadeInput.js +5 -3
  21. package/dist/components/inputs/HourInput.d.ts +1 -0
  22. package/dist/components/inputs/HourInput.d.ts.map +1 -1
  23. package/dist/components/inputs/HourInput.js +15 -2
  24. package/dist/components/inputs/NumberInput.d.ts +1 -0
  25. package/dist/components/inputs/NumberInput.d.ts.map +1 -1
  26. package/dist/components/inputs/NumberInput.js +19 -2
  27. package/dist/components/inputs/PhoneInput.d.ts +1 -0
  28. package/dist/components/inputs/PhoneInput.d.ts.map +1 -1
  29. package/dist/components/inputs/PhoneInput.js +17 -2
  30. package/dist/components/inputs/RadioInput.d.ts +1 -0
  31. package/dist/components/inputs/RadioInput.d.ts.map +1 -1
  32. package/dist/components/inputs/RadioInput.js +8 -2
  33. package/dist/components/inputs/SelectInput.d.ts +1 -0
  34. package/dist/components/inputs/SelectInput.d.ts.map +1 -1
  35. package/dist/components/inputs/SelectInput.js +9 -3
  36. package/dist/components/inputs/StringInput.d.ts +1 -0
  37. package/dist/components/inputs/StringInput.d.ts.map +1 -1
  38. package/dist/components/inputs/StringInput.js +20 -3
  39. package/dist/index.d.ts +3 -1
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +10 -0
  42. package/dist/lib/condition-engine.d.ts +19 -0
  43. package/dist/lib/condition-engine.d.ts.map +1 -1
  44. package/dist/lib/condition-engine.js +169 -2
  45. package/dist/lib/utils/date-functions.d.ts +35 -0
  46. package/dist/lib/utils/date-functions.d.ts.map +1 -0
  47. package/dist/lib/utils/date-functions.js +107 -0
  48. package/dist/types/enquete.d.ts +9 -0
  49. package/dist/types/enquete.d.ts.map +1 -1
  50. package/dist/utils/componentStateUtils.d.ts +57 -0
  51. package/dist/utils/componentStateUtils.d.ts.map +1 -0
  52. package/dist/utils/componentStateUtils.js +93 -0
  53. package/dist/utils/styleUtils.d.ts +29 -0
  54. package/dist/utils/styleUtils.d.ts.map +1 -0
  55. package/dist/utils/styleUtils.js +51 -0
  56. 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.25",
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": "^18.0.0 || ^19.0.0",
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
- "lucide-react": "^0.263.0 || ^0.525.0"
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
- "tailwind-merge": "^2.0.0",
40
- "lucide-react": "^0.525.0"
41
+ "lucide-react": "^0.263.0 || ^0.525.0",
42
+ "tailwind-merge": "^2.0.0"
41
43
  }
42
- }
44
+ }