@endora-commerce/mod-catalog 0.100.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 (443) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +63 -0
  3. package/dist/admin/components/PackagingUnitsEditor.d.ts +12 -0
  4. package/dist/admin/components/PackagingUnitsEditor.d.ts.map +1 -0
  5. package/dist/admin/components/PackagingUnitsEditor.js +99 -0
  6. package/dist/admin/components/PackagingUnitsEditor.js.map +1 -0
  7. package/dist/admin/components/ProductAttributesTab.d.ts +13 -0
  8. package/dist/admin/components/ProductAttributesTab.d.ts.map +1 -0
  9. package/dist/admin/components/ProductAttributesTab.js +140 -0
  10. package/dist/admin/components/ProductAttributesTab.js.map +1 -0
  11. package/dist/admin/components/ProductInventoryTab.d.ts +14 -0
  12. package/dist/admin/components/ProductInventoryTab.d.ts.map +1 -0
  13. package/dist/admin/components/ProductInventoryTab.js +284 -0
  14. package/dist/admin/components/ProductInventoryTab.js.map +1 -0
  15. package/dist/admin/components/ProductScopeEditor.d.ts +94 -0
  16. package/dist/admin/components/ProductScopeEditor.d.ts.map +1 -0
  17. package/dist/admin/components/ProductScopeEditor.js +395 -0
  18. package/dist/admin/components/ProductScopeEditor.js.map +1 -0
  19. package/dist/admin/components/ProductsBulkEditDialog.d.ts +11 -0
  20. package/dist/admin/components/ProductsBulkEditDialog.d.ts.map +1 -0
  21. package/dist/admin/components/ProductsBulkEditDialog.js +304 -0
  22. package/dist/admin/components/ProductsBulkEditDialog.js.map +1 -0
  23. package/dist/admin/index.d.ts +45 -0
  24. package/dist/admin/index.d.ts.map +1 -0
  25. package/dist/admin/index.js +184 -0
  26. package/dist/admin/index.js.map +1 -0
  27. package/dist/admin/lib/resolve-product-selection.d.ts +21 -0
  28. package/dist/admin/lib/resolve-product-selection.d.ts.map +1 -0
  29. package/dist/admin/lib/resolve-product-selection.js +25 -0
  30. package/dist/admin/lib/resolve-product-selection.js.map +1 -0
  31. package/dist/admin/pages/AttachmentTypesPage.d.ts +18 -0
  32. package/dist/admin/pages/AttachmentTypesPage.d.ts.map +1 -0
  33. package/dist/admin/pages/AttachmentTypesPage.js +92 -0
  34. package/dist/admin/pages/AttachmentTypesPage.js.map +1 -0
  35. package/dist/admin/pages/AttributeSetsPage.d.ts +21 -0
  36. package/dist/admin/pages/AttributeSetsPage.d.ts.map +1 -0
  37. package/dist/admin/pages/AttributeSetsPage.js +158 -0
  38. package/dist/admin/pages/AttributeSetsPage.js.map +1 -0
  39. package/dist/admin/pages/AttributesManager.d.ts +9 -0
  40. package/dist/admin/pages/AttributesManager.d.ts.map +1 -0
  41. package/dist/admin/pages/AttributesManager.js +305 -0
  42. package/dist/admin/pages/AttributesManager.js.map +1 -0
  43. package/dist/admin/pages/BulkOperationDetailPage.d.ts +9 -0
  44. package/dist/admin/pages/BulkOperationDetailPage.d.ts.map +1 -0
  45. package/dist/admin/pages/BulkOperationDetailPage.js +187 -0
  46. package/dist/admin/pages/BulkOperationDetailPage.js.map +1 -0
  47. package/dist/admin/pages/BulkOperationsPage.d.ts +9 -0
  48. package/dist/admin/pages/BulkOperationsPage.d.ts.map +1 -0
  49. package/dist/admin/pages/BulkOperationsPage.js +98 -0
  50. package/dist/admin/pages/BulkOperationsPage.js.map +1 -0
  51. package/dist/admin/pages/CategoriesTree.d.ts +9 -0
  52. package/dist/admin/pages/CategoriesTree.d.ts.map +1 -0
  53. package/dist/admin/pages/CategoriesTree.js +176 -0
  54. package/dist/admin/pages/CategoriesTree.js.map +1 -0
  55. package/dist/admin/pages/ProductEditor.d.ts +13 -0
  56. package/dist/admin/pages/ProductEditor.d.ts.map +1 -0
  57. package/dist/admin/pages/ProductEditor.js +1050 -0
  58. package/dist/admin/pages/ProductEditor.js.map +1 -0
  59. package/dist/admin/pages/ProductsList.d.ts +9 -0
  60. package/dist/admin/pages/ProductsList.d.ts.map +1 -0
  61. package/dist/admin/pages/ProductsList.js +399 -0
  62. package/dist/admin/pages/ProductsList.js.map +1 -0
  63. package/dist/backend/commands/attribute-commands.d.ts +111 -0
  64. package/dist/backend/commands/attribute-commands.d.ts.map +1 -0
  65. package/dist/backend/commands/attribute-commands.js +482 -0
  66. package/dist/backend/commands/attribute-commands.js.map +1 -0
  67. package/dist/backend/demo/reset.d.ts +23 -0
  68. package/dist/backend/demo/reset.d.ts.map +1 -0
  69. package/dist/backend/demo/reset.js +41 -0
  70. package/dist/backend/demo/reset.js.map +1 -0
  71. package/dist/backend/demo/rows.d.ts +103 -0
  72. package/dist/backend/demo/rows.d.ts.map +1 -0
  73. package/dist/backend/demo/rows.js +162 -0
  74. package/dist/backend/demo/rows.js.map +1 -0
  75. package/dist/backend/demo/seed.d.ts +35 -0
  76. package/dist/backend/demo/seed.d.ts.map +1 -0
  77. package/dist/backend/demo/seed.js +177 -0
  78. package/dist/backend/demo/seed.js.map +1 -0
  79. package/dist/backend/entities/attachment-type.entity.d.ts +16 -0
  80. package/dist/backend/entities/attachment-type.entity.d.ts.map +1 -0
  81. package/dist/backend/entities/attachment-type.entity.js +57 -0
  82. package/dist/backend/entities/attachment-type.entity.js.map +1 -0
  83. package/dist/backend/entities/attribute-set-attribute.entity.d.ts +26 -0
  84. package/dist/backend/entities/attribute-set-attribute.entity.d.ts.map +1 -0
  85. package/dist/backend/entities/attribute-set-attribute.entity.js +55 -0
  86. package/dist/backend/entities/attribute-set-attribute.entity.js.map +1 -0
  87. package/dist/backend/entities/attribute-set.entity.d.ts +22 -0
  88. package/dist/backend/entities/attribute-set.entity.d.ts.map +1 -0
  89. package/dist/backend/entities/attribute-set.entity.js +67 -0
  90. package/dist/backend/entities/attribute-set.entity.js.map +1 -0
  91. package/dist/backend/entities/bulk-operation.entity.d.ts +78 -0
  92. package/dist/backend/entities/bulk-operation.entity.d.ts.map +1 -0
  93. package/dist/backend/entities/bulk-operation.entity.js +138 -0
  94. package/dist/backend/entities/bulk-operation.entity.js.map +1 -0
  95. package/dist/backend/entities/bundle-slot-option.entity.d.ts +23 -0
  96. package/dist/backend/entities/bundle-slot-option.entity.d.ts.map +1 -0
  97. package/dist/backend/entities/bundle-slot-option.entity.js +68 -0
  98. package/dist/backend/entities/bundle-slot-option.entity.js.map +1 -0
  99. package/dist/backend/entities/bundle-slot.entity.d.ts +25 -0
  100. package/dist/backend/entities/bundle-slot.entity.d.ts.map +1 -0
  101. package/dist/backend/entities/bundle-slot.entity.js +74 -0
  102. package/dist/backend/entities/bundle-slot.entity.js.map +1 -0
  103. package/dist/backend/entities/category.entity.d.ts +26 -0
  104. package/dist/backend/entities/category.entity.d.ts.map +1 -0
  105. package/dist/backend/entities/category.entity.js +119 -0
  106. package/dist/backend/entities/category.entity.js.map +1 -0
  107. package/dist/backend/entities/gallery-item-label.entity.d.ts +22 -0
  108. package/dist/backend/entities/gallery-item-label.entity.d.ts.map +1 -0
  109. package/dist/backend/entities/gallery-item-label.entity.js +50 -0
  110. package/dist/backend/entities/gallery-item-label.entity.js.map +1 -0
  111. package/dist/backend/entities/gallery-item.entity.d.ts +17 -0
  112. package/dist/backend/entities/gallery-item.entity.d.ts.map +1 -0
  113. package/dist/backend/entities/gallery-item.entity.js +58 -0
  114. package/dist/backend/entities/gallery-item.entity.js.map +1 -0
  115. package/dist/backend/entities/grouped-item.entity.d.ts +23 -0
  116. package/dist/backend/entities/grouped-item.entity.d.ts.map +1 -0
  117. package/dist/backend/entities/grouped-item.entity.js +68 -0
  118. package/dist/backend/entities/grouped-item.entity.js.map +1 -0
  119. package/dist/backend/entities/product-attachment.entity.d.ts +23 -0
  120. package/dist/backend/entities/product-attachment.entity.d.ts.map +1 -0
  121. package/dist/backend/entities/product-attachment.entity.js +77 -0
  122. package/dist/backend/entities/product-attachment.entity.js.map +1 -0
  123. package/dist/backend/entities/product-attribute.entity.d.ts +72 -0
  124. package/dist/backend/entities/product-attribute.entity.d.ts.map +1 -0
  125. package/dist/backend/entities/product-attribute.entity.js +161 -0
  126. package/dist/backend/entities/product-attribute.entity.js.map +1 -0
  127. package/dist/backend/entities/product-editor-preference.entity.d.ts +28 -0
  128. package/dist/backend/entities/product-editor-preference.entity.d.ts.map +1 -0
  129. package/dist/backend/entities/product-editor-preference.entity.js +63 -0
  130. package/dist/backend/entities/product-editor-preference.entity.js.map +1 -0
  131. package/dist/backend/entities/product-link.entity.d.ts +25 -0
  132. package/dist/backend/entities/product-link.entity.d.ts.map +1 -0
  133. package/dist/backend/entities/product-link.entity.js +70 -0
  134. package/dist/backend/entities/product-link.entity.js.map +1 -0
  135. package/dist/backend/entities/product-packaging-unit.entity.d.ts +26 -0
  136. package/dist/backend/entities/product-packaging-unit.entity.d.ts.map +1 -0
  137. package/dist/backend/entities/product-packaging-unit.entity.js +76 -0
  138. package/dist/backend/entities/product-packaging-unit.entity.js.map +1 -0
  139. package/dist/backend/entities/product-value-override.entity.d.ts +43 -0
  140. package/dist/backend/entities/product-value-override.entity.d.ts.map +1 -0
  141. package/dist/backend/entities/product-value-override.entity.js +90 -0
  142. package/dist/backend/entities/product-value-override.entity.js.map +1 -0
  143. package/dist/backend/entities/product-variant.entity.d.ts +18 -0
  144. package/dist/backend/entities/product-variant.entity.d.ts.map +1 -0
  145. package/dist/backend/entities/product-variant.entity.js +68 -0
  146. package/dist/backend/entities/product-variant.entity.js.map +1 -0
  147. package/dist/backend/entities/product.entity.d.ts +108 -0
  148. package/dist/backend/entities/product.entity.d.ts.map +1 -0
  149. package/dist/backend/entities/product.entity.js +230 -0
  150. package/dist/backend/entities/product.entity.js.map +1 -0
  151. package/dist/backend/index.d.ts +262 -0
  152. package/dist/backend/index.d.ts.map +1 -0
  153. package/dist/backend/index.js +642 -0
  154. package/dist/backend/index.js.map +1 -0
  155. package/dist/backend/plugin.d.ts +216 -0
  156. package/dist/backend/plugin.d.ts.map +1 -0
  157. package/dist/backend/plugin.js +223 -0
  158. package/dist/backend/plugin.js.map +1 -0
  159. package/dist/backend/prompt-tools.d.ts +47 -0
  160. package/dist/backend/prompt-tools.d.ts.map +1 -0
  161. package/dist/backend/prompt-tools.js +284 -0
  162. package/dist/backend/prompt-tools.js.map +1 -0
  163. package/dist/backend/routes.admin.d.ts +105 -0
  164. package/dist/backend/routes.admin.d.ts.map +1 -0
  165. package/dist/backend/routes.admin.js +1162 -0
  166. package/dist/backend/routes.admin.js.map +1 -0
  167. package/dist/backend/routes.api-key.d.ts +33 -0
  168. package/dist/backend/routes.api-key.d.ts.map +1 -0
  169. package/dist/backend/routes.api-key.js +43 -0
  170. package/dist/backend/routes.api-key.js.map +1 -0
  171. package/dist/backend/routes.external.d.ts +32 -0
  172. package/dist/backend/routes.external.d.ts.map +1 -0
  173. package/dist/backend/routes.external.js +115 -0
  174. package/dist/backend/routes.external.js.map +1 -0
  175. package/dist/backend/routes.public.d.ts +46 -0
  176. package/dist/backend/routes.public.d.ts.map +1 -0
  177. package/dist/backend/routes.public.js +318 -0
  178. package/dist/backend/routes.public.js.map +1 -0
  179. package/dist/backend/services/asset-references.d.ts +4 -0
  180. package/dist/backend/services/asset-references.d.ts.map +1 -0
  181. package/dist/backend/services/asset-references.js +104 -0
  182. package/dist/backend/services/asset-references.js.map +1 -0
  183. package/dist/backend/services/attachment.service.d.ts +45 -0
  184. package/dist/backend/services/attachment.service.d.ts.map +1 -0
  185. package/dist/backend/services/attachment.service.js +268 -0
  186. package/dist/backend/services/attachment.service.js.map +1 -0
  187. package/dist/backend/services/attribute-option-validator.d.ts +47 -0
  188. package/dist/backend/services/attribute-option-validator.d.ts.map +1 -0
  189. package/dist/backend/services/attribute-option-validator.js +69 -0
  190. package/dist/backend/services/attribute-option-validator.js.map +1 -0
  191. package/dist/backend/services/attribute-set-validations.d.ts +65 -0
  192. package/dist/backend/services/attribute-set-validations.d.ts.map +1 -0
  193. package/dist/backend/services/attribute-set-validations.js +89 -0
  194. package/dist/backend/services/attribute-set-validations.js.map +1 -0
  195. package/dist/backend/services/attribute-set.service.d.ts +50 -0
  196. package/dist/backend/services/attribute-set.service.d.ts.map +1 -0
  197. package/dist/backend/services/attribute-set.service.js +401 -0
  198. package/dist/backend/services/attribute-set.service.js.map +1 -0
  199. package/dist/backend/services/attribute-type-mapping.d.ts +66 -0
  200. package/dist/backend/services/attribute-type-mapping.d.ts.map +1 -0
  201. package/dist/backend/services/attribute-type-mapping.js +121 -0
  202. package/dist/backend/services/attribute-type-mapping.js.map +1 -0
  203. package/dist/backend/services/attribute-value-key.service.d.ts +48 -0
  204. package/dist/backend/services/attribute-value-key.service.d.ts.map +1 -0
  205. package/dist/backend/services/attribute-value-key.service.js +118 -0
  206. package/dist/backend/services/attribute-value-key.service.js.map +1 -0
  207. package/dist/backend/services/audit-references.d.ts +13 -0
  208. package/dist/backend/services/audit-references.d.ts.map +1 -0
  209. package/dist/backend/services/audit-references.js +51 -0
  210. package/dist/backend/services/audit-references.js.map +1 -0
  211. package/dist/backend/services/bulk-operation-queue.d.ts +26 -0
  212. package/dist/backend/services/bulk-operation-queue.d.ts.map +1 -0
  213. package/dist/backend/services/bulk-operation-queue.js +34 -0
  214. package/dist/backend/services/bulk-operation-queue.js.map +1 -0
  215. package/dist/backend/services/bulk-operation.service.d.ts +195 -0
  216. package/dist/backend/services/bulk-operation.service.d.ts.map +1 -0
  217. package/dist/backend/services/bulk-operation.service.js +510 -0
  218. package/dist/backend/services/bulk-operation.service.js.map +1 -0
  219. package/dist/backend/services/bundle.service.d.ts +87 -0
  220. package/dist/backend/services/bundle.service.d.ts.map +1 -0
  221. package/dist/backend/services/bundle.service.js +286 -0
  222. package/dist/backend/services/bundle.service.js.map +1 -0
  223. package/dist/backend/services/catalog-admin.service.d.ts +398 -0
  224. package/dist/backend/services/catalog-admin.service.d.ts.map +1 -0
  225. package/dist/backend/services/catalog-admin.service.js +1516 -0
  226. package/dist/backend/services/catalog-admin.service.js.map +1 -0
  227. package/dist/backend/services/catalog-attribute-read.service.d.ts +78 -0
  228. package/dist/backend/services/catalog-attribute-read.service.d.ts.map +1 -0
  229. package/dist/backend/services/catalog-attribute-read.service.js +216 -0
  230. package/dist/backend/services/catalog-attribute-read.service.js.map +1 -0
  231. package/dist/backend/services/catalog-bulk-import.service.d.ts +30 -0
  232. package/dist/backend/services/catalog-bulk-import.service.d.ts.map +1 -0
  233. package/dist/backend/services/catalog-bulk-import.service.js +136 -0
  234. package/dist/backend/services/catalog-bulk-import.service.js.map +1 -0
  235. package/dist/backend/services/catalog-bulk-update.service.d.ts +91 -0
  236. package/dist/backend/services/catalog-bulk-update.service.d.ts.map +1 -0
  237. package/dist/backend/services/catalog-bulk-update.service.js +330 -0
  238. package/dist/backend/services/catalog-bulk-update.service.js.map +1 -0
  239. package/dist/backend/services/catalog-category-read.service.d.ts +66 -0
  240. package/dist/backend/services/catalog-category-read.service.d.ts.map +1 -0
  241. package/dist/backend/services/catalog-category-read.service.js +248 -0
  242. package/dist/backend/services/catalog-category-read.service.js.map +1 -0
  243. package/dist/backend/services/catalog-org-price-decorator.d.ts +90 -0
  244. package/dist/backend/services/catalog-org-price-decorator.d.ts.map +1 -0
  245. package/dist/backend/services/catalog-org-price-decorator.js +184 -0
  246. package/dist/backend/services/catalog-org-price-decorator.js.map +1 -0
  247. package/dist/backend/services/catalog-product-filter.service.d.ts +82 -0
  248. package/dist/backend/services/catalog-product-filter.service.d.ts.map +1 -0
  249. package/dist/backend/services/catalog-product-filter.service.js +275 -0
  250. package/dist/backend/services/catalog-product-filter.service.js.map +1 -0
  251. package/dist/backend/services/catalog-product-read.service.d.ts +46 -0
  252. package/dist/backend/services/catalog-product-read.service.d.ts.map +1 -0
  253. package/dist/backend/services/catalog-product-read.service.js +197 -0
  254. package/dist/backend/services/catalog-product-read.service.js.map +1 -0
  255. package/dist/backend/services/catalog-query.service.d.ts +444 -0
  256. package/dist/backend/services/catalog-query.service.d.ts.map +1 -0
  257. package/dist/backend/services/catalog-query.service.js +1633 -0
  258. package/dist/backend/services/catalog-query.service.js.map +1 -0
  259. package/dist/backend/services/catalog-quick-search.service.d.ts +78 -0
  260. package/dist/backend/services/catalog-quick-search.service.d.ts.map +1 -0
  261. package/dist/backend/services/catalog-quick-search.service.js +159 -0
  262. package/dist/backend/services/catalog-quick-search.service.js.map +1 -0
  263. package/dist/backend/services/catalog-write-ports.d.ts +25 -0
  264. package/dist/backend/services/catalog-write-ports.d.ts.map +1 -0
  265. package/dist/backend/services/catalog-write-ports.js +63 -0
  266. package/dist/backend/services/catalog-write-ports.js.map +1 -0
  267. package/dist/backend/services/category-admin.service.d.ts +102 -0
  268. package/dist/backend/services/category-admin.service.d.ts.map +1 -0
  269. package/dist/backend/services/category-admin.service.js +271 -0
  270. package/dist/backend/services/category-admin.service.js.map +1 -0
  271. package/dist/backend/services/gallery.service.d.ts +85 -0
  272. package/dist/backend/services/gallery.service.d.ts.map +1 -0
  273. package/dist/backend/services/gallery.service.js +326 -0
  274. package/dist/backend/services/gallery.service.js.map +1 -0
  275. package/dist/backend/services/grouped.service.d.ts +39 -0
  276. package/dist/backend/services/grouped.service.d.ts.map +1 -0
  277. package/dist/backend/services/grouped.service.js +136 -0
  278. package/dist/backend/services/grouped.service.js.map +1 -0
  279. package/dist/backend/services/label-resolver.d.ts +16 -0
  280. package/dist/backend/services/label-resolver.d.ts.map +1 -0
  281. package/dist/backend/services/label-resolver.js +43 -0
  282. package/dist/backend/services/label-resolver.js.map +1 -0
  283. package/dist/backend/services/packaging-unit.service.d.ts +28 -0
  284. package/dist/backend/services/packaging-unit.service.d.ts.map +1 -0
  285. package/dist/backend/services/packaging-unit.service.js +197 -0
  286. package/dist/backend/services/packaging-unit.service.js.map +1 -0
  287. package/dist/backend/services/primary-asset-url.d.ts +4 -0
  288. package/dist/backend/services/primary-asset-url.d.ts.map +1 -0
  289. package/dist/backend/services/primary-asset-url.js +55 -0
  290. package/dist/backend/services/primary-asset-url.js.map +1 -0
  291. package/dist/backend/services/product-editor-preferences.service.d.ts +20 -0
  292. package/dist/backend/services/product-editor-preferences.service.d.ts.map +1 -0
  293. package/dist/backend/services/product-editor-preferences.service.js +44 -0
  294. package/dist/backend/services/product-editor-preferences.service.js.map +1 -0
  295. package/dist/backend/services/product-link.service.d.ts +169 -0
  296. package/dist/backend/services/product-link.service.d.ts.map +1 -0
  297. package/dist/backend/services/product-link.service.js +297 -0
  298. package/dist/backend/services/product-link.service.js.map +1 -0
  299. package/dist/backend/services/product-overrides.service.d.ts +77 -0
  300. package/dist/backend/services/product-overrides.service.d.ts.map +1 -0
  301. package/dist/backend/services/product-overrides.service.js +204 -0
  302. package/dist/backend/services/product-overrides.service.js.map +1 -0
  303. package/dist/backend/services/product-scope-context.service.d.ts +36 -0
  304. package/dist/backend/services/product-scope-context.service.d.ts.map +1 -0
  305. package/dist/backend/services/product-scope-context.service.js +106 -0
  306. package/dist/backend/services/product-scope-context.service.js.map +1 -0
  307. package/dist/backend/services/product-type-validations.d.ts +42 -0
  308. package/dist/backend/services/product-type-validations.d.ts.map +1 -0
  309. package/dist/backend/services/product-type-validations.js +55 -0
  310. package/dist/backend/services/product-type-validations.js.map +1 -0
  311. package/dist/backend/services/product-value-resolver.service.d.ts +59 -0
  312. package/dist/backend/services/product-value-resolver.service.d.ts.map +1 -0
  313. package/dist/backend/services/product-value-resolver.service.js +111 -0
  314. package/dist/backend/services/product-value-resolver.service.js.map +1 -0
  315. package/dist/backend/services/system-attribute-scopes.d.ts +18 -0
  316. package/dist/backend/services/system-attribute-scopes.d.ts.map +1 -0
  317. package/dist/backend/services/system-attribute-scopes.js +18 -0
  318. package/dist/backend/services/system-attribute-scopes.js.map +1 -0
  319. package/dist/backend/services/viewer-organization.d.ts +25 -0
  320. package/dist/backend/services/viewer-organization.d.ts.map +1 -0
  321. package/dist/backend/services/viewer-organization.js +31 -0
  322. package/dist/backend/services/viewer-organization.js.map +1 -0
  323. package/dist/manifest.d.ts +204 -0
  324. package/dist/manifest.d.ts.map +1 -0
  325. package/dist/manifest.js +686 -0
  326. package/dist/manifest.js.map +1 -0
  327. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts +33 -0
  328. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.d.ts.map +1 -0
  329. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js +118 -0
  330. package/dist/migrations/20260429T064146_catalog_attribute_sets_init.js.map +1 -0
  331. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts +24 -0
  332. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.d.ts.map +1 -0
  333. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js +31 -0
  334. package/dist/migrations/20260429T070004_catalog_product_attribute_extensions.js.map +1 -0
  335. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts +32 -0
  336. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.d.ts.map +1 -0
  337. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js +58 -0
  338. package/dist/migrations/20260429T102322_catalog_product_type_and_virtual_fields.js.map +1 -0
  339. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts +22 -0
  340. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.d.ts.map +1 -0
  341. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js +66 -0
  342. package/dist/migrations/20260429T111839_catalog_gallery_items_and_labels.js.map +1 -0
  343. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts +18 -0
  344. package/dist/migrations/20260429T112543_catalog_product_attachments.d.ts.map +1 -0
  345. package/dist/migrations/20260429T112543_catalog_product_attachments.js +73 -0
  346. package/dist/migrations/20260429T112543_catalog_product_attachments.js.map +1 -0
  347. package/dist/migrations/20260429T123726_catalog_product_links.d.ts +21 -0
  348. package/dist/migrations/20260429T123726_catalog_product_links.d.ts.map +1 -0
  349. package/dist/migrations/20260429T123726_catalog_product_links.js +48 -0
  350. package/dist/migrations/20260429T123726_catalog_product_links.js.map +1 -0
  351. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts +23 -0
  352. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.d.ts.map +1 -0
  353. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js +94 -0
  354. package/dist/migrations/20260429T130803_catalog_grouped_and_bundle.js.map +1 -0
  355. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts +24 -0
  356. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.d.ts.map +1 -0
  357. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js +31 -0
  358. package/dist/migrations/20260501T185835_catalog_product_attribute_is_comparable.js.map +1 -0
  359. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts +31 -0
  360. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.d.ts.map +1 -0
  361. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js +133 -0
  362. package/dist/migrations/20260505T060113_catalog_attribute_options_and_flags.js.map +1 -0
  363. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts +16 -0
  364. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.d.ts.map +1 -0
  365. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js +23 -0
  366. package/dist/migrations/20260515T082629_catalog_attribute_mass_editable.js.map +1 -0
  367. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts +10 -0
  368. package/dist/migrations/20260526T124736_catalog_product_status_inactive.d.ts.map +1 -0
  369. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js +22 -0
  370. package/dist/migrations/20260526T124736_catalog_product_status_inactive.js.map +1 -0
  371. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts +38 -0
  372. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.d.ts.map +1 -0
  373. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js +98 -0
  374. package/dist/migrations/20260611T140346_catalog_product_value_overrides_init.js.map +1 -0
  375. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts +13 -0
  376. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.d.ts.map +1 -0
  377. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js +17 -0
  378. package/dist/migrations/20260611T140400_catalog_attribute_quick_searchable.js.map +1 -0
  379. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts +16 -0
  380. package/dist/migrations/20260611T140407_catalog_bulk_operations.d.ts.map +1 -0
  381. package/dist/migrations/20260611T140407_catalog_bulk_operations.js +42 -0
  382. package/dist/migrations/20260611T140407_catalog_bulk_operations.js.map +1 -0
  383. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts +14 -0
  384. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.d.ts.map +1 -0
  385. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js +18 -0
  386. package/dist/migrations/20260611T140408_catalog_bulk_operation_logs.js.map +1 -0
  387. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts +11 -0
  388. package/dist/migrations/20260611T140412_catalog_product_packaging_units.d.ts.map +1 -0
  389. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js +29 -0
  390. package/dist/migrations/20260611T140412_catalog_product_packaging_units.js.map +1 -0
  391. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts +23 -0
  392. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.d.ts.map +1 -0
  393. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js +35 -0
  394. package/dist/migrations/20260718T060659_catalog_bulk_operation_revert_state.js.map +1 -0
  395. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts +12 -0
  396. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.d.ts.map +1 -0
  397. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js +16 -0
  398. package/dist/migrations/20260718T200343_catalog_category_custom_field_values.js.map +1 -0
  399. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts +32 -0
  400. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.d.ts.map +1 -0
  401. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js +286 -0
  402. package/dist/migrations/20260723T230401_catalog_attributes_on_custom_fields.js.map +1 -0
  403. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts +36 -0
  404. package/dist/migrations/20260804T152604_catalog_widen_product_sku.d.ts.map +1 -0
  405. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js +63 -0
  406. package/dist/migrations/20260804T152604_catalog_widen_product_sku.js.map +1 -0
  407. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts +18 -0
  408. package/dist/migrations/20260804T160244_catalog_category_activation.d.ts.map +1 -0
  409. package/dist/migrations/20260804T160244_catalog_category_activation.js +22 -0
  410. package/dist/migrations/20260804T160244_catalog_category_activation.js.map +1 -0
  411. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts +27 -0
  412. package/dist/migrations/20260912T094557_catalog_sales_channel_products.d.ts.map +1 -0
  413. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js +44 -0
  414. package/dist/migrations/20260912T094557_catalog_sales_channel_products.js.map +1 -0
  415. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts +27 -0
  416. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.d.ts.map +1 -0
  417. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js +44 -0
  418. package/dist/migrations/20260912T094623_catalog_sales_channel_categories.js.map +1 -0
  419. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts +36 -0
  420. package/dist/migrations/20260925T125527_catalog_inventory_columns.d.ts.map +1 -0
  421. package/dist/migrations/20260925T125527_catalog_inventory_columns.js +87 -0
  422. package/dist/migrations/20260925T125527_catalog_inventory_columns.js.map +1 -0
  423. package/dist/migrations/index.d.ts +55 -0
  424. package/dist/migrations/index.d.ts.map +1 -0
  425. package/dist/migrations/index.js +80 -0
  426. package/dist/migrations/index.js.map +1 -0
  427. package/dist/ports/index.d.ts +96 -0
  428. package/dist/ports/index.d.ts.map +1 -0
  429. package/dist/ports/index.js +2 -0
  430. package/dist/ports/index.js.map +1 -0
  431. package/docs/catalog/attachments.md +69 -0
  432. package/docs/catalog/attribute-sets.md +63 -0
  433. package/docs/catalog/attributes.md +244 -0
  434. package/docs/catalog/composite-products.md +115 -0
  435. package/docs/catalog/gallery-and-labels.md +73 -0
  436. package/docs/catalog/packaging-units.md +67 -0
  437. package/docs/catalog/per-channel-per-language-overrides.md +234 -0
  438. package/docs/catalog/product-links.md +79 -0
  439. package/docs/catalog.md +207 -0
  440. package/i18n/en.json +649 -0
  441. package/i18n/pl.json +649 -0
  442. package/package.json +109 -0
  443. package/tailwind.css +14 -0
