@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.
Files changed (205) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/MODULE.md +194 -0
  3. package/README.md +191 -0
  4. package/dist/api/categoriesApi.d.ts +121 -0
  5. package/dist/api/categoriesApi.d.ts.map +1 -0
  6. package/dist/api/categoriesApi.js +48 -0
  7. package/dist/api/categoriesApi.js.map +1 -0
  8. package/dist/api/generated/schema.d.ts +2321 -0
  9. package/dist/api/generated/schema.d.ts.map +1 -0
  10. package/dist/api/generated/schema.js +2 -0
  11. package/dist/api/generated/schema.js.map +1 -0
  12. package/dist/api/types.d.ts +92 -0
  13. package/dist/api/types.d.ts.map +1 -0
  14. package/dist/api/types.js +2 -0
  15. package/dist/api/types.js.map +1 -0
  16. package/dist/catalog/labels.d.ts +103 -0
  17. package/dist/catalog/labels.d.ts.map +1 -0
  18. package/dist/catalog/labels.js +56 -0
  19. package/dist/catalog/labels.js.map +1 -0
  20. package/dist/catalog/pks.d.ts +25 -0
  21. package/dist/catalog/pks.d.ts.map +1 -0
  22. package/dist/catalog/pks.js +38 -0
  23. package/dist/catalog/pks.js.map +1 -0
  24. package/dist/catalog/sync.d.ts +103 -0
  25. package/dist/catalog/sync.d.ts.map +1 -0
  26. package/dist/catalog/sync.js +114 -0
  27. package/dist/catalog/sync.js.map +1 -0
  28. package/dist/catalog/tree.d.ts +119 -0
  29. package/dist/catalog/tree.d.ts.map +1 -0
  30. package/dist/catalog/tree.js +166 -0
  31. package/dist/catalog/tree.js.map +1 -0
  32. package/dist/default/CatalogPage.d.ts +16 -0
  33. package/dist/default/CatalogPage.d.ts.map +1 -0
  34. package/dist/default/CatalogPage.js +13 -0
  35. package/dist/default/CatalogPage.js.map +1 -0
  36. package/dist/default/CategoryBreadcrumbsBar.d.ts +20 -0
  37. package/dist/default/CategoryBreadcrumbsBar.d.ts.map +1 -0
  38. package/dist/default/CategoryBreadcrumbsBar.js +35 -0
  39. package/dist/default/CategoryBreadcrumbsBar.js.map +1 -0
  40. package/dist/default/CategoryCarouselStrip.d.ts +22 -0
  41. package/dist/default/CategoryCarouselStrip.d.ts.map +1 -0
  42. package/dist/default/CategoryCarouselStrip.js +24 -0
  43. package/dist/default/CategoryCarouselStrip.js.map +1 -0
  44. package/dist/default/CategoryFeatureList.d.ts +23 -0
  45. package/dist/default/CategoryFeatureList.d.ts.map +1 -0
  46. package/dist/default/CategoryFeatureList.js +28 -0
  47. package/dist/default/CategoryFeatureList.js.map +1 -0
  48. package/dist/default/CategoryPage.d.ts +43 -0
  49. package/dist/default/CategoryPage.d.ts.map +1 -0
  50. package/dist/default/CategoryPage.js +21 -0
  51. package/dist/default/CategoryPage.js.map +1 -0
  52. package/dist/default/CategoryPickerField.d.ts +26 -0
  53. package/dist/default/CategoryPickerField.d.ts.map +1 -0
  54. package/dist/default/CategoryPickerField.js +40 -0
  55. package/dist/default/CategoryPickerField.js.map +1 -0
  56. package/dist/default/CategoryTreePane.d.ts +28 -0
  57. package/dist/default/CategoryTreePane.d.ts.map +1 -0
  58. package/dist/default/CategoryTreePane.js +25 -0
  59. package/dist/default/CategoryTreePane.js.map +1 -0
  60. package/dist/default/ErrorAlert.d.ts +9 -0
  61. package/dist/default/ErrorAlert.d.ts.map +1 -0
  62. package/dist/default/ErrorAlert.js +27 -0
  63. package/dist/default/ErrorAlert.js.map +1 -0
  64. package/dist/default/index.d.ts +37 -0
  65. package/dist/default/index.d.ts.map +1 -0
  66. package/dist/default/index.js +28 -0
  67. package/dist/default/index.js.map +1 -0
  68. package/dist/default/theme.d.ts +25 -0
  69. package/dist/default/theme.d.ts.map +1 -0
  70. package/dist/default/theme.js +40 -0
  71. package/dist/default/theme.js.map +1 -0
  72. package/dist/default/types.d.ts +12 -0
  73. package/dist/default/types.d.ts.map +1 -0
  74. package/dist/default/types.js +2 -0
  75. package/dist/default/types.js.map +1 -0
  76. package/dist/headless/CategoriesProvider.d.ts +19 -0
  77. package/dist/headless/CategoriesProvider.d.ts.map +1 -0
  78. package/dist/headless/CategoriesProvider.js +15 -0
  79. package/dist/headless/CategoriesProvider.js.map +1 -0
  80. package/dist/headless/CategoryBreadcrumbs.d.ts +40 -0
  81. package/dist/headless/CategoryBreadcrumbs.d.ts.map +1 -0
  82. package/dist/headless/CategoryBreadcrumbs.js +42 -0
  83. package/dist/headless/CategoryBreadcrumbs.js.map +1 -0
  84. package/dist/headless/CategoryCarousel.d.ts +48 -0
  85. package/dist/headless/CategoryCarousel.d.ts.map +1 -0
  86. package/dist/headless/CategoryCarousel.js +34 -0
  87. package/dist/headless/CategoryCarousel.js.map +1 -0
  88. package/dist/headless/CategoryFeatures.d.ts +67 -0
  89. package/dist/headless/CategoryFeatures.d.ts.map +1 -0
  90. package/dist/headless/CategoryFeatures.js +46 -0
  91. package/dist/headless/CategoryFeatures.js.map +1 -0
  92. package/dist/headless/CategoryPicker.d.ts +69 -0
  93. package/dist/headless/CategoryPicker.d.ts.map +1 -0
  94. package/dist/headless/CategoryPicker.js +86 -0
  95. package/dist/headless/CategoryPicker.js.map +1 -0
  96. package/dist/headless/CategoryTree.d.ts +55 -0
  97. package/dist/headless/CategoryTree.d.ts.map +1 -0
  98. package/dist/headless/CategoryTree.js +51 -0
  99. package/dist/headless/CategoryTree.js.map +1 -0
  100. package/dist/i18n/errorsMap.d.ts +22 -0
  101. package/dist/i18n/errorsMap.d.ts.map +1 -0
  102. package/dist/i18n/errorsMap.js +31 -0
  103. package/dist/i18n/errorsMap.js.map +1 -0
  104. package/dist/i18n/es.d.ts +25 -0
  105. package/dist/i18n/es.d.ts.map +1 -0
  106. package/dist/i18n/es.js +74 -0
  107. package/dist/i18n/es.js.map +1 -0
  108. package/dist/i18n/generated/errors.es.gen.d.ts +16 -0
  109. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
  110. package/dist/i18n/generated/errors.es.gen.js +58 -0
  111. package/dist/i18n/generated/errors.es.gen.js.map +1 -0
  112. package/dist/i18n/generated/errors.gen.d.ts +407 -0
  113. package/dist/i18n/generated/errors.gen.d.ts.map +1 -0
  114. package/dist/i18n/generated/errors.gen.js +207 -0
  115. package/dist/i18n/generated/errors.gen.js.map +1 -0
  116. package/dist/i18n/generated/errors.ru.gen.d.ts +16 -0
  117. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -0
  118. package/dist/i18n/generated/errors.ru.gen.js +58 -0
  119. package/dist/i18n/generated/errors.ru.gen.js.map +1 -0
  120. package/dist/i18n/keys.d.ts +89 -0
  121. package/dist/i18n/keys.d.ts.map +1 -0
  122. package/dist/i18n/keys.js +134 -0
  123. package/dist/i18n/keys.js.map +1 -0
  124. package/dist/i18n/ru.d.ts +41 -0
  125. package/dist/i18n/ru.d.ts.map +1 -0
  126. package/dist/i18n/ru.js +90 -0
  127. package/dist/i18n/ru.js.map +1 -0
  128. package/dist/index.d.ts +88 -0
  129. package/dist/index.d.ts.map +1 -0
  130. package/dist/index.js +78 -0
  131. package/dist/index.js.map +1 -0
  132. package/dist/model/catalogStore.d.ts +23 -0
  133. package/dist/model/catalogStore.d.ts.map +1 -0
  134. package/dist/model/catalogStore.js +85 -0
  135. package/dist/model/catalogStore.js.map +1 -0
  136. package/dist/model/catalogSync.d.ts +49 -0
  137. package/dist/model/catalogSync.d.ts.map +1 -0
  138. package/dist/model/catalogSync.js +64 -0
  139. package/dist/model/catalogSync.js.map +1 -0
  140. package/dist/model/context.d.ts +11 -0
  141. package/dist/model/context.d.ts.map +1 -0
  142. package/dist/model/context.js +16 -0
  143. package/dist/model/context.js.map +1 -0
  144. package/dist/model/queries.d.ts +124 -0
  145. package/dist/model/queries.d.ts.map +1 -0
  146. package/dist/model/queries.js +147 -0
  147. package/dist/model/queries.js.map +1 -0
  148. package/dist/model/queryKeys.d.ts +30 -0
  149. package/dist/model/queryKeys.d.ts.map +1 -0
  150. package/dist/model/queryKeys.js +16 -0
  151. package/dist/model/queryKeys.js.map +1 -0
  152. package/dist/model/runtime.d.ts +31 -0
  153. package/dist/model/runtime.d.ts.map +1 -0
  154. package/dist/model/runtime.js +6 -0
  155. package/dist/model/runtime.js.map +1 -0
  156. package/dist/nav/manifest.d.ts +31 -0
  157. package/dist/nav/manifest.d.ts.map +1 -0
  158. package/dist/nav/manifest.js +37 -0
  159. package/dist/nav/manifest.js.map +1 -0
  160. package/llms.txt +125 -0
  161. package/manifest.json +918 -0
  162. package/nav-manifest.json +44 -0
  163. package/package.json +119 -0
  164. package/src/analytics/generated/events.json +7 -0
  165. package/src/api/categoriesApi.ts +179 -0
  166. package/src/api/generated/schema.ts +2323 -0
  167. package/src/api/types.ts +99 -0
  168. package/src/catalog/labels.ts +129 -0
  169. package/src/catalog/pks.ts +35 -0
  170. package/src/catalog/sync.ts +169 -0
  171. package/src/catalog/tree.ts +242 -0
  172. package/src/default/CatalogPage.tsx +40 -0
  173. package/src/default/CategoryBreadcrumbsBar.tsx +93 -0
  174. package/src/default/CategoryCarouselStrip.tsx +102 -0
  175. package/src/default/CategoryFeatureList.tsx +125 -0
  176. package/src/default/CategoryPage.tsx +114 -0
  177. package/src/default/CategoryPickerField.tsx +173 -0
  178. package/src/default/CategoryTreePane.tsx +134 -0
  179. package/src/default/ErrorAlert.tsx +46 -0
  180. package/src/default/index.ts +36 -0
  181. package/src/default/theme.tsx +67 -0
  182. package/src/default/types.ts +12 -0
  183. package/src/headless/CategoriesProvider.tsx +20 -0
  184. package/src/headless/CategoryBreadcrumbs.tsx +78 -0
  185. package/src/headless/CategoryCarousel.tsx +80 -0
  186. package/src/headless/CategoryFeatures.tsx +100 -0
  187. package/src/headless/CategoryPicker.tsx +173 -0
  188. package/src/headless/CategoryTree.tsx +115 -0
  189. package/src/i18n/errorsMap.ts +46 -0
  190. package/src/i18n/es.ts +92 -0
  191. package/src/i18n/generated/errors.es.gen.ts +64 -0
  192. package/src/i18n/generated/errors.gen.ts +238 -0
  193. package/src/i18n/generated/errors.json +495 -0
  194. package/src/i18n/generated/errors.ru.gen.ts +64 -0
  195. package/src/i18n/keys.ts +156 -0
  196. package/src/i18n/ru.ts +110 -0
  197. package/src/index.ts +191 -0
  198. package/src/model/catalogStore.ts +102 -0
  199. package/src/model/catalogSync.ts +115 -0
  200. package/src/model/context.tsx +28 -0
  201. package/src/model/queries.ts +226 -0
  202. package/src/model/queryKeys.ts +50 -0
  203. package/src/model/runtime.ts +39 -0
  204. package/src/nav/manifest.ts +66 -0
  205. package/tsconfig.json +26 -0
