@open-mercato/core 0.6.6-develop.6094.1.28b081ea16 → 0.6.6-develop.6121.1.5797a901b3

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 (317) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/dist/generated/entities/catalog_product/index.js +52 -0
  3. package/dist/generated/entities/catalog_product/index.js.map +2 -2
  4. package/dist/generated/entities/catalog_product_variant/index.js +4 -0
  5. package/dist/generated/entities/catalog_product_variant/index.js.map +2 -2
  6. package/dist/generated/entity-fields-registry.js +28 -0
  7. package/dist/generated/entity-fields-registry.js.map +2 -2
  8. package/dist/modules/catalog/api/products/route.js +103 -33
  9. package/dist/modules/catalog/api/products/route.js.map +2 -2
  10. package/dist/modules/catalog/api/variants/route.js +4 -0
  11. package/dist/modules/catalog/api/variants/route.js.map +2 -2
  12. package/dist/modules/catalog/backend/catalog/products/[id]/page.js +46 -2
  13. package/dist/modules/catalog/backend/catalog/products/[id]/page.js.map +2 -2
  14. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js +4 -0
  15. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.js.map +2 -2
  16. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/create/page.js +2 -0
  17. package/dist/modules/catalog/backend/catalog/products/[productId]/variants/create/page.js.map +2 -2
  18. package/dist/modules/catalog/backend/catalog/products/create/page.js +42 -2
  19. package/dist/modules/catalog/backend/catalog/products/create/page.js.map +2 -2
  20. package/dist/modules/catalog/commands/products.js +251 -14
  21. package/dist/modules/catalog/commands/products.js.map +2 -2
  22. package/dist/modules/catalog/commands/variants.js +72 -1
  23. package/dist/modules/catalog/commands/variants.js.map +2 -2
  24. package/dist/modules/catalog/components/products/ProductComplianceSection.js +500 -0
  25. package/dist/modules/catalog/components/products/ProductComplianceSection.js.map +7 -0
  26. package/dist/modules/catalog/components/products/VariantBuilder.js +39 -1
  27. package/dist/modules/catalog/components/products/VariantBuilder.js.map +2 -2
  28. package/dist/modules/catalog/components/products/productForm.js +164 -2
  29. package/dist/modules/catalog/components/products/productForm.js.map +2 -2
  30. package/dist/modules/catalog/components/products/variantForm.js +2 -0
  31. package/dist/modules/catalog/components/products/variantForm.js.map +2 -2
  32. package/dist/modules/catalog/data/entities.js +93 -0
  33. package/dist/modules/catalog/data/entities.js.map +2 -2
  34. package/dist/modules/catalog/data/types.js +28 -0
  35. package/dist/modules/catalog/data/types.js.map +2 -2
  36. package/dist/modules/catalog/data/validators.js +100 -5
  37. package/dist/modules/catalog/data/validators.js.map +2 -2
  38. package/dist/modules/catalog/lib/gtin.js +61 -0
  39. package/dist/modules/catalog/lib/gtin.js.map +7 -0
  40. package/dist/modules/catalog/migrations/Migration20260611090000.js +17 -0
  41. package/dist/modules/catalog/migrations/Migration20260611090000.js.map +7 -0
  42. package/dist/modules/catalog/translations.js +1 -1
  43. package/dist/modules/catalog/translations.js.map +2 -2
  44. package/dist/modules/configs/api/cache/route.js +60 -10
  45. package/dist/modules/configs/api/cache/route.js.map +3 -3
  46. package/dist/modules/configs/components/CachePanel.js +52 -29
  47. package/dist/modules/configs/components/CachePanel.js.map +2 -2
  48. package/dist/modules/currencies/api/currencies/options/route.js +18 -4
  49. package/dist/modules/currencies/api/currencies/options/route.js.map +2 -2
  50. package/dist/modules/currencies/services/rateFetchingService.js +35 -18
  51. package/dist/modules/currencies/services/rateFetchingService.js.map +2 -2
  52. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js +16 -16
  53. package/dist/modules/customer_accounts/backend/customer_accounts/users/[id]/page.js.map +2 -2
  54. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js +1 -1
  55. package/dist/modules/customer_accounts/backend/customer_accounts/users/page.js.map +2 -2
  56. package/dist/modules/customers/backend/calendar/page.js +10 -0
  57. package/dist/modules/customers/backend/calendar/page.js.map +7 -0
  58. package/dist/modules/customers/backend/calendar/page.meta.js +25 -0
  59. package/dist/modules/customers/backend/calendar/page.meta.js.map +7 -0
  60. package/dist/modules/customers/cli.js +1 -0
  61. package/dist/modules/customers/cli.js.map +2 -2
  62. package/dist/modules/customers/components/calendar/AgendaList.js +182 -0
  63. package/dist/modules/customers/components/calendar/AgendaList.js.map +7 -0
  64. package/dist/modules/customers/components/calendar/CalendarEventEditor.js +331 -0
  65. package/dist/modules/customers/components/calendar/CalendarEventEditor.js.map +7 -0
  66. package/dist/modules/customers/components/calendar/CalendarFooter.js +48 -0
  67. package/dist/modules/customers/components/calendar/CalendarFooter.js.map +7 -0
  68. package/dist/modules/customers/components/calendar/CalendarHeader.js +36 -0
  69. package/dist/modules/customers/components/calendar/CalendarHeader.js.map +7 -0
  70. package/dist/modules/customers/components/calendar/CalendarScreen.js +516 -0
  71. package/dist/modules/customers/components/calendar/CalendarScreen.js.map +7 -0
  72. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js +163 -0
  73. package/dist/modules/customers/components/calendar/CalendarSettingsModal.js.map +7 -0
  74. package/dist/modules/customers/components/calendar/CalendarTabs.js +60 -0
  75. package/dist/modules/customers/components/calendar/CalendarTabs.js.map +7 -0
  76. package/dist/modules/customers/components/calendar/CalendarToolbar.js +262 -0
  77. package/dist/modules/customers/components/calendar/CalendarToolbar.js.map +7 -0
  78. package/dist/modules/customers/components/calendar/EventBlock.js +149 -0
  79. package/dist/modules/customers/components/calendar/EventBlock.js.map +7 -0
  80. package/dist/modules/customers/components/calendar/EventPeekPopover.js +72 -0
  81. package/dist/modules/customers/components/calendar/EventPeekPopover.js.map +7 -0
  82. package/dist/modules/customers/components/calendar/MonthGrid.js +214 -0
  83. package/dist/modules/customers/components/calendar/MonthGrid.js.map +7 -0
  84. package/dist/modules/customers/components/calendar/ShortcutsDialog.js +44 -0
  85. package/dist/modules/customers/components/calendar/ShortcutsDialog.js.map +7 -0
  86. package/dist/modules/customers/components/calendar/TimeGrid.js +410 -0
  87. package/dist/modules/customers/components/calendar/TimeGrid.js.map +7 -0
  88. package/dist/modules/customers/components/calendar/UpcomingCards.js +175 -0
  89. package/dist/modules/customers/components/calendar/UpcomingCards.js.map +7 -0
  90. package/dist/modules/customers/components/calendar/editor/CategoryField.js +75 -0
  91. package/dist/modules/customers/components/calendar/editor/CategoryField.js.map +7 -0
  92. package/dist/modules/customers/components/calendar/editor/LocationField.js +30 -0
  93. package/dist/modules/customers/components/calendar/editor/LocationField.js.map +7 -0
  94. package/dist/modules/customers/components/calendar/editor/PeopleField.js +135 -0
  95. package/dist/modules/customers/components/calendar/editor/PeopleField.js.map +7 -0
  96. package/dist/modules/customers/components/calendar/editor/RelatedToField.js +218 -0
  97. package/dist/modules/customers/components/calendar/editor/RelatedToField.js.map +7 -0
  98. package/dist/modules/customers/components/calendar/editor/RepeatField.js +119 -0
  99. package/dist/modules/customers/components/calendar/editor/RepeatField.js.map +7 -0
  100. package/dist/modules/customers/components/calendar/editor/ScheduleSection.js +83 -0
  101. package/dist/modules/customers/components/calendar/editor/ScheduleSection.js.map +7 -0
  102. package/dist/modules/customers/components/calendar/editor/SegmentGroup.js +44 -0
  103. package/dist/modules/customers/components/calendar/editor/SegmentGroup.js.map +7 -0
  104. package/dist/modules/customers/components/calendar/editor/hooks.js +132 -0
  105. package/dist/modules/customers/components/calendar/editor/hooks.js.map +7 -0
  106. package/dist/modules/customers/components/calendar/editor/inputs.js +160 -0
  107. package/dist/modules/customers/components/calendar/editor/inputs.js.map +7 -0
  108. package/dist/modules/customers/components/calendar/editor/lookups.js +107 -0
  109. package/dist/modules/customers/components/calendar/editor/lookups.js.map +7 -0
  110. package/dist/modules/customers/components/calendar/types.js +30 -0
  111. package/dist/modules/customers/components/calendar/types.js.map +7 -0
  112. package/dist/modules/customers/components/calendar/useCalendarItems.js +131 -0
  113. package/dist/modules/customers/components/calendar/useCalendarItems.js.map +7 -0
  114. package/dist/modules/customers/components/calendar/useCalendarPreferences.js +41 -0
  115. package/dist/modules/customers/components/calendar/useCalendarPreferences.js.map +7 -0
  116. package/dist/modules/customers/lib/calendar/categories.js +28 -0
  117. package/dist/modules/customers/lib/calendar/categories.js.map +7 -0
  118. package/dist/modules/customers/lib/calendar/conflicts.js +72 -0
  119. package/dist/modules/customers/lib/calendar/conflicts.js.map +7 -0
  120. package/dist/modules/customers/lib/calendar/editorPayload.js +271 -0
  121. package/dist/modules/customers/lib/calendar/editorPayload.js.map +7 -0
  122. package/dist/modules/customers/lib/calendar/grid.js +48 -0
  123. package/dist/modules/customers/lib/calendar/grid.js.map +7 -0
  124. package/dist/modules/customers/lib/calendar/layout.js +39 -0
  125. package/dist/modules/customers/lib/calendar/layout.js.map +7 -0
  126. package/dist/modules/customers/lib/calendar/mapItem.js +79 -0
  127. package/dist/modules/customers/lib/calendar/mapItem.js.map +7 -0
  128. package/dist/modules/customers/lib/calendar/preferences.js +71 -0
  129. package/dist/modules/customers/lib/calendar/preferences.js.map +7 -0
  130. package/dist/modules/customers/lib/calendar/range.js +46 -0
  131. package/dist/modules/customers/lib/calendar/range.js.map +7 -0
  132. package/dist/modules/customers/lib/calendar/recurrence.js +113 -0
  133. package/dist/modules/customers/lib/calendar/recurrence.js.map +7 -0
  134. package/dist/modules/dashboards/services/widgetDataService.js +5 -5
  135. package/dist/modules/dashboards/services/widgetDataService.js.map +2 -2
  136. package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js +61 -1
  137. package/dist/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.js.map +2 -2
  138. package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js +33 -1
  139. package/dist/modules/dictionaries/api/[dictionaryId]/entries/route.js.map +2 -2
  140. package/dist/modules/dictionaries/api/[dictionaryId]/route.js +61 -1
  141. package/dist/modules/dictionaries/api/[dictionaryId]/route.js.map +2 -2
  142. package/dist/modules/dictionaries/api/route.js +33 -1
  143. package/dist/modules/dictionaries/api/route.js.map +2 -2
  144. package/dist/modules/feature_toggles/lib/queries.js +36 -52
  145. package/dist/modules/feature_toggles/lib/queries.js.map +2 -2
  146. package/dist/modules/perspectives/api/[tableId]/[perspectiveId]/route.js +32 -1
  147. package/dist/modules/perspectives/api/[tableId]/[perspectiveId]/route.js.map +2 -2
  148. package/dist/modules/perspectives/api/[tableId]/roles/[roleId]/route.js +32 -1
  149. package/dist/modules/perspectives/api/[tableId]/roles/[roleId]/route.js.map +2 -2
  150. package/dist/modules/perspectives/api/[tableId]/route.js +73 -2
  151. package/dist/modules/perspectives/api/[tableId]/route.js.map +2 -2
  152. package/dist/modules/perspectives/services/perspectiveService.js +5 -3
  153. package/dist/modules/perspectives/services/perspectiveService.js.map +2 -2
  154. package/dist/modules/planner/api/access.js +9 -0
  155. package/dist/modules/planner/api/access.js.map +2 -2
  156. package/dist/modules/planner/api/availability-date-specific.js +22 -1
  157. package/dist/modules/planner/api/availability-date-specific.js.map +2 -2
  158. package/dist/modules/planner/api/availability-weekly.js +22 -1
  159. package/dist/modules/planner/api/availability-weekly.js.map +2 -2
  160. package/dist/modules/resources/api/resources/tags/assign/route.js +39 -0
  161. package/dist/modules/resources/api/resources/tags/assign/route.js.map +2 -2
  162. package/dist/modules/resources/api/resources/tags/unassign/route.js +39 -0
  163. package/dist/modules/resources/api/resources/tags/unassign/route.js.map +2 -2
  164. package/dist/modules/sales/api/settings/document-numbers/route.js +33 -1
  165. package/dist/modules/sales/api/settings/document-numbers/route.js.map +2 -2
  166. package/dist/modules/sales/api/settings/order-editing/route.js +35 -3
  167. package/dist/modules/sales/api/settings/order-editing/route.js.map +2 -2
  168. package/dist/modules/staff/api/leave-requests/accept/route.js +41 -0
  169. package/dist/modules/staff/api/leave-requests/accept/route.js.map +2 -2
  170. package/dist/modules/staff/api/leave-requests/reject/route.js +41 -0
  171. package/dist/modules/staff/api/leave-requests/reject/route.js.map +2 -2
  172. package/dist/modules/staff/api/team-members/self/route.js +40 -0
  173. package/dist/modules/staff/api/team-members/self/route.js.map +2 -2
  174. package/dist/modules/staff/api/team-members/tags/assign/route.js +41 -0
  175. package/dist/modules/staff/api/team-members/tags/assign/route.js.map +2 -2
  176. package/dist/modules/staff/api/team-members/tags/unassign/route.js +41 -0
  177. package/dist/modules/staff/api/team-members/tags/unassign/route.js.map +2 -2
  178. package/dist/modules/translations/api/[entityType]/[entityId]/route.js +61 -1
  179. package/dist/modules/translations/api/[entityType]/[entityId]/route.js.map +2 -2
  180. package/dist/modules/translations/api/context.js +7 -0
  181. package/dist/modules/translations/api/context.js.map +2 -2
  182. package/dist/modules/translations/api/put/locales.js +33 -1
  183. package/dist/modules/translations/api/put/locales.js.map +2 -2
  184. package/dist/modules/workflows/backend/definitions/visual-editor/page.js +6 -7
  185. package/dist/modules/workflows/backend/definitions/visual-editor/page.js.map +2 -2
  186. package/dist/modules/workflows/backend/instances/[id]/page.js.map +1 -1
  187. package/dist/modules/workflows/components/EdgeEditDialog.js.map +1 -1
  188. package/dist/modules/workflows/components/EdgeEditDialogCrudForm.js.map +1 -1
  189. package/dist/modules/workflows/components/NodeEditDialog.js.map +1 -1
  190. package/dist/modules/workflows/components/NodeEditDialogCrudForm.js.map +1 -1
  191. package/dist/modules/workflows/components/WorkflowGraph.js.map +1 -1
  192. package/dist/modules/workflows/components/WorkflowGraphImpl.js +17 -9
  193. package/dist/modules/workflows/components/WorkflowGraphImpl.js.map +2 -2
  194. package/dist/modules/workflows/components/mobile/MobileVisualEditor.js.map +1 -1
  195. package/dist/modules/workflows/frontend/checkout-demo/deriveCurrentStep.js +8 -0
  196. package/dist/modules/workflows/frontend/checkout-demo/deriveCurrentStep.js.map +7 -0
  197. package/dist/modules/workflows/frontend/checkout-demo/page.js +2 -20
  198. package/dist/modules/workflows/frontend/checkout-demo/page.js.map +2 -2
  199. package/dist/modules/workflows/lib/graph-utils.js +8 -0
  200. package/dist/modules/workflows/lib/graph-utils.js.map +2 -2
  201. package/generated/entities/catalog_product/index.ts +26 -0
  202. package/generated/entities/catalog_product_variant/index.ts +2 -0
  203. package/generated/entity-fields-registry.ts +28 -0
  204. package/package.json +7 -7
  205. package/src/modules/catalog/api/products/route.ts +123 -39
  206. package/src/modules/catalog/api/variants/route.ts +4 -0
  207. package/src/modules/catalog/backend/catalog/products/[id]/page.tsx +43 -0
  208. package/src/modules/catalog/backend/catalog/products/[productId]/variants/[variantId]/page.tsx +14 -0
  209. package/src/modules/catalog/backend/catalog/products/[productId]/variants/create/page.tsx +2 -0
  210. package/src/modules/catalog/backend/catalog/products/create/page.tsx +41 -0
  211. package/src/modules/catalog/commands/products.ts +307 -2
  212. package/src/modules/catalog/commands/variants.ts +90 -1
  213. package/src/modules/catalog/components/products/ProductComplianceSection.tsx +497 -0
  214. package/src/modules/catalog/components/products/VariantBuilder.tsx +43 -0
  215. package/src/modules/catalog/components/products/productForm.ts +262 -0
  216. package/src/modules/catalog/components/products/variantForm.ts +4 -0
  217. package/src/modules/catalog/data/entities.ts +97 -0
  218. package/src/modules/catalog/data/types.ts +36 -0
  219. package/src/modules/catalog/data/validators.ts +159 -3
  220. package/src/modules/catalog/i18n/de.json +64 -0
  221. package/src/modules/catalog/i18n/en.json +64 -0
  222. package/src/modules/catalog/i18n/es.json +64 -0
  223. package/src/modules/catalog/i18n/pl.json +64 -0
  224. package/src/modules/catalog/lib/gtin.ts +66 -0
  225. package/src/modules/catalog/migrations/.snapshot-open-mercato.json +457 -0
  226. package/src/modules/catalog/migrations/Migration20260611090000.ts +17 -0
  227. package/src/modules/catalog/translations.ts +1 -1
  228. package/src/modules/configs/api/cache/route.ts +72 -10
  229. package/src/modules/configs/components/CachePanel.tsx +59 -29
  230. package/src/modules/currencies/api/currencies/options/route.ts +22 -4
  231. package/src/modules/currencies/services/rateFetchingService.ts +63 -26
  232. package/src/modules/customer_accounts/backend/customer_accounts/users/[id]/page.tsx +18 -18
  233. package/src/modules/customer_accounts/backend/customer_accounts/users/page.tsx +1 -1
  234. package/src/modules/customer_accounts/i18n/de.json +1 -1
  235. package/src/modules/customer_accounts/i18n/en.json +1 -1
  236. package/src/modules/customer_accounts/i18n/es.json +1 -1
  237. package/src/modules/customer_accounts/i18n/pl.json +1 -1
  238. package/src/modules/customers/backend/calendar/page.meta.ts +23 -0
  239. package/src/modules/customers/backend/calendar/page.tsx +12 -0
  240. package/src/modules/customers/cli.ts +1 -0
  241. package/src/modules/customers/components/calendar/AgendaList.tsx +219 -0
  242. package/src/modules/customers/components/calendar/CalendarEventEditor.tsx +386 -0
  243. package/src/modules/customers/components/calendar/CalendarFooter.tsx +61 -0
  244. package/src/modules/customers/components/calendar/CalendarHeader.tsx +40 -0
  245. package/src/modules/customers/components/calendar/CalendarScreen.tsx +590 -0
  246. package/src/modules/customers/components/calendar/CalendarSettingsModal.tsx +207 -0
  247. package/src/modules/customers/components/calendar/CalendarTabs.tsx +63 -0
  248. package/src/modules/customers/components/calendar/CalendarToolbar.tsx +295 -0
  249. package/src/modules/customers/components/calendar/EventBlock.tsx +205 -0
  250. package/src/modules/customers/components/calendar/EventPeekPopover.tsx +100 -0
  251. package/src/modules/customers/components/calendar/MonthGrid.tsx +236 -0
  252. package/src/modules/customers/components/calendar/ShortcutsDialog.tsx +57 -0
  253. package/src/modules/customers/components/calendar/TimeGrid.tsx +510 -0
  254. package/src/modules/customers/components/calendar/UpcomingCards.tsx +220 -0
  255. package/src/modules/customers/components/calendar/editor/CategoryField.tsx +79 -0
  256. package/src/modules/customers/components/calendar/editor/LocationField.tsx +37 -0
  257. package/src/modules/customers/components/calendar/editor/PeopleField.tsx +148 -0
  258. package/src/modules/customers/components/calendar/editor/RelatedToField.tsx +242 -0
  259. package/src/modules/customers/components/calendar/editor/RepeatField.tsx +132 -0
  260. package/src/modules/customers/components/calendar/editor/ScheduleSection.tsx +110 -0
  261. package/src/modules/customers/components/calendar/editor/SegmentGroup.tsx +50 -0
  262. package/src/modules/customers/components/calendar/editor/hooks.ts +162 -0
  263. package/src/modules/customers/components/calendar/editor/inputs.tsx +158 -0
  264. package/src/modules/customers/components/calendar/editor/lookups.ts +160 -0
  265. package/src/modules/customers/components/calendar/types.ts +163 -0
  266. package/src/modules/customers/components/calendar/useCalendarItems.ts +162 -0
  267. package/src/modules/customers/components/calendar/useCalendarPreferences.ts +52 -0
  268. package/src/modules/customers/i18n/de.json +195 -0
  269. package/src/modules/customers/i18n/en.json +195 -0
  270. package/src/modules/customers/i18n/es.json +195 -0
  271. package/src/modules/customers/i18n/pl.json +195 -0
  272. package/src/modules/customers/lib/calendar/categories.ts +26 -0
  273. package/src/modules/customers/lib/calendar/conflicts.ts +117 -0
  274. package/src/modules/customers/lib/calendar/editorPayload.ts +388 -0
  275. package/src/modules/customers/lib/calendar/grid.ts +50 -0
  276. package/src/modules/customers/lib/calendar/layout.ts +47 -0
  277. package/src/modules/customers/lib/calendar/mapItem.ts +94 -0
  278. package/src/modules/customers/lib/calendar/preferences.ts +95 -0
  279. package/src/modules/customers/lib/calendar/range.ts +45 -0
  280. package/src/modules/customers/lib/calendar/recurrence.ts +137 -0
  281. package/src/modules/dashboards/services/widgetDataService.ts +8 -6
  282. package/src/modules/dictionaries/api/[dictionaryId]/entries/[entryId]/route.ts +61 -1
  283. package/src/modules/dictionaries/api/[dictionaryId]/entries/route.ts +33 -1
  284. package/src/modules/dictionaries/api/[dictionaryId]/route.ts +65 -1
  285. package/src/modules/dictionaries/api/route.ts +36 -1
  286. package/src/modules/feature_toggles/lib/queries.ts +41 -60
  287. package/src/modules/perspectives/api/[tableId]/[perspectiveId]/route.ts +34 -1
  288. package/src/modules/perspectives/api/[tableId]/roles/[roleId]/route.ts +34 -1
  289. package/src/modules/perspectives/api/[tableId]/route.ts +107 -32
  290. package/src/modules/perspectives/services/perspectiveService.ts +9 -5
  291. package/src/modules/planner/api/access.ts +9 -0
  292. package/src/modules/planner/api/availability-date-specific.ts +22 -1
  293. package/src/modules/planner/api/availability-weekly.ts +22 -1
  294. package/src/modules/resources/api/resources/tags/assign/route.ts +42 -0
  295. package/src/modules/resources/api/resources/tags/unassign/route.ts +42 -0
  296. package/src/modules/sales/api/settings/document-numbers/route.ts +35 -1
  297. package/src/modules/sales/api/settings/order-editing/route.ts +37 -3
  298. package/src/modules/staff/api/leave-requests/accept/route.ts +45 -0
  299. package/src/modules/staff/api/leave-requests/reject/route.ts +45 -0
  300. package/src/modules/staff/api/team-members/self/route.ts +43 -0
  301. package/src/modules/staff/api/team-members/tags/assign/route.ts +45 -0
  302. package/src/modules/staff/api/team-members/tags/unassign/route.ts +45 -0
  303. package/src/modules/translations/api/[entityType]/[entityId]/route.ts +65 -1
  304. package/src/modules/translations/api/context.ts +7 -0
  305. package/src/modules/translations/api/put/locales.ts +35 -1
  306. package/src/modules/workflows/backend/definitions/visual-editor/page.tsx +11 -9
  307. package/src/modules/workflows/backend/instances/[id]/page.tsx +1 -1
  308. package/src/modules/workflows/components/EdgeEditDialog.tsx +1 -1
  309. package/src/modules/workflows/components/EdgeEditDialogCrudForm.tsx +1 -1
  310. package/src/modules/workflows/components/NodeEditDialog.tsx +1 -1
  311. package/src/modules/workflows/components/NodeEditDialogCrudForm.tsx +1 -1
  312. package/src/modules/workflows/components/WorkflowGraph.tsx +2 -2
  313. package/src/modules/workflows/components/WorkflowGraphImpl.tsx +27 -13
  314. package/src/modules/workflows/components/mobile/MobileVisualEditor.tsx +3 -3
  315. package/src/modules/workflows/frontend/checkout-demo/deriveCurrentStep.ts +12 -0
  316. package/src/modules/workflows/frontend/checkout-demo/page.tsx +3 -23
  317. package/src/modules/workflows/lib/graph-utils.ts +21 -1
