adserver-dashboard 1.0.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 (525) hide show
  1. package/.ci/staging.yml +191 -0
  2. package/.dockerignore +117 -0
  3. package/.env +40 -0
  4. package/.env.staging +38 -0
  5. package/.gitlab-ci.yml +16 -0
  6. package/DEMO_STATUS.md +579 -0
  7. package/Dockerfile +61 -0
  8. package/Influence-MW-AdServer-12-02-2026/client/index.html +17 -0
  9. package/Influence-MW-AdServer-12-02-2026/client/public/favicon.png +0 -0
  10. package/Influence-MW-AdServer-12-02-2026/client/src/App.tsx +91 -0
  11. package/Influence-MW-AdServer-12-02-2026/client/src/components/advanced-map-drawer.tsx +1131 -0
  12. package/Influence-MW-AdServer-12-02-2026/client/src/components/ai-recommendation-panel.tsx +379 -0
  13. package/Influence-MW-AdServer-12-02-2026/client/src/components/app-sidebar.tsx +183 -0
  14. package/Influence-MW-AdServer-12-02-2026/client/src/components/auto-optimize-button.tsx +184 -0
  15. package/Influence-MW-AdServer-12-02-2026/client/src/components/availability-drawer.tsx +385 -0
  16. package/Influence-MW-AdServer-12-02-2026/client/src/components/brand-insights-panel.tsx +87 -0
  17. package/Influence-MW-AdServer-12-02-2026/client/src/components/create-agency-drawer.tsx +198 -0
  18. package/Influence-MW-AdServer-12-02-2026/client/src/components/create-brand-drawer.tsx +275 -0
  19. package/Influence-MW-AdServer-12-02-2026/client/src/components/creative-assignment.tsx +526 -0
  20. package/Influence-MW-AdServer-12-02-2026/client/src/components/data-table-toolbar.tsx +148 -0
  21. package/Influence-MW-AdServer-12-02-2026/client/src/components/data-table.tsx +158 -0
  22. package/Influence-MW-AdServer-12-02-2026/client/src/components/filter-drawer.tsx +356 -0
  23. package/Influence-MW-AdServer-12-02-2026/client/src/components/form-insights-panel.tsx +82 -0
  24. package/Influence-MW-AdServer-12-02-2026/client/src/components/geography-selector.tsx +699 -0
  25. package/Influence-MW-AdServer-12-02-2026/client/src/components/header-user-menu.tsx +178 -0
  26. package/Influence-MW-AdServer-12-02-2026/client/src/components/history-drawer.tsx +313 -0
  27. package/Influence-MW-AdServer-12-02-2026/client/src/components/inventory-availability-section.tsx +176 -0
  28. package/Influence-MW-AdServer-12-02-2026/client/src/components/inventory-format-drawer.tsx +173 -0
  29. package/Influence-MW-AdServer-12-02-2026/client/src/components/inventory-selector.tsx +401 -0
  30. package/Influence-MW-AdServer-12-02-2026/client/src/components/manual-inventory-drawer.tsx +368 -0
  31. package/Influence-MW-AdServer-12-02-2026/client/src/components/mapbox-map.tsx +368 -0
  32. package/Influence-MW-AdServer-12-02-2026/client/src/components/market-insights-panel.tsx +202 -0
  33. package/Influence-MW-AdServer-12-02-2026/client/src/components/media-owner-drawer.tsx +217 -0
  34. package/Influence-MW-AdServer-12-02-2026/client/src/components/metric-card.tsx +58 -0
  35. package/Influence-MW-AdServer-12-02-2026/client/src/components/page-header.tsx +27 -0
  36. package/Influence-MW-AdServer-12-02-2026/client/src/components/player-status-indicator.tsx +137 -0
  37. package/Influence-MW-AdServer-12-02-2026/client/src/components/poi-targeting-drawer.tsx +298 -0
  38. package/Influence-MW-AdServer-12-02-2026/client/src/components/recommendation-score-badge.tsx +102 -0
  39. package/Influence-MW-AdServer-12-02-2026/client/src/components/recommended-inventories-panel.tsx +248 -0
  40. package/Influence-MW-AdServer-12-02-2026/client/src/components/searchable-combobox.tsx +134 -0
  41. package/Influence-MW-AdServer-12-02-2026/client/src/components/signal-visualizations.tsx +407 -0
  42. package/Influence-MW-AdServer-12-02-2026/client/src/components/status-badge.tsx +35 -0
  43. package/Influence-MW-AdServer-12-02-2026/client/src/components/theme-provider.tsx +73 -0
  44. package/Influence-MW-AdServer-12-02-2026/client/src/components/theme-toggle.tsx +37 -0
  45. package/Influence-MW-AdServer-12-02-2026/client/src/components/traffic-slider.tsx +75 -0
  46. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/accordion.tsx +56 -0
  47. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/alert-dialog.tsx +139 -0
  48. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/alert.tsx +59 -0
  49. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/aspect-ratio.tsx +5 -0
  50. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/avatar.tsx +51 -0
  51. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/badge.tsx +38 -0
  52. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/breadcrumb.tsx +115 -0
  53. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/button.tsx +62 -0
  54. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/calendar.tsx +68 -0
  55. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/card.tsx +85 -0
  56. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/carousel.tsx +260 -0
  57. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/chart.tsx +365 -0
  58. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/checkbox.tsx +28 -0
  59. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/collapsible.tsx +11 -0
  60. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/command.tsx +151 -0
  61. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/context-menu.tsx +198 -0
  62. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/dialog.tsx +122 -0
  63. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/drawer.tsx +118 -0
  64. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/dropdown-menu.tsx +198 -0
  65. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/form.tsx +178 -0
  66. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/hover-card.tsx +29 -0
  67. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/input-otp.tsx +69 -0
  68. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/input.tsx +23 -0
  69. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/label.tsx +24 -0
  70. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/menubar.tsx +256 -0
  71. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/navigation-menu.tsx +128 -0
  72. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/pagination.tsx +117 -0
  73. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/popover.tsx +29 -0
  74. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/progress.tsx +28 -0
  75. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/radio-group.tsx +42 -0
  76. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/resizable.tsx +45 -0
  77. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/scroll-area.tsx +46 -0
  78. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/select.tsx +160 -0
  79. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/separator.tsx +29 -0
  80. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/sheet.tsx +140 -0
  81. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/sidebar.tsx +727 -0
  82. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/skeleton.tsx +15 -0
  83. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/slider.tsx +26 -0
  84. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/switch.tsx +27 -0
  85. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/table.tsx +117 -0
  86. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/tabs.tsx +53 -0
  87. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/textarea.tsx +22 -0
  88. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/toast.tsx +127 -0
  89. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/toaster.tsx +33 -0
  90. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/toggle-group.tsx +61 -0
  91. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/toggle.tsx +43 -0
  92. package/Influence-MW-AdServer-12-02-2026/client/src/components/ui/tooltip.tsx +30 -0
  93. package/Influence-MW-AdServer-12-02-2026/client/src/components/vendor-stores-modal.tsx +336 -0
  94. package/Influence-MW-AdServer-12-02-2026/client/src/components/venue-type-drawer.tsx +359 -0
  95. package/Influence-MW-AdServer-12-02-2026/client/src/components/venue-type-selector.tsx +436 -0
  96. package/Influence-MW-AdServer-12-02-2026/client/src/hooks/use-mobile.tsx +19 -0
  97. package/Influence-MW-AdServer-12-02-2026/client/src/hooks/use-toast.ts +191 -0
  98. package/Influence-MW-AdServer-12-02-2026/client/src/index.css +244 -0
  99. package/Influence-MW-AdServer-12-02-2026/client/src/lib/queryClient.ts +57 -0
  100. package/Influence-MW-AdServer-12-02-2026/client/src/lib/utils.ts +39 -0
  101. package/Influence-MW-AdServer-12-02-2026/client/src/lib/venue-taxonomy.ts +532 -0
  102. package/Influence-MW-AdServer-12-02-2026/client/src/main.tsx +5 -0
  103. package/Influence-MW-AdServer-12-02-2026/client/src/pages/assign-creative.tsx +781 -0
  104. package/Influence-MW-AdServer-12-02-2026/client/src/pages/content-hub.tsx +995 -0
  105. package/Influence-MW-AdServer-12-02-2026/client/src/pages/custom-pois.tsx +431 -0
  106. package/Influence-MW-AdServer-12-02-2026/client/src/pages/dashboard.tsx +620 -0
  107. package/Influence-MW-AdServer-12-02-2026/client/src/pages/deal-detail.tsx +1062 -0
  108. package/Influence-MW-AdServer-12-02-2026/client/src/pages/deal-form.tsx +1570 -0
  109. package/Influence-MW-AdServer-12-02-2026/client/src/pages/deals.tsx +716 -0
  110. package/Influence-MW-AdServer-12-02-2026/client/src/pages/edit-creative-assignment.tsx +1051 -0
  111. package/Influence-MW-AdServer-12-02-2026/client/src/pages/geotargeting.tsx +675 -0
  112. package/Influence-MW-AdServer-12-02-2026/client/src/pages/integrations.tsx +425 -0
  113. package/Influence-MW-AdServer-12-02-2026/client/src/pages/line-item-creatives.tsx +622 -0
  114. package/Influence-MW-AdServer-12-02-2026/client/src/pages/line-item-form.tsx +3132 -0
  115. package/Influence-MW-AdServer-12-02-2026/client/src/pages/line-items.tsx +530 -0
  116. package/Influence-MW-AdServer-12-02-2026/client/src/pages/not-found.tsx +21 -0
  117. package/Influence-MW-AdServer-12-02-2026/client/src/pages/proof-of-play-upload.tsx +479 -0
  118. package/Influence-MW-AdServer-12-02-2026/client/src/pages/proof-of-play.tsx +880 -0
  119. package/Influence-MW-AdServer-12-02-2026/client/src/pages/reports.tsx +235 -0
  120. package/Influence-MW-AdServer-12-02-2026/client/src/pages/settings.tsx +652 -0
  121. package/Influence-MW-AdServer-12-02-2026/client/src/pages/signal-form.tsx +1117 -0
  122. package/Influence-MW-AdServer-12-02-2026/client/src/pages/signals.tsx +366 -0
  123. package/Influence-MW-AdServer-12-02-2026/client/src/pages/tags.tsx +332 -0
  124. package/Influence-MW-AdServer-12-02-2026/client/src/pages/venues.tsx +381 -0
  125. package/Influence-MW-AdServer-12-02-2026/client/src/types/mapbox-gl-draw.d.ts +37 -0
  126. package/Influence-MW-AdServer-12-02-2026/client/src/types/react-simple-maps.d.ts +57 -0
  127. package/Influence-MW-AdServer-12-02-2026/components.json +20 -0
  128. package/Influence-MW-AdServer-12-02-2026/docs/PRD.md +3373 -0
  129. package/Influence-MW-AdServer-12-02-2026/docs/influence-feature-mapping.csv +498 -0
  130. package/Influence-MW-AdServer-12-02-2026/drizzle.config.ts +14 -0
  131. package/Influence-MW-AdServer-12-02-2026/package-lock.json +9672 -0
  132. package/Influence-MW-AdServer-12-02-2026/package.json +118 -0
  133. package/Influence-MW-AdServer-12-02-2026/postcss.config.js +6 -0
  134. package/Influence-MW-AdServer-12-02-2026/replit.md +91 -0
  135. package/Influence-MW-AdServer-12-02-2026/script/build.ts +67 -0
  136. package/Influence-MW-AdServer-12-02-2026/scripts/create-miro-diagrams.cjs +318 -0
  137. package/Influence-MW-AdServer-12-02-2026/scripts/create-remaining-diagrams.cjs +270 -0
  138. package/Influence-MW-AdServer-12-02-2026/server/index.ts +103 -0
  139. package/Influence-MW-AdServer-12-02-2026/server/recommendation-service.ts +319 -0
  140. package/Influence-MW-AdServer-12-02-2026/server/routes.ts +1890 -0
  141. package/Influence-MW-AdServer-12-02-2026/server/static.ts +19 -0
  142. package/Influence-MW-AdServer-12-02-2026/server/storage.ts +2058 -0
  143. package/Influence-MW-AdServer-12-02-2026/server/vite.ts +58 -0
  144. package/Influence-MW-AdServer-12-02-2026/shared/schema.ts +1595 -0
  145. package/Influence-MW-AdServer-12-02-2026/tailwind.config.ts +107 -0
  146. package/Influence-MW-AdServer-12-02-2026/tsconfig.json +23 -0
  147. package/Influence-MW-AdServer-12-02-2026/vite.config.ts +40 -0
  148. package/LINE_ITEM_BUDGET_FIELD_MAPPING.md +178 -0
  149. package/PCM/.env.example +92 -0
  150. package/PCM/README.md +558 -0
  151. package/PCM/docs/TEST_CASES.md +422 -0
  152. package/PCM/index.js +106 -0
  153. package/PCM/package-lock.json +3282 -0
  154. package/PCM/package.json +32 -0
  155. package/PCM/replit.md +64 -0
  156. package/PCM/schema.sql +495 -0
  157. package/PCM/scripts/export-schema.js +183 -0
  158. package/PCM/scripts/seed-comprehensive.js +631 -0
  159. package/PCM/scripts/seed-production.js +477 -0
  160. package/PCM/src/config/db.js +56 -0
  161. package/PCM/src/config/swagger.js +5975 -0
  162. package/PCM/src/dto/EmailRequestDTO.js +166 -0
  163. package/PCM/src/middleware/errorHandler.js +52 -0
  164. package/PCM/src/middleware/logger.js +26 -0
  165. package/PCM/src/migrations/001_add_campaign_mode_fields.sql +36 -0
  166. package/PCM/src/migrations/002_create_deal_id_counters.sql +22 -0
  167. package/PCM/src/migrations/003_update_publishers_column.sql +15 -0
  168. package/PCM/src/migrations/004_add_direct_dealtype_and_advertiser.sql +5 -0
  169. package/PCM/src/migrations/005_add_programmatic_fields_and_update_enums.sql +31 -0
  170. package/PCM/src/migrations/006_add_line_item_programmatic_fields.sql +12 -0
  171. package/PCM/src/migrations/007_add_line_item_direct_fields.sql +15 -0
  172. package/PCM/src/migrations/008_add_inventory_fields.sql +45 -0
  173. package/PCM/src/migrations/009_move_inventory_fields_to_metadata.sql +32 -0
  174. package/PCM/src/migrations/010_add_draft_status_and_line_items_count.sql +23 -0
  175. package/PCM/src/migrations/011_add_planning_field.sql +21 -0
  176. package/PCM/src/migrations/012_fix_inventory_composite_pk.sql +17 -0
  177. package/PCM/src/migrations/013_make_external_id_optional.sql +3 -0
  178. package/PCM/src/migrations/014_create_change_history.sql +38 -0
  179. package/PCM/src/migrations/016_create_publisher_insertion_orders.sql +33 -0
  180. package/PCM/src/migrations/017_fix_line_item_id_fk_reference.sql +86 -0
  181. package/PCM/src/migrations/018_create_approval_tables.sql +44 -0
  182. package/PCM/src/migrations/019_add_encrypted_token_column.sql +2 -0
  183. package/PCM/src/migrations/020_add_rejection_reason_to_deals.sql +10 -0
  184. package/PCM/src/migrations/021_add_publisher_external_id_to_inventories.sql +12 -0
  185. package/PCM/src/migrations/022_add_line_item_extended_fields.sql +24 -0
  186. package/PCM/src/migrations/023_add_base_price_fields.sql +8 -0
  187. package/PCM/src/migrations/run-migrations.js +46 -0
  188. package/PCM/src/models/ApprovalOTP.js +51 -0
  189. package/PCM/src/models/ApprovalToken.js +79 -0
  190. package/PCM/src/models/ChangeHistory.js +107 -0
  191. package/PCM/src/models/Deal.js +186 -0
  192. package/PCM/src/models/DealIdCounter.js +28 -0
  193. package/PCM/src/models/LineItem.js +227 -0
  194. package/PCM/src/models/LineItemCreative.js +89 -0
  195. package/PCM/src/models/LineItemInventory.js +115 -0
  196. package/PCM/src/models/PublisherInsertionOrder.js +93 -0
  197. package/PCM/src/models/TransactionHistory.js +34 -0
  198. package/PCM/src/models/associations.js +81 -0
  199. package/PCM/src/routes/approval.js +321 -0
  200. package/PCM/src/routes/creatives.js +437 -0
  201. package/PCM/src/routes/deals.js +1638 -0
  202. package/PCM/src/routes/digitalSignage.js +242 -0
  203. package/PCM/src/routes/insertionOrders.js +380 -0
  204. package/PCM/src/routes/lineItems.js +926 -0
  205. package/PCM/src/routes/system.js +384 -0
  206. package/PCM/src/services/ApprovalService.js +885 -0
  207. package/PCM/src/services/CampaignImportConverter.js +631 -0
  208. package/PCM/src/services/CampaignModeService.js +273 -0
  209. package/PCM/src/services/CampaignStatusService.js +395 -0
  210. package/PCM/src/services/ChangeHistoryService.js +316 -0
  211. package/PCM/src/services/DealIdService.js +94 -0
  212. package/PCM/src/services/DealResponseFormatter.js +90 -0
  213. package/PCM/src/services/EmailNotificationService.js +315 -0
  214. package/PCM/src/services/LineItemResponseFormatter.js +122 -0
  215. package/PCM/src/services/LineItemStatusService.js +380 -0
  216. package/PCM/src/tests/comprehensiveTestRunner.js +360 -0
  217. package/PCM/src/tests/comprehensiveTests.js +1277 -0
  218. package/PCM/src/tests/dealTypeUnitTests.js +1058 -0
  219. package/PCM/src/tests/testRunner.js +248 -0
  220. package/PCM/src/utils/caseConverter.js +92 -0
  221. package/PCM/src/utils/dealCalculations.js +206 -0
  222. package/PCM/src/utils/lineItemPayloadNormalizer.js +41 -0
  223. package/PCM/src/utils/payloadNormalizer.js +34 -0
  224. package/PCM/src/utils/sourceNormalizer.js +56 -0
  225. package/PCM/src/validators/creativeValidator.js +27 -0
  226. package/PCM/src/validators/dealValidator.js +203 -0
  227. package/PCM/src/validators/lineItemValidator.js +489 -0
  228. package/PCM/tests/approval-flows.test.js +238 -0
  229. package/PCM/tests/approval-workflow.test.js +291 -0
  230. package/PCM/tests/campaign-import-converter.test.js +543 -0
  231. package/PCM/tests/campaign-import-e2e.test.js +520 -0
  232. package/PCM/tests/campaign-status.test.js +539 -0
  233. package/PCM/tests/direct-publisher-split-reimport.test.js +460 -0
  234. package/PCM/tests/e2e/digital-signage.test.js +145 -0
  235. package/PCM/tests/e2e/search-filter-pagination.test.js +399 -0
  236. package/PCM/tests/e2e-comprehensive.test.js +3446 -0
  237. package/PCM/tests/edge-cases.test.js +340 -0
  238. package/PCM/tests/line-item-status.test.js +340 -0
  239. package/PCM/tests/seller-account-external-ids.test.js +877 -0
  240. package/PCM/tests/source-validation.test.js +324 -0
  241. package/PRD.md +3373 -0
  242. package/README.md +186 -0
  243. package/client/index.html +35 -0
  244. package/client/public/DEMO_STATUS.md +579 -0
  245. package/client/public/img/MW-logo-trans_1754045676555.png +0 -0
  246. package/client/public/locales/ar/approval.json +144 -0
  247. package/client/public/locales/ar/buyer.json +61 -0
  248. package/client/public/locales/ar/campaigns.json +1 -0
  249. package/client/public/locales/ar/common.json +218 -0
  250. package/client/public/locales/ar/contentHub.json +266 -0
  251. package/client/public/locales/ar/creatives.json +79 -0
  252. package/client/public/locales/ar/dashboard.json +57 -0
  253. package/client/public/locales/ar/deals.json +886 -0
  254. package/client/public/locales/ar/dsp.json +131 -0
  255. package/client/public/locales/ar/inventory.json +201 -0
  256. package/client/public/locales/ar/lineItems.json +553 -0
  257. package/client/public/locales/ar/navigation.json +48 -0
  258. package/client/public/locales/ar/wizard.json +1 -0
  259. package/client/public/locales/en/approval.json +144 -0
  260. package/client/public/locales/en/buyer.json +65 -0
  261. package/client/public/locales/en/campaigns.json +1 -0
  262. package/client/public/locales/en/common.json +218 -0
  263. package/client/public/locales/en/contentHub.json +266 -0
  264. package/client/public/locales/en/creatives.json +79 -0
  265. package/client/public/locales/en/dashboard.json +57 -0
  266. package/client/public/locales/en/deals.json +886 -0
  267. package/client/public/locales/en/dsp.json +131 -0
  268. package/client/public/locales/en/inventory.json +201 -0
  269. package/client/public/locales/en/lineItems.json +659 -0
  270. package/client/public/locales/en/navigation.json +48 -0
  271. package/client/public/locales/en/wizard.json +1 -0
  272. package/client/public/locales/ja/approval.json +144 -0
  273. package/client/public/locales/ja/buyer.json +61 -0
  274. package/client/public/locales/ja/campaigns.json +1 -0
  275. package/client/public/locales/ja/common.json +218 -0
  276. package/client/public/locales/ja/contentHub.json +266 -0
  277. package/client/public/locales/ja/creatives.json +79 -0
  278. package/client/public/locales/ja/dashboard.json +57 -0
  279. package/client/public/locales/ja/deals.json +886 -0
  280. package/client/public/locales/ja/dsp.json +131 -0
  281. package/client/public/locales/ja/inventory.json +201 -0
  282. package/client/public/locales/ja/lineItems.json +553 -0
  283. package/client/public/locales/ja/navigation.json +48 -0
  284. package/client/public/locales/ja/wizard.json +1 -0
  285. package/client/public/locales/zh/approval.json +144 -0
  286. package/client/public/locales/zh/buyer.json +61 -0
  287. package/client/public/locales/zh/campaigns.json +1 -0
  288. package/client/public/locales/zh/common.json +218 -0
  289. package/client/public/locales/zh/contentHub.json +266 -0
  290. package/client/public/locales/zh/creatives.json +79 -0
  291. package/client/public/locales/zh/dashboard.json +57 -0
  292. package/client/public/locales/zh/deals.json +886 -0
  293. package/client/public/locales/zh/dsp.json +131 -0
  294. package/client/public/locales/zh/inventory.json +201 -0
  295. package/client/public/locales/zh/lineItems.json +553 -0
  296. package/client/public/locales/zh/navigation.json +48 -0
  297. package/client/public/locales/zh/wizard.json +1 -0
  298. package/client/public/manifest.json +36 -0
  299. package/client/src/App.tsx +464 -0
  300. package/client/src/components/app-sidebar.tsx +312 -0
  301. package/client/src/components/approval/approval-decision-form.test.tsx +294 -0
  302. package/client/src/components/approval/approval-decision-form.tsx +326 -0
  303. package/client/src/components/approval/approval-sheet.tsx +631 -0
  304. package/client/src/components/approval/line-item-details-sheet.tsx +371 -0
  305. package/client/src/components/approval/otp-verification.test.tsx +337 -0
  306. package/client/src/components/approval/otp-verification.tsx +180 -0
  307. package/client/src/components/content-hub/bulk-transcode-dialog.tsx +379 -0
  308. package/client/src/components/content-hub/content-hub-manager-v2.tsx +574 -0
  309. package/client/src/components/content-hub/content-hub-manager.tsx +330 -0
  310. package/client/src/components/content-hub/creative-card.tsx +456 -0
  311. package/client/src/components/content-hub/creative-detail-sheet.tsx +685 -0
  312. package/client/src/components/content-hub/creative-filters.tsx +457 -0
  313. package/client/src/components/content-hub/creative-grid.tsx +329 -0
  314. package/client/src/components/content-hub/creative-selector.tsx +415 -0
  315. package/client/src/components/content-hub/creative-upload.tsx +547 -0
  316. package/client/src/components/content-hub/folder-dialogs.tsx +445 -0
  317. package/client/src/components/content-hub/folder-list.tsx +280 -0
  318. package/client/src/components/content-hub/review-dialogs.tsx +268 -0
  319. package/client/src/components/content-hub/transcode-dialog.tsx +226 -0
  320. package/client/src/components/creative-library/creative-details-view.tsx +446 -0
  321. package/client/src/components/creative-library/creative-filters-panel.tsx +203 -0
  322. package/client/src/components/creative-library/creative-list.tsx +360 -0
  323. package/client/src/components/creative-library/creative-status-badge.tsx +71 -0
  324. package/client/src/components/creative-library/folder-card.tsx +78 -0
  325. package/client/src/components/creative-library/index.ts +27 -0
  326. package/client/src/components/creative-library/new-creative-card.tsx +211 -0
  327. package/client/src/components/creative-library/upload-creative-dialog.tsx +261 -0
  328. package/client/src/components/dashboard-overview.tsx +109 -0
  329. package/client/src/components/deals/approval-history-panel.test.tsx +240 -0
  330. package/client/src/components/deals/approval-history-panel.tsx +156 -0
  331. package/client/src/components/deals/deal-status-badge.tsx +92 -0
  332. package/client/src/components/deals/import-from-planner-dialog.tsx +399 -0
  333. package/client/src/components/deals/market-insights-panel.tsx +237 -0
  334. package/client/src/components/deals/reopen-deal-sheet.tsx +191 -0
  335. package/client/src/components/deals/request-approval-sheet.test.tsx +323 -0
  336. package/client/src/components/deals/request-approval-sheet.tsx +136 -0
  337. package/client/src/components/deals/resend-approval-sheet.tsx +201 -0
  338. package/client/src/components/direct-campaigns/campaign-card.tsx +283 -0
  339. package/client/src/components/direct-campaigns/deal-filter-panel.tsx +325 -0
  340. package/client/src/components/inventory/advanced-filters-panel.tsx +273 -0
  341. package/client/src/components/inventory/csv-upload-modal.tsx +639 -0
  342. package/client/src/components/inventory/inventory-availability-view.tsx +486 -0
  343. package/client/src/components/inventory/inventory-details-sheet.tsx +376 -0
  344. package/client/src/components/inventory/inventory-map-view.tsx +596 -0
  345. package/client/src/components/inventory/inventory-settings-menu.tsx +52 -0
  346. package/client/src/components/language-switcher.tsx +53 -0
  347. package/client/src/components/line-items/campaign-forecast-panel.tsx +138 -0
  348. package/client/src/components/line-items/form-insights.tsx +89 -0
  349. package/client/src/components/line-items/geofencing/LocationCsvUploadDrawer.tsx +100 -0
  350. package/client/src/components/line-items/geofencing/POIDropdown.tsx +379 -0
  351. package/client/src/components/line-items/geofencing/SelectedLocationsSidebar.tsx +436 -0
  352. package/client/src/components/line-items/geofencing/ViewFileLocationDrawer.tsx +199 -0
  353. package/client/src/components/line-items/geofencing/components/ExistingFilesTab.tsx +268 -0
  354. package/client/src/components/line-items/geofencing/components/TemplateDownloadSection.tsx +59 -0
  355. package/client/src/components/line-items/geofencing/components/UploadTab.tsx +215 -0
  356. package/client/src/components/line-items/geofencing-map.tsx +1270 -0
  357. package/client/src/components/line-items/inventory-availability-section.tsx +178 -0
  358. package/client/src/components/line-items/line-item-schedule-manager.tsx +313 -0
  359. package/client/src/components/line-items/manual-inventory-drawer.tsx +346 -0
  360. package/client/src/components/line-items/planner-inventory-card.tsx +495 -0
  361. package/client/src/components/line-items/planner-schedule-grid.tsx +495 -0
  362. package/client/src/components/line-items/schedule-rule-editor.tsx +649 -0
  363. package/client/src/components/line-items/schedule-rule-types.ts +122 -0
  364. package/client/src/components/line-items/steps/creatives-step.tsx +681 -0
  365. package/client/src/components/line-items/steps/inventory-schedule-step.tsx +1596 -0
  366. package/client/src/components/line-items/steps/inventory-step.tsx +1533 -0
  367. package/client/src/components/line-items/steps/line-item-details-step.tsx +916 -0
  368. package/client/src/components/line-items/steps/schedule-step.tsx +273 -0
  369. package/client/src/components/line-items/steps/summary-step.tsx +680 -0
  370. package/client/src/components/line-items/steps/targeting-step.tsx +1708 -0
  371. package/client/src/components/product-switcher.tsx +105 -0
  372. package/client/src/components/protected-route.tsx +49 -0
  373. package/client/src/components/skip-link.tsx +22 -0
  374. package/client/src/components/stat-card.tsx +53 -0
  375. package/client/src/components/status-badge.tsx +96 -0
  376. package/client/src/components/ui/hierarchical-venue-selector.tsx +389 -0
  377. package/client/src/components/ui/toaster.tsx +111 -0
  378. package/client/src/contexts/auth-context.tsx +181 -0
  379. package/client/src/contexts/sidebar-state.tsx +50 -0
  380. package/client/src/contexts/theme-context.tsx +66 -0
  381. package/client/src/data/campaign-data.json +107 -0
  382. package/client/src/data/countries.json +22 -0
  383. package/client/src/hooks/use-approval.ts +366 -0
  384. package/client/src/hooks/use-keyboard-shortcuts.ts +74 -0
  385. package/client/src/hooks/use-media-query.ts +46 -0
  386. package/client/src/hooks/use-mobile.tsx +19 -0
  387. package/client/src/hooks/use-page-title.ts +21 -0
  388. package/client/src/hooks/use-toast.ts +195 -0
  389. package/client/src/index.css +694 -0
  390. package/client/src/lib/__tests__/accessibility.test.ts +104 -0
  391. package/client/src/lib/__tests__/date-utils.test.ts +199 -0
  392. package/client/src/lib/__tests__/dsp-buyer-api.test.ts +127 -0
  393. package/client/src/lib/__tests__/dsp-buyer-integration.test.ts +247 -0
  394. package/client/src/lib/__tests__/storage-utils.test.ts +167 -0
  395. package/client/src/lib/__tests__/utils.test.ts +57 -0
  396. package/client/src/lib/accessibility.ts +141 -0
  397. package/client/src/lib/api-config.ts +9 -0
  398. package/client/src/lib/auth-service.ts +209 -0
  399. package/client/src/lib/campaign-creative-api.ts +82 -0
  400. package/client/src/lib/company-api.ts +61 -0
  401. package/client/src/lib/content-hub-api.ts +407 -0
  402. package/client/src/lib/creative-mapper.ts +61 -0
  403. package/client/src/lib/date-utils.ts +119 -0
  404. package/client/src/lib/deal-helpers.ts +220 -0
  405. package/client/src/lib/dsp-buyer-api.ts +196 -0
  406. package/client/src/lib/geo-import-api.ts +151 -0
  407. package/client/src/lib/google-poi-api.ts +305 -0
  408. package/client/src/lib/i18n/__tests__/formatting.test.ts +202 -0
  409. package/client/src/lib/i18n/formatting.ts +130 -0
  410. package/client/src/lib/i18n/index.ts +8 -0
  411. package/client/src/lib/i18n-compat.ts +76 -0
  412. package/client/src/lib/influence-deals-api.ts +896 -0
  413. package/client/src/lib/inventory-api.ts +399 -0
  414. package/client/src/lib/oauth-service.ts +678 -0
  415. package/client/src/lib/poi-types.ts +75 -0
  416. package/client/src/lib/queryClient.ts +144 -0
  417. package/client/src/lib/recommendation-api.ts +380 -0
  418. package/client/src/lib/storage-utils.ts +104 -0
  419. package/client/src/lib/tolgee.ts +85 -0
  420. package/client/src/lib/utils.ts +0 -0
  421. package/client/src/main.tsx +67 -0
  422. package/client/src/mapbox-draw-modes.d.ts +32 -0
  423. package/client/src/pages/all-folders.tsx +203 -0
  424. package/client/src/pages/auth-callback.tsx +115 -0
  425. package/client/src/pages/buyer-form.tsx +339 -0
  426. package/client/src/pages/buyer-list.tsx +622 -0
  427. package/client/src/pages/content-hub.tsx +1358 -0
  428. package/client/src/pages/create-deal.tsx +2093 -0
  429. package/client/src/pages/creative-assignment-page.tsx +548 -0
  430. package/client/src/pages/creatives.tsx +5 -0
  431. package/client/src/pages/custom-pois.tsx +425 -0
  432. package/client/src/pages/dashboard.tsx +615 -0
  433. package/client/src/pages/deal-history.tsx +434 -0
  434. package/client/src/pages/deal-line-items.tsx +1703 -0
  435. package/client/src/pages/demo-status.tsx +113 -0
  436. package/client/src/pages/direct-campaign-details.tsx +361 -0
  437. package/client/src/pages/direct-campaigns-new.tsx +824 -0
  438. package/client/src/pages/dsp-form.tsx +803 -0
  439. package/client/src/pages/dsp-list.tsx +239 -0
  440. package/client/src/pages/folder-content.tsx +336 -0
  441. package/client/src/pages/integrations.tsx +429 -0
  442. package/client/src/pages/line-item-creatives.tsx +789 -0
  443. package/client/src/pages/line-item-detail-page.tsx +684 -0
  444. package/client/src/pages/line-item-form-page.tsx +3261 -0
  445. package/client/src/pages/line-item-wizard.tsx +1207 -0
  446. package/client/src/pages/login.tsx +154 -0
  447. package/client/src/pages/not-found.tsx +23 -0
  448. package/client/src/pages/proof-of-play.tsx +397 -0
  449. package/client/src/pages/public-approval.tsx +551 -0
  450. package/client/src/pages/reports.tsx +231 -0
  451. package/client/src/pages/settings.tsx +760 -0
  452. package/client/src/pages/signals.tsx +389 -0
  453. package/client/src/pages/tags.tsx +318 -0
  454. package/client/src/pages/test-results.tsx +328 -0
  455. package/client/src/store/hooks.ts +5 -0
  456. package/client/src/store/index.ts +15 -0
  457. package/client/src/store/mapMarkerLocationsSlice.ts +241 -0
  458. package/client/src/styles/design-tokens.css +324 -0
  459. package/client/src/test/setup.ts +261 -0
  460. package/client/src/test/test-utils.tsx +40 -0
  461. package/client/src/types/approval.ts +221 -0
  462. package/client/src/types/content-hub.ts +209 -0
  463. package/client/src/types/geofencing.ts +67 -0
  464. package/client/src/types/transcoding.ts +140 -0
  465. package/client/src/vite-env.d.ts +18 -0
  466. package/components.json +20 -0
  467. package/creative-api.json +1 -0
  468. package/docs/AI_REFERENCE.md +459 -0
  469. package/docs/MWDesign-Prompt.md +132 -0
  470. package/docs/MWDesign-System.md +344 -0
  471. package/docs/test-plan.md +277 -0
  472. package/e2e/AUTONOMOUS-TESTING.md +406 -0
  473. package/e2e/README.md +219 -0
  474. package/e2e/autonomous-flow.spec.ts +308 -0
  475. package/e2e/debug-sso.spec.ts +163 -0
  476. package/e2e/direct-campaigns.spec.ts +219 -0
  477. package/e2e/explore-sso.spec.ts +149 -0
  478. package/e2e/fixtures/auth.ts +26 -0
  479. package/e2e/fixtures/enhanced-test.ts +331 -0
  480. package/e2e/pagination.spec.ts +280 -0
  481. package/e2e/view-toggle.spec.ts +312 -0
  482. package/generated-icon.png +0 -0
  483. package/i18next-scanner.config.cjs +46 -0
  484. package/package.json +141 -0
  485. package/playwright.config.ts +93 -0
  486. package/postcss.config.js +6 -0
  487. package/replit.md +196 -0
  488. package/screenshot-after-login.png +0 -0
  489. package/screenshot-contenthub-grid.png +0 -0
  490. package/screenshot-contenthub-list-fixed.png +0 -0
  491. package/screenshot-contenthub-list.png +0 -0
  492. package/screenshot-create-deal.png +0 -0
  493. package/screenshot-dashboard.png +0 -0
  494. package/screenshot-deals.png +0 -0
  495. package/screenshot-login-filled.png +0 -0
  496. package/screenshot-login.png +0 -0
  497. package/screenshot.mjs +24 -0
  498. package/scripts/deploy-stg.sh +185 -0
  499. package/shared/direct-io-schema.ts +383 -0
  500. package/shared/schema.ts +439 -0
  501. package/shared/screen-types.ts +149 -0
  502. package/springdocDefault.json +1 -0
  503. package/swagger-ui-bundle.js +2 -0
  504. package/swagger-ui-init.js +10316 -0
  505. package/tailwind.config.ts +282 -0
  506. package/terraform/README.md +306 -0
  507. package/terraform/cloudfront.tf +289 -0
  508. package/terraform/ecs.tf +727 -0
  509. package/terraform/environments/dev.tfvars +59 -0
  510. package/terraform/environments/production.tfvars +60 -0
  511. package/terraform/main.tf +47 -0
  512. package/terraform/outputs.tf +145 -0
  513. package/terraform/s3.tf +192 -0
  514. package/terraform/variables.tf +226 -0
  515. package/terraform/waf.tf +165 -0
  516. package/terraform-frontend/.terraform.lock.hcl +25 -0
  517. package/terraform-frontend/README.md +85 -0
  518. package/terraform-frontend/cloudfront.tf +125 -0
  519. package/terraform-frontend/main.tf +31 -0
  520. package/terraform-frontend/outputs.tf +24 -0
  521. package/terraform-frontend/terraform.tfvars +12 -0
  522. package/terraform-frontend/variables.tf +53 -0
  523. package/tsconfig.json +23 -0
  524. package/vite.config.ts +226 -0
  525. package/vitest.config.ts +56 -0
