@clearlaunch/sdk 0.2.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,4 @@
1
- "use strict";var l=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!b.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(n=w(t,o))||n.enumerable});return e};var h=e=>y(l({},"__esModule",{value:!0}),e);var T={};x(T,{ClearLaunch:()=>v,default:()=>R,init:()=>f});module.exports=h(T);var k="https://api.clearlaunch.com";function a(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function d(e,t){if(document.getElementById(e))return;let r=document.createElement("style");r.id=e,r.textContent=t,document.head.appendChild(r)}function p(e){return typeof e=="string"?document.querySelector(e):e}function g(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let r=`${(e.apiUrl||k).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,n=null;async function o(c){let s=await fetch(`${r}/${c.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${c} failed (${s.status})`);return s.json()}function _(){return n||(n=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),n}return{projectKey:e.projectKey,sdkBase:r,get:o,config:_}}var u=`
1
+ "use strict";var l=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!b.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(n=w(t,o))||n.enumerable});return e};var h=e=>y(l({},"__esModule",{value:!0}),e);var T={};x(T,{ClearLaunch:()=>v,default:()=>R,init:()=>f});module.exports=h(T);var k="https://api.clearlaunch.ai";function a(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function d(e,t){if(document.getElementById(e))return;let r=document.createElement("style");r.id=e,r.textContent=t,document.head.appendChild(r)}function p(e){return typeof e=="string"?document.querySelector(e):e}function g(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let r=`${(e.apiUrl||k).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,n=null;async function o(c){let s=await fetch(`${r}/${c.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${c} failed (${s.status})`);return s.json()}function _(){return n||(n=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),n}return{projectKey:e.projectKey,sdkBase:r,get:o,config:_}}var u=`
2
2
  .cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;
3
3
  font-family: var(--cl-vw-font, inherit); color: #1f2430; }
4
4
  .cl-vw * { box-sizing: border-box; }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../../clearsdk-core/src/index.ts", "../../clearsdk-versions/src/styles.ts", "../../clearsdk-versions/src/index.ts"],
4
- "sourcesContent": ["/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n", "/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.com';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n"],
5
- "mappings": "yaAAA,IAAAA,EAAA,GAAAC,EAAAD,EAAA,iBAAAE,EAAA,YAAAC,EAAA,SAAAC,IAAA,eAAAC,EAAAL,GCyCA,IAAMM,EAAkB,8BAGjB,SAASC,EAAIC,EAAmB,CACrC,IAAMC,EAAI,SAAS,cAAc,KAAK,EACtC,OAAAA,EAAE,YAAcD,EACTC,EAAE,SACX,CAGO,SAASC,EAAaC,EAAYC,EAAmB,CAC1D,GAAI,SAAS,eAAeD,CAAE,EAAG,OACjC,IAAME,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,GAAKF,EACXE,EAAM,YAAcD,EACpB,SAAS,KAAK,YAAYC,CAAK,CACjC,CAGO,SAASC,EAAcC,EAAkD,CAC9E,OAAO,OAAOA,GAAW,SAAW,SAAS,cAA2BA,CAAM,EAAIA,CACpF,CAEO,SAASC,EAAWC,EAA0C,CACnE,GAAI,EAACA,GAAA,MAAAA,EAAQ,YAAY,MAAM,IAAI,MAAM,qCAAqC,EAE9E,IAAMC,EAAU,IADAD,EAAO,QAAUX,GAAiB,QAAQ,MAAO,EAAE,CAC1C,sBAAsB,mBAAmBW,EAAO,UAAU,CAAC,GAEhFE,EAAiD,KAErD,eAAeC,EAAOC,EAA0B,CAC9C,IAAMC,EAAM,MAAM,MAAM,GAAGJ,CAAO,IAAIG,EAAK,QAAQ,MAAO,EAAE,CAAC,EAAE,EAC/D,GAAI,CAACC,EAAI,GAAI,MAAM,IAAI,MAAM,2BAA2BD,CAAI,YAAYC,EAAI,MAAM,GAAG,EACrF,OAAOA,EAAI,KAAK,CAClB,CAEA,SAASC,GAAuC,CAC9C,OAAKJ,IACHA,EAAgBC,EAAqB,QAAQ,EAAE,MAAM,KAAO,CAC1D,YAAa,GACb,QAAS,CAAE,SAAU,EAAK,CAC5B,EAAqB,GAEhBD,CACT,CAEA,MAAO,CACL,WAAYF,EAAO,WACnB,QAAAC,EACA,IAAAE,EACA,OAAQG,CACV,CACF,CC3FO,IAAMC,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECuB5B,SAASC,EAAQC,EAAsB,CACrC,GAAI,CAACA,EAAK,MAAO,GACjB,IAAMC,EAAI,IAAI,KAAKD,CAAG,EACtB,OAAO,MAAMC,EAAE,QAAQ,CAAC,EAAI,GAAKA,EAAE,mBAAmB,OAAW,CAAE,KAAM,UAAW,MAAO,QAAS,IAAK,SAAU,CAAC,CACtH,CAEA,SAASC,EAAMC,EAAeC,EAAiBC,EAAW,GAAY,CACpE,GAAI,EAACD,GAAA,MAAAA,EAAO,QAAQ,MAAO,GAC3B,IAAME,EAAKF,EAAM,IAAIG,GAAK,OAAOC,EAAID,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EACvD,MAAO,4BAA4BF,CAAQ,qCAAqCF,CAAK,iCAAiCG,CAAE,aAC1H,CAEA,SAASG,EAAOC,EAAiBC,EAAiC,CAChE,GAAI,CAACA,EAAS,OAAQ,CACpBD,EAAG,UAAY,4EACf,MACF,CACA,IAAME,EAAOD,EAAS,IAAIE,GAAK;AAAA;AAAA;AAAA,oCAGGL,EAAIK,EAAE,OAAO,CAAC;AAAA,oCACdd,EAAQc,EAAE,WAAW,CAAC;AAAA;AAAA,QAElDX,EAAM,mBAAoBW,EAAE,MAAM,SAAU,wBAAwB,CAAC;AAAA,QACrEX,EAAM,eAAgBW,EAAE,MAAM,QAAQ,CAAC;AAAA,QACvCX,EAAM,eAAgBW,EAAE,MAAM,YAAY,CAAC;AAAA,QAC3CX,EAAM,QAASW,EAAE,MAAM,QAAQ,CAAC;AAAA,WAC7B,EAAE,KAAK,EAAE,EAClBH,EAAG,UAAY,sBAAsBE,CAAI,QAC3C,CAGO,SAASE,EAAeC,EAAuC,CACpE,eAAeC,GAAiC,CAE9C,OADa,MAAMD,EAAK,IAAmC,UAAU,GACzD,UAAY,CAAC,CAC3B,CACA,MAAO,CACL,KAAAC,EACA,MAAM,MAAMC,EAAQ,CAClB,IAAMP,EAAKQ,EAAcD,CAAM,EAC/B,GAAI,CAACP,EAAI,MAAM,IAAI,MAAM,iDAAiD,OAAOO,CAAM,CAAC,EAAE,EAC1FE,EAAa,eAAgBC,CAAY,EACzC,GAAI,CACFX,EAAOC,EAAI,MAAMM,EAAK,CAAC,CACzB,MAAQ,CACNN,EAAG,UAAY,uFACjB,CACF,CACF,CACF,CHpDO,SAASW,EAAKC,EAA4C,CAC/D,IAAMC,EAAOC,EAAWF,CAAM,EAC9B,MAAO,CACL,WAAYC,EAAK,WACjB,SAAUE,EAAeF,CAAI,CAC/B,CACF,CAEO,IAAMG,EAAc,CAAE,KAAAL,CAAK,EAC3BM,EAAQD",
4
+ "sourcesContent": ["/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n", "/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.ai';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["index_exports", "__export", "ClearLaunch", "index_default", "init", "__toCommonJS", "DEFAULT_API_URL", "esc", "s", "d", "injectStyles", "id", "css", "style", "resolveTarget", "target", "createCore", "config", "sdkBase", "configPromise", "get", "path", "res", "configOnce", "VERSIONS_CSS", "fmtDate", "iso", "d", "group", "label", "items", "modifier", "li", "i", "esc", "render", "el", "releases", "body", "r", "createVersions", "core", "list", "target", "resolveTarget", "injectStyles", "VERSIONS_CSS", "init", "config", "core", "createCore", "createVersions", "ClearLaunch", "index_default"]
7
7
  }
@@ -1,4 +1,4 @@
1
- var f="https://api.clearlaunch.com";function l(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function c(e,t){if(document.getElementById(e))return;let n=document.createElement("style");n.id=e,n.textContent=t,document.head.appendChild(n)}function d(e){return typeof e=="string"?document.querySelector(e):e}function p(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let n=`${(e.apiUrl||f).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,r=null;async function o(a){let s=await fetch(`${n}/${a.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${a} failed (${s.status})`);return s.json()}function m(){return r||(r=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),r}return{projectKey:e.projectKey,sdkBase:n,get:o,config:m}}var g=`
1
+ var f="https://api.clearlaunch.ai";function l(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function c(e,t){if(document.getElementById(e))return;let n=document.createElement("style");n.id=e,n.textContent=t,document.head.appendChild(n)}function d(e){return typeof e=="string"?document.querySelector(e):e}function p(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let n=`${(e.apiUrl||f).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,r=null;async function o(a){let s=await fetch(`${n}/${a.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${a} failed (${s.status})`);return s.json()}function m(){return r||(r=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),r}return{projectKey:e.projectKey,sdkBase:n,get:o,config:m}}var g=`
2
2
  .cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;
3
3
  font-family: var(--cl-vw-font, inherit); color: #1f2430; }
4
4
  .cl-vw * { box-sizing: border-box; }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../clearsdk-core/src/index.ts", "../../clearsdk-versions/src/styles.ts", "../../clearsdk-versions/src/index.ts", "../src/index.ts"],
4
- "sourcesContent": ["/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.com';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n", "/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n"],
5
- "mappings": "AAyCA,IAAMA,EAAkB,8BAGjB,SAASC,EAAIC,EAAmB,CACrC,IAAMC,EAAI,SAAS,cAAc,KAAK,EACtC,OAAAA,EAAE,YAAcD,EACTC,EAAE,SACX,CAGO,SAASC,EAAaC,EAAYC,EAAmB,CAC1D,GAAI,SAAS,eAAeD,CAAE,EAAG,OACjC,IAAME,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,GAAKF,EACXE,EAAM,YAAcD,EACpB,SAAS,KAAK,YAAYC,CAAK,CACjC,CAGO,SAASC,EAAcC,EAAkD,CAC9E,OAAO,OAAOA,GAAW,SAAW,SAAS,cAA2BA,CAAM,EAAIA,CACpF,CAEO,SAASC,EAAWC,EAA0C,CACnE,GAAI,EAACA,GAAA,MAAAA,EAAQ,YAAY,MAAM,IAAI,MAAM,qCAAqC,EAE9E,IAAMC,EAAU,IADAD,EAAO,QAAUX,GAAiB,QAAQ,MAAO,EAAE,CAC1C,sBAAsB,mBAAmBW,EAAO,UAAU,CAAC,GAEhFE,EAAiD,KAErD,eAAeC,EAAOC,EAA0B,CAC9C,IAAMC,EAAM,MAAM,MAAM,GAAGJ,CAAO,IAAIG,EAAK,QAAQ,MAAO,EAAE,CAAC,EAAE,EAC/D,GAAI,CAACC,EAAI,GAAI,MAAM,IAAI,MAAM,2BAA2BD,CAAI,YAAYC,EAAI,MAAM,GAAG,EACrF,OAAOA,EAAI,KAAK,CAClB,CAEA,SAASC,GAAuC,CAC9C,OAAKJ,IACHA,EAAgBC,EAAqB,QAAQ,EAAE,MAAM,KAAO,CAC1D,YAAa,GACb,QAAS,CAAE,SAAU,EAAK,CAC5B,EAAqB,GAEhBD,CACT,CAEA,MAAO,CACL,WAAYF,EAAO,WACnB,QAAAC,EACA,IAAAE,EACA,OAAQG,CACV,CACF,CC3FO,IAAMC,EAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;ECuB5B,SAASC,EAAQC,EAAsB,CACrC,GAAI,CAACA,EAAK,MAAO,GACjB,IAAMC,EAAI,IAAI,KAAKD,CAAG,EACtB,OAAO,MAAMC,EAAE,QAAQ,CAAC,EAAI,GAAKA,EAAE,mBAAmB,OAAW,CAAE,KAAM,UAAW,MAAO,QAAS,IAAK,SAAU,CAAC,CACtH,CAEA,SAASC,EAAMC,EAAeC,EAAiBC,EAAW,GAAY,CACpE,GAAI,EAACD,GAAA,MAAAA,EAAO,QAAQ,MAAO,GAC3B,IAAME,EAAKF,EAAM,IAAIG,GAAK,OAAOC,EAAID,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,EACvD,MAAO,4BAA4BF,CAAQ,qCAAqCF,CAAK,iCAAiCG,CAAE,aAC1H,CAEA,SAASG,EAAOC,EAAiBC,EAAiC,CAChE,GAAI,CAACA,EAAS,OAAQ,CACpBD,EAAG,UAAY,4EACf,MACF,CACA,IAAME,EAAOD,EAAS,IAAI,GAAK;AAAA;AAAA;AAAA,oCAGGH,EAAI,EAAE,OAAO,CAAC;AAAA,oCACdT,EAAQ,EAAE,WAAW,CAAC;AAAA;AAAA,QAElDG,EAAM,mBAAoB,EAAE,MAAM,SAAU,wBAAwB,CAAC;AAAA,QACrEA,EAAM,eAAgB,EAAE,MAAM,QAAQ,CAAC;AAAA,QACvCA,EAAM,eAAgB,EAAE,MAAM,YAAY,CAAC;AAAA,QAC3CA,EAAM,QAAS,EAAE,MAAM,QAAQ,CAAC;AAAA,WAC7B,EAAE,KAAK,EAAE,EAClBQ,EAAG,UAAY,sBAAsBE,CAAI,QAC3C,CAGO,SAASC,EAAeC,EAAuC,CACpE,eAAeC,GAAiC,CAE9C,OADa,MAAMD,EAAK,IAAmC,UAAU,GACzD,UAAY,CAAC,CAC3B,CACA,MAAO,CACL,KAAAC,EACA,MAAM,MAAMC,EAAQ,CAClB,IAAMN,EAAKO,EAAcD,CAAM,EAC/B,GAAI,CAACN,EAAI,MAAM,IAAI,MAAM,iDAAiD,OAAOM,CAAM,CAAC,EAAE,EAC1FE,EAAa,eAAgBC,CAAY,EACzC,GAAI,CACFV,EAAOC,EAAI,MAAMK,EAAK,CAAC,CACzB,MAAQ,CACNL,EAAG,UAAY,uFACjB,CACF,CACF,CACF,CCpDO,SAASU,EAAKC,EAA4C,CAC/D,IAAMC,EAAOC,EAAWF,CAAM,EAC9B,MAAO,CACL,WAAYC,EAAK,WACjB,SAAUE,EAAeF,CAAI,CAC/B,CACF,CAEO,IAAMG,EAAc,CAAE,KAAAL,CAAK,EAC3BM,EAAQD",
4
+ "sourcesContent": ["/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.ai';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n", "/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n"],
5
+ "mappings": "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",
6
6
  "names": ["DEFAULT_API_URL", "esc", "s", "d", "injectStyles", "id", "css", "style", "resolveTarget", "target", "createCore", "config", "sdkBase", "configPromise", "get", "path", "res", "configOnce", "VERSIONS_CSS", "fmtDate", "iso", "d", "group", "label", "items", "modifier", "li", "i", "esc", "render", "el", "releases", "body", "createVersions", "core", "list", "target", "resolveTarget", "injectStyles", "VERSIONS_CSS", "init", "config", "core", "createCore", "createVersions", "ClearLaunch", "index_default"]
7
7
  }
@@ -1,4 +1,4 @@
1
- "use strict";var ClearLaunch=(()=>{var l=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!b.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(n=w(t,o))||n.enumerable});return e};var h=e=>y(l({},"__esModule",{value:!0}),e);var T={};x(T,{ClearLaunch:()=>v,default:()=>R,init:()=>f});var k="https://api.clearlaunch.com";function a(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function d(e,t){if(document.getElementById(e))return;let r=document.createElement("style");r.id=e,r.textContent=t,document.head.appendChild(r)}function p(e){return typeof e=="string"?document.querySelector(e):e}function g(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let r=`${(e.apiUrl||k).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,n=null;async function o(c){let s=await fetch(`${r}/${c.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${c} failed (${s.status})`);return s.json()}function _(){return n||(n=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),n}return{projectKey:e.projectKey,sdkBase:r,get:o,config:_}}var u=`
1
+ "use strict";var ClearLaunch=(()=>{var l=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var b=Object.prototype.hasOwnProperty;var x=(e,t)=>{for(var r in t)l(e,r,{get:t[r],enumerable:!0})},y=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of C(t))!b.call(e,o)&&o!==r&&l(e,o,{get:()=>t[o],enumerable:!(n=w(t,o))||n.enumerable});return e};var h=e=>y(l({},"__esModule",{value:!0}),e);var T={};x(T,{ClearLaunch:()=>v,default:()=>R,init:()=>f});var k="https://api.clearlaunch.ai";function a(e){let t=document.createElement("div");return t.textContent=e,t.innerHTML}function d(e,t){if(document.getElementById(e))return;let r=document.createElement("style");r.id=e,r.textContent=t,document.head.appendChild(r)}function p(e){return typeof e=="string"?document.querySelector(e):e}function g(e){if(!(e!=null&&e.projectKey))throw new Error("ClearLaunch: projectKey is required");let r=`${(e.apiUrl||k).replace(/\/$/,"")}/api/v1/public/sdk/${encodeURIComponent(e.projectKey)}`,n=null;async function o(c){let s=await fetch(`${r}/${c.replace(/^\//,"")}`);if(!s.ok)throw new Error(`ClearLaunch: request to ${c} failed (${s.status})`);return s.json()}function _(){return n||(n=o("config").catch(()=>({projectName:"",widgets:{versions:!0}}))),n}return{projectKey:e.projectKey,sdkBase:r,get:o,config:_}}var u=`
2
2
  .cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;
3
3
  font-family: var(--cl-vw-font, inherit); color: #1f2430; }
4
4
  .cl-vw * { box-sizing: border-box; }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../../clearsdk-core/src/index.ts", "../../clearsdk-versions/src/styles.ts", "../../clearsdk-versions/src/index.ts"],
4
- "sourcesContent": ["/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n", "/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.com';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["/**\n * @clearlaunch/sdk \u2014 the all-in-one bundle for the CDN script tag.\n *\n * This is the batteries-included entry: one <script> gives you\n * window.ClearLaunch.init({ projectKey }) with every widget attached. Under the\n * hood it composes the modular packages (@clearlaunch/core + the widget\n * packages), so apps that prefer smaller bundles can install those directly:\n *\n * import { createCore } from '@clearlaunch/core';\n * import { createVersions } from '@clearlaunch/versions';\n * const core = createCore({ projectKey });\n * const versions = createVersions(core);\n */\nimport { createCore, type ClearCoreConfig } from '@clearlaunch/core';\nimport { createVersions, type VersionsWidget, type PublicRelease } from '@clearlaunch/versions';\n\nexport type { ClearCoreConfig, VersionsWidget, PublicRelease };\n\nexport interface ClearLaunchClient {\n readonly projectKey: string;\n readonly versions: VersionsWidget;\n}\n\nexport function init(config: ClearCoreConfig): ClearLaunchClient {\n const core = createCore(config);\n return {\n projectKey: core.projectKey,\n versions: createVersions(core),\n };\n}\n\nexport const ClearLaunch = { init };\nexport default ClearLaunch;\n", "/**\n * @clearlaunch/core \u2014 the shared foundation every ClearLaunch widget builds on.\n *\n * One public project key (`pk_\u2026`) identifies the project in the browser. Core\n * owns the API base, the fetch client, the remote SDK config (which widgets are\n * enabled + theme), and a small style-injection helper. Widget packages\n * (@clearlaunch/versions, /guides, /feedback) receive a ClearCoreClient and\n * attach themselves to it.\n */\n\nexport interface ClearCoreConfig {\n /** The project's public key (pk_\u2026). Safe to ship in the browser. */\n projectKey: string;\n /** Override the API base. Defaults to the hosted ClearLaunch API. */\n apiUrl?: string;\n}\n\nexport interface SdkTheme {\n primaryColor?: string;\n fontFamily?: string;\n borderRadius?: string;\n logoUrl?: string;\n}\n\nexport interface SdkRemoteConfig {\n projectName: string;\n widgets: { versions?: boolean; guides?: boolean; feedback?: boolean };\n theme?: SdkTheme;\n}\n\nexport interface ClearCoreClient {\n readonly projectKey: string;\n /** Absolute base for this project's public SDK routes:\n * `${apiUrl}/api/v1/public/sdk/${projectKey}` */\n readonly sdkBase: string;\n /** GET a JSON path relative to sdkBase (e.g. 'releases', 'config'). */\n get<T = unknown>(path: string): Promise<T>;\n /** Cached remote config (widgets enabled + theme). Fetched once. */\n config(): Promise<SdkRemoteConfig>;\n}\n\nconst DEFAULT_API_URL = 'https://api.clearlaunch.ai';\n\n/** Escape untrusted text before inserting into innerHTML. Shared by widgets. */\nexport function esc(s: string): string {\n const d = document.createElement('div');\n d.textContent = s;\n return d.innerHTML;\n}\n\n/** Inject a stylesheet once, keyed by id. Shared by widgets. */\nexport function injectStyles(id: string, css: string): void {\n if (document.getElementById(id)) return;\n const style = document.createElement('style');\n style.id = id;\n style.textContent = css;\n document.head.appendChild(style);\n}\n\n/** Resolve a selector-or-element mount target. */\nexport function resolveTarget(target: string | HTMLElement): HTMLElement | null {\n return typeof target === 'string' ? document.querySelector<HTMLElement>(target) : target;\n}\n\nexport function createCore(config: ClearCoreConfig): ClearCoreClient {\n if (!config?.projectKey) throw new Error('ClearLaunch: projectKey is required');\n const apiUrl = (config.apiUrl || DEFAULT_API_URL).replace(/\\/$/, '');\n const sdkBase = `${apiUrl}/api/v1/public/sdk/${encodeURIComponent(config.projectKey)}`;\n\n let configPromise: Promise<SdkRemoteConfig> | null = null;\n\n async function get<T>(path: string): Promise<T> {\n const res = await fetch(`${sdkBase}/${path.replace(/^\\//, '')}`);\n if (!res.ok) throw new Error(`ClearLaunch: request to ${path} failed (${res.status})`);\n return res.json() as Promise<T>;\n }\n\n function configOnce(): Promise<SdkRemoteConfig> {\n if (!configPromise) {\n configPromise = get<SdkRemoteConfig>('config').catch(() => ({\n projectName: '',\n widgets: { versions: true },\n } as SdkRemoteConfig));\n }\n return configPromise;\n }\n\n return {\n projectKey: config.projectKey,\n sdkBase,\n get,\n config: configOnce,\n };\n}\n", "/** Self-contained widget CSS, namespaced under .cl-vw so it never leaks into\n * or inherits from the host page. Theme values are injected via CSS vars. */\nexport const VERSIONS_CSS = `\n.cl-vw { --cl-vw-accent: #6366f1; --cl-vw-radius: 12px;\n font-family: var(--cl-vw-font, inherit); color: #1f2430; }\n.cl-vw * { box-sizing: border-box; }\n.cl-vw__empty { padding: 24px; text-align: center; color: #8891a5; font-size: 14px; }\n.cl-vw__release { padding: 16px 0; border-bottom: 1px solid #eceef3; }\n.cl-vw__release:last-child { border-bottom: 0; }\n.cl-vw__head { display: flex; align-items: baseline; gap: 10px; margin-bottom: 8px; }\n.cl-vw__ver {\n font-weight: 700; font-size: 15px; color: #fff; background: var(--cl-vw-accent);\n padding: 2px 9px; border-radius: 999px; letter-spacing: -0.01em;\n}\n.cl-vw__date { font-size: 12px; color: #8891a5; }\n.cl-vw__group { margin: 10px 0 0; }\n.cl-vw__group-label {\n font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;\n font-weight: 700; color: #6b7280; margin-bottom: 4px;\n}\n.cl-vw__group--breaking .cl-vw__group-label { color: #dc2626; }\n.cl-vw__list { margin: 0; padding-left: 18px; }\n.cl-vw__list li { font-size: 13px; line-height: 1.55; color: #374151; margin: 2px 0; }\n@media (prefers-color-scheme: dark) {\n .cl-vw { color: #e5e7eb; }\n .cl-vw__release { border-bottom-color: #2a2f3a; }\n .cl-vw__date, .cl-vw__group-label { color: #9aa3b2; }\n .cl-vw__list li { color: #cbd2de; }\n}\n`;\n", "import type { ClearCoreClient } from '@clearlaunch/core';\nimport { esc, injectStyles, resolveTarget } from '@clearlaunch/core';\nimport { VERSIONS_CSS } from './styles';\n\nexport interface ReleaseNotesPublic {\n features: string[];\n enhancements: string[];\n bugFixes: string[];\n breaking: string[];\n}\n\nexport interface PublicRelease {\n version: string;\n publishedAt?: string;\n notes: ReleaseNotesPublic;\n html?: string;\n}\n\nexport interface VersionsWidget {\n /** Render the version-history panel into a container (selector or element). */\n mount(target: string | HTMLElement): Promise<void>;\n /** Fetch releases without rendering (for a custom UI). */\n list(): Promise<PublicRelease[]>;\n}\n\nfunction fmtDate(iso?: string): string {\n if (!iso) return '';\n const d = new Date(iso);\n return isNaN(d.getTime()) ? '' : d.toLocaleDateString(undefined, { year: 'numeric', month: 'short', day: 'numeric' });\n}\n\nfunction group(label: string, items: string[], modifier = ''): string {\n if (!items?.length) return '';\n const li = items.map(i => `<li>${esc(i)}</li>`).join('');\n return `<div class=\"cl-vw__group ${modifier}\"><div class=\"cl-vw__group-label\">${label}</div><ul class=\"cl-vw__list\">${li}</ul></div>`;\n}\n\nfunction render(el: HTMLElement, releases: PublicRelease[]): void {\n if (!releases.length) {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">No releases yet.</div></div>`;\n return;\n }\n const body = releases.map(r => `\n <div class=\"cl-vw__release\">\n <div class=\"cl-vw__head\">\n <span class=\"cl-vw__ver\">v${esc(r.version)}</span>\n <span class=\"cl-vw__date\">${fmtDate(r.publishedAt)}</span>\n </div>\n ${group('Breaking changes', r.notes.breaking, 'cl-vw__group--breaking')}\n ${group('New features', r.notes.features)}\n ${group('Enhancements', r.notes.enhancements)}\n ${group('Fixes', r.notes.bugFixes)}\n </div>`).join('');\n el.innerHTML = `<div class=\"cl-vw\">${body}</div>`;\n}\n\n/** Attach a versions widget to a core client. */\nexport function createVersions(core: ClearCoreClient): VersionsWidget {\n async function list(): Promise<PublicRelease[]> {\n const data = await core.get<{ releases: PublicRelease[] }>('releases');\n return data.releases || [];\n }\n return {\n list,\n async mount(target) {\n const el = resolveTarget(target);\n if (!el) throw new Error(`ClearLaunch versions: mount target not found: ${String(target)}`);\n injectStyles('cl-vw-styles', VERSIONS_CSS);\n try {\n render(el, await list());\n } catch {\n el.innerHTML = `<div class=\"cl-vw\"><div class=\"cl-vw__empty\">Couldn't load release notes.</div></div>`;\n }\n },\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["index_exports", "__export", "ClearLaunch", "index_default", "init", "DEFAULT_API_URL", "esc", "s", "d", "injectStyles", "id", "css", "style", "resolveTarget", "target", "createCore", "config", "sdkBase", "configPromise", "get", "path", "res", "configOnce", "VERSIONS_CSS", "fmtDate", "iso", "d", "group", "label", "items", "modifier", "li", "i", "esc", "render", "el", "releases", "body", "r", "createVersions", "core", "list", "target", "resolveTarget", "injectStyles", "VERSIONS_CSS", "init", "config", "core", "createCore", "createVersions", "ClearLaunch", "index_default"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@clearlaunch/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "ClearLaunch all-in-one SDK bundle — version history, guides, feedback from one project key. Composes @clearlaunch/core + widgets.",
5
5
  "main": "dist/clearlaunch.cjs.js",
6
6
  "module": "dist/clearlaunch.esm.js",
@@ -15,5 +15,10 @@
15
15
  },
16
16
  "publishConfig": {
17
17
  "access": "public"
18
+ },
19
+ "repository": {
20
+ "type": "git",
21
+ "url": "git+https://github.com/brms2021/clearlaunch-platform.git",
22
+ "directory": "packages/clearsdk"
18
23
  }
19
24
  }