@@ -0,0 +1,162 @@
1
+ "use client"
2
+
3
+ import * as React from 'react'
4
+ import { apiCall } from '@open-mercato/ui/backend/utils/apiCall'
5
+ import { expandOccurrences } from '../../lib/calendar/recurrence'
6
+ import { getFetchWindow } from '../../lib/calendar/range'
7
+ import { mapInteractionToCalendarItem } from '../../lib/calendar/mapItem'
8
+ import {
9
+ calendarInteractionPayloadSchema,
10
+ type CalendarInteractionPayload,
11
+ type CalendarItem,
12
+ type CalendarRange,
13
+ } from './types'
14
+
15
+ const PAGE_LIMIT = 100
16
+ export const MAX_WINDOW_ITEMS = 500
17
+
18
+ /**
19
+ * Cursor-follows `/api/customers/interactions` across the given window (already
20
+ * padded by the caller) up to `MAX_WINDOW_ITEMS`. Shared by the grid data hook
21
+ * and the editor's conflict probe so both see the exact same candidate set.
22
+ */
23
+ export async function fetchInteractionWindow(
24
+ window: CalendarRange,
25
+ signal?: AbortSignal,
26
+ ): Promise<{ payloads: CalendarInteractionPayload[]; truncated: boolean }> {
27
+ const collected: CalendarInteractionPayload[] = []
28
+ let cursor: string | undefined
29
+ let truncated = false
30
+ do {
31
+ const params = new URLSearchParams({
32
+ from: window.from.toISOString(),
33
+ to: window.to.toISOString(),
34
+ limit: String(PAGE_LIMIT),
35
+ })
36
+ if (cursor) params.set('cursor', cursor)
37
+ const call = await apiCall<{ items?: unknown[]; nextCursor?: string }>(
38
+ `/api/customers/interactions?${params.toString()}`,
39
+ { signal },
40
+ )
41
+ if (!call.ok) throw new Error(`[internal] calendar interactions fetch failed (${call.status})`)
42
+ const pageItems = Array.isArray(call.result?.items) ? call.result.items : []
43
+ for (const rawItem of pageItems) {
44
+ const parsed = calendarInteractionPayloadSchema.safeParse(rawItem)
45
+ if (parsed.success) collected.push(parsed.data)
46
+ }
47
+ cursor = typeof call.result?.nextCursor === 'string' ? call.result.nextCursor : undefined
48
+ if (cursor && collected.length >= MAX_WINDOW_ITEMS) {
49
+ truncated = true
50
+ cursor = undefined
51
+ }
52
+ } while (cursor)
53
+ return { payloads: collected.slice(0, MAX_WINDOW_ITEMS), truncated }
54
+ }
55
+
56
+ type ActivityTypeDictionaryEntry = {
57
+ value?: unknown
58
+ label?: unknown
59
+ color?: unknown
60
+ }
61
+
62
+ export type UseCalendarItemsResult = {
63
+ items: CalendarItem[]
64
+ isLoading: boolean
65
+ error: string | null
66
+ truncated: boolean
67
+ typeLabels: Record<string, string>
68
+ typeColors: Record<string, string | null>
69
+ refetch: () => void
70
+ }
71
+
72
+ export function useCalendarItems(range: CalendarRange): UseCalendarItemsResult {
73
+ const [payloads, setPayloads] = React.useState<CalendarInteractionPayload[]>([])
74
+ const [isLoading, setIsLoading] = React.useState(true)
75
+ const [error, setError] = React.useState<string | null>(null)
76
+ const [truncated, setTruncated] = React.useState(false)
77
+ const [typeLabels, setTypeLabels] = React.useState<Record<string, string>>({})
78
+ const [typeColors, setTypeColors] = React.useState<Record<string, string | null>>({})
79
+ const [reloadToken, setReloadToken] = React.useState(0)
80
+
81
+ const fromTime = range.from.getTime()
82
+ const toTime = range.to.getTime()
83
+
84
+ React.useEffect(() => {
85
+ const controller = new AbortController()
86
+ let cancelled = false
87
+ async function loadActivityTypes() {
88
+ const call = await apiCall<{ items?: ActivityTypeDictionaryEntry[] }>(
89
+ '/api/customers/dictionaries/activity-types',
90
+ { signal: controller.signal },
91
+ )
92
+ if (cancelled || !call.ok) return
93
+ const entries = Array.isArray(call.result?.items) ? call.result.items : []
94
+ const labels: Record<string, string> = {}
95
+ const colors: Record<string, string | null> = {}
96
+ for (const entry of entries) {
97
+ if (typeof entry?.value !== 'string' || entry.value.length === 0) continue
98
+ labels[entry.value] = typeof entry.label === 'string' && entry.label.length > 0 ? entry.label : entry.value
99
+ colors[entry.value] = typeof entry.color === 'string' && entry.color.length > 0 ? entry.color : null
100
+ }
101
+ setTypeLabels(labels)
102
+ setTypeColors(colors)
103
+ }
104
+ loadActivityTypes().catch(() => {
105
+ if (cancelled || controller.signal.aborted) return
106
+ setTypeLabels({})
107
+ setTypeColors({})
108
+ })
109
+ return () => {
110
+ cancelled = true
111
+ controller.abort()
112
+ }
113
+ }, [])
114
+
115
+ React.useEffect(() => {
116
+ const controller = new AbortController()
117
+ let cancelled = false
118
+ async function loadInteractions() {
119
+ setIsLoading(true)
120
+ setError(null)
121
+ try {
122
+ const fetchWindow = getFetchWindow({ from: new Date(fromTime), to: new Date(toTime) })
123
+ const { payloads: collected, truncated: windowTruncated } = await fetchInteractionWindow(
124
+ fetchWindow,
125
+ controller.signal,
126
+ )
127
+ if (cancelled) return
128
+ setPayloads(collected)
129
+ setTruncated(windowTruncated)
130
+ } catch (err) {
131
+ if (cancelled || controller.signal.aborted) return
132
+ setPayloads([])
133
+ setTruncated(false)
134
+ setError(err instanceof Error ? err.message : '[internal] calendar interactions fetch failed')
135
+ } finally {
136
+ if (!cancelled) setIsLoading(false)
137
+ }
138
+ }
139
+ void loadInteractions()
140
+ return () => {
141
+ cancelled = true
142
+ controller.abort()
143
+ }
144
+ }, [fromTime, toTime, reloadToken])
145
+
146
+ const items = React.useMemo(() => {
147
+ const expansionWindow = getFetchWindow({ from: new Date(fromTime), to: new Date(toTime) })
148
+ const mapped: CalendarItem[] = []
149
+ for (const payload of payloads) {
150
+ const item = mapInteractionToCalendarItem(payload, typeColors)
151
+ if (!item) continue
152
+ mapped.push(...expandOccurrences(item, expansionWindow))
153
+ }
154
+ return mapped
155
+ }, [payloads, typeColors, fromTime, toTime])
156
+
157
+ const refetch = React.useCallback(() => {
158
+ setReloadToken((token) => token + 1)
159
+ }, [])
160
+
161
+ return { items, isLoading, error, truncated, typeLabels, typeColors, refetch }
162
+ }
@@ -0,0 +1,52 @@
1
+ "use client"
2
+
3
+ import * as React from 'react'
4
+ import { useCurrentUserId } from '@open-mercato/ui/backend/utils/useCurrentUserId'
5
+ import {
6
+ CalendarPreferences,
7
+ DEFAULT_CALENDAR_PREFERENCES,
8
+ calendarPreferencesStorageKey,
9
+ parseStoredCalendarPreferences,
10
+ } from '../../lib/calendar/preferences'
11
+
12
+ export type UseCalendarPreferencesResult = {
13
+ preferences: CalendarPreferences
14
+ setPreferences(next: CalendarPreferences): void
15
+ hydrated: boolean
16
+ // The current user's id (JWT subject), reused to scope "my meetings" conflicts.
17
+ userId: string | null
18
+ }
19
+
20
+ export function useCalendarPreferences(): UseCalendarPreferencesResult {
21
+ const userId = useCurrentUserId()
22
+ const scopeKey = userId || 'anon'
23
+ const [preferences, setPreferencesState] = React.useState<CalendarPreferences>(DEFAULT_CALENDAR_PREFERENCES)
24
+ const [hydrated, setHydrated] = React.useState(false)
25
+
26
+ React.useEffect(() => {
27
+ if (typeof window === 'undefined') return
28
+ let raw: string | null = null
29
+ try {
30
+ raw = window.localStorage.getItem(calendarPreferencesStorageKey(scopeKey))
31
+ } catch {
32
+ raw = null
33
+ }
34
+ setPreferencesState(parseStoredCalendarPreferences(raw))
35
+ setHydrated(true)
36
+ }, [scopeKey])
37
+
38
+ const setPreferences = React.useCallback(
39
+ (next: CalendarPreferences) => {
40
+ setPreferencesState(next)
41
+ if (typeof window === 'undefined') return
42
+ try {
43
+ window.localStorage.setItem(calendarPreferencesStorageKey(scopeKey), JSON.stringify(next))
44
+ } catch {
45
+ // Storage may be unavailable (private mode / quota) — keep the in-memory value.
46
+ }
47
+ },
48
+ [scopeKey],
49
+ )
50
+
51
+ return { preferences, setPreferences, hydrated, userId: userId || null }
52
+ }
@@ -173,6 +173,29 @@
173
173
  "customers.audit.todos.create": "Kundenaufgabe erstellen",
