@open-mercato/core 0.6.7-develop.6788.1.c2a1520a30 → 0.6.7-develop.6814.1.0627c7e9f1

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 (394) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/customer_deal_person_link/index.js +2 -0
  3. package/dist/generated/entities/customer_deal_person_link/index.js.map +2 -2
  4. package/dist/generated/entities/customer_user_invitation/index.js +2 -0
  5. package/dist/generated/entities/customer_user_invitation/index.js.map +2 -2
  6. package/dist/generated/entities.ids.generated.js +1 -0
  7. package/dist/generated/entities.ids.generated.js.map +2 -2
  8. package/dist/generated/entity-fields-registry.js +2 -0
  9. package/dist/generated/entity-fields-registry.js.map +2 -2
  10. package/dist/modules/business_rules/api/openmercato-call-options/route.js +85 -0
  11. package/dist/modules/business_rules/api/openmercato-call-options/route.js.map +7 -0
  12. package/dist/modules/business_rules/api/rules/route.js +71 -4
  13. package/dist/modules/business_rules/api/rules/route.js.map +2 -2
  14. package/dist/modules/business_rules/components/ActionBuilder.js +47 -4
  15. package/dist/modules/business_rules/components/ActionBuilder.js.map +3 -3
  16. package/dist/modules/business_rules/components/ActionRow.js +106 -16
  17. package/dist/modules/business_rules/components/ActionRow.js.map +2 -2
  18. package/dist/modules/business_rules/components/utils/actionValidation.js +6 -0
  19. package/dist/modules/business_rules/components/utils/actionValidation.js.map +2 -2
  20. package/dist/modules/business_rules/lib/action-executor.js +148 -0
  21. package/dist/modules/business_rules/lib/action-executor.js.map +2 -2
  22. package/dist/modules/business_rules/lib/openmercato-call-options-types.js +5 -0
  23. package/dist/modules/business_rules/lib/openmercato-call-options-types.js.map +7 -0
  24. package/dist/modules/business_rules/lib/openmercato-call-options.js +231 -0
  25. package/dist/modules/business_rules/lib/openmercato-call-options.js.map +7 -0
  26. package/dist/modules/business_rules/lib/rule-engine.js +5 -1
  27. package/dist/modules/business_rules/lib/rule-engine.js.map +2 -2
  28. package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js +11 -1
  29. package/dist/modules/communication_channels/api/post/webhook/[provider]/route.js.map +2 -2
  30. package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js +11 -6
  31. package/dist/modules/communication_channels/api/post/webhooks/gmail/route.js.map +2 -2
  32. package/dist/modules/configs/lib/upgrade-actions.js +12 -0
  33. package/dist/modules/configs/lib/upgrade-actions.js.map +2 -2
  34. package/dist/modules/customer_accounts/api/admin/users/[id].js +10 -1
  35. package/dist/modules/customer_accounts/api/admin/users/[id].js.map +2 -2
  36. package/dist/modules/customer_accounts/api/admin/users-invite.js +61 -4
  37. package/dist/modules/customer_accounts/api/admin/users-invite.js.map +2 -2
  38. package/dist/modules/customer_accounts/api/portal/users-invite.js +20 -2
  39. package/dist/modules/customer_accounts/api/portal/users-invite.js.map +2 -2
  40. package/dist/modules/customer_accounts/data/entities.js +3 -0
  41. package/dist/modules/customer_accounts/data/entities.js.map +2 -2
  42. package/dist/modules/customer_accounts/data/validators.js +1 -0
  43. package/dist/modules/customer_accounts/data/validators.js.map +2 -2
  44. package/dist/modules/customer_accounts/emails/CustomerInvitationEmail.js +26 -0
  45. package/dist/modules/customer_accounts/emails/CustomerInvitationEmail.js.map +7 -0
  46. package/dist/modules/customer_accounts/lib/customerEntityOwnership.js +29 -3
  47. package/dist/modules/customer_accounts/lib/customerEntityOwnership.js.map +2 -2
  48. package/dist/modules/customer_accounts/lib/customerUrl.js +19 -10
  49. package/dist/modules/customer_accounts/lib/customerUrl.js.map +2 -2
  50. package/dist/modules/customer_accounts/lib/invitationEmail.js +35 -0
  51. package/dist/modules/customer_accounts/lib/invitationEmail.js.map +7 -0
  52. package/dist/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.js +13 -0
  53. package/dist/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.js.map +7 -0
  54. package/dist/modules/customer_accounts/services/customerInvitationService.js +32 -2
  55. package/dist/modules/customer_accounts/services/customerInvitationService.js.map +2 -2
  56. package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js +47 -7
  57. package/dist/modules/customer_accounts/subscribers/autoLinkCrm.js.map +2 -2
  58. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js +2 -2
  59. package/dist/modules/customer_accounts/widgets/injection/account-status/widget.client.js.map +2 -2
  60. package/dist/modules/customer_accounts/widgets/injection-table.js +1 -1
  61. package/dist/modules/customer_accounts/widgets/injection-table.js.map +2 -2
  62. package/dist/modules/customers/api/deals/[id]/people/route.js +4 -2
  63. package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
  64. package/dist/modules/customers/api/deals/[id]/route.js +7 -3
  65. package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
  66. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js +11 -1
  67. package/dist/modules/customers/backend/customers/companies-v2/[id]/page.js.map +2 -2
  68. package/dist/modules/customers/backend/customers/deals/[id]/page.js +14 -8
  69. package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
  70. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js +21 -6
  71. package/dist/modules/customers/backend/customers/people-v2/[id]/page.js.map +2 -2
  72. package/dist/modules/customers/cli.js +17 -7
  73. package/dist/modules/customers/cli.js.map +2 -2
  74. package/dist/modules/customers/commands/deals.js +48 -10
  75. package/dist/modules/customers/commands/deals.js.map +2 -2
  76. package/dist/modules/customers/commands/people.js +2 -0
  77. package/dist/modules/customers/commands/people.js.map +2 -2
  78. package/dist/modules/customers/components/detail/CompanyDetailTabs.js +26 -6
  79. package/dist/modules/customers/components/detail/CompanyDetailTabs.js.map +2 -2
  80. package/dist/modules/customers/components/detail/DealDetailTabs.js +30 -8
  81. package/dist/modules/customers/components/detail/DealDetailTabs.js.map +2 -2
  82. package/dist/modules/customers/components/detail/PersonDetailTabs.js +30 -8
  83. package/dist/modules/customers/components/detail/PersonDetailTabs.js.map +2 -2
  84. package/dist/modules/customers/data/entities.js +8 -0
  85. package/dist/modules/customers/data/entities.js.map +2 -2
  86. package/dist/modules/customers/data/validators.js +2 -1
  87. package/dist/modules/customers/data/validators.js.map +2 -2
  88. package/dist/modules/customers/migrations/Migration20260723210000_customers.js +15 -0
  89. package/dist/modules/customers/migrations/Migration20260723210000_customers.js.map +7 -0
  90. package/dist/modules/customers/search.js +50 -29
  91. package/dist/modules/customers/search.js.map +2 -2
  92. package/dist/modules/data_sync/api/mappings/[id]/route.js +22 -9
  93. package/dist/modules/data_sync/api/mappings/[id]/route.js.map +2 -2
  94. package/dist/modules/data_sync/api/mappings/route.js +13 -4
  95. package/dist/modules/data_sync/api/mappings/route.js.map +2 -2
  96. package/dist/modules/data_sync/api/options.js +7 -2
  97. package/dist/modules/data_sync/api/options.js.map +2 -2
  98. package/dist/modules/data_sync/api/run.js +7 -2
  99. package/dist/modules/data_sync/api/run.js.map +2 -2
  100. package/dist/modules/data_sync/api/runs/[id]/cancel.js +8 -3
  101. package/dist/modules/data_sync/api/runs/[id]/cancel.js.map +2 -2
  102. package/dist/modules/data_sync/api/runs/[id]/retry.js +7 -2
  103. package/dist/modules/data_sync/api/runs/[id]/retry.js.map +2 -2
  104. package/dist/modules/data_sync/api/runs/[id]/route.js +8 -3
  105. package/dist/modules/data_sync/api/runs/[id]/route.js.map +2 -2
  106. package/dist/modules/data_sync/api/runs.js +7 -2
  107. package/dist/modules/data_sync/api/runs.js.map +2 -2
  108. package/dist/modules/data_sync/api/schedules/[id]/route.js +19 -6
  109. package/dist/modules/data_sync/api/schedules/[id]/route.js.map +2 -2
  110. package/dist/modules/data_sync/api/schedules/route.js +13 -4
  111. package/dist/modules/data_sync/api/schedules/route.js.map +2 -2
  112. package/dist/modules/data_sync/api/validate.js +9 -4
  113. package/dist/modules/data_sync/api/validate.js.map +2 -2
  114. package/dist/modules/design_system/acl.js +9 -0
  115. package/dist/modules/design_system/acl.js.map +7 -0
  116. package/dist/modules/design_system/backend/design-system/page.js +11 -0
  117. package/dist/modules/design_system/backend/design-system/page.js.map +7 -0
  118. package/dist/modules/design_system/backend/design-system/page.meta.js +15 -0
  119. package/dist/modules/design_system/backend/design-system/page.meta.js.map +7 -0
  120. package/dist/modules/design_system/gallery/components/CodeSnippet.js +52 -0
  121. package/dist/modules/design_system/gallery/components/CodeSnippet.js.map +7 -0
  122. package/dist/modules/design_system/gallery/components/EntryCard.js +63 -0
  123. package/dist/modules/design_system/gallery/components/EntryCard.js.map +7 -0
  124. package/dist/modules/design_system/gallery/components/GalleryShell.js +163 -0
  125. package/dist/modules/design_system/gallery/components/GalleryShell.js.map +7 -0
  126. package/dist/modules/design_system/gallery/components/VariantPreview.js +9 -0
  127. package/dist/modules/design_system/gallery/components/VariantPreview.js.map +7 -0
  128. package/dist/modules/design_system/gallery/entries/banners.js +186 -0
  129. package/dist/modules/design_system/gallery/entries/banners.js.map +7 -0
  130. package/dist/modules/design_system/gallery/entries/buttons.js +361 -0
  131. package/dist/modules/design_system/gallery/entries/buttons.js.map +7 -0
  132. package/dist/modules/design_system/gallery/entries/charts.js +457 -0
  133. package/dist/modules/design_system/gallery/entries/charts.js.map +7 -0
  134. package/dist/modules/design_system/gallery/entries/dates.js +306 -0
  135. package/dist/modules/design_system/gallery/entries/dates.js.map +7 -0
  136. package/dist/modules/design_system/gallery/entries/detail.js +358 -0
  137. package/dist/modules/design_system/gallery/entries/detail.js.map +7 -0
  138. package/dist/modules/design_system/gallery/entries/display.js +785 -0
  139. package/dist/modules/design_system/gallery/entries/display.js.map +7 -0
  140. package/dist/modules/design_system/gallery/entries/feedback.js +658 -0
  141. package/dist/modules/design_system/gallery/entries/feedback.js.map +7 -0
  142. package/dist/modules/design_system/gallery/entries/filters.js +505 -0
  143. package/dist/modules/design_system/gallery/entries/filters.js.map +7 -0
  144. package/dist/modules/design_system/gallery/entries/foundations.js +453 -0
  145. package/dist/modules/design_system/gallery/entries/foundations.js.map +7 -0
  146. package/dist/modules/design_system/gallery/entries/icons.js +140 -0
  147. package/dist/modules/design_system/gallery/entries/icons.js.map +7 -0
  148. package/dist/modules/design_system/gallery/entries/inputs.js +1217 -0
  149. package/dist/modules/design_system/gallery/entries/inputs.js.map +7 -0
  150. package/dist/modules/design_system/gallery/entries/messages.js +334 -0
  151. package/dist/modules/design_system/gallery/entries/messages.js.map +7 -0
  152. package/dist/modules/design_system/gallery/entries/navigation.js +475 -0
  153. package/dist/modules/design_system/gallery/entries/navigation.js.map +7 -0
  154. package/dist/modules/design_system/gallery/entries/notifications.js +257 -0
  155. package/dist/modules/design_system/gallery/entries/notifications.js.map +7 -0
  156. package/dist/modules/design_system/gallery/entries/overlays.js +576 -0
  157. package/dist/modules/design_system/gallery/entries/overlays.js.map +7 -0
  158. package/dist/modules/design_system/gallery/entries/scaffolding.js +378 -0
  159. package/dist/modules/design_system/gallery/entries/scaffolding.js.map +7 -0
  160. package/dist/modules/design_system/gallery/entries/schedule.js +297 -0
  161. package/dist/modules/design_system/gallery/entries/schedule.js.map +7 -0
  162. package/dist/modules/design_system/gallery/registry.js +139 -0
  163. package/dist/modules/design_system/gallery/registry.js.map +7 -0
  164. package/dist/modules/design_system/gallery/types.js +1 -0
  165. package/dist/modules/design_system/gallery/types.js.map +7 -0
  166. package/dist/modules/design_system/index.js +9 -0
  167. package/dist/modules/design_system/index.js.map +7 -0
  168. package/dist/modules/design_system/setup.js +14 -0
  169. package/dist/modules/design_system/setup.js.map +7 -0
  170. package/dist/modules/entities/api/entity-settings.js +59 -9
  171. package/dist/modules/entities/api/entity-settings.js.map +2 -2
  172. package/dist/modules/entities/backend/config/settings/page.js +10 -0
  173. package/dist/modules/entities/backend/config/settings/page.js.map +7 -0
  174. package/dist/modules/entities/backend/config/settings/page.meta.js +36 -0
  175. package/dist/modules/entities/backend/config/settings/page.meta.js.map +7 -0
  176. package/dist/modules/entities/backend/entities/user/create/page.js +16 -7
  177. package/dist/modules/entities/backend/entities/user/create/page.js.map +2 -2
  178. package/dist/modules/entities/components/EntitySettingsManager.js +136 -0
  179. package/dist/modules/entities/components/EntitySettingsManager.js.map +7 -0
  180. package/dist/modules/inbox_ops/api/webhook/inbound.js +14 -10
  181. package/dist/modules/inbox_ops/api/webhook/inbound.js.map +2 -2
  182. package/dist/modules/inbox_ops/search.js +15 -4
  183. package/dist/modules/inbox_ops/search.js.map +2 -2
  184. package/dist/modules/integrations/api/[id]/credentials/route.js +11 -5
  185. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  186. package/dist/modules/integrations/api/[id]/health/route.js +6 -3
  187. package/dist/modules/integrations/api/[id]/health/route.js.map +2 -2
  188. package/dist/modules/integrations/api/[id]/route.js +6 -3
  189. package/dist/modules/integrations/api/[id]/route.js.map +2 -2
  190. package/dist/modules/integrations/api/[id]/state/route.js +6 -3
  191. package/dist/modules/integrations/api/[id]/state/route.js.map +2 -2
  192. package/dist/modules/integrations/api/[id]/version/route.js +6 -3
  193. package/dist/modules/integrations/api/[id]/version/route.js.map +2 -2
  194. package/dist/modules/integrations/api/logs/route.js +6 -3
  195. package/dist/modules/integrations/api/logs/route.js.map +2 -2
  196. package/dist/modules/integrations/api/route.js +6 -3
  197. package/dist/modules/integrations/api/route.js.map +2 -2
  198. package/dist/modules/integrations/api/umes-read.js +2 -2
  199. package/dist/modules/integrations/api/umes-read.js.map +2 -2
  200. package/dist/modules/integrations/lib/organization-scope.js +2 -9
  201. package/dist/modules/integrations/lib/organization-scope.js.map +2 -2
  202. package/dist/modules/messages/search.js +10 -5
  203. package/dist/modules/messages/search.js.map +2 -2
  204. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +11 -1
  205. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
  206. package/dist/modules/payment_gateways/data/entities.js +4 -0
  207. package/dist/modules/payment_gateways/data/entities.js.map +2 -2
  208. package/dist/modules/payment_gateways/lib/gateway-service.js +12 -2
  209. package/dist/modules/payment_gateways/lib/gateway-service.js.map +2 -2
  210. package/dist/modules/payment_gateways/lib/session-idempotency.js +33 -0
  211. package/dist/modules/payment_gateways/lib/session-idempotency.js.map +2 -2
  212. package/dist/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.js +18 -0
  213. package/dist/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.js.map +7 -0
  214. package/dist/modules/payment_gateways/setup.js +47 -0
  215. package/dist/modules/payment_gateways/setup.js.map +2 -2
  216. package/dist/modules/payment_gateways/workers/session-initialization-prune.js +50 -0
  217. package/dist/modules/payment_gateways/workers/session-initialization-prune.js.map +7 -0
  218. package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.js +134 -0
  219. package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.js.map +7 -0
  220. package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.js +11 -0
  221. package/dist/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.js.map +7 -0
  222. package/dist/modules/portal/lib/navigation.js +7 -0
  223. package/dist/modules/portal/lib/navigation.js.map +7 -0
  224. package/dist/modules/query_index/data/entities.js +2 -1
  225. package/dist/modules/query_index/data/entities.js.map +2 -2
  226. package/dist/modules/query_index/lib/engine.js +75 -50
  227. package/dist/modules/query_index/lib/engine.js.map +2 -2
  228. package/dist/modules/query_index/lib/search-tokens.js +15 -5
  229. package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
  230. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js +17 -0
  231. package/dist/modules/query_index/migrations/Migration20260731105052_query_index.js.map +7 -0
  232. package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js +11 -1
  233. package/dist/modules/shipping_carriers/api/webhook/[provider]/route.js.map +2 -2
  234. package/generated/entities/customer_deal_person_link/index.ts +1 -0
  235. package/generated/entities/customer_user_invitation/index.ts +1 -0
  236. package/generated/entities.ids.generated.ts +1 -0
  237. package/generated/entity-fields-registry.ts +2 -0
  238. package/package.json +16 -16
  239. package/src/modules/business_rules/api/openmercato-call-options/route.ts +94 -0
  240. package/src/modules/business_rules/api/rules/route.ts +92 -4
  241. package/src/modules/business_rules/components/ActionBuilder.tsx +54 -5
  242. package/src/modules/business_rules/components/ActionRow.tsx +156 -18
  243. package/src/modules/business_rules/components/utils/actionValidation.ts +6 -0
  244. package/src/modules/business_rules/i18n/de.json +12 -0
  245. package/src/modules/business_rules/i18n/en.json +12 -0
  246. package/src/modules/business_rules/i18n/es.json +12 -0
  247. package/src/modules/business_rules/i18n/pl.json +12 -0
  248. package/src/modules/business_rules/lib/action-executor.ts +198 -0
  249. package/src/modules/business_rules/lib/openmercato-call-options-types.ts +31 -0
  250. package/src/modules/business_rules/lib/openmercato-call-options.ts +297 -0
  251. package/src/modules/business_rules/lib/rule-engine.ts +4 -0
  252. package/src/modules/communication_channels/api/post/webhook/[provider]/route.ts +11 -1
  253. package/src/modules/communication_channels/api/post/webhooks/gmail/route.ts +17 -11
  254. package/src/modules/configs/lib/upgrade-actions.ts +14 -0
  255. package/src/modules/customer_accounts/api/admin/users/[id].ts +16 -1
  256. package/src/modules/customer_accounts/api/admin/users-invite.ts +78 -3
  257. package/src/modules/customer_accounts/api/portal/users-invite.ts +22 -1
  258. package/src/modules/customer_accounts/data/entities.ts +3 -0
  259. package/src/modules/customer_accounts/data/validators.ts +1 -0
  260. package/src/modules/customer_accounts/emails/CustomerInvitationEmail.tsx +45 -0
  261. package/src/modules/customer_accounts/i18n/de.json +6 -0
  262. package/src/modules/customer_accounts/i18n/en.json +6 -0
  263. package/src/modules/customer_accounts/i18n/es.json +6 -0
  264. package/src/modules/customer_accounts/i18n/pl.json +6 -0
  265. package/src/modules/customer_accounts/lib/customerEntityOwnership.ts +68 -2
  266. package/src/modules/customer_accounts/lib/customerUrl.ts +27 -11
  267. package/src/modules/customer_accounts/lib/invitationEmail.ts +42 -0
  268. package/src/modules/customer_accounts/migrations/.snapshot-open-mercato.json +16 -0
  269. package/src/modules/customer_accounts/migrations/Migration20260723120000_customer_accounts.ts +13 -0
  270. package/src/modules/customer_accounts/services/customerInvitationService.ts +56 -3
  271. package/src/modules/customer_accounts/subscribers/autoLinkCrm.ts +75 -8
  272. package/src/modules/customer_accounts/widgets/injection/account-status/widget.client.tsx +2 -2
  273. package/src/modules/customer_accounts/widgets/injection-table.ts +4 -1
  274. package/src/modules/customers/api/deals/[id]/people/route.ts +3 -0
  275. package/src/modules/customers/api/deals/[id]/route.ts +10 -2
  276. package/src/modules/customers/backend/customers/companies-v2/[id]/page.tsx +12 -1
  277. package/src/modules/customers/backend/customers/deals/[id]/hooks/types.ts +1 -0
  278. package/src/modules/customers/backend/customers/deals/[id]/page.tsx +15 -9
  279. package/src/modules/customers/backend/customers/people-v2/[id]/page.tsx +24 -6
  280. package/src/modules/customers/cli.ts +17 -7
  281. package/src/modules/customers/commands/deals.ts +50 -9
  282. package/src/modules/customers/commands/people.ts +3 -0
  283. package/src/modules/customers/components/detail/CompanyDetailTabs.tsx +30 -7
  284. package/src/modules/customers/components/detail/DealDetailTabs.tsx +34 -9
  285. package/src/modules/customers/components/detail/PersonDetailTabs.tsx +34 -9
  286. package/src/modules/customers/data/entities.ts +9 -1
  287. package/src/modules/customers/data/validators.ts +1 -0
  288. package/src/modules/customers/i18n/de.json +18 -0
  289. package/src/modules/customers/i18n/en.json +18 -0
  290. package/src/modules/customers/i18n/es.json +18 -0
  291. package/src/modules/customers/i18n/pl.json +18 -0
  292. package/src/modules/customers/migrations/.snapshot-open-mercato.json +27 -1
  293. package/src/modules/customers/migrations/Migration20260723210000_customers.ts +15 -0
  294. package/src/modules/customers/search.ts +59 -27
  295. package/src/modules/data_sync/AGENTS.md +1 -0
  296. package/src/modules/data_sync/api/mappings/[id]/route.ts +22 -9
  297. package/src/modules/data_sync/api/mappings/route.ts +13 -4
  298. package/src/modules/data_sync/api/options.ts +7 -2
  299. package/src/modules/data_sync/api/run.ts +7 -2
  300. package/src/modules/data_sync/api/runs/[id]/cancel.ts +8 -3
  301. package/src/modules/data_sync/api/runs/[id]/retry.ts +7 -2
  302. package/src/modules/data_sync/api/runs/[id]/route.ts +8 -3
  303. package/src/modules/data_sync/api/runs.ts +7 -2
  304. package/src/modules/data_sync/api/schedules/[id]/route.ts +19 -6
  305. package/src/modules/data_sync/api/schedules/route.ts +13 -4
  306. package/src/modules/data_sync/api/validate.ts +9 -4
  307. package/src/modules/design_system/AGENTS.md +34 -0
  308. package/src/modules/design_system/acl.ts +5 -0
  309. package/src/modules/design_system/backend/design-system/page.meta.ts +11 -0
  310. package/src/modules/design_system/backend/design-system/page.tsx +14 -0
  311. package/src/modules/design_system/gallery/components/CodeSnippet.tsx +55 -0
  312. package/src/modules/design_system/gallery/components/EntryCard.tsx +95 -0
  313. package/src/modules/design_system/gallery/components/GalleryShell.tsx +206 -0
  314. package/src/modules/design_system/gallery/components/VariantPreview.tsx +15 -0
  315. package/src/modules/design_system/gallery/entries/banners.tsx +226 -0
  316. package/src/modules/design_system/gallery/entries/buttons.tsx +422 -0
  317. package/src/modules/design_system/gallery/entries/charts.tsx +518 -0
  318. package/src/modules/design_system/gallery/entries/dates.tsx +325 -0
  319. package/src/modules/design_system/gallery/entries/detail.tsx +403 -0
  320. package/src/modules/design_system/gallery/entries/display.tsx +893 -0
  321. package/src/modules/design_system/gallery/entries/feedback.tsx +746 -0
  322. package/src/modules/design_system/gallery/entries/filters.tsx +570 -0
  323. package/src/modules/design_system/gallery/entries/foundations.tsx +529 -0
  324. package/src/modules/design_system/gallery/entries/icons.tsx +168 -0
  325. package/src/modules/design_system/gallery/entries/inputs.tsx +1516 -0
  326. package/src/modules/design_system/gallery/entries/messages.tsx +339 -0
  327. package/src/modules/design_system/gallery/entries/navigation.tsx +573 -0
  328. package/src/modules/design_system/gallery/entries/notifications.tsx +285 -0
  329. package/src/modules/design_system/gallery/entries/overlays.tsx +677 -0
  330. package/src/modules/design_system/gallery/entries/scaffolding.tsx +430 -0
  331. package/src/modules/design_system/gallery/entries/schedule.tsx +307 -0
  332. package/src/modules/design_system/gallery/registry.ts +152 -0
  333. package/src/modules/design_system/gallery/types.ts +32 -0
  334. package/src/modules/design_system/i18n/.hardcoded-allowlist.json +71 -0
  335. package/src/modules/design_system/i18n/de.json +46 -0
  336. package/src/modules/design_system/i18n/en.json +46 -0
  337. package/src/modules/design_system/i18n/es.json +46 -0
  338. package/src/modules/design_system/i18n/pl.json +46 -0
  339. package/src/modules/design_system/index.ts +7 -0
  340. package/src/modules/design_system/setup.ts +12 -0
  341. package/src/modules/entities/api/entity-settings.ts +66 -22
  342. package/src/modules/entities/backend/config/settings/page.meta.ts +34 -0
  343. package/src/modules/entities/backend/config/settings/page.tsx +12 -0
  344. package/src/modules/entities/backend/entities/user/create/page.tsx +16 -7
  345. package/src/modules/entities/components/EntitySettingsManager.tsx +160 -0
  346. package/src/modules/entities/i18n/de.json +9 -0
  347. package/src/modules/entities/i18n/en.json +9 -0
  348. package/src/modules/entities/i18n/es.json +9 -0
  349. package/src/modules/entities/i18n/pl.json +9 -0
  350. package/src/modules/inbox_ops/api/webhook/inbound.ts +14 -12
  351. package/src/modules/inbox_ops/i18n/de.json +3 -0
  352. package/src/modules/inbox_ops/i18n/en.json +3 -0
  353. package/src/modules/inbox_ops/i18n/es.json +3 -0
  354. package/src/modules/inbox_ops/i18n/pl.json +3 -0
  355. package/src/modules/inbox_ops/search.ts +20 -4
  356. package/src/modules/integrations/api/[id]/credentials/route.ts +11 -5
  357. package/src/modules/integrations/api/[id]/health/route.ts +6 -3
  358. package/src/modules/integrations/api/[id]/route.ts +6 -3
  359. package/src/modules/integrations/api/[id]/state/route.ts +6 -3
  360. package/src/modules/integrations/api/[id]/version/route.ts +6 -3
  361. package/src/modules/integrations/api/logs/route.ts +6 -3
  362. package/src/modules/integrations/api/route.ts +6 -3
  363. package/src/modules/integrations/api/umes-read.ts +2 -2
  364. package/src/modules/integrations/lib/organization-scope.ts +5 -25
  365. package/src/modules/messages/i18n/de.json +2 -0
  366. package/src/modules/messages/i18n/en.json +2 -0
  367. package/src/modules/messages/i18n/es.json +2 -0
  368. package/src/modules/messages/i18n/pl.json +2 -0
  369. package/src/modules/messages/search.ts +11 -5
  370. package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +13 -1
  371. package/src/modules/payment_gateways/data/entities.ts +5 -0
  372. package/src/modules/payment_gateways/i18n/de.json +5 -1
  373. package/src/modules/payment_gateways/i18n/en.json +5 -1
  374. package/src/modules/payment_gateways/i18n/es.json +5 -1
  375. package/src/modules/payment_gateways/i18n/pl.json +5 -1
  376. package/src/modules/payment_gateways/lib/gateway-service.ts +12 -2
  377. package/src/modules/payment_gateways/lib/session-idempotency.ts +36 -0
  378. package/src/modules/payment_gateways/migrations/.snapshot-open-mercato.json +10 -1
  379. package/src/modules/payment_gateways/migrations/Migration20260803103035_payment_gateways.ts +17 -0
  380. package/src/modules/payment_gateways/setup.ts +62 -0
  381. package/src/modules/payment_gateways/workers/session-initialization-prune.ts +63 -0
  382. package/src/modules/portal/frontend/[orgSlug]/portal/invite/page.meta.ts +9 -0
  383. package/src/modules/portal/frontend/[orgSlug]/portal/invite/page.tsx +164 -0
  384. package/src/modules/portal/i18n/de.json +18 -0
  385. package/src/modules/portal/i18n/en.json +18 -0
  386. package/src/modules/portal/i18n/es.json +18 -0
  387. package/src/modules/portal/i18n/pl.json +18 -0
  388. package/src/modules/portal/lib/navigation.ts +3 -0
  389. package/src/modules/query_index/data/entities.ts +7 -0
  390. package/src/modules/query_index/lib/engine.ts +92 -63
  391. package/src/modules/query_index/lib/search-tokens.ts +16 -4
  392. package/src/modules/query_index/migrations/.snapshot-open-mercato.json +12 -0
  393. package/src/modules/query_index/migrations/Migration20260731105052_query_index.ts +35 -0
  394. package/src/modules/shipping_carriers/api/webhook/[provider]/route.ts +11 -1
