@open-mercato/core 0.6.8-develop.7099.1.7ba2771d06 → 0.7.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 (941) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/helpers/integration/api.js +1 -13
  3. package/dist/helpers/integration/api.js.map +2 -2
  4. package/dist/helpers/integration/communicationChannelsFixtures.js +0 -19
  5. package/dist/helpers/integration/communicationChannelsFixtures.js.map +2 -2
  6. package/dist/modules/api_keys/api/keys/route.js +1 -1
  7. package/dist/modules/api_keys/api/keys/route.js.map +2 -2
  8. package/dist/modules/api_keys/backend/api-keys/page.js +1 -3
  9. package/dist/modules/api_keys/backend/api-keys/page.js.map +2 -2
  10. package/dist/modules/attachments/api/route.js +2 -2
  11. package/dist/modules/attachments/api/route.js.map +2 -2
  12. package/dist/modules/attachments/components/AttachmentLibrary.js +0 -2
  13. package/dist/modules/attachments/components/AttachmentLibrary.js.map +2 -2
  14. package/dist/modules/attachments/di.js +1 -11
  15. package/dist/modules/attachments/di.js.map +2 -2
  16. package/dist/modules/attachments/index.js.map +1 -1
  17. package/dist/modules/attachments/lib/scoped-upload-service.js +2 -15
  18. package/dist/modules/attachments/lib/scoped-upload-service.js.map +2 -2
  19. package/dist/modules/attachments/lib/upload-limits.js +2 -6
  20. package/dist/modules/attachments/lib/upload-limits.js.map +2 -2
  21. package/dist/modules/audit_logs/backend/audit-logs/page.js +0 -6
  22. package/dist/modules/audit_logs/backend/audit-logs/page.js.map +2 -2
  23. package/dist/modules/audit_logs/lib/display-helpers.js +11 -19
  24. package/dist/modules/audit_logs/lib/display-helpers.js.map +2 -2
  25. package/dist/modules/audit_logs/services/actionLogService.js +12 -57
  26. package/dist/modules/audit_logs/services/actionLogService.js.map +3 -3
  27. package/dist/modules/auth/acl.js +5 -30
  28. package/dist/modules/auth/acl.js.map +2 -2
  29. package/dist/modules/auth/api/feature-check.js +2 -8
  30. package/dist/modules/auth/api/feature-check.js.map +2 -2
  31. package/dist/modules/auth/api/login.js +20 -4
  32. package/dist/modules/auth/api/login.js.map +2 -2
  33. package/dist/modules/auth/api/roles/acl/route.js +33 -28
  34. package/dist/modules/auth/api/roles/acl/route.js.map +2 -2
  35. package/dist/modules/auth/api/routeError.js +11 -0
  36. package/dist/modules/auth/api/routeError.js.map +7 -0
  37. package/dist/modules/auth/api/session/refresh.js +1 -25
  38. package/dist/modules/auth/api/session/refresh.js.map +2 -2
  39. package/dist/modules/auth/api/users/acl/route.js +73 -102
  40. package/dist/modules/auth/api/users/acl/route.js.map +2 -2
  41. package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js +1 -5
  42. package/dist/modules/auth/backend/roles/[id]/edit/page.meta.js.map +2 -2
  43. package/dist/modules/auth/backend/roles/page.js +1 -3
  44. package/dist/modules/auth/backend/roles/page.js.map +2 -2
  45. package/dist/modules/auth/backend/users/[id]/edit/page.meta.js +1 -5
  46. package/dist/modules/auth/backend/users/[id]/edit/page.meta.js.map +2 -2
  47. package/dist/modules/auth/backend/users/page.js +1 -2
  48. package/dist/modules/auth/backend/users/page.js.map +2 -2
  49. package/dist/modules/auth/components/AclEditor.js +30 -39
  50. package/dist/modules/auth/components/AclEditor.js.map +2 -2
  51. package/dist/modules/auth/data/entities.js.map +2 -2
  52. package/dist/modules/auth/data/validators.js +1 -5
  53. package/dist/modules/auth/data/validators.js.map +2 -2
  54. package/dist/modules/auth/di.js +9 -35
  55. package/dist/modules/auth/di.js.map +2 -2
  56. package/dist/modules/auth/frontend/reset/[token]/page.js +0 -46
  57. package/dist/modules/auth/frontend/reset/[token]/page.js.map +2 -2
  58. package/dist/modules/auth/lib/grantChecks.js.map +2 -2
  59. package/dist/modules/auth/services/authService.js +2 -16
  60. package/dist/modules/auth/services/authService.js.map +2 -2
  61. package/dist/modules/auth/services/rbacService.js +24 -67
  62. package/dist/modules/auth/services/rbacService.js.map +3 -3
  63. package/dist/modules/business_rules/backend/logs/page.js +1 -3
  64. package/dist/modules/business_rules/backend/logs/page.js.map +2 -2
  65. package/dist/modules/business_rules/backend/rules/[id]/page.meta.js +6 -1
  66. package/dist/modules/business_rules/backend/rules/[id]/page.meta.js.map +2 -2
  67. package/dist/modules/business_rules/backend/rules/create/page.meta.js +5 -1
  68. package/dist/modules/business_rules/backend/rules/create/page.meta.js.map +2 -2
  69. package/dist/modules/business_rules/backend/rules/page.js +1 -3
  70. package/dist/modules/business_rules/backend/rules/page.js.map +2 -2
  71. package/dist/modules/business_rules/backend/sets/[id]/page.meta.js +6 -1
  72. package/dist/modules/business_rules/backend/sets/[id]/page.meta.js.map +2 -2
  73. package/dist/modules/business_rules/backend/sets/create/page.meta.js +5 -1
  74. package/dist/modules/business_rules/backend/sets/create/page.meta.js.map +2 -2
  75. package/dist/modules/business_rules/backend/sets/page.js +1 -3
  76. package/dist/modules/business_rules/backend/sets/page.js.map +2 -2
  77. package/dist/modules/business_rules/lib/expression-evaluator.js +9 -9
  78. package/dist/modules/business_rules/lib/expression-evaluator.js.map +2 -2
  79. package/dist/modules/business_rules/lib/rule-evaluator.js +9 -10
  80. package/dist/modules/business_rules/lib/rule-evaluator.js.map +2 -2
  81. package/dist/modules/catalog/ai-agents.js +1 -1
  82. package/dist/modules/catalog/ai-agents.js.map +1 -1
  83. package/dist/modules/catalog/ai-tools/merchandising-pack.js +2 -2
  84. package/dist/modules/catalog/ai-tools/merchandising-pack.js.map +2 -2
  85. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js +2 -5
  86. package/dist/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.js.map +2 -2
  87. package/dist/modules/catalog/components/categories/CategoriesDataTable.js +0 -2
  88. package/dist/modules/catalog/components/categories/CategoriesDataTable.js.map +2 -2
  89. package/dist/modules/catalog/components/products/ProductsDataTable.js +1 -7
  90. package/dist/modules/catalog/components/products/ProductsDataTable.js.map +2 -2
  91. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js +0 -2
  92. package/dist/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.js.map +2 -2
  93. package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js +1 -9
  94. package/dist/modules/communication_channels/api/post/channels/[id]/test-send/route.js.map +2 -2
  95. package/dist/modules/communication_channels/api/post/test-seed/route.js +10 -95
  96. package/dist/modules/communication_channels/api/post/test-seed/route.js.map +2 -2
  97. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js +0 -3
  98. package/dist/modules/communication_channels/backend/communication_channels/channels/page.js.map +2 -2
  99. package/dist/modules/communication_channels/commands/ingest-inbound-message.js +1 -14
  100. package/dist/modules/communication_channels/commands/ingest-inbound-message.js.map +2 -2
  101. package/dist/modules/communication_channels/di.js +1 -7
  102. package/dist/modules/communication_channels/di.js.map +2 -2
  103. package/dist/modules/communication_channels/lib/email-capabilities.js +1 -4
  104. package/dist/modules/communication_channels/lib/email-capabilities.js.map +2 -2
  105. package/dist/modules/communication_channels/lib/test-seed.js +2 -41
  106. package/dist/modules/communication_channels/lib/test-seed.js.map +2 -2
  107. package/dist/modules/configs/lib/system-status.js +0 -9
  108. package/dist/modules/configs/lib/system-status.js.map +2 -2
  109. package/dist/modules/currencies/backend/currencies/page.js +1 -3
  110. package/dist/modules/currencies/backend/currencies/page.js.map +2 -2
  111. package/dist/modules/currencies/backend/exchange-rates/page.js +1 -3
  112. package/dist/modules/currencies/backend/exchange-rates/page.js.map +2 -2
  113. package/dist/modules/customer_accounts/api/admin/domain-mappings.js +0 -9
  114. package/dist/modules/customer_accounts/api/admin/domain-mappings.js.map +2 -2
  115. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js +1 -3
  116. package/dist/modules/customer_accounts/backend/customer_accounts/roles/page.js.map +2 -2
  117. package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js +84 -0
  118. package/dist/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.js.map +7 -0
  119. package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js +7 -81
  120. package/dist/modules/customer_accounts/backend/customer_accounts/settings/page.js.map +2 -2
  121. package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js +523 -0
  122. package/dist/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.js.map +7 -0
  123. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js +731 -0
  124. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.js.map +7 -0
  125. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +7 -727
  126. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  127. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +7 -521
  128. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  129. package/dist/modules/customer_accounts/extension-points.js +1 -1
  130. package/dist/modules/customer_accounts/extension-points.js.map +2 -2
  131. package/dist/modules/customer_accounts/lib/portalUrl.js +69 -0
  132. package/dist/modules/customer_accounts/lib/portalUrl.js.map +7 -0
  133. package/dist/modules/customer_accounts/services/domainMappingService.js +0 -10
  134. package/dist/modules/customer_accounts/services/domainMappingService.js.map +2 -2
  135. package/dist/modules/customers/ai-tools/companies-pack.js +1 -4
  136. package/dist/modules/customers/ai-tools/companies-pack.js.map +2 -2
  137. package/dist/modules/customers/ai-tools/deal-analyzer-pack.js +2 -13
  138. package/dist/modules/customers/ai-tools/deal-analyzer-pack.js.map +2 -2
  139. package/dist/modules/customers/ai-tools/deals-pack.js +6 -52
  140. package/dist/modules/customers/ai-tools/deals-pack.js.map +2 -2
  141. package/dist/modules/customers/ai-tools/people-pack.js +1 -4
  142. package/dist/modules/customers/ai-tools/people-pack.js.map +2 -2
  143. package/dist/modules/customers/api/activities/route.js +6 -48
  144. package/dist/modules/customers/api/activities/route.js.map +2 -2
  145. package/dist/modules/customers/api/companies/[id]/people/route.js +64 -20
  146. package/dist/modules/customers/api/companies/[id]/people/route.js.map +2 -2
  147. package/dist/modules/customers/api/companies/[id]/route.js +94 -17
  148. package/dist/modules/customers/api/companies/[id]/route.js.map +2 -2
  149. package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js +5 -8
  150. package/dist/modules/customers/api/dashboard/widgets/customer-todos/route.js.map +2 -2
  151. package/dist/modules/customers/api/deals/[id]/companies/route.js +1 -1
  152. package/dist/modules/customers/api/deals/[id]/companies/route.js.map +2 -2
  153. package/dist/modules/customers/api/deals/[id]/people/route.js +1 -1
  154. package/dist/modules/customers/api/deals/[id]/people/route.js.map +2 -2
  155. package/dist/modules/customers/api/deals/[id]/route.js +25 -8
  156. package/dist/modules/customers/api/deals/[id]/route.js.map +2 -2
  157. package/dist/modules/customers/api/deals/[id]/stats/route.js +22 -3
  158. package/dist/modules/customers/api/deals/[id]/stats/route.js.map +2 -2
  159. package/dist/modules/customers/api/deals/aggregate/route.js +4 -11
  160. package/dist/modules/customers/api/deals/aggregate/route.js.map +2 -2
  161. package/dist/modules/customers/api/deals/map/route.js +1 -2
  162. package/dist/modules/customers/api/deals/map/route.js.map +2 -2
  163. package/dist/modules/customers/api/deals/route.js +1 -38
  164. package/dist/modules/customers/api/deals/route.js.map +2 -2
  165. package/dist/modules/customers/api/entity-roles-factory.js +4 -4
  166. package/dist/modules/customers/api/entity-roles-factory.js.map +2 -2
  167. package/dist/modules/customers/api/interactions/route.js +1 -3
  168. package/dist/modules/customers/api/interactions/route.js.map +2 -2
  169. package/dist/modules/customers/api/interactions/tasks/route.js +4 -27
  170. package/dist/modules/customers/api/interactions/tasks/route.js.map +2 -2
  171. package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js +3 -4
  172. package/dist/modules/customers/api/people/[id]/companies/[linkId]/route.js.map +2 -2
  173. package/dist/modules/customers/api/people/[id]/companies/context.js +1 -1
  174. package/dist/modules/customers/api/people/[id]/companies/context.js.map +2 -2
  175. package/dist/modules/customers/api/people/[id]/companies/enriched/route.js +1 -1
  176. package/dist/modules/customers/api/people/[id]/companies/enriched/route.js.map +2 -2
  177. package/dist/modules/customers/api/people/[id]/route.js +10 -11
  178. package/dist/modules/customers/api/people/[id]/route.js.map +2 -2
  179. package/dist/modules/customers/api/people/check-phone/route.js +9 -51
  180. package/dist/modules/customers/api/people/check-phone/route.js.map +2 -2
  181. package/dist/modules/customers/api/todos/route.js +5 -30
  182. package/dist/modules/customers/api/todos/route.js.map +2 -2
  183. package/dist/modules/customers/backend/customers/companies/page.js +4 -6
  184. package/dist/modules/customers/backend/customers/companies/page.js.map +2 -2
  185. package/dist/modules/customers/backend/customers/deals/[id]/page.js +1 -6
  186. package/dist/modules/customers/backend/customers/deals/[id]/page.js.map +2 -2
  187. package/dist/modules/customers/backend/customers/deals/page.js +4 -7
  188. package/dist/modules/customers/backend/customers/deals/page.js.map +2 -2
  189. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js +13 -4
  190. package/dist/modules/customers/backend/customers/deals/pipeline/components/Lane.js.map +2 -2
  191. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js +14 -85
  192. package/dist/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.js.map +2 -2
  193. package/dist/modules/customers/backend/customers/people/page.js +4 -6
  194. package/dist/modules/customers/backend/customers/people/page.js.map +2 -2
  195. package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js +3 -9
  196. package/dist/modules/customers/backend/hooks/useEmailDuplicateCheck.js.map +2 -2
  197. package/dist/modules/customers/commands/deals.js +34 -21
  198. package/dist/modules/customers/commands/deals.js.map +2 -2
  199. package/dist/modules/customers/commands/interactions.js.map +1 -1
  200. package/dist/modules/customers/commands/personCompanyLinks.js +2 -131
  201. package/dist/modules/customers/commands/personCompanyLinks.js.map +2 -2
  202. package/dist/modules/customers/components/CustomerTodosTable.js +0 -1
  203. package/dist/modules/customers/components/CustomerTodosTable.js.map +2 -2
  204. package/dist/modules/customers/components/DealsKpiStrip.js +6 -7
  205. package/dist/modules/customers/components/DealsKpiStrip.js.map +2 -2
  206. package/dist/modules/customers/components/calendar/AgendaList.js +2 -2
  207. package/dist/modules/customers/components/calendar/AgendaList.js.map +2 -2
  208. package/dist/modules/customers/components/calendar/CalendarEventEditor.js +1 -1
  209. package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +2 -2
  210. package/dist/modules/customers/components/calendar/CalendarScreen.js +1 -1
  211. package/dist/modules/customers/components/calendar/CalendarScreen.js.map +2 -2
  212. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +1 -1
  213. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +2 -2
  214. package/dist/modules/customers/components/calendar/EventBlock.js +1 -1
  215. package/dist/modules/customers/components/calendar/EventBlock.js.map +2 -2
  216. package/dist/modules/customers/components/calendar/EventPeekPopover.js +2 -3
  217. package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +2 -2
  218. package/dist/modules/customers/components/calendar/editor/PeopleField.js +5 -40
  219. package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +2 -2
  220. package/dist/modules/customers/components/calendar/editor/hooks.js +1 -2
  221. package/dist/modules/customers/components/calendar/editor/hooks.js.map +2 -2
  222. package/dist/modules/customers/components/calendar/types.js +1 -1
  223. package/dist/modules/customers/components/calendar/types.js.map +2 -2
  224. package/dist/modules/customers/components/detail/AssignRoleDialog.js +33 -28
  225. package/dist/modules/customers/components/detail/AssignRoleDialog.js.map +2 -2
  226. package/dist/modules/customers/components/detail/CompanyKpiBar.js +4 -5
  227. package/dist/modules/customers/components/detail/CompanyKpiBar.js.map +2 -2
  228. package/dist/modules/customers/components/detail/CompanyPeopleSection.js +1 -3
  229. package/dist/modules/customers/components/detail/CompanyPeopleSection.js.map +2 -2
  230. package/dist/modules/customers/components/detail/DealForm.js +7 -19
  231. package/dist/modules/customers/components/detail/DealForm.js.map +2 -2
  232. package/dist/modules/customers/components/detail/DealsSection.js +5 -6
  233. package/dist/modules/customers/components/detail/DealsSection.js.map +2 -2
  234. package/dist/modules/customers/components/detail/EntityTagsDialog.js +11 -35
  235. package/dist/modules/customers/components/detail/EntityTagsDialog.js.map +2 -2
  236. package/dist/modules/customers/components/detail/PersonCompaniesSection.js +1 -3
  237. package/dist/modules/customers/components/detail/PersonCompaniesSection.js.map +2 -2
  238. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js +13 -19
  239. package/dist/modules/customers/components/detail/hooks/usePersonTasks.js.map +2 -2
  240. package/dist/modules/customers/components/detail/schedule/ParticipantsField.js +4 -4
  241. package/dist/modules/customers/components/detail/schedule/ParticipantsField.js.map +2 -2
  242. package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js +3 -3
  243. package/dist/modules/customers/components/detail/schedule/useScheduleFormState.js.map +2 -2
  244. package/dist/modules/customers/components/detail/utils.js +5 -5
  245. package/dist/modules/customers/components/detail/utils.js.map +2 -2
  246. package/dist/modules/customers/data/entities.js.map +1 -1
  247. package/dist/modules/customers/data/validators.js +3 -32
  248. package/dist/modules/customers/data/validators.js.map +2 -2
  249. package/dist/modules/customers/events.js +0 -5
  250. package/dist/modules/customers/events.js.map +2 -2
  251. package/dist/modules/customers/lib/calendar/conflicts.js +2 -8
  252. package/dist/modules/customers/lib/calendar/conflicts.js.map +2 -2
  253. package/dist/modules/customers/lib/calendar/editorPayload.js +2 -3
  254. package/dist/modules/customers/lib/calendar/editorPayload.js.map +2 -2
  255. package/dist/modules/customers/lib/calendar/mapItem.js +3 -8
  256. package/dist/modules/customers/lib/calendar/mapItem.js.map +2 -2
  257. package/dist/modules/customers/lib/dealStatus.js +0 -30
  258. package/dist/modules/customers/lib/dealStatus.js.map +2 -2
  259. package/dist/modules/customers/lib/findPeopleByAddresses.js +0 -1
  260. package/dist/modules/customers/lib/findPeopleByAddresses.js.map +2 -2
  261. package/dist/modules/customers/lib/personCompanies.js +2 -100
  262. package/dist/modules/customers/lib/personCompanies.js.map +2 -2
  263. package/dist/modules/customers/lib/todoCompatibility.js +0 -12
  264. package/dist/modules/customers/lib/todoCompatibility.js.map +2 -2
  265. package/dist/modules/dashboards/lib/widgetScope.js +1 -6
  266. package/dist/modules/dashboards/lib/widgetScope.js.map +2 -2
  267. package/dist/modules/data_sync/backend/data-sync/page.js +1 -3
  268. package/dist/modules/data_sync/backend/data-sync/page.js.map +2 -2
  269. package/dist/modules/data_sync/lib/sync-engine.js +6 -72
  270. package/dist/modules/data_sync/lib/sync-engine.js.map +2 -2
  271. package/dist/modules/data_sync/workers/sync-export.js +1 -5
  272. package/dist/modules/data_sync/workers/sync-export.js.map +2 -2
  273. package/dist/modules/data_sync/workers/sync-import.js +1 -5
  274. package/dist/modules/data_sync/workers/sync-import.js.map +2 -2
  275. package/dist/modules/devices/api/admin/devices/[id]/route.js +32 -5
  276. package/dist/modules/devices/api/admin/devices/[id]/route.js.map +2 -2
  277. package/dist/modules/devices/api/admin/devices/route.js +1 -14
  278. package/dist/modules/devices/api/admin/devices/route.js.map +2 -2
  279. package/dist/modules/devices/api/deviceList.js +12 -99
  280. package/dist/modules/devices/api/deviceList.js.map +2 -2
  281. package/dist/modules/devices/api/openapi.js +1 -3
  282. package/dist/modules/devices/api/openapi.js.map +2 -2
  283. package/dist/modules/devices/api/route.js +1 -9
  284. package/dist/modules/devices/api/route.js.map +2 -2
  285. package/dist/modules/devices/backend/devices/[id]/page.js +8 -8
  286. package/dist/modules/devices/backend/devices/[id]/page.js.map +2 -2
  287. package/dist/modules/devices/backend/devices/page.js +13 -15
  288. package/dist/modules/devices/backend/devices/page.js.map +2 -2
  289. package/dist/modules/directory/backend/directory/organizations/page.js +1 -2
  290. package/dist/modules/directory/backend/directory/organizations/page.js.map +2 -2
  291. package/dist/modules/directory/backend/directory/tenants/page.js +1 -2
  292. package/dist/modules/directory/backend/directory/tenants/page.js.map +2 -2
  293. package/dist/modules/directory/di.js +0 -9
  294. package/dist/modules/directory/di.js.map +2 -2
  295. package/dist/modules/directory/utils/organizationScope.js.map +2 -2
  296. package/dist/modules/entities/api/records.js +2 -4
  297. package/dist/modules/entities/api/records.js.map +2 -2
  298. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js +1 -3
  299. package/dist/modules/entities/backend/entities/user/[entityId]/records/page.js.map +2 -2
  300. package/dist/modules/eudr/api/plots/route.js +1 -5
  301. package/dist/modules/eudr/api/plots/route.js.map +2 -2
  302. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js +3 -1
  303. package/dist/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.js.map +2 -2
  304. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js +1 -0
  305. package/dist/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.js.map +2 -2
  306. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js +0 -3
  307. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.js.map +2 -2
  308. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js +4 -1
  309. package/dist/modules/eudr/backend/eudr/evidence-submissions/page.meta.js.map +2 -2
  310. package/dist/modules/eudr/backend/eudr/page.meta.js +2 -2
  311. package/dist/modules/eudr/backend/eudr/page.meta.js.map +2 -2
  312. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js +8 -2
  313. package/dist/modules/eudr/backend/eudr/plots/[id]/page.js.map +2 -2
  314. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js +3 -1
  315. package/dist/modules/eudr/backend/eudr/plots/[id]/page.meta.js.map +2 -2
  316. package/dist/modules/eudr/backend/eudr/plots/create/page.js +8 -2
  317. package/dist/modules/eudr/backend/eudr/plots/create/page.js.map +2 -2
  318. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js +1 -0
  319. package/dist/modules/eudr/backend/eudr/plots/create/page.meta.js.map +2 -2
  320. package/dist/modules/eudr/backend/eudr/plots/page.js +0 -3
  321. package/dist/modules/eudr/backend/eudr/plots/page.js.map +2 -2
  322. package/dist/modules/eudr/backend/eudr/plots/page.meta.js +4 -1
  323. package/dist/modules/eudr/backend/eudr/plots/page.meta.js.map +2 -2
  324. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js +3 -1
  325. package/dist/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.js.map +2 -2
  326. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js +1 -0
  327. package/dist/modules/eudr/backend/eudr/product-mappings/create/page.meta.js.map +2 -2
  328. package/dist/modules/eudr/backend/eudr/product-mappings/page.js +0 -3
  329. package/dist/modules/eudr/backend/eudr/product-mappings/page.js.map +2 -2
  330. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js +4 -1
  331. package/dist/modules/eudr/backend/eudr/product-mappings/page.meta.js.map +2 -2
  332. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js +3 -1
  333. package/dist/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.js.map +2 -2
  334. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js +1 -0
  335. package/dist/modules/eudr/backend/eudr/risk-assessments/create/page.meta.js.map +2 -2
  336. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js +0 -3
  337. package/dist/modules/eudr/backend/eudr/risk-assessments/page.js.map +2 -2
  338. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js +4 -1
  339. package/dist/modules/eudr/backend/eudr/risk-assessments/page.meta.js.map +2 -2
  340. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js +2 -0
  341. package/dist/modules/eudr/backend/eudr/statements/[id]/page.js.map +2 -2
  342. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js +3 -1
  343. package/dist/modules/eudr/backend/eudr/statements/[id]/page.meta.js.map +2 -2
  344. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js +1 -0
  345. package/dist/modules/eudr/backend/eudr/statements/create/page.meta.js.map +2 -2
  346. package/dist/modules/eudr/backend/eudr/statements/page.js +30 -28
  347. package/dist/modules/eudr/backend/eudr/statements/page.js.map +2 -2
  348. package/dist/modules/eudr/backend/eudr/statements/page.meta.js +4 -1
  349. package/dist/modules/eudr/backend/eudr/statements/page.meta.js.map +2 -2
  350. package/dist/modules/eudr/commands/statements.js +8 -3
  351. package/dist/modules/eudr/commands/statements.js.map +2 -2
  352. package/dist/modules/eudr/components/crudErrorI18n.js +21 -1
  353. package/dist/modules/eudr/components/crudErrorI18n.js.map +2 -2
  354. package/dist/modules/eudr/components/formConfig.js +6 -2
  355. package/dist/modules/eudr/components/formConfig.js.map +2 -2
  356. package/dist/modules/eudr/data/validators.js +1 -4
  357. package/dist/modules/eudr/data/validators.js.map +2 -2
  358. package/dist/modules/eudr/lib/statement-lifecycle.js +9 -1
  359. package/dist/modules/eudr/lib/statement-lifecycle.js.map +2 -2
  360. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js +0 -1
  361. package/dist/modules/feature_toggles/components/FeatureTogglesTable.js.map +2 -2
  362. package/dist/modules/feature_toggles/components/OverridesTable.js +0 -1
  363. package/dist/modules/feature_toggles/components/OverridesTable.js.map +2 -2
  364. package/dist/modules/feature_toggles/defaults.json +8 -0
  365. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js +0 -3
  366. package/dist/modules/inbox_ops/backend/inbox-ops/log/page.js.map +2 -2
  367. package/dist/modules/inbox_ops/backend/inbox-ops/page.js +0 -3
  368. package/dist/modules/inbox_ops/backend/inbox-ops/page.js.map +2 -2
  369. package/dist/modules/inbox_ops/lib/htmlToPlainText.js +12 -1
  370. package/dist/modules/inbox_ops/lib/htmlToPlainText.js.map +2 -2
  371. package/dist/modules/integrations/api/[id]/credentials/route.js +1 -6
  372. package/dist/modules/integrations/api/[id]/credentials/route.js.map +2 -2
  373. package/dist/modules/integrations/backend/integrations/[id]/page.js +29 -38
  374. package/dist/modules/integrations/backend/integrations/[id]/page.js.map +2 -2
  375. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js +9 -36
  376. package/dist/modules/integrations/backend/integrations/bundle/[id]/page.js.map +2 -2
  377. package/dist/modules/integrations/data/validators.js +3 -11
  378. package/dist/modules/integrations/data/validators.js.map +2 -2
  379. package/dist/modules/integrations/lib/credentials-masking.js +2 -6
  380. package/dist/modules/integrations/lib/credentials-masking.js.map +2 -2
  381. package/dist/modules/messages/api/[id]/route.js +1 -29
  382. package/dist/modules/messages/api/[id]/route.js.map +2 -2
  383. package/dist/modules/messages/api/openapi.js +2 -17
  384. package/dist/modules/messages/api/openapi.js.map +2 -2
  385. package/dist/modules/messages/api/route.js +2 -17
  386. package/dist/modules/messages/api/route.js.map +2 -2
  387. package/dist/modules/messages/components/MessagesInboxPageClient.js +14 -7
  388. package/dist/modules/messages/components/MessagesInboxPageClient.js.map +2 -2
  389. package/dist/modules/messages/components/inboxFilters.js +0 -15
  390. package/dist/modules/messages/components/inboxFilters.js.map +2 -2
  391. package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js +1 -11
  392. package/dist/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.js.map +2 -2
  393. package/dist/modules/messages/components/message-detail/panels/MessageHeader.js +1 -3
  394. package/dist/modules/messages/components/message-detail/panels/MessageHeader.js.map +2 -2
  395. package/dist/modules/messages/components/message-detail/panels/thread-panel.js +1 -2
  396. package/dist/modules/messages/components/message-detail/panels/thread-panel.js.map +2 -2
  397. package/dist/modules/messages/components/messageListLabels.js +2 -14
  398. package/dist/modules/messages/components/messageListLabels.js.map +2 -2
  399. package/dist/modules/messages/data/validators.js +4 -18
  400. package/dist/modules/messages/data/validators.js.map +2 -2
  401. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js +6 -4
  402. package/dist/modules/payment_gateways/api/webhook/[provider]/route.js.map +2 -2
  403. package/dist/modules/payment_gateways/backend/payment-gateways/page.js +1 -3
  404. package/dist/modules/payment_gateways/backend/payment-gateways/page.js.map +2 -2
  405. package/dist/modules/payment_gateways/lib/webhook-processor.js +0 -7
  406. package/dist/modules/payment_gateways/lib/webhook-processor.js.map +2 -2
  407. package/dist/modules/planner/backend/planner/availability-rulesets/page.js +0 -3
  408. package/dist/modules/planner/backend/planner/availability-rulesets/page.js.map +2 -2
  409. package/dist/modules/push_notifications/backend/push_notifications/page.js +1 -3
  410. package/dist/modules/push_notifications/backend/push_notifications/page.js.map +2 -2
  411. package/dist/modules/push_notifications/backend/push_notifications/send/page.js +1 -1
  412. package/dist/modules/push_notifications/backend/push_notifications/send/page.js.map +2 -2
  413. package/dist/modules/query_index/lib/engine.js +51 -150
  414. package/dist/modules/query_index/lib/engine.js.map +2 -2
  415. package/dist/modules/query_index/lib/search-tokens.js +3 -79
  416. package/dist/modules/query_index/lib/search-tokens.js.map +2 -2
  417. package/dist/modules/resources/backend/resources/resource-types/page.js +1 -3
  418. package/dist/modules/resources/backend/resources/resource-types/page.js.map +2 -2
  419. package/dist/modules/resources/backend/resources/resources/page.js +1 -3
  420. package/dist/modules/resources/backend/resources/resources/page.js.map +2 -2
  421. package/dist/modules/sales/backend/sales/channels/offers/page.js +0 -3
  422. package/dist/modules/sales/backend/sales/channels/offers/page.js.map +2 -2
  423. package/dist/modules/sales/backend/sales/channels/page.js +0 -3
  424. package/dist/modules/sales/backend/sales/channels/page.js.map +2 -2
  425. package/dist/modules/sales/backend/sales/documents/[id]/page.js +8 -10
  426. package/dist/modules/sales/backend/sales/documents/[id]/page.js.map +2 -2
  427. package/dist/modules/sales/commands/documents.js +1 -79
  428. package/dist/modules/sales/commands/documents.js.map +2 -2
  429. package/dist/modules/sales/components/PriceWithCurrency.js +5 -7
  430. package/dist/modules/sales/components/PriceWithCurrency.js.map +2 -2
  431. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js +0 -3
  432. package/dist/modules/sales/components/channels/SalesChannelOffersPanel.js.map +2 -2
  433. package/dist/modules/sales/components/documents/AdjustmentsSection.js +6 -8
  434. package/dist/modules/sales/components/documents/AdjustmentsSection.js.map +2 -2
  435. package/dist/modules/sales/components/documents/ItemsSection.js +22 -51
  436. package/dist/modules/sales/components/documents/ItemsSection.js.map +2 -2
  437. package/dist/modules/sales/components/documents/LineItemDialog.js +19 -84
  438. package/dist/modules/sales/components/documents/LineItemDialog.js.map +2 -2
  439. package/dist/modules/sales/components/documents/PaymentsSection.js +9 -23
  440. package/dist/modules/sales/components/documents/PaymentsSection.js.map +2 -2
  441. package/dist/modules/sales/components/documents/ReturnsSection.js +6 -8
  442. package/dist/modules/sales/components/documents/ReturnsSection.js.map +2 -2
  443. package/dist/modules/sales/components/documents/SalesDocumentsTable.js +14 -68
  444. package/dist/modules/sales/components/documents/SalesDocumentsTable.js.map +2 -2
  445. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js +5 -6
  446. package/dist/modules/sales/components/documents/SalesOrderDraftLines.js.map +2 -2
  447. package/dist/modules/sales/components/documents/ShipmentDialog.js +4 -5
  448. package/dist/modules/sales/components/documents/ShipmentDialog.js.map +2 -2
  449. package/dist/modules/sales/components/documents/ShipmentsSection.js +6 -8
  450. package/dist/modules/sales/components/documents/ShipmentsSection.js.map +2 -2
  451. package/dist/modules/sales/components/documents/lineItemUtils.js +2 -2
  452. package/dist/modules/sales/components/documents/lineItemUtils.js.map +2 -2
  453. package/dist/modules/sales/data/entities.js +2 -8
  454. package/dist/modules/sales/data/entities.js.map +2 -2
  455. package/dist/modules/sales/extension-points.js +0 -1
  456. package/dist/modules/sales/extension-points.js.map +2 -2
  457. package/dist/modules/sales/setup.js +0 -2
  458. package/dist/modules/sales/setup.js.map +2 -2
  459. package/dist/modules/sales/widgets/injection/document-history/widget.client.js +44 -2
  460. package/dist/modules/sales/widgets/injection/document-history/widget.client.js.map +2 -2
  461. package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js +2 -10
  462. package/dist/modules/sales/widgets/injection/payment-gateway-status-column/widget.js.map +2 -2
  463. package/dist/modules/sales/widgets/injection-table.js +7 -4
  464. package/dist/modules/sales/widgets/injection-table.js.map +2 -2
  465. package/dist/modules/staff/backend/staff/leave-requests/page.js +0 -3
  466. package/dist/modules/staff/backend/staff/leave-requests/page.js.map +2 -2
  467. package/dist/modules/staff/backend/staff/my-leave-requests/page.js +0 -3
  468. package/dist/modules/staff/backend/staff/my-leave-requests/page.js.map +2 -2
  469. package/dist/modules/staff/backend/staff/team-members/page.js +0 -3
  470. package/dist/modules/staff/backend/staff/team-members/page.js.map +2 -2
  471. package/dist/modules/staff/backend/staff/team-roles/page.js +0 -3
  472. package/dist/modules/staff/backend/staff/team-roles/page.js.map +2 -2
  473. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js +0 -3
  474. package/dist/modules/staff/backend/staff/teams/[id]/edit/page.js.map +2 -2
  475. package/dist/modules/staff/backend/staff/teams/page.js +0 -3
  476. package/dist/modules/staff/backend/staff/teams/page.js.map +2 -2
  477. package/dist/modules/staff/backend/staff/timesheets/page.js +18 -29
  478. package/dist/modules/staff/backend/staff/timesheets/page.js.map +2 -2
  479. package/dist/modules/staff/backend/staff/timesheets/projects/page.js +0 -3
  480. package/dist/modules/staff/backend/staff/timesheets/projects/page.js.map +2 -2
  481. package/dist/modules/sync_excel/lib/adapters/customers.js +0 -1
  482. package/dist/modules/sync_excel/lib/adapters/customers.js.map +2 -2
  483. package/dist/modules/warranty_claims/api/assignees/route.js +3 -3
  484. package/dist/modules/warranty_claims/api/assignees/route.js.map +2 -2
  485. package/dist/modules/warranty_claims/api/portal/attachments/route.js +2 -2
  486. package/dist/modules/warranty_claims/api/portal/attachments/route.js.map +2 -2
  487. package/dist/modules/warranty_claims/api/portal/claims/route.js +9 -12
  488. package/dist/modules/warranty_claims/api/portal/claims/route.js.map +2 -2
  489. package/dist/modules/warranty_claims/backend/page.js +0 -3
  490. package/dist/modules/warranty_claims/backend/page.js.map +2 -2
  491. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js +0 -3
  492. package/dist/modules/warranty_claims/backend/warranty_claims/registrations/page.js.map +2 -2
  493. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js +0 -3
  494. package/dist/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.js.map +2 -2
  495. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js +0 -3
  496. package/dist/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.js.map +2 -2
  497. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js +0 -3
  498. package/dist/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.js.map +2 -2
  499. package/dist/modules/wms/api/warehouses/route.js +9 -13
  500. package/dist/modules/wms/api/warehouses/route.js.map +2 -2
  501. package/dist/modules/wms/api/zones/route.js +2 -15
  502. package/dist/modules/wms/api/zones/route.js.map +2 -2
  503. package/dist/modules/wms/commands/configuration.js +9 -121
  504. package/dist/modules/wms/commands/configuration.js.map +2 -2
  505. package/dist/modules/wms/commands/inventory-actions.js +0 -3
  506. package/dist/modules/wms/commands/inventory-actions.js.map +2 -2
  507. package/dist/modules/wms/commands/shared.js +1 -9
  508. package/dist/modules/wms/commands/shared.js.map +2 -2
  509. package/dist/modules/wms/components/backend/WmsConfigurationPage.js +111 -76
  510. package/dist/modules/wms/components/backend/WmsConfigurationPage.js.map +3 -3
  511. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js +0 -1
  512. package/dist/modules/wms/components/backend/WmsInventoryConsolePage.js.map +2 -2
  513. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js +20 -16
  514. package/dist/modules/wms/components/backend/WmsLocationDetailPage.js.map +2 -2
  515. package/dist/modules/wms/components/backend/WmsLotDetailPage.js +10 -6
  516. package/dist/modules/wms/components/backend/WmsLotDetailPage.js.map +2 -2
  517. package/dist/modules/wms/components/backend/WmsLotsListPage.js +0 -1
  518. package/dist/modules/wms/components/backend/WmsLotsListPage.js.map +2 -2
  519. package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js +11 -7
  520. package/dist/modules/wms/components/backend/WmsOperationalDashboardPage.js.map +2 -2
  521. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js +10 -6
  522. package/dist/modules/wms/components/backend/WmsSkuDetailPage.js.map +2 -2
  523. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js +20 -27
  524. package/dist/modules/wms/components/backend/inventoryMutationLoaders.js.map +2 -2
  525. package/dist/modules/workflows/backend/definitions/page.js +1 -3
  526. package/dist/modules/workflows/backend/definitions/page.js.map +2 -2
  527. package/dist/modules/workflows/backend/events/page.js +1 -3
  528. package/dist/modules/workflows/backend/events/page.js.map +2 -2
  529. package/dist/modules/workflows/backend/instances/page.js +1 -3
  530. package/dist/modules/workflows/backend/instances/page.js.map +2 -2
  531. package/dist/modules/workflows/backend/tasks/page.js +1 -3
  532. package/dist/modules/workflows/backend/tasks/page.js.map +2 -2
  533. package/dist/modules/workflows/lib/activity-executor.js +0 -4
  534. package/dist/modules/workflows/lib/activity-executor.js.map +2 -2
  535. package/package.json +10 -9
  536. package/src/helpers/integration/api.ts +1 -33
  537. package/src/helpers/integration/communicationChannelsFixtures.ts +1 -69
  538. package/src/modules/api_keys/api/keys/route.ts +1 -3
  539. package/src/modules/api_keys/backend/api-keys/page.tsx +1 -4
  540. package/src/modules/attachments/AGENTS.md +0 -15
  541. package/src/modules/attachments/api/route.ts +2 -2
  542. package/src/modules/attachments/components/AttachmentLibrary.tsx +0 -3
  543. package/src/modules/attachments/di.ts +0 -16
  544. package/src/modules/attachments/i18n/de.json +0 -5
  545. package/src/modules/attachments/i18n/en.json +0 -5
  546. package/src/modules/attachments/i18n/es.json +0 -5
  547. package/src/modules/attachments/i18n/ko.json +0 -5
  548. package/src/modules/attachments/i18n/pl.json +0 -5
  549. package/src/modules/attachments/index.ts +0 -10
  550. package/src/modules/attachments/lib/scoped-upload-service.ts +0 -46
  551. package/src/modules/attachments/lib/upload-limits.ts +2 -6
  552. package/src/modules/audit_logs/backend/audit-logs/page.tsx +0 -8
  553. package/src/modules/audit_logs/lib/display-helpers.tsx +32 -42
  554. package/src/modules/audit_logs/services/actionLogService.ts +11 -74
  555. package/src/modules/auth/acl.ts +6 -30
  556. package/src/modules/auth/api/feature-check.ts +3 -10
  557. package/src/modules/auth/api/login.ts +24 -9
  558. package/src/modules/auth/api/roles/acl/route.ts +39 -42
  559. package/src/modules/auth/api/routeError.ts +30 -0
  560. package/src/modules/auth/api/session/refresh.ts +1 -32
  561. package/src/modules/auth/api/users/acl/route.ts +101 -185
  562. package/src/modules/auth/backend/roles/[id]/edit/page.meta.ts +2 -5
  563. package/src/modules/auth/backend/roles/page.tsx +2 -4
  564. package/src/modules/auth/backend/users/[id]/edit/page.meta.ts +2 -5
  565. package/src/modules/auth/backend/users/page.tsx +2 -3
  566. package/src/modules/auth/components/AclEditor.tsx +33 -63
  567. package/src/modules/auth/data/entities.ts +1 -4
  568. package/src/modules/auth/data/validators.ts +0 -5
  569. package/src/modules/auth/di.ts +16 -46
  570. package/src/modules/auth/frontend/reset/[token]/page.tsx +0 -74
  571. package/src/modules/auth/i18n/de.json +0 -389
  572. package/src/modules/auth/i18n/en.json +0 -389
  573. package/src/modules/auth/i18n/es.json +0 -389
  574. package/src/modules/auth/i18n/ko.json +0 -389
  575. package/src/modules/auth/i18n/pl.json +2 -391
  576. package/src/modules/auth/lib/grantChecks.ts +0 -6
  577. package/src/modules/auth/services/authService.ts +2 -18
  578. package/src/modules/auth/services/rbacService.ts +24 -110
  579. package/src/modules/business_rules/backend/logs/page.tsx +1 -4
  580. package/src/modules/business_rules/backend/rules/[id]/page.meta.ts +5 -0
  581. package/src/modules/business_rules/backend/rules/create/page.meta.ts +5 -1
  582. package/src/modules/business_rules/backend/rules/page.tsx +1 -4
  583. package/src/modules/business_rules/backend/sets/[id]/page.meta.ts +5 -0
  584. package/src/modules/business_rules/backend/sets/create/page.meta.ts +5 -1
  585. package/src/modules/business_rules/backend/sets/page.tsx +1 -4
  586. package/src/modules/business_rules/lib/expression-evaluator.ts +9 -9
  587. package/src/modules/business_rules/lib/rule-evaluator.ts +9 -10
  588. package/src/modules/catalog/ai-agents.ts +1 -1
  589. package/src/modules/catalog/ai-tools/merchandising-pack.ts +2 -2
  590. package/src/modules/catalog/backend/catalog/products/MerchandisingAssistantSheet.tsx +5 -12
  591. package/src/modules/catalog/components/categories/CategoriesDataTable.tsx +0 -3
  592. package/src/modules/catalog/components/products/ProductsDataTable.tsx +0 -7
  593. package/src/modules/catalog/i18n/de.json +0 -1
  594. package/src/modules/catalog/i18n/en.json +0 -1
  595. package/src/modules/catalog/i18n/es.json +0 -1
  596. package/src/modules/catalog/i18n/ko.json +0 -1
  597. package/src/modules/catalog/i18n/pl.json +0 -1
  598. package/src/modules/catalog/widgets/injection/merchandising-assistant-trigger/widget.client.tsx +0 -4
  599. package/src/modules/communication_channels/api/post/channels/[id]/test-send/route.ts +1 -17
  600. package/src/modules/communication_channels/api/post/test-seed/route.ts +16 -155
  601. package/src/modules/communication_channels/backend/communication_channels/channels/page.tsx +0 -4
  602. package/src/modules/communication_channels/commands/ingest-inbound-message.ts +1 -38
  603. package/src/modules/communication_channels/di.ts +0 -7
  604. package/src/modules/communication_channels/lib/adapter.ts +0 -14
  605. package/src/modules/communication_channels/lib/email-capabilities.ts +0 -4
  606. package/src/modules/communication_channels/lib/test-seed.ts +4 -64
  607. package/src/modules/configs/i18n/de.json +0 -2
  608. package/src/modules/configs/i18n/en.json +0 -2
  609. package/src/modules/configs/i18n/es.json +0 -2
  610. package/src/modules/configs/i18n/ko.json +0 -2
  611. package/src/modules/configs/i18n/pl.json +0 -2
  612. package/src/modules/configs/lib/system-status.ts +0 -9
  613. package/src/modules/currencies/backend/currencies/page.tsx +1 -4
  614. package/src/modules/currencies/backend/exchange-rates/page.tsx +1 -4
  615. package/src/modules/customer_accounts/api/admin/domain-mappings.ts +0 -7
  616. package/src/modules/customer_accounts/backend/customer_accounts/roles/page.tsx +1 -4
  617. package/src/modules/customer_accounts/backend/customer_accounts/settings/CustomerAccountsSettingsPageClient.tsx +138 -0
  618. package/src/modules/customer_accounts/backend/customer_accounts/settings/page.tsx +8 -132
  619. package/src/modules/customer_accounts/backend/customer_accounts/users/PortalUsersPageClient.tsx +598 -0
  620. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/PortalUserDetailPageClient.tsx +838 -0
  621. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +6 -838
  622. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +6 -590
  623. package/src/modules/customer_accounts/extension-points.ts +1 -1
  624. package/src/modules/customer_accounts/lib/portalUrl.ts +112 -0
  625. package/src/modules/customer_accounts/services/domainMappingService.ts +0 -10
  626. package/src/modules/customers/ai-tools/companies-pack.ts +1 -4
  627. package/src/modules/customers/ai-tools/deal-analyzer-pack.ts +2 -17
  628. package/src/modules/customers/ai-tools/deals-pack.ts +1 -66
  629. package/src/modules/customers/ai-tools/people-pack.ts +1 -4
  630. package/src/modules/customers/api/activities/route.ts +0 -45
  631. package/src/modules/customers/api/companies/[id]/people/route.ts +73 -24
  632. package/src/modules/customers/api/companies/[id]/route.ts +107 -24
  633. package/src/modules/customers/api/dashboard/widgets/customer-todos/route.ts +8 -16
  634. package/src/modules/customers/api/deals/[id]/companies/route.ts +1 -4
  635. package/src/modules/customers/api/deals/[id]/people/route.ts +1 -4
  636. package/src/modules/customers/api/deals/[id]/route.ts +28 -17
  637. package/src/modules/customers/api/deals/[id]/stats/route.ts +25 -10
  638. package/src/modules/customers/api/deals/aggregate/route.ts +4 -14
  639. package/src/modules/customers/api/deals/map/route.ts +0 -1
  640. package/src/modules/customers/api/deals/route.ts +1 -50
  641. package/src/modules/customers/api/entity-roles-factory.ts +4 -8
  642. package/src/modules/customers/api/interactions/route.ts +2 -8
  643. package/src/modules/customers/api/interactions/tasks/route.ts +1 -24
  644. package/src/modules/customers/api/people/[id]/companies/[linkId]/route.ts +4 -12
  645. package/src/modules/customers/api/people/[id]/companies/context.ts +1 -4
  646. package/src/modules/customers/api/people/[id]/companies/enriched/route.ts +1 -4
  647. package/src/modules/customers/api/people/[id]/route.ts +11 -16
  648. package/src/modules/customers/api/people/check-phone/route.ts +10 -75
  649. package/src/modules/customers/api/todos/route.ts +2 -27
  650. package/src/modules/customers/backend/customers/companies/page.tsx +4 -7
  651. package/src/modules/customers/backend/customers/deals/[id]/page.tsx +2 -7
  652. package/src/modules/customers/backend/customers/deals/page.tsx +4 -10
  653. package/src/modules/customers/backend/customers/deals/pipeline/components/Lane.tsx +14 -5
  654. package/src/modules/customers/backend/customers/deals/pipeline/components/StatusFilterPopover.tsx +27 -109
  655. package/src/modules/customers/backend/customers/people/page.tsx +4 -7
  656. package/src/modules/customers/backend/hooks/useEmailDuplicateCheck.ts +4 -12
  657. package/src/modules/customers/commands/deals.ts +59 -34
  658. package/src/modules/customers/commands/interactions.ts +1 -1
  659. package/src/modules/customers/commands/personCompanyLinks.ts +8 -224
  660. package/src/modules/customers/components/CustomerTodosTable.tsx +0 -2
  661. package/src/modules/customers/components/DealsKpiStrip.tsx +7 -7
  662. package/src/modules/customers/components/calendar/AgendaList.tsx +3 -3
  663. package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +1 -1
  664. package/src/modules/customers/components/calendar/CalendarScreen.tsx +1 -1
  665. package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +1 -1
  666. package/src/modules/customers/components/calendar/EventBlock.tsx +2 -2
  667. package/src/modules/customers/components/calendar/EventPeekPopover.tsx +2 -4
  668. package/src/modules/customers/components/calendar/editor/PeopleField.tsx +5 -61
  669. package/src/modules/customers/components/calendar/editor/hooks.ts +1 -7
  670. package/src/modules/customers/components/calendar/types.ts +2 -2
  671. package/src/modules/customers/components/detail/AssignRoleDialog.tsx +12 -7
  672. package/src/modules/customers/components/detail/CompanyKpiBar.tsx +4 -5
  673. package/src/modules/customers/components/detail/CompanyPeopleSection.tsx +1 -8
  674. package/src/modules/customers/components/detail/DealForm.tsx +2 -22
  675. package/src/modules/customers/components/detail/DealsSection.tsx +5 -11
  676. package/src/modules/customers/components/detail/EntityTagsDialog.tsx +12 -58
  677. package/src/modules/customers/components/detail/PersonCompaniesSection.tsx +1 -8
  678. package/src/modules/customers/components/detail/hooks/usePersonTasks.ts +14 -23
  679. package/src/modules/customers/components/detail/schedule/ParticipantsField.tsx +5 -5
  680. package/src/modules/customers/components/detail/schedule/useScheduleFormState.ts +5 -5
  681. package/src/modules/customers/components/detail/types.ts +1 -1
  682. package/src/modules/customers/components/detail/utils.ts +5 -15
  683. package/src/modules/customers/data/entities.ts +1 -1
  684. package/src/modules/customers/data/validators.ts +9 -50
  685. package/src/modules/customers/events.ts +0 -5
  686. package/src/modules/customers/i18n/de.json +1 -9
  687. package/src/modules/customers/i18n/en.json +1 -9
  688. package/src/modules/customers/i18n/es.json +1 -9
  689. package/src/modules/customers/i18n/ko.json +1 -9
  690. package/src/modules/customers/i18n/pl.json +1 -9
  691. package/src/modules/customers/lib/calendar/conflicts.ts +2 -10
  692. package/src/modules/customers/lib/calendar/editorPayload.ts +3 -4
  693. package/src/modules/customers/lib/calendar/mapItem.ts +3 -8
  694. package/src/modules/customers/lib/dealStatus.ts +0 -42
  695. package/src/modules/customers/lib/findPeopleByAddresses.ts +6 -8
  696. package/src/modules/customers/lib/personCompanies.ts +1 -136
  697. package/src/modules/customers/lib/todoCompatibility.ts +1 -19
  698. package/src/modules/dashboards/i18n/es.json +4 -4
  699. package/src/modules/dashboards/i18n/pl.json +7 -7
  700. package/src/modules/dashboards/lib/widgetScope.ts +0 -6
  701. package/src/modules/data_sync/AGENTS.md +1 -1
  702. package/src/modules/data_sync/backend/data-sync/page.tsx +1 -4
  703. package/src/modules/data_sync/lib/adapter.ts +0 -36
  704. package/src/modules/data_sync/lib/sync-engine.ts +5 -113
  705. package/src/modules/data_sync/workers/sync-export.ts +0 -4
  706. package/src/modules/data_sync/workers/sync-import.ts +0 -4
  707. package/src/modules/devices/AGENTS.md +0 -8
  708. package/src/modules/devices/api/admin/devices/[id]/route.ts +34 -5
  709. package/src/modules/devices/api/admin/devices/route.ts +1 -14
  710. package/src/modules/devices/api/deviceList.ts +11 -135
  711. package/src/modules/devices/api/openapi.ts +1 -9
  712. package/src/modules/devices/api/route.ts +1 -9
  713. package/src/modules/devices/backend/devices/[id]/page.tsx +15 -15
  714. package/src/modules/devices/backend/devices/page.tsx +21 -24
  715. package/src/modules/directory/backend/directory/organizations/page.tsx +1 -3
  716. package/src/modules/directory/backend/directory/tenants/page.tsx +1 -3
  717. package/src/modules/directory/di.ts +2 -14
  718. package/src/modules/directory/utils/organizationScope.ts +15 -4
  719. package/src/modules/entities/api/records.ts +0 -2
  720. package/src/modules/entities/backend/entities/user/[entityId]/records/page.tsx +1 -4
  721. package/src/modules/eudr/api/plots/route.ts +0 -4
  722. package/src/modules/eudr/backend/eudr/evidence-submissions/[id]/page.meta.ts +2 -0
  723. package/src/modules/eudr/backend/eudr/evidence-submissions/create/page.meta.ts +1 -0
  724. package/src/modules/eudr/backend/eudr/evidence-submissions/page.meta.ts +4 -1
  725. package/src/modules/eudr/backend/eudr/evidence-submissions/page.tsx +0 -4
  726. package/src/modules/eudr/backend/eudr/page.meta.ts +2 -2
  727. package/src/modules/eudr/backend/eudr/plots/[id]/page.meta.ts +2 -0
  728. package/src/modules/eudr/backend/eudr/plots/[id]/page.tsx +8 -2
  729. package/src/modules/eudr/backend/eudr/plots/create/page.meta.ts +1 -0
  730. package/src/modules/eudr/backend/eudr/plots/create/page.tsx +8 -2
  731. package/src/modules/eudr/backend/eudr/plots/page.meta.ts +4 -1
  732. package/src/modules/eudr/backend/eudr/plots/page.tsx +0 -4
  733. package/src/modules/eudr/backend/eudr/product-mappings/[id]/page.meta.ts +2 -0
  734. package/src/modules/eudr/backend/eudr/product-mappings/create/page.meta.ts +1 -0
  735. package/src/modules/eudr/backend/eudr/product-mappings/page.meta.ts +4 -1
  736. package/src/modules/eudr/backend/eudr/product-mappings/page.tsx +0 -4
  737. package/src/modules/eudr/backend/eudr/risk-assessments/[id]/page.meta.ts +2 -0
  738. package/src/modules/eudr/backend/eudr/risk-assessments/create/page.meta.ts +1 -0
  739. package/src/modules/eudr/backend/eudr/risk-assessments/page.meta.ts +4 -1
  740. package/src/modules/eudr/backend/eudr/risk-assessments/page.tsx +0 -4
  741. package/src/modules/eudr/backend/eudr/statements/[id]/page.meta.ts +2 -0
  742. package/src/modules/eudr/backend/eudr/statements/[id]/page.tsx +2 -0
  743. package/src/modules/eudr/backend/eudr/statements/create/page.meta.ts +1 -0
  744. package/src/modules/eudr/backend/eudr/statements/page.meta.ts +4 -1
  745. package/src/modules/eudr/backend/eudr/statements/page.tsx +32 -30
  746. package/src/modules/eudr/commands/statements.ts +7 -2
  747. package/src/modules/eudr/components/crudErrorI18n.ts +31 -0
  748. package/src/modules/eudr/components/formConfig.tsx +9 -1
  749. package/src/modules/eudr/data/validators.ts +1 -16
  750. package/src/modules/eudr/i18n/de.json +3 -2
  751. package/src/modules/eudr/i18n/en.json +3 -2
  752. package/src/modules/eudr/i18n/es.json +3 -2
  753. package/src/modules/eudr/i18n/ko.json +3 -2
  754. package/src/modules/eudr/i18n/pl.json +3 -2
  755. package/src/modules/eudr/lib/statement-lifecycle.ts +8 -0
  756. package/src/modules/feature_toggles/components/FeatureTogglesTable.tsx +1 -2
  757. package/src/modules/feature_toggles/components/OverridesTable.tsx +1 -2
  758. package/src/modules/feature_toggles/defaults.json +8 -0
  759. package/src/modules/inbox_ops/backend/inbox-ops/log/page.tsx +0 -4
  760. package/src/modules/inbox_ops/backend/inbox-ops/page.tsx +0 -4
  761. package/src/modules/inbox_ops/lib/htmlToPlainText.ts +17 -1
  762. package/src/modules/integrations/api/[id]/credentials/route.ts +4 -6
  763. package/src/modules/integrations/backend/integrations/[id]/page.tsx +31 -61
  764. package/src/modules/integrations/backend/integrations/bundle/[id]/page.tsx +9 -44
  765. package/src/modules/integrations/data/validators.ts +2 -12
  766. package/src/modules/integrations/i18n/de.json +0 -1
  767. package/src/modules/integrations/i18n/en.json +0 -1
  768. package/src/modules/integrations/i18n/es.json +0 -1
  769. package/src/modules/integrations/i18n/ko.json +0 -1
  770. package/src/modules/integrations/i18n/pl.json +0 -1
  771. package/src/modules/integrations/lib/credentials-masking.ts +6 -10
  772. package/src/modules/messages/api/[id]/route.ts +1 -55
  773. package/src/modules/messages/api/openapi.ts +0 -20
  774. package/src/modules/messages/api/route.ts +2 -31
  775. package/src/modules/messages/components/MessagesInboxPageClient.tsx +16 -9
  776. package/src/modules/messages/components/inboxFilters.ts +0 -36
  777. package/src/modules/messages/components/message-detail/hooks/useMessageDetailsConversation.ts +1 -14
  778. package/src/modules/messages/components/message-detail/panels/MessageHeader.tsx +1 -3
  779. package/src/modules/messages/components/message-detail/panels/thread-panel.tsx +1 -2
  780. package/src/modules/messages/components/message-detail/types.ts +0 -3
  781. package/src/modules/messages/components/messageListLabels.ts +3 -52
  782. package/src/modules/messages/data/validators.ts +4 -43
  783. package/src/modules/payment_gateways/api/webhook/[provider]/route.ts +6 -4
  784. package/src/modules/payment_gateways/backend/payment-gateways/page.tsx +1 -4
  785. package/src/modules/payment_gateways/lib/webhook-processor.ts +0 -11
  786. package/src/modules/planner/backend/planner/availability-rulesets/page.tsx +0 -4
  787. package/src/modules/push_notifications/backend/push_notifications/page.tsx +1 -4
  788. package/src/modules/push_notifications/backend/push_notifications/send/page.tsx +4 -4
  789. package/src/modules/query_index/lib/engine.ts +61 -249
  790. package/src/modules/query_index/lib/search-tokens.ts +3 -135
  791. package/src/modules/resources/backend/resources/resource-types/page.tsx +1 -4
  792. package/src/modules/resources/backend/resources/resources/page.tsx +1 -4
  793. package/src/modules/sales/backend/sales/channels/offers/page.tsx +0 -4
  794. package/src/modules/sales/backend/sales/channels/page.tsx +0 -4
  795. package/src/modules/sales/backend/sales/documents/[id]/page.tsx +8 -14
  796. package/src/modules/sales/commands/documents.ts +0 -93
  797. package/src/modules/sales/components/PriceWithCurrency.tsx +5 -17
  798. package/src/modules/sales/components/channels/SalesChannelOffersPanel.tsx +0 -4
  799. package/src/modules/sales/components/documents/AdjustmentsSection.tsx +5 -6
  800. package/src/modules/sales/components/documents/ItemsSection.tsx +18 -56
  801. package/src/modules/sales/components/documents/LineItemDialog.tsx +21 -138
  802. package/src/modules/sales/components/documents/PaymentsSection.tsx +9 -20
  803. package/src/modules/sales/components/documents/ReturnsSection.tsx +5 -6
  804. package/src/modules/sales/components/documents/SalesDocumentsTable.tsx +14 -106
  805. package/src/modules/sales/components/documents/SalesOrderDraftLines.tsx +5 -6
  806. package/src/modules/sales/components/documents/ShipmentDialog.tsx +4 -5
  807. package/src/modules/sales/components/documents/ShipmentsSection.tsx +5 -6
  808. package/src/modules/sales/components/documents/lineItemUtils.ts +2 -7
  809. package/src/modules/sales/data/entities.ts +0 -6
  810. package/src/modules/sales/extension-points.ts +0 -1
  811. package/src/modules/sales/i18n/de.json +37 -8
  812. package/src/modules/sales/i18n/en.json +37 -8
  813. package/src/modules/sales/i18n/es.json +37 -8
  814. package/src/modules/sales/i18n/ko.json +37 -8
  815. package/src/modules/sales/i18n/pl.json +37 -8
  816. package/src/modules/sales/migrations/.snapshot-open-mercato.json +0 -60
  817. package/src/modules/sales/setup.ts +0 -2
  818. package/src/modules/sales/widgets/injection/document-history/widget.client.tsx +42 -2
  819. package/src/modules/sales/widgets/injection/payment-gateway-status-column/widget.ts +1 -9
  820. package/src/modules/sales/widgets/injection-table.ts +7 -4
  821. package/src/modules/staff/backend/staff/leave-requests/page.tsx +0 -4
  822. package/src/modules/staff/backend/staff/my-leave-requests/page.tsx +0 -4
  823. package/src/modules/staff/backend/staff/team-members/page.tsx +0 -6
  824. package/src/modules/staff/backend/staff/team-roles/page.tsx +0 -4
  825. package/src/modules/staff/backend/staff/teams/[id]/edit/page.tsx +0 -4
  826. package/src/modules/staff/backend/staff/teams/page.tsx +0 -4
  827. package/src/modules/staff/backend/staff/timesheets/page.tsx +1 -12
  828. package/src/modules/staff/backend/staff/timesheets/projects/page.tsx +0 -4
  829. package/src/modules/sync_excel/lib/adapters/customers.ts +0 -5
  830. package/src/modules/warranty_claims/api/assignees/route.ts +3 -3
  831. package/src/modules/warranty_claims/api/portal/attachments/route.ts +2 -2
  832. package/src/modules/warranty_claims/api/portal/claims/route.ts +9 -12
  833. package/src/modules/warranty_claims/backend/page.tsx +0 -4
  834. package/src/modules/warranty_claims/backend/warranty_claims/registrations/page.tsx +0 -4
  835. package/src/modules/warranty_claims/backend/warranty_claims/troubleshooting-guides/page.tsx +0 -4
  836. package/src/modules/warranty_claims/backend/warranty_claims/vendor-policies/page.tsx +0 -4
  837. package/src/modules/warranty_claims/frontend/[orgSlug]/portal/claims/page.tsx +0 -4
  838. package/src/modules/wms/api/warehouses/route.ts +9 -13
  839. package/src/modules/wms/api/zones/route.ts +0 -16
  840. package/src/modules/wms/commands/configuration.ts +10 -159
  841. package/src/modules/wms/commands/inventory-actions.ts +0 -3
  842. package/src/modules/wms/commands/shared.ts +0 -17
  843. package/src/modules/wms/components/backend/WmsConfigurationPage.tsx +141 -95
  844. package/src/modules/wms/components/backend/WmsInventoryConsolePage.tsx +0 -2
  845. package/src/modules/wms/components/backend/WmsLocationDetailPage.tsx +30 -26
  846. package/src/modules/wms/components/backend/WmsLotDetailPage.tsx +21 -17
  847. package/src/modules/wms/components/backend/WmsLotsListPage.tsx +0 -2
  848. package/src/modules/wms/components/backend/WmsOperationalDashboardPage.tsx +17 -13
  849. package/src/modules/wms/components/backend/WmsSkuDetailPage.tsx +16 -12
  850. package/src/modules/wms/components/backend/inventoryMutationLoaders.ts +20 -36
  851. package/src/modules/wms/i18n/de.json +0 -2
  852. package/src/modules/wms/i18n/en.json +0 -2
  853. package/src/modules/wms/i18n/es.json +0 -2
  854. package/src/modules/wms/i18n/ko.json +0 -2
  855. package/src/modules/wms/i18n/pl.json +0 -2
  856. package/src/modules/workflows/backend/definitions/page.tsx +1 -4
  857. package/src/modules/workflows/backend/events/page.tsx +1 -4
  858. package/src/modules/workflows/backend/instances/page.tsx +1 -4
  859. package/src/modules/workflows/backend/tasks/page.tsx +1 -4
  860. package/src/modules/workflows/lib/activity-executor.ts +0 -9
  861. package/dist/modules/api_keys/di.js +0 -9
  862. package/dist/modules/api_keys/di.js.map +0 -7
  863. package/dist/modules/api_keys/services/principalService.js +0 -31
  864. package/dist/modules/api_keys/services/principalService.js.map +0 -7
  865. package/dist/modules/attachments/lib/attachment-service.js +0 -313
  866. package/dist/modules/attachments/lib/attachment-service.js.map +0 -7
  867. package/dist/modules/auth/api/reset/validate.js +0 -55
  868. package/dist/modules/auth/api/reset/validate.js.map +0 -7
  869. package/dist/modules/auth/commands/acl.js +0 -254
  870. package/dist/modules/auth/commands/acl.js.map +0 -7
  871. package/dist/modules/auth/services/principalService.js +0 -200
  872. package/dist/modules/auth/services/principalService.js.map +0 -7
  873. package/dist/modules/auth/services/roleOrganizationScope.js +0 -41
  874. package/dist/modules/auth/services/roleOrganizationScope.js.map +0 -7
  875. package/dist/modules/communication_channels/lib/outbound-recipient.js +0 -33
  876. package/dist/modules/communication_channels/lib/outbound-recipient.js.map +0 -7
  877. package/dist/modules/communication_channels/lib/resolve-channel-type.js +0 -51
  878. package/dist/modules/communication_channels/lib/resolve-channel-type.js.map +0 -7
  879. package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js +0 -18
  880. package/dist/modules/customers/backend/customers/deals/pipeline/components/toneClasses.js.map +0 -7
  881. package/dist/modules/customers/lib/calendar/participantIdentity.js +0 -9
  882. package/dist/modules/customers/lib/calendar/participantIdentity.js.map +0 -7
  883. package/dist/modules/customers/lib/closureStage.js +0 -45
  884. package/dist/modules/customers/lib/closureStage.js.map +0 -7
  885. package/dist/modules/customers/lib/detailReadAccess.js +0 -12
  886. package/dist/modules/customers/lib/detailReadAccess.js.map +0 -7
  887. package/dist/modules/data_sync/lib/abandoned-run.js +0 -19
  888. package/dist/modules/data_sync/lib/abandoned-run.js.map +0 -7
  889. package/dist/modules/devices/api/deviceSerialization.js +0 -46
  890. package/dist/modules/devices/api/deviceSerialization.js.map +0 -7
  891. package/dist/modules/directory/services/organizationHierarchyService.js +0 -29
  892. package/dist/modules/directory/services/organizationHierarchyService.js.map +0 -7
  893. package/dist/modules/directory/services/organizationScopeService.js +0 -56
  894. package/dist/modules/directory/services/organizationScopeService.js.map +0 -7
  895. package/dist/modules/integrations/backend/integrations/credential-secret-fields.js +0 -55
  896. package/dist/modules/integrations/backend/integrations/credential-secret-fields.js.map +0 -7
  897. package/dist/modules/messages/lib/channel-sender-identity.js +0 -26
  898. package/dist/modules/messages/lib/channel-sender-identity.js.map +0 -7
  899. package/dist/modules/messages/lib/composeSourceChannelType.js +0 -41
  900. package/dist/modules/messages/lib/composeSourceChannelType.js.map +0 -7
  901. package/dist/modules/query_index/lib/search-entity-policy.js +0 -14
  902. package/dist/modules/query_index/lib/search-entity-policy.js.map +0 -7
  903. package/dist/modules/sales/components/documents/lineItemShipmentLock.js +0 -54
  904. package/dist/modules/sales/components/documents/lineItemShipmentLock.js.map +0 -7
  905. package/dist/modules/sales/lib/salesChannelsToggleSeed.js +0 -33
  906. package/dist/modules/sales/lib/salesChannelsToggleSeed.js.map +0 -7
  907. package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js +0 -32
  908. package/dist/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.js.map +0 -7
  909. package/dist/modules/wms/api/warehouseSearch.js +0 -21
  910. package/dist/modules/wms/api/warehouseSearch.js.map +0 -7
  911. package/dist/modules/wms/components/backend/WarehouseEditDialog.js +0 -158
  912. package/dist/modules/wms/components/backend/WarehouseEditDialog.js.map +0 -7
  913. package/dist/modules/wms/components/backend/warehouseFormOptions.js +0 -66
  914. package/dist/modules/wms/components/backend/warehouseFormOptions.js.map +0 -7
  915. package/src/modules/api_keys/di.ts +0 -7
  916. package/src/modules/api_keys/services/principalService.ts +0 -33
  917. package/src/modules/attachments/lib/attachment-service.ts +0 -468
  918. package/src/modules/auth/api/reset/validate.ts +0 -57
  919. package/src/modules/auth/commands/acl.ts +0 -495
  920. package/src/modules/auth/services/principalService.ts +0 -266
  921. package/src/modules/auth/services/roleOrganizationScope.ts +0 -70
  922. package/src/modules/communication_channels/lib/outbound-recipient.ts +0 -71
  923. package/src/modules/communication_channels/lib/resolve-channel-type.ts +0 -99
  924. package/src/modules/customers/backend/customers/deals/pipeline/components/toneClasses.ts +0 -21
  925. package/src/modules/customers/lib/calendar/participantIdentity.ts +0 -17
  926. package/src/modules/customers/lib/closureStage.ts +0 -76
  927. package/src/modules/customers/lib/detailReadAccess.ts +0 -35
  928. package/src/modules/data_sync/lib/abandoned-run.ts +0 -56
  929. package/src/modules/devices/api/deviceSerialization.ts +0 -50
  930. package/src/modules/directory/services/organizationHierarchyService.ts +0 -34
  931. package/src/modules/directory/services/organizationScopeService.ts +0 -85
  932. package/src/modules/integrations/backend/integrations/credential-secret-fields.ts +0 -84
  933. package/src/modules/messages/lib/channel-sender-identity.ts +0 -55
  934. package/src/modules/messages/lib/composeSourceChannelType.ts +0 -95
  935. package/src/modules/query_index/lib/search-entity-policy.ts +0 -46
  936. package/src/modules/sales/components/documents/lineItemShipmentLock.ts +0 -74
  937. package/src/modules/sales/lib/salesChannelsToggleSeed.ts +0 -42
  938. package/src/modules/sales/migrations/Migration20260821120000_sales_notes_addresses_context_idx.ts +0 -87
  939. package/src/modules/wms/api/warehouseSearch.ts +0 -23
  940. package/src/modules/wms/components/backend/WarehouseEditDialog.tsx +0 -216
  941. package/src/modules/wms/components/backend/warehouseFormOptions.ts +0 -72
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/customers/components/calendar/EventPeekPopover.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Sparkles } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@open-mercato/ui/primitives/popover'\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\nimport { formatTimeRange } from './EventBlock'\nimport type { CalendarItem, CalendarPlatform } from './types'\n\nconst PLATFORM_FULL_LABELS: Record<CalendarPlatform, { key: string; fallback: string }> = {\n zoom: { key: 'customers.calendar.platformFull.zoom', fallback: 'Zoom' },\n meet: { key: 'customers.calendar.platformFull.meet', fallback: 'Google Meet' },\n slack: { key: 'customers.calendar.platformFull.slack', fallback: 'Slack' },\n teams: { key: 'customers.calendar.platformFull.teams', fallback: 'Microsoft Teams' },\n}\n\nexport type EventPeekPopoverProps = {\n item: CalendarItem\n open: boolean\n joinUrl: string | null\n aiSummaries: boolean\n canManage?: boolean\n side?: React.ComponentProps<typeof PopoverContent>['side']\n onOpenChange(open: boolean): void\n onJoin(item: CalendarItem): void\n onEdit(item: CalendarItem): void\n children: React.ReactNode\n}\n\nexport function EventPeekPopover({\n item,\n open,\n joinUrl,\n aiSummaries,\n canManage = true,\n side = 'right',\n onOpenChange,\n onJoin,\n onEdit,\n children,\n}: EventPeekPopoverProps) {\n const t = useT()\n const locale = useLocale()\n const title = item.title || t('customers.calendar.grid.untitled', 'Untitled')\n const dateLabel = React.useMemo(\n () => new Intl.DateTimeFormat(locale, { weekday: 'short', month: 'short', day: 'numeric' }).format(item.start),\n [locale, item.start],\n )\n const timeRange = item.allDay\n ? t('customers.calendar.grid.allDay', 'All day')\n : formatTimeRange(locale, item.start, item.end)\n\n const attendeeCount = item.participants.length\n const attendeesLabel =\n attendeeCount === 1\n ? t('customers.calendar.peek.attendee', '1 attendee')\n : t('customers.calendar.peek.attendees', '{count} attendees', { count: attendeeCount })\n const platformLabel =\n item.locationKind === 'platform' && item.platform\n ? t(PLATFORM_FULL_LABELS[item.platform].key, PLATFORM_FULL_LABELS[item.platform].fallback)\n : null\n const metaParts = [platformLabel, attendeeCount > 0 ? attendeesLabel : null].filter(\n (part): part is string => Boolean(part),\n )\n const showSummary = aiSummaries && metaParts.length > 0\n const showJoin = Boolean(joinUrl)\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent align=\"start\" side={side} sideOffset={8} className=\"w-56 p-3\">\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-sm font-semibold leading-5 text-foreground\">{title}</p>\n <p className=\"text-xs leading-4 text-muted-foreground\">{`${dateLabel} \u00B7 ${timeRange}`}</p>\n {showSummary ? (\n <p className=\"flex items-center gap-1 text-xs leading-4 text-muted-foreground\">\n <Sparkles aria-hidden className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{metaParts.join(' \u00B7 ')}</span>\n </p>\n ) : null}\n <div className=\"flex items-center gap-2 pt-1\">\n {showJoin ? (\n <Button type=\"button\" size=\"sm\" onClick={() => onJoin(item)}>\n {t('customers.calendar.peek.join', 'Join')}\n </Button>\n ) : null}\n {canManage ? (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => {\n onOpenChange(false)\n onEdit(item)\n }}\n >\n {t('customers.calendar.peek.edit', 'Edit')}\n </Button>\n ) : (\n <SimpleTooltip\n content={t(\n 'customers.calendar.peek.editForbidden',\n \"You don't have permission to edit events\",\n )}\n >\n <span className=\"inline-flex\">\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" disabled className=\"pointer-events-none\">\n {t('customers.calendar.peek.edit', 'Edit')}\n </Button>\n </span>\n </SimpleTooltip>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { Sparkles } from 'lucide-react'\nimport { useLocale, useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Popover, PopoverContent, PopoverTrigger } from '@open-mercato/ui/primitives/popover'\nimport { SimpleTooltip } from '@open-mercato/ui/primitives/tooltip'\nimport { formatTimeRange } from './EventBlock'\nimport type { CalendarItem, CalendarPlatform } from './types'\n\nconst PLATFORM_FULL_LABELS: Record<CalendarPlatform, { key: string; fallback: string }> = {\n zoom: { key: 'customers.calendar.platformFull.zoom', fallback: 'Zoom' },\n meet: { key: 'customers.calendar.platformFull.meet', fallback: 'Google Meet' },\n slack: { key: 'customers.calendar.platformFull.slack', fallback: 'Slack' },\n teams: { key: 'customers.calendar.platformFull.teams', fallback: 'Microsoft Teams' },\n}\n\nexport type EventPeekPopoverProps = {\n item: CalendarItem\n open: boolean\n joinUrl: string | null\n aiSummaries: boolean\n canManage?: boolean\n onOpenChange(open: boolean): void\n onJoin(item: CalendarItem): void\n onEdit(item: CalendarItem): void\n children: React.ReactNode\n}\n\nexport function EventPeekPopover({\n item,\n open,\n joinUrl,\n aiSummaries,\n canManage = true,\n onOpenChange,\n onJoin,\n onEdit,\n children,\n}: EventPeekPopoverProps) {\n const t = useT()\n const locale = useLocale()\n const title = item.title || t('customers.calendar.grid.untitled', 'Untitled')\n const dateLabel = React.useMemo(\n () => new Intl.DateTimeFormat(locale, { weekday: 'short', month: 'short', day: 'numeric' }).format(item.start),\n [locale, item.start],\n )\n const timeRange = item.allDay\n ? t('customers.calendar.grid.allDay', 'All day')\n : formatTimeRange(locale, item.start, item.end)\n\n const attendeeCount = item.participants.length\n const attendeesLabel =\n attendeeCount === 1\n ? t('customers.calendar.peek.attendee', '1 attendee')\n : t('customers.calendar.peek.attendees', '{count} attendees', { count: attendeeCount })\n const platformLabel =\n item.locationKind === 'platform' && item.platform\n ? t(PLATFORM_FULL_LABELS[item.platform].key, PLATFORM_FULL_LABELS[item.platform].fallback)\n : null\n const metaParts = [platformLabel, attendeeCount > 0 ? attendeesLabel : null].filter(\n (part): part is string => Boolean(part),\n )\n const showSummary = aiSummaries && metaParts.length > 0\n const showJoin = aiSummaries && Boolean(joinUrl)\n\n return (\n <Popover open={open} onOpenChange={onOpenChange}>\n <PopoverTrigger asChild>{children}</PopoverTrigger>\n <PopoverContent align=\"start\" side=\"right\" sideOffset={8} className=\"w-56 p-3\">\n <div className=\"flex flex-col gap-2\">\n <p className=\"text-sm font-semibold leading-5 text-foreground\">{title}</p>\n <p className=\"text-xs leading-4 text-muted-foreground\">{`${dateLabel} \u00B7 ${timeRange}`}</p>\n {showSummary ? (\n <p className=\"flex items-center gap-1 text-xs leading-4 text-muted-foreground\">\n <Sparkles aria-hidden className=\"size-3.5 shrink-0\" />\n <span className=\"truncate\">{metaParts.join(' \u00B7 ')}</span>\n </p>\n ) : null}\n <div className=\"flex items-center gap-2 pt-1\">\n {showJoin ? (\n <Button type=\"button\" size=\"sm\" onClick={() => onJoin(item)}>\n {t('customers.calendar.peek.join', 'Join')}\n </Button>\n ) : null}\n {canManage ? (\n <Button\n type=\"button\"\n size=\"sm\"\n variant=\"secondary\"\n onClick={() => {\n onOpenChange(false)\n onEdit(item)\n }}\n >\n {t('customers.calendar.peek.edit', 'Edit')}\n </Button>\n ) : (\n <SimpleTooltip\n content={t(\n 'customers.calendar.peek.editForbidden',\n \"You don't have permission to edit events\",\n )}\n >\n <span className=\"inline-flex\">\n <Button type=\"button\" size=\"sm\" variant=\"secondary\" disabled className=\"pointer-events-none\">\n {t('customers.calendar.peek.edit', 'Edit')}\n </Button>\n </span>\n </SimpleTooltip>\n )}\n </div>\n </div>\n </PopoverContent>\n </Popover>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,6 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import * as React from "react";
4
- import { z } from "zod";
5
4
  import { cn } from "@open-mercato/shared/lib/utils";