174
174
  "customers.audit.todos.link": "To-do verknüpfen",
175
175
  "customers.audit.todos.unlink": "To-do-Verknüpfung lösen",
176
+ "customers.calendar.actions.newEvent": "Neuer Termin",
177
+ "customers.calendar.agenda.eventCount": "1 Termin",
178
+ "customers.calendar.agenda.eventsCount": "{count} Termine",
179
+ "customers.calendar.agenda.today": "Heute",
180
+ "customers.calendar.agenda.tomorrow": "Morgen",
181
+ "customers.calendar.cards.allDay": "Ganztägig",
182
+ "customers.calendar.cards.cancelError": "Termin konnte nicht abgesagt werden",
183
+ "customers.calendar.cards.cancelSuccess": "Termin abgesagt",
184
+ "customers.calendar.cards.cancelled": "Abgesagt",
185
+ "customers.calendar.cards.conflictedCount": "{count} im Konflikt",
186
+ "customers.calendar.cards.dayLater": "in 1 Tag",
187
+ "customers.calendar.cards.daysLater": "in {days} Tagen",
188
+ "customers.calendar.cards.join": "Meeting beitreten",
189
+ "customers.calendar.cards.menu.cancel": "Absagen",
190
+ "customers.calendar.cards.menu.edit": "Bearbeiten",
191
+ "customers.calendar.cards.menu.label": "Terminaktionen",
192
+ "customers.calendar.cards.menu.open": "Öffnen",
193
+ "customers.calendar.cards.seeConflict": "Konflikt anzeigen",
194
+ "customers.calendar.cards.today": "Heute",
195
+ "customers.calendar.category.event": "Event",
196
+ "customers.calendar.category.meeting": "Meeting",
197
+ "customers.calendar.category.other": "Sonstiges",
198
+ "customers.calendar.category.task": "Aufgabe",
176
199
  "customers.calendar.day.fri": "FR",
