@stapel/forms-react 0.1.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 (203) hide show
  1. package/CHANGELOG.md +62 -0
  2. package/MODULE.md +172 -0
  3. package/README.md +207 -0
  4. package/dist/api/export.d.ts +66 -0
  5. package/dist/api/export.d.ts.map +1 -0
  6. package/dist/api/export.js +138 -0
  7. package/dist/api/export.js.map +1 -0
  8. package/dist/api/extensions.d.ts +8 -0
  9. package/dist/api/extensions.d.ts.map +1 -0
  10. package/dist/api/extensions.js +8 -0
  11. package/dist/api/extensions.js.map +1 -0
  12. package/dist/api/formsApi.d.ts +113 -0
  13. package/dist/api/formsApi.d.ts.map +1 -0
  14. package/dist/api/formsApi.js +81 -0
  15. package/dist/api/formsApi.js.map +1 -0
  16. package/dist/api/generated/schema.d.ts +987 -0
  17. package/dist/api/generated/schema.d.ts.map +1 -0
  18. package/dist/api/generated/schema.js +2 -0
  19. package/dist/api/generated/schema.js.map +1 -0
  20. package/dist/api/types.d.ts +222 -0
  21. package/dist/api/types.d.ts.map +1 -0
  22. package/dist/api/types.js +14 -0
  23. package/dist/api/types.js.map +1 -0
  24. package/dist/default/ConfigField.d.ts +32 -0
  25. package/dist/default/ConfigField.d.ts.map +1 -0
  26. package/dist/default/ConfigField.js +101 -0
  27. package/dist/default/ConfigField.js.map +1 -0
  28. package/dist/default/ErrorAlert.d.ts +9 -0
  29. package/dist/default/ErrorAlert.d.ts.map +1 -0
  30. package/dist/default/ErrorAlert.js +27 -0
  31. package/dist/default/ErrorAlert.js.map +1 -0
  32. package/dist/default/FormBuilderPane.d.ts +36 -0
  33. package/dist/default/FormBuilderPane.d.ts.map +1 -0
  34. package/dist/default/FormBuilderPane.js +70 -0
  35. package/dist/default/FormBuilderPane.js.map +1 -0
  36. package/dist/default/FormsListPane.d.ts +18 -0
  37. package/dist/default/FormsListPane.d.ts.map +1 -0
  38. package/dist/default/FormsListPane.js +28 -0
  39. package/dist/default/FormsListPane.js.map +1 -0
  40. package/dist/default/ResponsesPane.d.ts +21 -0
  41. package/dist/default/ResponsesPane.d.ts.map +1 -0
  42. package/dist/default/ResponsesPane.js +118 -0
  43. package/dist/default/ResponsesPane.js.map +1 -0
  44. package/dist/default/StapelForm.d.ts +76 -0
  45. package/dist/default/StapelForm.d.ts.map +1 -0
  46. package/dist/default/StapelForm.js +118 -0
  47. package/dist/default/StapelForm.js.map +1 -0
  48. package/dist/default/fields.d.ts +11 -0
  49. package/dist/default/fields.d.ts.map +1 -0
  50. package/dist/default/fields.js +273 -0
  51. package/dist/default/fields.js.map +1 -0
  52. package/dist/default/index.d.ts +42 -0
  53. package/dist/default/index.d.ts.map +1 -0
  54. package/dist/default/index.js +37 -0
  55. package/dist/default/index.js.map +1 -0
  56. package/dist/default/slots.d.ts +59 -0
  57. package/dist/default/slots.d.ts.map +1 -0
  58. package/dist/default/slots.js +25 -0
  59. package/dist/default/slots.js.map +1 -0
  60. package/dist/default/theme.d.ts +23 -0
  61. package/dist/default/theme.d.ts.map +1 -0
  62. package/dist/default/theme.js +38 -0
  63. package/dist/default/theme.js.map +1 -0
  64. package/dist/default/types.d.ts +12 -0
  65. package/dist/default/types.d.ts.map +1 -0
  66. package/dist/default/types.js +2 -0
  67. package/dist/default/types.js.map +1 -0
  68. package/dist/flows/errors.d.ts +12 -0
  69. package/dist/flows/errors.d.ts.map +1 -0
  70. package/dist/flows/errors.js +13 -0
  71. package/dist/flows/errors.js.map +1 -0
  72. package/dist/flows/registry.d.ts +22 -0
  73. package/dist/flows/registry.d.ts.map +1 -0
  74. package/dist/flows/registry.js +20 -0
  75. package/dist/flows/registry.js.map +1 -0
  76. package/dist/headless/FormBuilder.d.ts +100 -0
  77. package/dist/headless/FormBuilder.d.ts.map +1 -0
  78. package/dist/headless/FormBuilder.js +278 -0
  79. package/dist/headless/FormBuilder.js.map +1 -0
  80. package/dist/headless/FormFill.d.ts +88 -0
  81. package/dist/headless/FormFill.d.ts.map +1 -0
  82. package/dist/headless/FormFill.js +279 -0
  83. package/dist/headless/FormFill.js.map +1 -0
  84. package/dist/headless/FormList.d.ts +34 -0
  85. package/dist/headless/FormList.d.ts.map +1 -0
  86. package/dist/headless/FormList.js +37 -0
  87. package/dist/headless/FormList.js.map +1 -0
  88. package/dist/headless/FormsProvider.d.ts +19 -0
  89. package/dist/headless/FormsProvider.d.ts.map +1 -0
  90. package/dist/headless/FormsProvider.js +15 -0
  91. package/dist/headless/FormsProvider.js.map +1 -0
  92. package/dist/headless/ResponsesTable.d.ts +82 -0
  93. package/dist/headless/ResponsesTable.d.ts.map +1 -0
  94. package/dist/headless/ResponsesTable.js +195 -0
  95. package/dist/headless/ResponsesTable.js.map +1 -0
  96. package/dist/i18n/errorsMap.d.ts +10 -0
  97. package/dist/i18n/errorsMap.d.ts.map +1 -0
  98. package/dist/i18n/errorsMap.js +20 -0
  99. package/dist/i18n/errorsMap.js.map +1 -0
  100. package/dist/i18n/es.d.ts +7 -0
  101. package/dist/i18n/es.d.ts.map +1 -0
  102. package/dist/i18n/es.js +118 -0
  103. package/dist/i18n/es.js.map +1 -0
  104. package/dist/i18n/generated/errors.es.gen.d.ts +16 -0
  105. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
  106. package/dist/i18n/generated/errors.es.gen.js +79 -0
  107. package/dist/i18n/generated/errors.es.gen.js.map +1 -0
  108. package/dist/i18n/generated/errors.gen.d.ts +485 -0
  109. package/dist/i18n/generated/errors.gen.d.ts.map +1 -0
  110. package/dist/i18n/generated/errors.gen.js +246 -0
  111. package/dist/i18n/generated/errors.gen.js.map +1 -0
  112. package/dist/i18n/generated/errors.ru.gen.d.ts +16 -0
  113. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -0
  114. package/dist/i18n/generated/errors.ru.gen.js +79 -0
  115. package/dist/i18n/generated/errors.ru.gen.js.map +1 -0
  116. package/dist/i18n/keys.d.ts +141 -0
  117. package/dist/i18n/keys.d.ts.map +1 -0
  118. package/dist/i18n/keys.js +233 -0
  119. package/dist/i18n/keys.js.map +1 -0
  120. package/dist/i18n/ru.d.ts +7 -0
  121. package/dist/i18n/ru.d.ts.map +1 -0
  122. package/dist/i18n/ru.js +127 -0
  123. package/dist/i18n/ru.js.map +1 -0
  124. package/dist/index.d.ts +61 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +55 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/model/context.d.ts +11 -0
  129. package/dist/model/context.d.ts.map +1 -0
  130. package/dist/model/context.js +16 -0
  131. package/dist/model/context.js.map +1 -0
  132. package/dist/model/mutations.d.ts +135 -0
  133. package/dist/model/mutations.d.ts.map +1 -0
  134. package/dist/model/mutations.js +223 -0
  135. package/dist/model/mutations.js.map +1 -0
  136. package/dist/model/queries.d.ts +59 -0
  137. package/dist/model/queries.d.ts.map +1 -0
  138. package/dist/model/queries.js +117 -0
  139. package/dist/model/queries.js.map +1 -0
  140. package/dist/model/queryKeys.d.ts +28 -0
  141. package/dist/model/queryKeys.d.ts.map +1 -0
  142. package/dist/model/queryKeys.js +23 -0
  143. package/dist/model/queryKeys.js.map +1 -0
  144. package/dist/model/runtime.d.ts +28 -0
  145. package/dist/model/runtime.d.ts.map +1 -0
  146. package/dist/model/runtime.js +14 -0
  147. package/dist/model/runtime.js.map +1 -0
  148. package/dist/widgets/configForms.d.ts +112 -0
  149. package/dist/widgets/configForms.d.ts.map +1 -0
  150. package/dist/widgets/configForms.js +211 -0
  151. package/dist/widgets/configForms.js.map +1 -0
  152. package/dist/widgets/registry.d.ts +83 -0
  153. package/dist/widgets/registry.d.ts.map +1 -0
  154. package/dist/widgets/registry.js +27 -0
  155. package/dist/widgets/registry.js.map +1 -0
  156. package/dist/widgets/validate.d.ts +57 -0
  157. package/dist/widgets/validate.d.ts.map +1 -0
  158. package/dist/widgets/validate.js +173 -0
  159. package/dist/widgets/validate.js.map +1 -0
  160. package/llms.txt +124 -0
  161. package/manifest.json +1038 -0
  162. package/package.json +108 -0
  163. package/src/analytics/generated/events.json +7 -0
  164. package/src/api/export.ts +195 -0
  165. package/src/api/extensions.ts +7 -0
  166. package/src/api/formsApi.ts +329 -0
  167. package/src/api/generated/schema.ts +989 -0
  168. package/src/api/types.ts +276 -0
  169. package/src/default/ConfigField.tsx +227 -0
  170. package/src/default/ErrorAlert.tsx +46 -0
  171. package/src/default/FormBuilderPane.tsx +414 -0
  172. package/src/default/FormsListPane.tsx +144 -0
  173. package/src/default/ResponsesPane.tsx +332 -0
  174. package/src/default/StapelForm.tsx +377 -0
  175. package/src/default/fields.tsx +454 -0
  176. package/src/default/index.ts +71 -0
  177. package/src/default/slots.ts +78 -0
  178. package/src/default/theme.tsx +65 -0
  179. package/src/default/types.ts +12 -0
  180. package/src/flows/errors.ts +16 -0
  181. package/src/flows/registry.ts +32 -0
  182. package/src/headless/FormBuilder.tsx +453 -0
  183. package/src/headless/FormFill.tsx +396 -0
  184. package/src/headless/FormList.tsx +74 -0
  185. package/src/headless/FormsProvider.tsx +20 -0
  186. package/src/headless/ResponsesTable.tsx +341 -0
  187. package/src/i18n/errorsMap.ts +31 -0
  188. package/src/i18n/es.ts +140 -0
  189. package/src/i18n/generated/errors.es.gen.ts +85 -0
  190. package/src/i18n/generated/errors.gen.ts +277 -0
  191. package/src/i18n/generated/errors.json +583 -0
  192. package/src/i18n/generated/errors.ru.gen.ts +85 -0
  193. package/src/i18n/keys.ts +264 -0
  194. package/src/i18n/ru.ts +150 -0
  195. package/src/index.ts +184 -0
  196. package/src/model/context.tsx +28 -0
  197. package/src/model/mutations.ts +387 -0
  198. package/src/model/queries.ts +154 -0
  199. package/src/model/queryKeys.ts +61 -0
  200. package/src/model/runtime.ts +48 -0
  201. package/src/widgets/registry.ts +101 -0
  202. package/src/widgets/validate.ts +224 -0
  203. package/tsconfig.json +26 -0
