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,886 @@
1
+ {
2
+ "deals": {
3
+ "advertiser": "المعلن",
4
+ "agency": "الوكالة",
5
+ "brand": "العلامة التجارية",
6
+ "budget": "الميزانية",
7
+ "createDeal": "إنشاء صفقة",
8
+ "createFirst": "أنشئ صفقتك الأولى للبدء",
9
+ "currency": "العملة",
10
+ "dealName": "اسم الصفقة",
11
+ "dealType": "نوع الصفقة",
12
+ "deleteConfirm": "هل أنت متأكد من حذف هذه الصفقة؟",
13
+ "deleteWarning": "لا يمكن التراجع عن هذا الإجراء. سيتم أيضاً حذف جميع عناصر الخط المرتبطة.",
14
+ "editDeal": "تعديل الصفقة",
15
+ "endDate": "تاريخ الانتهاء",
16
+ "flightDates": "تواريخ الحملة",
17
+ "noDeal": "لم يتم العثور على صفقات",
18
+ "startDate": "تاريخ البدء",
19
+ "status": "الحالة",
20
+ "subtitle": "إدارة صفقاتك بسهولة وكفاءة",
21
+ "title": "الصفقات"
22
+ },
23
+ "createDeal": {
24
+ "createTitle": "إنشاء صفقة جديدة",
25
+ "updateTitle": "تحديث الصفقة",
26
+ "createSubtitle": "حدد الحاوية التجارية لصفقتك الإعلانية.",
27
+ "updateSubtitle": "تعديل تفاصيل صفقتك الإعلانية.",
28
+ "enterDealName": "أدخل اسم الصفقة",
29
+ "selectBrand": "اختر العلامة التجارية",
30
+ "searchBrands": "البحث عن العلامات التجارية...",
31
+ "loadingBrands": "جاري تحميل العلامات التجارية...",
32
+ "noBrandsFound": "لم يتم العثور على علامات تجارية",
33
+ "typeToEnterBrand": "اكتب لإدخال اسم العلامة التجارية",
34
+ "loading": "جاري التحميل...",
35
+ "loadMore": "تحميل المزيد...",
36
+ "createNewBrand": "إنشاء علامة تجارية جديدة",
37
+ "countries": "الدول",
38
+ "selectCountries": "اختر الدول",
39
+ "goalType": "نوع الهدف",
40
+ "goalValue": "قيمة الهدف",
41
+ "selectGoalType": "اختر نوع الهدف",
42
+ "enterGoalValue": "أدخل قيمة الهدف",
43
+ "impressions": "مرات الظهور",
44
+ "budget": "الميزانية",
45
+ "views": "المشاهدات",
46
+ "clicks": "النقرات",
47
+ "status": "الحالة",
48
+ "selectStatus": "اختر الحالة",
49
+ "mediaType": "نوع الوسائط",
50
+ "selectMediaType": "اختر نوع الوسائط",
51
+ "sspPartner": "شريك SSP",
52
+ "selectSspPartner": "اختر شريك SSP",
53
+ "billable": "قابل للفوترة",
54
+ "billableDescription": "تضمين هذه الصفقة في الفواتير",
55
+ "marketInsights": "رؤى السوق",
56
+ "population": "عدد السكان",
57
+ "availableInventories": "المخزون المتاح",
58
+ "estimatedImpressions": "مرات الظهور المقدرة",
59
+ "mode": "الوضع",
60
+ "traditional": "تقليدي",
61
+ "traditionalDesc": "صفقات مباشرة مع المعلنين",
62
+ "programmatic": "برمجي",
63
+ "programmaticDesc": "شراء آلي قائم على DSP",
64
+ "clientType": "نوع العميل",
65
+ "selectClientType": "اختر نوع العميل",
66
+ "directAdvertiser": "معلن مباشر",
67
+ "selectCurrency": "اختر العملة",
68
+ "currencyForDeal": "العملة لهذه الصفقة",
69
+ "selectAgency": "اختر الوكالة",
70
+ "searchAgencies": "البحث عن الوكالات...",
71
+ "loadingAgencies": "جاري تحميل الوكالات...",
72
+ "noAgenciesFound": "لم يتم العثور على وكالات",
73
+ "approvalEmails": "رسائل الموافقة الإلكترونية",
74
+ "enterEmailAddress": "أدخل عنوان البريد الإلكتروني",
75
+ "add": "إضافة",
76
+ "totalBudget": "الميزانية الإجمالية",
77
+ "enterTotalBudget": "أدخل الميزانية الإجمالية",
78
+ "budgetHelpText": "يتم تكوين حدود الميزانية اليومية والوتيرة على مستوى عنصر الخط",
79
+ "selectDealType": "اختر نوع الصفقة",
80
+ "programmaticType": "نوع برمجي",
81
+ "buyers": "المشترون",
82
+ "dsp": "DSP",
83
+ "seatId": "معرف المقعد",
84
+ "buyerName": "اسم المشتري",
85
+ "addBuyer": "إضافة مشتري",
86
+ "auctionType": "نوع المزاد",
87
+ "selectAuctionType": "اختر نوع المزاد",
88
+ "fixedPriceRequired": "السعر الثابت مطلوب للصفقات المضمونة والمفضلة",
89
+ "transactionType": "نوع المعاملة",
90
+ "selectTransactionType": "اختر نوع المعاملة",
91
+ "costType": "نوع التكلفة",
92
+ "selectCostType": "اختر نوع التكلفة",
93
+ "formInsights": "رؤى النموذج",
94
+ "insightDealName": "يجب أن يكون اسم الصفقة وصفياً وفريداً",
95
+ "insightFlightDates": "يتم حساب تواريخ الحملة تلقائياً من عناصر الخط",
96
+ "insightBrand": "اختيار العلامة التجارية يساعد في توصيات الاستهداف",
97
+ "insightApprovalEmails": "ستتلقى رسائل الموافقة إشعارات للموافقة على الصفقة",
98
+ "insightFixedPrice": "تستخدم الصفقات المضمونة والمفضلة مزاد السعر الثابت",
99
+ "insightCpsNotAvailable": "CPS غير متاح للصفقات المضمونة",
100
+ "quickTips": "نصائح سريعة",
101
+ "tipTraditional": "صفقات مباشرة مع المعلنين أو الوكالات",
102
+ "tipProgrammatic": "شراء آلي قائم على DSP",
103
+ "tipConfigureLineItems": "ستقوم بتكوين عناصر الخط بعد إنشاء الصفقة",
104
+ "cancel": "إلغاء",
105
+ "updating": "جاري التحديث...",
106
+ "creating": "جاري الإنشاء...",
107
+ "successTitle": "تم إنشاء الصفقة بنجاح",
108
+ "successDescription": "جاري إعادة التوجيه إلى عناصر الخط...",
109
+ "errorTitle": "خطأ في إنشاء الصفقة",
110
+ "errorDescription": "فشل إنشاء الصفقة",
111
+ "pleaseWait": "يرجى الانتظار",
112
+ "loadingAgencyData": "جاري تحميل بيانات الوكالة. يرجى المحاولة مرة أخرى بعد قليل.",
113
+ "nonBillable": "غير قابل للفوترة",
114
+ "nonBillableDescription": "تعيين هذه الصفقة على أنها غير قابلة للفوترة",
115
+ "hardStop": "إيقاف صارم",
116
+ "hardStopDescription": "إيقاف التسليم عند الوصول للهدف",
117
+ "country": "البلد",
118
+ "selectCountry": "اختر البلد"
119
+ },
120
+ "updateDeal": {
121
+ "title": "تحديث الصفقة",
122
+ "successTitle": "تم تحديث الصفقة بنجاح",
123
+ "successDescription": "جاري إعادة التوجيه إلى عناصر الخط...",
124
+ "errorTitle": "خطأ في تحديث الصفقة",
125
+ "errorDescription": "فشل تحديث الصفقة"
126
+ },
127
+ "lineItems": {
128
+ "budget": "الميزانية",
129
+ "createFirst": "أنشئ عنصر الخط الأول لهذه الصفقة",
130
+ "createLineItem": "إنشاء عنصر خط",
131
+ "delivery": "التسليم",
132
+ "editLineItem": "تعديل عنصر الخط",
133
+ "endDate": "تاريخ الانتهاء",
134
+ "frequency": "التكرار",
135
+ "impressions": "مرات الظهور",
136
+ "inventories": "المخزون",
137
+ "lineItemName": "اسم عنصر الخط",
138
+ "newLineItem": "عنصر خط جديد",
139
+ "noLineItems": "لم يتم العثور على عناصر خط",
140
+ "pacing": "وتيرة التسليم",
141
+ "priority": "الأولوية",
142
+ "progress": "التقدم",
143
+ "startDate": "تاريخ البدء",
144
+ "subtitle": "إدارة عناصر الخط لـ {{dealName}}",
145
+ "title": "عناصر الخط",
146
+ "totalImpressions": "إجمالي مرات الظهور"
147
+ },
148
+ "pacing": {
149
+ "asap": "في أقرب وقت",
150
+ "description": {
151
+ "asap": "تسليم مرات الظهور في أسرع وقت ممكن",
152
+ "even": "توزيع مرات الظهور بالتساوي طوال الحملة",
153
+ "frontloaded": "تسليم المزيد من مرات الظهور في بداية الحملة"
154
+ },
155
+ "even": "موزع بالتساوي",
156
+ "frontloaded": "محمل مقدماً"
157
+ },
158
+ "summary": {
159
+ "budgetSpent": "الميزانية المنفقة",
160
+ "creatives": "الإبداعات",
161
+ "dealHistory": "سجل الصفقة",
162
+ "dealSummary": "ملخص الصفقة",
163
+ "daysRemaining": "أيام متبقية",
164
+ "inventories": "المخزون",
165
+ "lineItemPerformances": "أداء عناصر الخط",
166
+ "noPacingData": "لا توجد بيانات وتيرة متاحة",
167
+ "overallDelivery": "التسليم الإجمالي"
168
+ },
169
+ "table": {
170
+ "actions": "الإجراءات",
171
+ "lineItem": "عنصر الخط",
172
+ "sno": "الرقم"
173
+ },
174
+ "wizard": {
175
+ "title": "معالج عنصر الخط",
176
+ "steps": {
177
+ "details": "التفاصيل",
178
+ "inventorySchedule": "المخزون والجدول",
179
+ "targeting": "الاستهداف",
180
+ "creatives": "الإبداعات",
181
+ "summary": "الملخص"
182
+ },
183
+ "common": {
184
+ "next": "التالي",
185
+ "back": "رجوع",
186
+ "save": "حفظ",
187
+ "cancel": "إلغاء",
188
+ "saving": "جاري الحفظ...",
189
+ "loading": "جاري التحميل...",
190
+ "searchHere": "ابحث هنا",
191
+ "selectAll": "تحديد الكل",
192
+ "noResults": "لم يتم العثور على نتائج",
193
+ "selected": "محدد",
194
+ "pageItems": "عناصر الصفحة",
195
+ "groupBy": "تجميع حسب",
196
+ "allInventories": "كل المخزون"
197
+ },
198
+ "details": {
199
+ "title": "تفاصيل عنصر الخط",
200
+ "subtitle": "حدد التفاصيل الأساسية لعنصر الخط الخاص بك.",
201
+ "name": "الاسم",
202
+ "lineItemName": "اسم عنصر الخط",
203
+ "enterLineItemName": "أدخل اسم عنصر الخط",
204
+ "flightDates": "تواريخ الحملة",
205
+ "selectFlightDates": "حدد نطاق تواريخ الحملة",
206
+ "creativeType": "نوع الإبداع",
207
+ "selectCreativeType": "اختر نوع الإبداع",
208
+ "display": "عرض",
209
+ "displayDesc": "صور ثابتة ولافتات",
210
+ "video": "فيديو",
211
+ "videoDesc": "محتوى فيديو ورسوم متحركة",
212
+ "audio": "صوت",
213
+ "audioDesc": "إعلانات صوتية",
214
+ "creativeDuration": "مدة الإبداع (ثواني)",
215
+ "durationPlaceholder": "مثال: 10",
216
+ "durationOfPlayback": "مدة تشغيل الإبداع",
217
+ "budgetAmount": "مبلغ الميزانية",
218
+ "enterAmount": "أدخل المبلغ",
219
+ "currencyInherited": "العملة موروثة من الحملة",
220
+ "goalType": "نوع الهدف",
221
+ "selectGoalType": "اختر نوع الهدف",
222
+ "impressions": "مرات الظهور",
223
+ "reach": "الوصول",
224
+ "shareOfVoice": "حصة الصوت",
225
+ "targetValue": "القيمة المستهدفة",
226
+ "enterImpressions": "أدخل عدد مرات الظهور",
227
+ "enterUsers": "أدخل عدد المستخدمين",
228
+ "enterPercentage": "أدخل النسبة المئوية (0-100)",
229
+ "impressionsDesc": "إجمالي عدد مرات الظهور المراد تحقيقها",
230
+ "reachDesc": "عدد المستخدمين الفريدين للوصول إليهم",
231
+ "sovDesc": "نسبة المخزون المتاح (0-100%)",
232
+ "pacing": "وتيرة التسليم",
233
+ "selectPacing": "اختر وتيرة التسليم",
234
+ "pacingAsap": "في أقرب وقت",
235
+ "pacingAsapDesc": "سيتم استخدام الميزانية المخصصة بالكامل لتحقيق الكمية المستهدفة في أقرب وقت ممكن في بداية تاريخ الحملة.",
236
+ "pacingEven": "متساوي (افتراضي)",
237
+ "pacingEvenDesc": "سيتم توزيع الميزانية بالتساوي على مدار فترة الحملة بأكملها.",
238
+ "pacingFrontLoaded": "محمل مقدماً",
239
+ "pacingFrontLoadedDesc": "تخصيص ميزانية أعلى في بداية الحملة، يتناقص تدريجياً نحو النهاية.",
240
+ "pacingBackLoaded": "محمل مؤخراً",
241
+ "pacingBackLoadedDesc": "تخصيص ميزانية أقل في البداية، يزداد تدريجياً نحو نهاية الحملة.",
242
+ "dailyImpressionCap": "الحد الأقصى اليومي للظهور",
243
+ "optionalDailyLimit": "حد يومي اختياري",
244
+ "maxImpressionsPerDay": "الحد الأقصى لمرات الظهور في اليوم",
245
+ "hourlyImpressionCap": "الحد الأقصى للظهور في الساعة",
246
+ "optionalHourlyLimit": "حد ساعي اختياري",
247
+ "maxImpressionsPerHour": "الحد الأقصى لمرات الظهور في الساعة",
248
+ "projectedPacingDelivery": "توقع وتيرة التسليم",
249
+ "pacingGraphTooltip": "يوضح هذا الرسم البياني نمط التسليم المتوقع بناءً على نوع الوتيرة المحدد.",
250
+ "goalPercentage": "نسبة الهدف",
251
+ "numberOfDays": "عدد الأيام",
252
+ "formInsights": "رؤى النموذج",
253
+ "insightName": "أعط عنصر الخط اسماً وصفياً",
254
+ "insightDates": "تحدد تواريخ الحملة متى ستعمل إعلاناتك",
255
+ "insightBudget": "حدد ميزانيتك للتحكم في الإنفاق",
256
+ "insightGoal": "اختر هدفاً يتوافق مع أهداف حملتك",
257
+ "tipPacing": "الوتيرة المتساوية توزع التسليم بالتساوي للتعرض المتسق",
258
+ "tipBudget": "ضع في اعتبارك إجمالي ميزانية الحملة عند تحديد ميزانيات عناصر الخط"
259
+ },
260
+ "inventory": {
261
+ "title": "المخزون",
262
+ "subtitle": "اختر المخزون المناسب",
263
+ "description": "حدد الشاشات وضع الجدول الزمني",
264
+ "screens": "الشاشات",
265
+ "networks": "الشبكات",
266
+ "packages": "الحزم",
267
+ "items": "العناصر",
268
+ "noScreensFound": "لم يتم العثور على شاشات",
269
+ "noNetworksFound": "لم يتم العثور على شبكات",
270
+ "noPackagesFound": "لم يتم العثور على حزم",
271
+ "loadingInventories": "جاري تحميل المخزون...",
272
+ "selectedScreens": "الشاشات المحددة",
273
+ "noScreensSelected": "لم يتم تحديد شاشات",
274
+ "filterByLocation": "تصفية حسب الموقع",
275
+ "filterByVenue": "تصفية حسب نوع المكان",
276
+ "searchScreens": "البحث عن الشاشات...",
277
+ "listView": "عرض القائمة",
278
+ "advancedFilter": "تصفية متقدمة",
279
+ "settings": "الإعدادات",
280
+ "scheduleTitle": "الجدول والتوقعات",
281
+ "flight": "فترة الحملة",
282
+ "schedule": "الجدول",
283
+ "impressions": "مرات الظهور",
284
+ "reach": "الوصول",
285
+ "frequency": "التكرار",
286
+ "adPlays": "تشغيلات الإعلان",
287
+ "sov": "حصة الصوت",
288
+ "cpm": "التكلفة لكل ألف",
289
+ "totalCost": "التكلفة الإجمالية",
290
+ "noInventorySelected": "لم يتم تحديد مخزون",
291
+ "selectInventoryForForecast": "حدد المخزون لرؤية التوقعات"
292
+ },
293
+ "targeting": {
294
+ "title": "خيارات الاستهداف",
295
+ "subtitle": "تكوين استهداف الجمهور والموقع",
296
+ "description": "تكوين استهداف الجمهور والموقع",
297
+ "demographicsTab": "التركيبة السكانية",
298
+ "venueTypesTab": "أنواع الأماكن",
299
+ "geofencingTab": "السياج الجغرافي",
300
+ "signalsTab": "الإشارات",
301
+ "ageGroups": "الفئات العمرية",
302
+ "selectAgeGroups": "حدد الفئات العمرية",
303
+ "genders": "الجنس",
304
+ "selectGenders": "حدد الجنس",
305
+ "male": "ذكر",
306
+ "female": "أنثى",
307
+ "other": "آخر",
308
+ "incomeGroups": "فئات الدخل",
309
+ "selectIncomeGroups": "حدد فئات الدخل",
310
+ "lowIncome": "دخل منخفض",
311
+ "lowerMiddle": "متوسط منخفض",
312
+ "middle": "متوسط",
313
+ "upperMiddle": "متوسط مرتفع",
314
+ "highIncome": "دخل مرتفع",
315
+ "interests": "الاهتمامات",
316
+ "selectInterests": "حدد الاهتمامات",
317
+ "sportsFitness": "الرياضة واللياقة",
318
+ "travel": "السفر",
319
+ "technology": "التكنولوجيا",
320
+ "foodDining": "الطعام والمطاعم",
321
+ "entertainment": "الترفيه",
322
+ "fashion": "الموضة",
323
+ "automotive": "السيارات",
324
+ "audienceBehaviors": "سلوكيات الجمهور",
325
+ "selectBehaviors": "حدد السلوكيات",
326
+ "dailyCommuter": "المتنقل اليومي",
327
+ "frequentShopper": "المتسوق المتكرر",
328
+ "weekendShopper": "المتسوق في عطلة نهاية الأسبوع",
329
+ "tourist": "سائح",
330
+ "student": "طالب",
331
+ "businessProfessional": "محترف أعمال",
332
+ "venueTypes": "أنواع الأماكن",
333
+ "selectVenueTypes": "حدد أنواع الأماكن",
334
+ "loadingVenues": "جاري تحميل أنواع الأماكن...",
335
+ "geofencing": "السياج الجغرافي",
336
+ "addGeofence": "إضافة سياج جغرافي",
337
+ "drawOnMap": "ارسم على الخريطة",
338
+ "uploadLocations": "رفع المواقع",
339
+ "radius": "نصف القطر",
340
+ "includeExclude": "تضمين/استبعاد",
341
+ "includeAll": "تضمين الكل",
342
+ "noLocations": "لم تتم إضافة مواقع",
343
+ "addLocationsHint": "ارسم على الخريطة أو ارفع المواقع لتحديد مناطق السياج الجغرافي",
344
+ "locationName": "اسم الموقع",
345
+ "locationAddress": "العنوان",
346
+ "remove": "إزالة",
347
+ "addPoi": "إضافة نقطة اهتمام",
348
+ "poiTypes": "أنواع نقاط الاهتمام",
349
+ "maxPoisPerLocation": "الحد الأقصى {{max}} نقاط اهتمام لكل موقع",
350
+ "signals": "الإشارات",
351
+ "signalsDescription": "تشغيل الإعلانات بناءً على الظروف في الوقت الفعلي",
352
+ "weather": "الطقس",
353
+ "weatherDescription": "تشغيل الإعلانات بناءً على ظروف الطقس ودرجة الحرارة",
354
+ "traffic": "حركة المرور",
355
+ "trafficDescription": "ضبط التسليم بناءً على كثافة المرور في الوقت الفعلي",
356
+ "airQuality": "مؤشر جودة الهواء",
357
+ "airQualityDescription": "الاستهداف بناءً على مستويات جودة الهواء",
358
+ "timeOfDay": "الوقت من اليوم",
359
+ "timeOfDayDescription": "استهداف الفترات الزمنية (صباحاً، ظهراً، مساءً)",
360
+ "weatherConditions": "ظروف الطقس",
361
+ "temperature": "درجة الحرارة",
362
+ "temperatureMin": "الحد الأدنى للحرارة",
363
+ "temperatureMax": "الحد الأقصى للحرارة",
364
+ "temperatureUnit": "وحدة الحرارة",
365
+ "celsius": "مئوية (°C)",
366
+ "fahrenheit": "فهرنهايت (°F)",
367
+ "trafficDensity": "كثافة المرور",
368
+ "low": "منخفض",
369
+ "moderate": "متوسط",
370
+ "high": "مرتفع",
371
+ "aqiThreshold": "عتبة مؤشر جودة الهواء",
372
+ "good": "جيد",
373
+ "unhealthySensitive": "غير صحي للمجموعات الحساسة",
374
+ "unhealthy": "غير صحي",
375
+ "veryUnhealthy": "غير صحي جداً",
376
+ "hazardous": "خطر",
377
+ "dayparts": "فترات اليوم",
378
+ "morning": "الصباح (6AM-12PM)",
379
+ "afternoon": "بعد الظهر (12PM-6PM)",
380
+ "evening": "المساء (6PM-10PM)",
381
+ "night": "الليل (10PM-6AM)",
382
+ "smartSuggestions": "اقتراحات ذكية",
383
+ "aiPowered": "مدعوم بالذكاء الاصطناعي",
384
+ "basedOnCampaign": "بناءً على بيانات حملتك، نوصي بخيارات الاستهداف هذه",
385
+ "applySuggestions": "تطبيق الاقتراحات",
386
+ "formInsights": "رؤى الاستهداف",
387
+ "insightDemographics": "صقل جمهورك باستخدام الاستهداف الديموغرافي",
388
+ "insightVenues": "اختر أنواع الأماكن التي تتوافق مع جمهورك المستهدف",
389
+ "insightGeofencing": "استخدم السياج الجغرافي للحملات الخاصة بالموقع",
390
+ "insightSignals": "تساعد الإشارات في الوقت الفعلي على الوصول للجمهور في اللحظة المناسبة",
391
+ "tipCombine": "ادمج خيارات استهداف متعددة لدقة أفضل",
392
+ "tipTest": "ابدأ بشكل واسع وصقل بناءً على بيانات الأداء"
393
+ },
394
+ "creatives": {
395
+ "title": "تعيين الإبداعات",
396
+ "subtitle": "اسحب وأفلت أصول الإبداعات إلى عناصر الخط",
397
+ "description": "تعيين الإبداعات لعنصر الخط هذا",
398
+ "assignCreatives": "تعيين الإبداعات",
399
+ "browseLibrary": "تصفح المكتبة",
400
+ "noCreatives": "لم يتم تعيين إبداعات",
401
+ "uploadNew": "رفع جديد",
402
+ "skipStep": "تخطي هذه الخطوة",
403
+ "contentHub": "إبداعات مركز المحتوى",
404
+ "typeOnly": "فقط",
405
+ "showingMatching": "عرض الإبداعات المطابقة لدقة المخزون",
406
+ "allowedResolutions": "الدقات المسموحة",
407
+ "loadingCreatives": "جاري تحميل الإبداعات...",
408
+ "noMatchingCreatives": "لم يتم العثور على إبداعات مطابقة",
409
+ "uploadToStart": "ارفع الملفات للبدء",
410
+ "uploadWithResolution": "ارفع ملفات بالدقات",
411
+ "assignedCreatives": "الإبداعات المعينة",
412
+ "noCreativesAssigned": "لم يتم تعيين إبداعات بعد",
413
+ "dragDropHint": "اسحب وأفلت الإبداعات هنا..",
414
+ "creative": "إبداع",
415
+ "creatives": "الإبداعات",
416
+ "duplicateError": "تم تعيينه بالفعل لعنصر الخط هذا",
417
+ "formInsights": "رؤى الإبداعات",
418
+ "insightMatch": "تم تصفية الإبداعات لتتوافق مع المخزون المحدد",
419
+ "insightResolution": "توافق الدقة يضمن العرض الصحيح",
420
+ "insightMultiple": "عين إبداعات متعددة لاختبار A/B",
421
+ "tipDragDrop": "اسحب الإبداعات من المكتبة إلى منطقة الإفلات",
422
+ "tipClick": "أو انقر على إبداع لتعيينه مباشرة"
423
+ },
424
+ "summary": {
425
+ "title": "مراجعة وإرسال",
426
+ "subtitle": "راجع جميع تفاصيل عنصر الخط قبل الإرسال.",
427
+ "description": "راجع تكوين عنصر الخط الخاص بك",
428
+ "lineItemDetails": "تفاصيل عنصر الخط",
429
+ "name": "الاسم",
430
+ "untitledLineItem": "عنصر خط بدون عنوان",
431
+ "flightDates": "تواريخ الحملة",
432
+ "budget": "الميزانية",
433
+ "goal": "الهدف",
434
+ "pacing": "وتيرة التسليم",
435
+ "dailyCap": "الحد اليومي",
436
+ "hourlyCap": "الحد الساعي",
437
+ "notSet": "غير محدد",
438
+ "targeting": "الاستهداف",
439
+ "noTargetingSet": "لم يتم تعيين استهداف",
440
+ "noTargetingDesc": "لم يتم تكوين معايير الاستهداف. سيستهدف عنصر الخط جميع الجماهير.",
441
+ "ageGroups": "الفئات العمرية",
442
+ "genders": "الجنس",
443
+ "incomeGroups": "فئات الدخل",
444
+ "interests": "الاهتمامات",
445
+ "venueTypes": "أنواع الأماكن",
446
+ "geofencing": "السياج الجغرافي",
447
+ "location": "موقع",
448
+ "locations": "مواقع",
449
+ "signals": "الإشارات",
450
+ "inventories": "المخزون",
451
+ "screen": "شاشة",
452
+ "screens": "شاشات",
453
+ "noInventoriesSelected": "لم يتم تحديد مخزون.",
454
+ "totalScreens": "إجمالي الشاشات",
455
+ "resolutions": "الدقات",
456
+ "selectedScreens": "الشاشات المحددة",
457
+ "more": "المزيد",
458
+ "creatives": "الإبداعات",
459
+ "creative": "إبداع",
460
+ "noCreativesAssigned": "لم يتم تعيين إبداعات.",
461
+ "estimatedReach": "الوصول المقدر",
462
+ "totalBudget": "إجمالي الميزانية",
463
+ "assignedCreatives": "الإبداعات المعينة",
464
+ "targetingSettings": "إعدادات الاستهداف",
465
+ "reviewDetails": "مراجعة التفاصيل"
466
+ }
467
+ },
468
+ "directWizard": {
469
+ "common": {
470
+ "nextStep": "الخطوة التالية",
471
+ "previousStep": "الخطوة السابقة",
472
+ "loading": "جاري التحميل...",
473
+ "saving": "جاري الحفظ...",
474
+ "creating": "جاري الإنشاء...",
475
+ "updating": "جاري التحديث...",
476
+ "creatingCampaign": "جاري إنشاء الحملة...",
477
+ "updatingCampaign": "جاري تحديث الحملة...",
478
+ "createCampaign": "إنشاء حملة",
479
+ "updateCampaign": "تحديث الحملة",
480
+ "optional": "اختياري",
481
+ "required": "مطلوب",
482
+ "searchHere": "ابحث هنا...",
483
+ "createNew": "إنشاء جديد",
484
+ "selectBrand": "اختر العلامة التجارية",
485
+ "selected": "محدد"
486
+ },
487
+ "dealDetails": {
488
+ "title": "تفاصيل الصفقة",
489
+ "subtitle": "حدد الحاوية التجارية لصفقتك.",
490
+ "dealName": "اسم الصفقة",
491
+ "dealNamePlaceholder": "Campaign_Sep_08_2025",
492
+ "flightDates": "تواريخ الحملة",
493
+ "selectFlightDateRange": "حدد نطاق تواريخ الحملة",
494
+ "brand": "العلامة التجارية",
495
+ "clientType": "نوع العميل",
496
+ "directAdvertiser": "معلن مباشر/تقليدي",
497
+ "agency": "وكالة",
498
+ "totalBudget": "الميزانية الإجمالية",
499
+ "enterBudgetAmount": "أدخل مبلغ الميزانية",
500
+ "formInsights": "رؤى النموذج",
501
+ "quickTips": "نصائح سريعة",
502
+ "insightCampaignName": "يجب أن يكون اسم الحملة وصفياً وفريداً",
503
+ "insightFlightDates": "حدد تواريخ حملة واقعية لتوفر مخزون أفضل",
504
+ "insightBrand": "اختيار العلامة التجارية يساعد في توصيات الاستهداف",
505
+ "tipBrandRecommendations": "اختيار العلامة التجارية يساعد في الحصول على توصيات أفضل",
506
+ "tipBudgetNextStep": "يتم تعيين الميزانية والأهداف في الخطوة التالية",
507
+ "tipChangeDetails": "يمكنك دائماً تغيير هذه التفاصيل لاحقاً"
508
+ },
509
+ "campaignDetails": {
510
+ "title": "تفاصيل الصفقة",
511
+ "subtitle": "إعداد معلومات الصفقة",
512
+ "dealName": "اسم الصفقة",
513
+ "dealNamePlaceholder": "Deal_Sep_08_2025",
514
+ "dealType": "نوع الصفقة",
515
+ "selectDealType": "اختر نوع الصفقة",
516
+ "programmaticType": "نوع برمجي",
517
+ "guaranteed": "ضمان برمجي",
518
+ "preferredDeal": "صفقة مفضلة",
519
+ "privateAuction": "مزاد خاص",
520
+ "evergreenPmp": "PMP دائم الخضرة",
521
+ "dealDates": "تواريخ الصفقة",
522
+ "selectDealDateRange": "حدد نطاق تواريخ الصفقة",
523
+ "brand": "العلامة التجارية",
524
+ "brandPlaceholder": "Acme Corp",
525
+ "clientType": "نوع العميل",
526
+ "selectClientType": "اختر نوع العميل",
527
+ "direct": "مباشر",
528
+ "buyer": "مشتري",
529
+ "agency": "وكالة",
530
+ "buyerName": "اسم المشتري",
531
+ "buyerNamePlaceholder": "شركة شراء الوسائط",
532
+ "agencyName": "اسم الوكالة",
533
+ "agencyNamePlaceholder": "وكالة إبداعية م.م.ح",
534
+ "approvalEmails": "رسائل الموافقة",
535
+ "approvalEmailsPlaceholder": "أدخل رسائل جميع الموافقين هنا...",
536
+ "targetCountry": "الدولة المستهدفة",
537
+ "selectCountry": "اختر الدولة",
538
+ "malaysia": "ماليزيا",
539
+ "singapore": "سنغافورة",
540
+ "indonesia": "إندونيسيا",
541
+ "thailand": "تايلاند",
542
+ "philippines": "الفلبين",
543
+ "japan": "اليابان",
544
+ "unitedStates": "الولايات المتحدة",
545
+ "unitedKingdom": "المملكة المتحدة",
546
+ "totalBudget": "الميزانية الإجمالية",
547
+ "enterBudgetAmount": "أدخل مبلغ الميزانية",
548
+ "dailyBudgetCap": "الحد الأقصى للميزانية اليومية",
549
+ "enterDailyBudgetAmount": "أدخل مبلغ الميزانية اليومية"
550
+ },
551
+ "budgetGoal": {
552
+ "title": "الميزانية وأهداف الحملة",
553
+ "subtitle": "حدد ميزانية حملتك وحدد أهداف الأداء",
554
+ "budgetAllocation": "تخصيص الميزانية",
555
+ "country": "الدولة",
556
+ "selectCountry": "اختر الدولة",
557
+ "currency": "العملة",
558
+ "selectCurrency": "اختر العملة",
559
+ "currencyCodeHelp": "رمز العملة ISO 4217",
560
+ "totalBudget": "الميزانية الإجمالية",
561
+ "totalBudgetHelp": "إجمالي ميزانية الحملة بالعملة المحددة",
562
+ "dailyBudget": "الميزانية اليومية",
563
+ "dailyBudgetHelp": "حد الإنفاق اليومي الاختياري",
564
+ "performanceGoals": "أهداف الأداء",
565
+ "goalType": "نوع الهدف",
566
+ "selectGoalType": "اختر نوع الهدف",
567
+ "targetValue": "القيمة المستهدفة",
568
+ "targetValueHelp": "القيمة المستهدفة لنوع الهدف المحدد",
569
+ "optimizationStrategy": "استراتيجية التحسين",
570
+ "nextTargeting": "التالي: الاستهداف"
571
+ },
572
+ "inventories": {
573
+ "title": "المخزون",
574
+ "subtitle": "حدد مخزون اللوحات الإعلانية والشاشات لحملتك",
575
+ "viewSelected": "عرض المحدد",
576
+ "selectedInventories": "المخزون المحدد",
577
+ "campaignInventories": "مخزون الحملة",
578
+ "newlySelected": "المحدد حديثاً",
579
+ "noNewInventoriesSelected": "لم يتم تحديد مخزون جديد",
580
+ "noBillboardsSelected": "لم يتم تحديد لوحات إعلانية",
581
+ "selectAtLeastOne": "يرجى تحديد لوحة إعلانية واحدة على الأقل لحملتك.",
582
+ "inventoryRemoved": "تمت إزالة المخزون",
583
+ "inventoryRemovedDesc": "تمت إزالة المخزون من الحملة.",
584
+ "removeError": "خطأ",
585
+ "removeErrorDesc": "فشل إزالة المخزون. يرجى المحاولة مرة أخرى.",
586
+ "nextSchedule": "التالي: الجدول"
587
+ },
588
+ "schedule": {
589
+ "title": "جدول الحملة",
590
+ "subtitle": "تكوين متى يجب تشغيل حملتك",
591
+ "scheduleType": "نوع الجدول",
592
+ "customWeeklySchedule": "جدول أسبوعي مخصص",
593
+ "presetTemplate": "قالب مسبق",
594
+ "advancedScheduling": "جدولة متقدمة",
595
+ "apply247": "تطبيق 24/7",
596
+ "applyBusinessHours": "تطبيق ساعات العمل",
597
+ "presetNotImplemented": "الجداول المسبقة غير متاحة بعد. يرجى اختيار 'جدول أسبوعي مخصص'.",
598
+ "advancedNotImplemented": "الجدولة المتقدمة غير متاحة بعد. يرجى اختيار 'جدول أسبوعي مخصص'.",
599
+ "enableAtLeastOneDay": "يرجى تمكين يوم واحد على الأقل في الجدول.",
600
+ "atLeastOneHourRequired": "يجب تحديد ساعة واحدة على الأقل للأيام المفعلة",
601
+ "presetTemplateHelp": "سيتوفر اختيار القالب المسبق في التكوين المتقدم.",
602
+ "advancedSchedulingHelp": "ستتوفر الجدولة المتقدمة مع القواعد الموسمية والمشغلات القائمة على الأحداث في التكوين المتقدم.",
603
+ "nextCreatives": "التالي: الإبداعات",
604
+ "monday": "الاثنين",
605
+ "tuesday": "الثلاثاء",
606
+ "wednesday": "الأربعاء",
607
+ "thursday": "الخميس",
608
+ "friday": "الجمعة",
609
+ "saturday": "السبت",
610
+ "sunday": "الأحد"
611
+ },
612
+ "pacing": {
613
+ "title": "الخطوة 7 — الوتيرة والتسليم",
614
+ "subtitle": "تحكم في كيفية توزيع ميزانية حملتك ومرات الظهور عبر الوقت. حدد قواعد الوتيرة لمواءمة التسليم مع توفر الشاشة والفترات الزمنية.",
615
+ "pacingStrategy": "استراتيجية الوتيرة",
616
+ "even": "متساوي (افتراضي)",
617
+ "evenDesc": "توزيع مرات الظهور بالتساوي طوال الحملة",
618
+ "asap": "في أقرب وقت",
619
+ "asapDesc": "التسليم بأسرع ما يمكن (تعظيم الوصول بسرعة)",
620
+ "frontLoaded": "محمل مقدماً",
621
+ "frontLoadedDesc": "تركيز التسليم في بداية الحملة",
622
+ "backLoaded": "محمل مؤخراً",
623
+ "backLoadedDesc": "بناء الزخم نحو نهاية الحملة",
624
+ "timeOfDayAware": "مدرك للوقت",
625
+ "timeOfDayAwareDesc": "ضبط الوتيرة بناءً على أداء الفترة الزمنية",
626
+ "custom": "مخصص",
627
+ "customDesc": "حدد منحنى التسليم الخاص بك",
628
+ "pacingControls": "ضوابط الوتيرة",
629
+ "dailyBudgetCap": "الحد الأقصى للميزانية اليومية",
630
+ "hourlyImpressionLimit": "حد مرات الظهور في الساعة",
631
+ "respectDayparts": "احترام الفترات الزمنية",
632
+ "maxDeviation": "الحد الأقصى للانحراف %",
633
+ "projectedDelivery": "التسليم المتوقع",
634
+ "autoAdjustments": "التعديلات التلقائية",
635
+ "enable": "تمكين",
636
+ "autoAdjustmentPlaceholder": "مثال: إذا التسليم < 50% → زيادة 20%",
637
+ "autoAdjustmentHelp": "حدد تعديلات الوتيرة التلقائية بناءً على أداء التسليم",
638
+ "nextReview": "التالي ← المراجعة"
639
+ },
640
+ "targeting": {
641
+ "title": "خيارات الاستهداف",
642
+ "targetingRecommendations": "توصيات الاستهداف",
643
+ "basedOnCampaign": "بناءً على تفاصيل حملتك، نوصي بخيارات الاستهداف التالية",
644
+ "apply": "تطبيق",
645
+ "demographicsVenue": "التركيبة السكانية والمكان",
646
+ "geofencing": "السياج الجغرافي",
647
+ "signals": "الإشارات",
648
+ "ageGroups": "الفئات العمرية",
649
+ "genders": "الجنس",
650
+ "incomeBrackets": "شرائح الدخل",
651
+ "interests": "الاهتمامات",
652
+ "audienceBehaviors": "سلوكيات الجمهور",
653
+ "venueTypes": "أنواع الأماكن",
654
+ "showMore": "عرض المزيد",
655
+ "showLess": "عرض أقل",
656
+ "geofencingLocations": "مواقع السياج الجغرافي",
657
+ "drawOnMap": "ارسم على الخريطة",
658
+ "uploadCsv": "رفع CSV",
659
+ "defaultRadius": "نصف القطر الافتراضي",
660
+ "km": "كم",
661
+ "locations": "المواقع",
662
+ "locationsAdded": "موقع مضاف",
663
+ "noLocations": "لم تتم إضافة مواقع",
664
+ "drawOrUpload": "ارسم على الخريطة أو ارفع المواقع لتحديد مناطق السياج الجغرافي",
665
+ "signalsTitle": "الاستهداف القائم على الإشارات",
666
+ "addSignal": "إضافة إشارة",
667
+ "searchSignals": "البحث عن الإشارات...",
668
+ "weatherTriggers": "مشغلات الطقس",
669
+ "searchBehavior": "سلوك البحث",
670
+ "footfallPatterns": "أنماط حركة المشاة",
671
+ "timeBased": "قائم على الوقت",
672
+ "targetingPreview": "معاينة الاستهداف",
673
+ "estimatedReach": "الوصول المقدر",
674
+ "impressionPotential": "إمكانية الظهور",
675
+ "nextPacing": "التالي: الوتيرة"
676
+ },
677
+ "creatives": {
678
+ "title": "أصول الإبداع (اختياري)",
679
+ "subtitle": "ارفع إبداعك في مركز المحتوى وعين تنسيق الإبداع الصحيح وفقاً لمتطلبات الإبداع",
680
+ "assignCreative": "تعيين إبداع",
681
+ "noCreativesAssigned": "لم يتم تعيين إبداعات",
682
+ "noCreativesHint": "ارفع إبداعك في مركز المحتوى وعين تنسيق الإبداع الصحيح وفقاً لمتطلبات الإبداع",
683
+ "uploadNew": "رفع جديد",
684
+ "chooseExisting": "اختر موجود",
685
+ "manualEntry": "إدخال يدوي",
686
+ "assignCreativeTitle": "تعيين إبداع",
687
+ "selectMethodHint": "اختر طريقة لتعيين الإبداعات",
688
+ "chooseExistingTitle": "اختر موجود",
689
+ "chooseExistingSubtitle": "ابحث واختر الإبداعات من مكتبة الوسائط الخاصة بك",
690
+ "manualEntryTitle": "إدخال يدوي",
691
+ "manualEntrySubtitle": "اختر إعلاناً قائماً على URL، يدعم URL الديناميكي أو المحتوى الثابت",
692
+ "name": "الاسم",
693
+ "namePlaceholder": "اسم الإعلان",
694
+ "assetUrl": "رابط الأصل",
695
+ "assetUrlPlaceholder": "الرابط حيث يستضاف الإعلان",
696
+ "thumbnailUrl": "رابط الصورة المصغرة (اختياري)",
697
+ "thumbnailUrlPlaceholder": "https://cdn.example.com/thumb.jpg",
698
+ "length": "المدة",
699
+ "seconds": "ثواني",
700
+ "orientation": "الاتجاه",
701
+ "cancel": "إلغاء",
702
+ "saveAndAddCreative": "حفظ وإضافة الإبداع",
703
+ "nameRequired": "الاسم مطلوب",
704
+ "pleaseEnterName": "يرجى إدخال اسم الإبداع.",
705
+ "assetUrlRequired": "رابط الأصل مطلوب",
706
+ "pleaseEnterAssetUrl": "يرجى إدخال رابط الأصل.",
707
+ "invalidUrl": "رابط غير صالح",
708
+ "pleaseEnterValidUrl": "يرجى إدخال رابط أصل صالح.",
709
+ "creativeAdded": "تمت إضافة الإبداع",
710
+ "creativeAddedDesc": "تمت إضافة الإبداع إلى الحملة.",
711
+ "creativesAssigned": "تم تعيين الإبداعات",
712
+ "creativesAssignedDesc": "تم تعيين {{count}} إبداع(ات) للحملة.",
713
+ "noValidCreatives": "لا توجد إبداعات صالحة",
714
+ "noValidCreativesDesc": "الإبداعات المحددة تفتقر إلى الحقول المطلوبة (رابط الأصل). يرجى رفع الملفات أولاً.",
715
+ "someCreativesSkipped": "تم تخطي بعض الإبداعات",
716
+ "someCreativesSkippedDesc": "تم تخطي {{count}} إبداع(ات) لأنها تفتقر إلى رابط الأصل. يرجى رفع الملفات أولاً.",
717
+ "uploadedAndAssigned": "تم رفع الإبداع وتعيينه",
718
+ "uploadedAndAssignedDesc": "تمت إضافة الإبداع بنجاح إلى الحملة.",
719
+ "removeConfirm": "هل أنت متأكد من إزالة هذا الإبداع؟"
720
+ },
721
+ "validate": {
722
+ "title": "المراجعة والتحقق",
723
+ "subtitle": "راجع نتائج التحقق وقم بتفعيل صفقتك.",
724
+ "dealDates": "تواريخ الصفقة",
725
+ "budget": "الميزانية",
726
+ "goal": "الهدف",
727
+ "impressions": "مرات الظهور",
728
+ "validation": "التحقق",
729
+ "pass": "نجاح",
730
+ "warning": "تحذير",
731
+ "error": "خطأ",
732
+ "validationChecks": "فحوصات التحقق",
733
+ "flightDates": "تواريخ الحملة",
734
+ "datesValid": "تواريخ الصفقة صالحة",
735
+ "startDatePast": "تاريخ البدء في الماضي",
736
+ "budgetAllocation": "تخصيص الميزانية",
737
+ "budgetValid": "ميزانيات عناصر الخط لا تتجاوز إجمالي الصفقة",
738
+ "budgetExceeds": "ميزانيات عناصر الخط تتجاوز إجمالي الصفقة",
739
+ "lineItems": "عناصر الخط",
740
+ "lineItemsConfigured": "تم تكوين {{count}} عنصر(عناصر) خط",
741
+ "inventoryAvailability": "توفر المخزون",
742
+ "inventoryMissing": "بعض عناصر الخط تفتقر إلى المخزون",
743
+ "inventoryAssigned": "تم تعيين المخزون لجميع عناصر الخط",
744
+ "creativeAssignment": "تعيين الإبداع",
745
+ "creativesAssigned": "تم تعيين {{count}} إبداع(ات) لـ {{lineItems}} عنصر(عناصر) خط",
746
+ "noCreativesAssigned": "لم يتم تعيين إبداعات لعناصر الخط",
747
+ "creativeSpecs": "مواصفات الإبداع",
748
+ "allCreativesMeetSpecs": "جميع الإبداعات تلبي المواصفات",
749
+ "creativesPendingApproval": "{{count}} إبداع(ات) بانتظار الموافقة",
750
+ "saveAsDraft": "حفظ كمسودة",
751
+ "activateDeal": "تفعيل الصفقة",
752
+ "activating": "جاري التفعيل...",
753
+ "dayCap": "/يوم حد أقصى"
754
+ },
755
+ "summary": {
756
+ "title": "ملخص الصفقة",
757
+ "subtitle": "راجع تكوين صفقتك قبل المتابعة للتحقق.",
758
+ "advertiser": "المعلن",
759
+ "dealDates": "تواريخ الصفقة",
760
+ "goal": "الهدف",
761
+ "budget": "الميزانية",
762
+ "dayCap": "/يوم حد أقصى",
763
+ "notSet": "غير محدد",
764
+ "lineItems": "عناصر الخط",
765
+ "creatives": "الإبداعات",
766
+ "approved": "معتمد",
767
+ "screensTargeted": "الشاشات المستهدفة",
768
+ "budgetAllocation": "تخصيص الميزانية",
769
+ "lineItemDetails": "تفاصيل عنصر الخط",
770
+ "sno": "رقم",
771
+ "name": "الاسم",
772
+ "inventories": "المخزون",
773
+ "status": "الحالة",
774
+ "impression": "ظهور",
775
+ "planned": "مخطط",
776
+ "noLineItemsConfigured": "لم يتم تكوين عناصر خط",
777
+ "more": "المزيد",
778
+ "lid": "معرف عنصر الخط"
779
+ },
780
+ "validation": {
781
+ "dealNameMinLength": "يجب أن يكون اسم الصفقة 3 أحرف على الأقل",
782
+ "dealNameMaxLength": "يجب ألا يتجاوز اسم الصفقة 100 حرف",
783
+ "startDateRequired": "تاريخ البدء مطلوب",
784
+ "endDateRequired": "تاريخ الانتهاء مطلوب",
785
+ "selectValidClientType": "يرجى اختيار نوع عميل صالح",
786
+ "budgetPositive": "يجب أن تكون الميزانية رقماً موجباً",
787
+ "startDateFuture": "يجب أن يكون تاريخ البدء اليوم أو في المستقبل",
788
+ "endDateAfterStart": "يجب أن يكون تاريخ الانتهاء بعد تاريخ البدء",
789
+ "buyerNameRequired": "اسم المشتري مطلوب لنوع عميل المشتري",
790
+ "agencyNameRequired": "اسم الوكالة مطلوب لنوع عميل الوكالة"
791
+ }
792
+ },
793
+ "importFromPlanner": {
794
+ "title": "اختر صفقة",
795
+ "loading": "جاري تحميل الصفقات...",
796
+ "noDeals": "لا توجد صفقات متاحة للاستيراد",
797
+ "sno": "الرقم",
798
+ "dealName": "اسم الصفقة",
799
+ "brand": "العلامة التجارية",
800
+ "plannedBy": "مخطط بواسطة",
801
+ "flightDates": "تواريخ الحملة",
802
+ "status": "الحالة",
803
+ "inventories": "المخزون",
804
+ "budget": "الميزانية",
805
+ "totalCost": "التكلفة الإجمالية",
806
+ "approved": "معتمد",
807
+ "pending": "قيد الانتظار",
808
+ "rejected": "مرفوض",
809
+ "cid": "معرف الحملة",
810
+ "daysRemaining": "{{remaining}}/{{total}} أيام متبقية",
811
+ "units": "الوحدات",
812
+ "pageItems": "عناصر الصفحة",
813
+ "pageInfo": "الصفحة {{current}} من {{total}}",
814
+ "itemsRange": "{{from}} إلى {{to}} من {{total}}",
815
+ "cancel": "إلغاء",
816
+ "proceed": "متابعة"
817
+ },
818
+ "filters": {
819
+ "title": "فلاتر الصفقة",
820
+ "status": "الحالة",
821
+ "mode": "الوضع",
822
+ "dealType": "نوع الصفقة",
823
+ "currency": "العملة",
824
+ "brand": "العلامة التجارية",
825
+ "advertiser": "المعلن",
826
+ "seller": "البائع",
827
+ "publisher": "الناشر",
828
+ "startDate": "تاريخ البدء",
829
+ "endDate": "تاريخ الانتهاء",
830
+ "sortBy": "ترتيب حسب",
831
+ "brandPlaceholder": "تصفية حسب اسم العلامة التجارية",
832
+ "advertiserPlaceholder": "تصفية حسب المعلن",
833
+ "sellerPlaceholder": "تصفية حسب البائع/الناشر",
834
+ "publisherPlaceholder": "تصفية حسب الناشر",
835
+ "reset": "إعادة تعيين",
836
+ "applyFilters": "تطبيق الفلاتر",
837
+ "allStatus": "جميع الحالات",
838
+ "draft": "مسودة",
839
+ "requested": "مطلوب",
840
+ "generated": "تم إنشاؤه",
841
+ "pendingCreatives": "إبداعات قيد الانتظار",
842
+ "live": "نشط",
843
+ "completed": "مكتمل",
844
+ "inactive": "غير نشط",
845
+ "reopened": "أعيد فتحه",
846
+ "archived": "مؤرشف",
847
+ "expired": "منتهي الصلاحية",
848
+ "canceled": "ملغي",
849
+ "approved": "معتمد",
850
+ "rejected": "مرفوض",
851
+ "pending": "قيد الانتظار",
852
+ "allModes": "جميع الأوضاع",
853
+ "programmatic": "برمجي",
854
+ "traditionalDirect": "تقليدي (مباشر)",
855
+ "allDealTypes": "جميع أنواع الصفقات",
856
+ "guaranteed": "ضمان برمجي",
857
+ "preferredDeal": "صفقة مفضلة",
858
+ "privateAuction": "مزاد خاص",
859
+ "evergreenPmp": "PMP دائم الخضرة",
860
+ "direct": "مباشر",
861
+ "allCurrencies": "جميع العملات",
862
+ "newestFirst": "الأحدث أولاً",
863
+ "oldestFirst": "الأقدم أولاً",
864
+ "nameAZ": "الاسم (أ-ي)",
865
+ "nameZA": "الاسم (ي-أ)",
866
+ "brandAZ": "العلامة التجارية (أ-ي)",
867
+ "brandZA": "العلامة التجارية (ي-أ)",
868
+ "startDateEarly": "تاريخ البدء (مبكر)",
869
+ "startDateLate": "تاريخ البدء (متأخر)"
870
+ },
871
+ "venueSelector": {
872
+ "placeholder": "اختر نوع المكان",
873
+ "searchPlaceholder": "ابحث هنا..",
874
+ "noVenueTypes": "لا توجد أنواع أماكن متاحة",
875
+ "transit": "أماكن النقل والتنقل",
876
+ "retail": "أماكن التسوق والتجارة",
877
+ "outdoor": "إعلانات مستوى الشارع والخارجية",
878
+ "accommodation": "الفنادق وأماكن الضيافة",
879
+ "education": "المدارس والجامعات ومراكز التعلم",
880
+ "entertainment": "دور السينما والمسارح وأماكن الترفيه",
881
+ "health": "المستشفيات والعيادات والمرافق الطبية",
882
+ "office": "المباني التجارية والشركات",
883
+ "residential": "الشقق والمجمعات السكنية",
884
+ "government": "المباني الحكومية والعامة"
885
+ }
886
+ }