177
200
  "customers.calendar.day.mon": "MO",
178
201
  "customers.calendar.day.sat": "SA",
@@ -180,11 +203,183 @@
180
203
  "customers.calendar.day.thu": "DO",
181
204
  "customers.calendar.day.tue": "DI",
182
205
  "customers.calendar.day.wed": "MI",
206
+ "customers.calendar.editor.addPeoplePlaceholder": "Mitarbeiter oder Kunden hinzufügen…",
207
+ "customers.calendar.editor.addRecipientPlaceholder": "Empfänger hinzufügen…",
208
+ "customers.calendar.editor.allDay": "Ganztägig",
209
+ "customers.calendar.editor.assignee": "Zugewiesen an",
210
+ "customers.calendar.editor.assigneePlaceholder": "Einem Teammitglied zuweisen…",
211
+ "customers.calendar.editor.attendees": "Teilnehmer",
212
+ "customers.calendar.editor.cancel": "Abbrechen",
213
+ "customers.calendar.editor.category": "Kategorie",
214
+ "customers.calendar.editor.close": "Schließen",
215
+ "customers.calendar.editor.conflictTitle": "Kalenderkonflikt",
216
+ "customers.calendar.editor.conflictWarning": "Überschneidet sich mit: {items}",
217
+ "customers.calendar.editor.customerBadge": "Kunde",
218
+ "customers.calendar.editor.dates.due": "Fällig",
219
+ "customers.calendar.editor.dates.ends": "Endet",
220
+ "customers.calendar.editor.dates.logged": "Erfasst",
221
+ "customers.calendar.editor.dates.sent": "Gesendet",
222
+ "customers.calendar.editor.dates.starts": "Beginnt",
223
+ "customers.calendar.editor.dates.when": "Wann",
224
+ "customers.calendar.editor.dealBadge": "{name} · Geschäft",
225
+ "customers.calendar.editor.dealBadgeSuffix": "Geschäft",
226
+ "customers.calendar.editor.dealNone": "Kein Geschäft",
227
+ "customers.calendar.editor.dealsSection": "Geschäfte",
228
+ "customers.calendar.editor.description": "Beschreibung",
229
+ "customers.calendar.editor.descriptionPlaceholder": "Details hinzufügen…",
230
+ "customers.calendar.editor.error": "Termin konnte nicht gespeichert werden",
231
+ "customers.calendar.editor.location": "Ort",
232
+ "customers.calendar.editor.locationPlaceholder": "Ort oder Link hinzufügen…",
233
+ "customers.calendar.editor.noResults": "Keine Ergebnisse",
234
+ "customers.calendar.editor.participants": "Teilnehmer",
235
+ "customers.calendar.editor.phoneLink": "Telefon / Link",
236
+ "customers.calendar.editor.phoneLinkPlaceholder": "Telefonnummer oder Link hinzufügen…",
237
+ "customers.calendar.editor.priority.high": "Hoch",
238
+ "customers.calendar.editor.priority.label": "Priorität",
239
+ "customers.calendar.editor.priority.low": "Niedrig",
240
+ "customers.calendar.editor.priority.medium": "Mittel",
241
+ "customers.calendar.editor.relatedTo": "Verknüpft mit",
242
+ "customers.calendar.editor.relatedToPlaceholder": "Personen oder Unternehmen suchen…",
243
+ "customers.calendar.editor.removePerson": "{name} entfernen",
244
+ "customers.calendar.editor.removeRelated": "Verknüpfung entfernen",
245
+ "customers.calendar.editor.repeat.after": "Nach",
246
+ "customers.calendar.editor.repeat.days.fri": "F",
247
+ "customers.calendar.editor.repeat.days.mon": "M",
248
+ "customers.calendar.editor.repeat.days.sat": "S",
249
+ "customers.calendar.editor.repeat.days.sun": "S",
250
+ "customers.calendar.editor.repeat.days.thu": "D",
251
+ "customers.calendar.editor.repeat.days.tue": "D",
252
+ "customers.calendar.editor.repeat.days.wed": "M",
253
+ "customers.calendar.editor.repeat.ends": "Endet",
254
+ "customers.calendar.editor.repeat.freq.daily": "Täglich",
255
+ "customers.calendar.editor.repeat.freq.none": "Keine Wiederholung",
256
+ "customers.calendar.editor.repeat.freq.weekly": "Wöchentlich",
257
+ "customers.calendar.editor.repeat.label": "Wiederholen",
258
+ "customers.calendar.editor.repeat.never": "Nie",
259
+ "customers.calendar.editor.repeat.onDate": "Am Datum",
260
+ "customers.calendar.editor.repeat.times": "Mal",
261
+ "customers.calendar.editor.save": "Termin speichern",
262
+ "customers.calendar.editor.saved": "Termin gespeichert",
263
+ "customers.calendar.editor.saving": "Speichern…",
264
+ "customers.calendar.editor.searching": "Suche…",
265
+ "customers.calendar.editor.title.create": "Neuer Termin",
266
+ "customers.calendar.editor.title.edit": "Termin bearbeiten",
267
+ "customers.calendar.editor.titleLabel.email": "Betreff",
268
+ "customers.calendar.editor.titleLabel.generic": "Titel",
269
+ "customers.calendar.editor.titleLabel.note": "Notiz",
270
+ "customers.calendar.editor.titlePlaceholder": "Titel hinzufügen…",
271
+ "customers.calendar.editor.to": "An",
272
+ "customers.calendar.editor.typeSwitcher": "Termintyp",
273
+ "customers.calendar.editor.types.call": "Anruf",
274
+ "customers.calendar.editor.types.email": "E-Mail",
275
+ "customers.calendar.editor.types.event": "Event",
276
+ "customers.calendar.editor.types.meeting": "Meeting",
277
+ "customers.calendar.editor.types.note": "Notiz",
278
+ "customers.calendar.editor.types.task": "Aufgabe",
279
+ "customers.calendar.editor.validation.endsBeforeStarts": "Das Ende muss nach dem Beginn liegen",
280
+ "customers.calendar.editor.validation.relatedToRequired": "Wähle eine Person oder ein Unternehmen aus, um diesen Termin zu verknüpfen",
281
+ "customers.calendar.editor.validation.titleRequired": "Titel ist erforderlich",
282
+ "customers.calendar.empty.action": "Neuer Termin",
283
+ "customers.calendar.empty.agenda": "In diesem Zeitraum ist nichts geplant",
284
+ "customers.calendar.empty.day": "Für diesen Tag ist nichts geplant",
285
+ "customers.calendar.empty.description": "Planen Sie ein Meeting, Ereignis oder eine Aufgabe für Ihre Woche.",
286
+ "customers.calendar.empty.month": "Für diesen Monat ist nichts geplant",
287
+ "customers.calendar.empty.week": "Für diese Woche ist nichts geplant",
288
+ "customers.calendar.errors.loadFailed": "Kalendereinträge konnten nicht geladen werden.",
289
+ "customers.calendar.errors.retry": "Erneut versuchen",
290
+ "customers.calendar.footer.timezone": "Zeitzone: {timezone}",
291
+ "customers.calendar.grid.allDay": "Ganztägig",
292
+ "customers.calendar.grid.conflictCount": "1 Konflikt",
293
+ "customers.calendar.grid.conflictsCount": "{count} Konflikte",
294
+ "customers.calendar.grid.more": "+{count} weitere",
295
+ "customers.calendar.grid.nextDay": "Nächster Tag",
296
+ "customers.calendar.grid.nonWorking": "Arbeitsfreier Tag",
297
+ "customers.calendar.grid.onPlatform": "über {platform}",
298
+ "customers.calendar.grid.previousDay": "Vorheriger Tag",
299
+ "customers.calendar.grid.untitled": "Ohne Titel",
300
+ "customers.calendar.grid.venue": "Ort: {name}",
301
+ "customers.calendar.header.titleAgenda": "Anstehend",
302
+ "customers.calendar.header.titleDay": "{date}",
303
+ "customers.calendar.header.titleMonth": "{date}",
304
+ "customers.calendar.loading": "Kalender wird geladen…",
183
305
  "customers.calendar.locale": "en",
