lynkow 3.3.0 → 3.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.mts CHANGED
@@ -1874,6 +1874,58 @@ declare class BrandingService {
1874
1874
  destroy(): void;
1875
1875
  }
1876
1876
 
1877
+ /**
1878
+ * Content Enhancements module for Lynkow SDK
1879
+ *
1880
+ * Browser-only module. Adds interactive features to content rendered from the API:
1881
+ * - Copy button for code blocks
1882
+ * - (Future: lightbox for images, table of contents, etc.)
1883
+ */
1884
+ /**
1885
+ * Content Enhancements service
1886
+ *
1887
+ * Browser-only. All methods are no-op on server.
1888
+ *
1889
+ * @example
1890
+ * ```typescript
1891
+ * const lynkow = createClient({ siteId: 'your-site-id' })
1892
+ *
1893
+ * // Enhancements are automatically initialized
1894
+ * // Or manually reinitialize after dynamic content load:
1895
+ * lynkow.enhancements.init()
1896
+ * ```
1897
+ */
1898
+ declare class EnhancementsService {
1899
+ private initialized;
1900
+ private observer;
1901
+ /**
1902
+ * Inject styles into document head
1903
+ */
1904
+ private injectStyles;
1905
+ /**
1906
+ * Handle copy button click
1907
+ */
1908
+ private handleCopyClick;
1909
+ /**
1910
+ * Bind copy functionality to all code blocks
1911
+ */
1912
+ private bindCodeBlockCopy;
1913
+ /**
1914
+ * Initialize content enhancements
1915
+ *
1916
+ * Call this after loading dynamic content to bind event handlers.
1917
+ */
1918
+ init(): void;
1919
+ /**
1920
+ * Check if enhancements are initialized
1921
+ */
1922
+ isInitialized(): boolean;
1923
+ /**
1924
+ * Clean up resources
1925
+ */
1926
+ destroy(): void;
1927
+ }
1928
+
1877
1929
  /**
1878
1930
  * Lynkow SDK Client
1879
1931
  * Main entry point for the SDK
@@ -1950,6 +2002,10 @@ interface Client extends LynkowClient {
1950
2002
  * Branding service (badge for free plan)
1951
2003
  */
1952
2004
  branding: BrandingService;
2005
+ /**
2006
+ * Content enhancements service (code copy, etc.)
2007
+ */
2008
+ enhancements: EnhancementsService;
1953
2009
  }
1954
2010
  /**
1955
2011
  * Creates a Lynkow client instance (SDK v3)
@@ -2099,4 +2155,4 @@ declare function browserOnly<T>(fn: () => T, fallback: T): T;
2099
2155
  */
2100
2156
  declare function browserOnlyAsync<T>(fn: () => Promise<T>, fallback: T): Promise<T>;
2101
2157
 
2102
- export { type Alternate, type ApiErrorDetail, type Author, type BaseRequestOptions, type CategoriesListResponse, type Category, type CategoryDetail, type CategoryDetailResponse, type CategoryOptions, type CategoryResolveResponse, type CategoryTreeNode, type CategoryTreeResponse, type CategoryWithCount, type Client, type ClientConfig, type ConsentCategories, type ConsentLogResponse, type Content, type ContentBody, type ContentResolveResponse, type ContentSummary, type ContentsFilters, type ContentsListResponse, type CookieCategory, type CookieConfig, type CookiePreferences, type CookieTexts, type ErrorCode, type EventData, type EventName, type Form, type FormField, type FormFieldOption, type FormFieldType, type FormFieldValidation, type FormSettings, type FormSubmitData, type FormSubmitResponse, type FunnelStepData, type GlobalBlock, type GlobalBlockResponse, type LegalDocument, type LynkowClient, type LynkowConfig, LynkowError, type LynkowEvents, type Page, type PageSeo, type PageSummary, type PagesListResponse, type PageviewData, type PaginatedResponse, type PaginationMeta, type PaginationOptions, type Path, type PathsListResponse, type Redirect, type ResolveResponse, type Review, type ReviewResponse, type ReviewSettings, type ReviewSubmitData, type ReviewSubmitResponse, type ReviewsFilters, type ReviewsListResponse, type SiteConfig, type SiteConfigResponse, type SortOptions, type SubmitOptions, type Tag, type TagsListResponse, type TipTapMark, type TipTapNode, browserOnly, browserOnlyAsync, createClient, createLynkowClient, isBrowser, isCategoryResolve, isContentResolve, isLynkowError, isServer };
2158
+ export { type Alternate, type ApiErrorDetail, type Author, type BaseRequestOptions, type CategoriesListResponse, type Category, type CategoryDetail, type CategoryDetailResponse, type CategoryOptions, type CategoryResolveResponse, type CategoryTreeNode, type CategoryTreeResponse, type CategoryWithCount, type Client, type ClientConfig, type ConsentCategories, type ConsentLogResponse, type Content, type ContentBody, type ContentResolveResponse, type ContentSummary, type ContentsFilters, type ContentsListResponse, type CookieCategory, type CookieConfig, type CookiePreferences, type CookieTexts, EnhancementsService, type ErrorCode, type EventData, type EventName, type Form, type FormField, type FormFieldOption, type FormFieldType, type FormFieldValidation, type FormSettings, type FormSubmitData, type FormSubmitResponse, type FunnelStepData, type GlobalBlock, type GlobalBlockResponse, type LegalDocument, type LynkowClient, type LynkowConfig, LynkowError, type LynkowEvents, type Page, type PageSeo, type PageSummary, type PagesListResponse, type PageviewData, type PaginatedResponse, type PaginationMeta, type PaginationOptions, type Path, type PathsListResponse, type Redirect, type ResolveResponse, type Review, type ReviewResponse, type ReviewSettings, type ReviewSubmitData, type ReviewSubmitResponse, type ReviewsFilters, type ReviewsListResponse, type SiteConfig, type SiteConfigResponse, type SortOptions, type SubmitOptions, type Tag, type TagsListResponse, type TipTapMark, type TipTapNode, browserOnly, browserOnlyAsync, createClient, createLynkowClient, isBrowser, isCategoryResolve, isContentResolve, isLynkowError, isServer };
package/dist/index.d.ts CHANGED
@@ -1874,6 +1874,58 @@ declare class BrandingService {
1874
1874
  destroy(): void;
1875
1875
  }