@@ -0,0 +1,304 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useCallback, useEffect, useMemo, useState, } from 'react';
3
+ import { Link } from 'react-router-dom';
4
+ import { X } from 'lucide-react';
5
+ import { ApiError, apiClient } from '@endora-commerce/admin-kit/lib';
6
+ import { CategoryTreePicker } from '@endora-commerce/admin-kit/components';
7
+ import { useTranslation } from '@endora-commerce/admin-kit/i18n';
8
+ function isQueued(data) {
9
+ return 'queued' in data && data.queued === true;
10
+ }
11
+ const OVERLAY_STYLE = {
12
+ position: 'fixed',
13
+ inset: 0,
14
+ background: 'rgba(0, 0, 0, 0.4)',
15
+ zIndex: 50,
16
+ display: 'flex',
17
+ alignItems: 'center',
18
+ justifyContent: 'center',
19
+ };
20
+ const PANEL_STYLE = {
21
+ background: 'var(--bg-surface, #fff)',
22
+ borderRadius: 8,
23
+ width: 640,
24
+ maxWidth: '90vw',
25
+ maxHeight: '90vh',
26
+ overflow: 'auto',
27
+ boxShadow: '0 20px 50px rgba(0,0,0,0.3)',
28
+ padding: 0,
29
+ };
30
+ export function ProductsBulkEditDialog(props) {
31
+ const t = useTranslation('catalog');
32
+ const { productIds, selectionScope, onClose, onApplied } = props;
33
+ // Touched flags — a field is sent to the backend only when its touched
34
+ // flag is true. Default values are placeholders that are NOT sent.
35
+ const [touchStatus, setTouchStatus] = useState(false);
36
+ const [status, setStatus] = useState('active');
37
+ const [touchVisibility, setTouchVisibility] = useState(false);
38
+ const [visibility, setVisibility] = useState('public');
39
+ const [touchChannels, setTouchChannels] = useState(false);
40
+ const [channelsMode, setChannelsMode] = useState('add');
41
+ const [channelIds, setChannelIds] = useState([]);
42
+ const [touchCategories, setTouchCategories] = useState(false);
43
+ const [categoriesMode, setCategoriesMode] = useState('add');
44
+ const [categoryIds, setCategoryIds] = useState([]);
45
+ const [touchAttributeSet, setTouchAttributeSet] = useState(false);
46
+ // '' represents "no attribute set" (cleared); a uuid assigns that set.
47
+ const [attributeSetId, setAttributeSetId] = useState('');
48
+ const [attributeValues, setAttributeValues] = useState({});
49
+ const [touchedAttrs, setTouchedAttrs] = useState(new Set());
50
+ // Catalog metadata fetched on open.
51
+ const [attrs, setAttrs] = useState([]);
52
+ const [channels, setChannels] = useState([]);
53
+ const [categories, setCategories] = useState([]);
54
+ const [attributeSets, setAttributeSets] = useState([]);
55
+ const [submitting, setSubmitting] = useState(false);
56
+ const [error, setError] = useState(null);
57
+ const [result, setResult] = useState(null);
58
+ const [queued, setQueued] = useState(null);
59
+ // Load mass-editable attributes + channel / category metadata on mount.
60
+ useEffect(() => {
61
+ let cancelled = false;
62
+ (async () => {
63
+ try {
64
+ const [attrRes, chRes, catRes, setRes] = await Promise.all([
65
+ apiClient.get('/api/v1/admin/catalog/attributes/by-flag?flag=isMassEditable'),
66
+ // The sales-channels list endpoint returns `{ items }` (not `{ data }`);
67
+ // accept either shape so an unexpected envelope can never leave the
68
+ // state holding `undefined` (which would crash the render at
69
+ // `channels.map`).
70
+ apiClient
71
+ .get('/api/v1/admin/sales-channels')
72
+ .catch(() => ({ items: [] })),
73
+ apiClient
74
+ .get('/api/v1/admin/catalog/categories')
75
+ .catch(() => ({ data: [] })),
76
+ apiClient
77
+ .get('/api/v1/admin/catalog/attribute-sets')
78
+ .catch(() => ({ data: [] })),
79
+ ]);
80
+ if (cancelled)
81
+ return;
82
+ setAttrs(attrRes.data?.items ?? []);
83
+ setChannels(chRes.items ?? chRes.data ?? []);
84
+ setCategories(catRes.data ?? []);
85
+ setAttributeSets(setRes.data ?? []);
86
+ }
87
+ catch (e) {
88
+ if (!cancelled) {
89
+ setError(e instanceof ApiError ? e.envelope.error.message : String(e));
90
+ }
91
+ }
92
+ })();
93
+ return () => {
94
+ cancelled = true;
95
+ };
96
+ }, []);
97
+ const anyTouched = useMemo(() => touchStatus ||
98
+ touchVisibility ||
99
+ touchChannels ||
100
+ touchCategories ||
101
+ touchAttributeSet ||
102
+ touchedAttrs.size > 0, [touchStatus, touchVisibility, touchChannels, touchCategories, touchAttributeSet, touchedAttrs]);
103
+ const submit = useCallback(async () => {
104
+ if (!anyTouched) {
105
+ setError(t('productsList.bulkEdit.empty'));
106
+ return;
107
+ }
108
+ setSubmitting(true);
109
+ setError(null);
110
+ try {
111
+ const fields = {};
112
+ if (touchStatus)
113
+ fields.status = status;
114
+ if (touchVisibility)
115
+ fields.visibility = visibility;
116
+ if (touchChannels) {
117
+ fields.salesChannels = { mode: channelsMode, channelIds };
118
+ }
119
+ if (touchCategories) {
120
+ fields.categories = { mode: categoriesMode, categoryIds };
121
+ }
122
+ if (touchAttributeSet) {
123
+ // '' clears the set (null); a uuid assigns it.
124
+ fields.attributeSetId = attributeSetId === '' ? null : attributeSetId;
125
+ }
126
+ if (touchedAttrs.size > 0) {
127
+ const av = {};
128
+ for (const k of touchedAttrs)
129
+ av[k] = attributeValues[k];
130
+ fields.attributeValues = av;
131
+ }
132
+ const res = await apiClient.post('/api/v1/admin/catalog/products/bulk-update', { productIds, fields });
133
+ if (isQueued(res.data)) {
134
+ setQueued(res.data);
135
+ }
136
+ else {
137
+ setResult(res.data);
138
+ }
139
+ onApplied?.();
140
+ }
141
+ catch (e) {
142
+ if (e instanceof ApiError) {
143
+ const code = e.envelope.error.code;
144
+ if (code === 'ATTRIBUTE_NOT_MASS_EDITABLE') {
145
+ const details = e.envelope.error.details;
146
+ setError(t('productsList.bulkEdit.error.attribute_not_mass_editable', {
147
+ attribute: details?.attribute ?? '?',
148
+ }));
149
+ }
150
+ else if (code === 'BULK_TOO_LARGE') {
151
+ const details = e.envelope.error.details;
152
+ setError(t('productsList.bulkEdit.error.bulk_too_large', {
153
+ total: productIds.length,
154
+ maxBatchSize: details?.maxBatchSize ?? 200,
155
+ }));
156
+ }
157
+ else {
158
+ setError(e.envelope.error.message);
159
+ }
160
+ }
161
+ else {
162
+ setError(String(e));
163
+ }
164
+ }
165
+ finally {
166
+ setSubmitting(false);
167
+ }
168
+ }, [
169
+ anyTouched,
170
+ touchStatus,
171
+ status,
172
+ touchVisibility,
173
+ visibility,
174
+ touchChannels,
175
+ channelsMode,
176
+ channelIds,
177
+ touchCategories,
178
+ categoriesMode,
179
+ categoryIds,
180
+ touchAttributeSet,
181
+ attributeSetId,
182
+ touchedAttrs,
183
+ attributeValues,
184
+ productIds,
185
+ onApplied,
186
+ t,
187
+ ]);
188
+ return (_jsx("div", { style: OVERLAY_STYLE, role: "dialog", "aria-modal": "true", children: _jsxs("div", { style: PANEL_STYLE, children: [_jsxs("div", { style: {
189
+ display: 'flex',
190
+ alignItems: 'center',
191
+ justifyContent: 'space-between',
192
+ padding: '14px 18px',
193
+ borderBottom: '1px solid var(--border, #e5e7eb)',
194
+ }, children: [_jsxs("div", { children: [_jsx("div", { style: { fontSize: 15, fontWeight: 600 }, children: t('productsList.bulkEdit.title', { count: productIds.length }) }), selectionScope ? (_jsx("div", { className: "b2b-muted", style: { fontSize: 12, marginTop: 2 }, children: selectionScope === 'collection'
195
+ ? t('productsList.selection.scopeCollection')
196
+ : t('productsList.selection.scopePage') })) : null] }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--ghost b2b-btn--icon b2b-btn--sm", onClick: onClose, "aria-label": "close", children: _jsx(X, { size: 14 }) })] }), error ? (_jsx("div", { style: {
197
+ margin: '12px 18px 0',
198
+ padding: '10px 12px',
199
+ background: 'var(--danger-soft, #fee2e2)',
200
+ color: 'var(--danger-soft-fg, #991b1b)',
201
+ borderRadius: 6,
202
+ fontSize: 13,
203
+ }, children: error })) : null, queued ? (_jsx(BulkEditQueuedAck, { queued: queued, onClose: onClose, t: t })) : result ? (_jsx(BulkEditSummary, { result: result, onClose: onClose, t: t })) : (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 18 }, children: [_jsx(FieldGroup, { label: t('productsList.bulkEdit.section.status'), touched: touchStatus, onToggle: setTouchStatus, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchStatus, value: status, onChange: (e) => setStatus(e.target.value), children: [_jsx("option", { value: "draft", children: "draft" }), _jsx("option", { value: "active", children: "active" }), _jsx("option", { value: "inactive", children: "inactive" })] }) }), _jsx(FieldGroup, { label: t('productsList.bulkEdit.section.visibility'), touched: touchVisibility, onToggle: setTouchVisibility, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchVisibility, value: visibility, onChange: (e) => setVisibility(e.target.value), children: [_jsx("option", { value: "public", children: "public" }), _jsx("option", { value: "logged_in_only", children: "logged_in_only" }), _jsx("option", { value: "organization_restricted", children: "organization_restricted" })] }) }), _jsxs(FieldGroup, { label: t('productsList.bulkEdit.section.salesChannels'), touched: touchChannels, onToggle: setTouchChannels, t: t, children: [_jsx(ModePicker, { mode: channelsMode, onChange: setChannelsMode, disabled: !touchChannels, t: t }), _jsx(MultiSelect, { options: channels.map((c) => ({
204
+ id: c.id,
205
+ label: typeof c.name === 'string'
206
+ ? c.name
207
+ : c.name['en-US'] ?? c.name['pl-PL'] ?? c.code,
208
+ })), selected: channelIds, onChange: setChannelIds, disabled: !touchChannels })] }), _jsxs(FieldGroup, { label: t('productsList.bulkEdit.section.categories'), touched: touchCategories, onToggle: setTouchCategories, t: t, children: [_jsx(ModePicker, { mode: categoriesMode, onChange: setCategoriesMode, disabled: !touchCategories, t: t }), _jsx(CategoryTreePicker, { categories: categories, selectedIds: categoryIds, onChange: setCategoryIds, disabled: !touchCategories })] }), _jsx(FieldGroup, { label: t('productsList.bulkEdit.section.attributeSet'), touched: touchAttributeSet, onToggle: setTouchAttributeSet, t: t, children: _jsxs("select", { className: "b2b-field", disabled: !touchAttributeSet, value: attributeSetId, onChange: (e) => setAttributeSetId(e.target.value), children: [_jsx("option", { value: "", children: t('productsList.bulkEdit.attributeSet.none') }), attributeSets.map((s) => (_jsx("option", { value: s.id, children: s.name['en-US'] ?? s.name['pl-PL'] ?? Object.values(s.name)[0] ?? s.code }, s.id)))] }) }), attrs.length > 0 ? (_jsxs("div", { children: [_jsx("div", { style: { fontSize: 13, fontWeight: 600, marginBottom: 8 }, children: t('productsList.bulkEdit.section.attributes') }), _jsx("div", { style: { display: 'flex', flexDirection: 'column', gap: 10 }, children: attrs.map((a) => {
209
+ const touched = touchedAttrs.has(a.key);
210
+ return (_jsxs("div", { style: {
211
+ display: 'flex',
212
+ alignItems: 'center',
213
+ gap: 10,
214
+ padding: 10,
215
+ background: 'var(--bg-muted, #f8fafc)',
216
+ borderRadius: 6,
217
+ }, children: [_jsx("input", { type: "checkbox", className: "b2b-cbx", checked: touched, onChange: () => {
218
+ setTouchedAttrs((prev) => {
219
+ const next = new Set(prev);
220
+ if (next.has(a.key)) {
221
+ next.delete(a.key);
222
+ }
223
+ else {
224
+ next.add(a.key);
225
+ }
226
+ return next;
227
+ });
228
+ } }), _jsx("div", { style: { minWidth: 140, fontSize: 13 }, children: a.label['en-US'] ?? a.labelDefault }), _jsx("input", { type: "text", className: "b2b-field", disabled: !touched, style: { flex: 1 }, value: attributeValues[a.key] ?? '', onChange: (e) => setAttributeValues((prev) => ({ ...prev, [a.key]: e.target.value })), placeholder: a.valueType })] }, a.id));
229
+ }) })] })) : null] })), !result && !queued ? (_jsxs("div", { style: {
230
+ display: 'flex',
231
+ justifyContent: 'flex-end',
232
+ gap: 8,
233
+ padding: 14,
234
+ borderTop: '1px solid var(--border, #e5e7eb)',
235
+ }, children: [_jsx("button", { type: "button", className: "b2b-btn", onClick: onClose, disabled: submitting, children: t('productsList.bulkEdit.action.cancel') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: () => {
236
+ void submit();
237
+ }, disabled: submitting || !anyTouched, children: t('productsList.bulkEdit.action.apply') })] })) : null] }) }));
238
+ }
239
+ function FieldGroup(props) {
240
+ return (_jsxs("div", { children: [_jsxs("label", { style: {
241
+ display: 'flex',
242
+ alignItems: 'center',
243
+ gap: 8,
244
+ fontSize: 13,
245
+ fontWeight: 600,
246
+ marginBottom: 6,
247
+ cursor: 'pointer',
248
+ }, children: [_jsx("input", { type: "checkbox", className: "b2b-cbx", checked: props.touched, onChange: (e) => props.onToggle(e.target.checked) }), props.label, !props.touched ? (_jsx("span", { style: { fontWeight: 400, color: 'var(--fg-muted, #64748b)', fontSize: 12 }, children: props.t('productsList.bulkEdit.untouched') })) : null] }), _jsx("div", { style: { paddingLeft: 26, display: 'flex', flexDirection: 'column', gap: 6 }, children: props.children })] }));
249
+ }
250
+ function ModePicker(props) {
251
+ return (_jsx("div", { style: { display: 'flex', gap: 6 }, children: ['add', 'replace'].map((m) => (_jsx("button", { type: "button", className: `b2b-btn b2b-btn--sm${props.mode === m ? ' b2b-btn--primary' : ''}`, disabled: props.disabled, onClick: () => props.onChange(m), children: props.t(`productsList.bulkEdit.mode.${m}`) }, m))) }));
252
+ }
253
+ function MultiSelect(props) {
254
+ return (_jsx("div", { style: {
255
+ display: 'flex',
256
+ flexWrap: 'wrap',
257
+ gap: 6,
258
+ opacity: props.disabled ? 0.5 : 1,
259
+ pointerEvents: props.disabled ? 'none' : 'auto',
260
+ }, children: props.options.map((o) => {
261
+ const active = props.selected.includes(o.id);
262
+ return (_jsx("button", { type: "button", className: `b2b-btn b2b-btn--sm${active ? ' b2b-btn--primary' : ''}`, onClick: () => {
263
+ if (active) {
264
+ props.onChange(props.selected.filter((x) => x !== o.id));
265
+ }
266
+ else {
267
+ props.onChange([...props.selected, o.id]);
268
+ }
269
+ }, children: o.label }, o.id));
270
+ }) }));
271
+ }
272
+ function BulkEditQueuedAck(props) {
273
+ return (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 14 }, children: [_jsxs("div", { style: {
274
+ padding: 14,
275
+ borderRadius: 8,
276
+ background: 'var(--info-bg, #eff6ff)',
277
+ border: '1px solid var(--info-border, #bfdbfe)',
278
+ fontSize: 14,
279
+ lineHeight: 1.5,
280
+ }, children: [_jsx("strong", { children: props.t('productsList.bulkEdit.queued.title') }), _jsx("div", { style: { marginTop: 4 }, children: props.t('productsList.bulkEdit.queued.body', { total: props.queued.total }) })] }), _jsxs("div", { style: { display: 'flex', justifyContent: 'space-between', gap: 8 }, children: [_jsx(Link, { to: "/catalog/bulk-operations", className: "b2b-btn", onClick: props.onClose, style: { textDecoration: 'none' }, children: props.t('productsList.bulkEdit.queued.viewAll') }), _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: props.onClose, children: props.t('productsList.bulkEdit.action.close') })] })] }));
281
+ }
282
+ function BulkEditSummary(props) {
283
+ const { summary, results } = props.result;
284
+ return (_jsxs("div", { style: { padding: 18, display: 'flex', flexDirection: 'column', gap: 12 }, children: [_jsxs("div", { style: { display: 'flex', gap: 12 }, children: [_jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.succeeded'), count: summary.succeeded, color: "#16a34a" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.skipped'), count: summary.skipped, color: "#ca8a04" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.failed'), count: summary.failed, color: "#dc2626" }), _jsx(SummaryBadge, { label: props.t('productsList.bulkEdit.summary.total'), count: summary.total, color: "#475569" })] }), results.some((r) => r.status !== 'succeeded') ? (_jsx("div", { style: {
285
+ maxHeight: 260,
286
+ overflow: 'auto',
287
+ border: '1px solid var(--border, #e5e7eb)',
288
+ borderRadius: 6,
289
+ }, children: _jsxs("table", { className: "b2b-tbl", style: { width: '100%' }, children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { children: "Product" }), _jsx("th", { children: "Status" }), _jsx("th", { children: "Reason" })] }) }), _jsx("tbody", { children: results
290
+ .filter((r) => r.status !== 'succeeded')
291
+ .map((r) => (_jsxs("tr", { children: [_jsx("td", { children: _jsxs("a", { href: `/catalog/products/${r.productId}`, style: { color: 'var(--primary-color, #2563eb)' }, children: [r.productId.slice(0, 8), "\u2026"] }) }), _jsx("td", { children: r.status }), _jsxs("td", { children: [r.reason
292
+ ? props.t(`productsList.bulkEdit.reason.${r.reason}`)
293
+ : '', r.details?.attribute ? ` (${r.details.attribute})` : ''] })] }, r.productId))) })] }) })) : null, _jsx("div", { style: { display: 'flex', justifyContent: 'flex-end' }, children: _jsx("button", { type: "button", className: "b2b-btn b2b-btn--primary", onClick: props.onClose, children: props.t('productsList.bulkEdit.action.cancel') }) })] }));
294
+ }
295
+ function SummaryBadge(props) {
296
+ return (_jsxs("div", { style: {
297
+ flex: 1,
298
+ padding: '10px 12px',
299
+ borderRadius: 6,
300
+ background: 'var(--bg-muted, #f8fafc)',
301
+ borderLeft: `4px solid ${props.color}`,
302
+ }, children: [_jsx("div", { style: { fontSize: 11, color: 'var(--fg-muted, #64748b)' }, children: props.label }), _jsx("div", { style: { fontSize: 20, fontWeight: 600, color: props.color }, children: props.count })] }));
303
+ }
304
+ //# sourceMappingURL=ProductsBulkEditDialog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductsBulkEditDialog.js","sourceRoot":"","sources":["../../../src/admin/components/ProductsBulkEditDialog.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * `catalog`'s admin surface — nine routes and six sidebar entries (feature
3
+ * 091, Phase 4 batch 15; the ninth route arrives with D-221).
4
+ *
5
+ * **The largest surface in the drain, and a zone *host* six members over.**
6
+ * `ProductEditor.tsx` mounts `product.editor.details.before`,
7
+ * `product.editor.field.after` (five times, once per editable core field),
8
+ * `product.editor.pricing.before`, `product.editor.pricing.after` and
9
+ * `product.editor.channels`; `ProductAttributesTab.tsx` mounts a sixth
10
+ * `product.editor.field.after`; and `CategoriesTree.tsx` mounts
11
+ * `category.editor.after`. P4b and P7a published those members and the
12
+ * contributors were scheduled against them in batch 13 — this is the host
13
+ * arriving, which `check:admin-registrations` allows in either order because a
14
+ * zone is neither a route nor a nav entry.
15
+ *
16
+ * **What it drains: nothing, and the zero is measured rather than assumed.**
17
+ * Before anything moved on this branch, this module's
18
+ * `backend/scripts/ledgers/cross-module-imports/catalog.ts` shard held three
19
+ * keys and every one of them is a **backend** SQL join —
20
+ * `carts/cart_items`, `orders/order_items` and the kernel's
21
+ * `sales_channel_products` — features 077 and 080's debt, in files this batch
22
+ * does not open. Nothing names this module as an admin target, `admin-surface.ts`
23
+ * is empty and `foreign-module-ids.ts` names it nowhere.
24
+ * `check:module-boundary` reads
25
+ * `cross-module reaches=7 (imports=3 sql=4) ledger-size=7 shards=4` on both
26
+ * sides of the move, and that agreement is the measurement rather than a
27
+ * silence.
28
+ *
29
+ * **The product create form is a route of its own** (D-221, R17). It was not,
30
+ * and the header that stood here argued it should not be: the create form was
31
+ * `/catalog/products/:id` with the id `new`, served on `catalog:read`, while
32
+ * `new-product` advertised the same URL on `catalog:write`. Since feature 091
33
+ * the admin *enforces* the pairing — `ModuleRoute` renders the not-found
34
+ * treatment for a route the operator's codes do not satisfy — so an advertised
35
+ * holder of the write code and not the read code reached a page that says
36
+ * nothing about permissions, which is Principle XVI item 2's prohibition one
37
+ * page worse than the 403 it names. The route below is that URL's own
38
+ * declaration, on the code its own purpose needs.
39
+ *
40
+ * **This entry exports data and nothing else** (R2); every component is a
41
+ * dynamic-import factory (R6).
42
+ */
43
+ import type { AdminContributions } from '@endora-commerce/admin-kit/contributions';
44
+ export declare const contributions: AdminContributions;
45
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AA0CnF,eAAO,MAAM,aAAa,EAAE,kBAiJ3B,CAAC"}
@@ -0,0 +1,184 @@
1
+ /**
2
+ * The code that opens every screen below except the create form.
3
+ *
4
+ * `packages/modules/catalog/src/backend/routes.admin.ts` gates the product
5
+ * roster, one product, the category tree, the attribute and attribute-set
6
+ * registries, the attachment types and the bulk-operation history with
7
+ * `catalog:read`; every save, bulk edit and delete enforces `catalog:write` on
8
+ * the API and gates its own control on the screen. The read code is what opens
9
+ * the screen, which is issue #232's rule and the code all six hand-written
10
+ * sidebar rows carried.
11
+ */
12
+ const READ_PERMISSION = 'catalog:read';
13
+ /**
14
+ * The code that opens the create form, and only that.
15
+ *
16
+ * A screen whose one purpose is a write opens on the write code — batch 10's
17
+ * `/credentials/new`, batch 14's `/sales-channels/new`, batch 15's
18
+ * `/orders/new`, and now this. The alternative, `catalog:read`, would advertise
19
+ * to every read-only operator a form whose save refuses, which moves the 403
20
+ * from the router to the end of the work.
21
+ *
22
+ * **The form needs `catalog:read` as well, and that is why the manifest
23
+ * declares `requires`** (D-221; R17's third clause). `ProductEditor`'s loader
24
+ * fetches `/catalog/categories` and `/catalog/attribute-sets` unconditionally,
25
+ * before any `isNew` branch, and the create path *uses* the second to select
26
+ * the new product's default attribute set; both are `requireAdmin('catalog:read')`.
27
+ * So this is a two-code screen and one `requiredPermission` field cannot say
28
+ * both. `blog`'s and `sales_channels`' create branches return from their loader
29
+ * before fetching anything, which is why the write code alone is complete for
30
+ * them and not here. The second code is declared as `requires` on
31
+ * `catalog:write` in this module's manifest, where the role editor renders it
32
+ * as a one-click shortfall — advisory, so the incomplete role is visible where
33
+ * it is created rather than refused at the gate.
34
+ */
35
+ const WRITE_PERMISSION = 'catalog:write';
36
+ /** The module's landing route: the product roster. */
37
+ const ROUTE_PATH = '/catalog/products';
38
+ export const contributions = {
39
+ routes: [
40
+ {
41
+ path: ROUTE_PATH,
42
+ component: () => import('./pages/ProductsList.js'),
43
+ requiredPermission: READ_PERMISSION,
44
+ index: true,
45
+ },
46
+ {
47
+ // **The create form, declared** (D-221). It is the same component — the
48
+ // id `new` is what `ProductEditor`'s own `params.id === 'new'` reads —
49
+ // and it is a route of its own so that the URL `new-product` advertises
50
+ // is answered by a declaration carrying the code `new-product` names.
51
+ // `<Routes>` ranks a static segment above a parametric one, so the order
52
+ // here is documentation rather than mechanism; it is written first
53
+ // anyway, because a reader comparing this list to the palette should
54
+ // meet the specific declaration before the general one.
55
+ path: `${ROUTE_PATH}/new`,
56
+ component: () => import('./pages/ProductEditor.js'),
57
+ requiredPermission: WRITE_PERMISSION,
58
+ },
59
+ {
60
+ // The edit form keeps the read code: opening one product is a read, and
61
+ // every control on it that writes gates itself. Nothing about D-221
62
+ // touches this route — the tightening is the create URL's alone, and
63
+ // saying so here is what stops the next reader from applying the write
64
+ // code to both.
65
+ path: `${ROUTE_PATH}/:id`,
66
+ component: () => import('./pages/ProductEditor.js'),
67
+ requiredPermission: READ_PERMISSION,
68
+ },
69
+ {
70
+ path: '/catalog/categories',
71
+ component: () => import('./pages/CategoriesTree.js'),
72
+ requiredPermission: READ_PERMISSION,
73
+ },
74
+ {
75
+ path: '/catalog/attributes',
76
+ component: () => import('./pages/AttributesManager.js'),
77
+ requiredPermission: READ_PERMISSION,
78
+ },
79
+ {
80
+ path: '/catalog/attribute-sets',
81
+ component: () => import('./pages/AttributeSetsPage.js'),
82
+ requiredPermission: READ_PERMISSION,
83
+ },
84
+ {
85
+ path: '/catalog/attachment-types',
86
+ component: () => import('./pages/AttachmentTypesPage.js'),
87
+ requiredPermission: READ_PERMISSION,
88
+ },
89
+ {
90
+ path: '/catalog/bulk-operations',
91
+ component: () => import('./pages/BulkOperationsPage.js'),
92
+ requiredPermission: READ_PERMISSION,
93
+ },
94
+ {
95
+ path: '/catalog/bulk-operations/:id',
96
+ component: () => import('./pages/BulkOperationDetailPage.js'),
97
+ requiredPermission: READ_PERMISSION,
98
+ },
99
+ ],
100
+ nav: [
101
+ {
102
+ to: ROUTE_PATH,
103
+ // Module-relative (R8), resolved in this module's own namespace out of
104
+ // `packages/modules/catalog/i18n/`. It was `appShell.nav.products` in the
105
+ // shared `_i18n` bundle, one of the four shared files a module author had
106
+ // to edit.
107
+ labelKey: 'nav.products.label',
108
+ // The glyph `AppShell.tsx` rendered by hand, already on
109
+ // `KnownIconNameSchema`.
110
+ icon: 'Package',
111
+ section: 'catalog',
112
+ // **Ten times the position, not a hundred**, and this is the one batch
113
+ // where the convention had to bend. *Catalog* already holds three
114
+ // contributed rows — `assets_library` at 200, `pim_ergonode` at 250,
115
+ // `pim_pimcore` at 300 — and every one of them sits **below** these five
116
+ // in the sidebar an operator has today. Position times a hundred would
117
+ // tie `/catalog/categories` with `assets_library`' 200, where the tie
118
+ // breaks on module id and puts a picture library above the second
119
+ // catalogue row. A decade that is entirely this module's keeps the order
120
+ // the hand-written table had and the order the operator sees.
121
+ weight: 10,
122
+ requiredPermission: READ_PERMISSION,
123
+ },
124
+ {
125
+ to: '/catalog/categories',
126
+ labelKey: 'nav.categories.label',
127
+ icon: 'Boxes',
128
+ section: 'catalog',
129
+ weight: 20,
130
+ requiredPermission: READ_PERMISSION,
131
+ },
132
+ {
133
+ to: '/catalog/attributes',
134
+ labelKey: 'nav.attributes.label',
135
+ icon: 'Tag',
136
+ section: 'catalog',
137
+ weight: 30,
138
+ requiredPermission: READ_PERMISSION,
139
+ },
140
+ {
141
+ to: '/catalog/attribute-sets',
142
+ labelKey: 'nav.attributeSets.label',
143
+ icon: 'Tag',
144
+ section: 'catalog',
145
+ weight: 40,
146
+ requiredPermission: READ_PERMISSION,
147
+ },
148
+ {
149
+ to: '/catalog/attachment-types',
150
+ labelKey: 'nav.attachmentTypes.label',
151
+ icon: 'FileText',
152
+ section: 'catalog',
153
+ weight: 50,
154
+ requiredPermission: READ_PERMISSION,
155
+ },
156
+ {
157
+ to: '/catalog/bulk-operations',
158
+ labelKey: 'nav.bulkOperations.label',
159
+ // The glyph `AppShell.tsx` rendered by hand. It joins
160
+ // `KnownIconNameSchema` and the kit's `icon-map.ts` in this merge request
161
+ // rather than the entry silently degrading to a name that happens to be
162
+ // on the allowlist already.
163
+ icon: 'ListChecks',
164
+ // **A second section, and this module is the first to declare one.** The
165
+ // hand-written table's reason travels with the row: bulk operations may
166
+ // span many domains rather than only products, so the entry lives under
167
+ // *System* while the URL stays `/catalog/bulk-operations` to keep
168
+ // existing deep links — the bulk-edit "queued" acknowledgement among them
169
+ // — valid.
170
+ section: 'system',
171
+ // Batch four's convention, unbent here because *System* has room for it:
172
+ // this row was **fourth** of that section's hand-written thirteen, behind
173
+ // `/platform/modules`, `/admin-users` (200) and `/admin-roles` (300) and
174
+ // ahead of `/custom-fields` (500). Today an operator sees it second,
175
+ // because `composeNav` puts every host row above every contributed one
176
+ // and this was the section's only host row besides `/platform/modules`.
177
+ // So the row moves from second to fourth, which is where the table it was
178
+ // written in put it.
179
+ weight: 400,
180
+ requiredPermission: READ_PERMISSION,
181
+ },
182
+ ],
183
+ };
184
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/admin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ export interface ListFilterSnapshot {
2
+ status: 'all' | 'active' | 'draft' | 'inactive';
3
+ type: 'all' | 'simple' | 'configurable' | 'grouped' | 'bundle' | 'virtual';
4
+ q: string;
5
+ }
6
+ /**
7
+ * Feature 033 — resolve all product ids for the frozen list filter snapshot.
8
+ */
9
+ export declare function resolveProductSelection(snapshot: ListFilterSnapshot): Promise<{
10
+ productIds: string[];
11
+ total: number;
12
+ }>;
13
+ export declare const BULK_EDIT_MAX_BATCH_SIZE = 200;
14
+ /**
15
+ * Hard client-side ceiling on a single bulk-edit selection, matching the
16
+ * contract's `bulkUpdateProductsRequestSchema` upper bound. Selections
17
+ * between the synchronous threshold and this limit are accepted and
18
+ * processed as a background bulk operation.
19
+ */
20
+ export declare const BULK_EDIT_HARD_MAX = 10000;
21
+ //# sourceMappingURL=resolve-product-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-product-selection.d.ts","sourceRoot":"","sources":["../../../src/admin/lib/resolve-product-selection.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,KAAK,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,cAAc,GAAG,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC3E,CAAC,EAAE,MAAM,CAAC;CACX;AAMD;;GAEG;AACH,wBAAsB,uBAAuB,CAC3C,QAAQ,EAAE,kBAAkB,GAC3B,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,CAYlD;AAED,eAAO,MAAM,wBAAwB,MAAM,CAAC;AAE5C;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,QAAS,CAAC"}
@@ -0,0 +1,25 @@
1
+ import { apiClient } from '@endora-commerce/admin-kit/lib';
2
+ /**
3
+ * Feature 033 — resolve all product ids for the frozen list filter snapshot.
4
+ */
5
+ export async function resolveProductSelection(snapshot) {
6
+ const body = { includeArchived: true };
7
+ if (snapshot.status !== 'all')
8
+ body['status'] = snapshot.status;
9
+ if (snapshot.type !== 'all')
10
+ body['type'] = snapshot.type;
11
+ const trimmed = snapshot.q.trim();
12
+ if (trimmed)
13
+ body['q'] = trimmed;
14
+ const res = await apiClient.post('/api/v1/admin/catalog/products/resolve-ids', body);
15
+ return res.data;
16
+ }
17
+ export const BULK_EDIT_MAX_BATCH_SIZE = 200;
18
+ /**
19
+ * Hard client-side ceiling on a single bulk-edit selection, matching the
20
+ * contract's `bulkUpdateProductsRequestSchema` upper bound. Selections
21
+ * between the synchronous threshold and this limit are accepted and
22
+ * processed as a background bulk operation.
23
+ */
24
+ export const BULK_EDIT_HARD_MAX = 10_000;
25
+ //# sourceMappingURL=resolve-product-selection.js.map