306
+ "customers.calendar.nav.title": "Kalender",
184
307
  "customers.calendar.nextWeek": "Nächste Woche",
308
+ "customers.calendar.notice.truncated": "Es werden die ersten {count} Einträge für diesen Zeitraum angezeigt.",
309
+ "customers.calendar.peek.attendee": "1 Teilnehmer",
310
+ "customers.calendar.peek.attendees": "{count} Teilnehmer",
311
+ "customers.calendar.peek.edit": "Bearbeiten",
312
+ "customers.calendar.peek.join": "Beitreten",
313
+ "customers.calendar.platform.meet": "Meet",
314
+ "customers.calendar.platform.slack": "Slack",
315
+ "customers.calendar.platform.teams": "Teams",
316
+ "customers.calendar.platform.zoom": "Zoom",
317
+ "customers.calendar.platformFull.meet": "Google Meet",
318
+ "customers.calendar.platformFull.slack": "Slack",
319
+ "customers.calendar.platformFull.teams": "Microsoft Teams",
320
+ "customers.calendar.platformFull.zoom": "Zoom",
185
321
  "customers.calendar.previousWeek": "Vorherige Woche",
322
+ "customers.calendar.settings.activityTypes": "Aktivitätstypen",
323
+ "customers.calendar.settings.activityTypesHint": "Die Aktivitätstypen, die Ihr Kalender beim Erstellen eines Ereignisses anbietet. Aus dem Workspace-Wörterbuch übernommen.",
324
+ "customers.calendar.settings.addCategory": "Kategorie hinzufügen…",
325
+ "customers.calendar.settings.addType": "Typ hinzufügen…",
326
+ "customers.calendar.settings.aiSummaries": "KI-Zusammenfassungen & Schnellaktionen",
327
+ "customers.calendar.settings.cancel": "Abbrechen",
328
+ "customers.calendar.settings.close": "Schließen",
329
+ "customers.calendar.settings.conflictScope": "Konfliktbereich",
330
+ "customers.calendar.settings.conflictScopeAll": "Alle Termine der Organisation",
331
+ "customers.calendar.settings.conflictScopeHint": "Wählen Sie, wessen Überschneidungen der Kalender als Konflikte kennzeichnet.",
332
+ "customers.calendar.settings.conflictScopeMine": "Nur meine Termine",
333
+ "customers.calendar.settings.conflictWarnings": "Konfliktwarnungen",
334
+ "customers.calendar.settings.eventCategories": "Ereigniskategorien",
335
+ "customers.calendar.settings.eventCategoriesHint": "Eigene Gruppierungslabels (z. B. Teammeeting, Verkaufsanruf). Werden beim Erstellen eines Ereignisses angeboten.",
336
+ "customers.calendar.settings.max": "(max. {count})",
337
+ "customers.calendar.settings.save": "Änderungen speichern",
338
+ "customers.calendar.settings.saved": "Kalendereinstellungen gespeichert",
339
+ "customers.calendar.settings.showCrmActivities": "CRM-Aktivitäten im Kalender anzeigen",
340
+ "customers.calendar.settings.showWeekends": "Wochenenden anzeigen",
341
+ "customers.calendar.settings.subtitle": "Passen Sie Ihr Kalendermodul an.",
342
+ "customers.calendar.settings.title": "Anpassung",
343
+ "customers.calendar.shortcuts.agenda": "Agenda",
344
+ "customers.calendar.shortcuts.dayView": "Tagesansicht",
345
+ "customers.calendar.shortcuts.description": "Mit diesen Tasten navigieren Sie schneller im Kalender.",
346
+ "customers.calendar.shortcuts.help": "Tastenkürzel",
347
+ "customers.calendar.shortcuts.month": "Monat",
348
+ "customers.calendar.shortcuts.newEvent": "Neuer Termin",
349
+ "customers.calendar.shortcuts.search": "Suche",
350
+ "customers.calendar.shortcuts.title": "Tastenkürzel",
351
+ "customers.calendar.shortcuts.today": "Heute",
352
+ "customers.calendar.shortcuts.week": "Woche",
353
+ "customers.calendar.tabs.all": "Alle geplanten",
354
+ "customers.calendar.tabs.events": "Events",
355
+ "customers.calendar.tabs.meetings": "Meetings",
186
356
  "customers.calendar.thisWeek": "This week",