6
5
  import { useT } from "@open-mercato/shared/lib/i18n/context";
7
6
  import { Avatar } from "@open-mercato/ui/primitives/avatar";
@@ -10,11 +9,6 @@ import { Input } from "@open-mercato/ui/primitives/input";
10
9
  import { composeAccessibleName } from "../../../lib/calendar/labels.js";
11
10
  import { searchPeopleOptions } from "./lookups.js";
12
11
  import { CONTROL_BORDER, DROPDOWN_PANEL_CLASS, PersonChip, UppercaseBadge, useDropdownDismiss } from "./inputs.js";
13
- const guestEmailSchema = z.string().email().max(320);
14
- function normalizeEmail(email) {
15
- const normalized = email?.trim().toLowerCase();
16
- return normalized ? normalized : null;
17
- }
18
12
  function PeopleField({
19
13
  mode,
20
14
  placeholder,
@@ -55,14 +49,7 @@ function PeopleField({
55
49
  }, [open, query, includeCustomers, includeStaff]);
56
50
  const selectedIds = new Set(value.map((participant) => participant.userId));
57
51
  const visibleOptions = options.filter((option) => !selectedIds.has(option.userId));
58
- const typedEmail = normalizeEmail(query);
59
- const selectedEmails = new Set(
60
- value.map((participant) => normalizeEmail(participant.email)).filter((email) => email !== null)
61
- );
62
- const guestEmail = mode === "multi" && typedEmail !== null && guestEmailSchema.safeParse(typedEmail).success && !selectedEmails.has(typedEmail) && !options.some((option) => normalizeEmail(option.email) === typedEmail) ? typedEmail : null;
63
- const guestLabel = guestEmail ? t("customers.calendar.editor.addGuest", "Invite {email} as a guest", { email: guestEmail }) : "";
64
52
  const customerBadge = /* @__PURE__ */ jsx(UppercaseBadge, { className: "bg-status-info-bg text-status-info-text", children: t("customers.calendar.editor.customerBadge", "Customer") });
65
- const guestBadge = /* @__PURE__ */ jsx(UppercaseBadge, { className: "bg-muted text-muted-foreground", children: t("customers.calendar.editor.guestBadge", "Guest") });
66
53
  return /* @__PURE__ */ jsxs(
67
54
  "div",
68
55
  {
@@ -81,15 +68,15 @@ function PeopleField({
81
68
  CONTROL_BORDER
82
69
  ),
83
70
  children: [
84
- value.map((participant, index) => /* @__PURE__ */ jsx(
71
+ value.map((participant) => /* @__PURE__ */ jsx(
85
72
  PersonChip,
86
73
  {
87
74
  name: participant.name,
88
- badge: participant.isCustomer ? customerBadge : participant.userId ? void 0 : guestBadge,
89
- onRemove: () => onChange(value.filter((_, entryIndex) => entryIndex !== index)),
75
+ badge: participant.isCustomer ? customerBadge : void 0,
76
+ onRemove: () => onChange(value.filter((entry) => entry.userId !== participant.userId)),
90
77
  removeLabel: t("customers.calendar.editor.removePerson", "Remove {name}", { name: participant.name })
91
78
  },
92
- participant.userId ?? participant.email ?? index
79
+ participant.userId
93
80
  )),
94
81
  /* @__PURE__ */ jsx(
95
82
  Input,
@@ -111,29 +98,7 @@ function PeopleField({
111
98
  ),
112
99
  open ? /* @__PURE__ */ jsxs("div", { role: "listbox", "aria-label": ariaLabel, className: DROPDOWN_PANEL_CLASS, children: [
113
100
  loading ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: t("customers.calendar.editor.searching", "Searching\u2026") }) : null,
114
- !loading && visibleOptions.length === 0 && !guestEmail ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: t("customers.calendar.editor.noResults", "No results") }) : null,
115
- !loading && guestEmail ? /* @__PURE__ */ jsxs(
116
- Button,
117
- {
118
- type: "button",
119
- variant: "ghost",
120
- role: "option",
121
- "aria-selected": false,
122
- "aria-label": guestLabel,
123
- title: guestLabel,
124
- onClick: () => {
125
- const participant = { name: guestEmail, email: guestEmail, isCustomer: false };
126
- onChange([...value, participant]);
127
- setQuery("");
128
- },
129
- className: "h-auto w-full justify-start gap-2 whitespace-normal px-2 py-1.5 text-left text-sm font-normal text-foreground",
130
- children: [
131
- /* @__PURE__ */ jsx(Avatar, { size: "xs", label: guestEmail }),
132
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1 truncate", children: guestLabel }),
133
- guestBadge
134
- ]
135
- }
136
- ) : null,
101
+ !loading && visibleOptions.length === 0 ? /* @__PURE__ */ jsx("p", { className: "px-2 py-3 text-center text-xs text-muted-foreground", children: t("customers.calendar.editor.noResults", "No results") }) : null,
137
102
  !loading ? visibleOptions.map((option) => /* @__PURE__ */ jsxs(
138
103
  Button,
139
104
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/components/calendar/editor/PeopleField.tsx"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { z } from 'zod'\nimport { cn } from '@open-mercato/shared/lib/utils'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar } from '@open-mercato/ui/primitives/avatar'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport type { EditorParticipant } from '../../../lib/calendar/editorPayload'\nimport { composeAccessibleName } from '../../../lib/calendar/labels'\nimport { searchPeopleOptions, type PersonOption } from './lookups'\nimport { CONTROL_BORDER, DROPDOWN_PANEL_CLASS, PersonChip, UppercaseBadge, useDropdownDismiss } from './inputs'\n\n// Mirrors the server-side guest rule in `interactionParticipantSchema`: a\n// participant with no user record is addressable only by a routable email.\nconst guestEmailSchema = z.string().email().max(320)\n\nfunction normalizeEmail(email: string | null | undefined): string | null {\n const normalized = email?.trim().toLowerCase()\n return normalized ? normalized : null\n}\n\nexport function PeopleField({\n mode,\n placeholder,\n ariaLabel,\n value,\n onChange,\n includeCustomers,\n includeStaff = true,\n}: {\n mode: 'multi' | 'single'\n placeholder: string\n ariaLabel: string\n value: EditorParticipant[]\n onChange(next: EditorParticipant[]): void\n includeCustomers: boolean\n /** Pass false when the staff module is not loaded \u2014 customer-only options. */\n includeStaff?: boolean\n}) {\n const t = useT()\n const [query, setQuery] = React.useState('')\n const [open, setOpen] = React.useState(false)\n const [options, setOptions] = React.useState<PersonOption[]>([])\n const [loading, setLoading] = React.useState(false)\n const close = React.useCallback(() => setOpen(false), [])\n const rootRef = useDropdownDismiss(open, close)\n\n React.useEffect(() => {\n if (!open) return\n const controller = new AbortController()\n let cancelled = false\n const timer = window.setTimeout(async () => {\n setLoading(true)\n try {\n const results = await searchPeopleOptions(query.trim(), { includeCustomers, includeStaff, signal: controller.signal })\n if (cancelled) return\n setOptions(results)\n } catch {\n if (!cancelled) setOptions([])\n } finally {\n if (!cancelled) setLoading(false)\n }\n }, 250)\n return () => {\n cancelled = true\n controller.abort()\n window.clearTimeout(timer)\n }\n }, [open, query, includeCustomers, includeStaff])\n\n const selectedIds = new Set(value.map((participant) => participant.userId))\n const visibleOptions = options.filter((option) => !selectedIds.has(option.userId))\n\n // An external guest has no record to search for, so a typed address that\n // matches nothing is the only way to invite one (#5115). Multi mode only \u2014\n // the single-mode field is the task assignee, which becomes `ownerUserId` and\n // must resolve to a real staff user.\n const typedEmail = normalizeEmail(query)\n const selectedEmails = new Set(\n value.map((participant) => normalizeEmail(participant.email)).filter((email): email is string => email !== null),\n )\n const guestEmail =\n mode === 'multi' &&\n typedEmail !== null &&\n guestEmailSchema.safeParse(typedEmail).success &&\n !selectedEmails.has(typedEmail) &&\n !options.some((option) => normalizeEmail(option.email) === typedEmail)\n ? typedEmail\n : null\n const guestLabel = guestEmail\n ? t('customers.calendar.editor.addGuest', 'Invite {email} as a guest', { email: guestEmail })\n : ''\n\n const customerBadge = (\n <UppercaseBadge className=\"bg-status-info-bg text-status-info-text\">\n {t('customers.calendar.editor.customerBadge', 'Customer')}\n </UppercaseBadge>\n )\n\n const guestBadge = (\n <UppercaseBadge className=\"bg-muted text-muted-foreground\">\n {t('customers.calendar.editor.guestBadge', 'Guest')}\n </UppercaseBadge>\n )\n\n return (\n <div\n ref={rootRef}\n className=\"relative w-full\"\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setOpen(false)\n }}\n >\n <div\n className={cn(\n 'flex w-full flex-wrap content-center items-center gap-2 rounded-md bg-background px-2.5 py-2',\n 'min-h-14',\n CONTROL_BORDER,\n )}\n >\n {value.map((participant, index) => (\n <PersonChip\n key={participant.userId ?? participant.email ?? index}\n name={participant.name}\n badge={participant.isCustomer ? customerBadge : participant.userId ? undefined : guestBadge}\n onRemove={() => onChange(value.filter((_, entryIndex) => entryIndex !== index))}\n removeLabel={t('customers.calendar.editor.removePerson', 'Remove {name}', { name: participant.name })}\n />\n ))}\n <Input\n type=\"text\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onFocus={() => setOpen(true)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n role=\"combobox\"\n aria-expanded={open}\n className=\"min-w-36 flex-1 border-0 bg-transparent px-0 shadow-none hover:bg-transparent focus-within:border-transparent focus-within:shadow-none\"\n inputClassName=\"text-sm text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n {open ? (\n <div role=\"listbox\" aria-label={ariaLabel} className={DROPDOWN_PANEL_CLASS}>\n {loading ? (\n <p className=\"px-2 py-3 text-center text-xs text-muted-foreground\">\n {t('customers.calendar.editor.searching', 'Searching\u2026')}\n </p>\n ) : null}\n {!loading && visibleOptions.length === 0 && !guestEmail ? (\n <p className=\"px-2 py-3 text-center text-xs text-muted-foreground\">\n {t('customers.calendar.editor.noResults', 'No results')}\n </p>\n ) : null}\n {!loading && guestEmail ? (\n <Button\n type=\"button\"\n variant=\"ghost\"\n role=\"option\"\n aria-selected={false}\n aria-label={guestLabel}\n title={guestLabel}\n onClick={() => {\n const participant: EditorParticipant = { name: guestEmail, email: guestEmail, isCustomer: false }\n onChange([...value, participant])\n setQuery('')\n }}\n className=\"h-auto w-full justify-start gap-2 whitespace-normal px-2 py-1.5 text-left text-sm font-normal text-foreground\"\n >\n <Avatar size=\"xs\" label={guestEmail} />\n <span className=\"min-w-0 flex-1 truncate\">{guestLabel}</span>\n {guestBadge}\n </Button>\n ) : null}\n {!loading\n ? visibleOptions.map((option) => (\n <Button\n key={`${option.isCustomer ? 'customer' : 'staff'}:${option.userId}`}\n type=\"button\"\n variant=\"ghost\"\n role=\"option\"\n aria-selected={false}\n aria-label={composeAccessibleName([\n option.name,\n option.email,\n option.isCustomer ? t('customers.calendar.editor.customerBadge', 'Customer') : null,\n ])}\n title={composeAccessibleName([option.name, option.email])}\n onClick={() => {\n const participant: EditorParticipant = {\n userId: option.userId,\n name: option.name,\n email: option.email ?? undefined,\n isCustomer: option.isCustomer,\n }\n onChange(mode === 'single' ? [participant] : [...value, participant])\n setQuery('')\n if (mode === 'single') setOpen(false)\n }}\n className=\"h-auto w-full justify-start gap-2 whitespace-normal px-2 py-1.5 text-left text-sm font-normal text-foreground\"\n >\n <Avatar size=\"xs\" label={option.name} />\n <span className=\"min-w-0 flex-1 truncate\">\n {option.name}\n {option.email ? <span className=\"ml-1.5 text-xs text-muted-foreground\">{option.email}</span> : null}\n </span>\n {option.isCustomer ? customerBadge : null}\n </Button>\n ))\n : null}\n </div>\n ) : null}\n </div>\n )\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { cn } from '@open-mercato/shared/lib/utils'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { Avatar } from '@open-mercato/ui/primitives/avatar'\nimport { Button } from '@open-mercato/ui/primitives/button'\nimport { Input } from '@open-mercato/ui/primitives/input'\nimport type { EditorParticipant } from '../../../lib/calendar/editorPayload'\nimport { composeAccessibleName } from '../../../lib/calendar/labels'\nimport { searchPeopleOptions, type PersonOption } from './lookups'\nimport { CONTROL_BORDER, DROPDOWN_PANEL_CLASS, PersonChip, UppercaseBadge, useDropdownDismiss } from './inputs'\n\nexport function PeopleField({\n mode,\n placeholder,\n ariaLabel,\n value,\n onChange,\n includeCustomers,\n includeStaff = true,\n}: {\n mode: 'multi' | 'single'\n placeholder: string\n ariaLabel: string\n value: EditorParticipant[]\n onChange(next: EditorParticipant[]): void\n includeCustomers: boolean\n /** Pass false when the staff module is not loaded \u2014 customer-only options. */\n includeStaff?: boolean\n}) {\n const t = useT()\n const [query, setQuery] = React.useState('')\n const [open, setOpen] = React.useState(false)\n const [options, setOptions] = React.useState<PersonOption[]>([])\n const [loading, setLoading] = React.useState(false)\n const close = React.useCallback(() => setOpen(false), [])\n const rootRef = useDropdownDismiss(open, close)\n\n React.useEffect(() => {\n if (!open) return\n const controller = new AbortController()\n let cancelled = false\n const timer = window.setTimeout(async () => {\n setLoading(true)\n try {\n const results = await searchPeopleOptions(query.trim(), { includeCustomers, includeStaff, signal: controller.signal })\n if (cancelled) return\n setOptions(results)\n } catch {\n if (!cancelled) setOptions([])\n } finally {\n if (!cancelled) setLoading(false)\n }\n }, 250)\n return () => {\n cancelled = true\n controller.abort()\n window.clearTimeout(timer)\n }\n }, [open, query, includeCustomers, includeStaff])\n\n const selectedIds = new Set(value.map((participant) => participant.userId))\n const visibleOptions = options.filter((option) => !selectedIds.has(option.userId))\n\n const customerBadge = (\n <UppercaseBadge className=\"bg-status-info-bg text-status-info-text\">\n {t('customers.calendar.editor.customerBadge', 'Customer')}\n </UppercaseBadge>\n )\n\n return (\n <div\n ref={rootRef}\n className=\"relative w-full\"\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget as Node | null)) setOpen(false)\n }}\n >\n <div\n className={cn(\n 'flex w-full flex-wrap content-center items-center gap-2 rounded-md bg-background px-2.5 py-2',\n 'min-h-14',\n CONTROL_BORDER,\n )}\n >\n {value.map((participant) => (\n <PersonChip\n key={participant.userId}\n name={participant.name}\n badge={participant.isCustomer ? customerBadge : undefined}\n onRemove={() => onChange(value.filter((entry) => entry.userId !== participant.userId))}\n removeLabel={t('customers.calendar.editor.removePerson', 'Remove {name}', { name: participant.name })}\n />\n ))}\n <Input\n type=\"text\"\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n onFocus={() => setOpen(true)}\n placeholder={placeholder}\n aria-label={ariaLabel}\n role=\"combobox\"\n aria-expanded={open}\n className=\"min-w-36 flex-1 border-0 bg-transparent px-0 shadow-none hover:bg-transparent focus-within:border-transparent focus-within:shadow-none\"\n inputClassName=\"text-sm text-foreground placeholder:text-muted-foreground\"\n />\n </div>\n {open ? (\n <div role=\"listbox\" aria-label={ariaLabel} className={DROPDOWN_PANEL_CLASS}>\n {loading ? (\n <p className=\"px-2 py-3 text-center text-xs text-muted-foreground\">\n {t('customers.calendar.editor.searching', 'Searching\u2026')}\n </p>\n ) : null}\n {!loading && visibleOptions.length === 0 ? (\n <p className=\"px-2 py-3 text-center text-xs text-muted-foreground\">\n {t('customers.calendar.editor.noResults', 'No results')}\n </p>\n ) : null}\n {!loading\n ? visibleOptions.map((option) => (\n <Button\n key={`${option.isCustomer ? 'customer' : 'staff'}:${option.userId}`}\n type=\"button\"\n variant=\"ghost\"\n role=\"option\"\n aria-selected={false}\n aria-label={composeAccessibleName([\n option.name,\n option.email,\n option.isCustomer ? t('customers.calendar.editor.customerBadge', 'Customer') : null,\n ])}\n title={composeAccessibleName([option.name, option.email])}\n onClick={() => {\n const participant: EditorParticipant = {\n userId: option.userId,\n name: option.name,\n email: option.email ?? undefined,\n isCustomer: option.isCustomer,\n }\n onChange(mode === 'single' ? [participant] : [...value, participant])\n setQuery('')\n if (mode === 'single') setOpen(false)\n }}\n className=\"h-auto w-full justify-start gap-2 whitespace-normal px-2 py-1.5 text-left text-sm font-normal text-foreground\"\n >\n <Avatar size=\"xs\" label={option.name} />\n <span className=\"min-w-0 flex-1 truncate\">\n {option.name}\n {option.email ? <span className=\"ml-1.5 text-xs text-muted-foreground\">{option.email}</span> : null}\n </span>\n {option.isCustomer ? customerBadge : null}\n </Button>\n ))\n : null}\n </div>\n ) : null}\n </div>\n )\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -6,7 +6,6 @@ import { useT } from "@open-mercato/shared/lib/i18n/context";
6
6
  import { computeDurationMinutes } from "../../../lib/calendar/editorPayload.js";
7
7
  import { findEditorConflictItems } from "../../../lib/calendar/conflicts.js";
8
8
  import { mapInteractionToCalendarItem } from "../../../lib/calendar/mapItem.js";
9
- import { participantActorKey } from "../../../lib/calendar/participantIdentity.js";
10
9
  import { expandOccurrences } from "../../../lib/calendar/recurrence.js";
11
10
  import { getFetchWindow } from "../../../lib/calendar/range.js";
12
11
  import { fetchCalendarCandidates } from "../useCalendarItems.js";
@@ -48,7 +47,7 @@ function formatClock(date) {
48
47
  function useConflictProbe(open, form, config, excludeId, draftOwnerUserId, scope, currentUserId) {
49
48
  const t = useT();
50
49
  const [conflict, setConflict] = React.useState(null);
51
- const participantsKey = form.participants.map((participant) => participantActorKey(participant) ?? "").join(",");
50
+ const participantsKey = form.participants.map((participant) => participant.userId).join(",");
52
51
  React.useEffect(() => {
53
52
  if (!open || !form.date) {
54
53
  setConflict(null);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../../src/modules/customers/components/calendar/editor/hooks.ts"],
4
- "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { endOfDay } from 'date-fns/endOfDay'\nimport { startOfDay } from 'date-fns/startOfDay'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { computeDurationMinutes, type EditorFormState, type EditorKindConfig } from '../../../lib/calendar/editorPayload'\nimport { findEditorConflictItems } from '../../../lib/calendar/conflicts'\nimport type { ConflictScope } from '../../../lib/calendar/preferences'\nimport { mapInteractionToCalendarItem } from '../../../lib/calendar/mapItem'\nimport { participantActorKey } from '../../../lib/calendar/participantIdentity'\nimport { expandOccurrences } from '../../../lib/calendar/recurrence'\nimport { getFetchWindow } from '../../../lib/calendar/range'\nimport type { CalendarItem } from '../types'\nimport { fetchCalendarCandidates } from '../useCalendarItems'\nimport { fetchDealById, fetchRelatedEntityById, findStaffMemberName } from './lookups'\n\n// Edit-mode prefill stores ids only (parseItemToFormState is pure); resolve the\n// human labels for the related entity, the deal chip and the task assignee.\nexport function useEditorLabelResolution(\n open: boolean,\n form: EditorFormState,\n update: (patch: Partial<EditorFormState>) => void,\n): void {\n React.useEffect(() => {\n if (!open) return\n const controller = new AbortController()\n let cancelled = false\n async function resolveLabels() {\n if (form.relatedTo && form.relatedTo.kind === 'unknown') {\n const resolved = await fetchRelatedEntityById(form.relatedTo.id, controller.signal)\n if (!cancelled && resolved) update({ relatedTo: { id: resolved.id, kind: resolved.kind, label: resolved.label } })\n }\n if (form.dealId && !form.dealLabel) {\n const deal = await fetchDealById(form.dealId, controller.signal)\n if (!cancelled && deal) update({ dealLabel: deal.label })\n }\n if (form.assigneeUserId && !form.assigneeName) {\n const name = await findStaffMemberName(form.assigneeUserId, controller.signal)\n if (!cancelled && name) update({ assigneeName: name })\n }\n }\n resolveLabels().catch(() => {\n if (cancelled || controller.signal.aborted || !form.relatedTo || form.relatedTo.kind !== 'unknown' || form.relatedTo.label) {\n return\n }\n update({ relatedTo: { ...form.relatedTo, label: form.relatedTo.id } })\n })\n return () => {\n cancelled = true\n controller.abort()\n }\n }, [open, form.relatedTo, form.dealId, form.dealLabel, form.assigneeUserId, form.assigneeName, update])\n}\n\nfunction formatClock(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\n// Debounced save-time conflict probe. Detection uses the SAME `findConflicts`\n// logic the grid uses (overlap + shared owner/participant) against a freshly\n// fetched \u00B11-day window, so the editor warning is always consistent with the\n// conflict badges/rings the user sees on the calendar. The warning is\n// informational and never blocks saving.\nexport function useConflictProbe(\n open: boolean,\n form: EditorFormState,\n config: EditorKindConfig,\n excludeId: string | null,\n draftOwnerUserId: string | null,\n scope: ConflictScope,\n currentUserId: string | null,\n): string | null {\n const t = useT()\n const [conflict, setConflict] = React.useState<string | null>(null)\n // Keys on the canonical actor key, not the raw userId \u2014 an external guest has\n // no userId, so a userId-only key never changes when guests are added or\n // removed and the probe would keep reporting the previous attendee set.\n const participantsKey = form.participants\n .map((participant) => participantActorKey(participant) ?? '')\n .join(',')\n React.useEffect(() => {\n if (!open || !form.date) {\n setConflict(null)\n return\n }\n // Resolve the draft's [start, end] span exactly as the grid will after save:\n // all-day spans startOfDay..endOfDay (matching mapInteractionToCalendarItem),\n // timed events use the start + computed duration (multi-day endDate included).\n const isAllDay = config.hasAllDay && form.allDay\n let start: Date\n let end: Date\n if (isAllDay) {\n const dayDate = new Date(`${form.date}T00:00:00`)\n if (Number.isNaN(dayDate.getTime())) {\n setConflict(null)\n return\n }\n start = startOfDay(dayDate)\n end = endOfDay(dayDate)\n } else {\n if (!form.startTime) {\n setConflict(null)\n return\n }\n start = new Date(`${form.date}T${form.startTime}:00`)\n if (Number.isNaN(start.getTime())) {\n setConflict(null)\n return\n }\n const durationMinutes = config.hasEnd ? computeDurationMinutes(form) ?? 30 : 30\n end = new Date(start.getTime() + durationMinutes * 60_000)\n }\n // The same padded window + recurrence expansion the grid uses, so the probe\n // sees the exact candidate set behind the grid's conflict badges/rings. The\n // window pads \u00B11 day around the FULL draft span so multi-day drafts still\n // catch neighbours near their end, not just their start day.\n const dayStart = startOfDay(start)\n dayStart.setDate(dayStart.getDate() - 1)\n const dayEnd = endOfDay(end)\n dayEnd.setDate(dayEnd.getDate() + 1)\n const fetchWindow = getFetchWindow({ from: dayStart, to: dayEnd })\n const controller = new AbortController()\n let active = true\n const timer = setTimeout(async () => {\n try {\n const { payloads } = await fetchCalendarCandidates(fetchWindow, controller.signal)\n if (!active) return\n const others: CalendarItem[] = []\n for (const payload of payloads) {\n const item = mapInteractionToCalendarItem(payload, {})\n if (!item) continue\n others.push(...expandOccurrences(item, fetchWindow))\n }\n const conflictItems = findEditorConflictItems(\n {\n start,\n end,\n ownerUserId: draftOwnerUserId,\n participants: form.participants.map((participant) => ({ userId: participant.userId, name: participant.name })),\n status: form.status,\n },\n others,\n excludeId,\n { scope, currentUserId },\n )\n if (!active) return\n if (conflictItems.length === 0) {\n setConflict(null)\n return\n }\n const summary = conflictItems\n .map((item) => `${formatClock(item.start)}\u2013${formatClock(item.end)}: ${item.title || t('customers.calendar.grid.untitled', 'Untitled')}`)\n .join(', ')\n setConflict(summary ? t('customers.calendar.editor.conflictWarning', 'Overlaps with: {items}', { items: summary }) : null)\n } catch {\n if (active) setConflict(null)\n }\n }, 500)\n return () => {\n active = false\n clearTimeout(timer)\n controller.abort()\n }\n // Re-probe when schedule-relevant inputs change (time window, all-day, attendees, owner, status, scope).\n }, [open, form.date, form.startTime, form.endDate, form.endTime, form.allDay, form.status, participantsKey, config.hasAllDay, config.hasEnd, excludeId, draftOwnerUserId, scope, currentUserId, t]) // eslint-disable-line react-hooks/exhaustive-deps\n return conflict\n}\n"],
5
- "mappings": ";AAEA,YAAY,WAAW;AACvB,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,YAAY;AACrB,SAAS,8BAA2E;AACpF,SAAS,+BAA+B;AAExC,SAAS,oCAAoC;AAC7C,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAClC,SAAS,sBAAsB;AAE/B,SAAS,+BAA+B;AACxC,SAAS,eAAe,wBAAwB,2BAA2B;AAIpE,SAAS,yBACd,MACA,MACA,QACM;AACN,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,KAAM;AACX,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI,YAAY;AAChB,mBAAe,gBAAgB;AAC7B,UAAI,KAAK,aAAa,KAAK,UAAU,SAAS,WAAW;AACvD,cAAM,WAAW,MAAM,uBAAuB,KAAK,UAAU,IAAI,WAAW,MAAM;AAClF,YAAI,CAAC,aAAa,SAAU,QAAO,EAAE,WAAW,EAAE,IAAI,SAAS,IAAI,MAAM,SAAS,MAAM,OAAO,SAAS,MAAM,EAAE,CAAC;AAAA,MACnH;AACA,UAAI,KAAK,UAAU,CAAC,KAAK,WAAW;AAClC,cAAM,OAAO,MAAM,cAAc,KAAK,QAAQ,WAAW,MAAM;AAC/D,YAAI,CAAC,aAAa,KAAM,QAAO,EAAE,WAAW,KAAK,MAAM,CAAC;AAAA,MAC1D;AACA,UAAI,KAAK,kBAAkB,CAAC,KAAK,cAAc;AAC7C,cAAM,OAAO,MAAM,oBAAoB,KAAK,gBAAgB,WAAW,MAAM;AAC7E,YAAI,CAAC,aAAa,KAAM,QAAO,EAAE,cAAc,KAAK,CAAC;AAAA,MACvD;AAAA,IACF;AACA,kBAAc,EAAE,MAAM,MAAM;AAC1B,UAAI,aAAa,WAAW,OAAO,WAAW,CAAC,KAAK,aAAa,KAAK,UAAU,SAAS,aAAa,KAAK,UAAU,OAAO;AAC1H;AAAA,MACF;AACA,aAAO,EAAE,WAAW,EAAE,GAAG,KAAK,WAAW,OAAO,KAAK,UAAU,GAAG,EAAE,CAAC;AAAA,IACvE,CAAC;AACD,WAAO,MAAM;AACX,kBAAY;AACZ,iBAAW,MAAM;AAAA,IACnB;AAAA,EACF,GAAG,CAAC,MAAM,KAAK,WAAW,KAAK,QAAQ,KAAK,WAAW,KAAK,gBAAgB,KAAK,cAAc,MAAM,CAAC;AACxG;AAEA,SAAS,YAAY,MAAoB;AACvC,SAAO,KAAK,mBAAmB,CAAC,GAAG,EAAE,MAAM,WAAW,QAAQ,UAAU,CAAC;AAC3E;AAOO,SAAS,iBACd,MACA,MACA,QACA,WACA,kBACA,OACA,eACe;AACf,QAAM,IAAI,KAAK;AACf,QAAM,CAAC,UAAU,WAAW,IAAI,MAAM,SAAwB,IAAI;AAIlE,QAAM,kBAAkB,KAAK,aAC1B,IAAI,CAAC,gBAAgB,oBAAoB,WAAW,KAAK,EAAE,EAC3D,KAAK,GAAG;AACX,QAAM,UAAU,MAAM;AACpB,QAAI,CAAC,QAAQ,CAAC,KAAK,MAAM;AACvB,kBAAY,IAAI;AAChB;AAAA,IACF;AAIA,UAAM,WAAW,OAAO,aAAa,KAAK;AAC1C,QAAI;AACJ,QAAI;AACJ,QAAI,UAAU;AACZ,YAAM,UAAU,oBAAI,KAAK,GAAG,KAAK,IAAI,WAAW;AAChD,UAAI,OAAO,MAAM,QAAQ,QAAQ,CAAC,GAAG;AACnC,oBAAY,IAAI;AAChB;AAAA,MACF;AACA,cAAQ,WAAW,OAAO;AAC1B,YAAM,SAAS,OAAO;AAAA,IACxB,OAAO;AACL,UAAI,CAAC,KAAK,WAAW;AACnB,oBAAY,IAAI;AAChB;AAAA,MACF;AACA,cAAQ,oBAAI,KAAK,GAAG,KAAK,IAAI,IAAI,KAAK,SAAS,KAAK;AACpD,UAAI,OAAO,MAAM,MAAM,QAAQ,CAAC,GAAG;AACjC,oBAAY,IAAI;AAChB;AAAA,MACF;AACA,YAAM,kBAAkB,OAAO,SAAS,uBAAuB,IAAI,KAAK,KAAK;AAC7E,YAAM,IAAI,KAAK,MAAM,QAAQ,IAAI,kBAAkB,GAAM;AAAA,IAC3D;AAKA,UAAM,WAAW,WAAW,KAAK;AACjC,aAAS,QAAQ,SAAS,QAAQ,IAAI,CAAC;AACvC,UAAM,SAAS,SAAS,GAAG;AAC3B,WAAO,QAAQ,OAAO,QAAQ,IAAI,CAAC;AACnC,UAAM,cAAc,eAAe,EAAE,MAAM,UAAU,IAAI,OAAO,CAAC;AACjE,UAAM,aAAa,IAAI,gBAAgB;AACvC,QAAI,SAAS;AACb,UAAM,QAAQ,WAAW,YAAY;AACnC,UAAI;AACF,cAAM,EAAE,SAAS,IAAI,MAAM,wBAAwB,aAAa,WAAW,MAAM;AACjF,YAAI,CAAC,OAAQ;AACb,cAAM,SAAyB,CAAC;AAChC,mBAAW,WAAW,UAAU;AAC9B,gBAAM,OAAO,6BAA6B,SAAS,CAAC,CAAC;AACrD,cAAI,CAAC,KAAM;AACX,iBAAO,KAAK,GAAG,kBAAkB,MAAM,WAAW,CAAC;AAAA,QACrD;AACA,cAAM,gBAAgB;AAAA,UACpB;AAAA,YACE;AAAA,YACA;AAAA,YACA,aAAa;AAAA,YACb,cAAc,KAAK,aAAa,IAAI,CAAC,iBAAiB,EAAE,QAAQ,YAAY,QAAQ,MAAM,YAAY,KAAK,EAAE;AAAA,YAC7G,QAAQ,KAAK;AAAA,UACf;AAAA,UACA;AAAA,UACA;AAAA,UACA,EAAE,OAAO,cAAc;AAAA,QACzB;AACA,YAAI,CAAC,OAAQ;AACb,YAAI,cAAc,WAAW,GAAG;AAC9B,sBAAY,IAAI;AAChB;AAAA,QACF;AACA,cAAM,UAAU,cACb,IAAI,CAAC,SAAS,GAAG,YAAY,KAAK,KAAK,CAAC,SAAI,YAAY,KAAK,GAAG,CAAC,KAAK,KAAK,SAAS,EAAE,oCAAoC,UAAU,CAAC,EAAE,EACvI,KAAK,IAAI;AACZ,oBAAY,UAAU,EAAE,6CAA6C,0BAA0B,EAAE,OAAO,QAAQ,CAAC,IAAI,IAAI;AAAA,MAC3H,QAAQ;AACN,YAAI,OAAQ,aAAY,IAAI;AAAA,MAC9B;AAAA,IACF,GAAG,GAAG;AACN,WAAO,MAAM;AACX,eAAS;AACT,mBAAa,KAAK;AAClB,iBAAW,MAAM;AAAA,IACnB;AAAA,EAEF,GAAG,CAAC,MAAM,KAAK,MAAM,KAAK,WAAW,KAAK,SAAS,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,iBAAiB,OAAO,WAAW,OAAO,QAAQ,WAAW,kBAAkB,OAAO,eAAe,CAAC,CAAC;AAClM,SAAO;AACT;",
4
+ "sourcesContent": ["\"use client\"\n\nimport * as React from 'react'\nimport { endOfDay } from 'date-fns/endOfDay'\nimport { startOfDay } from 'date-fns/startOfDay'\nimport { useT } from '@open-mercato/shared/lib/i18n/context'\nimport { computeDurationMinutes, type EditorFormState, type EditorKindConfig } from '../../../lib/calendar/editorPayload'\nimport { findEditorConflictItems } from '../../../lib/calendar/conflicts'\nimport type { ConflictScope } from '../../../lib/calendar/preferences'\nimport { mapInteractionToCalendarItem } from '../../../lib/calendar/mapItem'\nimport { expandOccurrences } from '../../../lib/calendar/recurrence'\nimport { getFetchWindow } from '../../../lib/calendar/range'\nimport type { CalendarItem } from '../types'\nimport { fetchCalendarCandidates } from '../useCalendarItems'\nimport { fetchDealById, fetchRelatedEntityById, findStaffMemberName } from './lookups'\n\n// Edit-mode prefill stores ids only (parseItemToFormState is pure); resolve the\n// human labels for the related entity, the deal chip and the task assignee.\nexport function useEditorLabelResolution(\n open: boolean,\n form: EditorFormState,\n update: (patch: Partial<EditorFormState>) => void,\n): void {\n React.useEffect(() => {\n if (!open) return\n const controller = new AbortController()\n let cancelled = false\n async function resolveLabels() {\n if (form.relatedTo && form.relatedTo.kind === 'unknown') {\n const resolved = await fetchRelatedEntityById(form.relatedTo.id, controller.signal)\n if (!cancelled && resolved) update({ relatedTo: { id: resolved.id, kind: resolved.kind, label: resolved.label } })\n }\n if (form.dealId && !form.dealLabel) {\n const deal = await fetchDealById(form.dealId, controller.signal)\n if (!cancelled && deal) update({ dealLabel: deal.label })\n }\n if (form.assigneeUserId && !form.assigneeName) {\n const name = await findStaffMemberName(form.assigneeUserId, controller.signal)\n if (!cancelled && name) update({ assigneeName: name })\n }\n }\n resolveLabels().catch(() => {\n if (cancelled || controller.signal.aborted || !form.relatedTo || form.relatedTo.kind !== 'unknown' || form.relatedTo.label) {\n return\n }\n update({ relatedTo: { ...form.relatedTo, label: form.relatedTo.id } })\n })\n return () => {\n cancelled = true\n controller.abort()\n }\n }, [open, form.relatedTo, form.dealId, form.dealLabel, form.assigneeUserId, form.assigneeName, update])\n}\n\nfunction formatClock(date: Date): string {\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })\n}\n\n// Debounced save-time conflict probe. Detection uses the SAME `findConflicts`\n// logic the grid uses (overlap + shared owner/participant) against a freshly\n// fetched \u00B11-day window, so the editor warning is always consistent with the\n// conflict badges/rings the user sees on the calendar. The warning is\n// informational and never blocks saving.\nexport function useConflictProbe(\n open: boolean,\n form: EditorFormState,\n config: EditorKindConfig,\n excludeId: string | null,\n draftOwnerUserId: string | null,\n scope: ConflictScope,\n currentUserId: string | null,\n): string | null {\n const t = useT()\n const [conflict, setConflict] = React.useState<string | null>(null)\n const participantsKey = form.participants.map((participant) => participant.userId).join(',')\n React.useEffect(() => {\n if (!open || !form.date) {\n setConflict(null)\n return\n }\n // Resolve the draft's [start, end] span exactly as the grid will after save:\n // all-day spans startOfDay..endOfDay (matching mapInteractionToCalendarItem),\n // timed events use the start + computed duration (multi-day endDate included).\n const isAllDay = config.hasAllDay && form.allDay\n let start: Date\n let end: Date\n if (isAllDay) {\n const dayDate = new Date(`${form.date}T00:00:00`)\n if (Number.isNaN(dayDate.getTime())) {\n setConflict(null)\n return\n }\n start = startOfDay(dayDate)\n end = endOfDay(dayDate)\n } else {\n if (!form.startTime) {\n setConflict(null)\n return\n }\n start = new Date(`${form.date}T${form.startTime}:00`)\n if (Number.isNaN(start.getTime())) {\n setConflict(null)\n return\n }\n const durationMinutes = config.hasEnd ? computeDurationMinutes(form) ?? 30 : 30\n end = new Date(start.getTime() + durationMinutes * 60_000)\n }\n // The same padded window + recurrence expansion the grid uses, so the probe\n // sees the exact candidate set behind the grid's conflict badges/rings. The\n // window pads \u00B11 day around the FULL draft span so multi-day drafts still\n // catch neighbours near their end, not just their start day.\n const dayStart = startOfDay(start)\n dayStart.setDate(dayStart.getDate() - 1)\n const dayEnd = endOfDay(end)\n dayEnd.setDate(dayEnd.getDate() + 1)\n const fetchWindow = getFetchWindow({ from: dayStart, to: dayEnd })\n const controller = new AbortController()\n let active = true\n const timer = setTimeout(async () => {\n try {\n const { payloads } = await fetchCalendarCandidates(fetchWindow, controller.signal)\n if (!active) return\n const others: CalendarItem[] = []\n for (const payload of payloads) {\n const item = mapInteractionToCalendarItem(payload, {})\n if (!item) continue\n others.push(...expandOccurrences(item, fetchWindow))\n }\n const conflictItems = findEditorConflictItems(\n {\n start,\n end,\n ownerUserId: draftOwnerUserId,\n participants: form.participants.map((participant) => ({ userId: participant.userId, name: participant.name })),\n status: form.status,\n },\n others,\n excludeId,\n { scope, currentUserId },\n )\n if (!active) return\n if (conflictItems.length === 0) {\n setConflict(null)\n return\n }\n const summary = conflictItems\n .map((item) => `${formatClock(item.start)}\u2013${formatClock(item.end)}: ${item.title || t('customers.calendar.grid.untitled', 'Untitled')}`)\n .join(', ')\n setConflict(summary ? t('customers.calendar.editor.conflictWarning', 'Overlaps with: {items}', { items: summary }) : null)\n } catch {\n if (active) setConflict(null)\n }\n }, 500)\n return () => {\n active = false\n clearTimeout(timer)\n controller.abort()\n }\n // Re-probe when schedule-relevant inputs change (time window, all-day, attendees, owner, status, scope).\n }, [open, form.date, form.startTime, form.endDate, form.endTime, form.allDay, form.status, participantsKey, config.hasAllDay, config.hasEnd, excludeId, draftOwnerUserId, scope, currentUserId, t]) // eslint-disable-line react-hooks/exhaustive-deps\n return conflict\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { z } from "zod";
2
2
  const calendarParticipantSchema = z.object({
3
- userId: z.string().optional(),
3
+ userId: z.string(),
4
4
  name: z.string().optional(),
5
5
  email: z.string().optional()
6
6
  }).passthrough();
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../../src/modules/customers/components/calendar/types.ts"],
4
- "sourcesContent": ["import { z } from 'zod'\n\nexport type CalendarView = 'day' | 'week' | 'month' | 'agenda'\n\nexport type CalendarCategory = 'meeting' | 'event' | 'task' | 'other'\n\nexport type CalendarItemStatus = 'planned' | 'done' | 'canceled'\n\nexport type CalendarPlatform = 'zoom' | 'meet' | 'slack' | 'teams'\n\nexport type CalendarLocationKind = 'url' | 'venue' | 'platform'\n\nexport type CalendarTab = 'all' | 'meetings' | 'events'\n\nexport type CalendarRangePreset = 'thisWeek' | 'next7' | 'thisMonth' | 'next30'\n\nexport type CalendarRange = { from: Date; to: Date }\n\nconst calendarParticipantSchema = z\n .object({\n userId: z.string().optional(),\n name: z.string().optional(),\n email: z.string().optional(),\n })\n .passthrough()\n\nexport const calendarInteractionPayloadSchema = z\n .object({\n id: z.string(),\n interactionType: z.string(),\n title: z.string().nullable().optional(),\n status: z.string(),\n scheduledAt: z.string().nullable().optional(),\n occurredAt: z.string().nullable().optional(),\n durationMinutes: z.number().nullable().optional(),\n allDay: z.boolean().nullable().optional(),\n location: z.string().nullable().optional(),\n participants: z.array(calendarParticipantSchema).nullable().optional(),\n recurrenceRule: z.string().nullable().optional(),\n recurrenceEnd: z.string().nullable().optional(),\n appearanceIcon: z.string().nullable().optional(),\n appearanceColor: z.string().nullable().optional(),\n ownerUserId: z.string().nullable().optional(),\n entityId: z.string().nullable().optional(),\n dealId: z.string().nullable().optional(),\n updatedAt: z.string().nullable().optional(),\n })\n .passthrough()\n\nexport type CalendarInteractionPayload = z.infer<typeof calendarInteractionPayloadSchema>\n\nexport type CalendarParticipant = { userId?: string; name?: string; email?: string }\n\nexport interface CalendarItem {\n id: string\n title: string\n interactionType: string\n category: CalendarCategory\n status: CalendarItemStatus\n start: Date\n end: Date\n allDay: boolean\n location: string | null\n platform: CalendarPlatform | null\n locationKind: CalendarLocationKind | null\n participants: CalendarParticipant[]\n ownerUserId: string | null\n entityId: string | null\n dealId: string | null\n color: string | null\n isRecurringOccurrence: boolean\n updatedAt: string | null\n raw: CalendarInteractionPayload\n}\n\nexport interface CalendarFiltersValue {\n types: string[]\n status: string | null\n ownerUserId: string | null\n}\n\nexport interface TimeGridProps {\n days: 1 | 7\n anchor: Date\n items: CalendarItem[]\n conflictIds: Set<string>\n showWeekends: boolean\n showConflicts: boolean\n aiSummaries: boolean\n canManage?: boolean\n highlightItemId?: string | null\n onItemClick(item: CalendarItem): void\n onJoin(item: CalendarItem): void\n onNavigate(deltaDays: number): void\n onCreate?: () => void\n onCreateRange?(start: Date, end: Date): void\n}\n\nexport interface MonthGridProps {\n anchor: Date\n items: CalendarItem[]\n onItemClick(item: CalendarItem): void\n onDayOpen(date: Date): void\n}\n\nexport interface AgendaListProps {\n anchor: Date\n horizonDays: number\n items: CalendarItem[]\n typeLabels?: Record<string, string>\n onItemClick(item: CalendarItem): void\n}\n\nexport interface UpcomingCard {\n item: CalendarItem\n kind: 'today' | 'conflicted' | 'cancelled' | 'future'\n conflictCount: number\n}\n\nexport interface UpcomingCardsProps {\n cards: UpcomingCard[]\n canManage?: boolean\n onJoin(item: CalendarItem): void\n onSeeConflict(item: CalendarItem): void\n onOpen(item: CalendarItem): void\n onEdit(item: CalendarItem): void\n onCancel(item: CalendarItem): void\n}\n\nexport interface CalendarHeaderProps {\n view: CalendarView\n anchor: Date\n onNewEvent?: () => void\n}\n\nexport interface CalendarToolbarProps {\n view: CalendarView\n anchor: Date\n range: CalendarRange\n preset: CalendarRangePreset | null\n search: string\n filters: CalendarFiltersValue\n typeOptions: Array<{ value: string; label: string }>\n ownerOptions: Array<{ value: string; label: string }>\n onToday(): void\n onPresetChange(preset: CalendarRangePreset): void\n onAnchorChange(date: Date): void\n onSearchChange(value: string): void\n onFiltersChange(value: CalendarFiltersValue): void\n onOpenSettings(): void\n}\n\nexport interface CalendarTabsProps {\n tab: CalendarTab\n counts: { all: number; meetings: number; events: number }\n view: CalendarView\n onTabChange(tab: CalendarTab): void\n onViewChange(view: CalendarView): void\n}\n\nexport interface CalendarFooterProps {\n timezoneLabel: string\n onOpenShortcuts?: () => void\n}\n"],
5
- "mappings": "AAAA,SAAS,SAAS;AAkBlB,MAAM,4BAA4B,EAC/B,OAAO;AAAA,EACN,QAAQ,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5B,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAER,MAAM,mCAAmC,EAC7C,OAAO;AAAA,EACN,IAAI,EAAE,OAAO;AAAA,EACb,iBAAiB,EAAE,OAAO;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,cAAc,EAAE,MAAM,yBAAyB,EAAE,SAAS,EAAE,SAAS;AAAA,EACrE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC,EACA,YAAY;",
4
+ "sourcesContent": ["import { z } from 'zod'\n\nexport type CalendarView = 'day' | 'week' | 'month' | 'agenda'\n\nexport type CalendarCategory = 'meeting' | 'event' | 'task' | 'other'\n\nexport type CalendarItemStatus = 'planned' | 'done' | 'canceled'\n\nexport type CalendarPlatform = 'zoom' | 'meet' | 'slack' | 'teams'\n\nexport type CalendarLocationKind = 'url' | 'venue' | 'platform'\n\nexport type CalendarTab = 'all' | 'meetings' | 'events'\n\nexport type CalendarRangePreset = 'thisWeek' | 'next7' | 'thisMonth' | 'next30'\n\nexport type CalendarRange = { from: Date; to: Date }\n\nconst calendarParticipantSchema = z\n .object({\n userId: z.string(),\n name: z.string().optional(),\n email: z.string().optional(),\n })\n .passthrough()\n\nexport const calendarInteractionPayloadSchema = z\n .object({\n id: z.string(),\n interactionType: z.string(),\n title: z.string().nullable().optional(),\n status: z.string(),\n scheduledAt: z.string().nullable().optional(),\n occurredAt: z.string().nullable().optional(),\n durationMinutes: z.number().nullable().optional(),\n allDay: z.boolean().nullable().optional(),\n location: z.string().nullable().optional(),\n participants: z.array(calendarParticipantSchema).nullable().optional(),\n recurrenceRule: z.string().nullable().optional(),\n recurrenceEnd: z.string().nullable().optional(),\n appearanceIcon: z.string().nullable().optional(),\n appearanceColor: z.string().nullable().optional(),\n ownerUserId: z.string().nullable().optional(),\n entityId: z.string().nullable().optional(),\n dealId: z.string().nullable().optional(),\n updatedAt: z.string().nullable().optional(),\n })\n .passthrough()\n\nexport type CalendarInteractionPayload = z.infer<typeof calendarInteractionPayloadSchema>\n\nexport type CalendarParticipant = { userId: string; name?: string; email?: string }\n\nexport interface CalendarItem {\n id: string\n title: string\n interactionType: string\n category: CalendarCategory\n status: CalendarItemStatus\n start: Date\n end: Date\n allDay: boolean\n location: string | null\n platform: CalendarPlatform | null\n locationKind: CalendarLocationKind | null\n participants: CalendarParticipant[]\n ownerUserId: string | null\n entityId: string | null\n dealId: string | null\n color: string | null\n isRecurringOccurrence: boolean\n updatedAt: string | null\n raw: CalendarInteractionPayload\n}\n\nexport interface CalendarFiltersValue {\n types: string[]\n status: string | null\n ownerUserId: string | null\n}\n\nexport interface TimeGridProps {\n days: 1 | 7\n anchor: Date\n items: CalendarItem[]\n conflictIds: Set<string>\n showWeekends: boolean\n showConflicts: boolean\n aiSummaries: boolean\n canManage?: boolean\n highlightItemId?: string | null\n onItemClick(item: CalendarItem): void\n onJoin(item: CalendarItem): void\n onNavigate(deltaDays: number): void\n onCreate?: () => void\n onCreateRange?(start: Date, end: Date): void\n}\n\nexport interface MonthGridProps {\n anchor: Date\n items: CalendarItem[]\n onItemClick(item: CalendarItem): void\n onDayOpen(date: Date): void\n}\n\nexport interface AgendaListProps {\n anchor: Date\n horizonDays: number\n items: CalendarItem[]\n typeLabels?: Record<string, string>\n onItemClick(item: CalendarItem): void\n}\n\nexport interface UpcomingCard {\n item: CalendarItem\n kind: 'today' | 'conflicted' | 'cancelled' | 'future'\n conflictCount: number\n}\n\nexport interface UpcomingCardsProps {\n cards: UpcomingCard[]\n canManage?: boolean\n onJoin(item: CalendarItem): void\n onSeeConflict(item: CalendarItem): void\n onOpen(item: CalendarItem): void\n onEdit(item: CalendarItem): void\n onCancel(item: CalendarItem): void\n}\n\nexport interface CalendarHeaderProps {\n view: CalendarView\n anchor: Date\n onNewEvent?: () => void\n}\n\nexport interface CalendarToolbarProps {\n view: CalendarView\n anchor: Date\n range: CalendarRange\n preset: CalendarRangePreset | null\n search: string\n filters: CalendarFiltersValue\n typeOptions: Array<{ value: string; label: string }>\n ownerOptions: Array<{ value: string; label: string }>\n onToday(): void\n onPresetChange(preset: CalendarRangePreset): void\n onAnchorChange(date: Date): void\n onSearchChange(value: string): void\n onFiltersChange(value: CalendarFiltersValue): void\n onOpenSettings(): void\n}\n\nexport interface CalendarTabsProps {\n tab: CalendarTab\n counts: { all: number; meetings: number; events: number }\n view: CalendarView\n onTabChange(tab: CalendarTab): void\n onViewChange(view: CalendarView): void\n}\n\nexport interface CalendarFooterProps {\n timezoneLabel: string\n onOpenShortcuts?: () => void\n}\n"],
5
+ "mappings": "AAAA,SAAS,SAAS;AAkBlB,MAAM,4BAA4B,EAC/B,OAAO;AAAA,EACN,QAAQ,EAAE,OAAO;AAAA,EACjB,MAAM,EAAE,OAAO,EAAE,SAAS;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC,EACA,YAAY;AAER,MAAM,mCAAmC,EAC7C,OAAO;AAAA,EACN,IAAI,EAAE,OAAO;AAAA,EACb,iBAAiB,EAAE,OAAO;AAAA,EAC1B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACtC,QAAQ,EAAE,OAAO;AAAA,EACjB,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,YAAY,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC3C,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;AAAA,EACxC,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,cAAc,EAAE,MAAM,yBAAyB,EAAE,SAAS,EAAE,SAAS;AAAA,EACrE,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,eAAe,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC9C,gBAAgB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC/C,iBAAiB,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAChD,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EAC5C,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACzC,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAAA,EACvC,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS;AAC5C,CAAC,EACA,YAAY;",
6
6
  "names": []
7
7
  }
@@ -521,34 +521,39 @@ function AssignRoleDialog({
521
521
  ) })
522
522
  ] }) : null
523
523
  ] }) }),
524
- /* @__PURE__ */ jsxs(DialogFooter, { className: "shrink-0 border-t border-border/70 px-6 py-4 sm:justify-between", children: [
525
- /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground", children: t(
526
- "customers.roles.dialog.footerNote",
527
- "One person per role \xB7 can be changed at any time"
528
- ) }),
529
- /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
530
- /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: t("customers.roles.cancelAdd", "Cancel") }),
531
- step === 1 ? /* @__PURE__ */ jsx(
532
- Button,
533
- {
534
- type: "button",
535
- onClick: () => setStep(2),
536
- disabled: !selectedRoleType || !availableRoleTypes.length,
537
- children: t("customers.roles.dialog.next", "Next")
538
- }
539
- ) : null,
540
- step === 2 ? /* @__PURE__ */ jsx(Button, { type: "button", onClick: () => setStep(3), disabled: !selectedUser, children: t("customers.roles.dialog.next", "Next") }) : null,
541
- step === 3 ? /* @__PURE__ */ jsx(
542
- Button,
543
- {
544
- type: "button",
545
- onClick: handleAssign,
546
- disabled: saving || !selectedUser || !selectedRoleType,
547
- children: saving ? t("customers.roles.assigning", "Assigning...") : t("customers.roles.dialog.assign", "Assign role")
548
- }
549
- ) : null
550
- ] })
551
- ] })
524
+ /* @__PURE__ */ jsx(
525
+ DialogFooter,
526
+ {
527
+ bordered: false,
528
+ className: "shrink-0 border-t border-border/70 px-6 py-4",
529
+ leading: /* @__PURE__ */ jsx("p", { className: "text-xs text-muted-foreground sm:max-w-2xs", children: t(
530
+ "customers.roles.dialog.footerNote",
531
+ "One person per role \xB7 can be changed at any time"
532
+ ) }),
533
+ children: /* @__PURE__ */ jsxs("div", { className: "flex items-center gap-2", children: [
534
+ /* @__PURE__ */ jsx(Button, { type: "button", variant: "outline", onClick: onClose, children: t("customers.roles.cancelAdd", "Cancel") }),
535
+ step === 1 ? /* @__PURE__ */ jsx(
536
+ Button,
537
+ {
538
+ type: "button",
539
+ onClick: () => setStep(2),
540
+ disabled: !selectedRoleType || !availableRoleTypes.length,
541
+ children: t("customers.roles.dialog.next", "Next")
542
+ }
543
+ ) : null,
544
+ step === 2 ? /* @__PURE__ */ jsx(Button, { type: "button", onClick: () => setStep(3), disabled: !selectedUser, children: t("customers.roles.dialog.next", "Next") }) : null,
545
+ step === 3 ? /* @__PURE__ */ jsx(
546
+ Button,
547
+ {
548
+ type: "button",
549
+ onClick: handleAssign,
550
+ disabled: saving || !selectedUser || !selectedRoleType,
551
+ children: saving ? t("customers.roles.assigning", "Assigning...") : t("customers.roles.dialog.assign", "Assign role")
552
+ }
553
+ ) : null
554
+ ] })
555
+ }
556
+ )
552
557
  ]
553
558
  }
554
559
  )