@numerum-tech/yeriasdk 1.0.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.
Files changed (94) hide show
  1. package/README.md +864 -0
  2. package/dist/core/action-grid-view.d.ts +57 -0
  3. package/dist/core/action-grid-view.d.ts.map +1 -0
  4. package/dist/core/action-grid-view.js +112 -0
  5. package/dist/core/action-grid-view.js.map +1 -0
  6. package/dist/core/action-list-view.d.ts +39 -0
  7. package/dist/core/action-list-view.d.ts.map +1 -0
  8. package/dist/core/action-list-view.js +77 -0
  9. package/dist/core/action-list-view.js.map +1 -0
  10. package/dist/core/base/base-action-view.d.ts +82 -0
  11. package/dist/core/base/base-action-view.d.ts.map +1 -0
  12. package/dist/core/base/base-action-view.js +143 -0
  13. package/dist/core/base/base-action-view.js.map +1 -0
  14. package/dist/core/base-view.d.ts +105 -0
  15. package/dist/core/base-view.d.ts.map +1 -0
  16. package/dist/core/base-view.js +426 -0
  17. package/dist/core/base-view.js.map +1 -0
  18. package/dist/core/card-view.d.ts +24 -0
  19. package/dist/core/card-view.d.ts.map +1 -0
  20. package/dist/core/card-view.js +127 -0
  21. package/dist/core/card-view.js.map +1 -0
  22. package/dist/core/carousel-view.d.ts +22 -0
  23. package/dist/core/carousel-view.d.ts.map +1 -0
  24. package/dist/core/carousel-view.js +99 -0
  25. package/dist/core/carousel-view.js.map +1 -0
  26. package/dist/core/form-view.d.ts +165 -0
  27. package/dist/core/form-view.d.ts.map +1 -0
  28. package/dist/core/form-view.js +365 -0
  29. package/dist/core/form-view.js.map +1 -0
  30. package/dist/core/jsonapp.d.ts +263 -0
  31. package/dist/core/jsonapp.d.ts.map +1 -0
  32. package/dist/core/jsonapp.js +528 -0
  33. package/dist/core/jsonapp.js.map +1 -0
  34. package/dist/core/key-store.d.ts +51 -0
  35. package/dist/core/key-store.d.ts.map +1 -0
  36. package/dist/core/key-store.js +138 -0
  37. package/dist/core/key-store.js.map +1 -0
  38. package/dist/core/map-view.d.ts +45 -0
  39. package/dist/core/map-view.d.ts.map +1 -0
  40. package/dist/core/map-view.js +318 -0
  41. package/dist/core/map-view.js.map +1 -0
  42. package/dist/core/media-view.d.ts +20 -0
  43. package/dist/core/media-view.d.ts.map +1 -0
  44. package/dist/core/media-view.js +75 -0
  45. package/dist/core/media-view.js.map +1 -0
  46. package/dist/core/message-view.d.ts +53 -0
  47. package/dist/core/message-view.d.ts.map +1 -0
  48. package/dist/core/message-view.js +109 -0
  49. package/dist/core/message-view.js.map +1 -0
  50. package/dist/core/notification.d.ts +17 -0
  51. package/dist/core/notification.d.ts.map +1 -0
  52. package/dist/core/notification.js +33 -0
  53. package/dist/core/notification.js.map +1 -0
  54. package/dist/core/qr-display-view.d.ts +32 -0
  55. package/dist/core/qr-display-view.d.ts.map +1 -0
  56. package/dist/core/qr-display-view.js +66 -0
  57. package/dist/core/qr-display-view.js.map +1 -0
  58. package/dist/core/qr-scan-view.d.ts +148 -0
  59. package/dist/core/qr-scan-view.d.ts.map +1 -0
  60. package/dist/core/qr-scan-view.js +259 -0
  61. package/dist/core/qr-scan-view.js.map +1 -0
  62. package/dist/core/reader-view.d.ts +73 -0
  63. package/dist/core/reader-view.d.ts.map +1 -0
  64. package/dist/core/reader-view.js +285 -0
  65. package/dist/core/reader-view.js.map +1 -0
  66. package/dist/core/timeline-view.d.ts +16 -0
  67. package/dist/core/timeline-view.d.ts.map +1 -0
  68. package/dist/core/timeline-view.js +68 -0
  69. package/dist/core/timeline-view.js.map +1 -0
  70. package/dist/errors/index.d.ts +276 -0
  71. package/dist/errors/index.d.ts.map +1 -0
  72. package/dist/errors/index.js +431 -0
  73. package/dist/errors/index.js.map +1 -0
  74. package/dist/index.d.ts +26 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +103 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/types/index.d.ts +576 -0
  79. package/dist/types/index.d.ts.map +1 -0
  80. package/dist/types/index.js +48 -0
  81. package/dist/types/index.js.map +1 -0
  82. package/dist/utils/fileFormats.d.ts +52 -0
  83. package/dist/utils/fileFormats.d.ts.map +1 -0
  84. package/dist/utils/fileFormats.js +198 -0
  85. package/dist/utils/fileFormats.js.map +1 -0
  86. package/dist/utils/logger.d.ts +38 -0
  87. package/dist/utils/logger.d.ts.map +1 -0
  88. package/dist/utils/logger.js +109 -0
  89. package/dist/utils/logger.js.map +1 -0
  90. package/dist/utils/validators.d.ts +48 -0
  91. package/dist/utils/validators.d.ts.map +1 -0
  92. package/dist/utils/validators.js +445 -0
  93. package/dist/utils/validators.js.map +1 -0
  94. package/package.json +65 -0
