@evanschleret/formforgeclient 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 (121) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +94 -0
  3. package/dist/module.cjs +112 -0
  4. package/dist/module.d.cts +20 -0
  5. package/dist/module.d.mts +20 -0
  6. package/dist/module.d.ts +20 -0
  7. package/dist/module.json +12 -0
  8. package/dist/module.mjs +109 -0
  9. package/dist/runtime/api/categories.d.ts +9 -0
  10. package/dist/runtime/api/categories.js +83 -0
  11. package/dist/runtime/api/client.d.ts +45 -0
  12. package/dist/runtime/api/client.js +148 -0
  13. package/dist/runtime/api/drafts.d.ts +6 -0
  14. package/dist/runtime/api/drafts.js +77 -0
  15. package/dist/runtime/api/http.d.ts +3 -0
  16. package/dist/runtime/api/http.js +138 -0
  17. package/dist/runtime/api/index.d.ts +9 -0
  18. package/dist/runtime/api/index.js +11 -0
  19. package/dist/runtime/api/management.d.ts +19 -0
  20. package/dist/runtime/api/management.js +180 -0
  21. package/dist/runtime/api/request.d.ts +8 -0
  22. package/dist/runtime/api/request.js +52 -0
  23. package/dist/runtime/api/responses.d.ts +6 -0
  24. package/dist/runtime/api/responses.js +61 -0
  25. package/dist/runtime/api/schema.d.ts +7 -0
  26. package/dist/runtime/api/schema.js +56 -0
  27. package/dist/runtime/api/submission.d.ts +11 -0
  28. package/dist/runtime/api/submission.js +47 -0
  29. package/dist/runtime/api/upload.d.ts +8 -0
  30. package/dist/runtime/api/upload.js +37 -0
  31. package/dist/runtime/composables/index.d.ts +31 -0
  32. package/dist/runtime/composables/index.js +16 -0
  33. package/dist/runtime/composables/useFormForgeApi.d.ts +3 -0
  34. package/dist/runtime/composables/useFormForgeApi.js +4 -0
  35. package/dist/runtime/composables/useFormForgeBuilder.d.ts +57 -0
  36. package/dist/runtime/composables/useFormForgeBuilder.js +515 -0
  37. package/dist/runtime/composables/useFormForgeCategory.d.ts +61 -0
  38. package/dist/runtime/composables/useFormForgeCategory.js +248 -0
  39. package/dist/runtime/composables/useFormForgeClient.d.ts +3 -0
  40. package/dist/runtime/composables/useFormForgeClient.js +200 -0
  41. package/dist/runtime/composables/useFormForgeDrafts.d.ts +20 -0
  42. package/dist/runtime/composables/useFormForgeDrafts.js +78 -0
  43. package/dist/runtime/composables/useFormForgeForm.d.ts +26 -0
  44. package/dist/runtime/composables/useFormForgeForm.js +114 -0
  45. package/dist/runtime/composables/useFormForgeGetForm.d.ts +22 -0
  46. package/dist/runtime/composables/useFormForgeGetForm.js +36 -0
  47. package/dist/runtime/composables/useFormForgeI18n.d.ts +250 -0
  48. package/dist/runtime/composables/useFormForgeI18n.js +324 -0
  49. package/dist/runtime/composables/useFormForgeManagement.d.ts +40 -0
  50. package/dist/runtime/composables/useFormForgeManagement.js +153 -0
  51. package/dist/runtime/composables/useFormForgeResolver.d.ts +28 -0
  52. package/dist/runtime/composables/useFormForgeResolver.js +88 -0
  53. package/dist/runtime/composables/useFormForgeResponses.d.ts +45 -0
  54. package/dist/runtime/composables/useFormForgeResponses.js +206 -0
  55. package/dist/runtime/composables/useFormForgeSchema.d.ts +24 -0
  56. package/dist/runtime/composables/useFormForgeSchema.js +69 -0
  57. package/dist/runtime/composables/useFormForgeSubmission.d.ts +12 -0
  58. package/dist/runtime/composables/useFormForgeSubmission.js +4 -0
  59. package/dist/runtime/composables/useFormForgeSubmit.d.ts +29 -0
  60. package/dist/runtime/composables/useFormForgeSubmit.js +291 -0
  61. package/dist/runtime/composables/useFormForgeUploads.d.ts +21 -0
  62. package/dist/runtime/composables/useFormForgeUploads.js +37 -0
  63. package/dist/runtime/composables/useFormForgeWizard.d.ts +20 -0
  64. package/dist/runtime/composables/useFormForgeWizard.js +83 -0
  65. package/dist/runtime/index.d.ts +11 -0
  66. package/dist/runtime/index.js +14 -0
  67. package/dist/runtime/plugin.d.ts +3 -0
  68. package/dist/runtime/plugin.js +175 -0
  69. package/dist/runtime/renderers/default/FormForgeBuilder.d.vue.ts +40 -0
  70. package/dist/runtime/renderers/default/FormForgeBuilder.vue +1159 -0
  71. package/dist/runtime/renderers/default/FormForgeBuilder.vue.d.ts +40 -0
  72. package/dist/runtime/renderers/default/FormForgeCategoryCreateModal.d.vue.ts +16 -0
  73. package/dist/runtime/renderers/default/FormForgeCategoryCreateModal.vue +129 -0
  74. package/dist/runtime/renderers/default/FormForgeCategoryCreateModal.vue.d.ts +16 -0
  75. package/dist/runtime/renderers/default/FormForgeRenderer.d.vue.ts +72 -0
  76. package/dist/runtime/renderers/default/FormForgeRenderer.vue +1188 -0
  77. package/dist/runtime/renderers/default/FormForgeRenderer.vue.d.ts +72 -0
  78. package/dist/runtime/renderers/default/FormForgeResponse.d.vue.ts +18 -0
  79. package/dist/runtime/renderers/default/FormForgeResponse.vue +744 -0
  80. package/dist/runtime/renderers/default/FormForgeResponse.vue.d.ts +18 -0
  81. package/dist/runtime/renderers/default/index.d.ts +5 -0
  82. package/dist/runtime/renderers/default/index.js +4 -0
  83. package/dist/runtime/renderers/index.d.ts +2 -0
  84. package/dist/runtime/renderers/index.js +1 -0
  85. package/dist/runtime/types/api.d.ts +129 -0
  86. package/dist/runtime/types/api.js +0 -0
  87. package/dist/runtime/types/category.d.ts +42 -0
  88. package/dist/runtime/types/category.js +0 -0
  89. package/dist/runtime/types/errors.d.ts +16 -0
  90. package/dist/runtime/types/errors.js +0 -0
  91. package/dist/runtime/types/index.d.ts +8 -0
  92. package/dist/runtime/types/index.js +0 -0
  93. package/dist/runtime/types/json.d.ts +6 -0
  94. package/dist/runtime/types/json.js +0 -0
  95. package/dist/runtime/types/management.d.ts +46 -0
  96. package/dist/runtime/types/management.js +0 -0
  97. package/dist/runtime/types/nuxt.d.ts +13 -0
  98. package/dist/runtime/types/nuxt.js +1 -0
  99. package/dist/runtime/types/schema.d.ts +93 -0
  100. package/dist/runtime/types/schema.js +0 -0
  101. package/dist/runtime/utils/category.d.ts +5 -0
  102. package/dist/runtime/utils/category.js +101 -0
  103. package/dist/runtime/utils/form-data.d.ts +8 -0
  104. package/dist/runtime/utils/form-data.js +64 -0
  105. package/dist/runtime/utils/object.d.ts +8 -0
  106. package/dist/runtime/utils/object.js +43 -0
  107. package/dist/runtime/utils/schema.d.ts +3 -0
  108. package/dist/runtime/utils/schema.js +309 -0
  109. package/dist/runtime/utils/submission.d.ts +4 -0
  110. package/dist/runtime/utils/submission.js +45 -0
  111. package/dist/runtime/validation/errors.d.ts +5 -0
  112. package/dist/runtime/validation/errors.js +130 -0
  113. package/dist/runtime/validation/zod.d.ts +6 -0
  114. package/dist/runtime/validation/zod.js +203 -0
  115. package/dist/runtime.cjs +16 -0
  116. package/dist/runtime.d.cts +1 -0
  117. package/dist/runtime.d.mts +1 -0
  118. package/dist/runtime.d.ts +1 -0
  119. package/dist/runtime.mjs +1 -0
  120. package/dist/types.d.mts +3 -0
  121. package/package.json +60 -0