1876
1876
 
1877
+ /**
1878
+ * Content Enhancements module for Lynkow SDK
1879
+ *
1880
+ * Browser-only module. Adds interactive features to content rendered from the API:
1881
+ * - Copy button for code blocks
1882
+ * - (Future: lightbox for images, table of contents, etc.)
1883
+ */
1884
+ /**
1885
+ * Content Enhancements service
1886
+ *
1887
+ * Browser-only. All methods are no-op on server.
1888
+ *
1889
+ * @example
1890
+ * ```typescript
1891
+ * const lynkow = createClient({ siteId: 'your-site-id' })
1892
+ *
1893
+ * // Enhancements are automatically initialized
1894
+ * // Or manually reinitialize after dynamic content load:
1895
+ * lynkow.enhancements.init()
1896
+ * ```
1897
+ */
1898
+ declare class EnhancementsService {
1899
+ private initialized;
1900
+ private observer;
1901
+ /**
1902
+ * Inject styles into document head
1903
+ */
1904
+ private injectStyles;
1905
+ /**
1906
+ * Handle copy button click
1907
+ */
1908
+ private handleCopyClick;
1909
+ /**
1910
+ * Bind copy functionality to all code blocks
1911
+ */
1912
+ private bindCodeBlockCopy;
1913
+ /**
1914
+ * Initialize content enhancements
1915
+ *
1916
+ * Call this after loading dynamic content to bind event handlers.
1917
+ */
1918
+ init(): void;
1919
+ /**
1920
+ * Check if enhancements are initialized
1921
+ */
1922
+ isInitialized(): boolean;
1923
+ /**
1924
+ * Clean up resources
1925
+ */
1926
+ destroy(): void;
1927
+ }
1928
+
1877
1929
  /**
1878
1930
  * Lynkow SDK Client
1879
1931
  * Main entry point for the SDK
@@ -1950,6 +2002,10 @@ interface Client extends LynkowClient {
1950
2002
  * Branding service (badge for free plan)
1951
2003
  */
1952
2004
  branding: BrandingService;
2005
+ /**
2006
+ * Content enhancements service (code copy, etc.)
2007
+ */
2008
+ enhancements: EnhancementsService;
1953
2009
  }
1954
2010
  /**
1955
2011
  * Creates a Lynkow client instance (SDK v3)
@@ -2099,4 +2155,4 @@ declare function browserOnly<T>(fn: () => T, fallback: T): T;
2099
2155
  */
2100
2156
  declare function browserOnlyAsync<T>(fn: () => Promise<T>, fallback: T): Promise<T>;
2101
2157
 
