lynkow 3.0.0 → 3.0.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.
- package/dist/index.d.mts +21 -3
- package/dist/index.d.ts +21 -3
- package/dist/index.js +43 -32
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +43 -32
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.d.mts
CHANGED
|
@@ -1172,16 +1172,34 @@ interface CookieTexts {
|
|
|
1172
1172
|
interface CookieConfig {
|
|
1173
1173
|
/** Banner enabled */
|
|
1174
1174
|
enabled: boolean;
|
|
1175
|
+
/** Consent mode: opt-in (explicit consent) or opt-out (implied consent) */
|
|
1176
|
+
consentMode?: 'opt-in' | 'opt-out';
|
|
1177
|
+
/** Show banner on first visit */
|
|
1178
|
+
showOnFirstVisit?: boolean;
|
|
1179
|
+
/** Respect Do Not Track browser setting */
|
|
1180
|
+
respectDnt?: boolean;
|
|
1175
1181
|
/** Banner position */
|
|
1176
|
-
position: 'bottom' | 'top' | 'bottom-left' | 'bottom-right';
|
|
1177
|
-
/** Banner style */
|
|
1178
|
-
layout: '
|
|
1182
|
+
position: 'bottom' | 'top' | 'bottom-left' | 'bottom-right' | 'center';
|
|
1183
|
+
/** Banner layout style */
|
|
1184
|
+
layout: 'banner' | 'floating' | 'modal';
|
|
1179
1185
|
/** Theme */
|
|
1180
1186
|
theme: 'light' | 'dark' | 'auto';
|
|
1187
|
+
/** Primary color for buttons (hex) */
|
|
1188
|
+
primaryColor?: string;
|
|
1189
|
+
/** Border radius in pixels for container and buttons */
|
|
1190
|
+
borderRadius?: number;
|
|
1181
1191
|
/** Cookie categories */
|
|
1182
1192
|
categories: CookieCategory[];
|
|
1183
1193
|
/** Banner texts */
|
|
1184
1194
|
texts: CookieTexts;
|
|
1195
|
+
/** Privacy policy URL */
|
|
1196
|
+
privacyPolicyUrl?: string | null;
|
|
1197
|
+
/** Cookie policy URL */
|
|
1198
|
+
cookiePolicyUrl?: string | null;
|
|
1199
|
+
/** Consent expiry in days */
|
|
1200
|
+
consentExpiryDays?: number;
|
|
1201
|
+
/** Third party scripts configuration */
|
|
1202
|
+
thirdPartyScripts?: unknown[];
|
|
1185
1203
|
}
|
|
1186
1204
|
/**
|
|
1187
1205
|
* Consent preferences
|
package/dist/index.d.ts
CHANGED
|
@@ -1172,16 +1172,34 @@ interface CookieTexts {
|
|
|
1172
1172
|
interface CookieConfig {
|
|
1173
1173
|
/** Banner enabled */
|
|
1174
1174
|
enabled: boolean;
|
|
1175
|
+
/** Consent mode: opt-in (explicit consent) or opt-out (implied consent) */
|
|
1176
|
+
consentMode?: 'opt-in' | 'opt-out';
|
|
1177
|
+
/** Show banner on first visit */
|
|
1178
|
+
showOnFirstVisit?: boolean;
|
|
1179
|
+
/** Respect Do Not Track browser setting */
|
|
1180
|
+
respectDnt?: boolean;
|
|
1175
1181
|
/** Banner position */
|
|
1176
|
-
position: 'bottom' | 'top' | 'bottom-left' | 'bottom-right';
|
|
1177
|
-
/** Banner style */
|
|
1178
|
-
layout: '
|
|
1182
|
+
position: 'bottom' | 'top' | 'bottom-left' | 'bottom-right' | 'center';
|
|
1183
|
+
/** Banner layout style */
|
|
1184
|
+
layout: 'banner' | 'floating' | 'modal';
|
|
1179
1185
|
/** Theme */
|
|
1180
1186
|
theme: 'light' | 'dark' | 'auto';
|
|
1187
|
+
/** Primary color for buttons (hex) */
|
|
1188
|
+
primaryColor?: string;
|
|
1189
|
+
/** Border radius in pixels for container and buttons */
|
|
1190
|
+
borderRadius?: number;
|
|
1181
1191
|
/** Cookie categories */
|
|
1182
1192
|
categories: CookieCategory[];
|
|
1183
1193
|
/** Banner texts */
|
|
1184
1194
|
texts: CookieTexts;
|
|
1195
|
+
/** Privacy policy URL */
|
|
1196
|
+
privacyPolicyUrl?: string | null;
|
|
1197
|
+
/** Cookie policy URL */
|
|
1198
|
+
cookiePolicyUrl?: string | null;
|
|
1199
|
+
/** Consent expiry in days */
|
|
1200
|
+
consentExpiryDays?: number;
|
|
1201
|
+
/** Third party scripts configuration */
|
|
1202
|
+
thirdPartyScripts?: unknown[];
|
|
1185
1203
|
}
|
|
1186
1204
|
/**
|
|
1187
1205
|
* Consent preferences
|
package/dist/index.js
CHANGED
|
@@ -1,39 +1,50 @@
|
|
|
1
|
-
'use strict';var y=class o extends Error{name="LynkowError";code;status;details;cause;constructor(e,t,n,r,s){super(e),this.code=t,this.status=n,this.details=r,this.cause=s,Error.captureStackTrace&&Error.captureStackTrace(this,o);}static async fromResponse(e){let t=e.status,n=`HTTP ${t}`,r;try{let i=await e.json();i.errors&&Array.isArray(i.errors)?(r=i.errors,n=i.errors[0]?.message||n):i.error?n=i.error:i.message&&(n=i.message);}catch{n=e.statusText||n;}let s=o.statusToCode(t);return new o(n,s,t,r)}static fromNetworkError(e){return e.name==="AbortError"?new o("Request timed out","TIMEOUT",void 0,void 0,e):e.name==="TypeError"?new o("Network error - please check your connection","NETWORK_ERROR",void 0,void 0,e):new o(e.message||"Unknown error","UNKNOWN",void 0,void 0,e)}static statusToCode(e){switch(e){case 400:return "VALIDATION_ERROR";case 401:return "UNAUTHORIZED";case 403:return "FORBIDDEN";case 404:return "NOT_FOUND";case 429:return "RATE_LIMITED";default:return "UNKNOWN"}}toJSON(){return {name:this.name,message:this.message,code:this.code,status:this.status,details:this.details}}};function ce(o){return o instanceof y}function le(o){switch(o){case 400:return "BAD_REQUEST";case 401:return "UNAUTHORIZED";case 403:return "FORBIDDEN";case 404:return "NOT_FOUND";case 422:return "VALIDATION_ERROR";case 429:return "TOO_MANY_REQUESTS";case 503:return "SERVICE_UNAVAILABLE";default:return "INTERNAL_ERROR"}}async function H(o,e){let t;try{t=await fetch(o,e);}catch(p){throw new y("Network error: Unable to reach the server","NETWORK_ERROR",0,[{message:p instanceof Error?p.message:"Unknown error"}])}if(t.ok)return t.json();let n={};try{n=await t.json();}catch{}let r=le(t.status),s=n.error||n.message||`HTTP error: ${t.status}`,i=n.errors||[{message:s}];throw new y(s,r,t.status,i)}function X(o){let e=new URLSearchParams;for(let[t,n]of Object.entries(o))n!=null&&n!==""&&e.append(t,String(n));return e.toString()}var l={SHORT:300*1e3,MEDIUM:600*1e3},g=class{config;cache;constructor(e){this.config=e,this.cache=e.cache;}buildEndpointUrl(e,t){let n=`${this.config.baseUrl}/public/${this.config.siteId}${e}`;if(t&&Object.keys(t).length>0){let r=X(t);return `${n}?${r}`}return n}async get(e,t,n){let r=n?.locale||this.config.locale,s=r?{...t,locale:r}:t,i=this.buildEndpointUrl(e,s),p=this.mergeFetchOptions(n?.fetchOptions);return H(i,{method:"GET",...p})}async getWithCache(e,t,n,r,s=l.SHORT){return this.cache?this.cache.getOrSet(e,()=>this.get(t,n,r),s):this.get(t,n,r)}invalidateCache(e){this.cache?.invalidate(e);}async post(e,t,n){let r=this.buildEndpointUrl(e),s=this.mergeFetchOptions(n?.fetchOptions);return H(r,{method:"POST",...s,headers:{"Content-Type":"application/json",...s.headers},body:JSON.stringify(t)})}async getText(e,t){let n=this.buildEndpointUrl(e),r=this.mergeFetchOptions(t?.fetchOptions),s=await fetch(n,{method:"GET",...r});if(!s.ok)throw new Error(`HTTP error: ${s.status}`);return s.text()}mergeFetchOptions(e){return {...this.config.fetchOptions,...e,headers:{...this.config.fetchOptions.headers,...e?.headers}}}};var K="contents_",R=class extends g{async list(e,t){let n={};e?.page&&(n.page=e.page),e?.perPage&&(n.perPage=e.perPage),e?.category&&(n.category=e.category),e?.tag&&(n.tag=e.tag),e?.search&&(n.search=e.search),e?.sort&&(n.sort=e.sort),e?.order&&(n.order=e.order),e?.locale&&(n.locale=e.locale);let r=`${K}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/contents",n,t,l.SHORT)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${K}slug_${e}_${n||"default"}`;return this.getWithCache(r,`/contents/slug/${encodeURIComponent(e)}`,void 0,t,l.SHORT)}clearCache(){this.invalidateCache(K);}};var _="categories_",E=class extends g{async list(e){let t=e?.locale||this.config.locale,n=`${_}list_${t||"default"}`;return this.getWithCache(n,"/categories",void 0,e,l.SHORT)}async tree(e){let t=e?.locale||this.config.locale,n=`${_}tree_${t||"default"}`;return this.getWithCache(n,"/categories/tree",void 0,e,l.SHORT)}async getBySlug(e,t){let n={};t?.page&&(n.page=t.page),t?.perPage&&(n.limit=t.perPage);let r=`${_}slug_${e}_${JSON.stringify(t||{})}`;return this.getWithCache(r,`/categories/${encodeURIComponent(e)}`,n,t,l.SHORT)}clearCache(){this.invalidateCache(_);}};var J="tags_",b=class extends g{async list(e){let t=e?.locale||this.config.locale,n=`${J}list_${t||"default"}`;return this.getWithCache(n,"/tags",void 0,e,l.SHORT)}clearCache(){this.invalidateCache(J);}};var k="pages_",x=class extends g{async list(e){let t=e?.locale||this.config.locale,n={};e?.tag&&(n.tag=e.tag);let r=`${k}list_${t||"default"}_${e?.tag||"all"}`;return this.getWithCache(r,"/pages",n,e,l.SHORT)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${k}slug_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,l.SHORT)).data}async getByPath(e,t){let n=t?.locale||this.config.locale,r=`${k}path_${e}_${n||"default"}`;return (await this.getWithCache(r,"/page-by-path",{path:e},t,l.SHORT)).data}async getJsonLd(e,t){let n=t?.locale||this.config.locale,r=`${k}jsonld_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}/json-ld`,void 0,t,l.SHORT)).data}clearCache(){this.invalidateCache(k);}};var q="globals_",L=class extends g{async siteConfig(e){let t=e?.locale||this.config.locale,n=`${q}siteconfig_${t||"default"}`;return this.getWithCache(n,"/site-config",void 0,e,l.MEDIUM)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${q}${e}_${n||"default"}`;return this.getWithCache(r,`/global/${encodeURIComponent(e)}`,void 0,t,l.MEDIUM)}async global(e,t){return this.getBySlug(e,t)}clearCache(){this.invalidateCache(q);}};function F(o){return {_hp:"",_ts:o}}var Q="forms_",T=class extends g{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async getBySlug(e){let t=`${Q}${e}`;return (await this.getWithCache(t,`/forms/${encodeURIComponent(e)}`,void 0,void 0,l.MEDIUM)).data}async submit(e,t,n){let r=F(this.sessionStartTime),s={...t,...r};return n?.recaptchaToken&&(s._recaptcha_token=n.recaptchaToken),this.post(`/forms/${encodeURIComponent(e)}/submit`,s,n)}clearCache(){this.invalidateCache(Q);}};var S="reviews_",O=class extends g{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async list(e,t){let n={};e?.page&&(n.page=e.page),e?.perPage&&(n.perPage=e.perPage),e?.minRating&&(n.minRating=e.minRating),e?.maxRating&&(n.maxRating=e.maxRating),e?.sort&&(n.sort=e.sort),e?.order&&(n.order=e.order);let r=`${S}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/reviews",n,t,l.SHORT)}async getBySlug(e){let t=`${S}slug_${e}`;return (await this.getWithCache(t,`/reviews/${encodeURIComponent(e)}`,void 0,void 0,l.SHORT)).data}async settings(){let e=`${S}settings`;return this.getWithCache(e,"/reviews/settings",void 0,void 0,l.MEDIUM)}async submit(e,t){let n=F(this.sessionStartTime),r={...e,...n};t?.recaptchaToken&&(r._recaptcha_token=t.recaptchaToken);let s=await this.post("/reviews",r,t);return this.invalidateCache(S),s}clearCache(){this.invalidateCache(S);}};var Y="site_",P=class extends g{async getConfig(){let e=`${Y}config`;return (await this.getWithCache(e,"/site",void 0,void 0,l.MEDIUM)).data}clearCache(){this.invalidateCache(Y);}};var M="legal_",I=class extends g{async list(e){let t=e?.locale||this.config.locale,n=`${M}list_${t||"default"}`;return (await this.getWithCache(n,"/pages",{tag:"legal"},e,l.SHORT)).data}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${M}slug_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,l.SHORT)).data}clearCache(){this.invalidateCache(M);}};var Z="cookies_",B=class extends g{async getConfig(){let e=`${Z}config`;return (await this.getWithCache(e,"/cookie-consent/config",void 0,void 0,l.MEDIUM)).data}async logConsent(e,t){return this.post("/cookie-consent/log",{preferences:e},t)}clearCache(){this.invalidateCache(Z);}};var A=class extends g{async sitemap(e){return this.getText("/sitemap.xml",e)}async robots(e){return this.getText("/robots.txt",e)}};var W="paths_",$=class extends g{async list(e){let t=e?.locale||this.config.locale,n=`${W}list_${t||"all"}`;return this.getWithCache(n,"/paths",void 0,e,l.SHORT)}async resolve(e,t){let n=t?.locale||this.config.locale,r=`${W}resolve_${e}_${n||"default"}`;return this.getWithCache(r,"/resolve",{path:e},t,l.SHORT)}async matchRedirect(e,t){try{return (await this.get("/redirects/match",{path:e},t)).data}catch(n){if(n instanceof y&&n.status===404)return null;throw n}}clearCache(){this.invalidateCache(W);}};var a=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",pe=!a;function de(o,e){return a?o():e}async function ge(o,e){return a?o():e}var z="lynkow-tracker",D=class{config;enabled=true;initialized=false;loading=false;loadPromise=null;constructor(e){this.config=e;}getTrackerUrl(){return `${this.config.baseUrl}/analytics/tracker.js`}loadTracker(){return !a||window.LynkowAnalytics?Promise.resolve():this.loadPromise?this.loadPromise:(this.loading=true,this.loadPromise=new Promise((e,t)=>{if(document.getElementById(z)){let r=setInterval(()=>{window.LynkowAnalytics&&(clearInterval(r),this.loading=false,e());},50);setTimeout(()=>{clearInterval(r),this.loading=false,t(new Error("Tracker script load timeout"));},1e4);return}let n=document.createElement("script");n.id=z,n.src=this.getTrackerUrl(),n.async=true,n.setAttribute("data-site-id",this.config.siteId),this.config.baseUrl&&n.setAttribute("data-api-url",this.config.baseUrl),n.onload=()=>{this.loading=false,setTimeout(()=>{window.LynkowAnalytics?e():t(new Error("Tracker script loaded but LynkowAnalytics not found"));},0);},n.onerror=()=>{this.loading=false,t(new Error("Failed to load tracker script"));},document.head.appendChild(n);}),this.loadPromise)}async init(){if(!(!a||this.initialized))try{await this.loadTracker(),window.LynkowAnalytics&&!this.initialized&&(this.initialized=!0);}catch(e){console.error("[Lynkow] Failed to initialize analytics:",e);}}async trackEvent(e){!a||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.track(e));}async trackFunnelStep(e){!a||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.trackFunnel(e.funnelId,e.stepNumber,e.stepName,e.funnelName));}async trackPageview(e){!a||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.track({type:"pageview",path:e?.path||window.location.pathname,title:e?.title||document.title,referrer:e?.referrer||document.referrer}));}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}isInitialized(){return this.initialized&&!!window.LynkowAnalytics}getTracker(){if(a)return window.LynkowAnalytics}destroy(){if(!a)return;document.getElementById(z)?.remove(),this.initialized=false,this.loadPromise=null;}};var j="_lkw_consent",G={necessary:true,analytics:false,marketing:false,preferences:false},N=class{config;events;bannerElement=null;preferencesElement=null;configCache=null;constructor(e,t){this.config=e,this.events=t;}async getConfig(){if(this.configCache)return this.configCache;let e=`${this.config.baseUrl}/public/${this.config.siteId}/cookie-consent/config`,t=await fetch(e,{method:"GET",headers:{"Content-Type":"application/json"},...this.config.fetchOptions});if(!t.ok)throw new Error(`Failed to fetch consent config: ${t.status}`);let n=await t.json();return this.configCache=n.data,this.configCache}async logConsent(e){let t=`${this.config.baseUrl}/public/${this.config.siteId}/cookie-consent/log`;await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({preferences:e}),...this.config.fetchOptions}).catch(()=>{});}getStoredConsent(){if(!a)return null;try{let e=localStorage.getItem(j);if(e){let t=JSON.parse(e);return t.choices?t.choices:t}}catch{}return null}saveConsent(e){if(a){try{localStorage.setItem(j,JSON.stringify({choices:e}));}catch{}this.events.emit("consent-changed",e),document.dispatchEvent(new CustomEvent("lynkow:consent:update",{detail:e}));}}show(){a&&(this.bannerElement||this.getConfig().then(e=>{if(!e.enabled)return;let t=document.createElement("div");t.innerHTML=this.createBannerHTML(e),this.bannerElement=t.firstElementChild,document.body.appendChild(this.bannerElement),this.attachBannerEvents();}));}hide(){a&&(this.bannerElement?.remove(),this.bannerElement=null);}showPreferences(){a&&(this.preferencesElement||this.getConfig().then(e=>{let t=this.getCategories(),n=document.createElement("div");n.innerHTML=this.createPreferencesHTML(e,t),this.preferencesElement=n.firstElementChild,document.body.appendChild(this.preferencesElement),this.attachPreferencesEvents(e);}));}getCategories(){return a?this.getStoredConsent()||{...G}:{...G}}hasConsented(){return a?this.getStoredConsent()!==null:false}acceptAll(){if(!a)return;let e={necessary:true,analytics:true,marketing:true,preferences:true};this.saveConsent(e),this.logConsent(e),this.hide();}rejectAll(){if(!a)return;let e={necessary:true,analytics:false,marketing:false,preferences:false};this.saveConsent(e),this.logConsent(e),this.hide();}setCategories(e){if(!a)return;let n={...this.getCategories(),...e,necessary:true};this.saveConsent(n),this.logConsent(n);}reset(){if(a){try{localStorage.removeItem(j);}catch{}this.events.emit("consent-changed",{...G}),this.show();}}createBannerHTML(e){let t=e.position||"bottom",n=e.theme||"light",r={bottom:"bottom: 0; left: 0; right: 0;",top:"top: 0; left: 0; right: 0;","bottom-left":"bottom: 20px; left: 20px; max-width: 400px;","bottom-right":"bottom: 20px; right: 20px; max-width: 400px;"},s=n==="dark",i=s?"#1a1a1a":"#ffffff",p=s?"#ffffff":"#1a1a1a",u=e.texts||{title:"Nous utilisons des cookies",description:"Ce site utilise des cookies pour ameliorer votre experience.",acceptAll:"Accepter tout",rejectAll:"Refuser",customize:"Personnaliser"};return `
|
|
1
|
+
'use strict';var C=class o extends Error{name="LynkowError";code;status;details;cause;constructor(e,t,n,r,i){super(e),this.code=t,this.status=n,this.details=r,this.cause=i,Error.captureStackTrace&&Error.captureStackTrace(this,o);}static async fromResponse(e){let t=e.status,n=`HTTP ${t}`,r;try{let s=await e.json();s.errors&&Array.isArray(s.errors)?(r=s.errors,n=s.errors[0]?.message||n):s.error?n=s.error:s.message&&(n=s.message);}catch{n=e.statusText||n;}let i=o.statusToCode(t);return new o(n,i,t,r)}static fromNetworkError(e){return e.name==="AbortError"?new o("Request timed out","TIMEOUT",void 0,void 0,e):e.name==="TypeError"?new o("Network error - please check your connection","NETWORK_ERROR",void 0,void 0,e):new o(e.message||"Unknown error","UNKNOWN",void 0,void 0,e)}static statusToCode(e){switch(e){case 400:return "VALIDATION_ERROR";case 401:return "UNAUTHORIZED";case 403:return "FORBIDDEN";case 404:return "NOT_FOUND";case 429:return "RATE_LIMITED";default:return "UNKNOWN"}}toJSON(){return {name:this.name,message:this.message,code:this.code,status:this.status,details:this.details}}};function le(o){return o instanceof C}function pe(o){switch(o){case 400:return "BAD_REQUEST";case 401:return "UNAUTHORIZED";case 403:return "FORBIDDEN";case 404:return "NOT_FOUND";case 422:return "VALIDATION_ERROR";case 429:return "TOO_MANY_REQUESTS";case 503:return "SERVICE_UNAVAILABLE";default:return "INTERNAL_ERROR"}}async function K(o,e){let t;try{t=await fetch(o,e);}catch(p){throw new C("Network error: Unable to reach the server","NETWORK_ERROR",0,[{message:p instanceof Error?p.message:"Unknown error"}])}if(t.ok)return t.json();let n={};try{n=await t.json();}catch{}let r=pe(t.status),i=n.error||n.message||`HTTP error: ${t.status}`,s=n.errors||[{message:i}];throw new C(i,r,t.status,s)}function J(o){let e=new URLSearchParams;for(let[t,n]of Object.entries(o))n!=null&&n!==""&&e.append(t,String(n));return e.toString()}var l={SHORT:300*1e3,MEDIUM:600*1e3},u=class{config;cache;constructor(e){this.config=e,this.cache=e.cache;}buildEndpointUrl(e,t){let n=`${this.config.baseUrl}/public/${this.config.siteId}${e}`;if(t&&Object.keys(t).length>0){let r=J(t);return `${n}?${r}`}return n}async get(e,t,n){let r=n?.locale||this.config.locale,i=r?{...t,locale:r}:t,s=this.buildEndpointUrl(e,i),p=this.mergeFetchOptions(n?.fetchOptions);return K(s,{method:"GET",...p})}async getWithCache(e,t,n,r,i=l.SHORT){return this.cache?this.cache.getOrSet(e,()=>this.get(t,n,r),i):this.get(t,n,r)}invalidateCache(e){this.cache?.invalidate(e);}async post(e,t,n){let r=this.buildEndpointUrl(e),i=this.mergeFetchOptions(n?.fetchOptions);return K(r,{method:"POST",...i,headers:{"Content-Type":"application/json",...i.headers},body:JSON.stringify(t)})}async getText(e,t){let n=this.buildEndpointUrl(e),r=this.mergeFetchOptions(t?.fetchOptions),i=await fetch(n,{method:"GET",...r});if(!i.ok)throw new Error(`HTTP error: ${i.status}`);return i.text()}mergeFetchOptions(e){return {...this.config.fetchOptions,...e,headers:{...this.config.fetchOptions.headers,...e?.headers}}}};var q="contents_",b=class extends u{async list(e,t){let n={};e?.page&&(n.page=e.page),e?.perPage&&(n.perPage=e.perPage),e?.category&&(n.category=e.category),e?.tag&&(n.tag=e.tag),e?.search&&(n.search=e.search),e?.sort&&(n.sort=e.sort),e?.order&&(n.order=e.order),e?.locale&&(n.locale=e.locale);let r=`${q}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/contents",n,t,l.SHORT)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${q}slug_${e}_${n||"default"}`;return this.getWithCache(r,`/contents/slug/${encodeURIComponent(e)}`,void 0,t,l.SHORT)}clearCache(){this.invalidateCache(q);}};var F="categories_",x=class extends u{async list(e){let t=e?.locale||this.config.locale,n=`${F}list_${t||"default"}`;return this.getWithCache(n,"/categories",void 0,e,l.SHORT)}async tree(e){let t=e?.locale||this.config.locale,n=`${F}tree_${t||"default"}`;return this.getWithCache(n,"/categories/tree",void 0,e,l.SHORT)}async getBySlug(e,t){let n={};t?.page&&(n.page=t.page),t?.perPage&&(n.limit=t.perPage);let r=`${F}slug_${e}_${JSON.stringify(t||{})}`;return this.getWithCache(r,`/categories/${encodeURIComponent(e)}`,n,t,l.SHORT)}clearCache(){this.invalidateCache(F);}};var Q="tags_",E=class extends u{async list(e){let t=e?.locale||this.config.locale,n=`${Q}list_${t||"default"}`;return this.getWithCache(n,"/tags",void 0,e,l.SHORT)}clearCache(){this.invalidateCache(Q);}};var k="pages_",L=class extends u{async list(e){let t=e?.locale||this.config.locale,n={};e?.tag&&(n.tag=e.tag);let r=`${k}list_${t||"default"}_${e?.tag||"all"}`;return this.getWithCache(r,"/pages",n,e,l.SHORT)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${k}slug_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,l.SHORT)).data}async getByPath(e,t){let n=t?.locale||this.config.locale,r=`${k}path_${e}_${n||"default"}`;return (await this.getWithCache(r,"/page-by-path",{path:e},t,l.SHORT)).data}async getJsonLd(e,t){let n=t?.locale||this.config.locale,r=`${k}jsonld_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}/json-ld`,void 0,t,l.SHORT)).data}clearCache(){this.invalidateCache(k);}};var M="globals_",T=class extends u{async siteConfig(e){let t=e?.locale||this.config.locale,n=`${M}siteconfig_${t||"default"}`;return this.getWithCache(n,"/site-config",void 0,e,l.MEDIUM)}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${M}${e}_${n||"default"}`;return this.getWithCache(r,`/global/${encodeURIComponent(e)}`,void 0,t,l.MEDIUM)}async global(e,t){return this.getBySlug(e,t)}clearCache(){this.invalidateCache(M);}};function D(o){return {_hp:"",_ts:o}}var Y="forms_",S=class extends u{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async getBySlug(e){let t=`${Y}${e}`;return (await this.getWithCache(t,`/forms/${encodeURIComponent(e)}`,void 0,void 0,l.MEDIUM)).data}async submit(e,t,n){let r=D(this.sessionStartTime),i={...t,...r};return n?.recaptchaToken&&(i._recaptcha_token=n.recaptchaToken),this.post(`/forms/${encodeURIComponent(e)}/submit`,i,n)}clearCache(){this.invalidateCache(Y);}};var O="reviews_",P=class extends u{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async list(e,t){let n={};e?.page&&(n.page=e.page),e?.perPage&&(n.perPage=e.perPage),e?.minRating&&(n.minRating=e.minRating),e?.maxRating&&(n.maxRating=e.maxRating),e?.sort&&(n.sort=e.sort),e?.order&&(n.order=e.order);let r=`${O}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/reviews",n,t,l.SHORT)}async getBySlug(e){let t=`${O}slug_${e}`;return (await this.getWithCache(t,`/reviews/${encodeURIComponent(e)}`,void 0,void 0,l.SHORT)).data}async settings(){let e=`${O}settings`;return this.getWithCache(e,"/reviews/settings",void 0,void 0,l.MEDIUM)}async submit(e,t){let n=D(this.sessionStartTime),r={...e,...n};t?.recaptchaToken&&(r._recaptcha_token=t.recaptchaToken);let i=await this.post("/reviews",r,t);return this.invalidateCache(O),i}clearCache(){this.invalidateCache(O);}};var Z="site_",I=class extends u{async getConfig(){let e=`${Z}config`;return (await this.getWithCache(e,"/site",void 0,void 0,l.MEDIUM)).data}clearCache(){this.invalidateCache(Z);}};var W="legal_",$=class extends u{async list(e){let t=e?.locale||this.config.locale,n=`${W}list_${t||"default"}`;return (await this.getWithCache(n,"/pages",{tag:"legal"},e,l.SHORT)).data}async getBySlug(e,t){let n=t?.locale||this.config.locale,r=`${W}slug_${e}_${n||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,l.SHORT)).data}clearCache(){this.invalidateCache(W);}};var ee="cookies_",B=class extends u{async getConfig(){let e=`${ee}config`;return (await this.getWithCache(e,"/cookie-consent/config",void 0,void 0,l.MEDIUM)).data}async logConsent(e,t){return this.post("/cookie-consent/log",{preferences:e},t)}clearCache(){this.invalidateCache(ee);}};var A=class extends u{async sitemap(e){return this.getText("/sitemap.xml",e)}async robots(e){return this.getText("/robots.txt",e)}};var z="paths_",_=class extends u{async list(e){let t=e?.locale||this.config.locale,n=`${z}list_${t||"all"}`;return this.getWithCache(n,"/paths",void 0,e,l.SHORT)}async resolve(e,t){let n=t?.locale||this.config.locale,r=`${z}resolve_${e}_${n||"default"}`;return this.getWithCache(r,"/resolve",{path:e},t,l.SHORT)}async matchRedirect(e,t){try{return (await this.get("/redirects/match",{path:e},t)).data}catch(n){if(n instanceof C&&n.status===404)return null;throw n}}clearCache(){this.invalidateCache(z);}};var c=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",de=!c;function ge(o,e){return c?o():e}async function ue(o,e){return c?o():e}var j="lynkow-tracker",N=class{config;enabled=true;initialized=false;loading=false;loadPromise=null;constructor(e){this.config=e;}getTrackerUrl(){return `${this.config.baseUrl}/analytics/tracker.js`}loadTracker(){return !c||window.LynkowAnalytics?Promise.resolve():this.loadPromise?this.loadPromise:(this.loading=true,this.loadPromise=new Promise((e,t)=>{if(document.getElementById(j)){let r=setInterval(()=>{window.LynkowAnalytics&&(clearInterval(r),this.loading=false,e());},50);setTimeout(()=>{clearInterval(r),this.loading=false,t(new Error("Tracker script load timeout"));},1e4);return}let n=document.createElement("script");n.id=j,n.src=this.getTrackerUrl(),n.async=true,n.setAttribute("data-site-id",this.config.siteId),this.config.baseUrl&&n.setAttribute("data-api-url",this.config.baseUrl),n.onload=()=>{this.loading=false,setTimeout(()=>{window.LynkowAnalytics?e():t(new Error("Tracker script loaded but LynkowAnalytics not found"));},0);},n.onerror=()=>{this.loading=false,t(new Error("Failed to load tracker script"));},document.head.appendChild(n);}),this.loadPromise)}async init(){if(!(!c||this.initialized))try{await this.loadTracker(),window.LynkowAnalytics&&!this.initialized&&(this.initialized=!0);}catch(e){console.error("[Lynkow] Failed to initialize analytics:",e);}}async trackEvent(e){!c||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.track(e));}async trackFunnelStep(e){!c||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.trackFunnel(e.funnelId,e.stepNumber,e.stepName,e.funnelName));}async trackPageview(e){!c||!this.enabled||(await this.init(),window.LynkowAnalytics&&window.LynkowAnalytics.track({type:"pageview",path:e?.path||window.location.pathname,title:e?.title||document.title,referrer:e?.referrer||document.referrer}));}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}isInitialized(){return this.initialized&&!!window.LynkowAnalytics}getTracker(){if(c)return window.LynkowAnalytics}destroy(){if(!c)return;document.getElementById(j)?.remove(),this.initialized=false,this.loadPromise=null;}};var G="_lkw_consent",X={necessary:true,analytics:false,marketing:false,preferences:false},U=class{config;events;bannerElement=null;preferencesElement=null;configCache=null;constructor(e,t){this.config=e,this.events=t;}async getConfig(){if(this.configCache)return this.configCache;let e=`${this.config.baseUrl}/public/${this.config.siteId}/cookie-consent/config`,t=await fetch(e,{method:"GET",headers:{"Content-Type":"application/json"},...this.config.fetchOptions});if(!t.ok)throw new Error(`Failed to fetch consent config: ${t.status}`);let n=await t.json();return this.configCache=n.data,this.configCache}async logConsent(e){let t=`${this.config.baseUrl}/public/${this.config.siteId}/cookie-consent/log`;await fetch(t,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({preferences:e}),...this.config.fetchOptions}).catch(()=>{});}getStoredConsent(){if(!c)return null;try{let e=localStorage.getItem(G);if(e){let t=JSON.parse(e);return t.choices?t.choices:t}}catch{}return null}saveConsent(e){if(c){try{localStorage.setItem(G,JSON.stringify({choices:e}));}catch{}this.events.emit("consent-changed",e),document.dispatchEvent(new CustomEvent("lynkow:consent:update",{detail:e}));}}show(){c&&(this.bannerElement||this.getConfig().then(e=>{if(!e.enabled)return;let t=document.createElement("div");t.innerHTML=this.createBannerHTML(e),this.bannerElement=t.firstElementChild,document.body.appendChild(this.bannerElement),this.attachBannerEvents();}));}hide(){c&&(this.bannerElement?.remove(),this.bannerElement=null);}showPreferences(){c&&(this.preferencesElement||this.getConfig().then(e=>{let t=this.getCategories(),n=document.createElement("div");n.innerHTML=this.createPreferencesHTML(e,t),this.preferencesElement=n.firstElementChild,document.body.appendChild(this.preferencesElement),this.attachPreferencesEvents(e);}));}getCategories(){return c?this.getStoredConsent()||{...X}:{...X}}hasConsented(){return c?this.getStoredConsent()!==null:false}acceptAll(){if(!c)return;let e={necessary:true,analytics:true,marketing:true,preferences:true};this.saveConsent(e),this.logConsent(e),this.hide();}rejectAll(){if(!c)return;let e={necessary:true,analytics:false,marketing:false,preferences:false};this.saveConsent(e),this.logConsent(e),this.hide();}setCategories(e){if(!c)return;let n={...this.getCategories(),...e,necessary:true};this.saveConsent(n),this.logConsent(n);}reset(){if(c){try{localStorage.removeItem(G);}catch{}this.events.emit("consent-changed",{...X}),this.show();}}createBannerHTML(e){let t=e.position||"bottom",n=e.theme||"light",r=e.layout||"banner",i=e.primaryColor||"#0066cc",s=e.borderRadius??8,p={bottom:"bottom: 0; left: 0; right: 0;",top:"top: 0; left: 0; right: 0;","bottom-left":"bottom: 0; left: 0; right: 0;","bottom-right":"bottom: 0; left: 0; right: 0;",center:"top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px);"},m={bottom:`bottom: 20px; left: 50%; transform: translateX(-50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,top:`top: 20px; left: 50%; transform: translateX(-50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,"bottom-left":`bottom: 20px; left: 20px; max-width: 400px; border-radius: ${s}px;`,"bottom-right":`bottom: 20px; right: 20px; max-width: 400px; border-radius: ${s}px;`,center:`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`},h={center:`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,bottom:`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,top:`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,"bottom-left":`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`,"bottom-right":`top: 50%; left: 50%; transform: translate(-50%, -50%); max-width: 500px; width: calc(100% - 40px); border-radius: ${s}px;`},g;r==="floating"?g=m:r==="modal"?g=h:g=p;let a=g[t]||g.bottom||"",d=n==="dark",f=d?"#1a1a1a":"#ffffff",y=d?"#ffffff":"#1a1a1a",R=e.texts||{title:"Nous utilisons des cookies",description:"Ce site utilise des cookies pour ameliorer votre experience.",acceptAll:"Accepter tout",rejectAll:"Refuser",customize:"Personnaliser"};return `
|
|
2
|
+
${r==="modal"?`
|
|
3
|
+
<div id="lynkow-consent-backdrop" style="
|
|
4
|
+
position: fixed;
|
|
5
|
+
top: 0;
|
|
6
|
+
left: 0;
|
|
7
|
+
right: 0;
|
|
8
|
+
bottom: 0;
|
|
9
|
+
background: rgba(0,0,0,0.5);
|
|
10
|
+
z-index: 99998;
|
|
11
|
+
"></div>
|
|
12
|
+
`:""}
|
|
2
13
|
<div id="lynkow-consent-banner" style="
|
|
3
14
|
position: fixed;
|
|
4
|
-
${
|
|
15
|
+
${a}
|
|
5
16
|
z-index: 99999;
|
|
6
17
|
padding: 20px;
|
|
7
|
-
background: ${
|
|
8
|
-
color: ${
|
|
9
|
-
box-shadow: 0
|
|
18
|
+
background: ${f};
|
|
19
|
+
color: ${y};
|
|
20
|
+
box-shadow: 0 4px 20px rgba(0,0,0,0.15);
|
|
10
21
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
11
22
|
font-size: 14px;
|
|
12
23
|
">
|
|
13
24
|
<div style="max-width: 1200px; margin: 0 auto;">
|
|
14
|
-
<h3 style="margin: 0 0 10px 0; font-size: 16px;">${
|
|
25
|
+
<h3 style="margin: 0 0 10px 0; font-size: 16px;">${R.title}</h3>
|
|
15
26
|
<p style="margin: 0 0 15px 0; line-height: 1.5;">
|
|
16
|
-
${
|
|
27
|
+
${R.description}
|
|
17
28
|
</p>
|
|
18
29
|
<div style="display: flex; gap: 10px; flex-wrap: wrap;">
|
|
19
30
|
<button id="lynkow-consent-accept" style="
|
|
20
31
|
padding: 10px 20px;
|
|
21
|
-
background:
|
|
32
|
+
background: ${i};
|
|
22
33
|
color: white;
|
|
23
34
|
border: none;
|
|
24
|
-
border-radius:
|
|
35
|
+
border-radius: ${s}px;
|
|
25
36
|
cursor: pointer;
|
|
26
37
|
font-size: 14px;
|
|
27
|
-
">${
|
|
38
|
+
">${R.acceptAll}</button>
|
|
28
39
|
<button id="lynkow-consent-reject" style="
|
|
29
40
|
padding: 10px 20px;
|
|
30
41
|
background: transparent;
|
|
31
42
|
color: inherit;
|
|
32
43
|
border: 1px solid currentColor;
|
|
33
|
-
border-radius:
|
|
44
|
+
border-radius: ${s}px;
|
|
34
45
|
cursor: pointer;
|
|
35
46
|
font-size: 14px;
|
|
36
|
-
">${
|
|
47
|
+
">${R.rejectAll}</button>
|
|
37
48
|
<button id="lynkow-consent-preferences" style="
|
|
38
49
|
padding: 10px 20px;
|
|
39
50
|
background: transparent;
|
|
@@ -42,18 +53,18 @@
|
|
|
42
53
|
cursor: pointer;
|
|
43
54
|
font-size: 14px;
|
|
44
55
|
text-decoration: underline;
|
|
45
|
-
">${
|
|
56
|
+
">${R.customize}</button>
|
|
46
57
|
</div>
|
|
47
58
|
</div>
|
|
48
59
|
</div>
|
|
49
|
-
`}createPreferencesHTML(e,t){let
|
|
60
|
+
`}createPreferencesHTML(e,t){let n=e.theme||"light",r=e.primaryColor||"#0066cc",i=e.borderRadius??8,s=n==="dark",p=s?"#1a1a1a":"#ffffff",m=s?"#ffffff":"#1a1a1a",h=e.texts||{title:"Preferences de cookies",save:"Enregistrer"},a=(e.categories||[]).map(d=>`
|
|
50
61
|
<label style="display: flex; align-items: flex-start; gap: 10px; margin: 15px 0; cursor: ${d.required?"not-allowed":"pointer"};">
|
|
51
62
|
<input
|
|
52
63
|
type="checkbox"
|
|
53
64
|
name="${d.id}"
|
|
54
65
|
${t[d.id]?"checked":""}
|
|
55
66
|
${d.required?"disabled checked":""}
|
|
56
|
-
style="width: 18px; height: 18px; margin-top: 2px;"
|
|
67
|
+
style="width: 18px; height: 18px; margin-top: 2px; accent-color: ${r};"
|
|
57
68
|
/>
|
|
58
69
|
<div style="flex: 1;">
|
|
59
70
|
<strong style="opacity: ${d.required?"0.6":"1"};">
|
|
@@ -79,36 +90,36 @@
|
|
|
79
90
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
|
|
80
91
|
">
|
|
81
92
|
<div style="
|
|
82
|
-
background: ${
|
|
83
|
-
color: ${
|
|
93
|
+
background: ${p};
|
|
94
|
+
color: ${m};
|
|
84
95
|
padding: 30px;
|
|
85
|
-
border-radius:
|
|
96
|
+
border-radius: ${i}px;
|
|
86
97
|
max-width: 500px;
|
|
87
98
|
width: 90%;
|
|
88
99
|
max-height: 80vh;
|
|
89
100
|
overflow-y: auto;
|
|
90
101
|
">
|
|
91
|
-
<h2 style="margin: 0 0 20px 0; font-size: 20px;">${
|
|
102
|
+
<h2 style="margin: 0 0 20px 0; font-size: 20px;">${h.title||"Preferences de cookies"}</h2>
|
|
92
103
|
|
|
93
104
|
<form id="lynkow-consent-form">
|
|
94
|
-
${
|
|
105
|
+
${a}
|
|
95
106
|
|
|
96
107
|
<div style="display: flex; gap: 10px; margin-top: 25px; padding-top: 20px; border-top: 1px solid rgba(128,128,128,0.3);">
|
|
97
108
|
<button type="submit" style="
|
|
98
109
|
padding: 10px 20px;
|
|
99
|
-
background:
|
|
110
|
+
background: ${r};
|
|
100
111
|
color: white;
|
|
101
112
|
border: none;
|
|
102
|
-
border-radius:
|
|
113
|
+
border-radius: ${i}px;
|
|
103
114
|
cursor: pointer;
|
|
104
115
|
font-size: 14px;
|
|
105
|
-
">${
|
|
116
|
+
">${h.save||"Enregistrer"}</button>
|
|
106
117
|
<button type="button" id="lynkow-consent-close" style="
|
|
107
118
|
padding: 10px 20px;
|
|
108
119
|
background: transparent;
|
|
109
120
|
color: inherit;
|
|
110
121
|
border: 1px solid currentColor;
|
|
111
|
-
border-radius:
|
|
122
|
+
border-radius: ${i}px;
|
|
112
123
|
cursor: pointer;
|
|
113
124
|
font-size: 14px;
|
|
114
125
|
">Annuler</button>
|
|
@@ -116,8 +127,8 @@
|
|
|
116
127
|
</form>
|
|
117
128
|
</div>
|
|
118
129
|
</div>
|
|
119
|
-
`}attachBannerEvents(){let e=document.getElementById("lynkow-consent-accept"),t=document.getElementById("lynkow-consent-reject"),n=document.getElementById("lynkow-consent-preferences");e?.addEventListener("click",()=>{this.acceptAll();}),t?.addEventListener("click",()=>{this.rejectAll();}),n?.addEventListener("click",()=>{this.showPreferences();});}attachPreferencesEvents(e){let t=document.getElementById("lynkow-consent-form"),n=document.getElementById("lynkow-consent-close"),r=document.getElementById("lynkow-consent-preferences-modal");t?.addEventListener("submit",
|
|
120
|
-
#${
|
|
130
|
+
`}attachBannerEvents(){let e=document.getElementById("lynkow-consent-accept"),t=document.getElementById("lynkow-consent-reject"),n=document.getElementById("lynkow-consent-preferences");e?.addEventListener("click",()=>{this.acceptAll();}),t?.addEventListener("click",()=>{this.rejectAll();}),n?.addEventListener("click",()=>{this.showPreferences();});}attachPreferencesEvents(e){let t=document.getElementById("lynkow-consent-form"),n=document.getElementById("lynkow-consent-close"),r=document.getElementById("lynkow-consent-preferences-modal");t?.addEventListener("submit",i=>{i.preventDefault();let s=new FormData(t),p={necessary:true,analytics:s.has("analytics"),marketing:s.has("marketing"),preferences:s.has("preferences")};this.setCategories(p),this.hide(),this.preferencesElement?.remove(),this.preferencesElement=null;}),n?.addEventListener("click",()=>{this.preferencesElement?.remove(),this.preferencesElement=null;}),r?.addEventListener("click",i=>{i.target===r&&(this.preferencesElement?.remove(),this.preferencesElement=null);});}destroy(){this.hide(),this.preferencesElement?.remove(),this.preferencesElement=null;}};var w="lynkow-badge",V="lynkow-badge-styles",fe=`
|
|
131
|
+
#${w} {
|
|
121
132
|
position: fixed;
|
|
122
133
|
bottom: 16px;
|
|
123
134
|
right: 16px;
|
|
@@ -134,13 +145,13 @@
|
|
|
134
145
|
line-height: 1;
|
|
135
146
|
}
|
|
136
147
|
|
|
137
|
-
#${
|
|
148
|
+
#${w}:hover {
|
|
138
149
|
opacity: 1;
|
|
139
150
|
color: #fff;
|
|
140
151
|
}
|
|
141
152
|
|
|
142
153
|
@media (max-width: 480px) {
|
|
143
|
-
#${
|
|
154
|
+
#${w} {
|
|
144
155
|
bottom: 10px;
|
|
145
156
|
right: 10px;
|
|
146
157
|
font-size: 10px;
|
|
@@ -149,15 +160,15 @@
|
|
|
149
160
|
}
|
|
150
161
|
|
|
151
162
|
@media (prefers-color-scheme: light) {
|
|
152
|
-
#${
|
|
163
|
+
#${w} {
|
|
153
164
|
background: #f5f5f5;
|
|
154
165
|
color: #666;
|
|
155
166
|
}
|
|
156
167
|
|
|
157
|
-
#${
|
|
168
|
+
#${w}:hover {
|
|
158
169
|
color: #1a1a1a;
|
|
159
170
|
}
|
|
160
171
|
}
|
|
161
|
-
`,
|
|
162
|
-
exports.LynkowError=
|
|
172
|
+
`,H=class{badgeElement=null;injectStyles(){if(document.getElementById(V))return;let e=document.createElement("style");e.id=V,e.textContent=fe,document.head.appendChild(e);}inject(){if(!c||document.getElementById(w))return;this.injectStyles();let e=document.createElement("a");e.id=w,e.href="https://lynkow.com?ref=badge",e.target="_blank",e.rel="noopener noreferrer",e.textContent="Powered by Lynkow",e.setAttribute("aria-label","Powered by Lynkow - Visit lynkow.com"),document.body.appendChild(e),this.badgeElement=e;}remove(){c&&(this.badgeElement?.remove(),this.badgeElement=null,document.getElementById(V)?.remove());}isVisible(){return c?document.getElementById(w)!==null:false}destroy(){this.remove();}};var me=300*1e3,he="lynkow_cache_",v=new Map;function te(o={}){let e=o.defaultTtl??me,t=o.prefix??he;function n(g){return `${t}${g}`}function r(g){return Date.now()>g.expiresAt}function i(g){let a=n(g);if(c)try{let f=localStorage.getItem(a);if(!f)return null;let y=JSON.parse(f);return r(y)?(localStorage.removeItem(a),null):y.value}catch{return null}let d=v.get(a);return d?r(d)?(v.delete(a),null):d.value:null}function s(g,a,d=e){let f=n(g),y={value:a,expiresAt:Date.now()+d};if(c){try{localStorage.setItem(f,JSON.stringify(y));}catch{}return}v.set(f,y);}function p(g){let a=n(g);if(c){try{localStorage.removeItem(a);}catch{}return}v.delete(a);}function m(g){if(c){try{let a=[];for(let d=0;d<localStorage.length;d++){let f=localStorage.key(d);f&&f.startsWith(t)&&(!g||f.includes(g))&&a.push(f);}a.forEach(d=>localStorage.removeItem(d));}catch{}return}if(g)for(let a of v.keys())a.startsWith(t)&&a.includes(g)&&v.delete(a);else for(let a of v.keys())a.startsWith(t)&&v.delete(a);}async function h(g,a,d=e){let f=i(g);if(f!==null)return f;let y=await a();return s(g,y,d),y}return {get:i,set:s,remove:p,invalidate:m,getOrSet:h}}function ne(o){let e=o.prefix||"[Lynkow]";return {debug(...t){o.debug&&console.debug(e,...t);},info(...t){console.info(e,...t);},warn(...t){console.warn(e,...t);},error(...t){console.error(e,...t);},log(t,...n){switch(t){case "debug":this.debug(...n);break;case "info":this.info(...n);break;case "warn":this.warn(...n);break;case "error":this.error(...n);break}}}}function oe(){let o=new Map;function e(s,p){return o.has(s)||o.set(s,new Set),o.get(s).add(p),()=>t(s,p)}function t(s,p){let m=o.get(s);m&&m.delete(p);}function n(s,p){let m=o.get(s);if(m)for(let h of m)try{h(p);}catch(g){console.error(`[Lynkow] Error in event listener for "${s}":`,g);}}function r(s,p){let m=(h=>{t(s,m),p(h);});return e(s,m)}function i(s){s?o.delete(s):o.clear();}return {on:e,off:t,emit:n,once:r,removeAllListeners:i}}var re="lynkow_locale";function se(o,e){if(!c)return e;let t=ye();if(t&&o.includes(t))return t;let n=Ce(o);if(n)return n;let r=document.documentElement.lang;if(r){let i=r.split("-")[0]?.toLowerCase();if(i&&o.includes(i))return i}return e}function ye(){if(!c)return null;try{return localStorage.getItem(re)}catch{return null}}function ie(o){if(c)try{localStorage.setItem(re,o);}catch{}}function Ce(o){if(!c)return null;let t=window.location.pathname.split("/").filter(Boolean);if(t.length>0){let n=t[0]?.toLowerCase();if(n&&o.includes(n))return n}return null}function ae(o,e){return e.includes(o)}var ce="https://api.lynkow.com";function we(o){if(!o.siteId)throw new Error("Lynkow SDK: siteId is required");let e=te(),t=ne({debug:o.debug??false}),n=oe(),r=(o.baseUrl||ce).replace(/\/$/,""),i={siteId:o.siteId,baseUrl:r,locale:o.locale,fetchOptions:o.fetchOptions||{},cache:e},s={locale:o.locale||"fr",availableLocales:["fr"],siteConfig:null,initialized:false},p={contents:new b(i),categories:new x(i),tags:new E(i),pages:new L(i),blocks:new T(i),forms:new S(i),reviews:new P(i),site:new I(i),legal:new $(i),cookies:new B(i),seo:new A(i),paths:new _(i),analytics:new N(i),consent:new U(i,n),branding:new H};function m(a){i.locale=a;}async function h(){if(!s.initialized)try{let a=await p.site.getConfig();s.siteConfig=a;let d=a.defaultLocale||"fr";if(s.availableLocales=a.enabledLocales||[d],c&&!o.locale){let f=se(s.availableLocales,d);s.locale=f,m(f);}s.initialized=!0,t.debug("Client initialized",{locale:s.locale,availableLocales:s.availableLocales}),c&&(p.analytics.init(),p.consent.hasConsented()||p.consent.show(),a.showBranding&&p.branding.inject()),n.emit("ready",void 0);}catch(a){t.error("Failed to initialize client",a),n.emit("error",a);}}return c&&setTimeout(()=>h(),0),{...p,globals:p.blocks,config:Object.freeze({siteId:o.siteId,baseUrl:r,debug:o.debug??false}),get locale(){return s.locale},get availableLocales(){return [...s.availableLocales]},setLocale(a){if(!ae(a,s.availableLocales)){t.warn(`Locale "${a}" is not available. Available: ${s.availableLocales.join(", ")}`);return}a!==s.locale&&(s.locale=a,m(a),c&&ie(a),e.invalidate(),n.emit("locale-changed",a),t.debug("Locale changed to",a));},clearCache(){e.invalidate(),t.debug("Cache cleared");},destroy(){p.analytics.destroy(),p.consent.destroy(),p.branding.destroy(),e.invalidate(),n.removeAllListeners(),t.debug("Client destroyed");},on(a,d){return n.on(a,d)}}}function ve(o){if(!o.siteId)throw new Error("Lynkow SDK: siteId is required");let e={siteId:o.siteId,baseUrl:(o.baseUrl||ce).replace(/\/$/,""),locale:o.locale,fetchOptions:o.fetchOptions||{}};return {contents:new b(e),categories:new x(e),tags:new E(e),pages:new L(e),blocks:new T(e),forms:new S(e),reviews:new P(e),site:new I(e),legal:new $(e),cookies:new B(e),seo:new A(e),paths:new _(e)}}function Re(o){return o.type==="content"}function be(o){return o.type==="category"}
|
|
173
|
+
exports.LynkowError=C;exports.browserOnly=ge;exports.browserOnlyAsync=ue;exports.createClient=we;exports.createLynkowClient=ve;exports.isBrowser=c;exports.isCategoryResolve=be;exports.isContentResolve=Re;exports.isLynkowError=le;exports.isServer=de;//# sourceMappingURL=index.js.map
|
|
163
174
|
//# sourceMappingURL=index.js.map
|