@@ -0,0 +1,22 @@
1
+ import type { FormForgeClient, FormForgeClientConfig, FormForgeFormSchema, FormForgeScope } from '../types/index.js';
2
+ export interface FormForgeGetFormParams {
3
+ key: string;
4
+ version?: string;
5
+ endpoint?: string;
6
+ scope?: FormForgeScope;
7
+ }
8
+ export interface UseFormForgeGetFormOptions {
9
+ endpoint?: string;
10
+ scope?: FormForgeScope;
11
+ client?: FormForgeClient;
12
+ clientConfig?: FormForgeClientConfig;
13
+ }
14
+ export declare function useFormForgeGetForm(options?: UseFormForgeGetFormOptions): {
15
+ client: FormForgeClient;
16
+ form: any;
17
+ loading: any;
18
+ error: any;
19
+ getForm: (params: FormForgeGetFormParams) => Promise<FormForgeFormSchema>;
20
+ clear: () => void;
21
+ };
22
+ //# sourceMappingURL=useFormForgeGetForm.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { ref } from "#imports";
2
+ import { useFormForgeClient } from "./useFormForgeClient.js";
3
+ export function useFormForgeGetForm(options = {}) {
4
+ const client = options.client ?? useFormForgeClient(options.clientConfig);
5
+ const form = ref(null);
6
+ const loading = ref(false);
7
+ const error = ref(null);
8
+ async function getForm(params) {
9
+ loading.value = true;
10
+ error.value = null;
11
+ try {
12
+ const endpoint = params.endpoint ?? options.endpoint;
13
+ const scope = params.scope ?? options.scope;
14
+ const response = params.version !== void 0 && params.version !== "" ? await client.getFormVersion(params.key, params.version, { endpoint, scope }) : await client.getForm(params.key, { endpoint, scope });
15
+ form.value = response;
16
+ return response;
17
+ } catch (caughtError) {
18
+ error.value = caughtError instanceof Error ? caughtError.message : "Failed to fetch form";
19
+ throw caughtError;
20
+ } finally {
21
+ loading.value = false;
22
+ }
23
+ }
24
+ function clear() {
25
+ form.value = null;
26
+ error.value = null;
27
+ }
28
+ return {
29
+ client,
30
+ form,
31
+ loading,
32
+ error,
33
+ getForm,
34
+ clear
35
+ };
36
+ }
@@ -0,0 +1,250 @@
1
+ export type FormForgeLocale = 'en' | 'fr';
2
+ export interface UseFormForgeI18nOptions {
3
+ locale?: string | (() => string | undefined);
4
+ }
5
+ type FormForgeTranslationValues = Record<string, string | number>;
6
+ declare const TRANSLATIONS: {
7
+ readonly en: {
8
+ readonly 'builder.fieldType.text': "Short text";
9
+ readonly 'builder.fieldType.textarea': "Long text";
10
+ readonly 'builder.fieldType.email': "Email";
11
+ readonly 'builder.fieldType.number': "Number";
12
+ readonly 'builder.fieldType.select': "Select";
13
+ readonly 'builder.fieldType.select_menu': "Select menu";
14
+ readonly 'builder.fieldType.radio': "Multiple choice";
15
+ readonly 'builder.fieldType.checkbox': "Checkbox";
16
+ readonly 'builder.fieldType.checkbox_group': "Checkbox group";
17
+ readonly 'builder.fieldType.switch': "Switch";
18
+ readonly 'builder.fieldType.date': "Date";
19
+ readonly 'builder.fieldType.time': "Time";
20
+ readonly 'builder.fieldType.datetime': "Date & time";
21
+ readonly 'builder.fieldType.date_range': "Date range";
22
+ readonly 'builder.fieldType.datetime_range': "Datetime range";
23
+ readonly 'builder.fieldType.file': "File upload";
24
+ readonly 'builder.targetType.page': "Page";
25
+ readonly 'builder.targetType.field': "Field";
26
+ readonly 'builder.formTitlePlaceholder': "Form title";
27
+ readonly 'builder.categoryPlaceholder': "Category";
28
+ readonly 'builder.categoryNone': "No category";
29
+ readonly 'builder.loadingForm': "Loading form...";
30
+ readonly 'builder.lastSave': "Last save: {value}";
31
+ readonly 'builder.save': "Save";
32
+ readonly 'builder.publish': "Publish";
33
+ readonly 'builder.unpublish': "Unpublish";
34
+ readonly 'builder.pageCounter': "Page {current} / {total}";
35
+ readonly 'builder.pageTitlePlaceholder': "Page title";
36
+ readonly 'builder.pageDescriptionPlaceholder': "Page description (optional)";
37
+ readonly 'builder.tooltip.mergePage': "Merge with previous page";
38
+ readonly 'builder.tooltip.deletePage': "Delete page";
39
+ readonly 'builder.questionPlaceholder': "Question";
40
+ readonly 'builder.tooltip.duplicateQuestion': "Duplicate question";
41
+ readonly 'builder.tooltip.deleteQuestion': "Delete question";
42
+ readonly 'builder.tooltip.addCategory': "Add category";
43
+ readonly 'builder.required': "Required";
44
+ readonly 'builder.optionLabelPlaceholder': "Option label";
45
+ readonly 'builder.addOption': "Add option";
46
+ readonly 'builder.advancedSettings': "Advanced settings";
47
+ readonly 'builder.placeholderPlaceholder': "Placeholder";
48
+ readonly 'builder.helpTextPlaceholder': "Help text";
49
+ readonly 'builder.minPlaceholder': "Min";
50
+ readonly 'builder.maxPlaceholder': "Max";
51
+ readonly 'builder.stepPlaceholder': "Step";
52
+ readonly 'builder.multiple': "Multiple";
53
+ readonly 'builder.acceptedExtensionsPlaceholder': "Accepted extensions (.pdf,.png)";
54
+ readonly 'builder.conditions': "Conditions";
55
+ readonly 'builder.addCondition': "Add condition";
56
+ readonly 'builder.condition.action.show': "Show";
57
+ readonly 'builder.condition.action.hide': "Hide";
58
+ readonly 'builder.condition.action.skip': "Skip";
59
+ readonly 'builder.condition.action.require': "Require";
60
+ readonly 'builder.condition.action.disable': "Disable";
61
+ readonly 'builder.condition.match.all': "All";
62
+ readonly 'builder.condition.match.any': "Any";
63
+ readonly 'builder.condition.operator.eq': "Equals";
64
+ readonly 'builder.condition.operator.neq': "Not equals";
65
+ readonly 'builder.condition.operator.in': "In";
66
+ readonly 'builder.condition.operator.not_in': "Not in";
67
+ readonly 'builder.condition.operator.gt': "Greater than";
68
+ readonly 'builder.condition.operator.gte': "Greater or equal";
69
+ readonly 'builder.condition.operator.lt': "Less than";
70
+ readonly 'builder.condition.operator.lte': "Less or equal";
71
+ readonly 'builder.condition.operator.contains': "Contains";
72
+ readonly 'builder.condition.operator.not_contains': "Does not contain";
73
+ readonly 'builder.condition.operator.is_empty': "Is empty";
74
+ readonly 'builder.condition.operator.not_empty': "Is not empty";
75
+ readonly 'builder.valuePlaceholder': "Value";
76
+ readonly 'builder.remove': "Remove";
77
+ readonly 'builder.addClause': "Add clause";
78
+ readonly 'builder.deleteCondition': "Delete condition";
79
+ readonly 'builder.rail.addQuestion': "Add question";
80
+ readonly 'builder.rail.addPage': "Add page";
81
+ readonly 'builder.loadingBuilder': "Loading builder...";
82
+ readonly 'builder.error.loadForm': "Failed to load form";
83
+ readonly 'builder.error.save': "Save failed";
84
+ readonly 'builder.error.publish': "Publish failed";
85
+ readonly 'builder.error.unpublish': "Unpublish failed";
86
+ readonly 'builder.error.categoryCreate': "Category creation failed";
87
+ readonly 'builder.optionDefaultLabel': "Option";
88
+ readonly 'builder.optionsCount': "{count} options";
89
+ readonly 'builder.categoryModal.title': "Create category";
90
+ readonly 'builder.categoryModal.description': "Add a category and assign it to this form.";
91
+ readonly 'builder.categoryModal.nameLabel': "Name";
92
+ readonly 'builder.categoryModal.namePlaceholder': "Category name";
93
+ readonly 'builder.categoryModal.nameRequired': "Category name is required";
94
+ readonly 'builder.categoryModal.descriptionLabel': "Description";
95
+ readonly 'builder.categoryModal.descriptionPlaceholder': "Description (optional)";
96
+ readonly 'builder.categoryModal.activeLabel': "Active category";
97
+ readonly 'builder.categoryModal.cancel': "Cancel";
98
+ readonly 'builder.categoryModal.create': "Create category";
99
+ readonly 'renderer.submit': "Submit";
100
+ readonly 'renderer.loadingForm': "Loading form";
101
+ readonly 'renderer.error.loadForm': "Unable to load form";
102
+ readonly 'renderer.error.submit': "Submission failed";
103
+ readonly 'renderer.error.missingFormKey': "Missing form key";
104
+ readonly 'renderer.alert.fixFields': "Please fix the following fields";
105
+ readonly 'renderer.alert.submitted': "Form submitted";
106
+ readonly 'renderer.pageTitle': "Page {index}";
107
+ readonly 'renderer.navigation.previous': "Previous";
108
+ readonly 'renderer.navigation.next': "Next";
109
+ readonly 'response.loading': "Loading response";
110
+ readonly 'response.empty': "No response data available";
111
+ readonly 'response.error.missingResponseUuid': "Response UUID is required";
112
+ readonly 'response.error.missingFormKey': "Form key is required";
113
+ readonly 'response.error.load': "Unable to load response";
114
+ readonly 'response.error.loadForm': "Unable to load form schema";
115
+ readonly 'response.page.fallback': "Page {index}";
116
+ readonly 'response.question.fallback': "Question {index}";
117
+ readonly 'response.answer.empty': "No answer";
118
+ readonly 'response.answer.yes': "Yes";
119
+ readonly 'response.answer.no': "No";
120
+ readonly 'response.action.preview': "Preview";
121
+ readonly 'response.action.download': "Download";
122
+ readonly 'response.file.unnamed': "File";
123
+ readonly 'response.file.missingUrlHint': "File URL is unavailable. Enable FORMFORGE_HTTP_FILE_URLS_ENABLED in FormForge config.";
124
+ };
125
+ readonly fr: {
126
+ readonly 'builder.fieldType.text': "Réponse courte";
127
+ readonly 'builder.fieldType.textarea': "Réponse longue";
128
+ readonly 'builder.fieldType.email': "E-mail";
129
+ readonly 'builder.fieldType.number': "Nombre";
130
+ readonly 'builder.fieldType.select': "Sélection";
131
+ readonly 'builder.fieldType.select_menu': "Menu de sélection";
132
+ readonly 'builder.fieldType.radio': "Choix multiples";
133
+ readonly 'builder.fieldType.checkbox': "Case à cocher";
134
+ readonly 'builder.fieldType.checkbox_group': "Groupe de cases";
135
+ readonly 'builder.fieldType.switch': "Interrupteur";
136
+ readonly 'builder.fieldType.date': "Date";
137
+ readonly 'builder.fieldType.time': "Heure";
138
+ readonly 'builder.fieldType.datetime': "Date et heure";
139
+ readonly 'builder.fieldType.date_range': "Plage de dates";
140
+ readonly 'builder.fieldType.datetime_range': "Plage date/heure";
141
+ readonly 'builder.fieldType.file': "Téléversement de fichier";
142
+ readonly 'builder.targetType.page': "Page";
143
+ readonly 'builder.targetType.field': "Champ";
144
+ readonly 'builder.formTitlePlaceholder': "Titre du formulaire";
145
+ readonly 'builder.categoryPlaceholder': "Catégorie";
146
+ readonly 'builder.categoryNone': "Aucune catégorie";
147
+ readonly 'builder.loadingForm': "Chargement du formulaire...";
148
+ readonly 'builder.lastSave': "Dernière sauvegarde : {value}";
149
+ readonly 'builder.save': "Sauvegarder";
150
+ readonly 'builder.publish': "Publier";
151
+ readonly 'builder.unpublish': "Dépublier";
152
+ readonly 'builder.pageCounter': "Page {current} / {total}";
153
+ readonly 'builder.pageTitlePlaceholder': "Titre de la page";
154
+ readonly 'builder.pageDescriptionPlaceholder': "Description de la page (optionnel)";
155
+ readonly 'builder.tooltip.mergePage': "Fusionner avec la page précédente";
156
+ readonly 'builder.tooltip.deletePage': "Supprimer la page";
157
+ readonly 'builder.questionPlaceholder': "Question";
158
+ readonly 'builder.tooltip.duplicateQuestion': "Dupliquer la question";
159
+ readonly 'builder.tooltip.deleteQuestion': "Supprimer la question";
160
+ readonly 'builder.tooltip.addCategory': "Ajouter une catégorie";
161
+ readonly 'builder.required': "Obligatoire";
162
+ readonly 'builder.optionLabelPlaceholder': "Libellé de l’option";
163
+ readonly 'builder.addOption': "Ajouter une option";
164
+ readonly 'builder.advancedSettings': "Paramètres avancés";
165
+ readonly 'builder.placeholderPlaceholder': "Placeholder";
166
+ readonly 'builder.helpTextPlaceholder': "Texte d’aide";
167
+ readonly 'builder.minPlaceholder': "Min";
168
+ readonly 'builder.maxPlaceholder': "Max";
169
+ readonly 'builder.stepPlaceholder': "Pas";
170
+ readonly 'builder.multiple': "Multiple";
171
+ readonly 'builder.acceptedExtensionsPlaceholder': "Extensions acceptées (.pdf,.png)";
172
+ readonly 'builder.conditions': "Conditions";
173
+ readonly 'builder.addCondition': "Ajouter une condition";
174
+ readonly 'builder.condition.action.show': "Afficher";
175
+ readonly 'builder.condition.action.hide': "Masquer";
176
+ readonly 'builder.condition.action.skip': "Passer";
177
+ readonly 'builder.condition.action.require': "Rendre obligatoire";
178
+ readonly 'builder.condition.action.disable': "Désactiver";
179
+ readonly 'builder.condition.match.all': "Toutes";
180
+ readonly 'builder.condition.match.any': "Au moins une";
181
+ readonly 'builder.condition.operator.eq': "Égal à";
182
+ readonly 'builder.condition.operator.neq': "Différent de";
183
+ readonly 'builder.condition.operator.in': "Dans";
184
+ readonly 'builder.condition.operator.not_in': "Pas dans";
185
+ readonly 'builder.condition.operator.gt': "Supérieur à";
186
+ readonly 'builder.condition.operator.gte': "Supérieur ou égal à";
187
+ readonly 'builder.condition.operator.lt': "Inférieur à";
188
+ readonly 'builder.condition.operator.lte': "Inférieur ou égal à";
189
+ readonly 'builder.condition.operator.contains': "Contient";
190
+ readonly 'builder.condition.operator.not_contains': "Ne contient pas";
191
+ readonly 'builder.condition.operator.is_empty': "Est vide";
192
+ readonly 'builder.condition.operator.not_empty': "N’est pas vide";
193
+ readonly 'builder.valuePlaceholder': "Valeur";
194
+ readonly 'builder.remove': "Retirer";
195
+ readonly 'builder.addClause': "Ajouter une clause";
196
+ readonly 'builder.deleteCondition': "Supprimer la condition";
197
+ readonly 'builder.rail.addQuestion': "Ajouter une question";
198
+ readonly 'builder.rail.addPage': "Ajouter une page";
199
+ readonly 'builder.loadingBuilder': "Chargement du builder...";
200
+ readonly 'builder.error.loadForm': "Échec du chargement du formulaire";
201
+ readonly 'builder.error.save': "Échec de la sauvegarde";
202
+ readonly 'builder.error.publish': "Échec de la publication";
203
+ readonly 'builder.error.unpublish': "Échec de la dépublication";
204
+ readonly 'builder.error.categoryCreate': "Échec de la création de catégorie";
205
+ readonly 'builder.optionDefaultLabel': "Option";
206
+ readonly 'builder.optionsCount': "{count} options";
207
+ readonly 'builder.categoryModal.title': "Créer une catégorie";
208
+ readonly 'builder.categoryModal.description': "Ajoutez une catégorie et assignez-la à ce formulaire.";
209
+ readonly 'builder.categoryModal.nameLabel': "Nom";
210
+ readonly 'builder.categoryModal.namePlaceholder': "Nom de la catégorie";
211
+ readonly 'builder.categoryModal.nameRequired': "Le nom de la catégorie est requis";
212
+ readonly 'builder.categoryModal.descriptionLabel': "Description";
213
+ readonly 'builder.categoryModal.descriptionPlaceholder': "Description (optionnel)";
214
+ readonly 'builder.categoryModal.activeLabel': "Catégorie active";
215
+ readonly 'builder.categoryModal.cancel': "Annuler";
216
+ readonly 'builder.categoryModal.create': "Créer la catégorie";
217
+ readonly 'renderer.submit': "Envoyer";
218
+ readonly 'renderer.loadingForm': "Chargement du formulaire";
219
+ readonly 'renderer.error.loadForm': "Impossible de charger le formulaire";
220
+ readonly 'renderer.error.submit': "Échec de l’envoi";
221
+ readonly 'renderer.error.missingFormKey': "Clé du formulaire manquante";
222
+ readonly 'renderer.alert.fixFields': "Veuillez corriger les champs suivants";
223
+ readonly 'renderer.alert.submitted': "Formulaire envoyé";
224
+ readonly 'renderer.pageTitle': "Page {index}";
225
+ readonly 'renderer.navigation.previous': "Précédent";
226
+ readonly 'renderer.navigation.next': "Suivant";
227
+ readonly 'response.loading': "Chargement de la réponse";
228
+ readonly 'response.empty': "Aucune donnée de réponse disponible";
229
+ readonly 'response.error.missingResponseUuid': "UUID de réponse requis";
230
+ readonly 'response.error.missingFormKey': "Clé du formulaire requise";
231
+ readonly 'response.error.load': "Impossible de charger la réponse";
232
+ readonly 'response.error.loadForm': "Impossible de charger le schéma du formulaire";
233
+ readonly 'response.page.fallback': "Page {index}";
234
+ readonly 'response.question.fallback': "Question {index}";
235
+ readonly 'response.answer.empty': "Aucune réponse";
236
+ readonly 'response.answer.yes': "Oui";
237
+ readonly 'response.answer.no': "Non";
238
+ readonly 'response.action.preview': "Aperçu";
239
+ readonly 'response.action.download': "Télécharger";
240
+ readonly 'response.file.unnamed': "Fichier";
241
+ readonly 'response.file.missingUrlHint': "URL de fichier indisponible. Activez FORMFORGE_HTTP_FILE_URLS_ENABLED dans la configuration FormForge.";
242
+ };
243
+ };
244
+ type FormForgeTranslationKey = keyof typeof TRANSLATIONS.en;
245
+ export declare function useFormForgeI18n(options?: UseFormForgeI18nOptions): {
246
+ locale: any;
247
+ t: (key: FormForgeTranslationKey, values?: FormForgeTranslationValues) => string;
248
+ };
249
+ export {};
250
+ //# sourceMappingURL=useFormForgeI18n.d.ts.map
@@ -0,0 +1,324 @@
1
+ import { computed, useNuxtApp, useRuntimeConfig } from "#imports";
2
+ const TRANSLATIONS = {
3
+ en: {
4
+ "builder.fieldType.text": "Short text",
5
+ "builder.fieldType.textarea": "Long text",
6
+ "builder.fieldType.email": "Email",
7
+ "builder.fieldType.number": "Number",
8
+ "builder.fieldType.select": "Select",
9
+ "builder.fieldType.select_menu": "Select menu",
10
+ "builder.fieldType.radio": "Multiple choice",
11
+ "builder.fieldType.checkbox": "Checkbox",
12
+ "builder.fieldType.checkbox_group": "Checkbox group",
13
+ "builder.fieldType.switch": "Switch",
14
+ "builder.fieldType.date": "Date",
15
+ "builder.fieldType.time": "Time",
16
+ "builder.fieldType.datetime": "Date & time",
17
+ "builder.fieldType.date_range": "Date range",
18
+ "builder.fieldType.datetime_range": "Datetime range",
19
+ "builder.fieldType.file": "File upload",
20
+ "builder.targetType.page": "Page",
21
+ "builder.targetType.field": "Field",
22
+ "builder.formTitlePlaceholder": "Form title",
23
+ "builder.categoryPlaceholder": "Category",
24
+ "builder.categoryNone": "No category",
25
+ "builder.loadingForm": "Loading form...",
26
+ "builder.lastSave": "Last save: {value}",
27
+ "builder.save": "Save",
28
+ "builder.publish": "Publish",
29
+ "builder.unpublish": "Unpublish",
30
+ "builder.pageCounter": "Page {current} / {total}",
31
+ "builder.pageTitlePlaceholder": "Page title",
32
+ "builder.pageDescriptionPlaceholder": "Page description (optional)",
33
+ "builder.tooltip.mergePage": "Merge with previous page",
34
+ "builder.tooltip.deletePage": "Delete page",
35
+ "builder.questionPlaceholder": "Question",
36
+ "builder.tooltip.duplicateQuestion": "Duplicate question",
37
+ "builder.tooltip.deleteQuestion": "Delete question",
38
+ "builder.tooltip.addCategory": "Add category",
39
+ "builder.required": "Required",
40
+ "builder.optionLabelPlaceholder": "Option label",
41
+ "builder.addOption": "Add option",
42
+ "builder.advancedSettings": "Advanced settings",
43
+ "builder.placeholderPlaceholder": "Placeholder",
44
+ "builder.helpTextPlaceholder": "Help text",
45
+ "builder.minPlaceholder": "Min",
46
+ "builder.maxPlaceholder": "Max",
47
+ "builder.stepPlaceholder": "Step",
48
+ "builder.multiple": "Multiple",
49
+ "builder.acceptedExtensionsPlaceholder": "Accepted extensions (.pdf,.png)",
50
+ "builder.conditions": "Conditions",
51
+ "builder.addCondition": "Add condition",
52
+ "builder.condition.action.show": "Show",
53
+ "builder.condition.action.hide": "Hide",
54
+ "builder.condition.action.skip": "Skip",
55
+ "builder.condition.action.require": "Require",
56
+ "builder.condition.action.disable": "Disable",
57
+ "builder.condition.match.all": "All",
58
+ "builder.condition.match.any": "Any",
59
+ "builder.condition.operator.eq": "Equals",
60
+ "builder.condition.operator.neq": "Not equals",
61
+ "builder.condition.operator.in": "In",
62
+ "builder.condition.operator.not_in": "Not in",
63
+ "builder.condition.operator.gt": "Greater than",
64
+ "builder.condition.operator.gte": "Greater or equal",
65
+ "builder.condition.operator.lt": "Less than",
66
+ "builder.condition.operator.lte": "Less or equal",
67
+ "builder.condition.operator.contains": "Contains",
68
+ "builder.condition.operator.not_contains": "Does not contain",
69
+ "builder.condition.operator.is_empty": "Is empty",
70
+ "builder.condition.operator.not_empty": "Is not empty",
71
+ "builder.valuePlaceholder": "Value",
72
+ "builder.remove": "Remove",
73
+ "builder.addClause": "Add clause",
74
+ "builder.deleteCondition": "Delete condition",
75
+ "builder.rail.addQuestion": "Add question",
76
+ "builder.rail.addPage": "Add page",
77
+ "builder.loadingBuilder": "Loading builder...",
78
+ "builder.error.loadForm": "Failed to load form",
79
+ "builder.error.save": "Save failed",
80
+ "builder.error.publish": "Publish failed",
81
+ "builder.error.unpublish": "Unpublish failed",
82
+ "builder.error.categoryCreate": "Category creation failed",
83
+ "builder.optionDefaultLabel": "Option",
84
+ "builder.optionsCount": "{count} options",
85
+ "builder.categoryModal.title": "Create category",
86
+ "builder.categoryModal.description": "Add a category and assign it to this form.",
87
+ "builder.categoryModal.nameLabel": "Name",
88
+ "builder.categoryModal.namePlaceholder": "Category name",
89
+ "builder.categoryModal.nameRequired": "Category name is required",
90
+ "builder.categoryModal.descriptionLabel": "Description",
91
+ "builder.categoryModal.descriptionPlaceholder": "Description (optional)",
92
+ "builder.categoryModal.activeLabel": "Active category",
93
+ "builder.categoryModal.cancel": "Cancel",
94
+ "builder.categoryModal.create": "Create category",
95
+ "renderer.submit": "Submit",
96
+ "renderer.loadingForm": "Loading form",
97
+ "renderer.error.loadForm": "Unable to load form",
98
+ "renderer.error.submit": "Submission failed",
99
+ "renderer.error.missingFormKey": "Missing form key",
100
+ "renderer.alert.fixFields": "Please fix the following fields",
101
+ "renderer.alert.submitted": "Form submitted",
102
+ "renderer.pageTitle": "Page {index}",
103
+ "renderer.navigation.previous": "Previous",
104
+ "renderer.navigation.next": "Next",
105
+ "response.loading": "Loading response",
106
+ "response.empty": "No response data available",
107
+ "response.error.missingResponseUuid": "Response UUID is required",
108
+ "response.error.missingFormKey": "Form key is required",
109
+ "response.error.load": "Unable to load response",
110
+ "response.error.loadForm": "Unable to load form schema",
111
+ "response.page.fallback": "Page {index}",
112
+ "response.question.fallback": "Question {index}",
113
+ "response.answer.empty": "No answer",
114
+ "response.answer.yes": "Yes",
115
+ "response.answer.no": "No",
116
+ "response.action.preview": "Preview",
117
+ "response.action.download": "Download",
118
+ "response.file.unnamed": "File",
119
+ "response.file.missingUrlHint": "File URL is unavailable. Enable FORMFORGE_HTTP_FILE_URLS_ENABLED in FormForge config."
120
+ },
121
+ fr: {
122
+ "builder.fieldType.text": "R\xE9ponse courte",
123
+ "builder.fieldType.textarea": "R\xE9ponse longue",
124
+ "builder.fieldType.email": "E-mail",
125
+ "builder.fieldType.number": "Nombre",
126
+ "builder.fieldType.select": "S\xE9lection",
127
+ "builder.fieldType.select_menu": "Menu de s\xE9lection",
128
+ "builder.fieldType.radio": "Choix multiples",
129
+ "builder.fieldType.checkbox": "Case \xE0 cocher",
130
+ "builder.fieldType.checkbox_group": "Groupe de cases",
131
+ "builder.fieldType.switch": "Interrupteur",
132
+ "builder.fieldType.date": "Date",
133
+ "builder.fieldType.time": "Heure",
134
+ "builder.fieldType.datetime": "Date et heure",
135
+ "builder.fieldType.date_range": "Plage de dates",
136
+ "builder.fieldType.datetime_range": "Plage date/heure",
137
+ "builder.fieldType.file": "T\xE9l\xE9versement de fichier",
138
+ "builder.targetType.page": "Page",
139
+ "builder.targetType.field": "Champ",
140
+ "builder.formTitlePlaceholder": "Titre du formulaire",
141
+ "builder.categoryPlaceholder": "Cat\xE9gorie",
142
+ "builder.categoryNone": "Aucune cat\xE9gorie",
143
+ "builder.loadingForm": "Chargement du formulaire...",
144
+ "builder.lastSave": "Derni\xE8re sauvegarde : {value}",
145
+ "builder.save": "Sauvegarder",
146
+ "builder.publish": "Publier",
147
+ "builder.unpublish": "D\xE9publier",
148
+ "builder.pageCounter": "Page {current} / {total}",
149
+ "builder.pageTitlePlaceholder": "Titre de la page",
150
+ "builder.pageDescriptionPlaceholder": "Description de la page (optionnel)",
151
+ "builder.tooltip.mergePage": "Fusionner avec la page pr\xE9c\xE9dente",
152
+ "builder.tooltip.deletePage": "Supprimer la page",
153
+ "builder.questionPlaceholder": "Question",
154
+ "builder.tooltip.duplicateQuestion": "Dupliquer la question",
155
+ "builder.tooltip.deleteQuestion": "Supprimer la question",
156
+ "builder.tooltip.addCategory": "Ajouter une cat\xE9gorie",
157
+ "builder.required": "Obligatoire",
158
+ "builder.optionLabelPlaceholder": "Libell\xE9 de l\u2019option",
159
+ "builder.addOption": "Ajouter une option",
160
+ "builder.advancedSettings": "Param\xE8tres avanc\xE9s",
161
+ "builder.placeholderPlaceholder": "Placeholder",
162
+ "builder.helpTextPlaceholder": "Texte d\u2019aide",
163
+ "builder.minPlaceholder": "Min",
164
+ "builder.maxPlaceholder": "Max",
165
+ "builder.stepPlaceholder": "Pas",
166
+ "builder.multiple": "Multiple",
167
+ "builder.acceptedExtensionsPlaceholder": "Extensions accept\xE9es (.pdf,.png)",
168
+ "builder.conditions": "Conditions",
169
+ "builder.addCondition": "Ajouter une condition",
170
+ "builder.condition.action.show": "Afficher",
171
+ "builder.condition.action.hide": "Masquer",
172
+ "builder.condition.action.skip": "Passer",
173
+ "builder.condition.action.require": "Rendre obligatoire",
174
+ "builder.condition.action.disable": "D\xE9sactiver",
175
+ "builder.condition.match.all": "Toutes",
176
+ "builder.condition.match.any": "Au moins une",
177
+ "builder.condition.operator.eq": "\xC9gal \xE0",
178
+ "builder.condition.operator.neq": "Diff\xE9rent de",
179
+ "builder.condition.operator.in": "Dans",
180
+ "builder.condition.operator.not_in": "Pas dans",
181
+ "builder.condition.operator.gt": "Sup\xE9rieur \xE0",
182
+ "builder.condition.operator.gte": "Sup\xE9rieur ou \xE9gal \xE0",
183
+ "builder.condition.operator.lt": "Inf\xE9rieur \xE0",
184
+ "builder.condition.operator.lte": "Inf\xE9rieur ou \xE9gal \xE0",
185
+ "builder.condition.operator.contains": "Contient",
186
+ "builder.condition.operator.not_contains": "Ne contient pas",
187
+ "builder.condition.operator.is_empty": "Est vide",
188
+ "builder.condition.operator.not_empty": "N\u2019est pas vide",
189
+ "builder.valuePlaceholder": "Valeur",
190
+ "builder.remove": "Retirer",
191
+ "builder.addClause": "Ajouter une clause",
192
+ "builder.deleteCondition": "Supprimer la condition",
193
+ "builder.rail.addQuestion": "Ajouter une question",
194
+ "builder.rail.addPage": "Ajouter une page",
195
+ "builder.loadingBuilder": "Chargement du builder...",
196
+ "builder.error.loadForm": "\xC9chec du chargement du formulaire",
197
+ "builder.error.save": "\xC9chec de la sauvegarde",
198
+ "builder.error.publish": "\xC9chec de la publication",
199
+ "builder.error.unpublish": "\xC9chec de la d\xE9publication",
200
+ "builder.error.categoryCreate": "\xC9chec de la cr\xE9ation de cat\xE9gorie",
201
+ "builder.optionDefaultLabel": "Option",
202
+ "builder.optionsCount": "{count} options",
203
+ "builder.categoryModal.title": "Cr\xE9er une cat\xE9gorie",
204
+ "builder.categoryModal.description": "Ajoutez une cat\xE9gorie et assignez-la \xE0 ce formulaire.",
205
+ "builder.categoryModal.nameLabel": "Nom",
206
+ "builder.categoryModal.namePlaceholder": "Nom de la cat\xE9gorie",
207
+ "builder.categoryModal.nameRequired": "Le nom de la cat\xE9gorie est requis",
208
+ "builder.categoryModal.descriptionLabel": "Description",
209
+ "builder.categoryModal.descriptionPlaceholder": "Description (optionnel)",
210
+ "builder.categoryModal.activeLabel": "Cat\xE9gorie active",
211
+ "builder.categoryModal.cancel": "Annuler",
212
+ "builder.categoryModal.create": "Cr\xE9er la cat\xE9gorie",
213
+ "renderer.submit": "Envoyer",
214
+ "renderer.loadingForm": "Chargement du formulaire",
215
+ "renderer.error.loadForm": "Impossible de charger le formulaire",
216
+ "renderer.error.submit": "\xC9chec de l\u2019envoi",
217
+ "renderer.error.missingFormKey": "Cl\xE9 du formulaire manquante",
218
+ "renderer.alert.fixFields": "Veuillez corriger les champs suivants",
219
+ "renderer.alert.submitted": "Formulaire envoy\xE9",
220
+ "renderer.pageTitle": "Page {index}",
221
+ "renderer.navigation.previous": "Pr\xE9c\xE9dent",
222
+ "renderer.navigation.next": "Suivant",
223
+ "response.loading": "Chargement de la r\xE9ponse",
224
+ "response.empty": "Aucune donn\xE9e de r\xE9ponse disponible",
225
+ "response.error.missingResponseUuid": "UUID de r\xE9ponse requis",
226
+ "response.error.missingFormKey": "Cl\xE9 du formulaire requise",
227
+ "response.error.load": "Impossible de charger la r\xE9ponse",
228
+ "response.error.loadForm": "Impossible de charger le sch\xE9ma du formulaire",
229
+ "response.page.fallback": "Page {index}",
230
+ "response.question.fallback": "Question {index}",
231
+ "response.answer.empty": "Aucune r\xE9ponse",
232
+ "response.answer.yes": "Oui",
233
+ "response.answer.no": "Non",
234
+ "response.action.preview": "Aper\xE7u",
235
+ "response.action.download": "T\xE9l\xE9charger",
236
+ "response.file.unnamed": "Fichier",
237
+ "response.file.missingUrlHint": "URL de fichier indisponible. Activez FORMFORGE_HTTP_FILE_URLS_ENABLED dans la configuration FormForge."
238
+ }
239
+ };
240
+ function normalizeLocale(locale) {
241
+ if (locale === void 0 || locale === "") {
242
+ return "en";
243
+ }
244
+ const lowered = locale.toLowerCase();
245
+ if (lowered.startsWith("fr")) {
246
+ return "fr";
247
+ }
248
+ return "en";
249
+ }
250
+ function readRuntimeLocale(value) {
251
+ if (!value || Array.isArray(value) || typeof value !== "object") {
252
+ return void 0;
253
+ }
254
+ const locale = value.locale;
255
+ return typeof locale === "string" ? locale : void 0;
256
+ }
257
+ function resolveLocaleOption(locale) {
258
+ if (typeof locale === "function") {
259
+ return locale();
260
+ }
261
+ return locale;
262
+ }
263
+ function readNuxtI18nLocale(value) {
264
+ if (value === null || typeof value !== "object") {
265
+ return void 0;
266
+ }
267
+ if ("locale" in value) {
268
+ const localeValue = value.locale;
269
+ if (typeof localeValue === "string") {
270
+ return localeValue;
271
+ }
272
+ if (localeValue !== null && typeof localeValue === "object" && "value" in localeValue) {
273
+ const refValue = localeValue.value;
274
+ if (typeof refValue === "string") {
275
+ return refValue;
276
+ }
277
+ }
278
+ }
279
+ if ("global" in value) {
280
+ const globalValue = value.global;
281
+ if (globalValue !== null && typeof globalValue === "object" && "locale" in globalValue) {
282
+ const localeValue = globalValue.locale;
283
+ if (typeof localeValue === "string") {
284
+ return localeValue;
285
+ }
286
+ if (localeValue !== null && typeof localeValue === "object" && "value" in localeValue) {
287
+ const refValue = localeValue.value;
288
+ if (typeof refValue === "string") {
289
+ return refValue;
290
+ }
291
+ }
292
+ }
293
+ }
294
+ return void 0;
295
+ }
296
+ function interpolate(template, values) {
297
+ if (values === void 0) {
298
+ return template;
299
+ }
300
+ return template.replaceAll(/\{([a-zA-Z0-9_]+)\}/g, (token, key) => {
301
+ const value = values[key];
302
+ return value === void 0 ? token : String(value);
303
+ });
304
+ }
305
+ export function useFormForgeI18n(options = {}) {
306
+ const runtimeConfig = useRuntimeConfig();
307
+ const nuxtApp = useNuxtApp();
308
+ const locale = computed(() => {
309
+ const nuxtLocale = readNuxtI18nLocale(nuxtApp.$i18n);
310
+ const runtimeLocale = readRuntimeLocale(runtimeConfig.public?.formforge);
311
+ const optionLocale = resolveLocaleOption(options.locale);
312
+ return normalizeLocale(optionLocale ?? nuxtLocale ?? runtimeLocale);
313
+ });
314
+ function t(key, values) {
315
+ const table = TRANSLATIONS[locale.value];
316
+ const fallbackTable = TRANSLATIONS.en;
317
+ const template = table[key] ?? fallbackTable[key] ?? key;
318
+ return interpolate(template, values);
319
+ }
320
+ return {
321
+ locale,
322
+ t
323
+ };
324
+ }