@stapel/listings-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 (225) hide show
  1. package/CHANGELOG.md +1 -0
  2. package/MODULE.md +191 -0
  3. package/README.md +169 -0
  4. package/dist/api/generated/schema.d.ts +1253 -0
  5. package/dist/api/generated/schema.d.ts.map +1 -0
  6. package/dist/api/generated/schema.js +2 -0
  7. package/dist/api/generated/schema.js.map +1 -0
  8. package/dist/api/listingsApi.d.ts +145 -0
  9. package/dist/api/listingsApi.d.ts.map +1 -0
  10. package/dist/api/listingsApi.js +38 -0
  11. package/dist/api/listingsApi.js.map +1 -0
  12. package/dist/api/types.d.ts +156 -0
  13. package/dist/api/types.d.ts.map +1 -0
  14. package/dist/api/types.js +37 -0
  15. package/dist/api/types.js.map +1 -0
  16. package/dist/default/ErrorAlert.d.ts +9 -0
  17. package/dist/default/ErrorAlert.d.ts.map +1 -0
  18. package/dist/default/ErrorAlert.js +27 -0
  19. package/dist/default/ErrorAlert.js.map +1 -0
  20. package/dist/default/FavoritesPane.d.ts +18 -0
  21. package/dist/default/FavoritesPane.d.ts.map +1 -0
  22. package/dist/default/FavoritesPane.js +28 -0
  23. package/dist/default/FavoritesPane.js.map +1 -0
  24. package/dist/default/ListingCard.d.ts +42 -0
  25. package/dist/default/ListingCard.d.ts.map +1 -0
  26. package/dist/default/ListingCard.js +37 -0
  27. package/dist/default/ListingCard.js.map +1 -0
  28. package/dist/default/ListingComposerPage.d.ts +46 -0
  29. package/dist/default/ListingComposerPage.d.ts.map +1 -0
  30. package/dist/default/ListingComposerPage.js +99 -0
  31. package/dist/default/ListingComposerPage.js.map +1 -0
  32. package/dist/default/ListingDetailPane.d.ts +33 -0
  33. package/dist/default/ListingDetailPane.d.ts.map +1 -0
  34. package/dist/default/ListingDetailPane.js +48 -0
  35. package/dist/default/ListingDetailPane.js.map +1 -0
  36. package/dist/default/ListingPhoto.d.ts +25 -0
  37. package/dist/default/ListingPhoto.d.ts.map +1 -0
  38. package/dist/default/ListingPhoto.js +20 -0
  39. package/dist/default/ListingPhoto.js.map +1 -0
  40. package/dist/default/MyListingsPane.d.ts +25 -0
  41. package/dist/default/MyListingsPane.d.ts.map +1 -0
  42. package/dist/default/MyListingsPane.js +84 -0
  43. package/dist/default/MyListingsPane.js.map +1 -0
  44. package/dist/default/StatusTags.d.ts +31 -0
  45. package/dist/default/StatusTags.d.ts.map +1 -0
  46. package/dist/default/StatusTags.js +40 -0
  47. package/dist/default/StatusTags.js.map +1 -0
  48. package/dist/default/icons.d.ts +16 -0
  49. package/dist/default/icons.d.ts.map +1 -0
  50. package/dist/default/icons.js +5 -0
  51. package/dist/default/icons.js.map +1 -0
  52. package/dist/default/index.d.ts +35 -0
  53. package/dist/default/index.d.ts.map +1 -0
  54. package/dist/default/index.js +26 -0
  55. package/dist/default/index.js.map +1 -0
  56. package/dist/default/theme.d.ts +25 -0
  57. package/dist/default/theme.d.ts.map +1 -0
  58. package/dist/default/theme.js +40 -0
  59. package/dist/default/theme.js.map +1 -0
  60. package/dist/default/types.d.ts +12 -0
  61. package/dist/default/types.d.ts.map +1 -0
  62. package/dist/default/types.js +2 -0
  63. package/dist/default/types.js.map +1 -0
  64. package/dist/flows/registry.d.ts +35 -0
  65. package/dist/flows/registry.d.ts.map +1 -0
  66. package/dist/flows/registry.js +33 -0
  67. package/dist/flows/registry.js.map +1 -0
  68. package/dist/headless/Favorites.d.ts +52 -0
  69. package/dist/headless/Favorites.d.ts.map +1 -0
  70. package/dist/headless/Favorites.js +78 -0
  71. package/dist/headless/Favorites.js.map +1 -0
  72. package/dist/headless/ListingActions.d.ts +30 -0
  73. package/dist/headless/ListingActions.d.ts.map +1 -0
  74. package/dist/headless/ListingActions.js +54 -0
  75. package/dist/headless/ListingActions.js.map +1 -0
  76. package/dist/headless/ListingComposer.d.ts +133 -0
  77. package/dist/headless/ListingComposer.d.ts.map +1 -0
  78. package/dist/headless/ListingComposer.js +246 -0
  79. package/dist/headless/ListingComposer.js.map +1 -0
  80. package/dist/headless/ListingDetail.d.ts +81 -0
  81. package/dist/headless/ListingDetail.d.ts.map +1 -0
  82. package/dist/headless/ListingDetail.js +101 -0
  83. package/dist/headless/ListingDetail.js.map +1 -0
  84. package/dist/headless/ListingsProvider.d.ts +17 -0
  85. package/dist/headless/ListingsProvider.d.ts.map +1 -0
  86. package/dist/headless/ListingsProvider.js +16 -0
  87. package/dist/headless/ListingsProvider.js.map +1 -0
  88. package/dist/headless/MyListings.d.ts +44 -0
  89. package/dist/headless/MyListings.d.ts.map +1 -0
  90. package/dist/headless/MyListings.js +82 -0
  91. package/dist/headless/MyListings.js.map +1 -0
  92. package/dist/headless/useMandateGate.d.ts +28 -0
  93. package/dist/headless/useMandateGate.d.ts.map +1 -0
  94. package/dist/headless/useMandateGate.js +39 -0
  95. package/dist/headless/useMandateGate.js.map +1 -0
  96. package/dist/i18n/errorsMap.d.ts +34 -0
  97. package/dist/i18n/errorsMap.d.ts.map +1 -0
  98. package/dist/i18n/errorsMap.js +45 -0
  99. package/dist/i18n/errorsMap.js.map +1 -0
  100. package/dist/i18n/es.d.ts +21 -0
  101. package/dist/i18n/es.d.ts.map +1 -0
  102. package/dist/i18n/es.js +146 -0
  103. package/dist/i18n/es.js.map +1 -0
  104. package/dist/i18n/generated/errors.es.gen.d.ts +16 -0
  105. package/dist/i18n/generated/errors.es.gen.d.ts.map +1 -0
  106. package/dist/i18n/generated/errors.es.gen.js +58 -0
  107. package/dist/i18n/generated/errors.es.gen.js.map +1 -0
  108. package/dist/i18n/generated/errors.gen.d.ts +413 -0
  109. package/dist/i18n/generated/errors.gen.d.ts.map +1 -0
  110. package/dist/i18n/generated/errors.gen.js +210 -0
  111. package/dist/i18n/generated/errors.gen.js.map +1 -0
  112. package/dist/i18n/generated/errors.ru.gen.d.ts +16 -0
  113. package/dist/i18n/generated/errors.ru.gen.d.ts.map +1 -0
  114. package/dist/i18n/generated/errors.ru.gen.js +58 -0
  115. package/dist/i18n/generated/errors.ru.gen.js.map +1 -0
  116. package/dist/i18n/keys.d.ts +170 -0
  117. package/dist/i18n/keys.d.ts.map +1 -0
  118. package/dist/i18n/keys.js +295 -0
  119. package/dist/i18n/keys.js.map +1 -0
  120. package/dist/i18n/ru.d.ts +37 -0
  121. package/dist/i18n/ru.d.ts.map +1 -0
  122. package/dist/i18n/ru.js +162 -0
  123. package/dist/i18n/ru.js.map +1 -0
  124. package/dist/index.d.ts +103 -0
  125. package/dist/index.d.ts.map +1 -0
  126. package/dist/index.js +98 -0
  127. package/dist/index.js.map +1 -0
  128. package/dist/model/context.d.ts +11 -0
  129. package/dist/model/context.d.ts.map +1 -0
  130. package/dist/model/context.js +16 -0
  131. package/dist/model/context.js.map +1 -0
  132. package/dist/model/draft.d.ts +138 -0
  133. package/dist/model/draft.d.ts.map +1 -0
  134. package/dist/model/draft.js +192 -0
  135. package/dist/model/draft.js.map +1 -0
  136. package/dist/model/features.d.ts +69 -0
  137. package/dist/model/features.d.ts.map +1 -0
  138. package/dist/model/features.js +73 -0
  139. package/dist/model/features.js.map +1 -0
  140. package/dist/model/mineSource.d.ts +47 -0
  141. package/dist/model/mineSource.d.ts.map +1 -0
  142. package/dist/model/mineSource.js +45 -0
  143. package/dist/model/mineSource.js.map +1 -0
  144. package/dist/model/mutations.d.ts +60 -0
  145. package/dist/model/mutations.d.ts.map +1 -0
  146. package/dist/model/mutations.js +165 -0
  147. package/dist/model/mutations.js.map +1 -0
  148. package/dist/model/queries.d.ts +75 -0
  149. package/dist/model/queries.d.ts.map +1 -0
  150. package/dist/model/queries.js +117 -0
  151. package/dist/model/queries.js.map +1 -0
  152. package/dist/model/queryKeys.d.ts +50 -0
  153. package/dist/model/queryKeys.d.ts.map +1 -0
  154. package/dist/model/queryKeys.js +24 -0
  155. package/dist/model/queryKeys.js.map +1 -0
  156. package/dist/model/runtime.d.ts +69 -0
  157. package/dist/model/runtime.d.ts.map +1 -0
  158. package/dist/model/runtime.js +14 -0
  159. package/dist/model/runtime.js.map +1 -0
  160. package/dist/model/status.d.ts +117 -0
  161. package/dist/model/status.d.ts.map +1 -0
  162. package/dist/model/status.js +164 -0
  163. package/dist/model/status.js.map +1 -0
  164. package/dist/model/transitions.d.ts +41 -0
  165. package/dist/model/transitions.d.ts.map +1 -0
  166. package/dist/model/transitions.js +25 -0
  167. package/dist/model/transitions.js.map +1 -0
  168. package/dist/model/validation.d.ts +135 -0
  169. package/dist/model/validation.d.ts.map +1 -0
  170. package/dist/model/validation.js +191 -0
  171. package/dist/model/validation.js.map +1 -0
  172. package/dist/nav/manifest.d.ts +46 -0
  173. package/dist/nav/manifest.d.ts.map +1 -0
  174. package/dist/nav/manifest.js +56 -0
  175. package/dist/nav/manifest.js.map +1 -0
  176. package/llms.txt +118 -0
  177. package/manifest.json +1044 -0
  178. package/nav-manifest.json +84 -0
  179. package/package.json +121 -0
  180. package/src/analytics/generated/events.json +7 -0
  181. package/src/api/generated/schema.ts +1255 -0
  182. package/src/api/listingsApi.ts +237 -0
  183. package/src/api/types.ts +193 -0
  184. package/src/default/ErrorAlert.tsx +46 -0
  185. package/src/default/FavoritesPane.tsx +123 -0
  186. package/src/default/ListingCard.tsx +178 -0
  187. package/src/default/ListingComposerPage.tsx +466 -0
  188. package/src/default/ListingDetailPane.tsx +271 -0
  189. package/src/default/ListingPhoto.tsx +62 -0
  190. package/src/default/MyListingsPane.tsx +333 -0
  191. package/src/default/StatusTags.tsx +86 -0
  192. package/src/default/icons.tsx +31 -0
  193. package/src/default/index.ts +35 -0
  194. package/src/default/theme.tsx +67 -0
  195. package/src/default/types.ts +12 -0
  196. package/src/flows/registry.ts +45 -0
  197. package/src/headless/Favorites.tsx +137 -0
  198. package/src/headless/ListingActions.tsx +101 -0
  199. package/src/headless/ListingComposer.tsx +476 -0
  200. package/src/headless/ListingDetail.tsx +231 -0
  201. package/src/headless/ListingsProvider.tsx +20 -0
  202. package/src/headless/MyListings.tsx +148 -0
  203. package/src/headless/useMandateGate.ts +40 -0
  204. package/src/i18n/errorsMap.ts +62 -0
  205. package/src/i18n/es.ts +198 -0
  206. package/src/i18n/generated/errors.es.gen.ts +64 -0
  207. package/src/i18n/generated/errors.gen.ts +241 -0
  208. package/src/i18n/generated/errors.json +499 -0
  209. package/src/i18n/generated/errors.ru.gen.ts +64 -0
  210. package/src/i18n/keys.ts +356 -0
  211. package/src/i18n/ru.ts +215 -0
  212. package/src/index.ts +260 -0
  213. package/src/model/context.tsx +28 -0
  214. package/src/model/draft.ts +307 -0
  215. package/src/model/features.ts +122 -0
  216. package/src/model/mineSource.ts +55 -0
  217. package/src/model/mutations.ts +224 -0
  218. package/src/model/queries.ts +150 -0
  219. package/src/model/queryKeys.ts +76 -0
  220. package/src/model/runtime.ts +87 -0
  221. package/src/model/status.ts +279 -0
  222. package/src/model/transitions.ts +62 -0
  223. package/src/model/validation.ts +271 -0
  224. package/src/nav/manifest.ts +97 -0
  225. package/tsconfig.json +26 -0