@@ -0,0 +1,99 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CarouselView = void 0;
4
+ const base_view_1 = require("./base-view");
5
+ const errors_1 = require("../errors");
6
+ // CarouselView organises multiple spotlight slides for mobile hero banners or promotional decks.
7
+ class CarouselView extends base_view_1.BaseView {
8
+ constructor(viewId, title, processId) {
9
+ super({
10
+ id: viewId,
11
+ type: 'Carousel',
12
+ processId,
13
+ metadata: {
14
+ version: '1.0.0',
15
+ createdAt: new Date()
16
+ }
17
+ });
18
+ this.content = {
19
+ title,
20
+ subtitle: '',
21
+ slides: [],
22
+ settings: {
23
+ autoplay: false,
24
+ intervalMs: 6000,
25
+ loop: true,
26
+ showIndicators: true
27
+ }
28
+ };
29
+ }
30
+ // Optional subtitle shown beneath the carousel heading.
31
+ setSubtitle(subtitle) {
32
+ return this.setIntroText('subtitle', subtitle);
33
+ }
34
+ // Overrides default autoplay and indicator behaviour.
35
+ setSettings(settings) {
36
+ this.content.settings = { ...settings };
37
+ return this;
38
+ }
39
+ // Appends a prepared slide to the carousel sequence.
40
+ addSlide(slide) {
41
+ if (!slide.id || !slide.title) {
42
+ throw new errors_1.MissingRequiredParameterError('slide id and title');
43
+ }
44
+ this.content.slides.push({
45
+ ...slide,
46
+ id: slide.id.trim(),
47
+ title: slide.title.trim(),
48
+ description: slide.description?.trim(),
49
+ badge: slide.badge?.trim(),
50
+ actions: slide.actions?.map(action => ({ ...action }))
51
+ });
52
+ return this;
53
+ }
54
+ createSlide(id, title, description, options = {}) {
55
+ const slide = {
56
+ id: id.trim(),
57
+ title: title.trim(),
58
+ description: description?.trim(),
59
+ badge: options.badge?.trim(),
60
+ image: options.imageUrl
61
+ ? {
62
+ url: options.imageUrl.trim(),
63
+ alt: options.imageAlt?.trim()
64
+ }
65
+ : undefined
66
+ };
67
+ return slide;
68
+ }
69
+ // Pushes an action button for a given slide id.
70
+ addSlideAction(slideId, text, method = 'POST', options = {}) {
71
+ const slide = this.content.slides.find(item => item.id === slideId);
72
+ if (!slide) {
73
+ throw new errors_1.ElementNotFoundError(0, slideId); // Using slideId as identifier
74
+ }
75
+ if (!slide.actions) {
76
+ slide.actions = [];
77
+ }
78
+ const action = {
79
+ text: text.trim(),
80
+ method,
81
+ confirmMessage: options.confirmMessage,
82
+ href: options.href?.trim(),
83
+ icon: options.icon?.trim(),
84
+ variant: options.variant
85
+ };
86
+ slide.actions.push(action);
87
+ return this;
88
+ }
89
+ clearSlides() {
90
+ this.content.slides = [];
91
+ return this;
92
+ }
93
+ // Exposes the assembled payload for advanced usage.
94
+ getContent() {
95
+ return this.content;
96
+ }
97
+ }
98
+ exports.CarouselView = CarouselView;
99
+ //# sourceMappingURL=carousel-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"carousel-view.js","sourceRoot":"","sources":["../../src/core/carousel-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ import { BaseView } from './base-view';
2
+ import { FormFieldParams, SubmitAction, ValidationResult, HttpMethod } from '../types';
3
+ import { Result } from '../errors';
4
+ export interface FormContent {
5
+ title: string;
6
+ intro?: string;
7
+ submit?: SubmitAction;
8
+ fields: Array<FormFieldParams & {
9
+ fieldType: string;
10
+ fieldId: string;
11
+ fieldLabel: string;
12
+ }>;
13
+ }
14
+ export declare class FormView extends BaseView {
15
+ private fieldValidations;
16
+ constructor(formId: string, title: string, processId?: string);
17
+ /**
18
+ * Définit l'introduction du formulaire
19
+ */
20
+ setIntro(intro: string): this;
21
+ /**
22
+ * Définit la note du formulaire
23
+ * @deprecated Use setIntro() instead. This method is kept for backward compatibility.
24
+ */
25
+ setNote(note: string): this;
26
+ /**
27
+ * Méthode helper pour associer ce formulaire à un processus
28
+ * @param processId - Identifiant du processus
29
+ * @param options - Options du processus (nom, étapes, etc.)
30
+ */
31
+ belongsToProcess(processId: string, options?: {
32
+ processName?: string;
33
+ currentStep?: number;
34
+ totalSteps?: number;
35
+ stepName?: string;
36
+ canGoBack?: boolean;
37
+ canSkip?: boolean;
38
+ }): this;
39
+ /**
40
+ * Ajoute un champ avec validation
41
+ */
42
+ addField(fieldType: string, fieldId: string, fieldLabel: string, params?: FormFieldParams): this;
43
+ /**
44
+ * Defines the submit button for the form
45
+ * Convention: Mobile app POSTs to {service.baseUrl}/{formId}
46
+ *
47
+ * @param text - Button text (e.g., "Register", "Submit")
48
+ * @param method - HTTP method (default: POST)
49
+ * @param confirmMessage - Optional confirmation message for destructive actions
50
+ */
51
+ submitButton(text: string, method?: HttpMethod, confirmMessage?: string): this;
52
+ /**
53
+ * Convenience method for update actions (PUT)
54
+ */
55
+ updateButton(text: string, confirmMessage?: string): this;
56
+ /**
57
+ * Convenience method for delete actions (DELETE with confirmation)
58
+ */
59
+ deleteButton(text: string, confirmMessage?: string): this;
60
+ /**
61
+ * Méthodes de commodité pour différents types de champs
62
+ */
63
+ addTextField(fieldId: string, fieldLabel: string, isRequired?: boolean, maxLength?: number): this;
64
+ addEmailField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
65
+ addPasswordField(fieldId: string, fieldLabel: string, minLength?: number): this;
66
+ addNumberField(fieldId: string, fieldLabel: string, isRequired?: boolean, minVal?: number, maxVal?: number): this;
67
+ addDateField(fieldId: string, fieldLabel: string, isRequired?: boolean, minDate?: string, maxDate?: string): this;
68
+ addSelectField(fieldId: string, fieldLabel: string, isRequired: boolean | undefined, options: Array<{
69
+ label: string;
70
+ value: unknown;
71
+ }>): this;
72
+ addPhotoField(fieldId: string, fieldLabel: string, isRequired?: boolean, formats?: string[], live?: boolean): this;
73
+ addFileField(fieldId: string, fieldLabel: string, isRequired: boolean | undefined, formats: string[]): this;
74
+ addGPSField(fieldId: string, fieldLabel: string, isRequired?: boolean, liveData?: boolean, config?: {
75
+ altitude?: boolean;
76
+ precision?: boolean;
77
+ }): this;
78
+ addPlusCodeField(fieldId: string, fieldLabel: string, isRequired?: boolean, liveData?: boolean): this;
79
+ addHiddenField(fieldId: string, fieldLabel: string, value: string): this;
80
+ addTextAreaField(fieldId: string, fieldLabel: string, isRequired?: boolean, minLength?: number, maxLength?: number): this;
81
+ addPhoneField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
82
+ addURLField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
83
+ addCheckboxField(fieldId: string, fieldLabel: string, isRequired?: boolean): this;
84
+ /**
85
+ * Adds a visual separator to group form fields
86
+ * Separators are rendered as gaps or lines by the mobile app renderer
87
+ * @param fieldId - Optional field ID. If not provided, auto-generates a unique ID
88
+ * @returns this for chaining
89
+ * @example
90
+ * form.addTextField('name', 'Name', true)
91
+ * .addSeparator()
92
+ * .addEmailField('email', 'Email', true);
93
+ */
94
+ addSeparator(fieldId?: string): this;
95
+ /**
96
+ * Injecte des données dans les champs existants du formulaire
97
+ * Gère automatiquement les champs avec options (select, radio) en utilisant "selected"
98
+ * @param data - Objet clé-valeur où clé = fieldId
99
+ * @returns Result with errors for fields not found
100
+ * @example
101
+ * const result = form.injectData({
102
+ * name: 'John Doe',
103
+ * email: 'john@example.com',
104
+ * country: 'FR' // Pour select: met selected: true sur l'option 'FR'
105
+ * });
106
+ * if (result.isErr()) {
107
+ * console.warn('Some fields not found:', result.error);
108
+ * }
109
+ */
110
+ injectData(data: Record<string, unknown>): Result<void, string[]>;
111
+ /**
112
+ * Définit la valeur d'un champ spécifique
113
+ * @param fieldId - ID du champ
114
+ * @param value - Valeur à injecter
115
+ * @example
116
+ * form.setFieldValue('name', 'John Doe')
117
+ */
118
+ setFieldValue(fieldId: string, value: unknown): this;
119
+ /**
120
+ * Valide les données du formulaire
121
+ * Note: This is for SDK internal validation. Services using this SDK should
122
+ * perform their own data validation before populating views.
123
+ */
124
+ validateFormData(formData: Record<string, any>): ValidationResult;
125
+ /**
126
+ * Obtient un champ par son ID
127
+ */
128
+ getField(fieldId: string): (FormFieldParams & {
129
+ fieldType: string;
130
+ fieldId: string;
131
+ fieldLabel: string;
132
+ }) | undefined;
133
+ /**
134
+ * Supprime un champ par son ID
135
+ * @returns Result with success or error message
136
+ */
137
+ removeField(fieldId: string): Result<void, string>;
138
+ /**
139
+ * Met à jour un champ existant
140
+ * @returns Result with success or error message
141
+ */
142
+ updateField(fieldId: string, updates: Partial<FormFieldParams>): Result<void, string>;
143
+ /**
144
+ * Obtient tous les champs
145
+ */
146
+ getFields(): Array<FormFieldParams & {
147
+ fieldType: string;
148
+ fieldId: string;
149
+ fieldLabel: string;
150
+ }>;
151
+ /**
152
+ * Obtient le nombre de champs
153
+ * @param excludeSeparators - If true, excludes separator fields from count (default: false)
154
+ */
155
+ getFieldCount(excludeSeparators?: boolean): number;
156
+ /**
157
+ * Vérifie si le formulaire a des champs requis
158
+ */
159
+ hasRequiredFields(): boolean;
160
+ /**
161
+ * Obtient les champs requis
162
+ */
163
+ getRequiredFields(): string[];
164
+ }
165
+ //# sourceMappingURL=form-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-view.d.ts","sourceRoot":"","sources":["../../src/core/form-view.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,365 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.FormView = void 0;
4
+ const base_view_1 = require("./base-view");
5
+ const validators_1 = require("../utils/validators");
6
+ const errors_1 = require("../errors");
7
+ class FormView extends base_view_1.BaseView {
8
+ constructor(formId, title, processId) {
9
+ super({
10
+ id: formId,
11
+ type: 'Form',
12
+ processId,
13
+ metadata: {
14
+ version: '1.0.0',
15
+ createdAt: new Date()
16
+ }
17
+ });
18
+ this.fieldValidations = new Map();
19
+ this.content = {
20
+ title,
21
+ intro: '',
22
+ submit: undefined,
23
+ fields: []
24
+ };
25
+ }
26
+ /**
27
+ * Définit l'introduction du formulaire
28
+ */
29
+ setIntro(intro) {
30
+ return this.setIntroText('intro', intro);
31
+ }
32
+ /**
33
+ * Définit la note du formulaire
34
+ * @deprecated Use setIntro() instead. This method is kept for backward compatibility.
35
+ */
36
+ setNote(note) {
37
+ return this.setIntro(note);
38
+ }
39
+ /**
40
+ * Méthode helper pour associer ce formulaire à un processus
41
+ * @param processId - Identifiant du processus
42
+ * @param options - Options du processus (nom, étapes, etc.)
43
+ */
44
+ belongsToProcess(processId, options) {
45
+ this.setProcess(processId, options);
46
+ return this;
47
+ }
48
+ /**
49
+ * Ajoute un champ avec validation
50
+ */
51
+ addField(fieldType, fieldId, fieldLabel, params) {
52
+ if (!fieldId || !fieldLabel || !fieldType) {
53
+ throw new errors_1.MissingRequiredParameterError('fieldId, fieldLabel, and fieldType');
54
+ }
55
+ // Validation du champ
56
+ const validation = validators_1.FieldValidator.validateField(fieldType, fieldId, fieldLabel, params);
57
+ if (!validation.isValid) {
58
+ const errorMessages = validation.errors.map(e => e.message);
59
+ throw new errors_1.FieldValidationError(fieldId, fieldType, errorMessages);
60
+ }
61
+ const field = { fieldType, fieldId, fieldLabel, ...params };
62
+ this.content.fields.push(field);
63
+ // Stocker la validation pour ce champ
64
+ if (params) {
65
+ this.fieldValidations.set(fieldId, params);
66
+ }
67
+ return this;
68
+ }
69
+ /**
70
+ * Defines the submit button for the form
71
+ * Convention: Mobile app POSTs to {service.baseUrl}/{formId}
72
+ *
73
+ * @param text - Button text (e.g., "Register", "Submit")
74
+ * @param method - HTTP method (default: POST)
75
+ * @param confirmMessage - Optional confirmation message for destructive actions
76
+ */
77
+ submitButton(text, method = 'POST', confirmMessage) {
78
+ this.content.submit = {
79
+ text,
80
+ method,
81
+ confirmMessage
82
+ };
83
+ return this;
84
+ }
85
+ /**
86
+ * Convenience method for update actions (PUT)
87
+ */
88
+ updateButton(text, confirmMessage) {
89
+ return this.submitButton(text, 'PUT', confirmMessage);
90
+ }
91
+ /**
92
+ * Convenience method for delete actions (DELETE with confirmation)
93
+ */
94
+ deleteButton(text, confirmMessage = 'Are you sure you want to delete this?') {
95
+ return this.submitButton(text, 'DELETE', confirmMessage);
96
+ }
97
+ /**
98
+ * Méthodes de commodité pour différents types de champs
99
+ */
100
+ addTextField(fieldId, fieldLabel, isRequired = false, maxLength) {
101
+ return this.addField('text', fieldId, fieldLabel, {
102
+ required: isRequired,
103
+ maxLength
104
+ });
105
+ }
106
+ addEmailField(fieldId, fieldLabel, isRequired = false) {
107
+ return this.addField('email', fieldId, fieldLabel, {
108
+ required: isRequired,
109
+ pattern: /^[^\s@]+@[^\s@]+\.[^\s@]+$/
110
+ });
111
+ }
112
+ addPasswordField(fieldId, fieldLabel, minLength = 8) {
113
+ return this.addField('password', fieldId, fieldLabel, {
114
+ required: true,
115
+ minLength
116
+ });
117
+ }
118
+ addNumberField(fieldId, fieldLabel, isRequired = false, minVal, maxVal) {
119
+ return this.addField('number', fieldId, fieldLabel, {
120
+ required: isRequired,
121
+ min: minVal,
122
+ max: maxVal
123
+ });
124
+ }
125
+ addDateField(fieldId, fieldLabel, isRequired = false, minDate, maxDate) {
126
+ return this.addField('date', fieldId, fieldLabel, {
127
+ required: isRequired,
128
+ min: minDate ? new Date(minDate).getTime() : undefined,
129
+ max: maxDate ? new Date(maxDate).getTime() : undefined
130
+ });
131
+ }
132
+ addSelectField(fieldId, fieldLabel, isRequired = false, options) {
133
+ if (!Array.isArray(options) || options.length === 0) {
134
+ throw new errors_1.EmptyCollectionError('Select field options', 'Select field must have at least one option');
135
+ }
136
+ return this.addField('select', fieldId, fieldLabel, {
137
+ required: isRequired,
138
+ options
139
+ });
140
+ }
141
+ addPhotoField(fieldId, fieldLabel, isRequired = false, formats = ['jpeg', 'png'], live = false) {
142
+ if (!formats || formats.length === 0) {
143
+ throw new errors_1.EmptyCollectionError('Photo field formats', 'Photo field must specify at least one format');
144
+ }
145
+ const acceptedFormats = formats.map(format => `image/${format.toLowerCase()}`);
146
+ return this.addField('photo', fieldId, fieldLabel, {
147
+ required: isRequired,
148
+ accept: acceptedFormats,
149
+ live
150
+ });
151
+ }
152
+ addFileField(fieldId, fieldLabel, isRequired = false, formats) {
153
+ if (!formats || formats.length === 0) {
154
+ throw new errors_1.EmptyCollectionError('File field formats', 'File field must specify at least one format');
155
+ }
156
+ return this.addField('file', fieldId, fieldLabel, {
157
+ required: isRequired,
158
+ accept: formats
159
+ });
160
+ }
161
+ addGPSField(fieldId, fieldLabel, isRequired = false, liveData = false, config = {}) {
162
+ return this.addField('gps', fieldId, fieldLabel, {
163
+ required: isRequired,
164
+ live: liveData,
165
+ ...config
166
+ });
167
+ }
168
+ addPlusCodeField(fieldId, fieldLabel, isRequired = false, liveData = false) {
169
+ return this.addField('pluscode', fieldId, fieldLabel, {
170
+ required: isRequired,
171
+ live: liveData
172
+ });
173
+ }
174
+ addHiddenField(fieldId, fieldLabel, value) {
175
+ return this.addField('hidden', fieldId, fieldLabel, { value });
176
+ }
177
+ addTextAreaField(fieldId, fieldLabel, isRequired = false, minLength, maxLength) {
178
+ return this.addField('textarea', fieldId, fieldLabel, {
179
+ required: isRequired,
180
+ minLength,
181
+ maxLength
182
+ });
183
+ }
184
+ addPhoneField(fieldId, fieldLabel, isRequired = false) {
185
+ return this.addField('phone', fieldId, fieldLabel, {
186
+ required: isRequired,
187
+ pattern: /^[\+]?[1-9][\d]{0,15}$/
188
+ });
189
+ }
190
+ addURLField(fieldId, fieldLabel, isRequired = false) {
191
+ return this.addField('url', fieldId, fieldLabel, {
192
+ required: isRequired
193
+ });
194
+ }
195
+ addCheckboxField(fieldId, fieldLabel, isRequired = false) {
196
+ return this.addField('checkbox', fieldId, fieldLabel, {
197
+ required: isRequired
198
+ });
199
+ }
200
+ /**
201
+ * Adds a visual separator to group form fields
202
+ * Separators are rendered as gaps or lines by the mobile app renderer
203
+ * @param fieldId - Optional field ID. If not provided, auto-generates a unique ID
204
+ * @returns this for chaining
205
+ * @example
206
+ * form.addTextField('name', 'Name', true)
207
+ * .addSeparator()
208
+ * .addEmailField('email', 'Email', true);
209
+ */
210
+ addSeparator(fieldId) {
211
+ const separatorId = fieldId || `separator-${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
212
+ return this.addField('separator', separatorId, '', {});
213
+ }
214
+ /**
215
+ * Injecte des données dans les champs existants du formulaire
216
+ * Gère automatiquement les champs avec options (select, radio) en utilisant "selected"
217
+ * @param data - Objet clé-valeur où clé = fieldId
218
+ * @returns Result with errors for fields not found
219
+ * @example
220
+ * const result = form.injectData({
221
+ * name: 'John Doe',
222
+ * email: 'john@example.com',
223
+ * country: 'FR' // Pour select: met selected: true sur l'option 'FR'
224
+ * });
225
+ * if (result.isErr()) {
226
+ * console.warn('Some fields not found:', result.error);
227
+ * }
228
+ */
229
+ injectData(data) {
230
+ const errors = [];
231
+ Object.entries(data).forEach(([fieldId, value]) => {
232
+ const field = this.getField(fieldId);
233
+ if (!field) {
234
+ errors.push(`Field not found: ${fieldId}`);
235
+ return;
236
+ }
237
+ // Détection automatique: champs avec options (select, radio, checkbox avec options)
238
+ if (field.options && field.fieldType === 'select') {
239
+ // Pour select: marquer l'option correspondante comme selected
240
+ const updatedOptions = field.options.map(opt => ({
241
+ ...opt,
242
+ selected: opt.value === value
243
+ }));
244
+ this.updateField(fieldId, { options: updatedOptions });
245
+ }
246
+ // Radio: une seule valeur
247
+ else if (field.options && field.fieldType === 'radio') {
248
+ const updatedOptions = field.options.map(opt => ({
249
+ ...opt,
250
+ selected: opt.value === value
251
+ }));
252
+ this.updateField(fieldId, { options: updatedOptions });
253
+ }
254
+ // Checkbox avec options: value est un array (multi-sélection)
255
+ else if (field.options && field.fieldType === 'checkbox') {
256
+ const selectedValues = Array.isArray(value) ? value : [value];
257
+ const updatedOptions = field.options.map(opt => ({
258
+ ...opt,
259
+ selected: selectedValues.includes(opt.value)
260
+ }));
261
+ this.updateField(fieldId, { options: updatedOptions });
262
+ }
263
+ // Checkbox simple (true/false) ou tous les autres champs: utiliser value
264
+ else {
265
+ this.updateField(fieldId, { value: value });
266
+ }
267
+ });
268
+ if (errors.length > 0) {
269
+ return (0, errors_1.Err)(errors);
270
+ }
271
+ return (0, errors_1.Ok)(undefined);
272
+ }
273
+ /**
274
+ * Définit la valeur d'un champ spécifique
275
+ * @param fieldId - ID du champ
276
+ * @param value - Valeur à injecter
277
+ * @example
278
+ * form.setFieldValue('name', 'John Doe')
279
+ */
280
+ setFieldValue(fieldId, value) {
281
+ const field = this.getField(fieldId);
282
+ if (!field) {
283
+ throw new errors_1.FieldNotFoundError(fieldId, this.id);
284
+ }
285
+ this.updateField(fieldId, { value: value });
286
+ return this;
287
+ }
288
+ /**
289
+ * Valide les données du formulaire
290
+ * Note: This is for SDK internal validation. Services using this SDK should
291
+ * perform their own data validation before populating views.
292
+ */
293
+ validateFormData(formData) {
294
+ return validators_1.FormValidator.validateFormData(formData, this.fieldValidations);
295
+ }
296
+ /**
297
+ * Obtient un champ par son ID
298
+ */
299
+ getField(fieldId) {
300
+ return this.content.fields.find(field => field.fieldId === fieldId);
301
+ }
302
+ /**
303
+ * Supprime un champ par son ID
304
+ * @returns Result with success or error message
305
+ */
306
+ removeField(fieldId) {
307
+ const fields = this.content.fields;
308
+ const index = fields.findIndex(field => field.fieldId === fieldId);
309
+ if (index !== -1) {
310
+ fields.splice(index, 1);
311
+ this.fieldValidations.delete(fieldId);
312
+ return (0, errors_1.Ok)(undefined);
313
+ }
314
+ return (0, errors_1.Err)(`Field '${fieldId}' not found in form '${this.id}'`);
315
+ }
316
+ /**
317
+ * Met à jour un champ existant
318
+ * @returns Result with success or error message
319
+ */
320
+ updateField(fieldId, updates) {
321
+ const field = this.getField(fieldId);
322
+ if (!field) {
323
+ return (0, errors_1.Err)(`Field '${fieldId}' not found in form '${this.id}'`);
324
+ }
325
+ Object.assign(field, updates);
326
+ // Mettre à jour la validation
327
+ if (this.fieldValidations.has(fieldId)) {
328
+ const existingValidation = this.fieldValidations.get(fieldId);
329
+ this.fieldValidations.set(fieldId, { ...existingValidation, ...updates });
330
+ }
331
+ return (0, errors_1.Ok)(undefined);
332
+ }
333
+ /**
334
+ * Obtient tous les champs
335
+ */
336
+ getFields() {
337
+ return [...this.content.fields];
338
+ }
339
+ /**
340
+ * Obtient le nombre de champs
341
+ * @param excludeSeparators - If true, excludes separator fields from count (default: false)
342
+ */
343
+ getFieldCount(excludeSeparators = false) {
344
+ if (excludeSeparators) {
345
+ return this.content.fields.filter(field => field.fieldType !== 'separator').length;
346
+ }
347
+ return this.content.fields.length;
348
+ }
349
+ /**
350
+ * Vérifie si le formulaire a des champs requis
351
+ */
352
+ hasRequiredFields() {
353
+ return this.content.fields.some(field => field.required);
354
+ }
355
+ /**
356
+ * Obtient les champs requis
357
+ */
358
+ getRequiredFields() {
359
+ return this.content.fields
360
+ .filter(field => field.required)
361
+ .map(field => field.fieldId);
362
+ }
363
+ }
364
+ exports.FormView = FormView;
365
+ //# sourceMappingURL=form-view.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"form-view.js","sourceRoot":"","sources":["../../src/core/form-view.ts"],"names":[],"mappings":"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"}