@antelopejs/dms-marketing 0.2.2

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 (308) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +143 -0
  3. package/dist/config.d.ts +13 -0
  4. package/dist/config.js +35 -0
  5. package/dist/config.js.map +1 -0
  6. package/dist/data-api/body.d.ts +1 -0
  7. package/dist/data-api/body.js +15 -0
  8. package/dist/data-api/body.js.map +1 -0
  9. package/dist/data-api/funnels.d.ts +32 -0
  10. package/dist/data-api/funnels.js +302 -0
  11. package/dist/data-api/funnels.js.map +1 -0
  12. package/dist/data-api/hidden-filter.d.ts +1 -0
  13. package/dist/data-api/hidden-filter.js +11 -0
  14. package/dist/data-api/hidden-filter.js.map +1 -0
  15. package/dist/data-api/index.d.ts +4 -0
  16. package/dist/data-api/index.js +21 -0
  17. package/dist/data-api/index.js.map +1 -0
  18. package/dist/data-api/tenant-scope.d.ts +15 -0
  19. package/dist/data-api/tenant-scope.js +43 -0
  20. package/dist/data-api/tenant-scope.js.map +1 -0
  21. package/dist/data-api/websites.d.ts +25 -0
  22. package/dist/data-api/websites.js +73 -0
  23. package/dist/data-api/websites.js.map +1 -0
  24. package/dist/db/index.d.ts +2 -0
  25. package/dist/db/index.js +19 -0
  26. package/dist/db/index.js.map +1 -0
  27. package/dist/db/models/funnels.model.d.ts +25 -0
  28. package/dist/db/models/funnels.model.js +39 -0
  29. package/dist/db/models/funnels.model.js.map +1 -0
  30. package/dist/db/models/index.d.ts +7 -0
  31. package/dist/db/models/index.js +24 -0
  32. package/dist/db/models/index.js.map +1 -0
  33. package/dist/db/models/marketing_events.model.d.ts +49 -0
  34. package/dist/db/models/marketing_events.model.js +85 -0
  35. package/dist/db/models/marketing_events.model.js.map +1 -0
  36. package/dist/db/models/marketing_sessions.model.d.ts +33 -0
  37. package/dist/db/models/marketing_sessions.model.js +50 -0
  38. package/dist/db/models/marketing_sessions.model.js.map +1 -0
  39. package/dist/db/models/marketing_settings.model.d.ts +23 -0
  40. package/dist/db/models/marketing_settings.model.js +13 -0
  41. package/dist/db/models/marketing_settings.model.js.map +1 -0
  42. package/dist/db/models/page_snapshots.model.d.ts +27 -0
  43. package/dist/db/models/page_snapshots.model.js +32 -0
  44. package/dist/db/models/page_snapshots.model.js.map +1 -0
  45. package/dist/db/models/retention.d.ts +6 -0
  46. package/dist/db/models/retention.js +26 -0
  47. package/dist/db/models/retention.js.map +1 -0
  48. package/dist/db/models/website_statistics.model.d.ts +31 -0
  49. package/dist/db/models/website_statistics.model.js +63 -0
  50. package/dist/db/models/website_statistics.model.js.map +1 -0
  51. package/dist/db/models/websites.model.d.ts +26 -0
  52. package/dist/db/models/websites.model.js +27 -0
  53. package/dist/db/models/websites.model.js.map +1 -0
  54. package/dist/db/tables/funnels.table.d.ts +31 -0
  55. package/dist/db/tables/funnels.table.js +54 -0
  56. package/dist/db/tables/funnels.table.js.map +1 -0
  57. package/dist/db/tables/index.d.ts +7 -0
  58. package/dist/db/tables/index.js +24 -0
  59. package/dist/db/tables/index.js.map +1 -0
  60. package/dist/db/tables/marketing_events.table.d.ts +15 -0
  61. package/dist/db/tables/marketing_events.table.js +66 -0
  62. package/dist/db/tables/marketing_events.table.js.map +1 -0
  63. package/dist/db/tables/marketing_sessions.table.d.ts +26 -0
  64. package/dist/db/tables/marketing_sessions.table.js +115 -0
  65. package/dist/db/tables/marketing_sessions.table.js.map +1 -0
  66. package/dist/db/tables/marketing_settings.table.d.ts +11 -0
  67. package/dist/db/tables/marketing_settings.table.js +51 -0
  68. package/dist/db/tables/marketing_settings.table.js.map +1 -0
  69. package/dist/db/tables/page_snapshots.table.d.ts +17 -0
  70. package/dist/db/tables/page_snapshots.table.js +72 -0
  71. package/dist/db/tables/page_snapshots.table.js.map +1 -0
  72. package/dist/db/tables/website_statistics.table.d.ts +14 -0
  73. package/dist/db/tables/website_statistics.table.js +60 -0
  74. package/dist/db/tables/website_statistics.table.js.map +1 -0
  75. package/dist/db/tables/websites.table.d.ts +13 -0
  76. package/dist/db/tables/websites.table.js +60 -0
  77. package/dist/db/tables/websites.table.js.map +1 -0
  78. package/dist/hooks/index.d.ts +1 -0
  79. package/dist/hooks/index.js +39 -0
  80. package/dist/hooks/index.js.map +1 -0
  81. package/dist/implementations/dms-marketing/index.d.ts +2 -0
  82. package/dist/implementations/dms-marketing/index.js +8 -0
  83. package/dist/implementations/dms-marketing/index.js.map +1 -0
  84. package/dist/index.d.ts +7 -0
  85. package/dist/index.js +89 -0
  86. package/dist/index.js.map +1 -0
  87. package/dist/pages/all.d.ts +5 -0
  88. package/dist/pages/all.js +22 -0
  89. package/dist/pages/all.js.map +1 -0
  90. package/dist/pages/campaigns/page.d.ts +9 -0
  91. package/dist/pages/campaigns/page.js +27 -0
  92. package/dist/pages/campaigns/page.js.map +1 -0
  93. package/dist/pages/funnels/page.d.ts +9 -0
  94. package/dist/pages/funnels/page.js +27 -0
  95. package/dist/pages/funnels/page.js.map +1 -0
  96. package/dist/pages/index.d.ts +4 -0
  97. package/dist/pages/index.js +21 -0
  98. package/dist/pages/index.js.map +1 -0
  99. package/dist/pages/module.d.ts +1 -0
  100. package/dist/pages/module.js +13 -0
  101. package/dist/pages/module.js.map +1 -0
  102. package/dist/pages/overview/page.d.ts +9 -0
  103. package/dist/pages/overview/page.js +27 -0
  104. package/dist/pages/overview/page.js.map +1 -0
  105. package/dist/pages/pages/page.d.ts +9 -0
  106. package/dist/pages/pages/page.js +27 -0
  107. package/dist/pages/pages/page.js.map +1 -0
  108. package/dist/pages/settings/form.d.ts +3 -0
  109. package/dist/pages/settings/form.js +35 -0
  110. package/dist/pages/settings/form.js.map +1 -0
  111. package/dist/pages/settings/page.d.ts +9 -0
  112. package/dist/pages/settings/page.js +27 -0
  113. package/dist/pages/settings/page.js.map +1 -0
  114. package/dist/routes/collect.d.ts +7 -0
  115. package/dist/routes/collect.js +62 -0
  116. package/dist/routes/collect.js.map +1 -0
  117. package/dist/routes/experiments.d.ts +6 -0
  118. package/dist/routes/experiments.js +63 -0
  119. package/dist/routes/experiments.js.map +1 -0
  120. package/dist/routes/funnels.d.ts +16 -0
  121. package/dist/routes/funnels.js +44 -0
  122. package/dist/routes/funnels.js.map +1 -0
  123. package/dist/routes/index.d.ts +8 -0
  124. package/dist/routes/index.js +25 -0
  125. package/dist/routes/index.js.map +1 -0
  126. package/dist/routes/settings.d.ts +8 -0
  127. package/dist/routes/settings.js +50 -0
  128. package/dist/routes/settings.js.map +1 -0
  129. package/dist/routes/snapshot.d.ts +10 -0
  130. package/dist/routes/snapshot.js +147 -0
  131. package/dist/routes/snapshot.js.map +1 -0
  132. package/dist/routes/stats.d.ts +44 -0
  133. package/dist/routes/stats.js +278 -0
  134. package/dist/routes/stats.js.map +1 -0
  135. package/dist/routes/tracker.d.ts +6 -0
  136. package/dist/routes/tracker.js +57 -0
  137. package/dist/routes/tracker.js.map +1 -0
  138. package/dist/routes/websites.d.ts +13 -0
  139. package/dist/routes/websites.js +144 -0
  140. package/dist/routes/websites.js.map +1 -0
  141. package/dist/services/acquisition.d.ts +15 -0
  142. package/dist/services/acquisition.js +153 -0
  143. package/dist/services/acquisition.js.map +1 -0
  144. package/dist/services/bounded-cache.d.ts +14 -0
  145. package/dist/services/bounded-cache.js +45 -0
  146. package/dist/services/bounded-cache.js.map +1 -0
  147. package/dist/services/collect.d.ts +11 -0
  148. package/dist/services/collect.js +193 -0
  149. package/dist/services/collect.js.map +1 -0
  150. package/dist/services/experiment-definitions.d.ts +4 -0
  151. package/dist/services/experiment-definitions.js +36 -0
  152. package/dist/services/experiment-definitions.js.map +1 -0
  153. package/dist/services/experiments/assign.d.ts +5 -0
  154. package/dist/services/experiments/assign.js +52 -0
  155. package/dist/services/experiments/assign.js.map +1 -0
  156. package/dist/services/experiments/index.d.ts +3 -0
  157. package/dist/services/experiments/index.js +20 -0
  158. package/dist/services/experiments/index.js.map +1 -0
  159. package/dist/services/experiments/results.d.ts +20 -0
  160. package/dist/services/experiments/results.js +91 -0
  161. package/dist/services/experiments/results.js.map +1 -0
  162. package/dist/services/experiments/stats.d.ts +12 -0
  163. package/dist/services/experiments/stats.js +62 -0
  164. package/dist/services/experiments/stats.js.map +1 -0
  165. package/dist/services/funnels/compute.d.ts +15 -0
  166. package/dist/services/funnels/compute.js +68 -0
  167. package/dist/services/funnels/compute.js.map +1 -0
  168. package/dist/services/funnels/index.d.ts +2 -0
  169. package/dist/services/funnels/index.js +19 -0
  170. package/dist/services/funnels/index.js.map +1 -0
  171. package/dist/services/funnels/results.d.ts +14 -0
  172. package/dist/services/funnels/results.js +72 -0
  173. package/dist/services/funnels/results.js.map +1 -0
  174. package/dist/services/geoip.d.ts +3 -0
  175. package/dist/services/geoip.js +38 -0
  176. package/dist/services/geoip.js.map +1 -0
  177. package/dist/services/heatmap.d.ts +10 -0
  178. package/dist/services/heatmap.js +180 -0
  179. package/dist/services/heatmap.js.map +1 -0
  180. package/dist/services/index.d.ts +26 -0
  181. package/dist/services/index.js +43 -0
  182. package/dist/services/index.js.map +1 -0
  183. package/dist/services/ingest-guard.d.ts +11 -0
  184. package/dist/services/ingest-guard.js +44 -0
  185. package/dist/services/ingest-guard.js.map +1 -0
  186. package/dist/services/keyed-queue.d.ts +4 -0
  187. package/dist/services/keyed-queue.js +19 -0
  188. package/dist/services/keyed-queue.js.map +1 -0
  189. package/dist/services/origin-guard.d.ts +5 -0
  190. package/dist/services/origin-guard.js +43 -0
  191. package/dist/services/origin-guard.js.map +1 -0
  192. package/dist/services/period.d.ts +2 -0
  193. package/dist/services/period.js +19 -0
  194. package/dist/services/period.js.map +1 -0
  195. package/dist/services/prune.d.ts +7 -0
  196. package/dist/services/prune.js +49 -0
  197. package/dist/services/prune.js.map +1 -0
  198. package/dist/services/query-param.d.ts +1 -0
  199. package/dist/services/query-param.js +11 -0
  200. package/dist/services/query-param.js.map +1 -0
  201. package/dist/services/request-body.d.ts +2 -0
  202. package/dist/services/request-body.js +41 -0
  203. package/dist/services/request-body.js.map +1 -0
  204. package/dist/services/request-meta.d.ts +3 -0
  205. package/dist/services/request-meta.js +19 -0
  206. package/dist/services/request-meta.js.map +1 -0
  207. package/dist/services/rollup-write.d.ts +4 -0
  208. package/dist/services/rollup-write.js +84 -0
  209. package/dist/services/rollup-write.js.map +1 -0
  210. package/dist/services/sessionize.d.ts +23 -0
  211. package/dist/services/sessionize.js +78 -0
  212. package/dist/services/sessionize.js.map +1 -0
  213. package/dist/services/settings.d.ts +6 -0
  214. package/dist/services/settings.js +113 -0
  215. package/dist/services/settings.js.map +1 -0
  216. package/dist/services/snapshots.d.ts +24 -0
  217. package/dist/services/snapshots.js +139 -0
  218. package/dist/services/snapshots.js.map +1 -0
  219. package/dist/services/tenant-funnel.d.ts +3 -0
  220. package/dist/services/tenant-funnel.js +17 -0
  221. package/dist/services/tenant-funnel.js.map +1 -0
  222. package/dist/services/tenant-website.d.ts +5 -0
  223. package/dist/services/tenant-website.js +34 -0
  224. package/dist/services/tenant-website.js.map +1 -0
  225. package/dist/services/url.d.ts +10 -0
  226. package/dist/services/url.js +81 -0
  227. package/dist/services/url.js.map +1 -0
  228. package/dist/services/user-agent.d.ts +2 -0
  229. package/dist/services/user-agent.js +17 -0
  230. package/dist/services/user-agent.js.map +1 -0
  231. package/dist/services/visitor-id.d.ts +1 -0
  232. package/dist/services/visitor-id.js +19 -0
  233. package/dist/services/visitor-id.js.map +1 -0
  234. package/dist/services/website-cache.d.ts +3 -0
  235. package/dist/services/website-cache.js +22 -0
  236. package/dist/services/website-cache.js.map +1 -0
  237. package/dist/types/constants.d.ts +74 -0
  238. package/dist/types/constants.js +79 -0
  239. package/dist/types/constants.js.map +1 -0
  240. package/dist/types/events.d.ts +114 -0
  241. package/dist/types/events.js +29 -0
  242. package/dist/types/events.js.map +1 -0
  243. package/dist/types/index.d.ts +5 -0
  244. package/dist/types/index.js +22 -0
  245. package/dist/types/index.js.map +1 -0
  246. package/dist/types/settings.d.ts +67 -0
  247. package/dist/types/settings.js +58 -0
  248. package/dist/types/settings.js.map +1 -0
  249. package/dist/types/snapshots.d.ts +95 -0
  250. package/dist/types/snapshots.js +41 -0
  251. package/dist/types/snapshots.js.map +1 -0
  252. package/dist/types/statistics.d.ts +38 -0
  253. package/dist/types/statistics.js +33 -0
  254. package/dist/types/statistics.js.map +1 -0
  255. package/dist/utils/experiment-type.d.ts +52 -0
  256. package/dist/utils/experiment-type.js +94 -0
  257. package/dist/utils/experiment-type.js.map +1 -0
  258. package/dist/utils/funnel-steps-type.d.ts +42 -0
  259. package/dist/utils/funnel-steps-type.js +62 -0
  260. package/dist/utils/funnel-steps-type.js.map +1 -0
  261. package/frontend-vue/.editorconfig +12 -0
  262. package/frontend-vue/.prettierrc +7 -0
  263. package/frontend-vue/app/components/CampaignsView.vue +330 -0
  264. package/frontend-vue/app/components/ExperimentInput.vue +128 -0
  265. package/frontend-vue/app/components/FunnelDetail.vue +1026 -0
  266. package/frontend-vue/app/components/FunnelStepsInput.vue +154 -0
  267. package/frontend-vue/app/components/FunnelsView.vue +493 -0
  268. package/frontend-vue/app/components/HeatmapCanvas.vue +116 -0
  269. package/frontend-vue/app/components/NoWebsiteState.vue +18 -0
  270. package/frontend-vue/app/components/OverviewView.vue +493 -0
  271. package/frontend-vue/app/components/PagePreview.vue +915 -0
  272. package/frontend-vue/app/components/PagesView.vue +378 -0
  273. package/frontend-vue/app/components/ScrollDepthOverlay.vue +158 -0
  274. package/frontend-vue/app/components/TextKpiCard.vue +28 -0
  275. package/frontend-vue/app/components/TopListTabsCard.vue +162 -0
  276. package/frontend-vue/app/components/TrackerSnippet.vue +31 -0
  277. package/frontend-vue/app/components/VariationsInput.vue +164 -0
  278. package/frontend-vue/app/composables/useChildId.ts +13 -0
  279. package/frontend-vue/app/composables/useExperiment.ts +59 -0
  280. package/frontend-vue/app/composables/useFunnelSteps.ts +25 -0
  281. package/frontend-vue/app/composables/useLatestRequest.ts +90 -0
  282. package/frontend-vue/app/composables/useMarketingApi.ts +420 -0
  283. package/frontend-vue/app/composables/useMarketingPeriod.ts +66 -0
  284. package/frontend-vue/app/composables/useMarketingRoutes.ts +51 -0
  285. package/frontend-vue/app/composables/useMarketingWebsiteForm.ts +69 -0
  286. package/frontend-vue/app/composables/useMarketingWebsites.ts +80 -0
  287. package/frontend-vue/app/composables/useSnapshotFrame.ts +183 -0
  288. package/frontend-vue/app/plugins/funnel-steps-data-type.client.ts +46 -0
  289. package/frontend-vue/app/utils/dmsComponent.ts +18 -0
  290. package/frontend-vue/app/utils/heatmapPalette.ts +41 -0
  291. package/frontend-vue/app/utils/snapshotViewportUnits.ts +63 -0
  292. package/frontend-vue/dms.frontend.ts +35 -0
  293. package/frontend-vue/eslint.config.mjs +16 -0
  294. package/frontend-vue/i18n/locales/marketing-en-GB.json +382 -0
  295. package/frontend-vue/i18n/locales/marketing-fr-FR.json +382 -0
  296. package/frontend-vue/package.json +30 -0
  297. package/frontend-vue/pnpm-lock.yaml +5226 -0
  298. package/frontend-vue/pnpm-workspace.yaml +2 -0
  299. package/frontend-vue/tests/drafts.test.ts +54 -0
  300. package/frontend-vue/tests/i18n.test.ts +86 -0
  301. package/frontend-vue/tests/period.test.ts +35 -0
  302. package/frontend-vue/tests/registration.test.ts +63 -0
  303. package/frontend-vue/tests/routes.test.ts +31 -0
  304. package/frontend-vue/tests/stubs/frontend-module.ts +56 -0
  305. package/frontend-vue/vitest.config.ts +20 -0
  306. package/package.json +91 -0
  307. package/static/snapshot.js +497 -0
  308. package/static/tracker.js +503 -0