package/manifest.json ADDED
@@ -0,0 +1,1044 @@
1
+ {
2
+ "$generated": "by scripts/gen-manifest.mjs — do not edit; drift-gated (pnpm gen:manifest:check)",
3
+ "package": "@stapel/listings-react",
4
+ "version": "0.1.0",
5
+ "backend": {
6
+ "module": "stapel-listings",
7
+ "contract": ">=0.6 <0.7"
8
+ },
9
+ "layers": [
10
+ "api",
11
+ "model",
12
+ "flows",
13
+ "headless",
14
+ "i18n"
15
+ ],
16
+ "flows": {},
17
+ "machines": [],
18
+ "operations": {
19
+ "listings_api_v1_listings_archive_create": {
20
+ "method": "POST",
21
+ "path": "/listings/api/v1/listings/{id}/archive/",
22
+ "tag": "Listings",
23
+ "request": null,
24
+ "response": "ListingActionResponse"
25
+ },
26
+ "listings_api_v1_listings_complete_create": {
27
+ "method": "POST",
28
+ "path": "/listings/api/v1/listings/{id}/complete/",
29
+ "tag": "Listings",
30
+ "request": null,
31
+ "response": "ListingActionResponse"
32
+ },
33
+ "listings_api_v1_listings_create": {
34
+ "method": "POST",
35
+ "path": "/listings/api/v1/listings/",
36
+ "tag": "Listings",
37
+ "request": "ListingDraft",
38
+ "response": "ListingDraft"
39
+ },
40
+ "listings_api_v1_listings_destroy": {
41
+ "method": "DELETE",
42
+ "path": "/listings/api/v1/listings/{id}/",
43
+ "tag": "Listings",
44
+ "request": null,
45
+ "response": "DeleteResponse"
46
+ },
47
+ "listings_api_v1_listings_favorite_create": {
48
+ "method": "POST",
49
+ "path": "/listings/api/v1/listings/{id}/favorite/",
50
+ "tag": "Listings",
51
+ "request": null,
52
+ "response": "FavoriteToggleResponse"
53
+ },
54
+ "listings_api_v1_listings_list": {
55
+ "method": "GET",
56
+ "path": "/listings/api/v1/listings/",
57
+ "tag": "Listings",
58
+ "request": null,
59
+ "response": "PaginatedListingCardList"
60
+ },
61
+ "listings_api_v1_listings_my_counters_retrieve": {
62
+ "method": "GET",
63
+ "path": "/listings/api/v1/listings/my/counters/",
64
+ "tag": "Listings",
65
+ "request": null,
66
+ "response": "MyCountersResponse"
67
+ },
68
+ "listings_api_v1_listings_my_favorites_list": {
69
+ "method": "GET",
70
+ "path": "/listings/api/v1/listings/my/favorites/",
71
+ "tag": "Listings",
72
+ "request": null,
73
+ "response": "PaginatedListingCardList"
74
+ },
75
+ "listings_api_v1_listings_partial_update": {
76
+ "method": "PATCH",
77
+ "path": "/listings/api/v1/listings/{id}/",
78
+ "tag": "Listings",
79
+ "request": "PatchedListingDraft",
80
+ "response": "ListingDraft"
81
+ },
82
+ "listings_api_v1_listings_publish_create": {
83
+ "method": "POST",
84
+ "path": "/listings/api/v1/listings/{id}/publish/",
85
+ "tag": "Listings",
86
+ "request": null,
87
+ "response": "PublishResponse"
88
+ },
89
+ "listings_api_v1_listings_retrieve": {
90
+ "method": "GET",
91
+ "path": "/listings/api/v1/listings/{id}/",
92
+ "tag": "Listings",
93
+ "request": null,
94
+ "response": "ListingDetail"
95
+ },
96
+ "listings_api_v1_listings_save_draft_create": {
97
+ "method": "POST",
98
+ "path": "/listings/api/v1/listings/{id}/save-draft/",
99
+ "tag": "Listings",
100
+ "request": null,
101
+ "response": "ListingDraft"
102
+ },
103
+ "listings_api_v1_listings_status_retrieve": {
104
+ "method": "GET",
105
+ "path": "/listings/api/v1/listings/{id}/status/",
106
+ "tag": "Listings",
107
+ "request": null,
108
+ "response": "ListingStatus"
109
+ },
110
+ "listings_api_v1_listings_unfavorite_create": {
111
+ "method": "POST",
112
+ "path": "/listings/api/v1/listings/{id}/unfavorite/",
113
+ "tag": "Listings",
114
+ "request": null,
115
+ "response": "FavoriteToggleResponse"
116
+ },
117
+ "listings_api_v1_listings_update": {
118
+ "method": "PUT",
119
+ "path": "/listings/api/v1/listings/{id}/",
120
+ "tag": "Listings",
121
+ "request": "ListingDraft",
122
+ "response": "ListingDraft"
123
+ },
124
+ "listings_api_v1_listings_validate_draft_retrieve": {
125
+ "method": "GET",
126
+ "path": "/listings/api/v1/listings/{id}/validate-draft/",
127
+ "tag": "Listings",
128
+ "request": null,
129
+ "response": "ValidationBatchResult"
130
+ }
131
+ },
132
+ "hooks": {
133
+ "useArchiveListing": {
134
+ "kind": "mutation",
135
+ "operation": "archive"
136
+ },
137
+ "useCompleteListing": {
138
+ "kind": "mutation",
139
+ "operation": "complete"
140
+ },
141
+ "useCreateDraft": {
142
+ "kind": "mutation",
143
+ "operation": "createDraft",
144
+ "invalidates": [
145
+ [
146
+ "listings",
147
+ "my",
148
+ "counters"
149
+ ]
150
+ ]
151
+ },
152
+ "useDeleteListing": {
153
+ "kind": "mutation",
154
+ "operation": "remove",
155
+ "invalidates": [
156
+ [
157
+ "listings"
158
+ ]
159
+ ]
160
+ },
161
+ "useFavoriteListing": {
162
+ "kind": "mutation",
163
+ "operations": [
164
+ "favorite",
165
+ "unfavorite"
166
+ ],
167
+ "invalidates": [
168
+ [
169
+ "listings",
170
+ "my",
171
+ "favorites"
172
+ ],
173
+ [
174
+ "listings",
175
+ "list"
176
+ ],
177
+ [
178
+ "listings",
179
+ "detail",
180
+ "{id}"
181
+ ]
182
+ ]
183
+ },
184
+ "useListing": {
185
+ "kind": "query",
186
+ "operation": "retrieve",
187
+ "queryKey": [
188
+ "listings",
189
+ "detail",
190
+ "{id}"
191
+ ]
192
+ },
193
+ "useListingCards": {
194
+ "kind": "query",
195
+ "operation": "list",
196
+ "queryKey": [
197
+ "listings",
198
+ "list",
199
+ "{page}"
200
+ ]
201
+ },
202
+ "useListingStatus": {
203
+ "kind": "query",
204
+ "operation": "status",
205
+ "queryKey": [
206
+ "listings",
207
+ "status",
208
+ "{id}"
209
+ ]
210
+ },
211
+ "useMyCounters": {
212
+ "kind": "query",
213
+ "operation": "myCounters",
214
+ "queryKey": [
215
+ "listings",
216
+ "my",
217
+ "counters"
218
+ ]
219
+ },
220
+ "useMyFavorites": {
221
+ "kind": "query",
222
+ "operation": "myFavorites",
223
+ "queryKey": [
224
+ "listings",
225
+ "my",
226
+ "favorites",
227
+ "{page}"
228
+ ]
229
+ },
230
+ "usePublishListing": {
231
+ "kind": "mutation",
232
+ "operation": "publish"
233
+ },
234
+ "useSaveDraft": {
235
+ "kind": "mutation",
236
+ "operation": "saveDraft"
237
+ },
238
+ "useValidateDraft": {
239
+ "kind": "query",
240
+ "operation": "validateDraft",
241
+ "queryKey": [
242
+ "listings",
243
+ "validate-draft",
244
+ "{id}"
245
+ ]
246
+ }
247
+ },
248
+ "errors": {
249
+ "error.400.bad_request": {
250
+ "status": 400,
251
+ "params": [],
252
+ "remediation": "fix_input"
253
+ },
254
+ "error.400.captcha_invalid": {
255
+ "status": 400,
256
+ "params": [],
257
+ "remediation": "retry"
258
+ },
259
+ "error.400.captcha_required": {
260
+ "status": 400,
261
+ "params": [],
262
+ "remediation": "retry"
263
+ },
264
+ "error.400.category_required": {
265
+ "status": 400,
266
+ "params": [],
267
+ "remediation": "fix_input"
268
+ },
269
+ "error.400.description_too_long": {
270
+ "status": 400,
271
+ "params": [
272
+ "max_length"
273
+ ],
274
+ "remediation": "fix_input"
275
+ },
276
+ "error.400.description_too_short": {
277
+ "status": 400,
278
+ "params": [
279
+ "min_length"
280
+ ],
281
+ "remediation": "fix_input"
282
+ },
283
+ "error.400.expected_list": {
284
+ "status": 400,
285
+ "params": [],
286
+ "remediation": "fix_input"
287
+ },
288
+ "error.400.feature_above_maximum": {
289
+ "status": 400,
290
+ "params": [
291
+ "feature"
292
+ ],
293
+ "remediation": "fix_input"
294
+ },
295
+ "error.400.feature_below_minimum": {
296
+ "status": 400,
297
+ "params": [
298
+ "feature"
299
+ ],
300
+ "remediation": "fix_input"
301
+ },
302
+ "error.400.feature_invalid_config": {
303
+ "status": 400,
304
+ "params": [
305
+ "feature"
306
+ ],
307
+ "remediation": "fix_input"
308
+ },
309
+ "error.400.feature_invalid_format": {
310
+ "status": 400,
311
+ "params": [
312
+ "feature"
313
+ ],
314
+ "remediation": "fix_input"
315
+ },
316
+ "error.400.feature_invalid_type": {
317
+ "status": 400,
318
+ "params": [
319
+ "feature"
320
+ ],
321
+ "remediation": "fix_input"
322
+ },
323
+ "error.400.feature_mandatory_missing": {
324
+ "status": 400,
325
+ "params": [
326
+ "feature"
327
+ ],
328
+ "remediation": "fix_input"
329
+ },
330
+ "error.400.feature_not_allowed": {
331
+ "status": 400,
332
+ "params": [
333
+ "feature"
334
+ ],
335
+ "remediation": "fix_input"
336
+ },
337
+ "error.400.feature_not_in_options": {
338
+ "status": 400,
339
+ "params": [
340
+ "feature"
341
+ ],
342
+ "remediation": "fix_input"
343
+ },
344
+ "error.400.feature_unknown": {
345
+ "status": 400,
346
+ "params": [
347
+ "feature"
348
+ ],
349
+ "remediation": "fix_input"
350
+ },
351
+ "error.400.feature_unknown_type": {
352
+ "status": 400,
353
+ "params": [
354
+ "feature"
355
+ ],
356
+ "remediation": "fix_input"
357
+ },
358
+ "error.400.field.blank": {
359
+ "status": 400,
360
+ "params": [
361
+ "field"
362
+ ],
363
+ "remediation": "fix_input"
364
+ },
365
+ "error.400.field.does_not_exist": {
366
+ "status": 400,
367
+ "params": [
368
+ "field"
369
+ ],
370
+ "remediation": "fix_input"
371
+ },
372
+ "error.400.field.invalid": {
373
+ "status": 400,
374
+ "params": [
375
+ "field"
376
+ ],
377
+ "remediation": "fix_input"
378
+ },
379
+ "error.400.field.invalid_choice": {
380
+ "status": 400,
381
+ "params": [
382
+ "field"
383
+ ],
384
+ "remediation": "fix_input"
385
+ },
386
+ "error.400.field.max_length": {
387
+ "status": 400,
388
+ "params": [
389
+ "field",
390
+ "max_length"
391
+ ],
392
+ "remediation": "fix_input"
393
+ },
394
+ "error.400.field.max_value": {
395
+ "status": 400,
396
+ "params": [
397
+ "field",
398
+ "max_value"
399
+ ],
400
+ "remediation": "fix_input"
401
+ },
402
+ "error.400.field.min_length": {
403
+ "status": 400,
404
+ "params": [
405
+ "field",
406
+ "min_length"
407
+ ],
408
+ "remediation": "fix_input"
409
+ },
410
+ "error.400.field.min_value": {
411
+ "status": 400,
412
+ "params": [
413
+ "field",
414
+ "min_value"
415
+ ],
416
+ "remediation": "fix_input"
417
+ },
418
+ "error.400.field.null": {
419
+ "status": 400,
420
+ "params": [
421
+ "field"
422
+ ],
423
+ "remediation": "fix_input"
424
+ },
425
+ "error.400.field.required": {
426
+ "status": 400,
427
+ "params": [
428
+ "field"
429
+ ],
430
+ "remediation": "fix_input"
431
+ },
432
+ "error.400.field.unique": {
433
+ "status": 400,
434
+ "params": [
435
+ "field"
436
+ ],
437
+ "remediation": "fix_input"
438
+ },
439
+ "error.400.image_required": {
440
+ "status": 400,
441
+ "params": [],
442
+ "remediation": "fix_input"
443
+ },
444
+ "error.400.invalid_ad_id": {
445
+ "status": 400,
446
+ "params": [],
447
+ "remediation": "fix_input"
448
+ },
449
+ "error.400.listing_feature_not_allowed": {
450
+ "status": 400,
451
+ "params": [
452
+ "feature"
453
+ ],
454
+ "remediation": "fix_input"
455
+ },
456
+ "error.400.publish_validation_failed": {
457
+ "status": 400,
458
+ "params": [],
459
+ "remediation": "fix_input"
460
+ },
461
+ "error.400.validation_error": {
462
+ "status": 400,
463
+ "params": [],
464
+ "remediation": "fix_input"
465
+ },
466
+ "error.400.verification_failed": {
467
+ "status": 400,
468
+ "params": [],
469
+ "remediation": "verify"
470
+ },
471
+ "error.400.verification_invalid_factor": {
472
+ "status": 400,
473
+ "params": [],
474
+ "remediation": "verify"
475
+ },
476
+ "error.401.unauthorized": {
477
+ "status": 401,
478
+ "params": [],
479
+ "remediation": "reauthenticate"
480
+ },
481
+ "error.402.payment_required": {
482
+ "status": 402,
483
+ "params": [],
484
+ "remediation": "retry"
485
+ },
486
+ "error.403.forbidden": {
487
+ "status": 403,
488
+ "params": [],
489
+ "remediation": "retry"
490
+ },
491
+ "error.403.listing_not_owner": {
492
+ "status": 403,
493
+ "params": [],
494
+ "remediation": "retry"
495
+ },
496
+ "error.403.network_blocked": {
497
+ "status": 403,
498
+ "params": [],
499
+ "remediation": "contact_support"
500
+ },
501
+ "error.403.verification_enrollment_required": {
502
+ "status": 403,
503
+ "params": [],
504
+ "remediation": "verify"
505
+ },
506
+ "error.403.verification_required": {
507
+ "status": 403,
508
+ "params": [],
509
+ "remediation": "verify"
510
+ },
511
+ "error.404.ad_not_found": {
512
+ "status": 404,
513
+ "params": [],
514
+ "remediation": "retry"
515
+ },
516
+ "error.404.listing_not_found": {
517
+ "status": 404,
518
+ "params": [],
519
+ "remediation": "retry"
520
+ },
521
+ "error.404.not_found": {
522
+ "status": 404,
523
+ "params": [],
524
+ "remediation": "retry"
525
+ },
526
+ "error.404.verification_challenge_not_found": {
527
+ "status": 404,
528
+ "params": [],
529
+ "remediation": "verify"
530
+ },
531
+ "error.405.method_not_allowed": {
532
+ "status": 405,
533
+ "params": [],
534
+ "remediation": "retry"
535
+ },
536
+ "error.406.not_acceptable": {
537
+ "status": 406,
538
+ "params": [],
539
+ "remediation": "retry"
540
+ },
541
+ "error.408.request_timeout": {
542
+ "status": 408,
543
+ "params": [],
544
+ "remediation": "retry"
545
+ },
546
+ "error.409.already_favorited": {
547
+ "status": 409,
548
+ "params": [],
549
+ "remediation": "fix_input"
550
+ },
551
+ "error.409.conflict": {
552
+ "status": 409,
553
+ "params": [],
554
+ "remediation": "fix_input"
555
+ },
556
+ "error.409.invalid_listing_transition": {
557
+ "status": 409,
558
+ "params": [
559
+ "from_status"
560
+ ],
561
+ "remediation": "fix_input"
562
+ },
563
+ "error.409.listing_cannot_delete_active": {
564
+ "status": 409,
565
+ "params": [],
566
+ "remediation": "fix_input"
567
+ },
568
+ "error.410.gone": {
569
+ "status": 410,
570
+ "params": [],
571
+ "remediation": "retry"
572
+ },
573
+ "error.413.payload_too_large": {
574
+ "status": 413,
575
+ "params": [],
576
+ "remediation": "retry"
577
+ },
578
+ "error.415.unsupported_media_type": {
579
+ "status": 415,
580
+ "params": [],
581
+ "remediation": "retry"
582
+ },
583
+ "error.422.unprocessable_entity": {
584
+ "status": 422,
585
+ "params": [],
586
+ "remediation": "wait_and_retry"
587
+ },
588
+ "error.423.locked": {
589
+ "status": 423,
590
+ "params": [],
591
+ "remediation": "wait_and_retry"
592
+ },
593
+ "error.423.verification_locked": {
594
+ "status": 423,
595
+ "params": [],
596
+ "remediation": "wait_and_retry"
597
+ },
598
+ "error.429.rate_limit": {
599
+ "status": 429,
600
+ "params": [
601
+ "retry_after_minutes"
602
+ ],
603
+ "remediation": "wait_and_retry"
604
+ },
605
+ "error.429.too_many_requests": {
606
+ "status": 429,
607
+ "params": [],
608
+ "remediation": "wait_and_retry"
609
+ },
610
+ "error.500.internal": {
611
+ "status": 500,
612
+ "params": [],
613
+ "remediation": "contact_support"
614
+ },
615
+ "error.503.mandate_unavailable": {
616
+ "status": 503,
617
+ "params": [],
618
+ "remediation": "retry"
619
+ }
620
+ },
621
+ "events": {
622
+ "defined": [],
623
+ "flows": []
624
+ },
625
+ "demos": [
626
+ {
627
+ "id": "listings.card",
628
+ "title": "Listing card",
629
+ "description": "The slot @stapel/search-react fills through the container — the two pairs never import each other. Badges come out of the stored DAO projection, which carries each type's display config beside its value, so a grid of forty cards costs one query and no category read. The heart is never hidden from a visitor: it is blocked, with the reason, and the container attaches the sign-in CTA.",
630
+ "component": "ListingCard",
631
+ "covers": [
632
+ "ListingsProvider"
633
+ ],
634
+ "tokens": [
635
+ "surface-raised"
636
+ ],
637
+ "variants": [
638
+ "default",
639
+ "visitor"
640
+ ],
641
+ "source": "demo/ListingCard.demo.tsx"
642
+ },
643
+ {
644
+ "id": "listings.composer",
645
+ "title": "Listing composer",
646
+ "description": "The submission screen, where four contracts meet through three seams: the category schema arrives as FeatureDef[], the photos as @stapel/cdn-react's upload bag (its refs ARE images_draft, its settled gates the submit), and the value editors from @stapel/attributes-react. The variants show two of the six reasons the publish button can be off — photos in flight, and a value type this build has no editor for, which blocks the submit loudly rather than dropping a possibly-mandatory field.",
647
+ "component": "ListingComposerPage",
648
+ "covers": [
649
+ "ListingComposer"
650
+ ],
651
+ "tokens": [
652
+ "surface-raised"
653
+ ],
654
+ "variants": [
655
+ "default",
656
+ "photos-in-flight",
657
+ "unsupported-type"
658
+ ],
659
+ "source": "demo/ListingComposer.demo.tsx"
660
+ },
661
+ {
662
+ "id": "listings.detail",
663
+ "title": "Listing detail",
664
+ "description": "The same listing, read by two people. A buyer sees a live page. The OWNER also sees the moderation axis — 'published, changes under review' — because since stapel-listings 0.5.0 an edit to a live listing keeps status=published and moves only moderation_status, and a dashboard that derived one field from the other would either hide the listing or hide the review.",
665
+ "component": "ListingDetailPane",
666
+ "covers": [
667
+ "ListingDetail"
668
+ ],
669
+ "tokens": [
670
+ "surface-raised"
671
+ ],
672
+ "variants": [
673
+ "default",
674
+ "owner"
675
+ ],
676
+ "source": "demo/ListingDetail.demo.tsx"
677
+ },
678
+ {
679
+ "id": "listings.favorites",
680
+ "title": "Favourites",
681
+ "description": "The plainest place to see the load-state discipline: 'you have not saved anything yet' and 'we could not load your favourites' are two arms, not one. Merging them is the substitution that turned a 5xx into an empty result page on 2026-08-09. A visitor is told to sign in and no request is made at all.",
682
+ "component": "FavoritesPane",
683
+ "covers": [
684
+ "Favorites"
685
+ ],
686
+ "tokens": [
687
+ "surface-raised"
688
+ ],
689
+ "variants": [
690
+ "default",
691
+ "empty",
692
+ "failed",
693
+ "visitor"
694
+ ],
695
+ "source": "demo/Favorites.demo.tsx"
696
+ },
697
+ {
698
+ "id": "listings.mine",
699
+ "title": "My listings",
700
+ "description": "stapel-listings 0.6.1 has no owner-scoped list endpoint: GET /listings/ answers published() and takes no owner parameter, so a seller's own drafts are unreachable by any call the contract offers. The counters ARE real and are shown; the rows come from an injected source, and with none the pane says so instead of drawing an empty grid that reads as 'you have no listings'.",
701
+ "component": "MyListingsPane",
702
+ "covers": [
703
+ "MyListings"
704
+ ],
705
+ "tokens": [
706
+ "surface-raised"
707
+ ],
708
+ "variants": [
709
+ "default",
710
+ "no-source"
711
+ ],
712
+ "source": "demo/MyListings.demo.tsx"
713
+ }
714
+ ],
715
+ "i18nKeys": [
716
+ "error.400.bad_request",
717
+ "error.400.captcha_invalid",
718
+ "error.400.captcha_required",
719
+ "error.400.category_required",
720
+ "error.400.description_too_long",
721
+ "error.400.description_too_short",
722
+ "error.400.expected_list",
723
+ "error.400.feature_above_maximum",
724
+ "error.400.feature_below_minimum",
725
+ "error.400.feature_invalid_config",
726
+ "error.400.feature_invalid_format",
727
+ "error.400.feature_invalid_type",
728
+ "error.400.feature_mandatory_missing",
729
+ "error.400.feature_not_allowed",
730
+ "error.400.feature_not_in_options",
731
+ "error.400.feature_unknown",
732
+ "error.400.feature_unknown_type",
733
+ "error.400.field.blank",
734
+ "error.400.field.does_not_exist",
735
+ "error.400.field.invalid",
736
+ "error.400.field.invalid_choice",
737
+ "error.400.field.max_length",
738
+ "error.400.field.max_value",
739
+ "error.400.field.min_length",
740
+ "error.400.field.min_value",
741
+ "error.400.field.null",
742
+ "error.400.field.required",
743
+ "error.400.field.unique",
744
+ "error.400.image_required",
745
+ "error.400.invalid_ad_id",
746
+ "error.400.listing_feature_not_allowed",
747
+ "error.400.publish_validation_failed",
748
+ "error.400.validation_error",
749
+ "error.400.verification_failed",
750
+ "error.400.verification_invalid_factor",
751
+ "error.401.unauthorized",
752
+ "error.402.payment_required",
753
+ "error.403.forbidden",
754
+ "error.403.listing_not_owner",
755
+ "error.403.network_blocked",
756
+ "error.403.verification_enrollment_required",
757
+ "error.403.verification_required",
758
+ "error.404.ad_not_found",
759
+ "error.404.listing_not_found",
760
+ "error.404.not_found",
761
+ "error.404.verification_challenge_not_found",
762
+ "error.405.method_not_allowed",
763
+ "error.406.not_acceptable",
764
+ "error.408.request_timeout",
765
+ "error.409.already_favorited",
766
+ "error.409.conflict",
767
+ "error.409.invalid_listing_transition",
768
+ "error.409.listing_cannot_delete_active",
769
+ "error.410.gone",
770
+ "error.413.payload_too_large",
771
+ "error.415.unsupported_media_type",
772
+ "error.422.unprocessable_entity",
773
+ "error.423.locked",
774
+ "error.423.verification_locked",
775
+ "error.429.rate_limit",
776
+ "error.429.too_many_requests",
777
+ "error.500.internal",
778
+ "error.503.mandate_unavailable",
779
+ "listings.blocked.delete_active",
780
+ "listings.blocked.guest",
781
+ "listings.blocked.in_flight",
782
+ "listings.blocked.mandate_unknown",
783
+ "listings.blocked.sign_in",
784
+ "listings.blocked.transition",
785
+ "listings.card.favorite_add",
786
+ "listings.card.favorite_remove",
787
+ "listings.card.no_photo",
788
+ "listings.card.open",
789
+ "listings.card.photo_unavailable",
790
+ "listings.card.price_absent",
791
+ "listings.compose.auto_republish",
792
+ "listings.compose.blocked.busy",
793
+ "listings.compose.blocked.details_unavailable",
794
+ "listings.compose.blocked.mirror",
795
+ "listings.compose.blocked.no_category",
796
+ "listings.compose.blocked.no_draft",
797
+ "listings.compose.blocked.photos_pending",
798
+ "listings.compose.blocked.unsupported_type",
799
+ "listings.compose.category",
800
+ "listings.compose.category_changed_dropped",
801
+ "listings.compose.category_help",
802
+ "listings.compose.category_required",
803
+ "listings.compose.countable",
804
+ "listings.compose.currency_label",
805
+ "listings.compose.description_label",
806
+ "listings.compose.details",
807
+ "listings.compose.details_empty",
808
+ "listings.compose.details_failed",
809
+ "listings.compose.details_loading",
810
+ "listings.compose.edit_title",
811
+ "listings.compose.geo_incomplete",
812
+ "listings.compose.invalid_summary",
813
+ "listings.compose.lat_label",
814
+ "listings.compose.location_label",
815
+ "listings.compose.lon_label",
816
+ "listings.compose.new_title",
817
+ "listings.compose.photos",
818
+ "listings.compose.price_invalid",
819
+ "listings.compose.price_label",
820
+ "listings.compose.publish",
821
+ "listings.compose.published_first",
822
+ "listings.compose.published_live",
823
+ "listings.compose.publishing",
824
+ "listings.compose.republish",
825
+ "listings.compose.save",
826
+ "listings.compose.saved",
827
+ "listings.compose.saving",
828
+ "listings.compose.stock",
829
+ "listings.compose.title_label",
830
+ "listings.compose.title_too_long",
831
+ "listings.compose.too_many_images",
832
+ "listings.detail.description",
833
+ "listings.detail.expires_at",
834
+ "listings.detail.load_failed",
835
+ "listings.detail.loading",
836
+ "listings.detail.no_specs",
837
+ "listings.detail.not_found",
838
+ "listings.detail.not_published",
839
+ "listings.detail.owner_only_view",
840
+ "listings.detail.photo_alt",
841
+ "listings.detail.photos_unavailable",
842
+ "listings.detail.published_at",
843
+ "listings.detail.removed",
844
+ "listings.detail.retry",
845
+ "listings.detail.specs",
846
+ "listings.detail.stock",
847
+ "listings.detail.unreadable_features",
848
+ "listings.error.unknown",
849
+ "listings.favorites.empty",
850
+ "listings.favorites.load_failed",
851
+ "listings.favorites.loading",
852
+ "listings.favorites.title",
853
+ "listings.mine.archive",
854
+ "listings.mine.complete",
855
+ "listings.mine.counters_failed",
856
+ "listings.mine.delete",
857
+ "listings.mine.edit",
858
+ "listings.mine.empty",
859
+ "listings.mine.live_under_review",
860
+ "listings.mine.load_failed",
861
+ "listings.mine.loading",
862
+ "listings.mine.retry",
863
+ "listings.mine.source_missing",
864
+ "listings.mine.tab.active",
865
+ "listings.mine.tab.archived",
866
+ "listings.mine.tab.drafts",
867
+ "listings.mine.title",
868
+ "listings.moderation.first_review",
869
+ "listings.moderation.live_edit_pending",
870
+ "listings.moderation.live_needs_review",
871
+ "listings.moderation.needs_review",
872
+ "listings.moderation.pending_offline",
873
+ "listings.moderation.rejected",
874
+ "listings.moderation.rejected_still_live",
875
+ "listings.nav.compose",
876
+ "listings.nav.detail",
877
+ "listings.nav.favorites",
878
+ "listings.nav.mine",
879
+ "listings.page.next",
880
+ "listings.page.prev",
881
+ "listings.status.archived",
882
+ "listings.status.blocked",
883
+ "listings.status.draft",
884
+ "listings.status.expired",
885
+ "listings.status.paused",
886
+ "listings.status.pending",
887
+ "listings.status.published",
888
+ "listings.status.rejected",
889
+ "listings.status.sold"
890
+ ],
891
+ "exports": {
892
+ "runtime": [
893
+ "ACCOUNT_ROOT_ID",
894
+ "CATEGORY_FIELD",
895
+ "DEFAULT_DRAFT_LIMITS",
896
+ "DEFAULT_LISTING_CURRENCY",
897
+ "DESCRIPTION_FIELD",
898
+ "EMPTY_LOCATION",
899
+ "Favorites",
900
+ "IMAGES_FIELD",
901
+ "LISTINGS_ERRORS",
902
+ "LISTINGS_ERROR_CODES",
903
+ "LISTINGS_FLOWS",
904
+ "LISTINGS_I18N_KEYS",
905
+ "LISTING_CANNOT_DELETE_ACTIVE",
906
+ "LISTING_INVALID_TRANSITION",
907
+ "LISTING_NOT_OWNER",
908
+ "LISTING_PUBLISH_VALIDATION_FAILED",
909
+ "LISTING_STATUSES",
910
+ "LISTING_TRANSITIONS",
911
+ "ListingComposer",
912
+ "ListingDetail",
913
+ "ListingsProvider",
914
+ "ListingsRuntimeContext",
915
+ "MODERATION_STATUSES",
916
+ "MY_LISTINGS_SOURCE_MISSING",
917
+ "MY_LISTINGS_TABS",
918
+ "MY_LISTINGS_TAB_STATUSES",
919
+ "MyListings",
920
+ "PRICE_FIELD",
921
+ "TITLE_FIELD",
922
+ "asFeatureDaoList",
923
+ "canDelete",
924
+ "canTransition",
925
+ "createDraftBody",
926
+ "createListingsApi",
927
+ "createListingsRuntime",
928
+ "draftPatchFromValues",
929
+ "draftValuesFromDetail",
930
+ "draftValuesFromWire",
931
+ "droppedFeatureSlugs",
932
+ "emptyDraftValues",
933
+ "explainListingsError",
934
+ "failedResults",
935
+ "featureFromDao",
936
+ "featuresDtoFromDaoList",
937
+ "featuresFromDaoList",
938
+ "flowEndpoints",
939
+ "isBatchValid",
940
+ "isPubliclyVisible",
941
+ "lifecycleCaption",
942
+ "listingFieldErrors",
943
+ "listingStatusView",
944
+ "listingsErrorBundleEn",
945
+ "listingsI18nBundleEn",
946
+ "listingsQueryKeys",
947
+ "mirrorDraft",
948
+ "mirrorListingFields",
949
+ "moderationNotice",
950
+ "navEntries",
951
+ "pageKey",
952
+ "publishRefusal",
953
+ "registerListingsI18n",
954
+ "retainKnownFeatureValues",
955
+ "tabOf",
956
+ "unreadableFeatureCount",
957
+ "useArchiveListing",
958
+ "useCompleteListing",
959
+ "useCreateDraft",
960
+ "useDeleteListing",
961
+ "useFavoriteListing",
962
+ "useFavoriteToggle",
963
+ "useFavorites",
964
+ "useListing",
965
+ "useListingActions",
966
+ "useListingCards",
967
+ "useListingComposer",
968
+ "useListingDetail",
969
+ "useListingStatus",
970
+ "useListingsAnalytics",
971
+ "useListingsApi",
972
+ "useListingsRuntime",
973
+ "useMandateGate",
974
+ "useMyCounters",
975
+ "useMyFavorites",
976
+ "useMyListings",
977
+ "usePublishListing",
978
+ "useSaveDraft",
979
+ "useValidateDraft"
980
+ ],
981
+ "types": [
982
+ "ComposeStage",
983
+ "CreateListingsRuntimeOptions",
984
+ "DeleteResponse",
985
+ "EmptyDraftOptions",
986
+ "FavoriteInput",
987
+ "FavoriteToggleBag",
988
+ "FavoriteToggleResponse",
989
+ "FavoritesBag",
990
+ "FeatureConfig",
991
+ "FeatureDef",
992
+ "FeatureValueDto",
993
+ "FlowEndpoint",
994
+ "LifecycleCaption",
995
+ "ListingActionResponse",
996
+ "ListingActionsBag",
997
+ "ListingCard",
998
+ "ListingComposerBag",
999
+ "ListingDetailBag",
1000
+ "ListingDetailData",
1001
+ "ListingDraft",
1002
+ "ListingDraftLimits",
1003
+ "ListingDraftPatch",
1004
+ "ListingDraftValues",
1005
+ "ListingFeatureDao",
1006
+ "ListingFeatureDaoUnion",
1007
+ "ListingFeatureType",
1008
+ "ListingFeatureView",
1009
+ "ListingImageResolver",
1010
+ "ListingImagesBag",
1011
+ "ListingLifecycleStatus",
1012
+ "ListingLocation",
1013
+ "ListingModerationStatus",
1014
+ "ListingPageKey",
1015
+ "ListingPageParams",
1016
+ "ListingStatusInfo",
1017
+ "ListingStatusTone",
1018
+ "ListingStatusView",
1019
+ "ListingsApi",
1020
+ "ListingsErrorCode",
1021
+ "ListingsErrorSpec",
1022
+ "ListingsFlowId",
1023
+ "ListingsFlowSpec",
1024
+ "ListingsI18nKey",
1025
+ "ListingsRuntime",
1026
+ "ModerationNotice",
1027
+ "MyCounters",
1028
+ "MyListingsBag",
1029
+ "MyListingsSource",
1030
+ "MyListingsTab",
1031
+ "PaginatedListingCards",
1032
+ "PublishOutcome",
1033
+ "PublishRefusal",
1034
+ "PublishResponse",
1035
+ "Remediation",
1036
+ "SaveDraftInput",
1037
+ "Schemas",
1038
+ "UseFavoritesOptions",
1039
+ "UseListingComposerOptions",
1040
+ "UseListingDetailOptions",
1041
+ "UseMyListingsOptions"
1042
+ ]
1043
+ }
1044
+ }