@@ -0,0 +1,430 @@
1
+ import * as React from 'react'
2
+ import { Archive, Copy, Download, Lock, Plus, Trash2, UserRound } from 'lucide-react'
3
+ import { Badge } from '@open-mercato/ui/primitives/badge'
4
+ import { Button } from '@open-mercato/ui/primitives/button'
5
+ import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'
6
+ import { CollapsibleSection, SectionHeader } from '@open-mercato/ui/backend/SectionHeader'
7
+ import {
8
+ SectionNav,
9
+ SectionPage,
10
+ type SectionNavGroup,
11
+ } from '@open-mercato/ui/backend/section-page'
12
+ import {
13
+ ActionsDropdown,
14
+ FormFooter,
15
+ FormHeader,
16
+ type ActionItem,
17
+ } from '@open-mercato/ui/backend/forms'
18
+ import type { GalleryEntry } from '../types'
19
+
20
+ // Component titles and variant names are proper nouns from the codebase and
21
+ // are deliberately not translated. `code` MUST contain the entry's importPath
22
+ // (enforced by the registry-integrity test) and is always reviewed alongside
23
+ // its sibling `render`.
24
+
25
+ // The demos use `#`-anchors as hrefs so clicking inside the gallery never
26
+ // navigates away, and every callback is a no-op.
27
+
28
+ const demoSections: SectionNavGroup[] = [
29
+ {
30
+ id: 'account',
31
+ label: 'Account',
32
+ items: [
33
+ { id: 'profile', label: 'Profile', href: '#profile', icon: <UserRound className="size-4" /> },
34
+ { id: 'security', label: 'Security', href: '#security', icon: <Lock className="size-4" /> },
35
+ ],
36
+ },
37
+ ]
38
+
39
+ // SectionPage stretches to the viewport by design — the miniature demo clips
40
+ // it inside a fixed-height frame so the two-item nav plus content stay small.
41
+ function SectionPageMiniDemo() {
42
+ return (
43
+ <div className="h-80 w-full overflow-hidden rounded-lg border bg-background">
44
+ <SectionPage title="Settings" sections={demoSections} activePath="#profile">
45
+ <div className="space-y-2">
46
+ <h2 className="text-sm font-semibold">Profile</h2>
47
+ <p className="text-sm text-muted-foreground">Section content renders here.</p>
48
+ </div>
49
+ </SectionPage>
50
+ </div>
51
+ )
52
+ }
53
+
54
+ // SectionNav is controlled — the demo owns the collapsed state.
55
+ function SectionNavDemo() {
56
+ const [collapsed, setCollapsed] = React.useState(false)
57
+ return (
58
+ <div className="w-64 rounded-lg border bg-background px-3 py-4">
59
+ <SectionNav
60
+ title="Settings"
61
+ sections={demoSections}
62
+ activePath="#profile"
63
+ collapsed={collapsed}
64
+ onToggleCollapse={() => setCollapsed((value) => !value)}
65
+ />
66
+ </div>
67
+ )
68
+ }
69
+
70
+ const demoActions: ActionItem[] = [
71
+ { id: 'duplicate', label: 'Duplicate record', icon: Copy, onSelect: () => {} },
72
+ { id: 'export', label: 'Export as CSV', icon: Download, onSelect: () => {} },
73
+ { id: 'delete', label: 'Delete record', icon: Trash2, onSelect: () => {} },
74
+ ]
75
+
76
+ const pageEntry: GalleryEntry = {
77
+ id: 'page',
78
+ title: 'Page',
79
+ importPath: '@open-mercato/ui/backend/Page',
80
+ variants: [
81
+ {
82
+ id: 'basic',
83
+ title: 'Page + PageHeader + PageBody',
84
+ render: () => (
85
+ <div className="w-full">
86
+ <Page>
87
+ <PageHeader title="Currencies" description="Exchange rates refresh nightly." />
88
+ <PageBody>
89
+ <div className="rounded-lg border border-dashed p-6 text-sm text-muted-foreground">
90
+ Page content
91
+ </div>
92
+ </PageBody>
93
+ </Page>
94
+ </div>
95
+ ),
96
+ code: `import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'
97
+
98
+ <Page>
99
+ <PageHeader title={t('currencies.list.title')} description={t('currencies.list.description')} />
100
+ <PageBody>{/* DataTable, sections… */}</PageBody>
101
+ </Page>`,
102
+ },
103
+ {
104
+ id: 'with-actions',
105
+ title: 'Header actions',
106
+ render: () => (
107
+ <div className="w-full">
108
+ <Page>
109
+ <PageHeader
110
+ title="Currencies"
111
+ description="Exchange rates refresh nightly."
112
+ actions={
113
+ <>
114
+ <Button variant="outline" size="sm">
115
+ Import
116
+ </Button>
117
+ <Button size="sm">
118
+ <Plus className="size-4" /> Add currency
119
+ </Button>
120
+ </>
121
+ }
122
+ />
123
+ <PageBody>
124
+ <div className="rounded-lg border border-dashed p-6 text-sm text-muted-foreground">
125
+ Page content
126
+ </div>
127
+ </PageBody>
128
+ </Page>
129
+ </div>
130
+ ),
131
+ code: `import { Plus } from 'lucide-react'
132
+ import { Page, PageBody, PageHeader } from '@open-mercato/ui/backend/Page'
133
+ import { Button } from '@open-mercato/ui/primitives/button'
134
+
135
+ <Page>
136
+ <PageHeader
137
+ title={t('currencies.list.title')}
138
+ actions={
139
+ <>
140
+ <Button variant="outline" size="sm">Import</Button>
141
+ <Button size="sm"><Plus className="size-4" /> Add currency</Button>
142
+ </>
143
+ }
144
+ />
145
+ <PageBody>{/* … */}</PageBody>
146
+ </Page>`,
147
+ },
148
+ ],
149
+ }
150
+
151
+ const sectionHeaderEntry: GalleryEntry = {
152
+ id: 'section-header',
153
+ title: 'SectionHeader',
154
+ importPath: '@open-mercato/ui/backend/SectionHeader',
155
+ variants: [
156
+ {
157
+ id: 'count-and-action',
158
+ title: 'With count and action',
159
+ render: () => (
160
+ <div className="w-full max-w-md">
161
+ <SectionHeader
162
+ title="Addresses"
163
+ count={3}
164
+ action={
165
+ <Button variant="ghost" size="sm">
166
+ <Plus className="size-4" /> Add
167
+ </Button>
168
+ }
169
+ />
170
+ </div>
171
+ ),
172
+ code: `import { Plus } from 'lucide-react'
173
+ import { SectionHeader } from '@open-mercato/ui/backend/SectionHeader'
174
+ import { Button } from '@open-mercato/ui/primitives/button'
175
+
176
+ <SectionHeader
177
+ title={t('customers.people.detail.addresses.title')}
178
+ count={addresses.length}
179
+ action={<Button variant="ghost" size="sm"><Plus className="size-4" /> {t('common.add')}</Button>}
180
+ />`,
181
+ },
182
+ {
183
+ id: 'collapsible',
184
+ title: 'CollapsibleSection',
185
+ render: () => (
186
+ <div className="w-full max-w-md">
187
+ <CollapsibleSection title="Billing details" count={2}>
188
+ <div className="rounded-lg border border-dashed p-4 text-sm text-muted-foreground">
189
+ Section content
190
+ </div>
191
+ </CollapsibleSection>
192
+ </div>
193
+ ),
194
+ code: `import { CollapsibleSection } from '@open-mercato/ui/backend/SectionHeader'
195
+
196
+ <CollapsibleSection title={t('billing.details.title')} count={2}>
197
+ {/* section content */}
198
+ </CollapsibleSection>`,
199
+ },
200
+ ],
201
+ }
202
+
203
+ const sectionPageEntry: GalleryEntry = {
204
+ id: 'section-page',
205
+ title: 'SectionPage',
206
+ importPath: '@open-mercato/ui/backend/section-page',
207
+ variants: [
208
+ {
209
+ id: 'miniature',
210
+ title: 'Two-item miniature (clipped frame)',
211
+ render: () => <SectionPageMiniDemo />,
212
+ code: `import { UserRound, Lock } from 'lucide-react'
213
+ import { SectionPage, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'
214
+
215
+ const sections: SectionNavGroup[] = [
216
+ {
217
+ id: 'account',
218
+ label: 'Account',
219
+ items: [
220
+ { id: 'profile', label: 'Profile', href: '/backend/profile', icon: <UserRound className="size-4" /> },
221
+ { id: 'security', label: 'Security', href: '/backend/profile/security', icon: <Lock className="size-4" /> },
222
+ ],
223
+ },
224
+ ]
225
+
226
+ <SectionPage title={t('profile.title')} sections={sections} activePath={pathname}>
227
+ {children}
228
+ </SectionPage>`,
229
+ },
230
+ {
231
+ id: 'section-nav',
232
+ title: 'SectionNav (standalone, controlled collapse)',
233
+ render: () => <SectionNavDemo />,
234
+ code: `import { SectionNav, type SectionNavGroup } from '@open-mercato/ui/backend/section-page'
235
+
236
+ const [collapsed, setCollapsed] = React.useState(false)
237
+
238
+ <SectionNav
239
+ title={t('profile.title')}
240
+ sections={sections}
241
+ activePath={pathname}
242
+ collapsed={collapsed}
243
+ onToggleCollapse={() => setCollapsed((value) => !value)}
244
+ />`,
245
+ },
246
+ ],
247
+ }
248
+
249
+ const formHeaderEntry: GalleryEntry = {
250
+ id: 'form-header',
251
+ title: 'FormHeader',
252
+ importPath: '@open-mercato/ui/backend/forms',
253
+ variants: [
254
+ {
255
+ id: 'edit-mode',
256
+ title: 'Edit mode',
257
+ render: () => (
258
+ <div className="w-full">
259
+ <FormHeader
260
+ backHref="#form-header"
261
+ backLabel="Back"
262
+ title="Edit product"
263
+ actions={{
264
+ cancelHref: '#form-header',
265
+ cancelLabel: 'Cancel',
266
+ submit: { label: 'Save', pendingLabel: 'Saving…' },
267
+ }}
268
+ />
269
+ </div>
270
+ ),
271
+ code: `import { FormHeader } from '@open-mercato/ui/backend/forms'
272
+
273
+ <FormHeader
274
+ backHref="/backend/products"
275
+ backLabel={t('ui.navigation.back')}
276
+ title={t('products.edit.title')}
277
+ actions={{
278
+ cancelHref: '/backend/products',
279
+ cancelLabel: t('ui.forms.actions.cancel'),
280
+ submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },
281
+ }}
282
+ />`,
283
+ },
284
+ {
285
+ id: 'detail-mode',
286
+ title: 'Detail mode',
287
+ render: () => (
288
+ <div className="w-full">
289
+ <FormHeader
290
+ mode="detail"
291
+ backHref="#form-header"
292
+ entityTypeLabel="Company"
293
+ title="Acme Logistics"
294
+ subtitle="Created 12 Mar 2026"
295
+ statusBadge={<Badge variant="muted">Active</Badge>}
296
+ menuActions={[
297
+ { id: 'duplicate', label: 'Duplicate', icon: Copy, onSelect: () => {} },
298
+ { id: 'archive', label: 'Archive', icon: Archive, onSelect: () => {} },
299
+ ]}
300
+ onDelete={() => {}}
301
+ deleteLabel="Delete"
302
+ />
303
+ </div>
304
+ ),
305
+ code: `import { Archive, Copy } from 'lucide-react'
306
+ import { FormHeader } from '@open-mercato/ui/backend/forms'
307
+
308
+ <FormHeader
309
+ mode="detail"
310
+ backHref="/backend/customers/companies"
311
+ entityTypeLabel={t('customers.companies.detail.entityType')}
312
+ title={company.name}
313
+ subtitle={t('customers.companies.detail.createdAt', { date: createdAt })}
314
+ statusBadge={<Badge variant="muted">{statusLabel}</Badge>}
315
+ menuActions={[
316
+ { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },
317
+ { id: 'archive', label: t('ui.actions.archive'), icon: Archive, onSelect: archive },
318
+ ]}
319
+ onDelete={confirmDelete}
320
+ deleteLabel={t('ui.forms.actions.delete')}
321
+ />`,
322
+ },
323
+ ],
324
+ }
325
+
326
+ const formFooterEntry: GalleryEntry = {
327
+ id: 'form-footer',
328
+ title: 'FormFooter',
329
+ importPath: '@open-mercato/ui/backend/forms',
330
+ variants: [
331
+ {
332
+ id: 'default',
333
+ title: 'default',
334
+ render: () => (
335
+ <div className="w-full">
336
+ <FormFooter
337
+ actions={{
338
+ cancelHref: '#form-footer',
339
+ cancelLabel: 'Cancel',
340
+ submit: { label: 'Save changes', pendingLabel: 'Saving…' },
341
+ }}
342
+ />
343
+ </div>
344
+ ),
345
+ code: `import { FormFooter } from '@open-mercato/ui/backend/forms'
346
+
347
+ <FormFooter
348
+ actions={{
349
+ cancelHref: '/backend/products',
350
+ cancelLabel: t('ui.forms.actions.cancel'),
351
+ submit: { formId: 'product-form', label: t('ui.forms.actions.save'), pendingLabel: t('ui.forms.actions.saving') },
352
+ }}
353
+ />`,
354
+ },
355
+ {
356
+ id: 'embedded-with-delete',
357
+ title: 'embedded, with delete',
358
+ render: () => (
359
+ <div className="w-full">
360
+ <FormFooter
361
+ embedded
362
+ actions={{
363
+ showDelete: true,
364
+ onDelete: () => {},
365
+ deleteLabel: 'Delete',
366
+ cancelHref: '#form-footer',
367
+ cancelLabel: 'Cancel',
368
+ submit: { label: 'Save' },
369
+ }}
370
+ />
371
+ </div>
372
+ ),
373
+ code: `import { FormFooter } from '@open-mercato/ui/backend/forms'
374
+
375
+ <FormFooter
376
+ embedded
377
+ actions={{
378
+ showDelete: true,
379
+ onDelete: confirmDelete,
380
+ deleteLabel: t('ui.forms.actions.delete'),
381
+ cancelHref: '/backend/products',
382
+ cancelLabel: t('ui.forms.actions.cancel'),
383
+ submit: { label: t('ui.forms.actions.save') },
384
+ }}
385
+ />`,
386
+ },
387
+ ],
388
+ }
389
+
390
+ const actionsDropdownEntry: GalleryEntry = {
391
+ id: 'actions-dropdown',
392
+ title: 'ActionsDropdown',
393
+ importPath: '@open-mercato/ui/backend/forms',
394
+ variants: [
395
+ {
396
+ id: 'label-trigger',
397
+ title: 'Label trigger',
398
+ render: () => <ActionsDropdown items={demoActions} />,
399
+ code: `import { Copy, Download, Trash2 } from 'lucide-react'
400
+ import { ActionsDropdown, type ActionItem } from '@open-mercato/ui/backend/forms'
401
+
402
+ const items: ActionItem[] = [
403
+ { id: 'duplicate', label: t('ui.actions.duplicate'), icon: Copy, onSelect: duplicate },
404
+ { id: 'export', label: t('ui.actions.export'), icon: Download, onSelect: exportCsv },
405
+ { id: 'delete', label: t('ui.actions.delete'), icon: Trash2, onSelect: confirmDelete },
406
+ ]
407
+
408
+ <ActionsDropdown items={items} />`,
409
+ },
410
+ {
411
+ id: 'icon-trigger',
412
+ title: 'Icon trigger',
413
+ render: () => (
414
+ <ActionsDropdown items={demoActions} triggerMode="icon" ariaLabel="More actions" />
415
+ ),
416
+ code: `import { ActionsDropdown } from '@open-mercato/ui/backend/forms'
417
+
418
+ <ActionsDropdown items={items} triggerMode="icon" ariaLabel={t('ui.actions.more')} />`,
419
+ },
420
+ ],
421
+ }
422
+
423
+ export const entries: GalleryEntry[] = [
424
+ pageEntry,
425
+ sectionHeaderEntry,
426
+ sectionPageEntry,
427
+ formHeaderEntry,
428
+ formFooterEntry,
429
+ actionsDropdownEntry,
430
+ ]