@stapel/categories-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.
- package/CHANGELOG.md +1 -0
- package/MODULE.md +194 -0
- package/README.md +191 -0
- package/dist/api/categoriesApi.d.ts +121 -0
- package/dist/api/categoriesApi.d.ts.map +1 -0
- package/dist/api/categoriesApi.js +48 -0
- package/dist/api/categoriesApi.js.map +1 -0
- package/dist/api/generated/schema.d.ts +2321 -0
- package/dist/api/generated/schema.d.ts.map +1 -0
- package/dist/api/generated/schema.js +2 -0
- package/dist/api/generated/schema.js.map +1 -0
- package/dist/api/types.d.ts +92 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/catalog/labels.d.ts +103 -0
- package/dist/catalog/labels.d.ts.map +1 -0
- package/dist/catalog/labels.js +56 -0
- package/dist/catalog/labels.js.map +1 -0
- package/dist/catalog/pks.d.ts +25 -0
- package/dist/catalog/pks.d.ts.map +1 -0
- package/dist/catalog/pks.js +38 -0
- package/dist/catalog/pks.js.map +1 -0
- package/dist/catalog/sync.d.ts +103 -0
- package/dist/catalog/sync.d.ts.map +1 -0
- package/dist/catalog/sync.js +114 -0
- package/dist/catalog/sync.js.map +1 -0
- package/dist/catalog/tree.d.ts +119 -0
- package/dist/catalog/tree.d.ts.map +1 -0
- package/dist/catalog/tree.js +166 -0
- package/dist/catalog/tree.js.map +1 -0
- package/dist/default/CatalogPage.d.ts +16 -0
- package/dist/default/CatalogPage.d.ts.map +1 -0
- package/dist/default/CatalogPage.js +13 -0
- package/dist/default/CatalogPage.js.map +1 -0
- package/dist/default/CategoryBreadcrumbsBar.d.ts +20 -0
- package/dist/default/CategoryBreadcrumbsBar.d.ts.map +1 -0
- package/dist/default/CategoryBreadcrumbsBar.js +35 -0
- package/dist/default/CategoryBreadcrumbsBar.js.map +1 -0
- package/dist/default/CategoryCarouselStrip.d.ts +22 -0
- package/dist/default/CategoryCarouselStrip.d.ts.map +1 -0
- package/dist/default/CategoryCarouselStrip.js +24 -0
- package/dist/default/CategoryCarouselStrip.js.map +1 -0
- package/dist/default/CategoryFeatureList.d.ts +23 -0
- package/dist/default/CategoryFeatureList.d.ts.map +1 -0
- package/dist/default/CategoryFeatureList.js +28 -0
- package/dist/default/CategoryFeatureList.js.map +1 -0
- package/dist/default/CategoryPage.d.ts +43 -0
- package/dist/default/CategoryPage.d.ts.map +1 -0
- package/dist/default/CategoryPage.js +21 -0
- package/dist/default/CategoryPage.js.map +1 -0
- package/dist/default/CategoryPickerField.d.ts +26 -0
- package/dist/default/CategoryPickerField.d.ts.map +1 -0
- package/dist/default/CategoryPickerField.js +40 -0
- package/dist/default/CategoryPickerField.js.map +1 -0
- package/dist/default/CategoryTreePane.d.ts +28 -0
- package/dist/default/CategoryTreePane.d.ts.map +1 -0
- package/dist/default/CategoryTreePane.js +25 -0
- package/dist/default/CategoryTreePane.js.map +1 -0
- package/dist/default/ErrorAlert.d.ts +9 -0
- package/dist/default/ErrorAlert.d.ts.map +1 -0
- package/dist/default/ErrorAlert.js +27 -0
- package/dist/default/ErrorAlert.js.map +1 -0
- package/dist/default/index.d.ts +37 -0
- package/dist/default/index.d.ts.map +1 -0
- package/dist/default/index.js +28 -0
- package/dist/default/index.js.map +1 -0
- package/dist/default/theme.d.ts +25 -0
- package/dist/default/theme.d.ts.map +1 -0
- package/dist/default/theme.js +40 -0
- package/dist/default/theme.js.map +1 -0
- package/dist/default/types.d.ts +12 -0
- package/dist/default/types.d.ts.map +1 -0
- package/dist/default/types.js +2 -0
- package/dist/default/types.js.map +1 -0
- package/dist/headless/CategoriesProvider.d.ts +19 -0
- package/dist/headless/CategoriesProvider.d.ts.map +1 -0
- package/dist/headless/CategoriesProvider.js +15 -0
- package/dist/headless/CategoriesProvider.js.map +1 -0
- package/dist/headless/CategoryBreadcrumbs.d.ts +40 -0
- package/dist/headless/CategoryBreadcrumbs.d.ts.map +1 -0
- package/dist/headless/CategoryBreadcrumbs.js +42 -0
- package/dist/headless/CategoryBreadcrumbs.js.map +1 -0
- package/dist/headless/CategoryCarousel.d.ts +48 -0
- package/dist/headless/CategoryCarousel.d.ts.map +1 -0
- package/dist/headless/CategoryCarousel.js +34 -0
- package/dist/headless/CategoryCarousel.js.map +1 -0
- package/dist/headless/CategoryFeatures.d.ts +67 -0
- package/dist/headless/CategoryFeatures.d.ts.map +1 -0
- package/dist/headless/CategoryFeatures.js +46 -0
- package/dist/headless/CategoryFeatures.js.map +1 -0
- package/dist/headless/CategoryPicker.d.ts +69 -0
- package/dist/headless/CategoryPicker.d.ts.map +1 -0
- package/dist/headless/CategoryPicker.js +86 -0
- package/dist/headless/CategoryPicker.js.map +1 -0
- package/dist/headless/CategoryTree.d.ts +55 -0
- package/dist/headless/CategoryTree.d.ts.map +1 -0
- package/dist/headless/CategoryTree.js +51 -0
- package/dist/headless/CategoryTree.js.map +1 -0
- package/dist/i18n/errorsMap.d.ts +22 -0
- package/dist/i18n/errorsMap.d.ts.map +1 -0
- package/dist/i18n/errorsMap.js +31 -0
- package/dist/i18n/errorsMap.js.map +1 -0
- package/dist/i18n/es.d.ts +25 -0
- package/dist/i18n/es.d.ts.map +1 -0
- package/dist/i18n/es.js +74 -0
- package/dist/i18n/es.js.map +1 -0
- package/dist/i18n/generated/errors.es.gen.d.ts +16 -0
- package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
- package/dist/i18n/generated/errors.es.gen.js +58 -0
- package/dist/i18n/generated/errors.es.gen.js.map +1 -0
- package/dist/i18n/generated/errors.gen.d.ts +407 -0
- package/dist/i18n/generated/errors.gen.d.ts.map +1 -0
- package/dist/i18n/generated/errors.gen.js +207 -0
- package/dist/i18n/generated/errors.gen.js.map +1 -0
- package/dist/i18n/generated/errors.ru.gen.d.ts +16 -0
- package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -0
- package/dist/i18n/generated/errors.ru.gen.js +58 -0
- package/dist/i18n/generated/errors.ru.gen.js.map +1 -0
- package/dist/i18n/keys.d.ts +89 -0
- package/dist/i18n/keys.d.ts.map +1 -0
- package/dist/i18n/keys.js +134 -0
- package/dist/i18n/keys.js.map +1 -0
- package/dist/i18n/ru.d.ts +41 -0
- package/dist/i18n/ru.d.ts.map +1 -0
- package/dist/i18n/ru.js +90 -0
- package/dist/i18n/ru.js.map +1 -0
- package/dist/index.d.ts +88 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +78 -0
- package/dist/index.js.map +1 -0
- package/dist/model/catalogStore.d.ts +23 -0
- package/dist/model/catalogStore.d.ts.map +1 -0
- package/dist/model/catalogStore.js +85 -0
- package/dist/model/catalogStore.js.map +1 -0
- package/dist/model/catalogSync.d.ts +49 -0
- package/dist/model/catalogSync.d.ts.map +1 -0
- package/dist/model/catalogSync.js +64 -0
- package/dist/model/catalogSync.js.map +1 -0
- package/dist/model/context.d.ts +11 -0
- package/dist/model/context.d.ts.map +1 -0
- package/dist/model/context.js +16 -0
- package/dist/model/context.js.map +1 -0
- package/dist/model/queries.d.ts +124 -0
- package/dist/model/queries.d.ts.map +1 -0
- package/dist/model/queries.js +147 -0
- package/dist/model/queries.js.map +1 -0
- package/dist/model/queryKeys.d.ts +30 -0
- package/dist/model/queryKeys.d.ts.map +1 -0
- package/dist/model/queryKeys.js +16 -0
- package/dist/model/queryKeys.js.map +1 -0
- package/dist/model/runtime.d.ts +31 -0
- package/dist/model/runtime.d.ts.map +1 -0
- package/dist/model/runtime.js +6 -0
- package/dist/model/runtime.js.map +1 -0
- package/dist/nav/manifest.d.ts +31 -0
- package/dist/nav/manifest.d.ts.map +1 -0
- package/dist/nav/manifest.js +37 -0
- package/dist/nav/manifest.js.map +1 -0
- package/llms.txt +125 -0
- package/manifest.json +918 -0
- package/nav-manifest.json +44 -0
- package/package.json +119 -0
- package/src/analytics/generated/events.json +7 -0
- package/src/api/categoriesApi.ts +179 -0
- package/src/api/generated/schema.ts +2323 -0
- package/src/api/types.ts +99 -0
- package/src/catalog/labels.ts +129 -0
- package/src/catalog/pks.ts +35 -0
- package/src/catalog/sync.ts +169 -0
- package/src/catalog/tree.ts +242 -0
- package/src/default/CatalogPage.tsx +40 -0
- package/src/default/CategoryBreadcrumbsBar.tsx +93 -0
- package/src/default/CategoryCarouselStrip.tsx +102 -0
- package/src/default/CategoryFeatureList.tsx +125 -0
- package/src/default/CategoryPage.tsx +114 -0
- package/src/default/CategoryPickerField.tsx +173 -0
- package/src/default/CategoryTreePane.tsx +134 -0
- package/src/default/ErrorAlert.tsx +46 -0
- package/src/default/index.ts +36 -0
- package/src/default/theme.tsx +67 -0
- package/src/default/types.ts +12 -0
- package/src/headless/CategoriesProvider.tsx +20 -0
- package/src/headless/CategoryBreadcrumbs.tsx +78 -0
- package/src/headless/CategoryCarousel.tsx +80 -0
- package/src/headless/CategoryFeatures.tsx +100 -0
- package/src/headless/CategoryPicker.tsx +173 -0
- package/src/headless/CategoryTree.tsx +115 -0
- package/src/i18n/errorsMap.ts +46 -0
- package/src/i18n/es.ts +92 -0
- package/src/i18n/generated/errors.es.gen.ts +64 -0
- package/src/i18n/generated/errors.gen.ts +238 -0
- package/src/i18n/generated/errors.json +495 -0
- package/src/i18n/generated/errors.ru.gen.ts +64 -0
- package/src/i18n/keys.ts +156 -0
- package/src/i18n/ru.ts +110 -0
- package/src/index.ts +191 -0
- package/src/model/catalogStore.ts +102 -0
- package/src/model/catalogSync.ts +115 -0
- package/src/model/context.tsx +28 -0
- package/src/model/queries.ts +226 -0
- package/src/model/queryKeys.ts +50 -0
- package/src/model/runtime.ts +39 -0
- package/src/nav/manifest.ts +66 -0
- package/tsconfig.json +26 -0
|
@@ -0,0 +1,207 @@
|
|
|
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 CATEGORIES_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 CATEGORIES_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.categories_config_required": { status: 400, params: [], remediation: "fix_input", en: "A config object is required" },
|
|
14
|
+
"error.400.categories_database_error": { status: 400, params: [], remediation: "fix_input", en: "Database error while applying changes" },
|
|
15
|
+
"error.400.categories_duplicate_slug": { status: 400, params: ["slug"], remediation: "fix_input", en: "A feature with slug '{slug}' already exists" },
|
|
16
|
+
"error.400.categories_expected_list": { status: 400, params: [], remediation: "fix_input", en: "Expected a list of objects" },
|
|
17
|
+
"error.400.categories_feature_editor_invalid": { status: 400, params: ["reason"], remediation: "fix_input", en: "Invalid feature editor request: {reason}" },
|
|
18
|
+
"error.400.categories_invalid_conversion": { status: 400, params: [], remediation: "fix_input", en: "Invalid type conversion (only select<->string is supported)" },
|
|
19
|
+
"error.400.categories_not_deleted": { status: 400, params: [], remediation: "fix_input", en: "Category is not deleted" },
|
|
20
|
+
"error.400.description_too_long": { status: 400, params: ["max_length"], remediation: "fix_input", en: "Description must be at most {max_length} characters" },
|
|
21
|
+
"error.400.description_too_short": { status: 400, params: ["min_length"], remediation: "fix_input", en: "Description must be at least {min_length} characters" },
|
|
22
|
+
"error.400.expected_list": { status: 400, params: [], remediation: "fix_input", en: "Expected a list of items" },
|
|
23
|
+
"error.400.feature_above_maximum": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is above maximum for {feature}" },
|
|
24
|
+
"error.400.feature_below_minimum": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is below minimum for {feature}" },
|
|
25
|
+
"error.400.feature_invalid_config": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid config for {feature}" },
|
|
26
|
+
"error.400.feature_invalid_format": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid format for {feature}" },
|
|
27
|
+
"error.400.feature_invalid_type": { status: 400, params: ["feature"], remediation: "fix_input", en: "Invalid type for {feature}" },
|
|
28
|
+
"error.400.feature_mandatory_missing": { status: 400, params: ["feature"], remediation: "fix_input", en: "Mandatory feature {feature} is required" },
|
|
29
|
+
"error.400.feature_not_allowed": { status: 400, params: ["feature"], remediation: "fix_input", en: "Feature {feature} is not allowed here" },
|
|
30
|
+
"error.400.feature_not_in_options": { status: 400, params: ["feature"], remediation: "fix_input", en: "Value is not in allowed options for {feature}" },
|
|
31
|
+
"error.400.feature_unknown": { status: 400, params: ["feature"], remediation: "fix_input", en: "Unknown feature {feature}" },
|
|
32
|
+
"error.400.feature_unknown_type": { status: 400, params: ["feature"], remediation: "fix_input", en: "Unknown feature type for {feature}" },
|
|
33
|
+
"error.400.field.blank": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} may not be blank" },
|
|
34
|
+
"error.400.field.does_not_exist": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} does not exist" },
|
|
35
|
+
"error.400.field.invalid": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is invalid" },
|
|
36
|
+
"error.400.field.invalid_choice": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is not a valid choice" },
|
|
37
|
+
"error.400.field.max_length": { status: 400, params: ["field", "max_length"], remediation: "fix_input", en: "{field} must be at most {max_length} characters" },
|
|
38
|
+
"error.400.field.max_value": { status: 400, params: ["field", "max_value"], remediation: "fix_input", en: "{field} must be at most {max_value}" },
|
|
39
|
+
"error.400.field.min_length": { status: 400, params: ["field", "min_length"], remediation: "fix_input", en: "{field} must be at least {min_length} characters" },
|
|
40
|
+
"error.400.field.min_value": { status: 400, params: ["field", "min_value"], remediation: "fix_input", en: "{field} must be at least {min_value}" },
|
|
41
|
+
"error.400.field.null": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} may not be null" },
|
|
42
|
+
"error.400.field.required": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} is required" },
|
|
43
|
+
"error.400.field.unique": { status: 400, params: ["field"], remediation: "fix_input", en: "{field} must be unique" },
|
|
44
|
+
"error.400.invalid_ad_id": { status: 400, params: [], remediation: "fix_input", en: "Invalid advertisement ID" },
|
|
45
|
+
"error.400.validation_error": { status: 400, params: [], remediation: "fix_input", en: "Validation error" },
|
|
46
|
+
"error.400.verification_failed": { status: 400, params: [], remediation: "verify", en: "Verification failed" },
|
|
47
|
+
"error.400.verification_invalid_factor": { status: 400, params: [], remediation: "verify", en: "This verification factor is not available" },
|
|
48
|
+
"error.401.unauthorized": { status: 401, params: [], remediation: "reauthenticate", en: "Authentication required" },
|
|
49
|
+
"error.402.payment_required": { status: 402, params: [], remediation: "retry", en: "Payment required" },
|
|
50
|
+
"error.403.forbidden": { status: 403, params: [], remediation: "retry", en: "You do not have permission to perform this action" },
|
|
51
|
+
"error.403.network_blocked": { status: 403, params: [], remediation: "contact_support", en: "Requests from this network are not allowed" },
|
|
52
|
+
"error.403.verification_enrollment_required": { status: 403, params: [], remediation: "verify", en: "Verification factor enrollment required" },
|
|
53
|
+
"error.403.verification_required": { status: 403, params: [], remediation: "verify", en: "Additional verification required" },
|
|
54
|
+
"error.404.ad_not_found": { status: 404, params: [], remediation: "retry", en: "Listing not found" },
|
|
55
|
+
"error.404.not_found": { status: 404, params: [], remediation: "retry", en: "Requested resource not found" },
|
|
56
|
+
"error.404.verification_challenge_not_found": { status: 404, params: [], remediation: "verify", en: "Verification challenge not found or expired" },
|
|
57
|
+
"error.405.method_not_allowed": { status: 405, params: [], remediation: "retry", en: "Method not allowed" },
|
|
58
|
+
"error.406.not_acceptable": { status: 406, params: [], remediation: "retry", en: "Not acceptable" },
|
|
59
|
+
"error.408.request_timeout": { status: 408, params: [], remediation: "retry", en: "Request timeout" },
|
|
60
|
+
"error.409.categories_feature_editor_conflict": { status: 409, params: ["expected", "actual"], remediation: "fix_input", en: "Category was modified by another editor (expected revision {expected}, now {actual}); reload and retry" },
|
|
61
|
+
"error.409.conflict": { status: 409, params: [], remediation: "fix_input", en: "Resource already exists" },
|
|
62
|
+
"error.410.gone": { status: 410, params: [], remediation: "retry", en: "Resource has been permanently removed" },
|
|
63
|
+
"error.413.payload_too_large": { status: 413, params: [], remediation: "retry", en: "Request body is too large" },
|
|
64
|
+
"error.415.unsupported_media_type": { status: 415, params: [], remediation: "retry", en: "Unsupported media type" },
|
|
65
|
+
"error.422.unprocessable_entity": { status: 422, params: [], remediation: "wait_and_retry", en: "Unprocessable entity" },
|
|
66
|
+
"error.423.locked": { status: 423, params: [], remediation: "wait_and_retry", en: "Resource is locked" },
|
|
67
|
+
"error.423.verification_locked": { status: 423, params: [], remediation: "wait_and_retry", en: "Too many failed attempts — verification locked" },
|
|
68
|
+
"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." },
|
|
69
|
+
"error.429.too_many_requests": { status: 429, params: [], remediation: "wait_and_retry", en: "Too many requests. Please try again later." },
|
|
70
|
+
"error.500.internal": { status: 500, params: [], remediation: "contact_support", en: "Something went wrong" },
|
|
71
|
+
"error.503.mandate_unavailable": { status: 503, params: [], remediation: "retry", en: "Cannot verify workspace mandate right now" },
|
|
72
|
+
};
|
|
73
|
+
/** Every backend error code this module can surface, sorted. */
|
|
74
|
+
export const CATEGORIES_ERROR_CODES = [
|
|
75
|
+
"error.400.bad_request",
|
|
76
|
+
"error.400.captcha_invalid",
|
|
77
|
+
"error.400.captcha_required",
|
|
78
|
+
"error.400.categories_config_required",
|
|
79
|
+
"error.400.categories_database_error",
|
|
80
|
+
"error.400.categories_duplicate_slug",
|
|
81
|
+
"error.400.categories_expected_list",
|
|
82
|
+
"error.400.categories_feature_editor_invalid",
|
|
83
|
+
"error.400.categories_invalid_conversion",
|
|
84
|
+
"error.400.categories_not_deleted",
|
|
85
|
+
"error.400.description_too_long",
|
|
86
|
+
"error.400.description_too_short",
|
|
87
|
+
"error.400.expected_list",
|
|
88
|
+
"error.400.feature_above_maximum",
|
|
89
|
+
"error.400.feature_below_minimum",
|
|
90
|
+
"error.400.feature_invalid_config",
|
|
91
|
+
"error.400.feature_invalid_format",
|
|
92
|
+
"error.400.feature_invalid_type",
|
|
93
|
+
"error.400.feature_mandatory_missing",
|
|
94
|
+
"error.400.feature_not_allowed",
|
|
95
|
+
"error.400.feature_not_in_options",
|
|
96
|
+
"error.400.feature_unknown",
|
|
97
|
+
"error.400.feature_unknown_type",
|
|
98
|
+
"error.400.field.blank",
|
|
99
|
+
"error.400.field.does_not_exist",
|
|
100
|
+
"error.400.field.invalid",
|
|
101
|
+
"error.400.field.invalid_choice",
|
|
102
|
+
"error.400.field.max_length",
|
|
103
|
+
"error.400.field.max_value",
|
|
104
|
+
"error.400.field.min_length",
|
|
105
|
+
"error.400.field.min_value",
|
|
106
|
+
"error.400.field.null",
|
|
107
|
+
"error.400.field.required",
|
|
108
|
+
"error.400.field.unique",
|
|
109
|
+
"error.400.invalid_ad_id",
|
|
110
|
+
"error.400.validation_error",
|
|
111
|
+
"error.400.verification_failed",
|
|
112
|
+
"error.400.verification_invalid_factor",
|
|
113
|
+
"error.401.unauthorized",
|
|
114
|
+
"error.402.payment_required",
|
|
115
|
+
"error.403.forbidden",
|
|
116
|
+
"error.403.network_blocked",
|
|
117
|
+
"error.403.verification_enrollment_required",
|
|
118
|
+
"error.403.verification_required",
|
|
119
|
+
"error.404.ad_not_found",
|
|
120
|
+
"error.404.not_found",
|
|
121
|
+
"error.404.verification_challenge_not_found",
|
|
122
|
+
"error.405.method_not_allowed",
|
|
123
|
+
"error.406.not_acceptable",
|
|
124
|
+
"error.408.request_timeout",
|
|
125
|
+
"error.409.categories_feature_editor_conflict",
|
|
126
|
+
"error.409.conflict",
|
|
127
|
+
"error.410.gone",
|
|
128
|
+
"error.413.payload_too_large",
|
|
129
|
+
"error.415.unsupported_media_type",
|
|
130
|
+
"error.422.unprocessable_entity",
|
|
131
|
+
"error.423.locked",
|
|
132
|
+
"error.423.verification_locked",
|
|
133
|
+
"error.429.rate_limit",
|
|
134
|
+
"error.429.too_many_requests",
|
|
135
|
+
"error.500.internal",
|
|
136
|
+
"error.503.mandate_unavailable",
|
|
137
|
+
];
|
|
138
|
+
/**
|
|
139
|
+
* English fallback bundle — one string per backend key, so a `StapelApiError.code`
|
|
140
|
+
* never renders as a raw key. Merged UNDER the hand-polished UI copy in
|
|
141
|
+
* {@link authI18nBundleEn} (polish wins; this guarantees coverage).
|
|
142
|
+
*/
|
|
143
|
+
export const categoriesErrorBundleEn = {
|
|
144
|
+
"error.400.bad_request": "Bad request",
|
|
145
|
+
"error.400.captcha_invalid": "Captcha verification failed. Please try again.",
|
|
146
|
+
"error.400.captcha_required": "Captcha token is required.",
|
|
147
|
+
"error.400.categories_config_required": "A config object is required",
|
|
148
|
+
"error.400.categories_database_error": "Database error while applying changes",
|
|
149
|
+
"error.400.categories_duplicate_slug": "A feature with slug '{slug}' already exists",
|
|
150
|
+
"error.400.categories_expected_list": "Expected a list of objects",
|
|
151
|
+
"error.400.categories_feature_editor_invalid": "Invalid feature editor request: {reason}",
|
|
152
|
+
"error.400.categories_invalid_conversion": "Invalid type conversion (only select<->string is supported)",
|
|
153
|
+
"error.400.categories_not_deleted": "Category is not deleted",
|
|
154
|
+
"error.400.description_too_long": "Description must be at most {max_length} characters",
|
|
155
|
+
"error.400.description_too_short": "Description must be at least {min_length} characters",
|
|
156
|
+
"error.400.expected_list": "Expected a list of items",
|
|
157
|
+
"error.400.feature_above_maximum": "Value is above maximum for {feature}",
|
|
158
|
+
"error.400.feature_below_minimum": "Value is below minimum for {feature}",
|
|
159
|
+
"error.400.feature_invalid_config": "Invalid config for {feature}",
|
|
160
|
+
"error.400.feature_invalid_format": "Invalid format for {feature}",
|
|
161
|
+
"error.400.feature_invalid_type": "Invalid type for {feature}",
|
|
162
|
+
"error.400.feature_mandatory_missing": "Mandatory feature {feature} is required",
|
|
163
|
+
"error.400.feature_not_allowed": "Feature {feature} is not allowed here",
|
|
164
|
+
"error.400.feature_not_in_options": "Value is not in allowed options for {feature}",
|
|
165
|
+
"error.400.feature_unknown": "Unknown feature {feature}",
|
|
166
|
+
"error.400.feature_unknown_type": "Unknown feature type for {feature}",
|
|
167
|
+
"error.400.field.blank": "{field} may not be blank",
|
|
168
|
+
"error.400.field.does_not_exist": "{field} does not exist",
|
|
169
|
+
"error.400.field.invalid": "{field} is invalid",
|
|
170
|
+
"error.400.field.invalid_choice": "{field} is not a valid choice",
|
|
171
|
+
"error.400.field.max_length": "{field} must be at most {max_length} characters",
|
|
172
|
+
"error.400.field.max_value": "{field} must be at most {max_value}",
|
|
173
|
+
"error.400.field.min_length": "{field} must be at least {min_length} characters",
|
|
174
|
+
"error.400.field.min_value": "{field} must be at least {min_value}",
|
|
175
|
+
"error.400.field.null": "{field} may not be null",
|
|
176
|
+
"error.400.field.required": "{field} is required",
|
|
177
|
+
"error.400.field.unique": "{field} must be unique",
|
|
178
|
+
"error.400.invalid_ad_id": "Invalid advertisement ID",
|
|
179
|
+
"error.400.validation_error": "Validation error",
|
|
180
|
+
"error.400.verification_failed": "Verification failed",
|
|
181
|
+
"error.400.verification_invalid_factor": "This verification factor is not available",
|
|
182
|
+
"error.401.unauthorized": "Authentication required",
|
|
183
|
+
"error.402.payment_required": "Payment required",
|
|
184
|
+
"error.403.forbidden": "You do not have permission to perform this action",
|
|
185
|
+
"error.403.network_blocked": "Requests from this network are not allowed",
|
|
186
|
+
"error.403.verification_enrollment_required": "Verification factor enrollment required",
|
|
187
|
+
"error.403.verification_required": "Additional verification required",
|
|
188
|
+
"error.404.ad_not_found": "Listing not found",
|
|
189
|
+
"error.404.not_found": "Requested resource not found",
|
|
190
|
+
"error.404.verification_challenge_not_found": "Verification challenge not found or expired",
|
|
191
|
+
"error.405.method_not_allowed": "Method not allowed",
|
|
192
|
+
"error.406.not_acceptable": "Not acceptable",
|
|
193
|
+
"error.408.request_timeout": "Request timeout",
|
|
194
|
+
"error.409.categories_feature_editor_conflict": "Category was modified by another editor (expected revision {expected}, now {actual}); reload and retry",
|
|
195
|
+
"error.409.conflict": "Resource already exists",
|
|
196
|
+
"error.410.gone": "Resource has been permanently removed",
|
|
197
|
+
"error.413.payload_too_large": "Request body is too large",
|
|
198
|
+
"error.415.unsupported_media_type": "Unsupported media type",
|
|
199
|
+
"error.422.unprocessable_entity": "Unprocessable entity",
|
|
200
|
+
"error.423.locked": "Resource is locked",
|
|
201
|
+
"error.423.verification_locked": "Too many failed attempts — verification locked",
|
|
202
|
+
"error.429.rate_limit": "Too many attempts. Try again in {retry_after_minutes} minutes.",
|
|
203
|
+
"error.429.too_many_requests": "Too many requests. Please try again later.",
|
|
204
|
+
"error.500.internal": "Something went wrong",
|
|
205
|
+
"error.503.mandate_unavailable": "Cannot verify workspace mandate right now",
|
|
206
|
+
};
|
|
207
|
+
//# 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 { CategoriesErrorCode } 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: 20 key(s) owned by
|
|
6
|
+
* stapel_attributes, stapel_categories 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 categoriesErrorBundleRu: Partial<Record<CategoriesErrorCode, 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,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAE3D;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,uBAAuB,EAAE,OAAO,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,CA2ChF,CAAC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `ru` texts for the backend error codes this catalog carries.
|
|
3
|
+
*
|
|
4
|
+
* PARTIAL, and deliberately typed to say so: 20 key(s) owned by
|
|
5
|
+
* stapel_attributes, stapel_categories 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 categoriesErrorBundleRu = {
|
|
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.invalid_ad_id": "Недопустимый идентификатор объявления",
|
|
31
|
+
"error.400.validation_error": "Ошибка валидации",
|
|
32
|
+
"error.400.verification_failed": "Проверка не пройдена",
|
|
33
|
+
"error.400.verification_invalid_factor": "Этот способ подтверждения недоступен",
|
|
34
|
+
"error.401.unauthorized": "Требуется аутентификация",
|
|
35
|
+
"error.402.payment_required": "Требуется оплата",
|
|
36
|
+
"error.403.forbidden": "У вас нет прав для выполнения этого действия",
|
|
37
|
+
"error.403.network_blocked": "Запросы из этой сети не разрешены.",
|
|
38
|
+
"error.403.verification_enrollment_required": "Требуется регистрация фактора подтверждения.",
|
|
39
|
+
"error.403.verification_required": "Требуется дополнительная проверка",
|
|
40
|
+
"error.404.ad_not_found": "Объявление не найдено",
|
|
41
|
+
"error.404.not_found": "Запрошенный ресурс не найден",
|
|
42
|
+
"error.404.verification_challenge_not_found": "Запрос на подтверждение не найден или истёк",
|
|
43
|
+
"error.405.method_not_allowed": "Метод не разрешён",
|
|
44
|
+
"error.406.not_acceptable": "Недопустимый формат ответа",
|
|
45
|
+
"error.408.request_timeout": "Время ожидания запроса истекло",
|
|
46
|
+
"error.409.conflict": "Ресурс уже существует",
|
|
47
|
+
"error.410.gone": "Ресурс был безвозвратно удалён",
|
|
48
|
+
"error.413.payload_too_large": "Тело запроса слишком большое",
|
|
49
|
+
"error.415.unsupported_media_type": "Неподдерживаемый тип данных",
|
|
50
|
+
"error.422.unprocessable_entity": "Невозможно обработать данные запроса",
|
|
51
|
+
"error.423.locked": "Ресурс заблокирован",
|
|
52
|
+
"error.423.verification_locked": "Слишком много неудачных попыток — подтверждение заблокировано",
|
|
53
|
+
"error.429.rate_limit": "Слишком много попыток. Повторите попытку через {retry_after_minutes} мин.",
|
|
54
|
+
"error.429.too_many_requests": "Слишком много запросов. Пожалуйста, повторите попытку позже.",
|
|
55
|
+
"error.500.internal": "Что-то пошло не так",
|
|
56
|
+
"error.503.mandate_unavailable": "Не удалось проверить доступ к рабочему пространству",
|
|
57
|
+
};
|
|
58
|
+
//# 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,uBAAuB,GAAiD;IACnF,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,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,oCAAoC;IACjE,4CAA4C,EAAE,8CAA8C;IAC5F,iCAAiC,EAAE,mCAAmC;IACtE,wBAAwB,EAAE,uBAAuB;IACjD,qBAAqB,EAAE,8BAA8B;IACrD,4CAA4C,EAAE,6CAA6C;IAC3F,8BAA8B,EAAE,mBAAmB;IACnD,0BAA0B,EAAE,4BAA4B;IACxD,2BAA2B,EAAE,gCAAgC;IAC7D,oBAAoB,EAAE,uBAAuB;IAC7C,gBAAgB,EAAE,gCAAgC;IAClD,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,+BAA+B,EAAE,qDAAqD;CACvF,CAAC"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import type { I18nEngine } from "@stapel/core";
|
|
2
|
+
/**
|
|
3
|
+
* categories-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 62 backend error codes (generated) plus the pair's
|
|
8
|
+
* own UI keys. All UI keys live under the `categories.` namespace.
|
|
9
|
+
*
|
|
10
|
+
* ── WHAT IS DELIBERATELY NOT IN THIS FILE ──────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* **A category name.** `category.electronics` is a key, and it is a key this
|
|
13
|
+
* library must never carry a text for: the catalogue is a deployment's
|
|
14
|
+
* content, not a library's chrome, and no two marketplaces have the same tree.
|
|
15
|
+
* `catalog/labels.ts` explains the mechanism in full — names arrive as keys
|
|
16
|
+
* because no serializer runs the module's `DISPLAY_TRANSLATOR` seam — and the
|
|
17
|
+
* pair's answer is to hand the key to the HOST's engine, whose bundle is where
|
|
18
|
+
* a deployment's catalogue copy belongs. When the key does not resolve the key
|
|
19
|
+
* is shown, on purpose: a visible `category.electronics` gets fixed, while a
|
|
20
|
+
* prettified "Electronics" ships for a year in the wrong language.
|
|
21
|
+
*
|
|
22
|
+
* The same goes for a feature's name and its option labels.
|
|
23
|
+
*
|
|
24
|
+
* **The twelve `error.400.feature_*` / `description_too_*` keys.** They are
|
|
25
|
+
* owned by `stapel_attributes` and translated by `@stapel/attributes-react`
|
|
26
|
+
* (`/i18n/ru`, `/i18n/es`) — the package that also draws and validates those
|
|
27
|
+
* values. Restating them here would give one refusal two sentences, which is
|
|
28
|
+
* the exact thing §13.2's note 3 closed. A host registers both bundles; the
|
|
29
|
+
* suite proves the union covers the whole registry.
|
|
30
|
+
*/
|
|
31
|
+
export declare const CATEGORIES_I18N_KEYS: {
|
|
32
|
+
readonly unknownError: "categories.error.unknown";
|
|
33
|
+
readonly catalogTitle: "categories.catalog.title";
|
|
34
|
+
readonly catalogLoading: "categories.catalog.loading";
|
|
35
|
+
readonly catalogLoadFailed: "categories.catalog.load_failed";
|
|
36
|
+
readonly catalogEmpty: "categories.catalog.empty";
|
|
37
|
+
readonly catalogRetry: "categories.catalog.retry";
|
|
38
|
+
/** The sync walk hit its page budget — the tree on screen is incomplete. */
|
|
39
|
+
readonly catalogTruncated: "categories.catalog.truncated";
|
|
40
|
+
readonly catalogRefreshing: "categories.catalog.refreshing";
|
|
41
|
+
readonly catalogAsOf: "categories.catalog.as_of";
|
|
42
|
+
readonly categoryTitle: "categories.category.title";
|
|
43
|
+
readonly categoryUnknownSlug: "categories.category.unknown_slug";
|
|
44
|
+
readonly categorySubcategories: "categories.category.subcategories";
|
|
45
|
+
/** A leaf: no sub-categories, and that is not an error. */
|
|
46
|
+
readonly categoryNoSubcategories: "categories.category.no_subcategories";
|
|
47
|
+
readonly categoryOpen: "categories.category.open";
|
|
48
|
+
readonly breadcrumbsRoot: "categories.breadcrumbs.root";
|
|
49
|
+
readonly breadcrumbsLabel: "categories.breadcrumbs.label";
|
|
50
|
+
readonly carouselTitle: "categories.carousel.title";
|
|
51
|
+
readonly carouselLoading: "categories.carousel.loading";
|
|
52
|
+
readonly carouselLoadFailed: "categories.carousel.load_failed";
|
|
53
|
+
readonly carouselEmpty: "categories.carousel.empty";
|
|
54
|
+
readonly pickerTitle: "categories.picker.title";
|
|
55
|
+
readonly pickerSearch: "categories.picker.search";
|
|
56
|
+
readonly pickerLoading: "categories.picker.loading";
|
|
57
|
+
readonly pickerLoadFailed: "categories.picker.load_failed";
|
|
58
|
+
readonly pickerNoMatches: "categories.picker.no_matches";
|
|
59
|
+
readonly pickerUp: "categories.picker.up";
|
|
60
|
+
readonly pickerSelected: "categories.picker.selected";
|
|
61
|
+
readonly pickerBlockedNothingSelected: "categories.picker.blocked.nothing_selected";
|
|
62
|
+
readonly pickerBlockedNotALeaf: "categories.picker.blocked.not_a_leaf";
|
|
63
|
+
readonly featuresTitle: "categories.features.title";
|
|
64
|
+
readonly featuresLoading: "categories.features.loading";
|
|
65
|
+
readonly featuresLoadFailed: "categories.features.load_failed";
|
|
66
|
+
readonly featuresEmpty: "categories.features.empty";
|
|
67
|
+
readonly featuresMandatory: "categories.features.mandatory";
|
|
68
|
+
readonly featuresType: "categories.features.type";
|
|
69
|
+
/** A feature whose `config` carries no `type` at all. */
|
|
70
|
+
readonly featuresUntyped: "categories.features.untyped";
|
|
71
|
+
};
|
|
72
|
+
export type CategoriesI18nKey = (typeof CATEGORIES_I18N_KEYS)[keyof typeof CATEGORIES_I18N_KEYS];
|
|
73
|
+
/**
|
|
74
|
+
* English fallback bundle for categories-react UI keys + backend error codes.
|
|
75
|
+
* The generated backend texts are spread FIRST so coverage of the error
|
|
76
|
+
* registry is by construction; the pair's own copy follows.
|
|
77
|
+
*/
|
|
78
|
+
export declare const categoriesI18nBundleEn: Record<string, string>;
|
|
79
|
+
/**
|
|
80
|
+
* Register the English bundle into a core i18n engine. Locale bundles ship as
|
|
81
|
+
* opt-in subpaths (`@stapel/categories-react/i18n/ru`, `…/es`) so a host that
|
|
82
|
+
* needs only English never carries them.
|
|
83
|
+
*
|
|
84
|
+
* A host that renders a category's feature schema also registers
|
|
85
|
+
* `@stapel/attributes-react`'s bundles — that package owns the twelve
|
|
86
|
+
* `stapel_attributes` error keys in every locale.
|
|
87
|
+
*/
|
|
88
|
+
export declare function registerCategoriesI18n(i18n: I18nEngine): void;
|
|
89
|
+
//# 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,EAAkB,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,eAAO,MAAM,oBAAoB;;;;;;;IAS/B,4EAA4E;;;;;;;IAS5E,2DAA2D;;;;;;;;;;;;;;;;;;;;;;;;IAgC3D,yDAAyD;;CAEjD,CAAC;AAEX,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,oBAAoB,CAAC,CAAC,MAAM,OAAO,oBAAoB,CAAC,CAAC;AAEnE;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAgDzD,CAAC;AAEF;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,UAAU,GAAG,IAAI,CAE7D"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { categoriesErrorBundleEn } from "./generated/errors.gen.js";
|
|
2
|
+
/**
|
|
3
|
+
* categories-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 62 backend error codes (generated) plus the pair's
|
|
8
|
+
* own UI keys. All UI keys live under the `categories.` namespace.
|
|
9
|
+
*
|
|
10
|
+
* ── WHAT IS DELIBERATELY NOT IN THIS FILE ──────────────────────────────────
|
|
11
|
+
*
|
|
12
|
+
* **A category name.** `category.electronics` is a key, and it is a key this
|
|
13
|
+
* library must never carry a text for: the catalogue is a deployment's
|
|
14
|
+
* content, not a library's chrome, and no two marketplaces have the same tree.
|
|
15
|
+
* `catalog/labels.ts` explains the mechanism in full — names arrive as keys
|
|
16
|
+
* because no serializer runs the module's `DISPLAY_TRANSLATOR` seam — and the
|
|
17
|
+
* pair's answer is to hand the key to the HOST's engine, whose bundle is where
|
|
18
|
+
* a deployment's catalogue copy belongs. When the key does not resolve the key
|
|
19
|
+
* is shown, on purpose: a visible `category.electronics` gets fixed, while a
|
|
20
|
+
* prettified "Electronics" ships for a year in the wrong language.
|
|
21
|
+
*
|
|
22
|
+
* The same goes for a feature's name and its option labels.
|
|
23
|
+
*
|
|
24
|
+
* **The twelve `error.400.feature_*` / `description_too_*` keys.** They are
|
|
25
|
+
* owned by `stapel_attributes` and translated by `@stapel/attributes-react`
|
|
26
|
+
* (`/i18n/ru`, `/i18n/es`) — the package that also draws and validates those
|
|
27
|
+
* values. Restating them here would give one refusal two sentences, which is
|
|
28
|
+
* the exact thing §13.2's note 3 closed. A host registers both bundles; the
|
|
29
|
+
* suite proves the union covers the whole registry.
|
|
30
|
+
*/
|
|
31
|
+
export const CATEGORIES_I18N_KEYS = {
|
|
32
|
+
unknownError: "categories.error.unknown",
|
|
33
|
+
// ── catalog / tree ───────────────────────────────────────────────────────
|
|
34
|
+
catalogTitle: "categories.catalog.title",
|
|
35
|
+
catalogLoading: "categories.catalog.loading",
|
|
36
|
+
catalogLoadFailed: "categories.catalog.load_failed",
|
|
37
|
+
catalogEmpty: "categories.catalog.empty",
|
|
38
|
+
catalogRetry: "categories.catalog.retry",
|
|
39
|
+
/** The sync walk hit its page budget — the tree on screen is incomplete. */
|
|
40
|
+
catalogTruncated: "categories.catalog.truncated",
|
|
41
|
+
catalogRefreshing: "categories.catalog.refreshing",
|
|
42
|
+
catalogAsOf: "categories.catalog.as_of",
|
|
43
|
+
// ── one category ─────────────────────────────────────────────────────────
|
|
44
|
+
categoryTitle: "categories.category.title",
|
|
45
|
+
categoryUnknownSlug: "categories.category.unknown_slug",
|
|
46
|
+
categorySubcategories: "categories.category.subcategories",
|
|
47
|
+
/** A leaf: no sub-categories, and that is not an error. */
|
|
48
|
+
categoryNoSubcategories: "categories.category.no_subcategories",
|
|
49
|
+
categoryOpen: "categories.category.open",
|
|
50
|
+
// ── breadcrumbs ──────────────────────────────────────────────────────────
|
|
51
|
+
breadcrumbsRoot: "categories.breadcrumbs.root",
|
|
52
|
+
breadcrumbsLabel: "categories.breadcrumbs.label",
|
|
53
|
+
// ── carousel ─────────────────────────────────────────────────────────────
|
|
54
|
+
carouselTitle: "categories.carousel.title",
|
|
55
|
+
carouselLoading: "categories.carousel.loading",
|
|
56
|
+
carouselLoadFailed: "categories.carousel.load_failed",
|
|
57
|
+
carouselEmpty: "categories.carousel.empty",
|
|
58
|
+
// ── picker (the compose form's chooser) ──────────────────────────────────
|
|
59
|
+
pickerTitle: "categories.picker.title",
|
|
60
|
+
pickerSearch: "categories.picker.search",
|
|
61
|
+
pickerLoading: "categories.picker.loading",
|
|
62
|
+
pickerLoadFailed: "categories.picker.load_failed",
|
|
63
|
+
pickerNoMatches: "categories.picker.no_matches",
|
|
64
|
+
pickerUp: "categories.picker.up",
|
|
65
|
+
pickerSelected: "categories.picker.selected",
|
|
66
|
+
pickerBlockedNothingSelected: "categories.picker.blocked.nothing_selected",
|
|
67
|
+
pickerBlockedNotALeaf: "categories.picker.blocked.not_a_leaf",
|
|
68
|
+
// ── feature schema ───────────────────────────────────────────────────────
|
|
69
|
+
featuresTitle: "categories.features.title",
|
|
70
|
+
featuresLoading: "categories.features.loading",
|
|
71
|
+
featuresLoadFailed: "categories.features.load_failed",
|
|
72
|
+
featuresEmpty: "categories.features.empty",
|
|
73
|
+
featuresMandatory: "categories.features.mandatory",
|
|
74
|
+
featuresType: "categories.features.type",
|
|
75
|
+
/** A feature whose `config` carries no `type` at all. */
|
|
76
|
+
featuresUntyped: "categories.features.untyped",
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* English fallback bundle for categories-react UI keys + backend error codes.
|
|
80
|
+
* The generated backend texts are spread FIRST so coverage of the error
|
|
81
|
+
* registry is by construction; the pair's own copy follows.
|
|
82
|
+
*/
|
|
83
|
+
export const categoriesI18nBundleEn = {
|
|
84
|
+
...categoriesErrorBundleEn,
|
|
85
|
+
"categories.error.unknown": "Something went wrong with the catalogue",
|
|
86
|
+
"categories.catalog.title": "Catalogue",
|
|
87
|
+
"categories.catalog.loading": "Loading the catalogue…",
|
|
88
|
+
"categories.catalog.load_failed": "We could not load the catalogue",
|
|
89
|
+
"categories.catalog.empty": "This catalogue has no categories yet",
|
|
90
|
+
"categories.catalog.retry": "Try again",
|
|
91
|
+
"categories.catalog.truncated": "Only part of the catalogue was loaded. A category missing here has not been read yet — it has not been removed.",
|
|
92
|
+
"categories.catalog.refreshing": "Checking for catalogue changes…",
|
|
93
|
+
"categories.catalog.as_of": "Catalogue as of revision {revision}",
|
|
94
|
+
"categories.category.title": "Category",
|
|
95
|
+
"categories.category.unknown_slug": "There is no category at this address",
|
|
96
|
+
"categories.category.subcategories": "Subcategories",
|
|
97
|
+
"categories.category.no_subcategories": "This category has no subcategories",
|
|
98
|
+
"categories.category.open": "Open",
|
|
99
|
+
"categories.breadcrumbs.root": "All categories",
|
|
100
|
+
"categories.breadcrumbs.label": "You are here",
|
|
101
|
+
"categories.carousel.title": "Browse by category",
|
|
102
|
+
"categories.carousel.loading": "Loading categories…",
|
|
103
|
+
"categories.carousel.load_failed": "We could not load the categories",
|
|
104
|
+
"categories.carousel.empty": "No categories are featured right now",
|
|
105
|
+
"categories.picker.title": "Category",
|
|
106
|
+
"categories.picker.search": "Search categories",
|
|
107
|
+
"categories.picker.loading": "Loading categories…",
|
|
108
|
+
"categories.picker.load_failed": "We could not load the categories",
|
|
109
|
+
"categories.picker.no_matches": "No category matches that",
|
|
110
|
+
"categories.picker.up": "Up one level",
|
|
111
|
+
"categories.picker.selected": "Selected: {category}",
|
|
112
|
+
"categories.picker.blocked.nothing_selected": "Choose a category first",
|
|
113
|
+
"categories.picker.blocked.not_a_leaf": "Choose a more specific category — this one has subcategories, and the details asked for depend on which",
|
|
114
|
+
"categories.features.title": "Details in this category",
|
|
115
|
+
"categories.features.loading": "Loading the details…",
|
|
116
|
+
"categories.features.load_failed": "We could not load the details",
|
|
117
|
+
"categories.features.empty": "This category asks for no extra details",
|
|
118
|
+
"categories.features.mandatory": "Required",
|
|
119
|
+
"categories.features.type": "{type}",
|
|
120
|
+
"categories.features.untyped": "This detail has no type and cannot be shown",
|
|
121
|
+
};
|
|
122
|
+
/**
|
|
123
|
+
* Register the English bundle into a core i18n engine. Locale bundles ship as
|
|
124
|
+
* opt-in subpaths (`@stapel/categories-react/i18n/ru`, `…/es`) so a host that
|
|
125
|
+
* needs only English never carries them.
|
|
126
|
+
*
|
|
127
|
+
* A host that renders a category's feature schema also registers
|
|
128
|
+
* `@stapel/attributes-react`'s bundles — that package owns the twelve
|
|
129
|
+
* `stapel_attributes` error keys in every locale.
|
|
130
|
+
*/
|
|
131
|
+
export function registerCategoriesI18n(i18n) {
|
|
132
|
+
i18n.registerBundle("en", categoriesI18nBundleEn);
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=keys.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keys.js","sourceRoot":"","sources":["../../src/i18n/keys.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,uBAAuB,EAAE,MAAM,2BAA2B,CAAC;AAEpE;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,YAAY,EAAE,0BAA0B;IAExC,4EAA4E;IAC5E,YAAY,EAAE,0BAA0B;IACxC,cAAc,EAAE,4BAA4B;IAC5C,iBAAiB,EAAE,gCAAgC;IACnD,YAAY,EAAE,0BAA0B;IACxC,YAAY,EAAE,0BAA0B;IACxC,4EAA4E;IAC5E,gBAAgB,EAAE,8BAA8B;IAChD,iBAAiB,EAAE,+BAA+B;IAClD,WAAW,EAAE,0BAA0B;IAEvC,4EAA4E;IAC5E,aAAa,EAAE,2BAA2B;IAC1C,mBAAmB,EAAE,kCAAkC;IACvD,qBAAqB,EAAE,mCAAmC;IAC1D,2DAA2D;IAC3D,uBAAuB,EAAE,sCAAsC;IAC/D,YAAY,EAAE,0BAA0B;IAExC,4EAA4E;IAC5E,eAAe,EAAE,6BAA6B;IAC9C,gBAAgB,EAAE,8BAA8B;IAEhD,4EAA4E;IAC5E,aAAa,EAAE,2BAA2B;IAC1C,eAAe,EAAE,6BAA6B;IAC9C,kBAAkB,EAAE,iCAAiC;IACrD,aAAa,EAAE,2BAA2B;IAE1C,4EAA4E;IAC5E,WAAW,EAAE,yBAAyB;IACtC,YAAY,EAAE,0BAA0B;IACxC,aAAa,EAAE,2BAA2B;IAC1C,gBAAgB,EAAE,+BAA+B;IACjD,eAAe,EAAE,8BAA8B;IAC/C,QAAQ,EAAE,sBAAsB;IAChC,cAAc,EAAE,4BAA4B;IAC5C,4BAA4B,EAAE,4CAA4C;IAC1E,qBAAqB,EAAE,sCAAsC;IAE7D,4EAA4E;IAC5E,aAAa,EAAE,2BAA2B;IAC1C,eAAe,EAAE,6BAA6B;IAC9C,kBAAkB,EAAE,iCAAiC;IACrD,aAAa,EAAE,2BAA2B;IAC1C,iBAAiB,EAAE,+BAA+B;IAClD,YAAY,EAAE,0BAA0B;IACxC,yDAAyD;IACzD,eAAe,EAAE,6BAA6B;CACtC,CAAC;AAKX;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAA2B;IAC5D,GAAG,uBAAuB;IAE1B,0BAA0B,EAAE,yCAAyC;IAErE,0BAA0B,EAAE,WAAW;IACvC,4BAA4B,EAAE,wBAAwB;IACtD,gCAAgC,EAAE,iCAAiC;IACnE,0BAA0B,EAAE,sCAAsC;IAClE,0BAA0B,EAAE,WAAW;IACvC,8BAA8B,EAC5B,iHAAiH;IACnH,+BAA+B,EAAE,iCAAiC;IAClE,0BAA0B,EAAE,qCAAqC;IAEjE,2BAA2B,EAAE,UAAU;IACvC,kCAAkC,EAChC,sCAAsC;IACxC,mCAAmC,EAAE,eAAe;IACpD,sCAAsC,EAAE,oCAAoC;IAC5E,0BAA0B,EAAE,MAAM;IAElC,6BAA6B,EAAE,gBAAgB;IAC/C,8BAA8B,EAAE,cAAc;IAE9C,2BAA2B,EAAE,oBAAoB;IACjD,6BAA6B,EAAE,qBAAqB;IACpD,iCAAiC,EAAE,kCAAkC;IACrE,2BAA2B,EAAE,sCAAsC;IAEnE,yBAAyB,EAAE,UAAU;IACrC,0BAA0B,EAAE,mBAAmB;IAC/C,2BAA2B,EAAE,qBAAqB;IAClD,+BAA+B,EAAE,kCAAkC;IACnE,8BAA8B,EAAE,0BAA0B;IAC1D,sBAAsB,EAAE,cAAc;IACtC,4BAA4B,EAAE,sBAAsB;IACpD,4CAA4C,EAAE,yBAAyB;IACvE,sCAAsC,EACpC,yGAAyG;IAE3G,2BAA2B,EAAE,0BAA0B;IACvD,6BAA6B,EAAE,sBAAsB;IACrD,iCAAiC,EAAE,+BAA+B;IAClE,2BAA2B,EAAE,yCAAyC;IACtE,+BAA+B,EAAE,UAAU;IAC3C,0BAA0B,EAAE,QAAQ;IACpC,6BAA6B,EAAE,6CAA6C;CAC7E,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,sBAAsB,CAAC,IAAgB;IACrD,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,sBAAwC,CAAC,CAAC;AACtE,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { I18nDictionary, I18nEngine } from "@stapel/core";
|
|
2
|
+
export { categoriesErrorBundleRu } from "./generated/errors.ru.gen.js";
|
|
3
|
+
/**
|
|
4
|
+
* Russian bundle for categories-react — the `@stapel/categories-react/i18n/ru`
|
|
5
|
+
* subpath (i18n-shipping.md §2) so the locale is opt-in: hosts that do not
|
|
6
|
+
* register it never carry these strings (the main entry does not import this
|
|
7
|
+
* module — gated by size-limit + the bundle-purity test).
|
|
8
|
+
*
|
|
9
|
+
* This is the storefront's DEFAULT language (darom-storefront verdict F1:
|
|
10
|
+
* ru-first).
|
|
11
|
+
*
|
|
12
|
+
* ── What comes from where ──────────────────────────────────────────────────
|
|
13
|
+
*
|
|
14
|
+
* `stapel-categories` ships **no `translations/` directory at all**, so 20 of
|
|
15
|
+
* the 62 registry codes can never come from an upstream catalogue. They split
|
|
16
|
+
* by owner, and the split is the whole point:
|
|
17
|
+
*
|
|
18
|
+
* - the 42 cross-cutting `stapel_core` codes are GENERATED, merged in from
|
|
19
|
+
* stapel-core's own catalogue by `pnpm gen:errors` (spread first below);
|
|
20
|
+
* - the **8 `stapel_categories` codes** are authored here — and when upstream
|
|
21
|
+
* ships a catalogue, eight lines are deleted and no key or text moves;
|
|
22
|
+
* - the **12 `stapel_attributes` codes** are NOT here. They belong to
|
|
23
|
+
* `@stapel/attributes-react`, which already translates them and which is a
|
|
24
|
+
* peer of this pair anyway. Two pairs must not give one refusal two
|
|
25
|
+
* sentences (§13.2 note 3). A host registers both bundles;
|
|
26
|
+
* `test/i18n.test.ts` proves the union covers the registry.
|
|
27
|
+
*
|
|
28
|
+
* PROVENANCE, stated rather than implied: the core catalogue ships
|
|
29
|
+
* `origin=seed:authored` and is UNREVIEWED; the pair-authored strings below
|
|
30
|
+
* are the same grade. Neither is a claim of review.
|
|
31
|
+
*
|
|
32
|
+
* And once more, because it is the fact this pair exists to be honest about:
|
|
33
|
+
* **no category name is translated here.** Category and feature names arrive
|
|
34
|
+
* as translation KEYS (`catalog/labels.ts`) and belong in the deployment's own
|
|
35
|
+
* bundle, not in a library's.
|
|
36
|
+
*/
|
|
37
|
+
export declare const categoriesI18nBundleRu: I18nDictionary;
|
|
38
|
+
/** Register the `ru` bundle. Call AFTER `registerCategoriesI18n` so it
|
|
39
|
+
* overrides the English floor. */
|
|
40
|
+
export declare function registerCategoriesI18nRu(engine: I18nEngine, locale?: string): void;
|
|
41
|
+
//# sourceMappingURL=ru.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ru.d.ts","sourceRoot":"","sources":["../../src/i18n/ru.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/D,OAAO,EAAE,uBAAuB,EAAE,MAAM,8BAA8B,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAgEpC,CAAC;AAEF;kCACkC;AAClC,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,SAAO,GAAG,IAAI,CAEhF"}
|