@modernconsent/vendors 0.0.1

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 (129) hide show
  1. package/LICENSE +21 -0
  2. package/dist/abtasty-3G4JRT5W.js +21 -0
  3. package/dist/abtasty-3G4JRT5W.js.map +1 -0
  4. package/dist/abtasty.d.ts +8 -0
  5. package/dist/abtasty.js +53 -0
  6. package/dist/abtasty.js.map +1 -0
  7. package/dist/amplitude-CFLVTHYV.js +25 -0
  8. package/dist/amplitude-CFLVTHYV.js.map +1 -0
  9. package/dist/amplitude.d.ts +8 -0
  10. package/dist/amplitude.js +57 -0
  11. package/dist/amplitude.js.map +1 -0
  12. package/dist/chunk-6JXWYPMF.js +28 -0
  13. package/dist/chunk-6JXWYPMF.js.map +1 -0
  14. package/dist/chunk-TBZUWLOP.js +35 -0
  15. package/dist/chunk-TBZUWLOP.js.map +1 -0
  16. package/dist/clarity-KJPNK3FJ.js +29 -0
  17. package/dist/clarity-KJPNK3FJ.js.map +1 -0
  18. package/dist/clarity.d.ts +13 -0
  19. package/dist/clarity.js +39 -0
  20. package/dist/clarity.js.map +1 -0
  21. package/dist/criteo-XKQPP2XY.js +23 -0
  22. package/dist/criteo-XKQPP2XY.js.map +1 -0
  23. package/dist/criteo.d.ts +13 -0
  24. package/dist/criteo.js +55 -0
  25. package/dist/criteo.js.map +1 -0
  26. package/dist/gcmads-LKOHK6MW.js +23 -0
  27. package/dist/gcmads-LKOHK6MW.js.map +1 -0
  28. package/dist/gcmads.d.ts +10 -0
  29. package/dist/gcmads.js +33 -0
  30. package/dist/gcmads.js.map +1 -0
  31. package/dist/google-analytics-SSTM7QMW.js +37 -0
  32. package/dist/google-analytics-SSTM7QMW.js.map +1 -0
  33. package/dist/google-analytics.d.ts +14 -0
  34. package/dist/google-analytics.js +69 -0
  35. package/dist/google-analytics.js.map +1 -0
  36. package/dist/googleads-XPXUKIXQ.js +72 -0
  37. package/dist/googleads-XPXUKIXQ.js.map +1 -0
  38. package/dist/googleads.d.ts +14 -0
  39. package/dist/googleads.js +104 -0
  40. package/dist/googleads.js.map +1 -0
  41. package/dist/gtm-WFI6ABNK.js +25 -0
  42. package/dist/gtm-WFI6ABNK.js.map +1 -0
  43. package/dist/gtm.d.ts +13 -0
  44. package/dist/gtm.js +57 -0
  45. package/dist/gtm.js.map +1 -0
  46. package/dist/hotjar-YCFHYSKB.js +38 -0
  47. package/dist/hotjar-YCFHYSKB.js.map +1 -0
  48. package/dist/hotjar.d.ts +8 -0
  49. package/dist/hotjar.js +48 -0
  50. package/dist/hotjar.js.map +1 -0
  51. package/dist/hubspot-TLVPT4LG.js +31 -0
  52. package/dist/hubspot-TLVPT4LG.js.map +1 -0
  53. package/dist/hubspot.d.ts +8 -0
  54. package/dist/hubspot.js +63 -0
  55. package/dist/hubspot.js.map +1 -0
  56. package/dist/index.d.ts +9 -0
  57. package/dist/index.js +46 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/intercom-4MUKJZOV.js +42 -0
  60. package/dist/intercom-4MUKJZOV.js.map +1 -0
  61. package/dist/intercom.d.ts +14 -0
  62. package/dist/intercom.js +52 -0
  63. package/dist/intercom.js.map +1 -0
  64. package/dist/linkedin-insight-EH5OICV7.js +40 -0
  65. package/dist/linkedin-insight-EH5OICV7.js.map +1 -0
  66. package/dist/linkedin-insight.d.ts +16 -0
  67. package/dist/linkedin-insight.js +50 -0
  68. package/dist/linkedin-insight.js.map +1 -0
  69. package/dist/matomo-H4JJCYJR.js +29 -0
  70. package/dist/matomo-H4JJCYJR.js.map +1 -0
  71. package/dist/matomo.d.ts +14 -0
  72. package/dist/matomo.js +39 -0
  73. package/dist/matomo.js.map +1 -0
  74. package/dist/meta-pixel-26NJ4GZJ.js +34 -0
  75. package/dist/meta-pixel-26NJ4GZJ.js.map +1 -0
  76. package/dist/meta-pixel.d.ts +19 -0
  77. package/dist/meta-pixel.js +66 -0
  78. package/dist/meta-pixel.js.map +1 -0
  79. package/dist/piano-analytics-CZXSQQNF.js +30 -0
  80. package/dist/piano-analytics-CZXSQQNF.js.map +1 -0
  81. package/dist/piano-analytics.d.ts +10 -0
  82. package/dist/piano-analytics.js +62 -0
  83. package/dist/piano-analytics.js.map +1 -0
  84. package/dist/pinterest-pixel-B7J3RCSI.js +31 -0
  85. package/dist/pinterest-pixel-B7J3RCSI.js.map +1 -0
  86. package/dist/pinterest-pixel.d.ts +16 -0
  87. package/dist/pinterest-pixel.js +63 -0
  88. package/dist/pinterest-pixel.js.map +1 -0
  89. package/dist/plausible-GI4L4SM4.js +25 -0
  90. package/dist/plausible-GI4L4SM4.js.map +1 -0
  91. package/dist/plausible.d.ts +11 -0
  92. package/dist/plausible.js +57 -0
  93. package/dist/plausible.js.map +1 -0
  94. package/dist/posthog-N2HG7XOO.js +32 -0
  95. package/dist/posthog-N2HG7XOO.js.map +1 -0
  96. package/dist/posthog.d.ts +9 -0
  97. package/dist/posthog.js +42 -0
  98. package/dist/posthog.js.map +1 -0
  99. package/dist/reddit-pixel-SKXRCFEF.js +34 -0
  100. package/dist/reddit-pixel-SKXRCFEF.js.map +1 -0
  101. package/dist/reddit-pixel.d.ts +16 -0
  102. package/dist/reddit-pixel.js +66 -0
  103. package/dist/reddit-pixel.js.map +1 -0
  104. package/dist/segment-GZJFC57W.js +66 -0
  105. package/dist/segment-GZJFC57W.js.map +1 -0
  106. package/dist/segment.d.ts +13 -0
  107. package/dist/segment.js +76 -0
  108. package/dist/segment.js.map +1 -0
  109. package/dist/sentry-UIBASRVZ.js +27 -0
  110. package/dist/sentry-UIBASRVZ.js.map +1 -0
  111. package/dist/sentry.d.ts +10 -0
  112. package/dist/sentry.js +59 -0
  113. package/dist/sentry.js.map +1 -0
  114. package/dist/smartsupp-I6XHQISS.js +27 -0
  115. package/dist/smartsupp-I6XHQISS.js.map +1 -0
  116. package/dist/smartsupp.d.ts +14 -0
  117. package/dist/smartsupp.js +37 -0
  118. package/dist/smartsupp.js.map +1 -0
  119. package/dist/snapchat-pixel-SYR3ZSSB.js +37 -0
  120. package/dist/snapchat-pixel-SYR3ZSSB.js.map +1 -0
  121. package/dist/snapchat-pixel.d.ts +15 -0
  122. package/dist/snapchat-pixel.js +47 -0
  123. package/dist/snapchat-pixel.js.map +1 -0
  124. package/dist/tiktok-pixel-FDGVKGOH.js +70 -0
  125. package/dist/tiktok-pixel-FDGVKGOH.js.map +1 -0
  126. package/dist/tiktok-pixel.d.ts +14 -0
  127. package/dist/tiktok-pixel.js +80 -0
  128. package/dist/tiktok-pixel.js.map +1 -0
  129. package/package.json +58 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Kévin Schnekenburger
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,21 @@
1
+ import { loadScript } from './chunk-6JXWYPMF.js';
2
+ import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
3
+
4
+ // src/abtasty.ts
5
+ var ABTasty = {
6
+ name: "AB Tasty",
7
+ category: "Analytics",
8
+ description: "A/B testing, feature flagging et personnalisation de l'exp\xE9rience utilisateur.",
9
+ ...PURPOSE_ANALYTICS,
10
+ requireConsent: true,
11
+ artifacts: ["ABTasty", "ABTastySession"],
12
+ init: (config) => {
13
+ if (!config?.accountId) return;
14
+ loadScript(`https://try.abtasty.com/${config.accountId}.js`);
15
+ }
16
+ };
17
+ var abtasty_default = ABTasty;
18
+
19
+ export { abtasty_default as default };
20
+ //# sourceMappingURL=abtasty-3G4JRT5W.js.map
21
+ //# sourceMappingURL=abtasty-3G4JRT5W.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/abtasty.ts"],"names":[],"mappings":";;;;AAQA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,mFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,SAAA,EAAW,gBAAgB,CAAA;AAAA,EACvC,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACxB,IAAA,UAAA,CAAW,CAAA,wBAAA,EAA2B,MAAA,CAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EAC7D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"abtasty-3G4JRT5W.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ABTastyConfig = {\n accountId: string;\n};\n\nconst ABTasty: Vendor<ABTastyConfig> = {\n name: 'AB Tasty',\n category: 'Analytics',\n description: \"A/B testing, feature flagging et personnalisation de l'expérience utilisateur.\",\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['ABTasty', 'ABTastySession'],\n init: (config: ABTastyConfig) => {\n if (!config?.accountId) return;\n loadScript(`https://try.abtasty.com/${config.accountId}.js`);\n },\n};\n\nexport default ABTasty;\n"]}
@@ -0,0 +1,8 @@
1
+ import { Vendor } from '@modernconsent/core';
2
+
3
+ type ABTastyConfig = {
4
+ accountId: string;
5
+ };
6
+ declare const ABTasty: Vendor<ABTastyConfig>;
7
+
8
+ export { ABTasty as default };
@@ -0,0 +1,53 @@
1
+ // src/utils/loader.ts
2
+ function loadScript(src, callback, attrs = {}) {
3
+ return new Promise((resolve, reject) => {
4
+ if (document.querySelector(`script[src="${src}"]`)) {
5
+ resolve();
6
+ return;
7
+ }
8
+ const script = document.createElement("script");
9
+ script.src = src;
10
+ script.async = true;
11
+ for (const [key, value] of Object.entries(attrs)) {
12
+ script.setAttribute(key, value);
13
+ }
14
+ script.onload = () => {
15
+ resolve();
16
+ };
17
+ script.onerror = () => {
18
+ reject(new Error(`Failed to load script: ${src}`));
19
+ };
20
+ document.head.appendChild(script);
21
+ });
22
+ }
23
+
24
+ // src/utils/purposes.ts
25
+ var PURPOSE_ANALYTICS = {
26
+ purposeLabel: {
27
+ fr: "Analyse de session utilisateur et mesure d'audience",
28
+ en: "User session analysis and audience measurement"
29
+ },
30
+ purposeDescription: {
31
+ fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
32
+ en: "These cookies allow us to compile statistics on site traffic and usage."
33
+ }
34
+ };
35
+
36
+ // src/abtasty.ts
37
+ var ABTasty = {
38
+ name: "AB Tasty",
39
+ category: "Analytics",
40
+ description: "A/B testing, feature flagging et personnalisation de l'exp\xE9rience utilisateur.",
41
+ ...PURPOSE_ANALYTICS,
42
+ requireConsent: true,
43
+ artifacts: ["ABTasty", "ABTastySession"],
44
+ init: (config) => {
45
+ if (!config?.accountId) return;
46
+ loadScript(`https://try.abtasty.com/${config.accountId}.js`);
47
+ }
48
+ };
49
+ var abtasty_default = ABTasty;
50
+
51
+ export { abtasty_default as default };
52
+ //# sourceMappingURL=abtasty.js.map
53
+ //# sourceMappingURL=abtasty.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/abtasty.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;AC5BO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACNA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,UAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,mFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,SAAA,EAAW,gBAAgB,CAAA;AAAA,EACvC,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AACxB,IAAA,UAAA,CAAW,CAAA,wBAAA,EAA2B,MAAA,CAAO,SAAS,CAAA,GAAA,CAAK,CAAA;AAAA,EAC7D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"abtasty.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ABTastyConfig = {\n accountId: string;\n};\n\nconst ABTasty: Vendor<ABTastyConfig> = {\n name: 'AB Tasty',\n category: 'Analytics',\n description: \"A/B testing, feature flagging et personnalisation de l'expérience utilisateur.\",\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['ABTasty', 'ABTastySession'],\n init: (config: ABTastyConfig) => {\n if (!config?.accountId) return;\n loadScript(`https://try.abtasty.com/${config.accountId}.js`);\n },\n};\n\nexport default ABTasty;\n"]}
@@ -0,0 +1,25 @@
1
+ import { loadScript } from './chunk-6JXWYPMF.js';
2
+ import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
3
+
4
+ // src/amplitude.ts
5
+ var Amplitude = {
6
+ name: "Amplitude",
7
+ category: "Analytics",
8
+ description: "Analyse produit : \xE9v\xE9nements, funnels, cohortes et r\xE9tention utilisateur.",
9
+ ...PURPOSE_ANALYTICS,
10
+ requireConsent: true,
11
+ artifacts: ["amp_", "AMP_unsent"],
12
+ init: (config) => {
13
+ if (!config?.apiKey) return;
14
+ loadScript("https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz").then(() => {
15
+ if (window.amplitude) {
16
+ window.amplitude.init(config.apiKey);
17
+ }
18
+ });
19
+ }
20
+ };
21
+ var amplitude_default = Amplitude;
22
+
23
+ export { amplitude_default as default };
24
+ //# sourceMappingURL=amplitude-CFLVTHYV.js.map
25
+ //# sourceMappingURL=amplitude-CFLVTHYV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/amplitude.ts"],"names":[],"mappings":";;;;AAQA,IAAM,SAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,oFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EAChC,IAAA,EAAM,CAAC,MAAA,KAA4B;AACjC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,UAAA,CAAW,mEAAmE,CAAA,CAAE,IAAA,CAAK,MAAM;AACzF,MAAA,IAAK,OAAe,SAAA,EAAW;AAC7B,QAAC,MAAA,CAAe,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,iBAAA,GAAQ","file":"amplitude-CFLVTHYV.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype AmplitudeConfig = {\n apiKey: string;\n};\n\nconst Amplitude: Vendor<AmplitudeConfig> = {\n name: 'Amplitude',\n category: 'Analytics',\n description: 'Analyse produit : événements, funnels, cohortes et rétention utilisateur.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['amp_', 'AMP_unsent'],\n init: (config: AmplitudeConfig) => {\n if (!config?.apiKey) return;\n\n loadScript('https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz').then(() => {\n if ((window as any).amplitude) {\n (window as any).amplitude.init(config.apiKey);\n }\n });\n },\n};\n\nexport default Amplitude;\n"]}
@@ -0,0 +1,8 @@
1
+ import { Vendor } from '@modernconsent/core';
2
+
3
+ type AmplitudeConfig = {
4
+ apiKey: string;
5
+ };
6
+ declare const Amplitude: Vendor<AmplitudeConfig>;
7
+
8
+ export { Amplitude as default };
@@ -0,0 +1,57 @@
1
+ // src/utils/loader.ts
2
+ function loadScript(src, callback, attrs = {}) {
3
+ return new Promise((resolve, reject) => {
4
+ if (document.querySelector(`script[src="${src}"]`)) {
5
+ resolve();
6
+ return;
7
+ }
8
+ const script = document.createElement("script");
9
+ script.src = src;
10
+ script.async = true;
11
+ for (const [key, value] of Object.entries(attrs)) {
12
+ script.setAttribute(key, value);
13
+ }
14
+ script.onload = () => {
15
+ resolve();
16
+ };
17
+ script.onerror = () => {
18
+ reject(new Error(`Failed to load script: ${src}`));
19
+ };
20
+ document.head.appendChild(script);
21
+ });
22
+ }
23
+
24
+ // src/utils/purposes.ts
25
+ var PURPOSE_ANALYTICS = {
26
+ purposeLabel: {
27
+ fr: "Analyse de session utilisateur et mesure d'audience",
28
+ en: "User session analysis and audience measurement"
29
+ },
30
+ purposeDescription: {
31
+ fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
32
+ en: "These cookies allow us to compile statistics on site traffic and usage."
33
+ }
34
+ };
35
+
36
+ // src/amplitude.ts
37
+ var Amplitude = {
38
+ name: "Amplitude",
39
+ category: "Analytics",
40
+ description: "Analyse produit : \xE9v\xE9nements, funnels, cohortes et r\xE9tention utilisateur.",
41
+ ...PURPOSE_ANALYTICS,
42
+ requireConsent: true,
43
+ artifacts: ["amp_", "AMP_unsent"],
44
+ init: (config) => {
45
+ if (!config?.apiKey) return;
46
+ loadScript("https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz").then(() => {
47
+ if (window.amplitude) {
48
+ window.amplitude.init(config.apiKey);
49
+ }
50
+ });
51
+ }
52
+ };
53
+ var amplitude_default = Amplitude;
54
+
55
+ export { amplitude_default as default };
56
+ //# sourceMappingURL=amplitude.js.map
57
+ //# sourceMappingURL=amplitude.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/amplitude.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;AC5BO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACNA,IAAM,SAAA,GAAqC;AAAA,EACzC,IAAA,EAAM,WAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EAAa,oFAAA;AAAA,EACb,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,MAAA,EAAQ,YAAY,CAAA;AAAA,EAChC,IAAA,EAAM,CAAC,MAAA,KAA4B;AACjC,IAAA,IAAI,CAAC,QAAQ,MAAA,EAAQ;AAErB,IAAA,UAAA,CAAW,mEAAmE,CAAA,CAAE,IAAA,CAAK,MAAM;AACzF,MAAA,IAAK,OAAe,SAAA,EAAW;AAC7B,QAAC,MAAA,CAAe,SAAA,CAAU,IAAA,CAAK,MAAA,CAAO,MAAM,CAAA;AAAA,MAC9C;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF,CAAA;AAEA,IAAO,iBAAA,GAAQ","file":"amplitude.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype AmplitudeConfig = {\n apiKey: string;\n};\n\nconst Amplitude: Vendor<AmplitudeConfig> = {\n name: 'Amplitude',\n category: 'Analytics',\n description: 'Analyse produit : événements, funnels, cohortes et rétention utilisateur.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['amp_', 'AMP_unsent'],\n init: (config: AmplitudeConfig) => {\n if (!config?.apiKey) return;\n\n loadScript('https://cdn.amplitude.com/libs/analytics-browser-2.11.1-min.js.gz').then(() => {\n if ((window as any).amplitude) {\n (window as any).amplitude.init(config.apiKey);\n }\n });\n },\n};\n\nexport default Amplitude;\n"]}
@@ -0,0 +1,28 @@
1
+ // src/utils/loader.ts
2
+ function loadScript(src, callback, attrs = {}) {
3
+ return new Promise((resolve, reject) => {
4
+ if (document.querySelector(`script[src="${src}"]`)) {
5
+ resolve();
6
+ callback?.();
7
+ return;
8
+ }
9
+ const script = document.createElement("script");
10
+ script.src = src;
11
+ script.async = true;
12
+ for (const [key, value] of Object.entries(attrs)) {
13
+ script.setAttribute(key, value);
14
+ }
15
+ script.onload = () => {
16
+ resolve();
17
+ callback?.();
18
+ };
19
+ script.onerror = () => {
20
+ reject(new Error(`Failed to load script: ${src}`));
21
+ };
22
+ document.head.appendChild(script);
23
+ });
24
+ }
25
+
26
+ export { loadScript };
27
+ //# sourceMappingURL=chunk-6JXWYPMF.js.map
28
+ //# sourceMappingURL=chunk-6JXWYPMF.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/loader.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AACR,MAAA,QAAA,IAAW;AACX,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACR,MAAA,QAAA,IAAW;AAAA,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH","file":"chunk-6JXWYPMF.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n"]}
@@ -0,0 +1,35 @@
1
+ // src/utils/purposes.ts
2
+ var PURPOSE_ANALYTICS = {
3
+ purposeLabel: {
4
+ fr: "Analyse de session utilisateur et mesure d'audience",
5
+ en: "User session analysis and audience measurement"
6
+ },
7
+ purposeDescription: {
8
+ fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
9
+ en: "These cookies allow us to compile statistics on site traffic and usage."
10
+ }
11
+ };
12
+ var PURPOSE_ADS = {
13
+ purposeLabel: {
14
+ fr: "Ciblage publicitaire",
15
+ en: "Advertising targeting"
16
+ },
17
+ purposeDescription: {
18
+ fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
19
+ en: "These cookies are used to deliver personalized ads based on your browsing behavior."
20
+ }
21
+ };
22
+ var PURPOSE_SUPPORT = {
23
+ purposeLabel: {
24
+ fr: "Support et assistance",
25
+ en: "Support and assistance"
26
+ },
27
+ purposeDescription: {
28
+ fr: "Ces cookies permettent d'interagir avec notre service client et de b\xE9n\xE9ficier d'une assistance en direct.",
29
+ en: "These cookies enable interaction with our customer support and provide live assistance."
30
+ }
31
+ };
32
+
33
+ export { PURPOSE_ADS, PURPOSE_ANALYTICS, PURPOSE_SUPPORT };
34
+ //# sourceMappingURL=chunk-TBZUWLOP.js.map
35
+ //# sourceMappingURL=chunk-TBZUWLOP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/purposes.ts"],"names":[],"mappings":";AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER;AAEO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER;AAEO,IAAM,eAAA,GAAkB;AAAA,EAC7B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,uBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,iHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER","file":"chunk-TBZUWLOP.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n"]}
@@ -0,0 +1,29 @@
1
+ import { PURPOSE_ANALYTICS } from './chunk-TBZUWLOP.js';
2
+
3
+ // src/clarity.ts
4
+ var Clarity = {
5
+ name: "Microsoft Clarity",
6
+ category: "Analytics",
7
+ description: "Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.",
8
+ ...PURPOSE_ANALYTICS,
9
+ requireConsent: true,
10
+ artifacts: ["_clck", "_clsk", "CLID", "ANONCHK", "MR", "MUID", "SM"],
11
+ init: (config) => {
12
+ if (!config?.projectId) return;
13
+ (function(c, l, a, r, i) {
14
+ c[a] = c[a] || function(...args) {
15
+ (c[a].q = c[a].q || []).push(args);
16
+ };
17
+ const t = l.createElement(r);
18
+ t.async = true;
19
+ t.src = "https://www.clarity.ms/tag/" + i;
20
+ const y = l.getElementsByTagName(r)[0];
21
+ y.parentNode.insertBefore(t, y);
22
+ })(window, document, "clarity", "script", config.projectId);
23
+ }
24
+ };
25
+ var clarity_default = Clarity;
26
+
27
+ export { clarity_default as default };
28
+ //# sourceMappingURL=clarity-KJPNK3FJ.js.map
29
+ //# sourceMappingURL=clarity-KJPNK3FJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/clarity.ts"],"names":[],"mappings":";;;AAaA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,mBAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EACE,mGAAA;AAAA,EACF,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAA,EAAW,IAAA,EAAM,QAAQ,IAAI,CAAA;AAAA,EACnE,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,CAAC,SAAU,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAQ,GAAW,CAAA,EAAW;AACvD,MAAA,CAAA,CAAE,CAAC,CAAA,GACD,CAAA,CAAE,CAAC,CAAA,IACH,YAAa,IAAA,EAAa;AACxB,QAAA,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,CAAA;AACF,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,CAAC,CAAA;AAC3B,MAAA,CAAA,CAAE,KAAA,GAAQ,IAAA;AACV,MAAA,CAAA,CAAE,MAAM,6BAAA,GAAgC,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,oBAAA,CAAqB,CAAC,EAAE,CAAC,CAAA;AACrC,MAAA,CAAA,CAAE,UAAA,CAAY,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,GAAG,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAO,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"clarity-KJPNK3FJ.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ClarityConfig = {\n projectId: string;\n};\n\ndeclare global {\n interface Window {\n clarity: (...args: any[]) => void;\n }\n}\n\nconst Clarity: Vendor<ClarityConfig> = {\n name: 'Microsoft Clarity',\n category: 'Analytics',\n description:\n 'Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['_clck', '_clsk', 'CLID', 'ANONCHK', 'MR', 'MUID', 'SM'],\n init: (config: ClarityConfig) => {\n if (!config?.projectId) return;\n\n (function (c: any, l: any, a: any, r: string, i: string) {\n c[a] =\n c[a] ||\n function (...args: any[]) {\n (c[a].q = c[a].q || []).push(args);\n };\n const t = l.createElement(r) as HTMLScriptElement;\n t.async = true;\n t.src = 'https://www.clarity.ms/tag/' + i;\n const y = l.getElementsByTagName(r)[0] as HTMLScriptElement;\n y.parentNode!.insertBefore(t, y);\n })(window, document, 'clarity', 'script', config.projectId);\n },\n};\n\nexport default Clarity;\n"]}
@@ -0,0 +1,13 @@
1
+ import { Vendor } from '@modernconsent/core';
2
+
3
+ type ClarityConfig = {
4
+ projectId: string;
5
+ };
6
+ declare global {
7
+ interface Window {
8
+ clarity: (...args: any[]) => void;
9
+ }
10
+ }
11
+ declare const Clarity: Vendor<ClarityConfig>;
12
+
13
+ export { Clarity as default };
@@ -0,0 +1,39 @@
1
+ // src/utils/purposes.ts
2
+ var PURPOSE_ANALYTICS = {
3
+ purposeLabel: {
4
+ fr: "Analyse de session utilisateur et mesure d'audience",
5
+ en: "User session analysis and audience measurement"
6
+ },
7
+ purposeDescription: {
8
+ fr: "Ces cookies nous permettent d'\xE9tablir des statistiques et volumes de fr\xE9quentation et d'utilisation des \xE9l\xE9ments du site.",
9
+ en: "These cookies allow us to compile statistics on site traffic and usage."
10
+ }
11
+ };
12
+
13
+ // src/clarity.ts
14
+ var Clarity = {
15
+ name: "Microsoft Clarity",
16
+ category: "Analytics",
17
+ description: "Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.",
18
+ ...PURPOSE_ANALYTICS,
19
+ requireConsent: true,
20
+ artifacts: ["_clck", "_clsk", "CLID", "ANONCHK", "MR", "MUID", "SM"],
21
+ init: (config) => {
22
+ if (!config?.projectId) return;
23
+ (function(c, l, a, r, i) {
24
+ c[a] = c[a] || function(...args) {
25
+ (c[a].q = c[a].q || []).push(args);
26
+ };
27
+ const t = l.createElement(r);
28
+ t.async = true;
29
+ t.src = "https://www.clarity.ms/tag/" + i;
30
+ const y = l.getElementsByTagName(r)[0];
31
+ y.parentNode.insertBefore(t, y);
32
+ })(window, document, "clarity", "script", config.projectId);
33
+ }
34
+ };
35
+ var clarity_default = Clarity;
36
+
37
+ export { clarity_default as default };
38
+ //# sourceMappingURL=clarity.js.map
39
+ //# sourceMappingURL=clarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/purposes.ts","../src/clarity.ts"],"names":[],"mappings":";AAKO,IAAM,iBAAA,GAAoB;AAAA,EAC/B,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,qDAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,uIAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACDA,IAAM,OAAA,GAAiC;AAAA,EACrC,IAAA,EAAM,mBAAA;AAAA,EACN,QAAA,EAAU,WAAA;AAAA,EACV,WAAA,EACE,mGAAA;AAAA,EACF,GAAG,iBAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,OAAA,EAAS,OAAA,EAAS,QAAQ,SAAA,EAAW,IAAA,EAAM,QAAQ,IAAI,CAAA;AAAA,EACnE,IAAA,EAAM,CAAC,MAAA,KAA0B;AAC/B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,CAAC,SAAU,CAAA,EAAQ,CAAA,EAAQ,CAAA,EAAQ,GAAW,CAAA,EAAW;AACvD,MAAA,CAAA,CAAE,CAAC,CAAA,GACD,CAAA,CAAE,CAAC,CAAA,IACH,YAAa,IAAA,EAAa;AACxB,QAAA,CAAC,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,GAAI,CAAA,CAAE,CAAC,CAAA,CAAE,CAAA,IAAK,EAAC,EAAG,IAAA,CAAK,IAAI,CAAA;AAAA,MACnC,CAAA;AACF,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,aAAA,CAAc,CAAC,CAAA;AAC3B,MAAA,CAAA,CAAE,KAAA,GAAQ,IAAA;AACV,MAAA,CAAA,CAAE,MAAM,6BAAA,GAAgC,CAAA;AACxC,MAAA,MAAM,CAAA,GAAI,CAAA,CAAE,oBAAA,CAAqB,CAAC,EAAE,CAAC,CAAA;AACrC,MAAA,CAAA,CAAE,UAAA,CAAY,YAAA,CAAa,CAAA,EAAG,CAAC,CAAA;AAAA,IACjC,GAAG,MAAA,EAAQ,QAAA,EAAU,SAAA,EAAW,QAAA,EAAU,OAAO,SAAS,CAAA;AAAA,EAC5D;AACF,CAAA;AAEA,IAAO,eAAA,GAAQ","file":"clarity.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ANALYTICS } from './utils/purposes';\n\ntype ClarityConfig = {\n projectId: string;\n};\n\ndeclare global {\n interface Window {\n clarity: (...args: any[]) => void;\n }\n}\n\nconst Clarity: Vendor<ClarityConfig> = {\n name: 'Microsoft Clarity',\n category: 'Analytics',\n description:\n 'Enregistrement de sessions et cartes de chaleur pour comprendre le comportement des utilisateurs.',\n ...PURPOSE_ANALYTICS,\n requireConsent: true,\n artifacts: ['_clck', '_clsk', 'CLID', 'ANONCHK', 'MR', 'MUID', 'SM'],\n init: (config: ClarityConfig) => {\n if (!config?.projectId) return;\n\n (function (c: any, l: any, a: any, r: string, i: string) {\n c[a] =\n c[a] ||\n function (...args: any[]) {\n (c[a].q = c[a].q || []).push(args);\n };\n const t = l.createElement(r) as HTMLScriptElement;\n t.async = true;\n t.src = 'https://www.clarity.ms/tag/' + i;\n const y = l.getElementsByTagName(r)[0] as HTMLScriptElement;\n y.parentNode!.insertBefore(t, y);\n })(window, document, 'clarity', 'script', config.projectId);\n },\n};\n\nexport default Clarity;\n"]}
@@ -0,0 +1,23 @@
1
+ import { loadScript } from './chunk-6JXWYPMF.js';
2
+ import { PURPOSE_ADS } from './chunk-TBZUWLOP.js';
3
+
4
+ // src/criteo.ts
5
+ var Criteo = {
6
+ name: "Criteo",
7
+ category: "Publicit\xE9",
8
+ description: "Reciblage publicitaire et annonces display dynamiques.",
9
+ ...PURPOSE_ADS,
10
+ requireConsent: true,
11
+ artifacts: ["cto_bundle", "cto_bidid", "cto_optout", "criteo_write_test"],
12
+ init: (config) => {
13
+ if (!config?.accountId) return;
14
+ window.criteo_q = window.criteo_q || [];
15
+ window.criteo_q.push({ event: "setAccount", account: config.accountId }, { event: "viewPage" });
16
+ loadScript("https://static.criteo.net/js/ld/ld.js", void 0, { async: "true" });
17
+ }
18
+ };
19
+ var criteo_default = Criteo;
20
+
21
+ export { criteo_default as default };
22
+ //# sourceMappingURL=criteo-XKQPP2XY.js.map
23
+ //# sourceMappingURL=criteo-XKQPP2XY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/criteo.ts"],"names":[],"mappings":";;;;AAcA,IAAM,MAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,wDAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,YAAA,EAAc,WAAA,EAAa,cAAc,mBAAmB,CAAA;AAAA,EACxE,IAAA,EAAM,CAAC,MAAA,KAAyB;AAC9B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,EAAC;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,MAAA,CAAO,SAAA,EAAU,EAAG,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAE9F,IAAA,UAAA,CAAW,uCAAA,EAAyC,MAAA,EAAW,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"criteo-XKQPP2XY.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ntype CriteoConfig = {\n accountId: string;\n};\n\ndeclare global {\n interface Window {\n criteo_q: any[];\n }\n}\n\nconst Criteo: Vendor<CriteoConfig> = {\n name: 'Criteo',\n category: 'Publicité',\n description: 'Reciblage publicitaire et annonces display dynamiques.',\n ...PURPOSE_ADS,\n requireConsent: true,\n artifacts: ['cto_bundle', 'cto_bidid', 'cto_optout', 'criteo_write_test'],\n init: (config: CriteoConfig) => {\n if (!config?.accountId) return;\n\n window.criteo_q = window.criteo_q || [];\n window.criteo_q.push({ event: 'setAccount', account: config.accountId }, { event: 'viewPage' });\n\n loadScript('https://static.criteo.net/js/ld/ld.js', undefined, { async: 'true' });\n },\n};\n\nexport default Criteo;\n"]}
@@ -0,0 +1,13 @@
1
+ import { Vendor } from '@modernconsent/core';
2
+
3
+ type CriteoConfig = {
4
+ accountId: string;
5
+ };
6
+ declare global {
7
+ interface Window {
8
+ criteo_q: any[];
9
+ }
10
+ }
11
+ declare const Criteo: Vendor<CriteoConfig>;
12
+
13
+ export { Criteo as default };
package/dist/criteo.js ADDED
@@ -0,0 +1,55 @@
1
+ // src/utils/loader.ts
2
+ function loadScript(src, callback, attrs = {}) {
3
+ return new Promise((resolve, reject) => {
4
+ if (document.querySelector(`script[src="${src}"]`)) {
5
+ resolve();
6
+ return;
7
+ }
8
+ const script = document.createElement("script");
9
+ script.src = src;
10
+ script.async = true;
11
+ for (const [key, value] of Object.entries(attrs)) {
12
+ script.setAttribute(key, value);
13
+ }
14
+ script.onload = () => {
15
+ resolve();
16
+ };
17
+ script.onerror = () => {
18
+ reject(new Error(`Failed to load script: ${src}`));
19
+ };
20
+ document.head.appendChild(script);
21
+ });
22
+ }
23
+
24
+ // src/utils/purposes.ts
25
+ var PURPOSE_ADS = {
26
+ purposeLabel: {
27
+ fr: "Ciblage publicitaire",
28
+ en: "Advertising targeting"
29
+ },
30
+ purposeDescription: {
31
+ fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
32
+ en: "These cookies are used to deliver personalized ads based on your browsing behavior."
33
+ }
34
+ };
35
+
36
+ // src/criteo.ts
37
+ var Criteo = {
38
+ name: "Criteo",
39
+ category: "Publicit\xE9",
40
+ description: "Reciblage publicitaire et annonces display dynamiques.",
41
+ ...PURPOSE_ADS,
42
+ requireConsent: true,
43
+ artifacts: ["cto_bundle", "cto_bidid", "cto_optout", "criteo_write_test"],
44
+ init: (config) => {
45
+ if (!config?.accountId) return;
46
+ window.criteo_q = window.criteo_q || [];
47
+ window.criteo_q.push({ event: "setAccount", account: config.accountId }, { event: "viewPage" });
48
+ loadScript("https://static.criteo.net/js/ld/ld.js", void 0, { async: "true" });
49
+ }
50
+ };
51
+ var criteo_default = Criteo;
52
+
53
+ export { criteo_default as default };
54
+ //# sourceMappingURL=criteo.js.map
55
+ //# sourceMappingURL=criteo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/loader.ts","../src/utils/purposes.ts","../src/criteo.ts"],"names":[],"mappings":";AAAO,SAAS,UAAA,CACd,GAAA,EACA,QAAA,EACA,KAAA,GAAgC,EAAC,EAClB;AACf,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAItC,IAAA,IAAI,QAAA,CAAS,aAAA,CAAc,CAAA,YAAA,EAAe,GAAG,IAAI,CAAA,EAAG;AAClD,MAAA,OAAA,EAAQ;AAER,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,QAAA,CAAS,aAAA,CAAc,QAAQ,CAAA;AAC9C,IAAA,MAAA,CAAO,GAAA,GAAM,GAAA;AACb,IAAA,MAAA,CAAO,KAAA,GAAQ,IAAA;AAEf,IAAA,KAAA,MAAW,CAAC,GAAA,EAAK,KAAK,KAAK,MAAA,CAAO,OAAA,CAAQ,KAAK,CAAA,EAAG;AAChD,MAAA,MAAA,CAAO,YAAA,CAAa,KAAK,KAAK,CAAA;AAAA,IAChC;AAEA,IAAA,MAAA,CAAO,SAAS,MAAM;AACpB,MAAA,OAAA,EAAQ;AACG,IACb,CAAA;AAEA,IAAA,MAAA,CAAO,UAAU,MAAM;AACrB,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,CAAA,uBAAA,EAA0B,GAAG,EAAE,CAAC,CAAA;AAAA,IACnD,CAAA;AACA,IAAA,QAAA,CAAS,IAAA,CAAK,YAAY,MAAM,CAAA;AAAA,EAClC,CAAC,CAAA;AACH;;;ACjBO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;ACXA,IAAM,MAAA,GAA+B;AAAA,EACnC,IAAA,EAAM,QAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,wDAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,SAAA,EAAW,CAAC,YAAA,EAAc,WAAA,EAAa,cAAc,mBAAmB,CAAA;AAAA,EACxE,IAAA,EAAM,CAAC,MAAA,KAAyB;AAC9B,IAAA,IAAI,CAAC,QAAQ,SAAA,EAAW;AAExB,IAAA,MAAA,CAAO,QAAA,GAAW,MAAA,CAAO,QAAA,IAAY,EAAC;AACtC,IAAA,MAAA,CAAO,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,YAAA,EAAc,OAAA,EAAS,MAAA,CAAO,SAAA,EAAU,EAAG,EAAE,KAAA,EAAO,UAAA,EAAY,CAAA;AAE9F,IAAA,UAAA,CAAW,uCAAA,EAAyC,MAAA,EAAW,EAAE,KAAA,EAAO,QAAQ,CAAA;AAAA,EAClF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"criteo.js","sourcesContent":["export function loadScript(\n src: string,\n callback?: () => void,\n attrs: Record<string, string> = {},\n): Promise<void> {\n return new Promise((resolve, reject) => {\n /**\n * check if already loaded.\n */\n if (document.querySelector(`script[src=\"${src}\"]`)) {\n resolve();\n callback?.();\n return;\n }\n\n const script = document.createElement('script');\n script.src = src;\n script.async = true;\n\n for (const [key, value] of Object.entries(attrs)) {\n script.setAttribute(key, value);\n }\n\n script.onload = () => {\n resolve();\n callback?.();\n };\n\n script.onerror = () => {\n reject(new Error(`Failed to load script: ${src}`));\n };\n document.head.appendChild(script);\n });\n}\n","/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { loadScript } from './utils/loader';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ntype CriteoConfig = {\n accountId: string;\n};\n\ndeclare global {\n interface Window {\n criteo_q: any[];\n }\n}\n\nconst Criteo: Vendor<CriteoConfig> = {\n name: 'Criteo',\n category: 'Publicité',\n description: 'Reciblage publicitaire et annonces display dynamiques.',\n ...PURPOSE_ADS,\n requireConsent: true,\n artifacts: ['cto_bundle', 'cto_bidid', 'cto_optout', 'criteo_write_test'],\n init: (config: CriteoConfig) => {\n if (!config?.accountId) return;\n\n window.criteo_q = window.criteo_q || [];\n window.criteo_q.push({ event: 'setAccount', account: config.accountId }, { event: 'viewPage' });\n\n loadScript('https://static.criteo.net/js/ld/ld.js', undefined, { async: 'true' });\n },\n};\n\nexport default Criteo;\n"]}
@@ -0,0 +1,23 @@
1
+ import { PURPOSE_ADS } from './chunk-TBZUWLOP.js';
2
+
3
+ // src/gcmads.ts
4
+ var GCMAds = {
5
+ name: "Google Ads (Personnalis\xE9s)",
6
+ category: "Publicit\xE9",
7
+ description: "Active la personnalisation des publicit\xE9s via Google Consent Mode.",
8
+ ...PURPOSE_ADS,
9
+ requireConsent: true,
10
+ init: () => {
11
+ if (typeof window.gtag === "function") {
12
+ window.gtag("consent", "update", {
13
+ ad_personalization: "granted",
14
+ ad_user_data: "granted"
15
+ });
16
+ }
17
+ }
18
+ };
19
+ var gcmads_default = GCMAds;
20
+
21
+ export { gcmads_default as default };
22
+ //# sourceMappingURL=gcmads-LKOHK6MW.js.map
23
+ //# sourceMappingURL=gcmads-LKOHK6MW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/gcmads.ts"],"names":[],"mappings":";;;AASA,IAAM,MAAA,GAAiB;AAAA,EACrB,IAAA,EAAM,+BAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,uEAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,MAAM,MAAM;AACV,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,QAAA,EAAU;AAAA,QAC/B,kBAAA,EAAoB,SAAA;AAAA,QACpB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"gcmads-LKOHK6MW.js","sourcesContent":["import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ndeclare global {\n interface Window {\n gtag: (...args: any[]) => void;\n }\n}\n\nconst GCMAds: Vendor = {\n name: 'Google Ads (Personnalisés)',\n category: 'Publicité',\n description: 'Active la personnalisation des publicités via Google Consent Mode.',\n ...PURPOSE_ADS,\n requireConsent: true,\n init: () => {\n if (typeof window.gtag === 'function') {\n window.gtag('consent', 'update', {\n ad_personalization: 'granted',\n ad_user_data: 'granted',\n });\n }\n },\n};\n\nexport default GCMAds;\n"]}
@@ -0,0 +1,10 @@
1
+ import { Vendor } from '@modernconsent/core';
2
+
3
+ declare global {
4
+ interface Window {
5
+ gtag: (...args: any[]) => void;
6
+ }
7
+ }
8
+ declare const GCMAds: Vendor;
9
+
10
+ export { GCMAds as default };
package/dist/gcmads.js ADDED
@@ -0,0 +1,33 @@
1
+ // src/utils/purposes.ts
2
+ var PURPOSE_ADS = {
3
+ purposeLabel: {
4
+ fr: "Ciblage publicitaire",
5
+ en: "Advertising targeting"
6
+ },
7
+ purposeDescription: {
8
+ fr: "Ces cookies sont utilis\xE9s pour vous proposer des publicit\xE9s personnalis\xE9es en fonction de votre navigation.",
9
+ en: "These cookies are used to deliver personalized ads based on your browsing behavior."
10
+ }
11
+ };
12
+
13
+ // src/gcmads.ts
14
+ var GCMAds = {
15
+ name: "Google Ads (Personnalis\xE9s)",
16
+ category: "Publicit\xE9",
17
+ description: "Active la personnalisation des publicit\xE9s via Google Consent Mode.",
18
+ ...PURPOSE_ADS,
19
+ requireConsent: true,
20
+ init: () => {
21
+ if (typeof window.gtag === "function") {
22
+ window.gtag("consent", "update", {
23
+ ad_personalization: "granted",
24
+ ad_user_data: "granted"
25
+ });
26
+ }
27
+ }
28
+ };
29
+ var gcmads_default = GCMAds;
30
+
31
+ export { gcmads_default as default };
32
+ //# sourceMappingURL=gcmads.js.map
33
+ //# sourceMappingURL=gcmads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/purposes.ts","../src/gcmads.ts"],"names":[],"mappings":";AAgBO,IAAM,WAAA,GAAc;AAAA,EACzB,YAAA,EAAc;AAAA,IACZ,EAAA,EAAI,sBAAA;AAAA,IACJ,EAAA,EAAI;AAAA,GACN;AAAA,EACA,kBAAA,EAAoB;AAAA,IAClB,EAAA,EAAI,sHAAA;AAAA,IACJ,EAAA,EAAI;AAAA;AAER,CAAA;;;AChBA,IAAM,MAAA,GAAiB;AAAA,EACrB,IAAA,EAAM,+BAAA;AAAA,EACN,QAAA,EAAU,cAAA;AAAA,EACV,WAAA,EAAa,uEAAA;AAAA,EACb,GAAG,WAAA;AAAA,EACH,cAAA,EAAgB,IAAA;AAAA,EAChB,MAAM,MAAM;AACV,IAAA,IAAI,OAAO,MAAA,CAAO,IAAA,KAAS,UAAA,EAAY;AACrC,MAAA,MAAA,CAAO,IAAA,CAAK,WAAW,QAAA,EAAU;AAAA,QAC/B,kBAAA,EAAoB,SAAA;AAAA,QACpB,YAAA,EAAc;AAAA,OACf,CAAA;AAAA,IACH;AAAA,EACF;AACF,CAAA;AAEA,IAAO,cAAA,GAAQ","file":"gcmads.js","sourcesContent":["/**\n * Shared purpose labels and descriptions for built-in vendors.\n * Imported by each vendor — inlined at build time by tsup (zero runtime overhead).\n */\n\nexport const PURPOSE_ANALYTICS = {\n purposeLabel: {\n fr: \"Analyse de session utilisateur et mesure d'audience\",\n en: 'User session analysis and audience measurement',\n },\n purposeDescription: {\n fr: \"Ces cookies nous permettent d'établir des statistiques et volumes de fréquentation et d'utilisation des éléments du site.\",\n en: 'These cookies allow us to compile statistics on site traffic and usage.',\n },\n} as const;\n\nexport const PURPOSE_ADS = {\n purposeLabel: {\n fr: 'Ciblage publicitaire',\n en: 'Advertising targeting',\n },\n purposeDescription: {\n fr: 'Ces cookies sont utilisés pour vous proposer des publicités personnalisées en fonction de votre navigation.',\n en: 'These cookies are used to deliver personalized ads based on your browsing behavior.',\n },\n} as const;\n\nexport const PURPOSE_SUPPORT = {\n purposeLabel: {\n fr: 'Support et assistance',\n en: 'Support and assistance',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent d'interagir avec notre service client et de bénéficier d'une assistance en direct.\",\n en: 'These cookies enable interaction with our customer support and provide live assistance.',\n },\n} as const;\n\nexport const PURPOSE_SOCIAL = {\n purposeLabel: {\n fr: 'Réseaux sociaux',\n en: 'Social media',\n },\n purposeDescription: {\n fr: \"Ces cookies permettent de partager du contenu sur les réseaux sociaux et d'interagir avec des plateformes tierces.\",\n en: 'These cookies allow sharing content on social media and interacting with third-party platforms.',\n },\n} as const;\n","import type { Vendor } from '@modernconsent/core';\nimport { PURPOSE_ADS } from './utils/purposes';\n\ndeclare global {\n interface Window {\n gtag: (...args: any[]) => void;\n }\n}\n\nconst GCMAds: Vendor = {\n name: 'Google Ads (Personnalisés)',\n category: 'Publicité',\n description: 'Active la personnalisation des publicités via Google Consent Mode.',\n ...PURPOSE_ADS,\n requireConsent: true,\n init: () => {\n if (typeof window.gtag === 'function') {\n window.gtag('consent', 'update', {\n ad_personalization: 'granted',\n ad_user_data: 'granted',\n });\n }\n },\n};\n\nexport default GCMAds;\n"]}