@@ -0,0 +1,382 @@
1
+ {
2
+ "page": {
3
+ "marketing": {
4
+ "category_name": "Marketing",
5
+ "errors": {
6
+ "invalid_body": "Le corps de la requête n'est pas un JSON valide.",
7
+ "invalid_steps": "Étapes de funnel invalides : vérifiez le type et la valeur de chaque étape — 1 à 10 étapes.",
8
+ "invalid_website": "Détails du site invalides : vérifiez le nom, le domaine et les domaines supplémentaires.",
9
+ "invalid_settings": "Réglages invalides : vérifiez que chaque valeur est dans les bornes autorisées.",
10
+ "website_not_found": "Ce site n'existe pas ou appartient à un autre espace de travail.",
11
+ "funnel_not_found": "Ce funnel n'existe plus.",
12
+ "missing_path": "Le chemin de la page est requis.",
13
+ "invalid_variations": "Variations invalides : 2 à 8 bras, clés uniques en minuscules, poids positifs ou nuls avec un total positif.",
14
+ "invalid_experiment_key": "Clé d'expérience invalide : uniquement minuscules, chiffres, tirets et tirets bas.",
15
+ "duplicate_experiment_key": "Une autre expérience de ce site utilise déjà cette clé.",
16
+ "experiment_locked": "Seuls le nom, les étapes, la fenêtre et le statut peuvent changer une fois la répartition A/B sortie du brouillon.",
17
+ "invalid_status_transition": "Ce changement de statut n'est pas autorisé : brouillon vers en cours, en cours vers arrêtée."
18
+ },
19
+ "overview": {
20
+ "title": "Vue d'ensemble",
21
+ "subtitle": "Trafic, acquisition et engagement de vos sites suivis.",
22
+ "description": "Statistiques marketing — trafic, funnels et rétention.",
23
+ "empty": {
24
+ "title": "Aucun site suivi pour le moment",
25
+ "description": "Ajoutez un site, puis intégrez le script de suivi sur le site pour démarrer la collecte."
26
+ },
27
+ "error": {
28
+ "title": "Vue d'ensemble indisponible",
29
+ "description": "Le chargement des données marketing a échoué. Les données collectées ne sont pas affectées."
30
+ },
31
+ "retry": "Réessayer",
32
+ "kpis": {
33
+ "pageviews": "Pages vues",
34
+ "sessions": "Sessions",
35
+ "new_visitors": "Nouveaux visiteurs",
36
+ "custom_events": "Événements personnalisés",
37
+ "bounce_rate": "Taux de rebond",
38
+ "avg_session_duration": "Durée moy. de session",
39
+ "pages_per_session": "Pages / session"
40
+ },
41
+ "traffic": {
42
+ "title": "Trafic",
43
+ "subtitle": "Pages vues et sessions par jour",
44
+ "pageviews": "Pages vues",
45
+ "sessions": "Sessions",
46
+ "empty": "Aucun trafic enregistré sur cette période."
47
+ },
48
+ "devices": {
49
+ "title": "Appareils",
50
+ "empty": "Aucune donnée d'appareil sur cette période."
51
+ },
52
+ "groups": {
53
+ "empty": "Rien d'enregistré sur cette période.",
54
+ "content": {
55
+ "title": "Contenu",
56
+ "view_all": "Voir les pages suivies",
57
+ "tabs": {
58
+ "pages": "Top pages",
59
+ "entry": "Entrées",
60
+ "exit": "Sorties"
61
+ }
62
+ },
63
+ "acquisition": {
64
+ "title": "Acquisition",
65
+ "view_all": "Voir les sources",
66
+ "tabs": {
67
+ "channels": "Canaux",
68
+ "referrers": "Référents"
69
+ }
70
+ },
71
+ "audience": {
72
+ "title": "Audience",
73
+ "tabs": {
74
+ "browsers": "Navigateurs",
75
+ "languages": "Langues",
76
+ "countries": "Pays"
77
+ }
78
+ },
79
+ "events": {
80
+ "title": "Événements",
81
+ "view_all": "Voir les funnels"
82
+ }
83
+ }
84
+ },
85
+ "campaigns": {
86
+ "title": "Sources",
87
+ "description": "Canaux d'acquisition et campagnes UTM de vos sites suivis.",
88
+ "subtitle": "D'où viennent les sessions : canaux et campagnes UTM.",
89
+ "empty": {
90
+ "title": "Aucun site suivi pour le moment",
91
+ "description": "Ajoutez un site, puis intégrez le script de suivi sur le site pour démarrer la collecte."
92
+ },
93
+ "error": {
94
+ "title": "Sources indisponibles",
95
+ "description": "Le chargement des données d'acquisition a échoué. Les données collectées ne sont pas affectées."
96
+ },
97
+ "retry": "Réessayer",
98
+ "channels": {
99
+ "title": "Canaux",
100
+ "subtitle": "Sessions par canal d'acquisition",
101
+ "empty": "Aucune donnée de canal sur cette période.",
102
+ "direct": "Direct",
103
+ "organic": "Recherche organique",
104
+ "social": "Réseaux sociaux",
105
+ "referral": "Sites référents",
106
+ "paid": "Payant"
107
+ },
108
+ "table": {
109
+ "title": "Campagnes UTM",
110
+ "subtitle": "Sessions par source, medium et campagne",
111
+ "source": "Source",
112
+ "medium": "Medium",
113
+ "campaign": "Campagne",
114
+ "sessions": "Sessions",
115
+ "search_placeholder": "Filtrer les campagnes…",
116
+ "empty": "Aucune session avec UTM sur cette période.",
117
+ "truncated": "Seules les premières campagnes sont affichées — affinez le filtre pour voir la suite."
118
+ },
119
+ "top": {
120
+ "referrers": "Meilleurs référents",
121
+ "terms": "Top termes UTM",
122
+ "contents": "Top contenus UTM",
123
+ "empty": "Rien d'enregistré sur cette période."
124
+ }
125
+ },
126
+ "pages": {
127
+ "title": "Pages suivies",
128
+ "subtitle": "Les pages que vos visiteurs ont réellement chargées, où ils ont cliqué et jusqu'où ils ont défilé.",
129
+ "description": "Pages suivies — chemins visités, clics et profondeur de défilement de chacun.",
130
+ "inventory": "Pages",
131
+ "search_placeholder": "Filtrer, ou saisir un chemin…",
132
+ "row_hint": {
133
+ "views": "{count} vue | {count} vues",
134
+ "sampled": "~{count} échantillonnée | ~{count} échantillonnées"
135
+ },
136
+ "select_hint": "Sélectionnez une page pour voir ses clics et sa profondeur de défilement.",
137
+ "to_funnels": "Funnels",
138
+ "clicks": "{count} clic | {count} clics",
139
+ "pageviews": "{count} vue | {count} vues",
140
+ "overlay": {
141
+ "clicks": "Clics",
142
+ "scroll": "Défilement"
143
+ },
144
+ "scroll": {
145
+ "views": "{count} vue avec défilement | {count} vues avec défilement",
146
+ "truncated": "Profondeur de défilement partielle",
147
+ "truncated_hint": "Cette page a enregistré plus de défilements qu'une lecture n'en parcourt. Réduisez la période pour tous les voir.",
148
+ "reach_line": "{percent} % des visiteurs voient jusqu'ici",
149
+ "fold_line": "Bas du premier écran"
150
+ },
151
+ "error": "Le chargement des pages suivies a échoué.",
152
+ "error_hint": "Les données collectées ne sont pas affectées.",
153
+ "retry": "Réessayer",
154
+ "truncated": "Heatmap partielle",
155
+ "truncated_hint": "Cette page a enregistré plus de clics qu'une heatmap n'en lit. Réduisez la période pour tous les voir.",
156
+ "list_truncated": "Inventaire tronqué",
157
+ "list_truncated_hint": "Plus de pages ont été visitées que cette liste n'en affiche. Filtrez pour atteindre les autres.",
158
+ "no_website": {
159
+ "title": "Aucun site suivi pour le moment",
160
+ "description": "Ajoutez un site, puis intégrez le script de suivi sur le site pour démarrer la collecte."
161
+ },
162
+ "no_pages": {
163
+ "title": "Aucune page visitée sur cette période",
164
+ "description": "Rien n'a été enregistré pour ce site sur la fenêtre sélectionnée. Vous pouvez tout de même saisir un chemin pour l'inspecter."
165
+ },
166
+ "tracking_off": {
167
+ "title": "La collecte est désactivée",
168
+ "description": "Le script de suivi est coupé dans les réglages du module : rien de nouveau n'est enregistré, pas d'instantané de page non plus."
169
+ },
170
+ "empty": {
171
+ "title": "Aucun clic enregistré sur cette page",
172
+ "no_clicks": "Des visiteurs ont chargé cette page mais aucun clic n'a été capturé sur la période sélectionnée.",
173
+ "scroll_title": "Aucun défilement mesuré sur cette page",
174
+ "no_scrolls": "Des visiteurs ont chargé cette page mais aucune profondeur n'a été mesurée sur la période — une page qui tient dans l'écran ne défile pas, et ne produit donc aucune mesure.",
175
+ "sampled_out": "Les clics et défilements sont échantillonnés sur {rate}% des chargements de page, et cette page est trop peu fréquentée pour que ce taux en ait capté. Augmentez l'échantillonnage dans les réglages, ou élargissez la période.",
176
+ "tracking_off": "La collecte est désactivée dans les réglages du module : ni clic ni défilement n'est enregistré."
177
+ },
178
+ "preview": {
179
+ "snapshots_off": "Les instantanés de page sont désactivés pour ce site",
180
+ "snapshots_off_hint": "Les clics et défilements sont toujours comptés, mais la heatmap ne se dessine que par-dessus un instantané de la page telle que les visiteurs la voient : son texte et ses images sont alors stockés, tous les champs de formulaire masqués, pendant la rétention des instantanés fixée dans les réglages du module. Activez-le si c'est compatible avec les engagements de confidentialité de ce site.",
181
+ "enable_snapshots": "Activer les instantanés de page",
182
+ "no_snapshot": "Aucun instantané de cette page pour le moment",
183
+ "no_snapshot_hint": "La prochaine visite échantillonnée en capturera un — les instantanés suivent l'échantillonnage des clics à {rate} % — et il sera rafraîchi chaque jour. La heatmap se dessine dès qu'il existe ; les chiffres ci-dessus sont déjà exacts.",
184
+ "approximate_layout": "Instantané d'une autre mise en page",
185
+ "approximate_layout_hint": "Aucun visiteur n'a encore été capturé à cette largeur : l'instantané {layout} est reflué ici. Les clics ancrés restent sur leur élément.",
186
+ "too_heavy": "Page trop lourde pour être capturée",
187
+ "too_heavy_hint": "La dernière visite échantillonnée a sérialisé {size} Mio de HTML et de CSS, au-delà du plafond d'envoi de {limit} Mio : cette page n'a donc pas de fond. Les chiffres de clics et de défilement ci-dessus n'en sont pas affectés. Une visite réessaie chaque jour : un balisage plus léger — ou une section lourde marquée data-dms-marketing-block — la ramène sous le plafond.",
188
+ "captured_at": "instantané du {date}",
189
+ "attempted_at": "capture tentée le {date}",
190
+ "options": "Options des instantanés",
191
+ "snapshots_enabled": "Instantanés de page",
192
+ "snapshots_enabled_hint": "Capturer la page telle que les visiteurs la voient, pour dessiner la heatmap par-dessus. Stocke du contenu de page ; changer ce réglage supprime les instantanés du site.",
193
+ "mask_text": "Masquer tout le texte",
194
+ "mask_text_hint": "Remplacer chaque caractère du texte capturé par un caractère de substitution. Les champs de formulaire sont toujours masqués.",
195
+ "options_error": "L'enregistrement des options a échoué. Réessayez dans un instant.",
196
+ "overflow": "Page plus large que la mise en page choisie",
197
+ "overflow_hint": "L'instantané se dispose sur {width}px. La superposition suit le document et reste donc alignée ; le fond, lui, peut être coupé.",
198
+ "layout_desktop": "Ordinateur",
199
+ "layout_tablet": "Tablette (portrait)",
200
+ "layout_phone": "Téléphone",
201
+ "height_override": "Hauteur de rendu (px)",
202
+ "open_in_tab": "Ouvrir",
203
+ "oversized": "Page trop haute pour un aperçu fidèle",
204
+ "oversized_hint": "Le document dépasse la plus grande surface dessinable : la superposition et le fond ne coïncident plus. Les chiffres de clics ne sont pas affectés."
205
+ },
206
+ "reset": {
207
+ "page_button": "Réinitialiser la heatmap de cette page",
208
+ "site_button": "Réinitialiser les heatmaps",
209
+ "page_title": "Réinitialiser la heatmap de cette page ?",
210
+ "page_description": "Tous les clics et profondeurs de défilement enregistrés sur {path} seront supprimés, quelle que soit la période — utile après une mise à jour de la page. Les pages vues, sessions et funnels ne sont pas affectés.",
211
+ "site_title": "Réinitialiser toutes les heatmaps du site ?",
212
+ "site_description": "Tous les clics et profondeurs de défilement enregistrés sur {name} seront supprimés, sur toutes les pages et quelle que soit la période. Les pages vues, sessions et funnels ne sont pas affectés.",
213
+ "confirm": "Supprimer les données",
214
+ "done": "{count} événement supprimé | {count} événements supprimés",
215
+ "error": "La réinitialisation a échoué. Réessayez dans un instant."
216
+ }
217
+ },
218
+ "funnels": {
219
+ "title": "Funnels & A/B",
220
+ "description": "Funnels de conversion — où les visiteurs décrochent, étape par étape — et les répartitions A/B mesurées contre eux.",
221
+ "subtitle": "Où les visiteurs décrochent, et quelle variation convertit.",
222
+ "list": "Funnels",
223
+ "summary": "{entered} session entrée · {rate}% convertie | {entered} sessions entrées · {rate}% converties",
224
+ "lost": "{count} session perdue | {count} sessions perdues",
225
+ "retained": "restant",
226
+ "sessions": "sessions",
227
+ "goal_suffix": "objectif",
228
+ "select_hint": "Sélectionnez un funnel pour voir sa figure.",
229
+ "see_heatmap": "Voir les clics sur cette page",
230
+ "results_error": "Le chargement des résultats du funnel a échoué.",
231
+ "error": "Le chargement des funnels a échoué.",
232
+ "error_hint": "Les données collectées ne sont pas affectées.",
233
+ "retry": "Réessayer",
234
+ "no_website": {
235
+ "title": "Aucun site suivi pour le moment",
236
+ "description": "Ajoutez un site, puis intégrez le script de suivi sur le site pour démarrer la collecte."
237
+ },
238
+ "empty": {
239
+ "title": "Aucun funnel sur ce site",
240
+ "description": "Créez votre premier funnel : chaque étape est une URL de page ou un événement personnalisé, apparié dans l'ordre au sein d'une session. Répartissez-le en variations A/B dès que vous voulez tester un changement contre lui."
241
+ },
242
+ "no_sessions": {
243
+ "title": "Aucune session n'est entrée dans ce funnel",
244
+ "description": "Aucune session ne correspond à la première étape sur la période sélectionnée."
245
+ },
246
+ "new": "Nouveau funnel",
247
+ "create_title": "Créer un funnel",
248
+ "edit_title": "Modifier le funnel",
249
+ "edit": "Modifier",
250
+ "start": "Lancer",
251
+ "stop": {
252
+ "button": "Arrêter",
253
+ "title": "Arrêter cette répartition ?",
254
+ "description": "Tous les visiteurs repassent sur la variation de contrôle en moins d'une minute, les pages déjà ouvertes à leur prochain rechargement. La mesure s'arrête, les résultats restent lisibles.",
255
+ "confirm": "Arrêter"
256
+ },
257
+ "resume": {
258
+ "button": "Relancer",
259
+ "title": "Relancer cette répartition ?",
260
+ "description": "La répartition repart avec les mêmes variations et garde les sessions déjà exposées ; relancer pour obtenir un autre verdict peut augmenter les faux positifs.",
261
+ "confirm": "Relancer"
262
+ },
263
+ "more_actions": "Plus d'actions",
264
+ "locked_hint": "Clé et variations sont gelées hors brouillon — des poids modifiés en cours de run réaffecteraient les visiteurs en silence.",
265
+ "status_updated": "Statut mis à jour.",
266
+ "status_error": "Le changement de statut a été refusé.",
267
+ "delete": {
268
+ "button": "Supprimer",
269
+ "title": "Supprimer ce funnel ?",
270
+ "description": "« {name} » et sa figure disparaîtront. Les événements et expositions collectés restent jusqu'à la fin de leur rétention.",
271
+ "confirm": "Supprimer",
272
+ "done": "Funnel supprimé.",
273
+ "error": "La suppression a échoué."
274
+ },
275
+ "steps_count": "{count} étape | {count} étapes",
276
+ "variations_count": "{count} variation | {count} variations",
277
+ "status": {
278
+ "draft": "Brouillon",
279
+ "running": "En cours",
280
+ "stopped": "Arrêté"
281
+ },
282
+ "step_kind": {
283
+ "url": "vue de page",
284
+ "custom": "événement"
285
+ },
286
+ "column": {
287
+ "website": "Site",
288
+ "name": "Nom",
289
+ "created": "Créé le"
290
+ },
291
+ "form": {
292
+ "name": "Nom du funnel",
293
+ "steps": "Étapes",
294
+ "steps_description": "Chaque étape est une URL de page ou un événement personnalisé, apparié dans l'ordre au sein d'une session — une seule étape compte les conversions à elle seule.",
295
+ "url_placeholder": "/pricing",
296
+ "event_placeholder": "signup_submitted",
297
+ "add_step": "Ajouter une étape",
298
+ "window": "Fenêtre de conversion (heures)",
299
+ "experiment": "Répartition A/B",
300
+ "experiment_description": "Servez des variations de la page aux visiteurs, affectées côté serveur, et mesurez chaque bras contre les étapes ci-dessus.",
301
+ "experiment_toggle": "Répartir le trafic entre des variations",
302
+ "key_label": "Clé de l'expérience",
303
+ "key": "hero-cta",
304
+ "key_description": "L'identifiant que le code de la page passe à dmsMarketing.variation(…). Minuscules, chiffres, tirets et tirets bas.",
305
+ "variations": "Variations",
306
+ "variations_description": "2 à 8 bras avec des poids relatifs ; le premier bras est le contrôle.",
307
+ "variation_key": "cle-variation",
308
+ "add_variation": "Ajouter une variation"
309
+ },
310
+ "results": {
311
+ "control": "contrôle",
312
+ "arm_control": "contrôle {letter}",
313
+ "arm_variation": "variation {letter}",
314
+ "end_to_end": "{value} de bout en bout",
315
+ "exposed": "{count} session exposée | {count} sessions exposées",
316
+ "meta_frozen": "répartition {split}, gelée",
317
+ "meta_draft": "répartition {split} · aucun trafic affecté",
318
+ "window_running": "en cours depuis le {since}",
319
+ "window_stopped": "test du {since} au {until}",
320
+ "window_runs": "{count} période | {count} périodes",
321
+ "verdict": {
322
+ "lift": "Lift relatif",
323
+ "confidence": "Confiance",
324
+ "sessions": "Sessions"
325
+ },
326
+ "reached_goal": "{count} session a atteint l'objectif | {count} sessions ont atteint l'objectif",
327
+ "significant": "Significatif à 95 %",
328
+ "not_significant": "Non significatif",
329
+ "insufficient": "Pas assez de données",
330
+ "insufficient_data": {
331
+ "title": "Pas encore assez de données",
332
+ "description": "Trop peu de sessions pour comparer les variantes — des taux sur un échantillon aussi mince seraient du bruit, pas un signal. Comptes bruts ci-dessous ; les verdicts apparaîtront quand chaque variante aura assez de résultats."
333
+ },
334
+ "srm_warning": {
335
+ "title": "Répartition anormale (SRM)",
336
+ "description": "La répartition observée entre les bras s'écarte fortement des poids configurés — l'affectation ou la remontée d'expositions est peut-être cassée ; lisez ces chiffres avec méfiance."
337
+ },
338
+ "truncated": {
339
+ "title": "Fenêtre tronquée",
340
+ "description": "La fenêtre d'événements bruts a atteint son plafond : les chiffres ne couvrent que la partie la plus ancienne de la période, et les verdicts A/B sont retenus."
341
+ },
342
+ "empty": {
343
+ "title": "Aucune exposition pour le moment",
344
+ "description": "Aucune session n'a été exposée à cette expérience pendant qu'elle tournait. Ses chiffres sont lus sur sa propre période de test, pas sur la période sélectionnée."
345
+ }
346
+ }
347
+ },
348
+ "settings": {
349
+ "title": "Réglages",
350
+ "description": "Configuration de la collecte, des rétentions et de l'échantillonnage.",
351
+ "tracker_enabled": "Collecte activée",
352
+ "tracker_enabled_description": "Interrupteur général de l'endpoint de collecte et du script de suivi.",
353
+ "raw_retention": "Rétention des événements bruts (jours)",
354
+ "raw_retention_description": "Durée de conservation des événements bruts. Les funnels et heatmaps lisent cette fenêtre ; les tableaux de bord utilisent les agrégats journaliers.",
355
+ "stats_retention": "Rétention des statistiques (jours)",
356
+ "stats_retention_description": "Durée de conservation des agrégats journaliers et des sessions. Plafonnée à 760 jours (25 mois, plafond usuel en mesure d'audience).",
357
+ "heatmap_sample": "Échantillonnage heatmap (%)",
358
+ "heatmap_sample_description": "Part des visites capturant les positions de clic et de défilement. À réduire sur les sites à fort trafic.",
359
+ "snapshot_retention": "Rétention des instantanés de page (jours)",
360
+ "snapshot_retention_description": "Durée de conservation d'un rendu de page capturé comme fond de heatmap. Les instantanés contiennent du contenu de page ; jamais conservés plus longtemps que les événements bruts."
361
+ },
362
+ "websites": {
363
+ "column": {
364
+ "name": "Nom",
365
+ "domain": "Domaine"
366
+ },
367
+ "create": "Ajouter un site",
368
+ "create_title": "Nouveau site",
369
+ "form": {
370
+ "name": "Site principal",
371
+ "domain": "exemple.com",
372
+ "domain_description": "Le domaine racine du site, sans schéma (exemple.com). Ses sous-domaines sont acceptés tels quels ; les autres hôtes — préproduction, autre extension — s'ajoutent via extraDomains dans l'API."
373
+ },
374
+ "snippet": {
375
+ "button": "Script de suivi",
376
+ "title": "Installer le script de suivi",
377
+ "description": "Ajoutez cette balise sur chaque page de {name}, juste avant la fermeture de body ou dans head. Elle est identique pour toutes les pages du site."
378
+ }
379
+ }
380
+ }
381
+ }
382
+ }
@@ -0,0 +1,30 @@
1
+ {
2
+ "name": "@antelopejs/dms-marketing-frontend-vue",
3
+ "version": "0.0.1",
4
+ "private": true,
5
+ "type": "module",
6
+ "main": "./dms.frontend.ts",
7
+ "license": "Apache-2.0",
8
+ "packageManager": "pnpm@10.6.5",
9
+ "scripts": {
10
+ "dev": "pnpm --dir ../playground frontend:dev",
11
+ "format": "prettier --write .",
12
+ "lint": "eslint .",
13
+ "lint:fix": "eslint . --fix",
14
+ "test": "vitest run"
15
+ },
16
+ "dependencies": {
17
+ "vue": "^3.5.18"
18
+ },
19
+ "devDependencies": {
20
+ "@nuxt/ui": "^4.0.1",
21
+ "@vitejs/plugin-vue": "^6.0.0",
22
+ "eslint": "^9.0.0",
23
+ "eslint-plugin-vue": "^10.0.0",
24
+ "jsdom": "^26",
25
+ "prettier": "^3.5.3",
26
+ "typescript": "^5.9.3",
27
+ "typescript-eslint": "^8.0.0",
28
+ "vitest": "^4.1.5"
29
+ }
30
+ }