@@ -0,0 +1,246 @@
1
+ // AUTO-GENERATED by scripts/gen-errors.mjs — do not edit by hand.
2
+ // Source: stapel-auth canonical errors.json (backend codegen artifact).
3
+ // Regenerate: pnpm gen:errors · Drift gate: pnpm gen:errors:check
4
+ /**
5
+ * The FORMS_ERRORS map — every `error.*` key stapel-auth can raise, keyed by its
6
+ * canonical code. The single source of truth behind the en fallback bundle, the
7
+ * remediation lookup, and the manifest `errors` block.
8
+ */
9
+ export const FORMS_ERRORS = {
10
+ "error.400.bad_request": { status: 400, params: [], remediation: "fix_input", en: "Bad request" },
11
+ "error.400.captcha_invalid": { status: 400, params: [], remediation: "retry", en: "Captcha verification failed. Please try again." },
12
+ "error.400.captcha_required": { status: 400, params: [], remediation: "retry", en: "Captcha token is required." },
13
+ "error.400.description_too_long": { status: 400, params: ["max_length"], remediation: "fix_input", en: "Description must be at most {max_length} characters" },
14
+ "error.400.description_too_short": { status: 400, params: ["min_length"], remediation: "fix_input", en: "Description must be at least {min_length} characters" },
15
+ "error.400.expected_list": { status: 400, params: [], remediation: "fix_input", en: "Expected a list of items" },
16
+ "error.400.feature_above_maximum": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is above maximum for {feature}" },
17
+ "error.400.feature_below_minimum": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is below minimum for {feature}" },
18
+ "error.400.feature_invalid_config": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid config for {feature}" },
19
+ "error.400.feature_invalid_format": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid format for {feature}" },
20
+ "error.400.feature_invalid_type": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid type for {feature}" },
21
+ "error.400.feature_mandatory_missing": { status: 400, params: ["feature"], remediation: "fix_input", en: "Mandatory feature {feature} is required" },
22
+ "error.400.feature_not_allowed": { status: 400, params: ["feature"], remediation: "fix_input", en: "Feature {feature} is not allowed here" },
23
+ "error.400.feature_not_in_options": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is not in allowed options for {feature}" },
24
+ "error.400.feature_unknown": { status: 400, params: ["feature"], remediation: "fix_input", en: "Unknown feature {feature}" },
25
+ "error.400.feature_unknown_type": { status: 400, params: ["feature"], remediation: "fix_input", en: "Unknown feature type for {feature}" },
26
+ "error.400.field.blank": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} may not be blank" },
27
+ "error.400.field.does_not_exist": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} does not exist" },
28
+ "error.400.field.invalid": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is invalid" },
29
+ "error.400.field.invalid_choice": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is not a valid choice" },
30
+ "error.400.field.max_length": { status: 400, params: ["field", "max_length"], remediation: "fix_input", en: "{field} must be at most {max_length} characters" },
31
+ "error.400.field.max_value": { status: 400, params: ["field", "max_value"], remediation: "fix_input", en: "{field} must be at most {max_value}" },
32
+ "error.400.field.min_length": { status: 400, params: ["field", "min_length"], remediation: "fix_input", en: "{field} must be at least {min_length} characters" },
33
+ "error.400.field.min_value": { status: 400, params: ["field", "min_value"], remediation: "fix_input", en: "{field} must be at least {min_value}" },
34
+ "error.400.field.null": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} may not be null" },
35
+ "error.400.field.required": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is required" },
36
+ "error.400.field.unique": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} must be unique" },
37
+ "error.400.forms_answers_not_object": { status: 400, params: [], remediation: "fix_input", en: "Answers must be an object keyed by field slug" },
38
+ "error.400.forms_duplicate_slug": { status: 400, params: ["slug"], remediation: "fix_input", en: "Field slug {slug} appears more than once" },
39
+ "error.400.forms_empty_schema": { status: 400, params: [], remediation: "fix_input", en: "A form must have at least one field to publish" },
40
+ "error.400.forms_invalid_retention": { status: 400, params: [], remediation: "fix_input", en: "The retention override may only shorten the module retention period" },
41
+ "error.400.forms_invalid_schema": { status: 400, params: [], remediation: "fix_input", en: "The form schema is not valid" },
42
+ "error.400.forms_invalid_state": { status: 400, params: [], remediation: "fix_input", en: "Unknown form state" },
43
+ "error.400.forms_kind_not_allowed": { status: 400, params: ["kind"], remediation: "fix_input", en: "Field kind {kind} may not be used in a form" },
44
+ "error.400.forms_no_draft": { status: 400, params: [], remediation: "fix_input", en: "There is no draft to publish" },
45
+ "error.400.forms_no_recipients": { status: 400, params: [], remediation: "fix_input", en: "No notification recipient is configured for this form" },
46
+ "error.400.forms_not_published": { status: 400, params: [], remediation: "fix_input", en: "The form has no published version yet" },
47
+ "error.400.forms_too_many_fields": { status: 400, params: [], remediation: "fix_input", en: "The form has more fields than the limit allows" },
48
+ "error.400.forms_too_many_open": { status: 400, params: [], remediation: "contact_support", en: "This workspace already has the maximum number of open forms" },
49
+ "error.400.forms_unknown_field": { status: 400, params: [], remediation: "fix_input", en: "The submission answers a field the form does not have" },
50
+ "error.400.invalid_ad_id": { status: 400, params: [], remediation: "fix_input", en: "Invalid advertisement ID" },
51
+ "error.400.validation_error": { status: 400, params: [], remediation: "fix_input", en: "Validation error" },
52
+ "error.400.verification_failed": { status: 400, params: [], remediation: "verify", en: "Verification failed" },
53
+ "error.400.verification_invalid_factor": { status: 400, params: [], remediation: "verify", en: "This verification factor is not available" },
54
+ "error.401.unauthorized": { status: 401, params: [], remediation: "reauthenticate", en: "Authentication required" },
55
+ "error.402.payment_required": { status: 402, params: [], remediation: "retry", en: "Payment required" },
56
+ "error.403.forbidden": { status: 403, params: [], remediation: "retry", en: "You do not have permission to perform this action" },
57
+ "error.403.forms_forbidden": { status: 403, params: [], remediation: "contact_support", en: "You do not have access to this form" },
58
+ "error.403.network_blocked": { status: 403, params: [], remediation: "contact_support", en: "Requests from this network are not allowed" },
59
+ "error.403.verification_enrollment_required": { status: 403, params: [], remediation: "verify", en: "Verification factor enrollment required" },
60
+ "error.403.verification_required": { status: 403, params: [], remediation: "verify", en: "Additional verification required" },
61
+ "error.404.ad_not_found": { status: 404, params: [], remediation: "retry", en: "Listing not found" },
62
+ "error.404.forms_not_found": { status: 404, params: [], remediation: "verify", en: "Form not found" },
63
+ "error.404.forms_submission_not_found": { status: 404, params: [], remediation: "verify", en: "Submission not found" },
64
+ "error.404.not_found": { status: 404, params: [], remediation: "retry", en: "Requested resource not found" },
65
+ "error.404.verification_challenge_not_found": { status: 404, params: [], remediation: "verify", en: "Verification challenge not found or expired" },
66
+ "error.405.method_not_allowed": { status: 405, params: [], remediation: "retry", en: "Method not allowed" },
67
+ "error.406.not_acceptable": { status: 406, params: [], remediation: "retry", en: "Not acceptable" },
68
+ "error.408.request_timeout": { status: 408, params: [], remediation: "retry", en: "Request timeout" },
69
+ "error.409.conflict": { status: 409, params: [], remediation: "fix_input", en: "Resource already exists" },
70
+ "error.409.forms_submission_cap": { status: 409, params: [], remediation: "contact_support", en: "This form has reached its submission limit" },
71
+ "error.409.forms_version_superseded": { status: 409, params: [], remediation: "retry", en: "The form changed while you were filling it in" },
72
+ "error.410.forms_closed": { status: 410, params: [], remediation: "contact_support", en: "This form is closed" },
73
+ "error.410.gone": { status: 410, params: [], remediation: "retry", en: "Resource has been permanently removed" },
74
+ "error.413.forms_body_too_large": { status: 413, params: [], remediation: "fix_input", en: "The submission exceeds the size limit" },
75
+ "error.413.payload_too_large": { status: 413, params: [], remediation: "retry", en: "Request body is too large" },
76
+ "error.415.unsupported_media_type": { status: 415, params: [], remediation: "retry", en: "Unsupported media type" },
77
+ "error.422.unprocessable_entity": { status: 422, params: [], remediation: "wait_and_retry", en: "Unprocessable entity" },
78
+ "error.423.locked": { status: 423, params: [], remediation: "wait_and_retry", en: "Resource is locked" },
79
+ "error.423.verification_locked": { status: 423, params: [], remediation: "wait_and_retry", en: "Too many failed attempts — verification locked" },
80
+ "error.429.rate_limit": { status: 429, params: ["retry_after_minutes"], remediation: "wait_and_retry", en: "Too many attempts. Try again in {retry_after_minutes} minutes." },
81
+ "error.429.too_many_requests": { status: 429, params: [], remediation: "wait_and_retry", en: "Too many requests. Please try again later." },
82
+ "error.500.internal": { status: 500, params: [], remediation: "contact_support", en: "Something went wrong" },
83
+ "error.503.forms_workspaces_unavailable": { status: 503, params: [], remediation: "wait_and_retry", en: "Workspace membership service is unavailable" },
84
+ "error.503.mandate_unavailable": { status: 503, params: [], remediation: "retry", en: "Cannot verify workspace mandate right now" },
85
+ };
86
+ /** Every backend error code this module can surface, sorted. */
87
+ export const FORMS_ERROR_CODES = [
88
+ "error.400.bad_request",
89
+ "error.400.captcha_invalid",
90
+ "error.400.captcha_required",
91
+ "error.400.description_too_long",
92
+ "error.400.description_too_short",
93
+ "error.400.expected_list",
94
+ "error.400.feature_above_maximum",
95
+ "error.400.feature_below_minimum",
96
+ "error.400.feature_invalid_config",
97
+ "error.400.feature_invalid_format",
98
+ "error.400.feature_invalid_type",
99
+ "error.400.feature_mandatory_missing",
100
+ "error.400.feature_not_allowed",
101
+ "error.400.feature_not_in_options",
102
+ "error.400.feature_unknown",
103
+ "error.400.feature_unknown_type",
104
+ "error.400.field.blank",
105
+ "error.400.field.does_not_exist",
106
+ "error.400.field.invalid",
107
+ "error.400.field.invalid_choice",
108
+ "error.400.field.max_length",
109
+ "error.400.field.max_value",
110
+ "error.400.field.min_length",
111
+ "error.400.field.min_value",
112
+ "error.400.field.null",
113
+ "error.400.field.required",
114
+ "error.400.field.unique",
115
+ "error.400.forms_answers_not_object",
116
+ "error.400.forms_duplicate_slug",
117
+ "error.400.forms_empty_schema",
118
+ "error.400.forms_invalid_retention",
119
+ "error.400.forms_invalid_schema",
120
+ "error.400.forms_invalid_state",
121
+ "error.400.forms_kind_not_allowed",
122
+ "error.400.forms_no_draft",
123
+ "error.400.forms_no_recipients",
124
+ "error.400.forms_not_published",
125
+ "error.400.forms_too_many_fields",
126
+ "error.400.forms_too_many_open",
127
+ "error.400.forms_unknown_field",
128
+ "error.400.invalid_ad_id",
129
+ "error.400.validation_error",
130
+ "error.400.verification_failed",
131
+ "error.400.verification_invalid_factor",
132
+ "error.401.unauthorized",
133
+ "error.402.payment_required",
134
+ "error.403.forbidden",
135
+ "error.403.forms_forbidden",
136
+ "error.403.network_blocked",
137
+ "error.403.verification_enrollment_required",
138
+ "error.403.verification_required",
139
+ "error.404.ad_not_found",
140
+ "error.404.forms_not_found",
141
+ "error.404.forms_submission_not_found",
142
+ "error.404.not_found",
143
+ "error.404.verification_challenge_not_found",
144
+ "error.405.method_not_allowed",
145
+ "error.406.not_acceptable",
146
+ "error.408.request_timeout",
147
+ "error.409.conflict",
148
+ "error.409.forms_submission_cap",
149
+ "error.409.forms_version_superseded",
150
+ "error.410.forms_closed",
151
+ "error.410.gone",
152
+ "error.413.forms_body_too_large",
153
+ "error.413.payload_too_large",
154
+ "error.415.unsupported_media_type",
155
+ "error.422.unprocessable_entity",
156
+ "error.423.locked",
157
+ "error.423.verification_locked",
158
+ "error.429.rate_limit",
159
+ "error.429.too_many_requests",
160
+ "error.500.internal",
161
+ "error.503.forms_workspaces_unavailable",
162
+ "error.503.mandate_unavailable",
163
+ ];
164
+ /**
165
+ * English fallback bundle — one string per backend key, so a `StapelApiError.code`
166
+ * never renders as a raw key. Merged UNDER the hand-polished UI copy in
167
+ * {@link authI18nBundleEn} (polish wins; this guarantees coverage).
168
+ */
169
+ export const formsErrorBundleEn = {
170
+ "error.400.bad_request": "Bad request",
171
+ "error.400.captcha_invalid": "Captcha verification failed. Please try again.",
172
+ "error.400.captcha_required": "Captcha token is required.",
173
+ "error.400.description_too_long": "Description must be at most {max_length} characters",
174
+ "error.400.description_too_short": "Description must be at least {min_length} characters",
175
+ "error.400.expected_list": "Expected a list of items",
176
+ "error.400.feature_above_maximum": "Value is above maximum for {feature}",
177
+ "error.400.feature_below_minimum": "Value is below minimum for {feature}",
178
+ "error.400.feature_invalid_config": "Invalid config for {feature}",
179
+ "error.400.feature_invalid_format": "Invalid format for {feature}",
180
+ "error.400.feature_invalid_type": "Invalid type for {feature}",
181
+ "error.400.feature_mandatory_missing": "Mandatory feature {feature} is required",
182
+ "error.400.feature_not_allowed": "Feature {feature} is not allowed here",
183
+ "error.400.feature_not_in_options": "Value is not in allowed options for {feature}",
184
+ "error.400.feature_unknown": "Unknown feature {feature}",
185
+ "error.400.feature_unknown_type": "Unknown feature type for {feature}",
186
+ "error.400.field.blank": "{field} may not be blank",
187
+ "error.400.field.does_not_exist": "{field} does not exist",
188
+ "error.400.field.invalid": "{field} is invalid",
189
+ "error.400.field.invalid_choice": "{field} is not a valid choice",
190
+ "error.400.field.max_length": "{field} must be at most {max_length} characters",
191
+ "error.400.field.max_value": "{field} must be at most {max_value}",
192
+ "error.400.field.min_length": "{field} must be at least {min_length} characters",
193
+ "error.400.field.min_value": "{field} must be at least {min_value}",
194
+ "error.400.field.null": "{field} may not be null",
195
+ "error.400.field.required": "{field} is required",
196
+ "error.400.field.unique": "{field} must be unique",
197
+ "error.400.forms_answers_not_object": "Answers must be an object keyed by field slug",
198
+ "error.400.forms_duplicate_slug": "Field slug {slug} appears more than once",
199
+ "error.400.forms_empty_schema": "A form must have at least one field to publish",
200
+ "error.400.forms_invalid_retention": "The retention override may only shorten the module retention period",
201
+ "error.400.forms_invalid_schema": "The form schema is not valid",
202
+ "error.400.forms_invalid_state": "Unknown form state",
203
+ "error.400.forms_kind_not_allowed": "Field kind {kind} may not be used in a form",
204
+ "error.400.forms_no_draft": "There is no draft to publish",
205
+ "error.400.forms_no_recipients": "No notification recipient is configured for this form",
206
+ "error.400.forms_not_published": "The form has no published version yet",
207
+ "error.400.forms_too_many_fields": "The form has more fields than the limit allows",
208
+ "error.400.forms_too_many_open": "This workspace already has the maximum number of open forms",
209
+ "error.400.forms_unknown_field": "The submission answers a field the form does not have",
210
+ "error.400.invalid_ad_id": "Invalid advertisement ID",
211
+ "error.400.validation_error": "Validation error",
212
+ "error.400.verification_failed": "Verification failed",
213
+ "error.400.verification_invalid_factor": "This verification factor is not available",
214
+ "error.401.unauthorized": "Authentication required",
215
+ "error.402.payment_required": "Payment required",
216
+ "error.403.forbidden": "You do not have permission to perform this action",
217
+ "error.403.forms_forbidden": "You do not have access to this form",
218
+ "error.403.network_blocked": "Requests from this network are not allowed",
219
+ "error.403.verification_enrollment_required": "Verification factor enrollment required",
220
+ "error.403.verification_required": "Additional verification required",
221
+ "error.404.ad_not_found": "Listing not found",
222
+ "error.404.forms_not_found": "Form not found",
223
+ "error.404.forms_submission_not_found": "Submission not found",
224
+ "error.404.not_found": "Requested resource not found",
225
+ "error.404.verification_challenge_not_found": "Verification challenge not found or expired",
226
+ "error.405.method_not_allowed": "Method not allowed",
227
+ "error.406.not_acceptable": "Not acceptable",
228
+ "error.408.request_timeout": "Request timeout",
229
+ "error.409.conflict": "Resource already exists",
230
+ "error.409.forms_submission_cap": "This form has reached its submission limit",
231
+ "error.409.forms_version_superseded": "The form changed while you were filling it in",
232
+ "error.410.forms_closed": "This form is closed",
233
+ "error.410.gone": "Resource has been permanently removed",
234
+ "error.413.forms_body_too_large": "The submission exceeds the size limit",
235
+ "error.413.payload_too_large": "Request body is too large",
236
+ "error.415.unsupported_media_type": "Unsupported media type",
237
+ "error.422.unprocessable_entity": "Unprocessable entity",
238
+ "error.423.locked": "Resource is locked",
239
+ "error.423.verification_locked": "Too many failed attempts — verification locked",
240
+ "error.429.rate_limit": "Too many attempts. Try again in {retry_after_minutes} minutes.",
241
+ "error.429.too_many_requests": "Too many requests. Please try again later.",
242
+ "error.500.internal": "Something went wrong",
243
+ "error.503.forms_workspaces_unavailable": "Workspace membership service is unavailable",
244
+ "error.503.mandate_unavailable": "Cannot verify workspace mandate right now",
245
+ };
246
+ //# sourceMappingURL=errors.gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.gen.js","sourceRoot":"","sources":["../../../src/i18n/generated/errors.gen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { FormsErrorCode } from "./errors.gen.js";
2
+ /**
3
+ * `ru` texts for the backend error codes this catalog carries.
4
+ *
5
+ * PARTIAL, and deliberately typed to say so: 12 key(s) owned by
6
+ * stapel_attributes are absent, because that owner ships no locale catalog
7
+ * (ERRORS_LOCALE_EXEMPT_OWNERS). English for them still comes from the registry
8
+ * artifact via the en bundle; the pair layers its own authored `ru`
9
+ * strings over this one until upstream ships translations. `Partial` is what
10
+ * makes the gap visible to TypeScript instead of a silent English fallback.
11
+ *
12
+ * Import from the pair's `./i18n/ru` subpath, NOT the main entry, so
13
+ * the locale stays out of hosts that don't ship it.
14
+ */
15
+ export declare const formsErrorBundleRu: Partial<Record<FormsErrorCode, string>>;
16
+ //# sourceMappingURL=errors.ru.gen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.ru.gen.d.ts","sourceRoot":"","sources":["../../../src/i18n/generated/errors.ru.gen.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,kBAAkB,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,MAAM,CAAC,CAgEtE,CAAC"}
@@ -0,0 +1,79 @@
1
+ /**
2
+ * `ru` texts for the backend error codes this catalog carries.
3
+ *
4
+ * PARTIAL, and deliberately typed to say so: 12 key(s) owned by
5
+ * stapel_attributes are absent, because that owner ships no locale catalog
6
+ * (ERRORS_LOCALE_EXEMPT_OWNERS). English for them still comes from the registry
7
+ * artifact via the en bundle; the pair layers its own authored `ru`
8
+ * strings over this one until upstream ships translations. `Partial` is what
9
+ * makes the gap visible to TypeScript instead of a silent English fallback.
10
+ *
11
+ * Import from the pair's `./i18n/ru` subpath, NOT the main entry, so
12
+ * the locale stays out of hosts that don't ship it.
13
+ */
14
+ export const formsErrorBundleRu = {
15
+ "error.400.bad_request": "Некорректный запрос",
16
+ "error.400.captcha_invalid": "Проверка капчи не пройдена. Пожалуйста, попробуйте ещё раз.",
17
+ "error.400.captcha_required": "Требуется токен капчи.",
18
+ "error.400.expected_list": "Ожидался список элементов",
19
+ "error.400.field.blank": "Поле «{field}» не может быть пустым",
20
+ "error.400.field.does_not_exist": "«{field}» не существует",
21
+ "error.400.field.invalid": "Поле «{field}» содержит недопустимое значение",
22
+ "error.400.field.invalid_choice": "Недопустимый вариант для поля «{field}»",
23
+ "error.400.field.max_length": "Поле «{field}» должно содержать не более {max_length} символов",
24
+ "error.400.field.max_value": "Значение поля «{field}» должно быть не больше {max_value}",
25
+ "error.400.field.min_length": "Поле «{field}» должно содержать не менее {min_length} символов",
26
+ "error.400.field.min_value": "Значение поля «{field}» должно быть не меньше {min_value}",
27
+ "error.400.field.null": "Поле «{field}» не может быть null",
28
+ "error.400.field.required": "Поле «{field}» обязательно",
29
+ "error.400.field.unique": "Значение поля «{field}» должно быть уникальным",
30
+ "error.400.forms_answers_not_object": "Ответы должны быть объектом с ключами-слагами полей",
31
+ "error.400.forms_duplicate_slug": "Слаг поля {slug} встречается более одного раза",
32
+ "error.400.forms_empty_schema": "Чтобы опубликовать форму, в ней должно быть хотя бы одно поле",
33
+ "error.400.forms_invalid_retention": "Индивидуальный срок хранения можно только сократить относительно модульного",
34
+ "error.400.forms_invalid_schema": "Схема формы некорректна",
35
+ "error.400.forms_invalid_state": "Неизвестное состояние формы",
36
+ "error.400.forms_kind_not_allowed": "Поле типа {kind} нельзя использовать в форме",
37
+ "error.400.forms_no_draft": "Нечего публиковать: черновик отсутствует",
38
+ "error.400.forms_no_recipients": "Для этой формы не настроен ни один получатель уведомлений",
39
+ "error.400.forms_not_published": "У формы ещё нет опубликованной версии",
40
+ "error.400.forms_too_many_fields": "В форме больше полей, чем допускает ограничение",
41
+ "error.400.forms_too_many_open": "В этом рабочем пространстве уже открыто предельное число форм",
42
+ "error.400.forms_unknown_field": "В ответе есть поле, которого нет в форме",
43
+ "error.400.invalid_ad_id": "Недопустимый идентификатор объявления",
44
+ "error.400.validation_error": "Ошибка валидации",
45
+ "error.400.verification_failed": "Проверка не пройдена",
46
+ "error.400.verification_invalid_factor": "Этот способ подтверждения недоступен",
47
+ "error.401.unauthorized": "Требуется аутентификация",
48
+ "error.402.payment_required": "Требуется оплата",
49
+ "error.403.forbidden": "У вас нет прав для выполнения этого действия",
50
+ "error.403.forms_forbidden": "У вас нет доступа к этой форме",
51
+ "error.403.network_blocked": "Запросы из этой сети не разрешены.",
52
+ "error.403.verification_enrollment_required": "Требуется регистрация фактора подтверждения.",
53
+ "error.403.verification_required": "Требуется дополнительная проверка",
54
+ "error.404.ad_not_found": "Объявление не найдено",
55
+ "error.404.forms_not_found": "Форма не найдена",
56
+ "error.404.forms_submission_not_found": "Ответ не найден",
57
+ "error.404.not_found": "Запрошенный ресурс не найден",
58
+ "error.404.verification_challenge_not_found": "Запрос на подтверждение не найден или истёк",
59
+ "error.405.method_not_allowed": "Метод не разрешён",
60
+ "error.406.not_acceptable": "Недопустимый формат ответа",
61
+ "error.408.request_timeout": "Время ожидания запроса истекло",
62
+ "error.409.conflict": "Ресурс уже существует",
63
+ "error.409.forms_submission_cap": "Форма достигла предела числа ответов",
64
+ "error.409.forms_version_superseded": "Форма изменилась, пока вы её заполняли",
65
+ "error.410.forms_closed": "Эта форма закрыта",
66
+ "error.410.gone": "Ресурс был безвозвратно удалён",
67
+ "error.413.forms_body_too_large": "Ответ превышает предельный размер",
68
+ "error.413.payload_too_large": "Тело запроса слишком большое",
69
+ "error.415.unsupported_media_type": "Неподдерживаемый тип данных",
70
+ "error.422.unprocessable_entity": "Невозможно обработать данные запроса",
71
+ "error.423.locked": "Ресурс заблокирован",
72
+ "error.423.verification_locked": "Слишком много неудачных попыток — подтверждение заблокировано",
73
+ "error.429.rate_limit": "Слишком много попыток. Повторите попытку через {retry_after_minutes} мин.",
74
+ "error.429.too_many_requests": "Слишком много запросов. Пожалуйста, повторите попытку позже.",
75
+ "error.500.internal": "Что-то пошло не так",
76
+ "error.503.forms_workspaces_unavailable": "Сервис рабочих пространств недоступен",
77
+ "error.503.mandate_unavailable": "Не удалось проверить доступ к рабочему пространству",
78
+ };
79
+ //# sourceMappingURL=errors.ru.gen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.ru.gen.js","sourceRoot":"","sources":["../../../src/i18n/generated/errors.ru.gen.ts"],"names":[],"mappings":"AAOA;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA4C;IACzE,uBAAuB,EAAE,qBAAqB;IAC9C,2BAA2B,EAAE,6DAA6D;IAC1F,4BAA4B,EAAE,wBAAwB;IACtD,yBAAyB,EAAE,2BAA2B;IACtD,uBAAuB,EAAE,qCAAqC;IAC9D,gCAAgC,EAAE,yBAAyB;IAC3D,yBAAyB,EAAE,+CAA+C;IAC1E,gCAAgC,EAAE,yCAAyC;IAC3E,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,4BAA4B,EAAE,gEAAgE;IAC9F,2BAA2B,EAAE,2DAA2D;IACxF,sBAAsB,EAAE,mCAAmC;IAC3D,0BAA0B,EAAE,4BAA4B;IACxD,wBAAwB,EAAE,gDAAgD;IAC1E,oCAAoC,EAAE,qDAAqD;IAC3F,gCAAgC,EAAE,gDAAgD;IAClF,8BAA8B,EAAE,+DAA+D;IAC/F,mCAAmC,EAAE,6EAA6E;IAClH,gCAAgC,EAAE,yBAAyB;IAC3D,+BAA+B,EAAE,6BAA6B;IAC9D,kCAAkC,EAAE,8CAA8C;IAClF,0BAA0B,EAAE,0CAA0C;IACtE,+BAA+B,EAAE,2DAA2D;IAC5F,+BAA+B,EAAE,uCAAuC;IACxE,iCAAiC,EAAE,iDAAiD;IACpF,+BAA+B,EAAE,+DAA+D;IAChG,+BAA+B,EAAE,0CAA0C;IAC3E,yBAAyB,EAAE,uCAAuC;IAClE,4BAA4B,EAAE,kBAAkB;IAChD,+BAA+B,EAAE,sBAAsB;IACvD,uCAAuC,EAAE,sCAAsC;IAC/E,wBAAwB,EAAE,0BAA0B;IACpD,4BAA4B,EAAE,kBAAkB;IAChD,qBAAqB,EAAE,8CAA8C;IACrE,2BAA2B,EAAE,gCAAgC;IAC7D,2BAA2B,EAAE,oCAAoC;IACjE,4CAA4C,EAAE,8CAA8C;IAC5F,iCAAiC,EAAE,mCAAmC;IACtE,wBAAwB,EAAE,uBAAuB;IACjD,2BAA2B,EAAE,kBAAkB;IAC/C,sCAAsC,EAAE,iBAAiB;IACzD,qBAAqB,EAAE,8BAA8B;IACrD,4CAA4C,EAAE,6CAA6C;IAC3F,8BAA8B,EAAE,mBAAmB;IACnD,0BAA0B,EAAE,4BAA4B;IACxD,2BAA2B,EAAE,gCAAgC;IAC7D,oBAAoB,EAAE,uBAAuB;IAC7C,gCAAgC,EAAE,sCAAsC;IACxE,oCAAoC,EAAE,wCAAwC;IAC9E,wBAAwB,EAAE,mBAAmB;IAC7C,gBAAgB,EAAE,gCAAgC;IAClD,gCAAgC,EAAE,mCAAmC;IACrE,6BAA6B,EAAE,8BAA8B;IAC7D,kCAAkC,EAAE,6BAA6B;IACjE,gCAAgC,EAAE,sCAAsC;IACxE,kBAAkB,EAAE,qBAAqB;IACzC,+BAA+B,EAAE,+DAA+D;IAChG,sBAAsB,EAAE,2EAA2E;IACnG,6BAA6B,EAAE,8DAA8D;IAC7F,oBAAoB,EAAE,qBAAqB;IAC3C,wCAAwC,EAAE,uCAAuC;IACjF,+BAA+B,EAAE,qDAAqD;CACvF,CAAC"}
@@ -0,0 +1,141 @@
1
+ import type { I18nDictionary, I18nEngine } from "@stapel/core";
2
+ /**
3
+ * forms-react's own translation KEYS (frontend-standard §4.2): headless
4
+ * components never render literal strings — hosts resolve these via core's
5
+ * i18n engine (`useT`). Backend error codes flow through the SAME contour: a
6
+ * `StapelApiError.code` is already a key, so the default bundle below ships
7
+ * English fallbacks for the backend error codes (generated — all 75 of them
8
+ * since stapel-forms 0.2.0, including the stapel_attributes family) and the
9
+ * pair's own UI keys. All UI keys live under the `forms.` namespace.
10
+ *
11
+ * ── What is NOT an i18n key here ───────────────────────────────────────────
12
+ *
13
+ * A form's FIELD LABELS are admin-authored content carried in the schema
14
+ * (`FeatureDef.name`), not keys. They render verbatim in whatever language
15
+ * the admin typed them. Multi-language form CONTENT is a v2 fork (spec §10) —
16
+ * translating a customer's question text is a different problem from
17
+ * translating the pair's chrome, and pretending otherwise would put
18
+ * user-generated strings through a bundle that can never contain them.
19
+ */
20
+ export declare const FORMS_I18N_KEYS: {
21
+ readonly unknownError: "forms.error.unknown";
22
+ readonly fillLoading: "forms.fill.loading";
23
+ readonly fillRetry: "forms.fill.retry";
24
+ readonly fillLoadFailed: "forms.fill.load_failed";
25
+ readonly fillNotFound: "forms.fill.not_found";
26
+ readonly fillClosed: "forms.fill.closed";
27
+ readonly fillSuperseded: "forms.fill.superseded";
28
+ readonly fillUnsupportedField: "forms.fill.unsupported_field";
29
+ readonly fillRequired: "forms.fill.required";
30
+ readonly fillSubmit: "forms.fill.submit";
31
+ readonly fillSubmitting: "forms.fill.submitting";
32
+ readonly fillThanks: "forms.fill.thanks";
33
+ readonly fillOptionalHint: "forms.fill.optional_hint";
34
+ readonly fillBoolYes: "forms.fill.bool_yes";
35
+ readonly fillBoolNo: "forms.fill.bool_no";
36
+ readonly fillSelectPlaceholder: "forms.fill.select_placeholder";
37
+ readonly fillUnlimited: "forms.fill.unlimited";
38
+ readonly submitBlockedDone: "forms.submit.blocked.done";
39
+ readonly submitBlockedInFlight: "forms.submit.blocked.in_flight";
40
+ readonly submitBlockedUnsupported: "forms.submit.blocked.unsupported_kind";
41
+ readonly builderTitle: "forms.builder.title";
42
+ readonly builderAddField: "forms.builder.add_field";
43
+ readonly builderRemoveField: "forms.builder.remove_field";
44
+ readonly builderMoveUp: "forms.builder.move_up";
45
+ readonly builderMoveDown: "forms.builder.move_down";
46
+ readonly builderFieldSlug: "forms.builder.field_slug";
47
+ readonly builderFieldLabel: "forms.builder.field_label";
48
+ readonly builderFieldRequired: "forms.builder.field_required";
49
+ readonly builderFieldKind: "forms.builder.field_kind";
50
+ readonly builderSave: "forms.builder.save";
51
+ readonly builderPublish: "forms.builder.publish";
52
+ readonly builderSaving: "forms.builder.blocked.saving";
53
+ readonly builderPublishing: "forms.builder.blocked.publishing";
54
+ readonly builderNoChanges: "forms.builder.blocked.no_changes";
55
+ readonly builderEmptySchema: "forms.builder.blocked.empty_schema";
56
+ readonly builderUnsavedDraft: "forms.builder.blocked.unsaved_draft";
57
+ readonly builderBuilderLess: "forms.builder.builder_less";
58
+ readonly builderKindUnregistered: "forms.builder.kind_unregistered";
59
+ readonly builderKindsFailed: "forms.builder.kinds_failed";
60
+ readonly builderNoKinds: "forms.builder.no_kinds";
61
+ readonly builderUnsupportedConfig: "forms.builder.unsupported_config";
62
+ readonly builderEmpty: "forms.builder.empty";
63
+ readonly builderMetaTitle: "forms.builder.meta_title";
64
+ readonly builderMetaDescription: "forms.builder.meta_description";
65
+ readonly builderMetaSubmitLabel: "forms.builder.meta_submit_label";
66
+ readonly builderMetaConfirmation: "forms.builder.meta_confirmation";
67
+ readonly builderStateOpen: "forms.builder.state_open";
68
+ readonly builderStateClosed: "forms.builder.state_closed";
69
+ readonly builderStateDraft: "forms.builder.state_draft";
70
+ readonly builderRotateLink: "forms.builder.rotate_link";
71
+ readonly builderPublicLink: "forms.builder.public_link";
72
+ readonly responsesTitle: "forms.responses.title";
73
+ readonly responsesEmpty: "forms.responses.empty";
74
+ readonly responsesLoadFailed: "forms.responses.load_failed";
75
+ readonly responsesSubmittedAt: "forms.responses.submitted_at";
76
+ readonly responsesRespondent: "forms.responses.respondent";
77
+ readonly responsesAnonymous: "forms.responses.anonymous";
78
+ readonly responsesVersion: "forms.responses.version";
79
+ readonly responsesAllVersions: "forms.responses.all_versions";
80
+ readonly responsesNext: "forms.responses.next";
81
+ readonly responsesPrev: "forms.responses.prev";
82
+ readonly responsesAtEnd: "forms.responses.blocked.at_end";
83
+ readonly responsesAtStart: "forms.responses.blocked.at_start";
84
+ readonly responsesDelete: "forms.responses.delete";
85
+ readonly responsesDeleteConfirm: "forms.responses.delete_confirm";
86
+ readonly responsesResend: "forms.responses.resend";
87
+ readonly responsesResendSent: "forms.responses.resend_sent";
88
+ readonly responsesResendOverride: "forms.responses.resend_override";
89
+ readonly responsesResendOverrideHint: "forms.responses.resend_override_hint";
90
+ readonly responsesExport: "forms.responses.export";
91
+ readonly responsesExporting: "forms.responses.exporting";
92
+ readonly responsesErased: "forms.responses.erased";
93
+ readonly responsesDetail: "forms.responses.detail";
94
+ readonly responsesClose: "forms.responses.close";
95
+ readonly listTitle: "forms.list.title";
96
+ readonly listEmpty: "forms.list.empty";
97
+ readonly listLoadFailed: "forms.list.load_failed";
98
+ readonly listCreate: "forms.list.create";
99
+ readonly listNewTitle: "forms.list.new_title";
100
+ readonly listSubmissionCount: "forms.list.submission_count";
101
+ };
102
+ export type FormsI18nKey = (typeof FORMS_I18N_KEYS)[keyof typeof FORMS_I18N_KEYS];
103
+ /**
104
+ * The `error.400.feature_*` codes, read off the generated registry.
105
+ *
106
+ * stapel-forms 0.2.0 put the stapel_attributes family INTO its published
107
+ * contract (75 keys, 12 of them owned by `stapel_attributes`), so the English
108
+ * the pair used to hand-carry now arrives through `gen:errors` like every other
109
+ * backend code and has been deleted. This list stays only so the locale bundles
110
+ * can be checked against it — derived, never typed out, so it cannot fall
111
+ * behind the registry.
112
+ *
113
+ * The ru/es strings ARE still authored by the pair: attributes ships English
114
+ * only (it has no `translations/` directory), so those 12 keys can appear in no
115
+ * locale catalog until upstream localizes them — logged as stapel-forms
116
+ * MODULE.md §12.6. `gen:errors` runs for this module with
117
+ * `ERRORS_LOCALE_EXEMPT_OWNERS=stapel_attributes`, which is why the generated
118
+ * ru/es bundles are `Partial` and the authored strings below them are load-bearing.
119
+ */
120
+ export declare const FEATURE_ERROR_KEYS: readonly string[];
121
+ /**
122
+ * English fallback bundle for forms-react UI keys + backend error codes.
123
+ * The generated `formsErrorBundleEn` (from stapel-forms's error registry,
124
+ * `pnpm gen:errors`) is spread FIRST so every backend `error.*` key has a
125
+ * fallback — a `StapelApiError.code` never renders as a raw key. The
126
+ * attributes family follows, then the pair's own copy.
127
+ */
128
+ export declare const formsI18nBundleEn: I18nDictionary;
129
+ /**
130
+ * Register forms-react's key bundle into a core i18n engine (call once at
131
+ * startup). Registers under the given locale (default `"en"`); a later
132
+ * `loadLocale` from stapel-translate can layer localized overrides on top.
133
+ *
134
+ * MERGE-PRIORITY CONVENTION (i18n-shipping.md §3): registration order is
135
+ * override priority — later wins per key. A HOST bundle registered AFTER this
136
+ * call overrides any pair text without a fork. The `ru`/`es` locales ship as
137
+ * the `./i18n/ru` and `./i18n/es` subpaths so a host that does not need them
138
+ * never carries the strings.
139
+ */
140
+ export declare function registerFormsI18n(engine: I18nEngine, locale?: string): void;
141
+ //# sourceMappingURL=keys.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keys.d.ts","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2FlB,CAAC;AAEX,MAAM,MAAM,YAAY,GACtB,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,OAAO,eAAe,CAAC,CAAC;AAEzD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,kBAAkB,EAAE,SAAS,MAAM,EAE/C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB,EAAE,cAuG/B,CAAC;AAEF;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAO,GAAG,IAAI,CAEzE"}