@@ -0,0 +1,2323 @@
1
+ // AUTO-GENERATED by scripts/gen-api.mjs — do not edit by hand.
2
+ // Source: the backend module's own docs/schema.json (§17-native per-module contract).
3
+ // Regenerate: pnpm gen:api · Drift gate: pnpm gen:api:check
4
+ export interface paths {
5
+ "/categories/api/v1/categories/": {
6
+ parameters: {
7
+ query?: never;
8
+ header?: never;
9
+ path?: never;
10
+ cookie?: never;
11
+ };
12
+ /**
13
+ * @description List categories with revision-based pagination.
14
+ *
15
+ * **Permissions:** `ReadOnlyOrStaff`
16
+ */
17
+ get: operations["categories_api_v1_categories_list"];
18
+ put?: never;
19
+ /**
20
+ * @description ViewSet for Category with revision-based synchronization.
21
+ *
22
+ * **Sync flow:**
23
+ * 1. Initial sync: ``GET /categories/`` — returns all categories with revision info
24
+ * 2. Store ``revisions.global_max`` from the response
25
+ * 3. Subsequent sync: ``GET /categories/?min_revision={stored_max}`` — only changes
26
+ * 4. Handle items with ``deleted=true`` by removing them locally
27
+ *
28
+ * **Permissions:** `ReadOnlyOrStaff`
29
+ */
30
+ post: operations["categories_api_v1_categories_create"];
31
+ delete?: never;
32
+ options?: never;
33
+ head?: never;
34
+ patch?: never;
35
+ trace?: never;
36
+ };
37
+ "/categories/api/v1/categories/{id}/": {
38
+ parameters: {
39
+ query?: never;
40
+ header?: never;
41
+ path?: never;
42
+ cookie?: never;
43
+ };
44
+ /**
45
+ * @description ViewSet for Category with revision-based synchronization.
46
+ *
47
+ * **Sync flow:**
48
+ * 1. Initial sync: ``GET /categories/`` — returns all categories with revision info
49
+ * 2. Store ``revisions.global_max`` from the response
50
+ * 3. Subsequent sync: ``GET /categories/?min_revision={stored_max}`` — only changes
51
+ * 4. Handle items with ``deleted=true`` by removing them locally
52
+ *
53
+ * **Permissions:** `ReadOnlyOrStaff`
54
+ */
55
+ get: operations["categories_api_v1_categories_retrieve"];
56
+ /**
57
+ * @description ViewSet for Category with revision-based synchronization.
58
+ *
59
+ * **Sync flow:**
60
+ * 1. Initial sync: ``GET /categories/`` — returns all categories with revision info
61
+ * 2. Store ``revisions.global_max`` from the response
62
+ * 3. Subsequent sync: ``GET /categories/?min_revision={stored_max}`` — only changes
63
+ * 4. Handle items with ``deleted=true`` by removing them locally
64
+ *
65
+ * **Permissions:** `ReadOnlyOrStaff`
66
+ */
67
+ put: operations["categories_api_v1_categories_update"];
68
+ post?: never;
69
+ /**
70
+ * @description ViewSet for Category with revision-based synchronization.
71
+ *
72
+ * **Sync flow:**
73
+ * 1. Initial sync: ``GET /categories/`` — returns all categories with revision info
74
+ * 2. Store ``revisions.global_max`` from the response
75
+ * 3. Subsequent sync: ``GET /categories/?min_revision={stored_max}`` — only changes
76
+ * 4. Handle items with ``deleted=true`` by removing them locally
77
+ *
78
+ * **Permissions:** `ReadOnlyOrStaff`
79
+ */
80
+ delete: operations["categories_api_v1_categories_destroy"];
81
+ options?: never;
82
+ head?: never;
83
+ /**
84
+ * @description ViewSet for Category with revision-based synchronization.
85
+ *
86
+ * **Sync flow:**
87
+ * 1. Initial sync: ``GET /categories/`` — returns all categories with revision info
88
+ * 2. Store ``revisions.global_max`` from the response
89
+ * 3. Subsequent sync: ``GET /categories/?min_revision={stored_max}`` — only changes
90
+ * 4. Handle items with ``deleted=true`` by removing them locally
91
+ *
92
+ * **Permissions:** `ReadOnlyOrStaff`
93
+ */
94
+ patch: operations["categories_api_v1_categories_partial_update"];
95
+ trace?: never;
96
+ };
97
+ "/categories/api/v1/categories/{id}/children/": {
98
+ parameters: {
99
+ query?: never;
100
+ header?: never;
101
+ path?: never;
102
+ cookie?: never;
103
+ };
104
+ /**
105
+ * @description Get all non-deleted children of this category, sorted by tn_priority descending.
106
+ *
107
+ * **Permissions:** `ReadOnlyOrStaff`
108
+ */
109
+ get: operations["categories_api_v1_categories_children_list"];
110
+ put?: never;
111
+ post?: never;
112
+ delete?: never;
113
+ options?: never;
114
+ head?: never;
115
+ patch?: never;
116
+ trace?: never;
117
+ };
118
+ "/categories/api/v1/categories/{id}/deleted-children/": {
119
+ parameters: {
120
+ query?: never;
121
+ header?: never;
122
+ path?: never;
123
+ cookie?: never;
124
+ };
125
+ /**
126
+ * @description Get all deleted children of this category.
127
+ *
128
+ * **Permissions:** `ReadOnlyOrStaff`
129
+ */
130
+ get: operations["categories_api_v1_categories_deleted_children_list"];
131
+ put?: never;
132
+ post?: never;
133
+ delete?: never;
134
+ options?: never;
135
+ head?: never;
136
+ patch?: never;
137
+ trace?: never;
138
+ };
139
+ "/categories/api/v1/categories/{id}/feature-editor/": {
140
+ parameters: {
141
+ query?: never;
142
+ header?: never;
143
+ path?: never;
144
+ cookie?: never;
145
+ };
146
+ /**
147
+ * @description Get feature editor state for admin UI.
148
+ *
149
+ * **Permissions:** `IsStaffUser`
150
+ */
151
+ get: operations["categories_api_v1_categories_feature_editor_retrieve"];
152
+ put?: never;
153
+ post?: never;
154
+ delete?: never;
155
+ options?: never;
156
+ head?: never;
157
+ patch?: never;
158
+ trace?: never;
159
+ };
160
+ "/categories/api/v1/categories/{id}/feature-editor/apply/": {
161
+ parameters: {
162
+ query?: never;
163
+ header?: never;
164
+ path?: never;
165
+ cookie?: never;
166
+ };
167
+ get?: never;
168
+ put?: never;
169
+ /**
170
+ * @description Apply feature editor actions to category and descendants.
171
+ *
172
+ * **Permissions:** `IsStaffUser`
173
+ */
174
+ post: operations["categories_api_v1_categories_feature_editor_apply_create"];
175
+ delete?: never;
176
+ options?: never;
177
+ head?: never;
178
+ patch?: never;
179
+ trace?: never;
180
+ };
181
+ "/categories/api/v1/categories/{id}/feature-editor/draft/": {
182
+ parameters: {
183
+ query?: never;
184
+ header?: never;
185
+ path?: never;
186
+ cookie?: never;
187
+ };
188
+ get?: never;
189
+ put?: never;
190
+ /**
191
+ * @description Save feature editor draft without applying changes.
192
+ *
193
+ * **Permissions:** `IsStaffUser`
194
+ */
195
+ post: operations["categories_api_v1_categories_feature_editor_draft_create"];
196
+ delete?: never;
197
+ options?: never;
198
+ head?: never;
199
+ patch?: never;
200
+ trace?: never;
201
+ };
202
+ "/categories/api/v1/categories/{id}/features/": {
203
+ parameters: {
204
+ query?: never;
205
+ header?: never;
206
+ path?: never;
207
+ cookie?: never;
208
+ };
209
+ /**
210
+ * @description Get all features for this category, sorted by order. Includes inherited features.
211
+ *
212
+ * **Permissions:** `ReadOnlyOrStaff`
213
+ */
214
+ get: operations["categories_api_v1_categories_features_list"];
215
+ put?: never;
216
+ post?: never;
217
+ delete?: never;
218
+ options?: never;
219
+ head?: never;
220
+ patch?: never;
221
+ trace?: never;
222
+ };
223
+ "/categories/api/v1/categories/{id}/undelete/": {
224
+ parameters: {
225
+ query?: never;
226
+ header?: never;
227
+ path?: never;
228
+ cookie?: never;
229
+ };
230
+ get?: never;
231
+ put?: never;
232
+ /**
233
+ * @description Restore deleted category and all its descendants.
234
+ *
235
+ * **Permissions:** `IsStaffUser`
236
+ */
237
+ post: operations["categories_api_v1_categories_undelete_create"];
238
+ delete?: never;
239
+ options?: never;
240
+ head?: never;
241
+ patch?: never;
242
+ trace?: never;
243
+ };
244
+ "/categories/api/v1/categories/{id}/validate-configs/": {
245
+ parameters: {
246
+ query?: never;
247
+ header?: never;
248
+ path?: never;
249
+ cookie?: never;
250
+ };
251
+ /**
252
+ * @description Validate all feature configs in this category.
253
+ *
254
+ * **Permissions:** `ReadOnlyOrStaff`
255
+ */
256
+ get: operations["categories_api_v1_categories_validate_configs_retrieve"];
257
+ put?: never;
258
+ post?: never;
259
+ delete?: never;
260
+ options?: never;
261
+ head?: never;
262
+ patch?: never;
263
+ trace?: never;
264
+ };
265
+ "/categories/api/v1/categories/{id}/validate-dto/": {
266
+ parameters: {
267
+ query?: never;
268
+ header?: never;
269
+ path?: never;
270
+ cookie?: never;
271
+ };
272
+ get?: never;
273
+ put?: never;
274
+ /**
275
+ * @description Validate a features DTO against this category's schema.
276
+ *
277
+ * **Permissions:** `ReadOnlyOrStaff`
278
+ */
279
+ post: operations["categories_api_v1_categories_validate_dto_create"];
280
+ delete?: never;
281
+ options?: never;
282
+ head?: never;
283
+ patch?: never;
284
+ trace?: never;
285
+ };
286
+ "/categories/api/v1/categories/bulk-commands/": {
287
+ parameters: {
288
+ query?: never;
289
+ header?: never;
290
+ path?: never;
291
+ cookie?: never;
292
+ };
293
+ get?: never;
294
+ put?: never;
295
+ /**
296
+ * @description Execute bulk commands on categories (add/edit/delete/reorder).
297
+ *
298
+ * **Permissions:** `IsStaffUser`
299
+ */
300
+ post: operations["categories_api_v1_categories_bulk_commands_create"];
301
+ delete?: never;
302
+ options?: never;
303
+ head?: never;
304
+ patch?: never;
305
+ trace?: never;
306
+ };
307
+ "/categories/api/v1/categories/bulk_add/": {
308
+ parameters: {
309
+ query?: never;
310
+ header?: never;
311
+ path?: never;
312
+ cookie?: never;
313
+ };
314
+ get?: never;
315
+ put?: never;
316
+ /**
317
+ * @description Bulk create or update categories. Provide an array of category objects with IDs.
318
+ *
319
+ * **Permissions:** `IsStaffUser`
320
+ */
321
+ post: operations["categories_api_v1_categories_bulk_add_create"];
322
+ delete?: never;
323
+ options?: never;
324
+ head?: never;
325
+ patch?: never;
326
+ trace?: never;
327
+ };
328
+ "/categories/api/v1/categories/carousel/": {
329
+ parameters: {
330
+ query?: never;
331
+ header?: never;
332
+ path?: never;
333
+ cookie?: never;
334
+ };
335
+ /**
336
+ * @description Get categories for carousel display (active and carousel_enabled).
337
+ *
338
+ * **Permissions:** `ReadOnlyOrStaff`
339
+ */
340
+ get: operations["categories_api_v1_categories_carousel_list"];
341
+ put?: never;
342
+ post?: never;
343
+ delete?: never;
344
+ options?: never;
345
+ head?: never;
346
+ patch?: never;
347
+ trace?: never;
348
+ };
349
+ "/categories/api/v1/categories/data.json/": {
350
+ parameters: {
351
+ query?: never;
352
+ header?: never;
353
+ path?: never;
354
+ cookie?: never;
355
+ };
356
+ /**
357
+ * @description Get all data as a cacheable JSON array.
358
+ *
359
+ * The `revision` parameter is required for cache busting - clients should use the current
360
+ * max revision from `/revision` endpoint. Response includes Cache-Control header for 30 days.
361
+ *
362
+ * **Usage:**
363
+ * 1. Call `/revision` to get current max revision
364
+ * 2. Call `/data.json?revision={max_revision}` to get all data
365
+ * 3. Cache the response locally - it won't change until revision changes
366
+ *
367
+ *
368
+ * **Permissions:** `ReadOnlyOrStaff`
369
+ */
370
+ get: operations["categories_api_v1_categories_data.json_retrieve"];
371
+ put?: never;
372
+ post?: never;
373
+ delete?: never;
374
+ options?: never;
375
+ head?: never;
376
+ patch?: never;
377
+ trace?: never;
378
+ };
379
+ "/categories/api/v1/categories/revision/": {
380
+ parameters: {
381
+ query?: never;
382
+ header?: never;
383
+ path?: never;
384
+ cookie?: never;
385
+ };
386
+ /**
387
+ * @description Get the current maximum revision number for this resource.
388
+ *
389
+ * **Permissions:** `ReadOnlyOrStaff`
390
+ */
391
+ get: operations["categories_api_v1_categories_revision_retrieve"];
392
+ put?: never;
393
+ post?: never;
394
+ delete?: never;
395
+ options?: never;
396
+ head?: never;
397
+ patch?: never;
398
+ trace?: never;
399
+ };
400
+ "/categories/api/v1/categories/translation-keys/": {
401
+ parameters: {
402
+ query?: never;
403
+ header?: never;
404
+ path?: never;
405
+ cookie?: never;
406
+ };
407
+ /**
408
+ * Collect all translation keys
409
+ * @description Collect translation keys from categories, features and feature config options.
410
+ *
411
+ * **Permissions:** `IsServiceRequest`
412
+ */
413
+ get: operations["collect_translation_keys"];
414
+ put?: never;
415
+ post?: never;
416
+ delete?: never;
417
+ options?: never;
418
+ head?: never;
419
+ patch?: never;
420
+ trace?: never;
421
+ };
422
+ "/categories/api/v1/features/": {
423
+ parameters: {
424
+ query?: never;
425
+ header?: never;
426
+ path?: never;
427
+ cookie?: never;
428
+ };
429
+ /**
430
+ * @description List features with revision-based pagination.
431
+ *
432
+ * **Permissions:** `ReadOnlyOrStaff`
433
+ */
434
+ get: operations["categories_api_v1_features_list"];
435
+ put?: never;
436
+ /**
437
+ * @description Create a new feature with polymorphic config.
438
+ *
439
+ * **Permissions:** `ReadOnlyOrStaff`
440
+ */
441
+ post: operations["categories_api_v1_features_create"];
442
+ delete?: never;
443
+ options?: never;
444
+ head?: never;
445
+ patch?: never;
446
+ trace?: never;
447
+ };
448
+ "/categories/api/v1/features/{id}/": {
449
+ parameters: {
450
+ query?: never;
451
+ header?: never;
452
+ path?: never;
453
+ cookie?: never;
454
+ };
455
+ /**
456
+ * @description Get feature details with tree structure info.
457
+ *
458
+ * **Permissions:** `ReadOnlyOrStaff`
459
+ */
460
+ get: operations["categories_api_v1_features_retrieve"];
461
+ /**
462
+ * @description Update an existing feature with polymorphic config.
463
+ *
464
+ * **Permissions:** `ReadOnlyOrStaff`
465
+ */
466
+ put: operations["categories_api_v1_features_update"];
467
+ post?: never;
468
+ /**
469
+ * @description Mixin for ViewSets working with RevisionMixin models.
470
+ *
471
+ * Provides:
472
+ * - Automatic revision-based filtering
473
+ * - OpenAPI documentation for revision query parameters
474
+ * - Optional filtering of soft-deleted items
475
+ * - /revision endpoint to get current max revision
476
+ *
477
+ * Usage:
478
+ * class MyModelViewSet(RevisionViewSetMixin, viewsets.ModelViewSet):
479
+ * queryset = MyModel.objects.all()
480
+ * serializer_class = MyModelSerializer
481
+ * pagination_class = RevisionPagination
482
+ *
483
+ * Query parameters:
484
+ * - min_revision: Return objects with revision > min_revision (default: 0)
485
+ * - max_revision: Return objects with revision <= max_revision (default: None)
486
+ * - include_deleted: Include soft-deleted items (default: true)
487
+ *
488
+ * **Permissions:** `ReadOnlyOrStaff`
489
+ */
490
+ delete: operations["categories_api_v1_features_destroy"];
491
+ options?: never;
492
+ head?: never;
493
+ /**
494
+ * @description Partially update a feature.
495
+ *
496
+ * **Permissions:** `ReadOnlyOrStaff`
497
+ */
498
+ patch: operations["categories_api_v1_features_partial_update"];
499
+ trace?: never;
500
+ };
501
+ "/categories/api/v1/features/{id}/convert-type/": {
502
+ parameters: {
503
+ query?: never;
504
+ header?: never;
505
+ path?: never;
506
+ cookie?: never;
507
+ };
508
+ get?: never;
509
+ put?: never;
510
+ /**
511
+ * @description Convert feature type between select and string, optionally propagating to descendants.
512
+ *
513
+ * **Permissions:** `IsStaffUser`
514
+ */
515
+ post: operations["categories_api_v1_features_convert_type_create"];
516
+ delete?: never;
517
+ options?: never;
518
+ head?: never;
519
+ patch?: never;
520
+ trace?: never;
521
+ };
522
+ "/categories/api/v1/features/bulk_add/": {
523
+ parameters: {
524
+ query?: never;
525
+ header?: never;
526
+ path?: never;
527
+ cookie?: never;
528
+ };
529
+ get?: never;
530
+ put?: never;
531
+ /**
532
+ * @description Bulk create or update features. Provide an array of feature objects with IDs.
533
+ *
534
+ * **Permissions:** `IsStaffUser`
535
+ */
536
+ post: operations["categories_api_v1_features_bulk_add_create"];
537
+ delete?: never;
538
+ options?: never;
539
+ head?: never;
540
+ patch?: never;
541
+ trace?: never;
542
+ };
543
+ "/categories/api/v1/features/data.json/": {
544
+ parameters: {
545
+ query?: never;
546
+ header?: never;
547
+ path?: never;
548
+ cookie?: never;
549
+ };
550
+ /**
551
+ * @description Get all data as a cacheable JSON array.
552
+ *
553
+ * The `revision` parameter is required for cache busting - clients should use the current
554
+ * max revision from `/revision` endpoint. Response includes Cache-Control header for 30 days.
555
+ *
556
+ * **Usage:**
557
+ * 1. Call `/revision` to get current max revision
558
+ * 2. Call `/data.json?revision={max_revision}` to get all data
559
+ * 3. Cache the response locally - it won't change until revision changes
560
+ *
561
+ *
562
+ * **Permissions:** `ReadOnlyOrStaff`
563
+ */
564
+ get: operations["categories_api_v1_features_data.json_retrieve"];
565
+ put?: never;
566
+ post?: never;
567
+ delete?: never;
568
+ options?: never;
569
+ head?: never;
570
+ patch?: never;
571
+ trace?: never;
572
+ };
573
+ "/categories/api/v1/features/revision/": {
574
+ parameters: {
575
+ query?: never;
576
+ header?: never;
577
+ path?: never;
578
+ cookie?: never;
579
+ };
580
+ /**
581
+ * @description Get the current maximum revision number for this resource.
582
+ *
583
+ * **Permissions:** `ReadOnlyOrStaff`
584
+ */
585
+ get: operations["categories_api_v1_features_revision_retrieve"];
586
+ put?: never;
587
+ post?: never;
588
+ delete?: never;
589
+ options?: never;
590
+ head?: never;
591
+ patch?: never;
592
+ trace?: never;
593
+ };
594
+ }
595
+ export type webhooks = Record<string, never>;
596
+ export interface components {
597
+ schemas: {
598
+ /**
599
+ * @description * `keep` - keep
600
+ * * `add` - add
601
+ * * `edit` - edit
602
+ * * `inherit` - inherit
603
+ * * `remove` - remove
604
+ * * `create` - create
605
+ * * `replace` - replace
606
+ * @enum {string}
607
+ */
608
+ ActionEnum: "keep" | "add" | "edit" | "inherit" | "remove" | "create" | "replace";
609
+ /**
610
+ * @description * `keep` - keep
611
+ * * `add` - add
612
+ * * `edit` - edit
613
+ * * `inherit` - inherit
614
+ * * `remove` - remove
615
+ * * `create` - create
616
+ * * `replace` - replace
617
+ * @enum {string}
618
+ */
619
+ AvailableActionsEnum: "keep" | "add" | "edit" | "inherit" | "remove" | "create" | "replace";
620
+ /** @description Serializer for boolean feature configuration. */
621
+ BoolConfig: {
622
+ /**
623
+ * @description discriminator enum property added by openapi-typescript
624
+ * @enum {string}
625
+ */
626
+ type: "BoolConfig";
627
+ trueLabel?: string | null;
628
+ falseLabel?: string | null;
629
+ };
630
+ /** @description Serializer for boolean feature DTO. */
631
+ BoolDto: {
632
+ /**
633
+ * @description discriminator enum property added by openapi-typescript
634
+ * @enum {string}
635
+ */
636
+ type: "BoolDto";
637
+ value?: boolean;
638
+ };
639
+ /** @description Response for bulk create/update operations. */
640
+ BulkUpdateResponse: {
641
+ /** @description List of created/updated object IDs */
642
+ updated_ids: string[];
643
+ };
644
+ /** @description Category serializer with feature references and revision tracking. */
645
+ Category: {
646
+ readonly id: number;
647
+ name: string;
648
+ slug: string;
649
+ /** @description CDN catalog icon reference (opaque string, e.g. catalog/asset-name) */
650
+ catalog_icon?: string;
651
+ /** @description CDN carousel icon reference (opaque string, e.g. carousel/asset-name) */
652
+ carousel_icon?: string;
653
+ /** @description Whether this category appears in the carousel */
654
+ carousel_enabled?: boolean;
655
+ /** @description Whether this category is active */
656
+ active?: boolean;
657
+ readonly features: number[];
658
+ /** @description If True, category name is a translation key */
659
+ translatable?: boolean;
660
+ /** Parent */
661
+ tn_parent?: number | null;
662
+ /**
663
+ * Priority
664
+ * Format: int64
665
+ */
666
+ tn_priority?: number;
667
+ /** Ancestors pks */
668
+ readonly tn_ancestors_pks: string;
669
+ /** Children pks */
670
+ readonly tn_children_pks: string;
671
+ readonly revision: number;
672
+ deleted?: boolean;
673
+ };
674
+ /** @description Serializer for bulk add/update operations — id is required. */
675
+ CategoryBulk: {
676
+ id: number;
677
+ name: string;
678
+ slug: string;
679
+ /** @description CDN catalog icon reference (opaque string, e.g. catalog/asset-name) */
680
+ catalog_icon?: string;
681
+ /** @description CDN carousel icon reference (opaque string, e.g. carousel/asset-name) */
682
+ carousel_icon?: string;
683
+ readonly features: number[];
684
+ /** Parent */
685
+ tn_parent?: number | null;
686
+ /**
687
+ * Priority
688
+ * Format: int64
689
+ */
690
+ tn_priority?: number;
691
+ };
692
+ /** @description Serializer for bulk category commands. */
693
+ CategoryBulkCommand: {
694
+ categories: components["schemas"]["CategoryCommand"][];
695
+ };
696
+ /** @description Serializer for category command pattern. */
697
+ CategoryCommand: {
698
+ /** @description Category ID (null for add command) */
699
+ id?: number | null;
700
+ /**
701
+ * @description Command to execute
702
+ *
703
+ * * `keep` - keep
704
+ * * `add` - add
705
+ * * `edit` - edit
706
+ * * `delete` - delete
707
+ * * `reorder` - reorder
708
+ */
709
+ command: components["schemas"]["CommandEnum"];
710
+ /** @description Category name (for add/edit) */
711
+ name?: string;
712
+ /** @description Category slug (for add/edit) */
713
+ slug?: string;
714
+ /**
715
+ * @description If True, name is translation key
716
+ * @default true
717
+ */
718
+ translatable: boolean;
719
+ /** @description Parent category ID (for add) */
720
+ parent_id?: number | null;
721
+ /** @description Tree node priority (for add/reorder) */
722
+ priority?: number;
723
+ };
724
+ /**
725
+ * @description * `keep` - keep
726
+ * * `add` - add
727
+ * * `edit` - edit
728
+ * * `delete` - delete
729
+ * * `reorder` - reorder
730
+ * @enum {string}
731
+ */
732
+ CommandEnum: "keep" | "add" | "edit" | "delete" | "reorder";
733
+ /** @description Serializer for convertible-unit feature configuration. */
734
+ ConvertibleUnitConfig: {
735
+ /**
736
+ * @description discriminator enum property added by openapi-typescript
737
+ * @enum {string}
738
+ */
739
+ type: "null";
740
+ unitType?: string | null;
741
+ unit_m?: string | null;
742
+ unit_i?: string | null;
743
+ precision?: number;
744
+ prefix?: string | null;
745
+ /** Format: double */
746
+ min?: number | null;
747
+ /** Format: double */
748
+ max?: number | null;
749
+ };
750
+ /** @description Serializer for convertible-unit feature DTO. */
751
+ ConvertibleUnitDto: {
752
+ /**
753
+ * @description discriminator enum property added by openapi-typescript
754
+ * @enum {string}
755
+ */
756
+ type: "null";
757
+ /** Format: double */
758
+ value?: number | null;
759
+ unit?: string | null;
760
+ };
761
+ /** @description Serializer for date feature configuration. */
762
+ DateConfig: {
763
+ /**
764
+ * @description discriminator enum property added by openapi-typescript
765
+ * @enum {string}
766
+ */
767
+ type: "DateConfig";
768
+ precision?: components["schemas"]["PrecisionEnum"];
769
+ minDate?: number | null;
770
+ maxDate?: number | null;
771
+ allowFuture?: boolean;
772
+ allowPast?: boolean;
773
+ default?: number | null;
774
+ options?: number[];
775
+ lockInput?: boolean;
776
+ placeholder?: string | null;
777
+ };
778
+ /** @description Serializer for date feature DTO. */
779
+ DateDto: {
780
+ /**
781
+ * @description discriminator enum property added by openapi-typescript
782
+ * @enum {string}
783
+ */
784
+ type: "DateDto";
785
+ value?: number | null;
786
+ };
787
+ /**
788
+ * @description * `below_minimum` - below_minimum
789
+ * * `above_maximum` - above_maximum
790
+ * * `not_in_options` - not_in_options
791
+ * * `invalid_type` - invalid_type
792
+ * * `invalid_format` - invalid_format
793
+ * * `mandatory_missing` - mandatory_missing
794
+ * * `duplicate_slug` - duplicate_slug
795
+ * * `unknown_feature_type` - unknown_feature_type
796
+ * * `not_allowed` - not_allowed
797
+ * * `unknown_feature` - unknown_feature
798
+ * * `description_too_short` - description_too_short
799
+ * * `description_too_long` - description_too_long
800
+ * * `invalid_config` - invalid_config
801
+ * * `min_greater_than_max` - min_greater_than_max
802
+ * * `empty_options` - empty_options
803
+ * @enum {string}
804
+ */
805
+ ErrorEnum: "below_minimum" | "above_maximum" | "not_in_options" | "invalid_type" | "invalid_format" | "mandatory_missing" | "duplicate_slug" | "unknown_feature_type" | "not_allowed" | "unknown_feature" | "description_too_short" | "description_too_long" | "invalid_config" | "min_greater_than_max" | "empty_options";
806
+ /** @description Feature serializer with polymorphic config support. */
807
+ Feature: {
808
+ readonly id: number;
809
+ name: string;
810
+ slug?: string;
811
+ icon?: string;
812
+ comment?: string;
813
+ readonly config: Omit<components["schemas"]["FeatureConfig"], "type">;
814
+ mandatory?: boolean;
815
+ show_as_badge?: boolean;
816
+ show_at_title?: boolean;
817
+ /**
818
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
819
+ *
820
+ * * `all` - All (title + options)
821
+ * * `title` - Title only
822
+ * * `none` - None
823
+ */
824
+ translate?: components["schemas"]["Translate2c2Enum"];
825
+ /** Parent */
826
+ tn_parent?: number | null;
827
+ /**
828
+ * Priority
829
+ * Format: int64
830
+ */
831
+ tn_priority?: number;
832
+ /** Ancestors pks */
833
+ readonly tn_ancestors_pks: string;
834
+ /** Children pks */
835
+ readonly tn_children_pks: string;
836
+ /** Descendants pks */
837
+ readonly tn_descendants_pks: string;
838
+ /** Siblings pks */
839
+ readonly tn_siblings_pks: string;
840
+ };
841
+ /** @description Serializer for bulk add/update operations — id is required. */
842
+ FeatureBulk: {
843
+ id: number;
844
+ config?: components["schemas"]["FeatureConfig"];
845
+ readonly revision: number;
846
+ deleted?: boolean;
847
+ /** Ancestors pks */
848
+ readonly tn_ancestors_pks: string;
849
+ /** Ancestors count */
850
+ readonly tn_ancestors_count: number;
851
+ /** Children pks */
852
+ readonly tn_children_pks: string;
853
+ /** Children count */
854
+ readonly tn_children_count: number;
855
+ /** Depth */
856
+ readonly tn_depth: number;
857
+ /** Descendants pks */
858
+ readonly tn_descendants_pks: string;
859
+ /** Descendants count */
860
+ readonly tn_descendants_count: number;
861
+ /** Index */
862
+ readonly tn_index: number;
863
+ /** Level */
864
+ readonly tn_level: number;
865
+ /**
866
+ * Priority
867
+ * Format: int64
868
+ */
869
+ tn_priority?: number;
870
+ /** Order */
871
+ readonly tn_order: number;
872
+ /** Siblings pks */
873
+ readonly tn_siblings_pks: string;
874
+ /** Siblings count */
875
+ readonly tn_siblings_count: number;
876
+ name: string;
877
+ slug?: string;
878
+ icon?: string;
879
+ comment?: string;
880
+ mandatory?: boolean;
881
+ show_as_badge?: boolean;
882
+ show_at_title?: boolean;
883
+ /**
884
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
885
+ *
886
+ * * `all` - All (title + options)
887
+ * * `title` - Title only
888
+ * * `none` - None
889
+ */
890
+ translate?: components["schemas"]["Translate2c2Enum"];
891
+ /** @description Test/scratch data — excluded from export_catalog fixtures. */
892
+ is_test?: boolean;
893
+ /** Parent */
894
+ tn_parent?: number | null;
895
+ };
896
+ /** @description Compact feature serializer for list endpoints and embedded feature data. */
897
+ FeatureCompact: {
898
+ readonly id: number;
899
+ /** Parent */
900
+ tn_parent?: number | null;
901
+ name: string;
902
+ slug?: string;
903
+ icon?: string;
904
+ comment?: string;
905
+ readonly config: Omit<components["schemas"]["FeatureConfig"], "type">;
906
+ mandatory?: boolean;
907
+ show_as_badge?: boolean;
908
+ show_at_title?: boolean;
909
+ /**
910
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
911
+ *
912
+ * * `all` - All (title + options)
913
+ * * `title` - Title only
914
+ * * `none` - None
915
+ */
916
+ translate?: components["schemas"]["Translate2c2Enum"];
917
+ };
918
+ FeatureConfig: components["schemas"]["IntConfig"] | components["schemas"]["FloatConfig"] | components["schemas"]["StringConfig"] | components["schemas"]["BoolConfig"] | components["schemas"]["HexColorConfig"] | components["schemas"]["SelectConfig"] | components["schemas"]["DateConfig"] | components["schemas"]["HeaderConfig"] | components["schemas"]["HierarchicalSelectConfig"] | components["schemas"]["ConvertibleUnitConfig"];
919
+ FeatureConvertType: {
920
+ /** @description New config after conversion */
921
+ config: Omit<components["schemas"]["FeatureConfig"], "type">;
922
+ /**
923
+ * @description Whether to propagate to all descendants
924
+ * @default false
925
+ */
926
+ propagate: boolean;
927
+ };
928
+ /** @description Serializer for creating/updating features with polymorphic config. */
929
+ FeatureCreateUpdate: {
930
+ readonly id: number;
931
+ config?: components["schemas"]["FeatureConfig"];
932
+ readonly revision: number;
933
+ deleted?: boolean;
934
+ /** Ancestors pks */
935
+ readonly tn_ancestors_pks: string;
936
+ /** Ancestors count */
937
+ readonly tn_ancestors_count: number;
938
+ /** Children pks */
939
+ readonly tn_children_pks: string;
940
+ /** Children count */
941
+ readonly tn_children_count: number;
942
+ /** Depth */
943
+ readonly tn_depth: number;
944
+ /** Descendants pks */
945
+ readonly tn_descendants_pks: string;
946
+ /** Descendants count */
947
+ readonly tn_descendants_count: number;
948
+ /** Index */
949
+ readonly tn_index: number;
950
+ /** Level */
951
+ readonly tn_level: number;
952
+ /**
953
+ * Priority
954
+ * Format: int64
955
+ */
956
+ tn_priority?: number;
957
+ /** Order */
958
+ readonly tn_order: number;
959
+ /** Siblings pks */
960
+ readonly tn_siblings_pks: string;
961
+ /** Siblings count */
962
+ readonly tn_siblings_count: number;
963
+ name: string;
964
+ slug?: string;
965
+ icon?: string;
966
+ comment?: string;
967
+ mandatory?: boolean;
968
+ show_as_badge?: boolean;
969
+ show_at_title?: boolean;
970
+ /**
971
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
972
+ *
973
+ * * `all` - All (title + options)
974
+ * * `title` - Title only
975
+ * * `none` - None
976
+ */
977
+ translate?: components["schemas"]["Translate2c2Enum"];
978
+ /** @description Test/scratch data — excluded from export_catalog fixtures. */
979
+ is_test?: boolean;
980
+ /** Parent */
981
+ tn_parent?: number | null;
982
+ };
983
+ FeatureDto: components["schemas"]["IntDto"] | components["schemas"]["FloatDto"] | components["schemas"]["StringDto"] | components["schemas"]["BoolDto"] | components["schemas"]["HexColorDto"] | components["schemas"]["SelectDto"] | components["schemas"]["DateDto"] | components["schemas"]["HeaderDto"] | components["schemas"]["HierarchicalSelectDto"] | components["schemas"]["ConvertibleUnitDto"];
984
+ /** @description Request payload for applying feature editor changes. */
985
+ FeatureEditorApply: {
986
+ features: components["schemas"]["FeatureEditorItem"][];
987
+ draft?: string | null;
988
+ base_revision: number;
989
+ };
990
+ /** @description Draft serializer for feature editor. */
991
+ FeatureEditorDraft: {
992
+ /** @default */
993
+ draft: string;
994
+ };
995
+ /** @description Feature editor draft state. */
996
+ FeatureEditorDraftResponse: {
997
+ /**
998
+ * @description JSON-encoded draft string, null if no draft saved
999
+ * @example {
1000
+ * "features": []
1001
+ * }
1002
+ */
1003
+ draft: string | null;
1004
+ };
1005
+ /**
1006
+ * @description Writable feature payload for the category feature editor.
1007
+ *
1008
+ * Uses Serializer instead of ModelSerializer to avoid model-level
1009
+ * validation (like the unique slug constraint) since this is just a data
1010
+ * container for the editor.
1011
+ */
1012
+ FeatureEditorFeature: {
1013
+ id?: number | null;
1014
+ /** @default */
1015
+ name: string;
1016
+ /** @default */
1017
+ slug: string;
1018
+ icon?: string | null;
1019
+ /** @default */
1020
+ comment: string;
1021
+ config?: components["schemas"]["FeatureConfig"];
1022
+ /** @default false */
1023
+ mandatory: boolean;
1024
+ /** @default false */
1025
+ show_as_badge: boolean;
1026
+ /** @default false */
1027
+ show_at_title: boolean;
1028
+ /**
1029
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
1030
+ *
1031
+ * * `all` - all
1032
+ * * `title` - title
1033
+ * * `none` - none
1034
+ * @default all
1035
+ */
1036
+ translate: components["schemas"]["FeatureEditorFeatureTranslateEnum"];
1037
+ tn_parent?: number | null;
1038
+ /** @default 0 */
1039
+ tn_priority: number;
1040
+ };
1041
+ /**
1042
+ * @description * `all` - all
1043
+ * * `title` - title
1044
+ * * `none` - none
1045
+ * @enum {string}
1046
+ */
1047
+ FeatureEditorFeatureTranslateEnum: "all" | "title" | "none";
1048
+ /** @description Item from the feature editor list. */
1049
+ FeatureEditorItem: {
1050
+ order: number;
1051
+ action: components["schemas"]["ActionEnum"];
1052
+ feature: components["schemas"]["FeatureEditorFeature"];
1053
+ replace_with?: number | null;
1054
+ };
1055
+ /** @description Response serializer for feature editor state. */
1056
+ FeatureEditorState: {
1057
+ features: components["schemas"]["FeatureEditorStateItem"][];
1058
+ available_root_features: components["schemas"]["Feature"][];
1059
+ /** @default */
1060
+ draft: string;
1061
+ revision?: number;
1062
+ };
1063
+ /** @description Single item in feature editor state. */
1064
+ FeatureEditorStateItem: {
1065
+ order: number;
1066
+ available_actions: components["schemas"]["AvailableActionsEnum"][];
1067
+ action: components["schemas"]["ActionEnum"];
1068
+ feature: components["schemas"]["Feature"];
1069
+ parent_feature?: components["schemas"]["Feature"] | null;
1070
+ };
1071
+ /** @description Serializer for FeatureValidationResult. */
1072
+ FeatureValidationResult: {
1073
+ id?: unknown;
1074
+ slug: string;
1075
+ status: components["schemas"]["StatusEnum"];
1076
+ error?: (components["schemas"]["ErrorEnum"] | components["schemas"]["NullEnum"]) | null;
1077
+ ref_value?: unknown;
1078
+ message?: string | null;
1079
+ localizable_error?: string | null;
1080
+ params?: {
1081
+ [key: string]: unknown;
1082
+ } | null;
1083
+ warnings?: string[] | null;
1084
+ };
1085
+ /** @description Serializer for float feature configuration. */
1086
+ FloatConfig: {
1087
+ /**
1088
+ * @description discriminator enum property added by openapi-typescript
1089
+ * @enum {string}
1090
+ */
1091
+ type: "FloatConfig";
1092
+ /** Format: double */
1093
+ min?: number | null;
1094
+ /** Format: double */
1095
+ max?: number | null;
1096
+ precision?: number;
1097
+ options?: number[] | null;
1098
+ allowCustom?: boolean;
1099
+ prefix?: string | null;
1100
+ postfix?: string | null;
1101
+ postfix1000?: string | null;
1102
+ placeholder?: string | null;
1103
+ };
1104
+ /** @description Serializer for float feature DTO. */
1105
+ FloatDto: {
1106
+ /**
1107
+ * @description discriminator enum property added by openapi-typescript
1108
+ * @enum {string}
1109
+ */
1110
+ type: "FloatDto";
1111
+ /** Format: double */
1112
+ value?: number;
1113
+ };
1114
+ /** @description Serializer for header feature configuration. */
1115
+ HeaderConfig: {
1116
+ /**
1117
+ * @description discriminator enum property added by openapi-typescript
1118
+ * @enum {string}
1119
+ */
1120
+ type: "HeaderConfig";
1121
+ style?: components["schemas"]["StyleEnum"];
1122
+ };
1123
+ /** @description Serializer for header feature DTO. */
1124
+ HeaderDto: {
1125
+ /**
1126
+ * @description discriminator enum property added by openapi-typescript
1127
+ * @enum {string}
1128
+ */
1129
+ type: "HeaderDto";
1130
+ value?: string | null;
1131
+ };
1132
+ /** @description Serializer for hex color feature configuration. */
1133
+ HexColorConfig: {
1134
+ /**
1135
+ * @description discriminator enum property added by openapi-typescript
1136
+ * @enum {string}
1137
+ */
1138
+ type: "HexColorConfig";
1139
+ options?: components["schemas"]["HexColorOption"][];
1140
+ allowCustom?: boolean;
1141
+ };
1142
+ /** @description Serializer for hex color feature DTO. */
1143
+ HexColorDto: {
1144
+ value?: components["schemas"]["HexColorValue"] | null;
1145
+ /**
1146
+ * @description discriminator enum property added by openapi-typescript
1147
+ * @enum {string}
1148
+ */
1149
+ type: "HexColorDto";
1150
+ };
1151
+ HexColorOption: {
1152
+ simple: string;
1153
+ hex?: string | null;
1154
+ label?: string | null;
1155
+ };
1156
+ /** @description Serializer for hex color value. */
1157
+ HexColorValue: {
1158
+ simple: string;
1159
+ hex?: string | null;
1160
+ label?: string | null;
1161
+ };
1162
+ HierarchicalOption: {
1163
+ value: string;
1164
+ label?: string | null;
1165
+ icon?: string | null;
1166
+ childrenTitle?: string | null;
1167
+ children?: components["schemas"]["HierarchicalOption"][];
1168
+ };
1169
+ /** @description Serializer for hierarchical select feature configuration. */
1170
+ HierarchicalSelectConfig: {
1171
+ /**
1172
+ * @description discriminator enum property added by openapi-typescript
1173
+ * @enum {string}
1174
+ */
1175
+ type: "HierarchicalSelectConfig";
1176
+ options?: components["schemas"]["HierarchicalOption"][];
1177
+ required?: boolean;
1178
+ minDepth?: number;
1179
+ maxDepth?: number | null;
1180
+ translatable_options?: boolean;
1181
+ };
1182
+ /** @description Serializer for hierarchical select feature DTO. */
1183
+ HierarchicalSelectDto: {
1184
+ /**
1185
+ * @description discriminator enum property added by openapi-typescript
1186
+ * @enum {string}
1187
+ */
1188
+ type: "HierarchicalSelectDto";
1189
+ value?: string[];
1190
+ };
1191
+ /** @description Serializer for integer feature configuration. */
1192
+ IntConfig: {
1193
+ /**
1194
+ * @description discriminator enum property added by openapi-typescript
1195
+ * @enum {string}
1196
+ */
1197
+ type: "IntConfig";
1198
+ min?: number | null;
1199
+ max?: number | null;
1200
+ options?: number[] | null;
1201
+ allowCustom?: boolean;
1202
+ prefix?: string | null;
1203
+ postfix?: string | null;
1204
+ postfix1000?: string | null;
1205
+ placeholder?: string | null;
1206
+ precision?: number;
1207
+ };
1208
+ /** @description Serializer for integer feature DTO. */
1209
+ IntDto: {
1210
+ /**
1211
+ * @description discriminator enum property added by openapi-typescript
1212
+ * @enum {string}
1213
+ */
1214
+ type: "IntDto";
1215
+ value?: number;
1216
+ };
1217
+ /** @description Serializer for /revision endpoint response. */
1218
+ MaxRevision: {
1219
+ /** @description Current maximum revision number */
1220
+ revision: number;
1221
+ };
1222
+ /** @enum {unknown} */
1223
+ NullEnum: null;
1224
+ PaginatedCategoryList: {
1225
+ pagination: {
1226
+ /** @description Current page number */
1227
+ page: number;
1228
+ /** @description Number of items per page */
1229
+ page_size: number;
1230
+ /** @description Total number of pages */
1231
+ total_pages: number;
1232
+ /** @description Total number of items */
1233
+ total_count: number;
1234
+ /** @description Whether there is a next page */
1235
+ has_next: boolean;
1236
+ /** @description Whether there is a previous page */
1237
+ has_previous: boolean;
1238
+ };
1239
+ revisions: {
1240
+ /** @description Minimum revision in current response */
1241
+ min: number | null;
1242
+ /** @description Maximum revision in current response */
1243
+ max: number | null;
1244
+ /** @description Global maximum revision in the table */
1245
+ global_max: number;
1246
+ /** @description IDs of soft-deleted items since min_revision */
1247
+ deleted_ids: number[];
1248
+ };
1249
+ results: components["schemas"]["Category"][];
1250
+ };
1251
+ PaginatedFeatureCompactList: {
1252
+ pagination: {
1253
+ /** @description Current page number */
1254
+ page: number;
1255
+ /** @description Number of items per page */
1256
+ page_size: number;
1257
+ /** @description Total number of pages */
1258
+ total_pages: number;
1259
+ /** @description Total number of items */
1260
+ total_count: number;
1261
+ /** @description Whether there is a next page */
1262
+ has_next: boolean;
1263
+ /** @description Whether there is a previous page */
1264
+ has_previous: boolean;
1265
+ };
1266
+ revisions: {
1267
+ /** @description Minimum revision in current response */
1268
+ min: number | null;
1269
+ /** @description Maximum revision in current response */
1270
+ max: number | null;
1271
+ /** @description Global maximum revision in the table */
1272
+ global_max: number;
1273
+ /** @description IDs of soft-deleted items since min_revision */
1274
+ deleted_ids: number[];
1275
+ };
1276
+ results: components["schemas"]["FeatureCompact"][];
1277
+ };
1278
+ /** @description Category serializer with feature references and revision tracking. */
1279
+ PatchedCategory: {
1280
+ readonly id?: number;
1281
+ name?: string;
1282
+ slug?: string;
1283
+ /** @description CDN catalog icon reference (opaque string, e.g. catalog/asset-name) */
1284
+ catalog_icon?: string;
1285
+ /** @description CDN carousel icon reference (opaque string, e.g. carousel/asset-name) */
1286
+ carousel_icon?: string;
1287
+ /** @description Whether this category appears in the carousel */
1288
+ carousel_enabled?: boolean;
1289
+ /** @description Whether this category is active */
1290
+ active?: boolean;
1291
+ readonly features?: number[];
1292
+ /** @description If True, category name is a translation key */
1293
+ translatable?: boolean;
1294
+ /** Parent */
1295
+ tn_parent?: number | null;
1296
+ /**
1297
+ * Priority
1298
+ * Format: int64
1299
+ */
1300
+ tn_priority?: number;
1301
+ /** Ancestors pks */
1302
+ readonly tn_ancestors_pks?: string;
1303
+ /** Children pks */
1304
+ readonly tn_children_pks?: string;
1305
+ readonly revision?: number;
1306
+ deleted?: boolean;
1307
+ };
1308
+ /** @description Serializer for creating/updating features with polymorphic config. */
1309
+ PatchedFeatureCreateUpdate: {
1310
+ readonly id?: number;
1311
+ config?: components["schemas"]["FeatureConfig"];
1312
+ readonly revision?: number;
1313
+ deleted?: boolean;
1314
+ /** Ancestors pks */
1315
+ readonly tn_ancestors_pks?: string;
1316
+ /** Ancestors count */
1317
+ readonly tn_ancestors_count?: number;
1318
+ /** Children pks */
1319
+ readonly tn_children_pks?: string;
1320
+ /** Children count */
1321
+ readonly tn_children_count?: number;
1322
+ /** Depth */
1323
+ readonly tn_depth?: number;
1324
+ /** Descendants pks */
1325
+ readonly tn_descendants_pks?: string;
1326
+ /** Descendants count */
1327
+ readonly tn_descendants_count?: number;
1328
+ /** Index */
1329
+ readonly tn_index?: number;
1330
+ /** Level */
1331
+ readonly tn_level?: number;
1332
+ /**
1333
+ * Priority
1334
+ * Format: int64
1335
+ */
1336
+ tn_priority?: number;
1337
+ /** Order */
1338
+ readonly tn_order?: number;
1339
+ /** Siblings pks */
1340
+ readonly tn_siblings_pks?: string;
1341
+ /** Siblings count */
1342
+ readonly tn_siblings_count?: number;
1343
+ name?: string;
1344
+ slug?: string;
1345
+ icon?: string;
1346
+ comment?: string;
1347
+ mandatory?: boolean;
1348
+ show_as_badge?: boolean;
1349
+ show_at_title?: boolean;
1350
+ /**
1351
+ * @description What to translate: 'all' = title + options, 'title' = title only, 'none' = nothing
1352
+ *
1353
+ * * `all` - All (title + options)
1354
+ * * `title` - Title only
1355
+ * * `none` - None
1356
+ */
1357
+ translate?: components["schemas"]["Translate2c2Enum"];
1358
+ /** @description Test/scratch data — excluded from export_catalog fixtures. */
1359
+ is_test?: boolean;
1360
+ /** Parent */
1361
+ tn_parent?: number | null;
1362
+ };
1363
+ /**
1364
+ * @description * `year` - year
1365
+ * * `month` - month
1366
+ * * `date` - date
1367
+ * * `datetime` - datetime
1368
+ * @enum {string}
1369
+ */
1370
+ PrecisionEnum: "year" | "month" | "date" | "datetime";
1371
+ /** @description Serializer for select feature configuration. */
1372
+ SelectConfig: {
1373
+ /**
1374
+ * @description discriminator enum property added by openapi-typescript
1375
+ * @enum {string}
1376
+ */
1377
+ type: "SelectConfig";
1378
+ options?: components["schemas"]["SelectOption"][];
1379
+ uiStyle?: components["schemas"]["UiStyleEnum"];
1380
+ minSelected?: number;
1381
+ maxSelected?: number | null;
1382
+ lockUserInput?: boolean;
1383
+ translatable_options?: boolean;
1384
+ };
1385
+ /** @description Serializer for select feature DTO. */
1386
+ SelectDto: {
1387
+ /**
1388
+ * @description discriminator enum property added by openapi-typescript
1389
+ * @enum {string}
1390
+ */
1391
+ type: "SelectDto";
1392
+ value?: string[];
1393
+ };
1394
+ SelectOption: {
1395
+ value: string;
1396
+ label: string;
1397
+ icon?: string | null;
1398
+ default?: boolean;
1399
+ };
1400
+ /**
1401
+ * @description * `ok` - ok
1402
+ * * `validation_failed` - validation_failed
1403
+ * @enum {string}
1404
+ */
1405
+ StatusEnum: "ok" | "validation_failed";
1406
+ /** @description Serializer for string feature configuration. */
1407
+ StringConfig: {
1408
+ /**
1409
+ * @description discriminator enum property added by openapi-typescript
1410
+ * @enum {string}
1411
+ */
1412
+ type: "StringConfig";
1413
+ minLength?: number | null;
1414
+ maxLength?: number | null;
1415
+ pattern?: string | null;
1416
+ options?: string[] | null;
1417
+ allowCustom?: boolean;
1418
+ prefix?: string | null;
1419
+ postfix?: string | null;
1420
+ placeholder?: string | null;
1421
+ translatable_options?: boolean;
1422
+ multiline?: boolean;
1423
+ };
1424
+ /** @description Serializer for string feature DTO. */
1425
+ StringDto: {
1426
+ /**
1427
+ * @description discriminator enum property added by openapi-typescript
1428
+ * @enum {string}
1429
+ */
1430
+ type: "StringDto";
1431
+ value?: string;
1432
+ };
1433
+ /**
1434
+ * @description * `l` - l
1435
+ * * `m` - m
1436
+ * @enum {string}
1437
+ */
1438
+ StyleEnum: "l" | "m";
1439
+ /**
1440
+ * @description * `all` - All (title + options)
1441
+ * * `title` - Title only
1442
+ * * `none` - None
1443
+ * @enum {string}
1444
+ */
1445
+ Translate2c2Enum: "all" | "title" | "none";
1446
+ /**
1447
+ * @description * `convertible_unit` - convertible_unit
1448
+ * @enum {string}
1449
+ */
1450
+ Type104Enum: "convertible_unit";
1451
+ /**
1452
+ * @description * `date` - date
1453
+ * @enum {string}
1454
+ */
1455
+ Type37eEnum: "date";
1456
+ /**
1457
+ * @description * `header` - header
1458
+ * @enum {string}
1459
+ */
1460
+ Type3feEnum: "header";
1461
+ /**
1462
+ * @description * `hex_color` - hex_color
1463
+ * @enum {string}
1464
+ */
1465
+ Type515Enum: "hex_color";
1466
+ /**
1467
+ * @description * `hierarchical_select` - hierarchical_select
1468
+ * @enum {string}
1469
+ */
1470
+ Type5beEnum: "hierarchical_select";
1471
+ /**
1472
+ * @description * `select` - select
1473
+ * @enum {string}
1474
+ */
1475
+ Type63eEnum: "select";
1476
+ /**
1477
+ * @description * `string` - string
1478
+ * @enum {string}
1479
+ */
1480
+ Type839Enum: "string";
1481
+ /**
1482
+ * @description * `int` - int
1483
+ * @enum {string}
1484
+ */
1485
+ TypeC1bEnum: "int";
1486
+ /**
1487
+ * @description * `float` - float
1488
+ * @enum {string}
1489
+ */
1490
+ TypeD7cEnum: "float";
1491
+ /**
1492
+ * @description * `bool` - bool
1493
+ * @enum {string}
1494
+ */
1495
+ TypeE3eEnum: "bool";
1496
+ /**
1497
+ * @description * `dropdown` - dropdown
1498
+ * * `checkboxes` - checkboxes
1499
+ * * `chips` - chips
1500
+ * @enum {string}
1501
+ */
1502
+ UiStyleEnum: "dropdown" | "checkboxes" | "chips";
1503
+ /** @description Restored soft-deleted categories. */
1504
+ UndeleteResponse: {
1505
+ /**
1506
+ * @description List of restored category IDs
1507
+ * @example [
1508
+ * 1,
1509
+ * 2,
1510
+ * 3
1511
+ * ]
1512
+ */
1513
+ restored: number[];
1514
+ };
1515
+ /** @description Request serializer for validate_dto endpoint. */
1516
+ ValidateDtoRequest: {
1517
+ /** @description Features DTO object keyed by feature slug: {slug: {type, value, ...}} */
1518
+ features: {
1519
+ [key: string]: components["schemas"]["FeatureDto"];
1520
+ };
1521
+ };
1522
+ /** @description Serializer for ValidationBatchResult. */
1523
+ ValidationBatchResult: {
1524
+ valid: boolean;
1525
+ results: components["schemas"]["FeatureValidationResult"][];
1526
+ };
1527
+ };
1528
+ responses: never;
1529
+ parameters: never;
1530
+ requestBodies: never;
1531
+ headers: never;
1532
+ pathItems: never;
1533
+ }
1534
+ export type $defs = Record<string, never>;
1535
+ export interface operations {
1536
+ categories_api_v1_categories_list: {
1537
+ parameters: {
1538
+ query?: {
1539
+ /** @description Include soft-deleted items in response. Default: true */
1540
+ include_deleted?: boolean;
1541
+ /** @description Return objects with revision less than or equal to this value (inclusive). Default: no limit */
1542
+ max_revision?: number;
1543
+ /** @description Return objects with revision greater than this value (exclusive). Omit for initial sync to get all items. */
1544
+ min_revision?: number;
1545
+ /** @description Page number. Default: 1 */
1546
+ page?: number;
1547
+ /** @description Number of items per page. Default: 100, Max: 1000 */
1548
+ page_size?: number;
1549
+ };
1550
+ header?: never;
1551
+ path?: never;
1552
+ cookie?: never;
1553
+ };
1554
+ requestBody?: never;
1555
+ responses: {
1556
+ 200: {
1557
+ headers: {
1558
+ [name: string]: unknown;
1559
+ };
1560
+ content: {
1561
+ "application/json": components["schemas"]["PaginatedCategoryList"];
1562
+ };
1563
+ };
1564
+ };
1565
+ };
1566
+ categories_api_v1_categories_create: {
1567
+ parameters: {
1568
+ query?: never;
1569
+ header?: never;
1570
+ path?: never;
1571
+ cookie?: never;
1572
+ };
1573
+ requestBody: {
1574
+ content: {
1575
+ "application/json": components["schemas"]["Category"];
1576
+ "application/x-www-form-urlencoded": components["schemas"]["Category"];
1577
+ "multipart/form-data": components["schemas"]["Category"];
1578
+ };
1579
+ };
1580
+ responses: {
1581
+ 201: {
1582
+ headers: {
1583
+ [name: string]: unknown;
1584
+ };
1585
+ content: {
1586
+ "application/json": components["schemas"]["Category"];
1587
+ };
1588
+ };
1589
+ };
1590
+ };
1591
+ categories_api_v1_categories_retrieve: {
1592
+ parameters: {
1593
+ query?: never;
1594
+ header?: never;
1595
+ path: {
1596
+ /** @description A unique integer value identifying this category. */
1597
+ id: number;
1598
+ };
1599
+ cookie?: never;
1600
+ };
1601
+ requestBody?: never;
1602
+ responses: {
1603
+ 200: {
1604
+ headers: {
1605
+ [name: string]: unknown;
1606
+ };
1607
+ content: {
1608
+ "application/json": components["schemas"]["Category"];
1609
+ };
1610
+ };
1611
+ };
1612
+ };
1613
+ categories_api_v1_categories_update: {
1614
+ parameters: {
1615
+ query?: never;
1616
+ header?: never;
1617
+ path: {
1618
+ /** @description A unique integer value identifying this category. */
1619
+ id: number;
1620
+ };
1621
+ cookie?: never;
1622
+ };
1623
+ requestBody: {
1624
+ content: {
1625
+ "application/json": components["schemas"]["Category"];
1626
+ "application/x-www-form-urlencoded": components["schemas"]["Category"];
1627
+ "multipart/form-data": components["schemas"]["Category"];
1628
+ };
1629
+ };
1630
+ responses: {
1631
+ 200: {
1632
+ headers: {
1633
+ [name: string]: unknown;
1634
+ };
1635
+ content: {
1636
+ "application/json": components["schemas"]["Category"];
1637
+ };
1638
+ };
1639
+ };
1640
+ };
1641
+ categories_api_v1_categories_destroy: {
1642
+ parameters: {
1643
+ query?: never;
1644
+ header?: never;
1645
+ path: {
1646
+ /** @description A unique integer value identifying this category. */
1647
+ id: number;
1648
+ };
1649
+ cookie?: never;
1650
+ };
1651
+ requestBody?: never;
1652
+ responses: {
1653
+ /** @description No response body */
1654
+ 204: {
1655
+ headers: {
1656
+ [name: string]: unknown;
1657
+ };
1658
+ content?: never;
1659
+ };
1660
+ };
1661
+ };
1662
+ categories_api_v1_categories_partial_update: {
1663
+ parameters: {
1664
+ query?: never;
1665
+ header?: never;
1666
+ path: {
1667
+ /** @description A unique integer value identifying this category. */
1668
+ id: number;
1669
+ };
1670
+ cookie?: never;
1671
+ };
1672
+ requestBody?: {
1673
+ content: {
1674
+ "application/json": components["schemas"]["PatchedCategory"];
1675
+ "application/x-www-form-urlencoded": components["schemas"]["PatchedCategory"];
1676
+ "multipart/form-data": components["schemas"]["PatchedCategory"];
1677
+ };
1678
+ };
1679
+ responses: {
1680
+ 200: {
1681
+ headers: {
1682
+ [name: string]: unknown;
1683
+ };
1684
+ content: {
1685
+ "application/json": components["schemas"]["Category"];
1686
+ };
1687
+ };
1688
+ };
1689
+ };
1690
+ categories_api_v1_categories_children_list: {
1691
+ parameters: {
1692
+ query?: never;
1693
+ header?: never;
1694
+ path: {
1695
+ /** @description A unique integer value identifying this category. */
1696
+ id: number;
1697
+ };
1698
+ cookie?: never;
1699
+ };
1700
+ requestBody?: never;
1701
+ responses: {
1702
+ 200: {
1703
+ headers: {
1704
+ [name: string]: unknown;
1705
+ };
1706
+ content: {
1707
+ "application/json": components["schemas"]["Category"][];
1708
+ };
1709
+ };
1710
+ };
1711
+ };
1712
+ categories_api_v1_categories_deleted_children_list: {
1713
+ parameters: {
1714
+ query?: never;
1715
+ header?: never;
1716
+ path: {
1717
+ /** @description A unique integer value identifying this category. */
1718
+ id: number;
1719
+ };
1720
+ cookie?: never;
1721
+ };
1722
+ requestBody?: never;
1723
+ responses: {
1724
+ 200: {
1725
+ headers: {
1726
+ [name: string]: unknown;
1727
+ };
1728
+ content: {
1729
+ "application/json": components["schemas"]["Category"][];
1730
+ };
1731
+ };
1732
+ };
1733
+ };
1734
+ categories_api_v1_categories_feature_editor_retrieve: {
1735
+ parameters: {
1736
+ query?: never;
1737
+ header?: never;
1738
+ path: {
1739
+ /** @description A unique integer value identifying this category. */
1740
+ id: number;
1741
+ };
1742
+ cookie?: never;
1743
+ };
1744
+ requestBody?: never;
1745
+ responses: {
1746
+ 200: {
1747
+ headers: {
1748
+ [name: string]: unknown;
1749
+ };
1750
+ content: {
1751
+ "application/json": components["schemas"]["FeatureEditorState"];
1752
+ };
1753
+ };
1754
+ };
1755
+ };
1756
+ categories_api_v1_categories_feature_editor_apply_create: {
1757
+ parameters: {
1758
+ query?: never;
1759
+ header?: never;
1760
+ path: {
1761
+ /** @description A unique integer value identifying this category. */
1762
+ id: number;
1763
+ };
1764
+ cookie?: never;
1765
+ };
1766
+ requestBody: {
1767
+ content: {
1768
+ "application/json": components["schemas"]["FeatureEditorApply"];
1769
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureEditorApply"];
1770
+ "multipart/form-data": components["schemas"]["FeatureEditorApply"];
1771
+ };
1772
+ };
1773
+ responses: {
1774
+ 200: {
1775
+ headers: {
1776
+ [name: string]: unknown;
1777
+ };
1778
+ content: {
1779
+ "application/json": components["schemas"]["FeatureEditorState"];
1780
+ };
1781
+ };
1782
+ };
1783
+ };
1784
+ categories_api_v1_categories_feature_editor_draft_create: {
1785
+ parameters: {
1786
+ query?: never;
1787
+ header?: never;
1788
+ path: {
1789
+ /** @description A unique integer value identifying this category. */
1790
+ id: number;
1791
+ };
1792
+ cookie?: never;
1793
+ };
1794
+ requestBody?: {
1795
+ content: {
1796
+ "application/json": components["schemas"]["FeatureEditorDraft"];
1797
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureEditorDraft"];
1798
+ "multipart/form-data": components["schemas"]["FeatureEditorDraft"];
1799
+ };
1800
+ };
1801
+ responses: {
1802
+ 200: {
1803
+ headers: {
1804
+ [name: string]: unknown;
1805
+ };
1806
+ content: {
1807
+ "application/json": components["schemas"]["FeatureEditorDraftResponse"];
1808
+ };
1809
+ };
1810
+ };
1811
+ };
1812
+ categories_api_v1_categories_features_list: {
1813
+ parameters: {
1814
+ query?: never;
1815
+ header?: never;
1816
+ path: {
1817
+ /** @description A unique integer value identifying this category. */
1818
+ id: number;
1819
+ };
1820
+ cookie?: never;
1821
+ };
1822
+ requestBody?: never;
1823
+ responses: {
1824
+ 200: {
1825
+ headers: {
1826
+ [name: string]: unknown;
1827
+ };
1828
+ content: {
1829
+ "application/json": components["schemas"]["FeatureCompact"][];
1830
+ };
1831
+ };
1832
+ };
1833
+ };
1834
+ categories_api_v1_categories_undelete_create: {
1835
+ parameters: {
1836
+ query?: never;
1837
+ header?: never;
1838
+ path: {
1839
+ /** @description A unique integer value identifying this category. */
1840
+ id: number;
1841
+ };
1842
+ cookie?: never;
1843
+ };
1844
+ requestBody: {
1845
+ content: {
1846
+ "application/json": components["schemas"]["Category"];
1847
+ "application/x-www-form-urlencoded": components["schemas"]["Category"];
1848
+ "multipart/form-data": components["schemas"]["Category"];
1849
+ };
1850
+ };
1851
+ responses: {
1852
+ 200: {
1853
+ headers: {
1854
+ [name: string]: unknown;
1855
+ };
1856
+ content: {
1857
+ "application/json": components["schemas"]["UndeleteResponse"];
1858
+ };
1859
+ };
1860
+ };
1861
+ };
1862
+ categories_api_v1_categories_validate_configs_retrieve: {
1863
+ parameters: {
1864
+ query?: never;
1865
+ header?: never;
1866
+ path: {
1867
+ /** @description A unique integer value identifying this category. */
1868
+ id: number;
1869
+ };
1870
+ cookie?: never;
1871
+ };
1872
+ requestBody?: never;
1873
+ responses: {
1874
+ 200: {
1875
+ headers: {
1876
+ [name: string]: unknown;
1877
+ };
1878
+ content: {
1879
+ "application/json": components["schemas"]["ValidationBatchResult"];
1880
+ };
1881
+ };
1882
+ };
1883
+ };
1884
+ categories_api_v1_categories_validate_dto_create: {
1885
+ parameters: {
1886
+ query?: never;
1887
+ header?: never;
1888
+ path: {
1889
+ /** @description A unique integer value identifying this category. */
1890
+ id: number;
1891
+ };
1892
+ cookie?: never;
1893
+ };
1894
+ requestBody: {
1895
+ content: {
1896
+ "application/json": components["schemas"]["ValidateDtoRequest"];
1897
+ "application/x-www-form-urlencoded": components["schemas"]["ValidateDtoRequest"];
1898
+ "multipart/form-data": components["schemas"]["ValidateDtoRequest"];
1899
+ };
1900
+ };
1901
+ responses: {
1902
+ 200: {
1903
+ headers: {
1904
+ [name: string]: unknown;
1905
+ };
1906
+ content: {
1907
+ "application/json": components["schemas"]["ValidationBatchResult"];
1908
+ };
1909
+ };
1910
+ };
1911
+ };
1912
+ categories_api_v1_categories_bulk_commands_create: {
1913
+ parameters: {
1914
+ query?: never;
1915
+ header?: never;
1916
+ path?: never;
1917
+ cookie?: never;
1918
+ };
1919
+ requestBody: {
1920
+ content: {
1921
+ "application/json": components["schemas"]["CategoryBulkCommand"];
1922
+ "application/x-www-form-urlencoded": components["schemas"]["CategoryBulkCommand"];
1923
+ "multipart/form-data": components["schemas"]["CategoryBulkCommand"];
1924
+ };
1925
+ };
1926
+ responses: {
1927
+ 200: {
1928
+ headers: {
1929
+ [name: string]: unknown;
1930
+ };
1931
+ content: {
1932
+ "application/json": {
1933
+ [key: string]: unknown;
1934
+ };
1935
+ };
1936
+ };
1937
+ 400: {
1938
+ headers: {
1939
+ [name: string]: unknown;
1940
+ };
1941
+ content: {
1942
+ "application/json": {
1943
+ [key: string]: unknown;
1944
+ };
1945
+ };
1946
+ };
1947
+ };
1948
+ };
1949
+ categories_api_v1_categories_bulk_add_create: {
1950
+ parameters: {
1951
+ query?: never;
1952
+ header?: never;
1953
+ path?: never;
1954
+ cookie?: never;
1955
+ };
1956
+ requestBody: {
1957
+ content: {
1958
+ "application/json": components["schemas"]["CategoryBulk"][];
1959
+ "application/x-www-form-urlencoded": components["schemas"]["CategoryBulk"][];
1960
+ "multipart/form-data": components["schemas"]["CategoryBulk"][];
1961
+ };
1962
+ };
1963
+ responses: {
1964
+ 200: {
1965
+ headers: {
1966
+ [name: string]: unknown;
1967
+ };
1968
+ content: {
1969
+ "application/json": components["schemas"]["BulkUpdateResponse"];
1970
+ };
1971
+ };
1972
+ 400: {
1973
+ headers: {
1974
+ [name: string]: unknown;
1975
+ };
1976
+ content: {
1977
+ "application/json": {
1978
+ [key: string]: unknown;
1979
+ };
1980
+ };
1981
+ };
1982
+ };
1983
+ };
1984
+ categories_api_v1_categories_carousel_list: {
1985
+ parameters: {
1986
+ query?: never;
1987
+ header?: never;
1988
+ path?: never;
1989
+ cookie?: never;
1990
+ };
1991
+ requestBody?: never;
1992
+ responses: {
1993
+ 200: {
1994
+ headers: {
1995
+ [name: string]: unknown;
1996
+ };
1997
+ content: {
1998
+ "application/json": components["schemas"]["Category"][];
1999
+ };
2000
+ };
2001
+ };
2002
+ };
2003
+ "categories_api_v1_categories_data.json_retrieve": {
2004
+ parameters: {
2005
+ query: {
2006
+ /** @description Current revision number (for cache busting). Get from /revision endpoint. */
2007
+ revision: number;
2008
+ };
2009
+ header?: never;
2010
+ path?: never;
2011
+ cookie?: never;
2012
+ };
2013
+ requestBody?: never;
2014
+ responses: {
2015
+ 200: {
2016
+ headers: {
2017
+ [name: string]: unknown;
2018
+ };
2019
+ content: {
2020
+ "application/json": components["schemas"]["Category"];
2021
+ };
2022
+ };
2023
+ };
2024
+ };
2025
+ categories_api_v1_categories_revision_retrieve: {
2026
+ parameters: {
2027
+ query?: never;
2028
+ header?: never;
2029
+ path?: never;
2030
+ cookie?: never;
2031
+ };
2032
+ requestBody?: never;
2033
+ responses: {
2034
+ 200: {
2035
+ headers: {
2036
+ [name: string]: unknown;
2037
+ };
2038
+ content: {
2039
+ "application/json": components["schemas"]["MaxRevision"];
2040
+ };
2041
+ };
2042
+ };
2043
+ };
2044
+ collect_translation_keys: {
2045
+ parameters: {
2046
+ query?: never;
2047
+ header?: never;
2048
+ path?: never;
2049
+ cookie?: never;
2050
+ };
2051
+ requestBody?: never;
2052
+ responses: {
2053
+ 200: {
2054
+ headers: {
2055
+ [name: string]: unknown;
2056
+ };
2057
+ content: {
2058
+ "application/json": {
2059
+ [key: string]: unknown;
2060
+ };
2061
+ };
2062
+ };
2063
+ };
2064
+ };
2065
+ categories_api_v1_features_list: {
2066
+ parameters: {
2067
+ query?: {
2068
+ /** @description Include soft-deleted items in response. Default: true */
2069
+ include_deleted?: boolean;
2070
+ /** @description Return objects with revision less than or equal to this value (inclusive). Default: no limit */
2071
+ max_revision?: number;
2072
+ /** @description Return objects with revision greater than this value (exclusive). Omit for initial sync to get all items. */
2073
+ min_revision?: number;
2074
+ /** @description Page number. Default: 1 */
2075
+ page?: number;
2076
+ /** @description Number of items per page. Default: 100, Max: 1000 */
2077
+ page_size?: number;
2078
+ };
2079
+ header?: never;
2080
+ path?: never;
2081
+ cookie?: never;
2082
+ };
2083
+ requestBody?: never;
2084
+ responses: {
2085
+ 200: {
2086
+ headers: {
2087
+ [name: string]: unknown;
2088
+ };
2089
+ content: {
2090
+ "application/json": components["schemas"]["PaginatedFeatureCompactList"];
2091
+ };
2092
+ };
2093
+ };
2094
+ };
2095
+ categories_api_v1_features_create: {
2096
+ parameters: {
2097
+ query?: never;
2098
+ header?: never;
2099
+ path?: never;
2100
+ cookie?: never;
2101
+ };
2102
+ requestBody: {
2103
+ content: {
2104
+ "application/json": components["schemas"]["FeatureCreateUpdate"];
2105
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureCreateUpdate"];
2106
+ "multipart/form-data": components["schemas"]["FeatureCreateUpdate"];
2107
+ };
2108
+ };
2109
+ responses: {
2110
+ 201: {
2111
+ headers: {
2112
+ [name: string]: unknown;
2113
+ };
2114
+ content: {
2115
+ "application/json": components["schemas"]["Feature"];
2116
+ };
2117
+ };
2118
+ };
2119
+ };
2120
+ categories_api_v1_features_retrieve: {
2121
+ parameters: {
2122
+ query?: never;
2123
+ header?: never;
2124
+ path: {
2125
+ /** @description A unique integer value identifying this feature. */
2126
+ id: number;
2127
+ };
2128
+ cookie?: never;
2129
+ };
2130
+ requestBody?: never;
2131
+ responses: {
2132
+ 200: {
2133
+ headers: {
2134
+ [name: string]: unknown;
2135
+ };
2136
+ content: {
2137
+ "application/json": components["schemas"]["Feature"];
2138
+ };
2139
+ };
2140
+ };
2141
+ };
2142
+ categories_api_v1_features_update: {
2143
+ parameters: {
2144
+ query?: never;
2145
+ header?: never;
2146
+ path: {
2147
+ /** @description A unique integer value identifying this feature. */
2148
+ id: number;
2149
+ };
2150
+ cookie?: never;
2151
+ };
2152
+ requestBody: {
2153
+ content: {
2154
+ "application/json": components["schemas"]["FeatureCreateUpdate"];
2155
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureCreateUpdate"];
2156
+ "multipart/form-data": components["schemas"]["FeatureCreateUpdate"];
2157
+ };
2158
+ };
2159
+ responses: {
2160
+ 200: {
2161
+ headers: {
2162
+ [name: string]: unknown;
2163
+ };
2164
+ content: {
2165
+ "application/json": components["schemas"]["Feature"];
2166
+ };
2167
+ };
2168
+ };
2169
+ };
2170
+ categories_api_v1_features_destroy: {
2171
+ parameters: {
2172
+ query?: never;
2173
+ header?: never;
2174
+ path: {
2175
+ /** @description A unique integer value identifying this feature. */
2176
+ id: number;
2177
+ };
2178
+ cookie?: never;
2179
+ };
2180
+ requestBody?: never;
2181
+ responses: {
2182
+ /** @description No response body */
2183
+ 204: {
2184
+ headers: {
2185
+ [name: string]: unknown;
2186
+ };
2187
+ content?: never;
2188
+ };
2189
+ };
2190
+ };
2191
+ categories_api_v1_features_partial_update: {
2192
+ parameters: {
2193
+ query?: never;
2194
+ header?: never;
2195
+ path: {
2196
+ /** @description A unique integer value identifying this feature. */
2197
+ id: number;
2198
+ };
2199
+ cookie?: never;
2200
+ };
2201
+ requestBody?: {
2202
+ content: {
2203
+ "application/json": components["schemas"]["PatchedFeatureCreateUpdate"];
2204
+ "application/x-www-form-urlencoded": components["schemas"]["PatchedFeatureCreateUpdate"];
2205
+ "multipart/form-data": components["schemas"]["PatchedFeatureCreateUpdate"];
2206
+ };
2207
+ };
2208
+ responses: {
2209
+ 200: {
2210
+ headers: {
2211
+ [name: string]: unknown;
2212
+ };
2213
+ content: {
2214
+ "application/json": components["schemas"]["Feature"];
2215
+ };
2216
+ };
2217
+ };
2218
+ };
2219
+ categories_api_v1_features_convert_type_create: {
2220
+ parameters: {
2221
+ query?: never;
2222
+ header?: never;
2223
+ path: {
2224
+ /** @description A unique integer value identifying this feature. */
2225
+ id: number;
2226
+ };
2227
+ cookie?: never;
2228
+ };
2229
+ requestBody: {
2230
+ content: {
2231
+ "application/json": components["schemas"]["FeatureConvertType"];
2232
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureConvertType"];
2233
+ "multipart/form-data": components["schemas"]["FeatureConvertType"];
2234
+ };
2235
+ };
2236
+ responses: {
2237
+ 200: {
2238
+ headers: {
2239
+ [name: string]: unknown;
2240
+ };
2241
+ content: {
2242
+ "application/json": components["schemas"]["Feature"];
2243
+ };
2244
+ };
2245
+ };
2246
+ };
2247
+ categories_api_v1_features_bulk_add_create: {
2248
+ parameters: {
2249
+ query?: never;
2250
+ header?: never;
2251
+ path?: never;
2252
+ cookie?: never;
2253
+ };
2254
+ requestBody: {
2255
+ content: {
2256
+ "application/json": components["schemas"]["FeatureBulk"][];
2257
+ "application/x-www-form-urlencoded": components["schemas"]["FeatureBulk"][];
2258
+ "multipart/form-data": components["schemas"]["FeatureBulk"][];
2259
+ };
2260
+ };
2261
+ responses: {
2262
+ 200: {
2263
+ headers: {
2264
+ [name: string]: unknown;
2265
+ };
2266
+ content: {
2267
+ "application/json": components["schemas"]["BulkUpdateResponse"];
2268
+ };
2269
+ };
2270
+ 400: {
2271
+ headers: {
2272
+ [name: string]: unknown;
2273
+ };
2274
+ content: {
2275
+ "application/json": {
2276
+ [key: string]: unknown;
2277
+ };
2278
+ };
2279
+ };
2280
+ };
2281
+ };
2282
+ "categories_api_v1_features_data.json_retrieve": {
2283
+ parameters: {
2284
+ query: {
2285
+ /** @description Current revision number (for cache busting). Get from /revision endpoint. */
2286
+ revision: number;
2287
+ };
2288
+ header?: never;
2289
+ path?: never;
2290
+ cookie?: never;
2291
+ };
2292
+ requestBody?: never;
2293
+ responses: {
2294
+ 200: {
2295
+ headers: {
2296
+ [name: string]: unknown;
2297
+ };
2298
+ content: {
2299
+ "application/json": components["schemas"]["Feature"];
2300
+ };
2301
+ };
2302
+ };
2303
+ };
2304
+ categories_api_v1_features_revision_retrieve: {
2305
+ parameters: {
2306
+ query?: never;
2307
+ header?: never;
2308
+ path?: never;
2309
+ cookie?: never;
2310
+ };
2311
+ requestBody?: never;
2312
+ responses: {
2313
+ 200: {
2314
+ headers: {
2315
+ [name: string]: unknown;
2316
+ };
2317
+ content: {
2318
+ "application/json": components["schemas"]["MaxRevision"];
2319
+ };
2320
+ };
2321
+ };
2322
+ };
2323
+ }