187
357
  "customers.calendar.tomorrow": "Tomorrow",
358
+ "customers.calendar.toolbar.filters.allOwners": "Alle Verantwortlichen",
359
+ "customers.calendar.toolbar.filters.allStatuses": "Alle Status",
360
+ "customers.calendar.toolbar.filters.apply": "Anwenden",
361
+ "customers.calendar.toolbar.filters.clear": "Zurücksetzen",
362
+ "customers.calendar.toolbar.filters.label": "Filter",
363
+ "customers.calendar.toolbar.filters.owner": "Verantwortlicher",
364
+ "customers.calendar.toolbar.filters.status": "Status",
365
+ "customers.calendar.toolbar.filters.statuses.canceled": "Abgesagt",
366
+ "customers.calendar.toolbar.filters.statuses.done": "Erledigt",
367
+ "customers.calendar.toolbar.filters.statuses.planned": "Geplant",
368
+ "customers.calendar.toolbar.filters.types": "Typ",
369
+ "customers.calendar.toolbar.presetLabel": "Voreingestellter Zeitraum",
370
+ "customers.calendar.toolbar.presetPlaceholder": "Benutzerdefinierter Zeitraum",
371
+ "customers.calendar.toolbar.presets.next30": "Nächste 30 Tage",
372
+ "customers.calendar.toolbar.presets.next7": "Nächste 7 Tage",
373
+ "customers.calendar.toolbar.presets.thisMonth": "Dieser Monat",
374
+ "customers.calendar.toolbar.presets.thisWeek": "Diese Woche",
375
+ "customers.calendar.toolbar.searchPlaceholder": "Termine suchen…",
376
+ "customers.calendar.toolbar.settings": "Kalendereinstellungen",
377
+ "customers.calendar.toolbar.today": "Heute",
378
+ "customers.calendar.views.agenda": "Agenda",
379
+ "customers.calendar.views.day": "Tag",
380
+ "customers.calendar.views.label": "Kalenderansicht",
381
+ "customers.calendar.views.month": "Monat",
382
+ "customers.calendar.views.week": "Woche",
188
383
  "customers.changelog.actions.assign": "Assign",