2102
- export { type Alternate, type ApiErrorDetail, type Author, type BaseRequestOptions, type CategoriesListResponse, type Category, type CategoryDetail, type CategoryDetailResponse, type CategoryOptions, type CategoryResolveResponse, type CategoryTreeNode, type CategoryTreeResponse, type CategoryWithCount, type Client, type ClientConfig, type ConsentCategories, type ConsentLogResponse, type Content, type ContentBody, type ContentResolveResponse, type ContentSummary, type ContentsFilters, type ContentsListResponse, type CookieCategory, type CookieConfig, type CookiePreferences, type CookieTexts, type ErrorCode, type EventData, type EventName, type Form, type FormField, type FormFieldOption, type FormFieldType, type FormFieldValidation, type FormSettings, type FormSubmitData, type FormSubmitResponse, type FunnelStepData, type GlobalBlock, type GlobalBlockResponse, type LegalDocument, type LynkowClient, type LynkowConfig, LynkowError, type LynkowEvents, type Page, type PageSeo, type PageSummary, type PagesListResponse, type PageviewData, type PaginatedResponse, type PaginationMeta, type PaginationOptions, type Path, type PathsListResponse, type Redirect, type ResolveResponse, type Review, type ReviewResponse, type ReviewSettings, type ReviewSubmitData, type ReviewSubmitResponse, type ReviewsFilters, type ReviewsListResponse, type SiteConfig, type SiteConfigResponse, type SortOptions, type SubmitOptions, type Tag, type TagsListResponse, type TipTapMark, type TipTapNode, browserOnly, browserOnlyAsync, createClient, createLynkowClient, isBrowser, isCategoryResolve, isContentResolve, isLynkowError, isServer };
2158
+ export { type Alternate, type ApiErrorDetail, type Author, type BaseRequestOptions, type CategoriesListResponse, type Category, type CategoryDetail, type CategoryDetailResponse, type CategoryOptions, type CategoryResolveResponse, type CategoryTreeNode, type CategoryTreeResponse, type CategoryWithCount, type Client, type ClientConfig, type ConsentCategories, type ConsentLogResponse, type Content, type ContentBody, type ContentResolveResponse, type ContentSummary, type ContentsFilters, type ContentsListResponse, type CookieCategory, type CookieConfig, type CookiePreferences, type CookieTexts, EnhancementsService, type ErrorCode, type EventData, type EventName, type Form, type FormField, type FormFieldOption, type FormFieldType, type FormFieldValidation, type FormSettings, type FormSubmitData, type FormSubmitResponse, type FunnelStepData, type GlobalBlock, type GlobalBlockResponse, type LegalDocument, type LynkowClient, type LynkowConfig, LynkowError, type LynkowEvents, type Page, type PageSeo, type PageSummary, type PagesListResponse, type PageviewData, type PaginatedResponse, type PaginationMeta, type PaginationOptions, type Path, type PathsListResponse, type Redirect, type ResolveResponse, type Review, type ReviewResponse, type ReviewSettings, type ReviewSubmitData, type ReviewSubmitResponse, type ReviewsFilters, type ReviewsListResponse, type SiteConfig, type SiteConfigResponse, type SortOptions, type SubmitOptions, type Tag, type TagsListResponse, type TipTapMark, type TipTapNode, browserOnly, browserOnlyAsync, createClient, createLynkowClient, isBrowser, isCategoryResolve, isContentResolve, isLynkowError, isServer };
package/dist/index.js CHANGED
@@ -1,4 +1,4 @@
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 q(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 V(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=V(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 q(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 q(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 K="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=`${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 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={data:t,honeypot:r._hp,...r};return n?.recaptchaToken&&(i.recaptchaToken=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 `
1
+ 'use strict';var C=class n extends Error{name="LynkowError";code;status;details;cause;constructor(e,t,o,r,i){super(e),this.code=t,this.status=o,this.details=r,this.cause=i,Error.captureStackTrace&&Error.captureStackTrace(this,n);}static async fromResponse(e){let t=e.status,o=`HTTP ${t}`,r;try{let s=await e.json();s.errors&&Array.isArray(s.errors)?(r=s.errors,o=s.errors[0]?.message||o):s.error?o=s.error:s.message&&(o=s.message);}catch{o=e.statusText||o;}let i=n.statusToCode(t);return new n(o,i,t,r)}static fromNetworkError(e){return e.name==="AbortError"?new n("Request timed out","TIMEOUT",void 0,void 0,e):e.name==="TypeError"?new n("Network error - please check your connection","NETWORK_ERROR",void 0,void 0,e):new n(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 de(n){return n instanceof C}function ge(n){switch(n){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(n,e){let t;try{t=await fetch(n,e);}catch(l){throw new C("Network error: Unable to reach the server","NETWORK_ERROR",0,[{message:l instanceof Error?l.message:"Unknown error"}])}if(t.ok)return t.json();let o={};try{o=await t.json();}catch{}let r=ge(t.status),i=o.error||o.message||`HTTP error: ${t.status}`,s=o.errors||[{message:i}];throw new C(i,r,t.status,s)}function Q(n){let e=new URLSearchParams;for(let[t,o]of Object.entries(n))o!=null&&o!==""&&e.append(t,String(o));return e.toString()}var p={SHORT:300*1e3,MEDIUM:600*1e3},u=class{config;cache;constructor(e){this.config=e,this.cache=e.cache;}buildEndpointUrl(e,t){let o=`${this.config.baseUrl}/public/${this.config.siteId}${e}`;if(t&&Object.keys(t).length>0){let r=Q(t);return `${o}?${r}`}return o}async get(e,t,o){let r=o?.locale||this.config.locale,i=r?{...t,locale:r}:t,s=this.buildEndpointUrl(e,i),l=this.mergeFetchOptions(o?.fetchOptions);return K(s,{method:"GET",...l})}async getWithCache(e,t,o,r,i=p.SHORT){return this.cache?this.cache.getOrSet(e,()=>this.get(t,o,r),i):this.get(t,o,r)}invalidateCache(e){this.cache?.invalidate(e);}async post(e,t,o){let r=this.buildEndpointUrl(e),i=this.mergeFetchOptions(o?.fetchOptions);return K(r,{method:"POST",...i,headers:{"Content-Type":"application/json",...i.headers},body:JSON.stringify(t)})}async getText(e,t){let o=this.buildEndpointUrl(e),r=this.mergeFetchOptions(t?.fetchOptions),i=await fetch(o,{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 M="contents_",R=class extends u{async list(e,t){let o={};e?.page&&(o.page=e.page),e?.perPage&&(o.perPage=e.perPage),e?.category&&(o.category=e.category),e?.tag&&(o.tag=e.tag),e?.search&&(o.search=e.search),e?.sort&&(o.sort=e.sort),e?.order&&(o.order=e.order),e?.locale&&(o.locale=e.locale);let r=`${M}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/contents",o,t,p.SHORT)}async getBySlug(e,t){let o=t?.locale||this.config.locale,r=`${M}slug_${e}_${o||"default"}`;return this.getWithCache(r,`/contents/slug/${encodeURIComponent(e)}`,void 0,t,p.SHORT)}clearCache(){this.invalidateCache(M);}};var D="categories_",k=class extends u{async list(e){let t=e?.locale||this.config.locale,o=`${D}list_${t||"default"}`;return this.getWithCache(o,"/categories",void 0,e,p.SHORT)}async tree(e){let t=e?.locale||this.config.locale,o=`${D}tree_${t||"default"}`;return this.getWithCache(o,"/categories/tree",void 0,e,p.SHORT)}async getBySlug(e,t){let o={};t?.page&&(o.page=t.page),t?.perPage&&(o.limit=t.perPage);let r=`${D}slug_${e}_${JSON.stringify(t||{})}`;return this.getWithCache(r,`/categories/${encodeURIComponent(e)}`,o,t,p.SHORT)}clearCache(){this.invalidateCache(D);}};var Z="tags_",x=class extends u{async list(e){let t=e?.locale||this.config.locale,o=`${Z}list_${t||"default"}`;return this.getWithCache(o,"/tags",void 0,e,p.SHORT)}clearCache(){this.invalidateCache(Z);}};var E="pages_",L=class extends u{async list(e){let t=e?.locale||this.config.locale,o={};e?.tag&&(o.tag=e.tag);let r=`${E}list_${t||"default"}_${e?.tag||"all"}`;return this.getWithCache(r,"/pages",o,e,p.SHORT)}async getBySlug(e,t){let o=t?.locale||this.config.locale,r=`${E}slug_${e}_${o||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,p.SHORT)).data}async getByPath(e,t){let o=t?.locale||this.config.locale,r=`${E}path_${e}_${o||"default"}`;return (await this.getWithCache(r,"/page-by-path",{path:e},t,p.SHORT)).data}async getJsonLd(e,t){let o=t?.locale||this.config.locale,r=`${E}jsonld_${e}_${o||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}/json-ld`,void 0,t,p.SHORT)).data}clearCache(){this.invalidateCache(E);}};var z="globals_",T=class extends u{async siteConfig(e){let t=e?.locale||this.config.locale,o=`${z}siteconfig_${t||"default"}`;return this.getWithCache(o,"/site-config",void 0,e,p.MEDIUM)}async getBySlug(e,t){let o=t?.locale||this.config.locale,r=`${z}${e}_${o||"default"}`;return this.getWithCache(r,`/global/${encodeURIComponent(e)}`,void 0,t,p.MEDIUM)}async global(e,t){return this.getBySlug(e,t)}clearCache(){this.invalidateCache(z);}};function N(n){return {_hp:"",_ts:n}}var ee="forms_",S=class extends u{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async getBySlug(e){let t=`${ee}${e}`;return (await this.getWithCache(t,`/forms/${encodeURIComponent(e)}`,void 0,void 0,p.MEDIUM)).data}async submit(e,t,o){let r=N(this.sessionStartTime),i={data:t,honeypot:r._hp,...r};return o?.recaptchaToken&&(i.recaptchaToken=o.recaptchaToken),this.post(`/forms/${encodeURIComponent(e)}/submit`,i,o)}clearCache(){this.invalidateCache(ee);}};var O="reviews_",P=class extends u{sessionStartTime;constructor(e){super(e),this.sessionStartTime=Date.now();}async list(e,t){let o={};e?.page&&(o.page=e.page),e?.perPage&&(o.perPage=e.perPage),e?.minRating&&(o.minRating=e.minRating),e?.maxRating&&(o.maxRating=e.maxRating),e?.sort&&(o.sort=e.sort),e?.order&&(o.order=e.order);let r=`${O}list_${JSON.stringify(e||{})}`;return this.getWithCache(r,"/reviews",o,t,p.SHORT)}async getBySlug(e){let t=`${O}slug_${e}`;return (await this.getWithCache(t,`/reviews/${encodeURIComponent(e)}`,void 0,void 0,p.SHORT)).data}async settings(){let e=`${O}settings`;return this.getWithCache(e,"/reviews/settings",void 0,void 0,p.MEDIUM)}async submit(e,t){let o=N(this.sessionStartTime),r={...e,...o};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 te="site_",B=class extends u{async getConfig(){let e=`${te}config`;return (await this.getWithCache(e,"/site",void 0,void 0,p.MEDIUM)).data}clearCache(){this.invalidateCache(te);}};var W="legal_",I=class extends u{async list(e){let t=e?.locale||this.config.locale,o=`${W}list_${t||"default"}`;return (await this.getWithCache(o,"/pages",{tag:"legal"},e,p.SHORT)).data}async getBySlug(e,t){let o=t?.locale||this.config.locale,r=`${W}slug_${e}_${o||"default"}`;return (await this.getWithCache(r,`/pages/${encodeURIComponent(e)}`,void 0,t,p.SHORT)).data}clearCache(){this.invalidateCache(W);}};var oe="cookies_",$=class extends u{async getConfig(){let e=`${oe}config`;return (await this.getWithCache(e,"/cookie-consent/config",void 0,void 0,p.MEDIUM)).data}async logConsent(e,t){return this.post("/cookie-consent/log",{preferences:e},t)}clearCache(){this.invalidateCache(oe);}};var A=class extends u{async sitemap(e){return this.getText("/sitemap.xml",e)}async robots(e){return this.getText("/robots.txt",e)}};var j="paths_",_=class extends u{async list(e){let t=e?.locale||this.config.locale,o=`${j}list_${t||"all"}`;return this.getWithCache(o,"/paths",void 0,e,p.SHORT)}async resolve(e,t){let o=t?.locale||this.config.locale,r=`${j}resolve_${e}_${o||"default"}`;return this.getWithCache(r,"/resolve",{path:e},t,p.SHORT)}async matchRedirect(e,t){try{return (await this.get("/redirects/match",{path:e},t)).data}catch(o){if(o instanceof C&&o.status===404)return null;throw o}}clearCache(){this.invalidateCache(j);}};var a=typeof window<"u"&&typeof window.document<"u"&&typeof window.document.createElement<"u",ue=!a;function me(n,e){return a?n():e}async function fe(n,e){return a?n():e}var G="lynkow-tracker",U=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(G)){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 o=document.createElement("script");o.id=G,o.src=this.getTrackerUrl(),o.async=true,o.setAttribute("data-site-id",this.config.siteId),this.config.baseUrl&&o.setAttribute("data-api-url",this.config.baseUrl),o.onload=()=>{this.loading=false,setTimeout(()=>{window.LynkowAnalytics?e():t(new Error("Tracker script loaded but LynkowAnalytics not found"));},0);},o.onerror=()=>{this.loading=false,t(new Error("Failed to load tracker script"));},document.head.appendChild(o);}),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(G)?.remove(),this.initialized=false,this.loadPromise=null;}};var J="_lkw_consent",V={necessary:true,analytics:false,marketing:false,preferences:false},H=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 o=await t.json();return this.configCache=o.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(),o=document.createElement("div");o.innerHTML=this.createPreferencesHTML(e,t),this.preferencesElement=o.firstElementChild,document.body.appendChild(this.preferencesElement),this.attachPreferencesEvents(e);}));}getCategories(){return a?this.getStoredConsent()||{...V}:{...V}}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 o={...this.getCategories(),...e,necessary:true};this.saveConsent(o),this.logConsent(o);}reset(){if(a){try{localStorage.removeItem(J);}catch{}this.events.emit("consent-changed",{...V}),this.show();}}createBannerHTML(e){let t=e.position||"bottom",o=e.theme||"light",r=e.layout||"banner",i=e.primaryColor||"#0066cc",s=e.borderRadius??8,l={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);"},f={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=f:r==="modal"?g=h:g=l;let c=g[t]||g.bottom||"",d=o==="dark",m=d?"#1a1a1a":"#ffffff",y=d?"#ffffff":"#1a1a1a",b=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
2
  ${r==="modal"?`
3
3
  <div id="lynkow-consent-backdrop" style="
4
4
  position: fixed;
@@ -12,19 +12,19 @@
12
12
  `:""}
13
13
  <div id="lynkow-consent-banner" style="
14
14
  position: fixed;
15
- ${a}
15
+ ${c}
16
16
  z-index: 99999;
17
17
  padding: 20px;
18
- background: ${f};
18
+ background: ${m};
19
19
  color: ${y};
20
20
  box-shadow: 0 4px 20px rgba(0,0,0,0.15);
21
21
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
22
22
  font-size: 14px;
23
23
  ">
24
24
  <div style="max-width: 1200px; margin: 0 auto;">
25
- <h3 style="margin: 0 0 10px 0; font-size: 16px;">${R.title}</h3>
25
+ <h3 style="margin: 0 0 10px 0; font-size: 16px;">${b.title}</h3>
26
26
  <p style="margin: 0 0 15px 0; line-height: 1.5;">
27
- ${R.description}
27
+ ${b.description}
28
28
  </p>
29
29
  <div style="display: flex; gap: 10px; flex-wrap: wrap;">
30
30
  <button id="lynkow-consent-accept" style="
@@ -35,7 +35,7 @@
35
35
  border-radius: ${s}px;
36
36
  cursor: pointer;
37
37
  font-size: 14px;
38
- ">${R.acceptAll}</button>
38
+ ">${b.acceptAll}</button>
39
39
  <button id="lynkow-consent-reject" style="
40
40
  padding: 10px 20px;
41
41
  background: transparent;
@@ -44,7 +44,7 @@
44
44
  border-radius: ${s}px;
45
45
  cursor: pointer;
46
46
  font-size: 14px;
47
- ">${R.rejectAll}</button>
47
+ ">${b.rejectAll}</button>
48
48
  <button id="lynkow-consent-preferences" style="
49
49
  padding: 10px 20px;
50
50
  background: transparent;
@@ -53,11 +53,11 @@
53
53
  cursor: pointer;
54
54
  font-size: 14px;
55
55
  text-decoration: underline;
56
- ">${R.customize}</button>
56
+ ">${b.customize}</button>
57
57
  </div>
58
58
  </div>
59
59
  </div>
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=>`
60
+ `}createPreferencesHTML(e,t){let o=e.theme||"light",r=e.primaryColor||"#0066cc",i=e.borderRadius??8,s=o==="dark",l=s?"#1a1a1a":"#ffffff",f=s?"#ffffff":"#1a1a1a",h=e.texts||{title:"Preferences de cookies",save:"Enregistrer"},c=(e.categories||[]).map(d=>`
61
61
  <label style="display: flex; align-items: flex-start; gap: 10px; margin: 15px 0; cursor: ${d.required?"not-allowed":"pointer"};">
62
62
  <input
63
63
  type="checkbox"
@@ -90,8 +90,8 @@
90
90
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
91
91
  ">
92
92
  <div style="
93
- background: ${p};
94
- color: ${m};
93
+ background: ${l};
94
+ color: ${f};
95
95
  padding: 30px;
96
96
  border-radius: ${i}px;
97
97
  max-width: 500px;
@@ -102,7 +102,7 @@
102
102
  <h2 style="margin: 0 0 20px 0; font-size: 20px;">${h.title||"Preferences de cookies"}</h2>
103
103
 
104
104
  <form id="lynkow-consent-form">
105
- ${a}
105
+ ${c}
106
106
 
107
107
  <div style="display: flex; gap: 10px; margin-top: 25px; padding-top: 20px; border-top: 1px solid rgba(128,128,128,0.3);">
108
108
  <button type="submit" style="
@@ -127,7 +127,7 @@
127
127
  </form>
128
128
  </div>
129
129
  </div>
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",J="lynkow-badge-styles",fe=`
130
+ `}attachBannerEvents(){let e=document.getElementById("lynkow-consent-accept"),t=document.getElementById("lynkow-consent-reject"),o=document.getElementById("lynkow-consent-preferences");e?.addEventListener("click",()=>{this.acceptAll();}),t?.addEventListener("click",()=>{this.rejectAll();}),o?.addEventListener("click",()=>{this.showPreferences();});}attachPreferencesEvents(e){let t=document.getElementById("lynkow-consent-form"),o=document.getElementById("lynkow-consent-close"),r=document.getElementById("lynkow-consent-preferences-modal");t?.addEventListener("submit",i=>{i.preventDefault();let s=new FormData(t),l={necessary:true,analytics:s.has("analytics"),marketing:s.has("marketing"),preferences:s.has("preferences")};this.setCategories(l),this.hide(),this.preferencesElement?.remove(),this.preferencesElement=null;}),o?.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",X="lynkow-badge-styles",he=`
131
131
  #${w} {
132
132
  position: fixed;
133
133
  bottom: 16px;
@@ -169,6 +169,122 @@
169
169
  color: #1a1a1a;
170
170
  }
171
171
  }
172
- `,H=class{badgeElement=null;injectStyles(){if(document.getElementById(J))return;let e=document.createElement("style");e.id=J,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(J)?.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
172
+ `,q=class{badgeElement=null;injectStyles(){if(document.getElementById(X))return;let e=document.createElement("style");e.id=X,e.textContent=he,document.head.appendChild(e);}inject(){if(!a||document.getElementById(w))return;this.injectStyles();let e=document.createElement("a");e.id=w,e.href="https://www.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(){a&&(this.badgeElement?.remove(),this.badgeElement=null,document.getElementById(X)?.remove());}isVisible(){return a?document.getElementById(w)!==null:false}destroy(){this.remove();}};var Y="lynkow-enhancements-styles",ye='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/></svg>',Ce='<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>',we=`
173
+ /*
174
+ * Lynkow Content Enhancements
175
+ * These styles ensure that content from the Lynkow API is displayed correctly,
176
+ * even when the client uses CSS frameworks like Tailwind or CSS resets.
177
+ */
178
+
179
+ /* Text alignment - Ensure inline styles are respected */
180
+ [style*="text-align: center"] {
181
+ text-align: center !important;
182
+ }
183
+
184
+ [style*="text-align: right"] {
185
+ text-align: right !important;
186
+ }
187
+
188
+ [style*="text-align: justify"] {
189
+ text-align: justify !important;
190
+ }
191
+
192
+ /* Preserve common inline formatting */
193
+ h1, h2, h3, h4, h5, h6, p, blockquote {
194
+ /* Allow inline text-align to override */
195
+ text-align: inherit;
196
+ }
197
+
198
+ /* Code block enhancements */
199
+ .code-block {
200
+ position: relative;
201
+ margin: 1rem 0;
202
+ }
203
+
204
+ .code-block-header {
205
+ display: flex;
206
+ justify-content: space-between;
207
+ align-items: center;
208
+ padding: 0.5rem 1rem;
209
+ background: #1e1e1e;
210
+ border-radius: 0.5rem 0.5rem 0 0;
211
+ border-bottom: 1px solid #333;
212
+ }
213
+
214
+ .code-block-language {
215
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
216
+ font-size: 0.75rem;
217
+ color: #888;
218
+ text-transform: uppercase;
219
+ letter-spacing: 0.05em;
220
+ }
221
+
222
+ .code-block-copy {
223
+ display: flex;
224
+ align-items: center;
225
+ justify-content: center;
226
+ background: transparent;
227
+ border: none;
228
+ color: #888;
229
+ cursor: pointer;
230
+ padding: 0.25rem;
231
+ border-radius: 0.25rem;
232
+ transition: color 0.2s, background-color 0.2s;
233
+ }
234
+
235
+ .code-block-copy:hover {
236
+ color: #fff;
237
+ background: rgba(255, 255, 255, 0.1);
238
+ }
239
+
240
+ .code-block-copy.copied {
241
+ color: #22c55e;
242
+ }
243
+
244
+ .code-block pre {
245
+ margin: 0;
246
+ border-radius: 0 0 0.5rem 0.5rem;
247
+ background: #1e1e1e;
248
+ overflow-x: auto;
249
+ }
250
+
251
+ .code-block code {
252
+ display: block;
253
+ padding: 1rem;
254
+ font-family: 'Fira Code', 'JetBrains Mono', 'SF Mono', Consolas, monospace;
255
+ font-size: 0.875rem;
256
+ line-height: 1.5;
257
+ color: #e4e4e4;
258
+ }
259
+
260
+ /* Light mode support */
261
+ @media (prefers-color-scheme: light) {
262
+ .code-block-header {
263
+ background: #f5f5f5;
264
+ border-bottom-color: #e0e0e0;
265
+ }
266
+
267
+ .code-block-language {
268
+ color: #666;
269
+ }
270
+
271
+ .code-block-copy {
272
+ color: #666;
273
+ }
274
+
275
+ .code-block-copy:hover {
276
+ color: #1a1a1a;
277
+ background: rgba(0, 0, 0, 0.05);
278
+ }
279
+
280
+ .code-block pre {
281
+ background: #f5f5f5;
282
+ }
283
+
284
+ .code-block code {
285
+ color: #1a1a1a;
286
+ }
287
+ }
288
+ `,F=class{initialized=false;observer=null;injectStyles(){if(!a||document.getElementById(Y))return;let e=document.createElement("style");e.id=Y,e.textContent=we,document.head.appendChild(e);}async handleCopyClick(e){let t=e.closest(".code-block");if(!t)return;let o=t.querySelector("code");if(!o)return;let r=o.textContent||"";try{await navigator.clipboard.writeText(r),e.classList.add("copied"),e.innerHTML=Ce,setTimeout(()=>{e.classList.remove("copied"),e.innerHTML=ye;},2e3);}catch(i){console.error("Lynkow SDK: Failed to copy code",i);}}bindCodeBlockCopy(){if(!a)return;document.querySelectorAll("[data-copy-code]").forEach(t=>{t.dataset.lynkowBound||(t.dataset.lynkowBound="true",t.addEventListener("click",o=>{o.preventDefault(),this.handleCopyClick(t);}));});}init(){a&&(this.injectStyles(),this.bindCodeBlockCopy(),this.observer||(this.observer=new MutationObserver(e=>{let t=false;for(let o of e)if(o.addedNodes.length>0){t=true;break}t&&this.bindCodeBlockCopy();}),this.observer.observe(document.body,{childList:true,subtree:true})),this.initialized=true);}isInitialized(){return this.initialized}destroy(){a&&(this.observer&&(this.observer.disconnect(),this.observer=null),document.getElementById(Y)?.remove(),this.initialized=false);}};var ve=300*1e3,be="lynkow_cache_",v=new Map;function ne(n={}){let e=n.defaultTtl??ve,t=n.prefix??be;function o(g){return `${t}${g}`}function r(g){return Date.now()>g.expiresAt}function i(g){let c=o(g);if(a)try{let m=localStorage.getItem(c);if(!m)return null;let y=JSON.parse(m);return r(y)?(localStorage.removeItem(c),null):y.value}catch{return null}let d=v.get(c);return d?r(d)?(v.delete(c),null):d.value:null}function s(g,c,d=e){let m=o(g),y={value:c,expiresAt:Date.now()+d};if(a){try{localStorage.setItem(m,JSON.stringify(y));}catch{}return}v.set(m,y);}function l(g){let c=o(g);if(a){try{localStorage.removeItem(c);}catch{}return}v.delete(c);}function f(g){if(a){try{let c=[];for(let d=0;d<localStorage.length;d++){let m=localStorage.key(d);m&&m.startsWith(t)&&(!g||m.includes(g))&&c.push(m);}c.forEach(d=>localStorage.removeItem(d));}catch{}return}if(g)for(let c of v.keys())c.startsWith(t)&&c.includes(g)&&v.delete(c);else for(let c of v.keys())c.startsWith(t)&&v.delete(c);}async function h(g,c,d=e){let m=i(g);if(m!==null)return m;let y=await c();return s(g,y,d),y}return {get:i,set:s,remove:l,invalidate:f,getOrSet:h}}function re(n){let e=n.prefix||"[Lynkow]";return {debug(...t){n.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,...o){switch(t){case "debug":this.debug(...o);break;case "info":this.info(...o);break;case "warn":this.warn(...o);break;case "error":this.error(...o);break}}}}function se(){let n=new Map;function e(s,l){return n.has(s)||n.set(s,new Set),n.get(s).add(l),()=>t(s,l)}function t(s,l){let f=n.get(s);f&&f.delete(l);}function o(s,l){let f=n.get(s);if(f)for(let h of f)try{h(l);}catch(g){console.error(`[Lynkow] Error in event listener for "${s}":`,g);}}function r(s,l){let f=(h=>{t(s,f),l(h);});return e(s,f)}function i(s){s?n.delete(s):n.clear();}return {on:e,off:t,emit:o,once:r,removeAllListeners:i}}var ie="lynkow_locale";function ae(n,e){if(!a)return e;let t=Re();if(t&&n.includes(t))return t;let o=ke(n);if(o)return o;let r=document.documentElement.lang;if(r){let i=r.split("-")[0]?.toLowerCase();if(i&&n.includes(i))return i}return e}function Re(){if(!a)return null;try{return localStorage.getItem(ie)}catch{return null}}function ce(n){if(a)try{localStorage.setItem(ie,n);}catch{}}function ke(n){if(!a)return null;let t=window.location.pathname.split("/").filter(Boolean);if(t.length>0){let o=t[0]?.toLowerCase();if(o&&n.includes(o))return o}return null}function le(n,e){return e.includes(n)}var pe="https://api.lynkow.com";function xe(n){if(!n.siteId)throw new Error("Lynkow SDK: siteId is required");let e=ne(),t=re({debug:n.debug??false}),o=se(),r=(n.baseUrl||pe).replace(/\/$/,""),i={siteId:n.siteId,baseUrl:r,locale:n.locale,fetchOptions:n.fetchOptions||{},cache:e},s={locale:n.locale||"fr",availableLocales:["fr"],siteConfig:null,initialized:false},l={contents:new R(i),categories:new k(i),tags:new x(i),pages:new L(i),blocks:new T(i),forms:new S(i),reviews:new P(i),site:new B(i),legal:new I(i),cookies:new $(i),seo:new A(i),paths:new _(i),analytics:new U(i),consent:new H(i,o),branding:new q,enhancements:new F};function f(c){i.locale=c;}async function h(){if(!s.initialized)try{let c=await l.site.getConfig();s.siteConfig=c;let d=c.defaultLocale||"fr";if(s.availableLocales=c.enabledLocales||[d],a&&!n.locale){let m=ae(s.availableLocales,d);s.locale=m,f(m);}s.initialized=!0,t.debug("Client initialized",{locale:s.locale,availableLocales:s.availableLocales}),a&&(l.analytics.init(),l.consent.hasConsented()||l.consent.show(),c.showBranding&&l.branding.inject(),l.enhancements.init()),o.emit("ready",void 0);}catch(c){t.error("Failed to initialize client",c),o.emit("error",c);}}return a&&setTimeout(()=>h(),0),{...l,globals:l.blocks,config:Object.freeze({siteId:n.siteId,baseUrl:r,debug:n.debug??false}),get locale(){return s.locale},get availableLocales(){return [...s.availableLocales]},setLocale(c){if(!le(c,s.availableLocales)){t.warn(`Locale "${c}" is not available. Available: ${s.availableLocales.join(", ")}`);return}c!==s.locale&&(s.locale=c,f(c),a&&ce(c),e.invalidate(),o.emit("locale-changed",c),t.debug("Locale changed to",c));},clearCache(){e.invalidate(),t.debug("Cache cleared");},destroy(){l.analytics.destroy(),l.consent.destroy(),l.branding.destroy(),l.enhancements.destroy(),e.invalidate(),o.removeAllListeners(),t.debug("Client destroyed");},on(c,d){return o.on(c,d)}}}function Ee(n){if(!n.siteId)throw new Error("Lynkow SDK: siteId is required");let e={siteId:n.siteId,baseUrl:(n.baseUrl||pe).replace(/\/$/,""),locale:n.locale,fetchOptions:n.fetchOptions||{}};return {contents:new R(e),categories:new k(e),tags:new x(e),pages:new L(e),blocks:new T(e),forms:new S(e),reviews:new P(e),site:new B(e),legal:new I(e),cookies:new $(e),seo:new A(e),paths:new _(e)}}function Le(n){return n.type==="content"}function Te(n){return n.type==="category"}
289
+ exports.EnhancementsService=F;exports.LynkowError=C;exports.browserOnly=me;exports.browserOnlyAsync=fe;exports.createClient=xe;exports.createLynkowClient=Ee;exports.isBrowser=a;exports.isCategoryResolve=Te;exports.isContentResolve=Le;exports.isLynkowError=de;exports.isServer=ue;//# sourceMappingURL=index.js.map
174
290
  //# sourceMappingURL=index.js.map