@@ -0,0 +1,144 @@
1
+ {
2
+ "pageTitle": "الموافقة على الصفقة",
3
+ "header": {
4
+ "adServer": "AdServer",
5
+ "campaignId": "CID"
6
+ },
7
+ "errors": {
8
+ "invalidLink": "رابط غير صالح",
9
+ "invalidLinkMessage": "رابط الموافقة يفتقد رمزاً مطلوباً. يرجى التحقق من بريدك الإلكتروني للحصول على الرابط الصحيح.",
10
+ "linkExpired": "انتهت صلاحية الرابط",
11
+ "linkExpiredMessage": "انتهت صلاحية رابط الموافقة هذا. يرجى الاتصال بمالك الحملة للحصول على رابط جديد.",
12
+ "invalidLinkTitle": "رابط غير صالح",
13
+ "invalidLinkDescription": "رابط الموافقة هذا غير صالح. يرجى التحقق من بريدك الإلكتروني للحصول على الرابط الصحيح.",
14
+ "error": "خطأ",
15
+ "campaignNotFound": "لم يتم العثور على الحملة",
16
+ "campaignNotFoundMessage": "لم يتم العثور على الحملة المرتبطة بهذا الرابط.",
17
+ "failedToSubmit": "فشل الإرسال. يرجى المحاولة مرة أخرى."
18
+ },
19
+ "loading": {
20
+ "campaignDetails": "جاري تحميل تفاصيل الحملة..."
21
+ },
22
+ "status": {
23
+ "approved": "تمت الموافقة",
24
+ "rejected": "مرفوض",
25
+ "pending": "قيد الانتظار"
26
+ },
27
+ "actions": {
28
+ "approve": "موافقة",
29
+ "reject": "رفض",
30
+ "approveRequest": "الموافقة على الطلب",
31
+ "rejectRequest": "رفض الطلب",
32
+ "close": "إغلاق",
33
+ "cancel": "إلغاء",
34
+ "submit": "إرسال"
35
+ },
36
+ "campaign": {
37
+ "brand": "العلامة التجارية",
38
+ "flightDates": "تواريخ العرض",
39
+ "impressions": "مرات الظهور",
40
+ "budget": "الميزانية",
41
+ "dayCap": "الحد اليومي",
42
+ "country": "البلد"
43
+ },
44
+ "lineItems": {
45
+ "title": "تفاصيل البند",
46
+ "serialNo": "الرقم التسلسلي",
47
+ "lineItem": "البند",
48
+ "lineItemId": "معرف البند",
49
+ "inventory": "المخزون",
50
+ "flightDate": "تاريخ العرض",
51
+ "impression": "الظهور",
52
+ "budget": "الميزانية",
53
+ "actions": "الإجراءات",
54
+ "publisher": "الناشر",
55
+ "inventories": "المخزونات",
56
+ "duration": "المدة",
57
+ "resolutions": "الدقة"
58
+ },
59
+ "tabs": {
60
+ "inventory": "المخزون",
61
+ "schedule": "الجدول",
62
+ "creatives": "الإبداعات"
63
+ },
64
+ "schedule": {
65
+ "pacingConfiguration": "تكوين السرعة",
66
+ "type": "النوع",
67
+ "dailyCap": "الحد اليومي",
68
+ "hourlyCap": "الحد بالساعة",
69
+ "scheduleRule": "قاعدة الجدول",
70
+ "days": "الأيام",
71
+ "hours": "الساعات",
72
+ "validityPeriod": "فترة الصلاحية",
73
+ "noScheduleRules": "لم يتم تحديد قواعد الجدول"
74
+ },
75
+ "inventoryDetails": {
76
+ "noInventories": "لم يتم العثور على مخزون"
77
+ },
78
+ "creatives": {
79
+ "noCreatives": "لم يتم تعيين إبداعات",
80
+ "creative": "إبداع"
81
+ },
82
+ "otp": {
83
+ "verifyIdentity": "تحقق من هويتك",
84
+ "verifyDescription": "سنرسل رمز تحقق لمرة واحدة إلى بريدك الإلكتروني لتأكيد هويتك.",
85
+ "emailAddress": "عنوان البريد الإلكتروني",
86
+ "sendOtp": "إرسال رمز التحقق",
87
+ "sending": "جاري الإرسال...",
88
+ "enterCode": "أدخل رمز التحقق",
89
+ "codeSentTo": "لقد أرسلنا رمزاً من 6 أرقام إلى",
90
+ "resendIn": "إعادة الإرسال خلال",
91
+ "resendCode": "إعادة إرسال الرمز",
92
+ "attemptsRemaining": "محاولة متبقية {{count}}",
93
+ "attemptsRemaining_plural": "محاولات متبقية {{count}}",
94
+ "verifyOtp": "تحقق من الرمز",
95
+ "verifying": "جاري التحقق...",
96
+ "requestOtp": "طلب رمز التحقق",
97
+ "enter6DigitOtp": "أدخل رمز التحقق المكون من 6 أرقام",
98
+ "resendOtp": "إعادة إرسال رمز التحقق",
99
+ "resendOtpIn": "إعادة إرسال رمز التحقق خلال {{seconds}} ثانية",
100
+ "verify": "تحقق",
101
+ "otpRequired": "يرجى التحقق من هويتك باستخدام رمز التحقق قبل اتخاذ القرار."
102
+ },
103
+ "decision": {
104
+ "makeDecision": "اتخذ قرارك",
105
+ "decisionSubmitted": "تم إرسال القرار",
106
+ "decisionRecorded": "تم تسجيل القرار",
107
+ "identityVerification": "التحقق من الهوية",
108
+ "confirmApproval": "تأكيد الموافقة",
109
+ "confirmRejection": "تأكيد الرفض",
110
+ "identityVerified": "تم التحقق من الهوية",
111
+ "canMakeDecision": "يمكنك الآن اتخاذ قرار الموافقة.",
112
+ "dealApproved": "تمت الموافقة على الصفقة",
113
+ "dealRejected": "تم رفض الصفقة",
114
+ "alreadyApproved": "لقد وافقت بالفعل على هذه الصفقة.",
115
+ "alreadyRejected": "لقد رفضت بالفعل هذه الصفقة.",
116
+ "alreadySubmitted": "تم الإرسال بالفعل",
117
+ "successMessage": "تم إرسال قرارك بنجاح.",
118
+ "decisionAlreadyRecorded": "تم تسجيل قرارك بالفعل لهذه الصفقة.",
119
+ "reviewAndConfirmApproval": "راجع وأكد موافقتك.",
120
+ "provideRejectionReason": "يرجى تقديم سبب الرفض.",
121
+ "reviewAndMakeDecision": "راجع الصفقة واتخذ قرار الموافقة.",
122
+ "verifyToProceed": "تحقق من هويتك للمتابعة في قرارك.",
123
+ "approveCampaign": "الموافقة على الحملة",
124
+ "rejectCampaign": "رفض الحملة",
125
+ "confirmApproveDesc": "هل أنت متأكد من رغبتك في الموافقة على هذه الحملة؟ لا يمكن التراجع عن هذا الإجراء.",
126
+ "approveDesc": "سيتم وضع علامة على الحملة كموافق عليها وسيتم إخطار المالك.",
127
+ "aboutToApprove": "أنت على وشك الموافقة على هذه الصفقة. سيتم إخطار مالك الحملة بقرارك.",
128
+ "pleaseProvideReason": "يرجى تقديم سبب لرفض هذه الصفقة.",
129
+ "rejectDesc": "يرجى تقديم سبب لرفض هذه الحملة. يساعد هذا مالك الحملة على فهم ما يحتاج إلى تغيير.",
130
+ "rejectionReason": "سبب الرفض",
131
+ "rejectionRequired": "سبب الرفض مطلوب للمتابعة.",
132
+ "enterRejectionReason": "أدخل سبب الرفض...",
133
+ "confirming": "جاري الإرسال...",
134
+ "approving": "جاري الموافقة...",
135
+ "rejecting": "جاري الرفض...",
136
+ "confirmApprovalBtn": "تأكيد الموافقة",
137
+ "confirmRejectionBtn": "تأكيد الرفض",
138
+ "approveDeal": "الموافقة على الصفقة",
139
+ "rejectDeal": "رفض الصفقة",
140
+ "campaignApprovedSuccess": "تمت الموافقة على الحملة بنجاح.",
141
+ "campaignRejectedSuccess": "تم رفض الحملة بنجاح.",
142
+ "noFurtherAction": "تم بالفعل {{decision}} هذه الصفقة. لا يلزم اتخاذ أي إجراء آخر."
143
+ }
144
+ }
@@ -0,0 +1,61 @@
1
+ {
2
+ "list": {
3
+ "title": "مشترو DSP",
4
+ "subtitle": "إدارة مشتري DSP بكفاءة",
5
+ "addBuyer": "إضافة DSP - المشترين",
6
+ "searchPlaceholder": "ابحث هنا...",
7
+ "noResults": "لم يتم العثور على مشترين",
8
+ "columns": {
9
+ "sNo": "الرقم",
10
+ "dsp": "DSP",
11
+ "seatId": "معرف المقعد",
12
+ "seatName": "اسم المقعد",
13
+ "buyerAccountId": "معرف حساب المشتري",
14
+ "emailId": "البريد الإلكتروني",
15
+ "actions": "الإجراءات"
16
+ },
17
+ "actions": {
18
+ "editBuyer": "تعديل المشتري",
19
+ "remove": "حذف"
20
+ },
21
+ "pagination": {
22
+ "pageItems": "عناصر الصفحة",
23
+ "of": "من",
24
+ "page": "صفحة"
25
+ },
26
+ "deleteConfirm": {
27
+ "title": "حذف المشتري",
28
+ "message": "هل أنت متأكد من حذف هذا المشتري؟ لا يمكن التراجع عن هذا الإجراء.",
29
+ "cancel": "إلغاء",
30
+ "delete": "حذف"
31
+ },
32
+ "deleteSuccess": "تم حذف المشتري بنجاح"
33
+ },
34
+ "form": {
35
+ "addTitle": "إضافة مشتري جديد",
36
+ "editTitle": "تعديل المشتري",
37
+ "subtitle": "أنشئ المشتري هنا",
38
+ "cancel": "إلغاء",
39
+ "saveBuyer": "حفظ المشتري",
40
+ "saveSuccess": "تم حفظ المشتري بنجاح",
41
+ "fields": {
42
+ "dsp": "DSP",
43
+ "selectDsp": "اختر DSP",
44
+ "seatId": "معرف المقعد",
45
+ "enterSeatId": "أدخل معرف المقعد",
46
+ "seatName": "اسم المقعد",
47
+ "enterSeatName": "أدخل اسم المقعد",
48
+ "buyerAccountId": "معرف حساب المشتري",
49
+ "enterBuyerAccountId": "أدخل معرف حساب المشتري",
50
+ "emailId": "البريد الإلكتروني",
51
+ "enterEmailId": "أدخل البريد الإلكتروني"
52
+ },
53
+ "validation": {
54
+ "dspRequired": "DSP مطلوب",
55
+ "seatIdRequired": "معرف المقعد مطلوب",
56
+ "seatNameRequired": "اسم المقعد مطلوب",
57
+ "buyerAccountIdRequired": "معرف حساب المشتري مطلوب",
58
+ "emailInvalid": "يرجى إدخال عنوان بريد إلكتروني صالح"
59
+ }
60
+ }
61
+ }
@@ -0,0 +1,218 @@
1
+ {
2
+ "accessibility": {
3
+ "closeMenu": "إغلاق القائمة",
4
+ "collapseSection": "طي القسم",
5
+ "expandSection": "توسيع القسم",
6
+ "loaded": "تم تحميل المحتوى",
7
+ "loading": "جاري تحميل المحتوى",
8
+ "notSelected": "غير محدد",
9
+ "openMenu": "فتح القائمة",
10
+ "selected": "محدد",
11
+ "selectLanguage": "اختر اللغة",
12
+ "skipToContent": "انتقل إلى المحتوى الرئيسي",
13
+ "sortAscending": "ترتيب تصاعدي",
14
+ "sortDescending": "ترتيب تنازلي",
15
+ "toggleSidebar": "تبديل الشريط الجانبي",
16
+ "switchProduct": "تبديل المنتج"
17
+ },
18
+ "actions": {
19
+ "add": "إضافة",
20
+ "apply": "تطبيق",
21
+ "archive": "أرشفة",
22
+ "back": "رجوع",
23
+ "cancel": "إلغاء",
24
+ "clear": "مسح",
25
+ "close": "إغلاق",
26
+ "confirm": "تأكيد",
27
+ "copy": "نسخ",
28
+ "create": "إنشاء",
29
+ "delete": "حذف",
30
+ "deselectAll": "إلغاء تحديد الكل",
31
+ "download": "تحميل",
32
+ "duplicate": "تكرار",
33
+ "edit": "تعديل",
34
+ "export": "تصدير",
35
+ "filter": "تصفية",
36
+ "import": "استيراد",
37
+ "loading": "جاري التحميل...",
38
+ "next": "التالي",
39
+ "preview": "معاينة",
40
+ "previous": "السابق",
41
+ "processing": "جاري المعالجة...",
42
+ "refresh": "تحديث",
43
+ "remove": "إزالة",
44
+ "reset": "إعادة تعيين",
45
+ "restore": "استعادة",
46
+ "save": "حفظ",
47
+ "saving": "جاري الحفظ...",
48
+ "search": "بحث",
49
+ "select": "اختيار",
50
+ "selectAll": "تحديد الكل",
51
+ "sort": "ترتيب",
52
+ "submit": "إرسال",
53
+ "upload": "رفع",
54
+ "view": "عرض"
55
+ },
56
+ "app": {
57
+ "copyright": "حقوق النشر @ Movingwalls Pvt Ltd",
58
+ "name": "Influence",
59
+ "tagline": "منصة الإعلانات الرقمية"
60
+ },
61
+ "thisDeal": "هذه الصفقة",
62
+ "messages": {
63
+ "confirmAction": "هل أنت متأكد من المتابعة؟",
64
+ "confirmDelete": "هل أنت متأكد من حذف هذا العنصر؟",
65
+ "createdSuccessfully": "تم الإنشاء بنجاح",
66
+ "deletedSuccessfully": "تم الحذف بنجاح",
67
+ "error": "خطأ",
68
+ "info": "معلومات",
69
+ "invalidFormat": "صيغة غير صالحة",
70
+ "itemCreated": "تم إنشاء {{item}} بنجاح",
71
+ "itemDeleted": "تم حذف {{item}} بنجاح",
72
+ "itemSaved": "تم حفظ {{item}} بنجاح",
73
+ "itemUpdated": "تم تحديث {{item}} بنجاح",
74
+ "networkError": "خطأ في الشبكة. يرجى التحقق من اتصالك.",
75
+ "noData": "لا توجد بيانات",
76
+ "noResults": "لم يتم العثور على نتائج",
77
+ "required": "هذا الحقل مطلوب",
78
+ "savedSuccessfully": "تم الحفظ بنجاح",
79
+ "sessionExpired": "انتهت الجلسة. يرجى تسجيل الدخول مرة أخرى.",
80
+ "success": "نجاح",
81
+ "tryAgain": "يرجى المحاولة مرة أخرى",
82
+ "unauthorized": "غير مصرح لك بتنفيذ هذا الإجراء.",
83
+ "updatedSuccessfully": "تم التحديث بنجاح",
84
+ "warning": "تحذير"
85
+ },
86
+ "pagination": {
87
+ "first": "الأولى",
88
+ "items": "عناصر",
89
+ "last": "الأخيرة",
90
+ "of": "من",
91
+ "page": "صفحة",
92
+ "rowsPerPage": "صفوف لكل صفحة",
93
+ "showingItems": "عرض {{from}} إلى {{to}} من {{total}} عنصر"
94
+ },
95
+ "pwa": {
96
+ "dismiss": "ليس الآن",
97
+ "install": "تثبيت التطبيق",
98
+ "installDescription": "قم بتثبيت Influence للحصول على تجربة أفضل"
99
+ },
100
+ "status": {
101
+ "active": "نشط",
102
+ "approved": "موافق عليه",
103
+ "archived": "مؤرشف",
104
+ "cancelled": "ملغي",
105
+ "completed": "مكتمل",
106
+ "draft": "مسودة",
107
+ "expired": "منتهي الصلاحية",
108
+ "inProgress": "قيد التنفيذ",
109
+ "inactive": "غير نشط",
110
+ "live": "مباشر",
111
+ "maintenance": "صيانة",
112
+ "paused": "متوقف مؤقتاً",
113
+ "pending": "قيد الانتظار",
114
+ "published": "منشور",
115
+ "rejected": "مرفوض",
116
+ "scheduled": "مجدول"
117
+ },
118
+ "time": {
119
+ "dateRange": "نطاق التاريخ",
120
+ "endDate": "تاريخ الانتهاء",
121
+ "from": "من",
122
+ "lastMonth": "الشهر الماضي",
123
+ "lastWeek": "الأسبوع الماضي",
124
+ "lastYear": "العام الماضي",
125
+ "startDate": "تاريخ البدء",
126
+ "thisMonth": "هذا الشهر",
127
+ "thisWeek": "هذا الأسبوع",
128
+ "thisYear": "هذا العام",
129
+ "to": "إلى",
130
+ "today": "اليوم",
131
+ "tomorrow": "غداً",
132
+ "yesterday": "أمس"
133
+ },
134
+ "user": {
135
+ "company": "الشركة",
136
+ "email": "البريد الإلكتروني",
137
+ "login": "تسجيل الدخول",
138
+ "logout": "تسجيل الخروج",
139
+ "name": "الاسم",
140
+ "profile": "الملف الشخصي",
141
+ "reportBug": "الإبلاغ عن خطأ",
142
+ "role": "الدور",
143
+ "settings": "الإعدادات"
144
+ },
145
+ "validation": {
146
+ "dateInFuture": "يجب أن يكون التاريخ في المستقبل",
147
+ "dateInPast": "يجب أن يكون التاريخ في الماضي",
148
+ "email": "يرجى إدخال بريد إلكتروني صالح",
149
+ "endAfterStart": "يجب أن يكون تاريخ الانتهاء بعد تاريخ البدء",
150
+ "max": "{{field}} يجب ألا يتجاوز {{max}}",
151
+ "maxLength": "{{field}} يجب ألا يتجاوز {{max}} حرفاً",
152
+ "min": "{{field}} يجب أن يكون {{min}} على الأقل",
153
+ "minLength": "{{field}} يجب أن يكون {{min}} أحرف على الأقل",
154
+ "number": "يرجى إدخال رقم صالح",
155
+ "positive": "{{field}} يجب أن يكون رقماً موجباً",
156
+ "required": "{{field}} مطلوب",
157
+ "url": "يرجى إدخال رابط صالح"
158
+ },
159
+ "confirmations": {
160
+ "deleteWarning": "هل أنت متأكد من حذف {{item}}؟",
161
+ "cannotUndo": "لا يمكن التراجع عن هذا الإجراء."
162
+ },
163
+ "login": {
164
+ "redirecting": "جاري التوجيه إلى صفحة تسجيل الدخول...",
165
+ "signIn": "تسجيل الدخول",
166
+ "subtitle": "سجل الدخول للوصول إلى منصة إدارة حملات OOH العالمية",
167
+ "signInWithMWID": "تسجيل الدخول باستخدام MW ID",
168
+ "hero": {
169
+ "title": "تحكم في إعلانات OOH الخاصة بك",
170
+ "titleLine2": "في منصة واحدة",
171
+ "description": "منصة تقنية عالمية بناها خبراء OOH. أتمتة التخطيط والشراء والتنفيذ وقياس الحملات في جميع أنحاء العالم.",
172
+ "globalReach": "الوصول العالمي",
173
+ "mediaSites": "أكثر من 500 ألف موقع إعلامي عبر 4 قارات"
174
+ }
175
+ },
176
+ "products": {
177
+ "planner": {
178
+ "name": "المخطط",
179
+ "description": "خطط لحملاتك بفعالية"
180
+ },
181
+ "influence": {
182
+ "name": "Influence",
183
+ "description": "إدارة صفقاتك النشطة بسهولة"
184
+ },
185
+ "inventory": {
186
+ "name": "المخزون",
187
+ "description": "إدارة مخزوناتك"
188
+ },
189
+ "measure": {
190
+ "name": "القياس",
191
+ "description": "تتبع وإدارة بياناتك بسهولة"
192
+ },
193
+ "console": {
194
+ "name": "لوحة التحكم",
195
+ "description": "إدارة حسابك"
196
+ }
197
+ },
198
+ "creatives": {
199
+ "title": "إدارة التصميمات",
200
+ "assignment": "تعيين التصميمات",
201
+ "assignDescription": "قم بتحميل وتعيين أصول التصميم لعنصر الخط الخاص بك",
202
+ "addCreatives": "إضافة تصميمات",
203
+ "creativesCount": "{{count}} تصميم",
204
+ "creativesCount_plural": "{{count}} تصميمات",
205
+ "noCreativesAssigned": "لم يتم تعيين تصميمات",
206
+ "noCreativesDescription": "انقر على \"إضافة تصميمات\" لتعيين أصول التصميم من مكتبة المحتوى",
207
+ "added": "تمت إضافة التصميمات",
208
+ "addedDescription": "تم تعيين التصميمات لعنصر الخط.",
209
+ "errorAdding": "خطأ في إضافة التصميمات",
210
+ "errorAddingDescription": "فشل في إضافة التصميمات",
211
+ "removed": "تمت إزالة التصميم",
212
+ "removedDescription": "تمت إزالة التصميم من عنصر الخط.",
213
+ "errorRemoving": "خطأ في إزالة التصميم",
214
+ "errorRemovingDescription": "فشل في إزالة التصميم",
215
+ "selectTitle": "إضافة تصميمات",
216
+ "selectDescription": "اختر تصميمات من مركز المحتوى لتعيينها لعنصر الخط هذا."
217
+ }
218
+ }