189
384
  "customers.changelog.actions.create": "Create",
190
385
  "customers.changelog.actions.delete": "Delete",
@@ -173,6 +173,29 @@
173
173
  "customers.audit.todos.create": "Create customer task",
174
174
  "customers.audit.todos.link": "Link todo",
175
175
  "customers.audit.todos.unlink": "Unlink todo",
176
+ "customers.calendar.actions.newEvent": "New event",
177
+ "customers.calendar.agenda.eventCount": "1 event",
178
+ "customers.calendar.agenda.eventsCount": "{count} events",
179
+ "customers.calendar.agenda.today": "Today",
180
+ "customers.calendar.agenda.tomorrow": "Tomorrow",
181
+ "customers.calendar.cards.allDay": "All day",
182
+ "customers.calendar.cards.cancelError": "Failed to cancel event",
183
+ "customers.calendar.cards.cancelSuccess": "Event cancelled",
184
+ "customers.calendar.cards.cancelled": "Cancelled",
185
+ "customers.calendar.cards.conflictedCount": "{count} Conflicted",
186
+ "customers.calendar.cards.dayLater": "1 day later",
187
+ "customers.calendar.cards.daysLater": "{days} days later",
188
+ "customers.calendar.cards.join": "Join Meeting",
189
+ "customers.calendar.cards.menu.cancel": "Cancel",
190
+ "customers.calendar.cards.menu.edit": "Edit",
191
+ "customers.calendar.cards.menu.label": "Event actions",
192
+ "customers.calendar.cards.menu.open": "Open",
193
+ "customers.calendar.cards.seeConflict": "See Conflict",
194
+ "customers.calendar.cards.today": "Today",
195
+ "customers.calendar.category.event": "Event",
196
+ "customers.calendar.category.meeting": "Meeting",
197
+ "customers.calendar.category.other": "Other",
198
+ "customers.calendar.category.task": "Task",
176
199
  "customers.calendar.day.fri": "FRI",
177
200
  "customers.calendar.day.mon": "MON",
178
201
  "customers.calendar.day.sat": "SAT",
@@ -180,11 +203,183 @@
180
203
  "customers.calendar.day.thu": "THU",
181
204
  "customers.calendar.day.tue": "TUE",
182
205
  "customers.calendar.day.wed": "WED",
206
+ "customers.calendar.editor.addPeoplePlaceholder": "Add staff or customer…",
207
+ "customers.calendar.editor.addRecipientPlaceholder": "Add recipient…",
208
+ "customers.calendar.editor.allDay": "All day",
209
+ "customers.calendar.editor.assignee": "Assignee",
210
+ "customers.calendar.editor.assigneePlaceholder": "Assign to a team member…",
211
+ "customers.calendar.editor.attendees": "Attendees",
212
+ "customers.calendar.editor.cancel": "Cancel",
213
+ "customers.calendar.editor.category": "Category",
214
+ "customers.calendar.editor.close": "Close",
215
+ "customers.calendar.editor.conflictTitle": "Calendar conflict",
216
+ "customers.calendar.editor.conflictWarning": "Overlaps with: {items}",
217
+ "customers.calendar.editor.customerBadge": "Customer",
218
+ "customers.calendar.editor.dates.due": "Due",
219
+ "customers.calendar.editor.dates.ends": "Ends",
220
+ "customers.calendar.editor.dates.logged": "Logged",
221
+ "customers.calendar.editor.dates.sent": "Sent",
222
+ "customers.calendar.editor.dates.starts": "Starts",
223
+ "customers.calendar.editor.dates.when": "When",
224
+ "customers.calendar.editor.dealBadge": "{name} · Deal",
225
+ "customers.calendar.editor.dealBadgeSuffix": "Deal",
226
+ "customers.calendar.editor.dealNone": "No deal",
227
+ "customers.calendar.editor.dealsSection": "Deals",
228
+ "customers.calendar.editor.description": "Description",
229
+ "customers.calendar.editor.descriptionPlaceholder": "Add details…",
230
+ "customers.calendar.editor.error": "Failed to save event",
231
+ "customers.calendar.editor.location": "Location",
232
+ "customers.calendar.editor.locationPlaceholder": "Add a location or link…",
233
+ "customers.calendar.editor.noResults": "No results",
234
+ "customers.calendar.editor.participants": "Participants",
235
+ "customers.calendar.editor.phoneLink": "Phone / link",
236
+ "customers.calendar.editor.phoneLinkPlaceholder": "Add a phone number or link…",
237
+ "customers.calendar.editor.priority.high": "High",
238
+ "customers.calendar.editor.priority.label": "Priority",
239
+ "customers.calendar.editor.priority.low": "Low",
240
+ "customers.calendar.editor.priority.medium": "Medium",
241
+ "customers.calendar.editor.relatedTo": "Related to",
242
+ "customers.calendar.editor.relatedToPlaceholder": "Search people or companies…",
243
+ "customers.calendar.editor.removePerson": "Remove {name}",
244
+ "customers.calendar.editor.removeRelated": "Clear related record",
245
+ "customers.calendar.editor.repeat.after": "After",
246
+ "customers.calendar.editor.repeat.days.fri": "F",
247
+ "customers.calendar.editor.repeat.days.mon": "M",
248
+ "customers.calendar.editor.repeat.days.sat": "S",
249
+ "customers.calendar.editor.repeat.days.sun": "S",
250
+ "customers.calendar.editor.repeat.days.thu": "T",
251
+ "customers.calendar.editor.repeat.days.tue": "T",
252
+ "customers.calendar.editor.repeat.days.wed": "W",
253
+ "customers.calendar.editor.repeat.ends": "Ends",
254
+ "customers.calendar.editor.repeat.freq.daily": "Daily",
255
+ "customers.calendar.editor.repeat.freq.none": "Does not repeat",
256
+ "customers.calendar.editor.repeat.freq.weekly": "Weekly",
257
+ "customers.calendar.editor.repeat.label": "Repeat",
258
+ "customers.calendar.editor.repeat.never": "Never",
259
+ "customers.calendar.editor.repeat.onDate": "On date",
260
+ "customers.calendar.editor.repeat.times": "times",
261
+ "customers.calendar.editor.save": "Save event",
262
+ "customers.calendar.editor.saved": "Event saved",
263
+ "customers.calendar.editor.saving": "Saving…",
264
+ "customers.calendar.editor.searching": "Searching…",
265
+ "customers.calendar.editor.title.create": "New event",
266
+ "customers.calendar.editor.title.edit": "Edit event",
267
+ "customers.calendar.editor.titleLabel.email": "Subject",
268
+ "customers.calendar.editor.titleLabel.generic": "Title",
269
+ "customers.calendar.editor.titleLabel.note": "Note",
270
+ "customers.calendar.editor.titlePlaceholder": "Add a title…",
271
+ "customers.calendar.editor.to": "To",
272
+ "customers.calendar.editor.typeSwitcher": "Event type",
273
+ "customers.calendar.editor.types.call": "Call",
274
+ "customers.calendar.editor.types.email": "Email",
275
+ "customers.calendar.editor.types.event": "Event",
276
+ "customers.calendar.editor.types.meeting": "Meeting",
277
+ "customers.calendar.editor.types.note": "Note",
278
+ "customers.calendar.editor.types.task": "Task",
279
+ "customers.calendar.editor.validation.endsBeforeStarts": "End must be after start",
280
+ "customers.calendar.editor.validation.relatedToRequired": "Select a person or company to link this event",
281
+ "customers.calendar.editor.validation.titleRequired": "Title is required",
282
+ "customers.calendar.empty.action": "New event",
283
+ "customers.calendar.empty.agenda": "Nothing scheduled in this period",
284
+ "customers.calendar.empty.day": "Nothing scheduled this day",
285
+ "customers.calendar.empty.description": "Plan a meeting, event or task to fill your week.",
286
+ "customers.calendar.empty.month": "Nothing scheduled this month",
287
+ "customers.calendar.empty.week": "Nothing scheduled this week",
288
+ "customers.calendar.errors.loadFailed": "Failed to load calendar events.",
289
+ "customers.calendar.errors.retry": "Retry",
290
+ "customers.calendar.footer.timezone": "Timezone: {timezone}",
291
+ "customers.calendar.grid.allDay": "All day",
292
+ "customers.calendar.grid.conflictCount": "1 conflict",
293
+ "customers.calendar.grid.conflictsCount": "{count} conflicts",
294
+ "customers.calendar.grid.more": "+{count} more",
295
+ "customers.calendar.grid.nextDay": "Next day",
296
+ "customers.calendar.grid.nonWorking": "Non-working day",
297
+ "customers.calendar.grid.onPlatform": "on {platform}",
298
+ "customers.calendar.grid.previousDay": "Previous day",
299
+ "customers.calendar.grid.untitled": "Untitled",
300
+ "customers.calendar.grid.venue": "Venue: {name}",
301
+ "customers.calendar.header.titleAgenda": "Upcoming",
302
+ "customers.calendar.header.titleDay": "{date}",
303
+ "customers.calendar.header.titleMonth": "{date}",
304
+ "customers.calendar.loading": "Loading calendar…",
183
305
  "customers.calendar.locale": "en",
306
+ "customers.calendar.nav.title": "Calendar",
184
307
  "customers.calendar.nextWeek": "Next week",
308
+ "customers.calendar.notice.truncated": "Showing first {count} items for this range.",
309
+ "customers.calendar.peek.attendee": "1 attendee",
310
+ "customers.calendar.peek.attendees": "{count} attendees",
311
+ "customers.calendar.peek.edit": "Edit",
312
+ "customers.calendar.peek.join": "Join",
313
+ "customers.calendar.platform.meet": "Meet",
314
+ "customers.calendar.platform.slack": "Slack",
315
+ "customers.calendar.platform.teams": "Teams",
316
+ "customers.calendar.platform.zoom": "Zoom",
317
+ "customers.calendar.platformFull.meet": "Google Meet",
318
+ "customers.calendar.platformFull.slack": "Slack",
319
+ "customers.calendar.platformFull.teams": "Microsoft Teams",
320
+ "customers.calendar.platformFull.zoom": "Zoom",
185
321
  "customers.calendar.previousWeek": "Previous week",
322
+ "customers.calendar.settings.activityTypes": "Activity Types",
323
+ "customers.calendar.settings.activityTypesHint": "The activity types your calendar surfaces when creating an event. Seeded from your workspace dictionary.",
324
+ "customers.calendar.settings.addCategory": "Add a category…",
325
+ "customers.calendar.settings.addType": "Add a type…",
326
+ "customers.calendar.settings.aiSummaries": "AI summaries & quick actions",
327
+ "customers.calendar.settings.cancel": "Cancel",
328
+ "customers.calendar.settings.close": "Close",
329
+ "customers.calendar.settings.conflictScope": "Conflict scope",
330
+ "customers.calendar.settings.conflictScopeAll": "All org meetings",
331
+ "customers.calendar.settings.conflictScopeHint": "Choose whose overlaps the calendar flags as conflicts.",
332
+ "customers.calendar.settings.conflictScopeMine": "My meetings only",
333
+ "customers.calendar.settings.conflictWarnings": "Conflict warnings",
334
+ "customers.calendar.settings.eventCategories": "Event Categories",
335
+ "customers.calendar.settings.eventCategoriesHint": "Your own grouping labels (e.g. Team Meeting, Sales Call). Offered when creating an event.",
336
+ "customers.calendar.settings.max": "(max. {count})",
337
+ "customers.calendar.settings.save": "Save Changes",
338
+ "customers.calendar.settings.saved": "Calendar settings saved",
339
+ "customers.calendar.settings.showCrmActivities": "Show CRM activities on calendar",
340
+ "customers.calendar.settings.showWeekends": "Show weekends",
341
+ "customers.calendar.settings.subtitle": "Customise your calendar module.",
342
+ "customers.calendar.settings.title": "Customization",
343
+ "customers.calendar.shortcuts.agenda": "Agenda",
344
+ "customers.calendar.shortcuts.dayView": "Day view",
345
+ "customers.calendar.shortcuts.description": "Navigate the calendar faster with these keys.",
346
+ "customers.calendar.shortcuts.help": "Shortcuts",
347
+ "customers.calendar.shortcuts.month": "Month",
348
+ "customers.calendar.shortcuts.newEvent": "New event",
349
+ "customers.calendar.shortcuts.search": "Search",
350
+ "customers.calendar.shortcuts.title": "Keyboard shortcuts",
351
+ "customers.calendar.shortcuts.today": "Today",
352
+ "customers.calendar.shortcuts.week": "Week",
353
+ "customers.calendar.tabs.all": "All Scheduled",
354
+ "customers.calendar.tabs.events": "Events",
355
+ "customers.calendar.tabs.meetings": "Meetings",
186
356
  "customers.calendar.thisWeek": "This week",
187
357
  "customers.calendar.tomorrow": "Tomorrow",
358
+ "customers.calendar.toolbar.filters.allOwners": "All owners",
359
+ "customers.calendar.toolbar.filters.allStatuses": "All statuses",
360
+ "customers.calendar.toolbar.filters.apply": "Apply",
361
+ "customers.calendar.toolbar.filters.clear": "Clear",
362
+ "customers.calendar.toolbar.filters.label": "Filter",
363
+ "customers.calendar.toolbar.filters.owner": "Owner",
364
+ "customers.calendar.toolbar.filters.status": "Status",
365
+ "customers.calendar.toolbar.filters.statuses.canceled": "Canceled",
366
+ "customers.calendar.toolbar.filters.statuses.done": "Done",
367
+ "customers.calendar.toolbar.filters.statuses.planned": "Planned",
368
+ "customers.calendar.toolbar.filters.types": "Type",
369
+ "customers.calendar.toolbar.presetLabel": "Date range preset",
370
+ "customers.calendar.toolbar.presetPlaceholder": "Custom range",
371
+ "customers.calendar.toolbar.presets.next30": "Next 30 days",
372
+ "customers.calendar.toolbar.presets.next7": "Next 7 days",
373
+ "customers.calendar.toolbar.presets.thisMonth": "This month",
374
+ "customers.calendar.toolbar.presets.thisWeek": "This week",
375
+ "customers.calendar.toolbar.searchPlaceholder": "Search events…",
376
+ "customers.calendar.toolbar.settings": "Calendar settings",
377
+ "customers.calendar.toolbar.today": "Today",
378
+ "customers.calendar.views.agenda": "Agenda",
379
+ "customers.calendar.views.day": "Day",
380
+ "customers.calendar.views.label": "Calendar view",
381
+ "customers.calendar.views.month": "Month",
382
+ "customers.calendar.views.week": "Week",
188
383
  "customers.changelog.actions.assign": "Assign",
189
384
  "customers.changelog.actions.create": "Create",
190
385
  "customers.changelog.actions.delete": "Delete",