@usepagelet/runtime 0.1.0 → 0.1.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.
- package/README.md +1 -1
- package/dist/v1/capabilities.md +1 -1
- package/dist/v1/pagelet.js +1 -1
- package/dist/v1/pagelet.js.map +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -17,7 +17,7 @@ Served from `cdn.pagelet.link` (primary) and mirrored on jsDelivr:
|
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
- **Conventions & capabilities:** <https://cdn.pagelet.link/v1/capabilities.md>
|
|
20
|
-
- **Project:** <https://pagelet.link> · <https://github.com/
|
|
20
|
+
- **Project:** <https://pagelet.link> · <https://github.com/usepagelet/pagelet>
|
|
21
21
|
- **Licence:** Apache-2.0
|
|
22
22
|
|
|
23
23
|
This package ships prebuilt static assets (`dist/v1/`) intended to be loaded as a script in
|
package/dist/v1/capabilities.md
CHANGED
package/dist/v1/pagelet.js
CHANGED
|
@@ -124,5 +124,5 @@ body{
|
|
|
124
124
|
<button data-act="theme" title="Theme" aria-label="Toggle theme">${S[f()]}</button>
|
|
125
125
|
<button data-act="print" title="Print / save as PDF" aria-label="Print">⎙</button>
|
|
126
126
|
<button data-act="png" title="Save as PNG" aria-label="Save as PNG">⤓</button>
|
|
127
|
-
<button data-act="copy" title="Copy as Markdown" aria-label="Copy as Markdown">⧉</button>`,t.addEventListener("click",r=>{let o=r.target.closest("button")?.dataset.act;o==="theme"?H(t):o==="print"?window.print():o==="png"?e?.():o==="copy"&&I(t)}),document.body.appendChild(t)}function H(e){let t=b[(b.indexOf(f())+1)%b.length];c(t);let r=e.querySelector('[data-act="theme"]');r&&(r.textContent=S[t])}function I(e){let t=u(),r=e.querySelector('[data-act="copy"]'),o=()=>{if(!r)return;let n=r.textContent;r.textContent="✓",setTimeout(()=>r.textContent=n,1200)};navigator.clipboard?.writeText(t).then(o,o)}function L(){try{z()}catch(e){d("progress",e)}try{B()}catch(e){d("toc",e)}}function z(){if(document.getElementById("pagelet-progress"))return;let e=document.createElement("div");e.id="pagelet-progress",document.body.appendChild(e);let t=()=>{let r=document.documentElement,o=r.scrollHeight-r.clientHeight;e.style.width=(o>0?r.scrollTop/o*100:0)+"%"};document.addEventListener("scroll",t,{passive:!0}),t()}function B(){if(document.getElementById("pagelet-toc"))return;let e=document.querySelector(".pagelet-prose");if(!e)return;let t=Array.from(e.querySelectorAll("h2, h3"));if(t.length<3)return;let r=document.createElement("nav");r.id="pagelet-toc";let o=document.createElement("ul"),n=new Map;t.forEach((a,i)=>{a.id||(a.id=`pl-h-${i}`);let s=document.createElement("li");s.className=`lvl-${a.tagName.toLowerCase()}`;let p=document.createElement("a");p.href=`#${a.id}`,p.textContent=a.textContent||"",s.appendChild(p),o.appendChild(s),n.set(a.id,p)}),r.appendChild(o),document.body.appendChild(r);let l=new IntersectionObserver(a=>{for(let i of a)i.isIntersecting&&(r.querySelectorAll("a.active").forEach(s=>s.classList.remove("active")),n.get(i.target.id)?.classList.add("active"))},{rootMargin:"0px 0px -75% 0px"});t.forEach(a=>l.observe(a))}var q="0.1.
|
|
127
|
+
<button data-act="copy" title="Copy as Markdown" aria-label="Copy as Markdown">⧉</button>`,t.addEventListener("click",r=>{let o=r.target.closest("button")?.dataset.act;o==="theme"?H(t):o==="print"?window.print():o==="png"?e?.():o==="copy"&&I(t)}),document.body.appendChild(t)}function H(e){let t=b[(b.indexOf(f())+1)%b.length];c(t);let r=e.querySelector('[data-act="theme"]');r&&(r.textContent=S[t])}function I(e){let t=u(),r=e.querySelector('[data-act="copy"]'),o=()=>{if(!r)return;let n=r.textContent;r.textContent="✓",setTimeout(()=>r.textContent=n,1200)};navigator.clipboard?.writeText(t).then(o,o)}function L(){try{z()}catch(e){d("progress",e)}try{B()}catch(e){d("toc",e)}}function z(){if(document.getElementById("pagelet-progress"))return;let e=document.createElement("div");e.id="pagelet-progress",document.body.appendChild(e);let t=()=>{let r=document.documentElement,o=r.scrollHeight-r.clientHeight;e.style.width=(o>0?r.scrollTop/o*100:0)+"%"};document.addEventListener("scroll",t,{passive:!0}),t()}function B(){if(document.getElementById("pagelet-toc"))return;let e=document.querySelector(".pagelet-prose");if(!e)return;let t=Array.from(e.querySelectorAll("h2, h3"));if(t.length<3)return;let r=document.createElement("nav");r.id="pagelet-toc";let o=document.createElement("ul"),n=new Map;t.forEach((a,i)=>{a.id||(a.id=`pl-h-${i}`);let s=document.createElement("li");s.className=`lvl-${a.tagName.toLowerCase()}`;let p=document.createElement("a");p.href=`#${a.id}`,p.textContent=a.textContent||"",s.appendChild(p),o.appendChild(s),n.set(a.id,p)}),r.appendChild(o),document.body.appendChild(r);let l=new IntersectionObserver(a=>{for(let i of a)i.isIntersecting&&(r.querySelectorAll("a.active").forEach(s=>s.classList.remove("active")),n.get(i.target.id)?.classList.add("active"))},{rootMargin:"0px 0px -75% 0px"});t.forEach(a=>l.observe(a))}var q="0.1.1",T="pagelet-base-css",A=j();function j(){let e=document.currentScript?.src;try{return new URL(".",e||location.href).href}catch{return"./"}}function P(e){return import(new URL(`modules/${e}.js`,A).href)}function R(){if(document.getElementById(T))return;let e=document.createElement("style");e.id=T,e.textContent=h,document.head.appendChild(e)}function O(e){let t=e.textContent||"";return t.includes("$$")||t.includes("\\(")||t.includes("\\[")}async function m(e){try{await(await P(e)).enhance()}catch(t){d(`${e}-load`,t)}}async function $(){if(window.__pagelet__)return;window.__pagelet__={version:q,base:A,exportMarkdown:u,setTheme:c},R(),E();try{M()}catch(r){d("theme",r)}document.querySelector('script[type="text/markdown"][data-pagelet="markdown"]')&&await m("markdown");let e=document.querySelector(".pagelet-prose")||document.body,t=[];document.querySelector("pre.mermaid, .mermaid")&&t.push(m("mermaid")),document.querySelector('pre > code[class*="language-"]:not(.language-mermaid)')&&t.push(m("code")),O(e)&&t.push(m("math")),document.querySelector('script[type="application/json"][data-pagelet="chart"]')&&t.push(m("charts")),await Promise.all(t),L(),C(()=>{P("png").then(r=>r.exportPng())}),document.documentElement.classList.add("pagelet-ready"),document.getElementById("pagelet-offline")?.remove()}document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>{$()}):$();})();
|
|
128
128
|
//# sourceMappingURL=pagelet.js.map
|
package/dist/v1/pagelet.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../src/styles.ts", "../../src/util.ts", "../../src/theme.ts", "../../src/export.ts", "../../src/toolbar.ts", "../../src/toc.ts", "../../src/index.ts"],
|
|
4
|
-
"sourcesContent": ["// Base CSS injected by the runtime: shadcn-named theme variables (D12), tasteful\n// prose defaults (anti-slop), the floating toolbar, and the offline banner.\n// Variable names mirror shadcn; values are direct colors referenced via var() —\n// the current shadcn/Tailwind-4 convention.\n\nexport const BASE_CSS = `\n:root{\n --background:#ffffff; --foreground:#0a0a0a;\n --card:#ffffff; --card-foreground:#0a0a0a;\n --primary:#4f46e5; --primary-foreground:#ffffff;\n --secondary:#f1f5f9; --secondary-foreground:#0f172a;\n --muted:#f1f5f9; --muted-foreground:#64748b;\n --accent:#eef2ff; --accent-foreground:#312e81;\n --border:#e5e7eb; --ring:#4f46e5;\n --radius:0.5rem;\n --pagelet-sans:ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n --pagelet-mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;\n}\n[data-theme=\"dark\"]{\n --background:#0a0a0a; --foreground:#fafafa;\n --card:#111113; --card-foreground:#fafafa;\n --primary:#818cf8; --primary-foreground:#0a0a0a;\n --secondary:#1e293b; --secondary-foreground:#f1f5f9;\n --muted:#18181b; --muted-foreground:#a1a1aa;\n --accent:#1e1b4b; --accent-foreground:#e0e7ff;\n --border:#27272a; --ring:#818cf8;\n}\nhtml.pagelet-ready{color-scheme:light dark}\nbody{\n margin:0; background:var(--background); color:var(--foreground);\n font-family:var(--pagelet-sans);\n -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;\n}\n.pagelet-prose{\n max-width:46rem; margin:0 auto; padding:2.5rem 1.25rem 5rem;\n line-height:1.7; font-size:1.0625rem;\n}\n.pagelet-prose h1,.pagelet-prose h2,.pagelet-prose h3{\n line-height:1.25; font-weight:650; letter-spacing:-0.01em; margin:2em 0 0.6em;\n}\n.pagelet-prose h1{font-size:2rem; margin-top:0}\n.pagelet-prose h2{font-size:1.5rem; padding-bottom:.3em; border-bottom:1px solid var(--border)}\n.pagelet-prose h3{font-size:1.2rem}\n.pagelet-prose p,.pagelet-prose ul,.pagelet-prose ol{margin:0 0 1.1em}\n.pagelet-prose a{color:var(--primary); text-underline-offset:2px}\n.pagelet-prose code{\n font-family:var(--pagelet-mono); font-size:.875em;\n background:var(--muted); padding:.15em .4em; border-radius:calc(var(--radius) - 2px);\n}\n.pagelet-prose pre{\n background:var(--muted); color:var(--foreground);\n padding:1rem 1.1rem; border-radius:var(--radius); overflow:auto;\n border:1px solid var(--border); margin:0 0 1.2em;\n}\n.pagelet-prose pre code{background:none; padding:0}\n.pagelet-prose blockquote{\n margin:0 0 1.2em; padding:.2em 1rem; border-left:3px solid var(--border);\n color:var(--muted-foreground);\n}\n.pagelet-prose table{border-collapse:collapse; width:100%; margin:0 0 1.2em; font-size:.95em}\n.pagelet-prose th,.pagelet-prose td{border:1px solid var(--border); padding:.5em .75em; text-align:left}\n.pagelet-prose th{background:var(--muted)}\n.pagelet-prose img{max-width:100%; border-radius:var(--radius)}\n.pagelet-prose hr{border:none; border-top:1px solid var(--border); margin:2em 0}\n\n#pagelet-toolbar{\n position:fixed; bottom:1rem; right:1rem; z-index:9999;\n display:flex; gap:.25rem; padding:.3rem;\n background:var(--card); border:1px solid var(--border); border-radius:calc(var(--radius) + 4px);\n box-shadow:0 4px 16px rgba(0,0,0,.12);\n}\n#pagelet-toolbar button{\n all:unset; cursor:pointer; width:2rem; height:2rem; line-height:2rem; text-align:center;\n border-radius:var(--radius); color:var(--foreground); font-size:1rem;\n}\n#pagelet-toolbar button:hover{background:var(--accent); color:var(--accent-foreground)}\n\n#pagelet-offline{\n max-width:46rem; margin:1.5rem auto; padding:.85rem 1.1rem;\n font-family:var(--pagelet-sans); font-size:.95rem;\n color:var(--muted-foreground); background:var(--muted);\n border:1px solid var(--border); border-radius:var(--radius);\n}\n\n#pagelet-progress{\n position:fixed; top:0; left:0; height:3px; width:0;\n background:var(--primary); z-index:9998; transition:width .1s linear;\n}\n#pagelet-toc{\n position:fixed; top:0; left:0; bottom:0; width:15rem; padding:2.5rem 1rem; overflow:auto;\n font-size:.85rem; display:none;\n}\n#pagelet-toc ul{list-style:none; margin:0; padding:0; border-left:1px solid var(--border)}\n#pagelet-toc li{margin:0}\n#pagelet-toc li.lvl-h3 a{padding-left:1.6rem; font-size:.95em}\n#pagelet-toc a{\n display:block; padding:.25rem .8rem; color:var(--muted-foreground);\n text-decoration:none; border-left:2px solid transparent; margin-left:-1px;\n}\n#pagelet-toc a:hover{color:var(--foreground)}\n#pagelet-toc a.active{color:var(--primary); border-left-color:var(--primary)}\n@media (min-width:1180px){ #pagelet-toc{display:block} }\n\n.pagelet-chart{max-width:46rem; margin:1.5rem auto; padding:0 1.25rem}\n.pagelet-mermaid{\n position:relative; max-width:46rem; margin:1.5rem auto; padding:.5rem;\n border:1px solid var(--border); border-radius:var(--radius); background:var(--card);\n}\n.pagelet-mermaid svg{display:block; margin:0 auto}\n.pagelet-mermaid:fullscreen{background:var(--background); display:flex; align-items:center; justify-content:center}\n.pagelet-mermaid-full{\n position:absolute; top:.5rem; right:.5rem; z-index:2;\n all:unset; cursor:pointer; width:1.75rem; height:1.75rem; line-height:1.75rem; text-align:center;\n color:var(--muted-foreground); background:var(--background); border:1px solid var(--border);\n border-radius:calc(var(--radius) - 2px);\n}\n.pagelet-mermaid-full:hover{color:var(--foreground)}\n\n@media print{\n #pagelet-toolbar,#pagelet-progress,#pagelet-toc,.pagelet-copy,.pagelet-mermaid-full{display:none !important}\n .pagelet-prose{max-width:none}\n}\n`\n", "// Small shared helpers for the runtime.\n\nconst PREFIX = '[pagelet]'\n\nexport function warn(scope: string, err: unknown): void {\n console.warn(`${PREFIX} ${scope}:`, err)\n}\n\n/** Strip the common leading indentation from a block (markdown is indent-sensitive). */\nexport function dedent(text: string): string {\n const lines = text.replace(/^\\n/, '').replace(/\\s+$/, '').split('\\n')\n let min = Infinity\n for (const line of lines) {\n if (!line.trim()) continue\n const indent = line.match(/^[ \\t]*/)?.[0].length ?? 0\n if (indent < min) min = indent\n }\n if (!isFinite(min) || min === 0) return lines.join('\\n')\n return lines.map((l) => l.slice(min)).join('\\n')\n}\n\n/** camelCase / \"primaryForeground\" -> \"primary-foreground\" for CSS var names. */\nexport function kebab(s: string): string {\n return s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/_/g, '-').toLowerCase()\n}\n\n/** localStorage may be unavailable (sandboxed iframes, Claude.ai Artifacts) — degrade silently. */\nexport function safeGet(key: string): string | null {\n try {\n return window.localStorage.getItem(key)\n } catch {\n return null\n }\n}\n\nexport function safeSet(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* no-op */\n }\n}\n", "// Color mode (light/dark/auto) + compiling a shadcn-style theme JSON block to CSS vars (D12).\nimport { kebab, safeGet, safeSet, warn } from './util'\n\nexport type Mode = 'light' | 'dark' | 'auto'\n\nconst STYLE_ID = 'pagelet-theme-vars'\nconst STORE_KEY = 'pagelet-mode'\n\n/** Resolve and apply the initial color mode. Respects an explicit html[data-theme]. */\nexport function initMode(): void {\n const html = document.documentElement\n const explicit = html.getAttribute('data-theme')\n if (explicit === 'light' || explicit === 'dark') {\n html.setAttribute('data-pagelet-mode', explicit)\n return\n }\n setMode((safeGet(STORE_KEY) as Mode) ?? 'auto')\n}\n\nexport function getMode(): Mode {\n return (document.documentElement.getAttribute('data-pagelet-mode') as Mode) ?? 'auto'\n}\n\nexport function setMode(mode: Mode): void {\n const resolved =\n mode === 'auto'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : mode\n const html = document.documentElement\n html.setAttribute('data-theme', resolved)\n html.setAttribute('data-pagelet-mode', mode)\n safeSet(STORE_KEY, mode)\n}\n\n/** Compile a `<script data-pagelet=\"theme\">{json}</script>` block to :root / [data-theme=dark] vars. */\nexport function applyTheme(): void {\n const el = document.querySelector('script[data-pagelet=\"theme\"]')\n if (!el) return\n let theme: { colors?: Record<string, string>; dark?: Record<string, string>; radius?: string }\n try {\n theme = JSON.parse(el.textContent || '{}')\n } catch (e) {\n warn('theme', e)\n return\n }\n const root: string[] = []\n for (const [k, v] of Object.entries(theme.colors ?? {})) root.push(`--${kebab(k)}:${v};`)\n if (theme.radius) root.push(`--radius:${theme.radius};`)\n const dark: string[] = []\n for (const [k, v] of Object.entries(theme.dark ?? {})) dark.push(`--${kebab(k)}:${v};`)\n\n const css =\n (root.length ? `:root{${root.join('')}}` : '') +\n (dark.length ? `[data-theme=\"dark\"]{${dark.join('')}}` : '')\n if (!css) return\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null\n if (!style) {\n style = document.createElement('style')\n style.id = STYLE_ID\n document.head.appendChild(style)\n }\n style.textContent = css\n}\n", "// Round-trip export: reconstruct the Markdown source from the retained source blocks\n// so a human's view can be copied back to the agent as a prompt.\nimport { dedent } from './util'\n\nexport function collectMarkdown(): string {\n const blocks = document.querySelectorAll<HTMLScriptElement>(\n 'script[type=\"text/markdown\"][data-pagelet=\"markdown\"]',\n )\n return Array.from(blocks)\n .map((b) => dedent(b.textContent || ''))\n .join('\\n\\n')\n .trim()\n}\n", "// The standard floating toolbar: theme toggle, print/PDF, copy-as-Markdown (round-trip).\nimport { getMode, setMode, type Mode } from './theme'\nimport { collectMarkdown } from './export'\n\nconst CYCLE: Mode[] = ['auto', 'light', 'dark']\nconst GLYPH: Record<Mode, string> = { auto: '◐', light: '☀', dark: '☾' }\n\nexport function mountToolbar(onPng?: () => void): void {\n if (document.body.getAttribute('data-pagelet-toolbar') === 'off') return\n if (document.getElementById('pagelet-toolbar')) return\n\n const bar = document.createElement('div')\n bar.id = 'pagelet-toolbar'\n bar.innerHTML = `\n <button data-act=\"theme\" title=\"Theme\" aria-label=\"Toggle theme\">${GLYPH[getMode()]}</button>\n <button data-act=\"print\" title=\"Print / save as PDF\" aria-label=\"Print\">⎙</button>\n <button data-act=\"png\" title=\"Save as PNG\" aria-label=\"Save as PNG\">⤓</button>\n <button data-act=\"copy\" title=\"Copy as Markdown\" aria-label=\"Copy as Markdown\">⧉</button>`\n\n bar.addEventListener('click', (e) => {\n const act = (e.target as HTMLElement).closest('button')?.dataset.act\n if (act === 'theme') cycleTheme(bar)\n else if (act === 'print') window.print()\n else if (act === 'png') onPng?.()\n else if (act === 'copy') copyMarkdown(bar)\n })\n\n document.body.appendChild(bar)\n}\n\nfunction cycleTheme(bar: HTMLElement): void {\n const next = CYCLE[(CYCLE.indexOf(getMode()) + 1) % CYCLE.length]!\n setMode(next)\n const btn = bar.querySelector<HTMLButtonElement>('[data-act=\"theme\"]')\n if (btn) btn.textContent = GLYPH[next]\n}\n\nfunction copyMarkdown(bar: HTMLElement): void {\n const md = collectMarkdown()\n const btn = bar.querySelector<HTMLButtonElement>('[data-act=\"copy\"]')\n const done = () => {\n if (!btn) return\n const prev = btn.textContent\n btn.textContent = '✓'\n setTimeout(() => (btn.textContent = prev), 1200)\n }\n navigator.clipboard?.writeText(md).then(done, done)\n}\n", "// Core chrome (no external deps): a scroll-progress bar + a sticky TOC with scroll-spy.\nimport { warn } from './util'\n\nexport function mountChrome(): void {\n try {\n progressBar()\n } catch (e) {\n warn('progress', e)\n }\n try {\n buildToc()\n } catch (e) {\n warn('toc', e)\n }\n}\n\nfunction progressBar(): void {\n if (document.getElementById('pagelet-progress')) return\n const bar = document.createElement('div')\n bar.id = 'pagelet-progress'\n document.body.appendChild(bar)\n const update = (): void => {\n const h = document.documentElement\n const max = h.scrollHeight - h.clientHeight\n bar.style.width = (max > 0 ? (h.scrollTop / max) * 100 : 0) + '%'\n }\n document.addEventListener('scroll', update, { passive: true })\n update()\n}\n\nfunction buildToc(): void {\n if (document.getElementById('pagelet-toc')) return\n const prose = document.querySelector('.pagelet-prose')\n if (!prose) return\n const heads = Array.from(prose.querySelectorAll<HTMLElement>('h2, h3'))\n if (heads.length < 3) return\n\n const nav = document.createElement('nav')\n nav.id = 'pagelet-toc'\n const list = document.createElement('ul')\n const links = new Map<string, HTMLElement>()\n\n heads.forEach((h, i) => {\n if (!h.id) h.id = `pl-h-${i}`\n const li = document.createElement('li')\n li.className = `lvl-${h.tagName.toLowerCase()}`\n const a = document.createElement('a')\n a.href = `#${h.id}`\n a.textContent = h.textContent || ''\n li.appendChild(a)\n list.appendChild(li)\n links.set(h.id, a)\n })\n nav.appendChild(list)\n document.body.appendChild(nav)\n\n const obs = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue\n nav.querySelectorAll('a.active').forEach((x) => x.classList.remove('active'))\n links.get((e.target as HTMLElement).id)?.classList.add('active')\n }\n },\n { rootMargin: '0px 0px -75% 0px' },\n )\n heads.forEach((h) => obs.observe(h))\n}\n", "// The Pagelet runtime loader (the one tag). Classic IIFE: boots core, detects which\n// capabilities the page uses, and lazy-imports only those module bundles at runtime.\n// Online-to-render (D14): the offline banner shows until this boots successfully.\nimport { BASE_CSS } from './styles'\nimport { initMode, applyTheme, setMode } from './theme'\nimport { mountToolbar } from './toolbar'\nimport { mountChrome } from './toc'\nimport { collectMarkdown } from './export'\nimport { warn } from './util'\n\nconst VERSION = '0.1.0'\nconst STYLE_ID = 'pagelet-base-css'\n\n// Capture the loader's own base URL synchronously (currentScript is null inside later callbacks).\nconst BASE = resolveBase()\n\ninterface PageletApi {\n version: string\n base: string\n exportMarkdown(): string\n setTheme(mode: 'light' | 'dark' | 'auto'): void\n}\ndeclare global {\n interface Window {\n __pagelet__?: PageletApi\n }\n}\n\nfunction resolveBase(): string {\n const src = (document.currentScript as HTMLScriptElement | null)?.src\n try {\n return new URL('.', src || location.href).href\n } catch {\n return './'\n }\n}\n\n/** Lazy-import a capability module by name; runtime URL keeps esbuild from bundling it. */\nfunction load(name: string): Promise<Record<string, (...a: never[]) => unknown>> {\n const url = new URL(`modules/${name}.js`, BASE).href\n return import(/* @vite-ignore */ url) as Promise<Record<string, (...a: never[]) => unknown>>\n}\n\nfunction injectBaseCss(): void {\n if (document.getElementById(STYLE_ID)) return\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = BASE_CSS\n document.head.appendChild(style)\n}\n\nfunction hasMath(scope: Element): boolean {\n const t = scope.textContent || ''\n return t.includes('$$') || t.includes('\\\\(') || t.includes('\\\\[')\n}\n\nasync function run(name: string): Promise<void> {\n try {\n const mod = await load(name)\n await (mod.enhance as () => Promise<void>)()\n } catch (e) {\n warn(`${name}-load`, e)\n }\n}\n\nasync function boot(): Promise<void> {\n if (window.__pagelet__) return\n window.__pagelet__ = {\n version: VERSION,\n base: BASE,\n exportMarkdown: collectMarkdown,\n setTheme: setMode,\n }\n\n injectBaseCss()\n initMode()\n try {\n applyTheme()\n } catch (e) {\n warn('theme', e)\n }\n\n // 1. Markdown first (produces .pagelet-prose; normalises ```mermaid blocks).\n if (document.querySelector('script[type=\"text/markdown\"][data-pagelet=\"markdown\"]')) {\n await run('markdown')\n }\n\n // 2. Detect what the (now-rendered) page uses; load those modules in parallel.\n const scope = (document.querySelector('.pagelet-prose') as Element) || document.body\n const jobs: Promise<void>[] = []\n if (document.querySelector('pre.mermaid, .mermaid')) jobs.push(run('mermaid'))\n if (document.querySelector('pre > code[class*=\"language-\"]:not(.language-mermaid)')) jobs.push(run('code'))\n if (hasMath(scope)) jobs.push(run('math'))\n if (document.querySelector('script[type=\"application/json\"][data-pagelet=\"chart\"]')) jobs.push(run('charts'))\n await Promise.all(jobs)\n\n // 3. Chrome + toolbar (PNG export is itself lazy-loaded).\n mountChrome()\n mountToolbar(() => {\n void load('png').then((m) => (m.exportPng as () => Promise<void>)())\n })\n\n document.documentElement.classList.add('pagelet-ready')\n document.getElementById('pagelet-offline')?.remove()\n}\n\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => void boot())\n} else {\n void boot()\n}\n"],
|
|
4
|
+
"sourcesContent": ["// Base CSS injected by the runtime: shadcn-named theme variables (D12), tasteful\n// prose defaults (anti-slop), the floating toolbar, and the offline banner.\n// Variable names mirror shadcn; values are direct colors referenced via var() —\n// the current shadcn/Tailwind-4 convention.\n\nexport const BASE_CSS = `\n:root{\n --background:#ffffff; --foreground:#0a0a0a;\n --card:#ffffff; --card-foreground:#0a0a0a;\n --primary:#4f46e5; --primary-foreground:#ffffff;\n --secondary:#f1f5f9; --secondary-foreground:#0f172a;\n --muted:#f1f5f9; --muted-foreground:#64748b;\n --accent:#eef2ff; --accent-foreground:#312e81;\n --border:#e5e7eb; --ring:#4f46e5;\n --radius:0.5rem;\n --pagelet-sans:ui-sans-serif,system-ui,-apple-system,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif;\n --pagelet-mono:ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace;\n}\n[data-theme=\"dark\"]{\n --background:#0a0a0a; --foreground:#fafafa;\n --card:#111113; --card-foreground:#fafafa;\n --primary:#818cf8; --primary-foreground:#0a0a0a;\n --secondary:#1e293b; --secondary-foreground:#f1f5f9;\n --muted:#18181b; --muted-foreground:#a1a1aa;\n --accent:#1e1b4b; --accent-foreground:#e0e7ff;\n --border:#27272a; --ring:#818cf8;\n}\nhtml.pagelet-ready{color-scheme:light dark}\nbody{\n margin:0; background:var(--background); color:var(--foreground);\n font-family:var(--pagelet-sans);\n -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;\n}\n.pagelet-prose{\n max-width:46rem; margin:0 auto; padding:2.5rem 1.25rem 5rem;\n line-height:1.7; font-size:1.0625rem;\n}\n.pagelet-prose h1,.pagelet-prose h2,.pagelet-prose h3{\n line-height:1.25; font-weight:650; letter-spacing:-0.01em; margin:2em 0 0.6em;\n}\n.pagelet-prose h1{font-size:2rem; margin-top:0}\n.pagelet-prose h2{font-size:1.5rem; padding-bottom:.3em; border-bottom:1px solid var(--border)}\n.pagelet-prose h3{font-size:1.2rem}\n.pagelet-prose p,.pagelet-prose ul,.pagelet-prose ol{margin:0 0 1.1em}\n.pagelet-prose a{color:var(--primary); text-underline-offset:2px}\n.pagelet-prose code{\n font-family:var(--pagelet-mono); font-size:.875em;\n background:var(--muted); padding:.15em .4em; border-radius:calc(var(--radius) - 2px);\n}\n.pagelet-prose pre{\n background:var(--muted); color:var(--foreground);\n padding:1rem 1.1rem; border-radius:var(--radius); overflow:auto;\n border:1px solid var(--border); margin:0 0 1.2em;\n}\n.pagelet-prose pre code{background:none; padding:0}\n.pagelet-prose blockquote{\n margin:0 0 1.2em; padding:.2em 1rem; border-left:3px solid var(--border);\n color:var(--muted-foreground);\n}\n.pagelet-prose table{border-collapse:collapse; width:100%; margin:0 0 1.2em; font-size:.95em}\n.pagelet-prose th,.pagelet-prose td{border:1px solid var(--border); padding:.5em .75em; text-align:left}\n.pagelet-prose th{background:var(--muted)}\n.pagelet-prose img{max-width:100%; border-radius:var(--radius)}\n.pagelet-prose hr{border:none; border-top:1px solid var(--border); margin:2em 0}\n\n#pagelet-toolbar{\n position:fixed; bottom:1rem; right:1rem; z-index:9999;\n display:flex; gap:.25rem; padding:.3rem;\n background:var(--card); border:1px solid var(--border); border-radius:calc(var(--radius) + 4px);\n box-shadow:0 4px 16px rgba(0,0,0,.12);\n}\n#pagelet-toolbar button{\n all:unset; cursor:pointer; width:2rem; height:2rem; line-height:2rem; text-align:center;\n border-radius:var(--radius); color:var(--foreground); font-size:1rem;\n}\n#pagelet-toolbar button:hover{background:var(--accent); color:var(--accent-foreground)}\n\n#pagelet-offline{\n max-width:46rem; margin:1.5rem auto; padding:.85rem 1.1rem;\n font-family:var(--pagelet-sans); font-size:.95rem;\n color:var(--muted-foreground); background:var(--muted);\n border:1px solid var(--border); border-radius:var(--radius);\n}\n\n#pagelet-progress{\n position:fixed; top:0; left:0; height:3px; width:0;\n background:var(--primary); z-index:9998; transition:width .1s linear;\n}\n#pagelet-toc{\n position:fixed; top:0; left:0; bottom:0; width:15rem; padding:2.5rem 1rem; overflow:auto;\n font-size:.85rem; display:none;\n}\n#pagelet-toc ul{list-style:none; margin:0; padding:0; border-left:1px solid var(--border)}\n#pagelet-toc li{margin:0}\n#pagelet-toc li.lvl-h3 a{padding-left:1.6rem; font-size:.95em}\n#pagelet-toc a{\n display:block; padding:.25rem .8rem; color:var(--muted-foreground);\n text-decoration:none; border-left:2px solid transparent; margin-left:-1px;\n}\n#pagelet-toc a:hover{color:var(--foreground)}\n#pagelet-toc a.active{color:var(--primary); border-left-color:var(--primary)}\n@media (min-width:1180px){ #pagelet-toc{display:block} }\n\n.pagelet-chart{max-width:46rem; margin:1.5rem auto; padding:0 1.25rem}\n.pagelet-mermaid{\n position:relative; max-width:46rem; margin:1.5rem auto; padding:.5rem;\n border:1px solid var(--border); border-radius:var(--radius); background:var(--card);\n}\n.pagelet-mermaid svg{display:block; margin:0 auto}\n.pagelet-mermaid:fullscreen{background:var(--background); display:flex; align-items:center; justify-content:center}\n.pagelet-mermaid-full{\n position:absolute; top:.5rem; right:.5rem; z-index:2;\n all:unset; cursor:pointer; width:1.75rem; height:1.75rem; line-height:1.75rem; text-align:center;\n color:var(--muted-foreground); background:var(--background); border:1px solid var(--border);\n border-radius:calc(var(--radius) - 2px);\n}\n.pagelet-mermaid-full:hover{color:var(--foreground)}\n\n@media print{\n #pagelet-toolbar,#pagelet-progress,#pagelet-toc,.pagelet-copy,.pagelet-mermaid-full{display:none !important}\n .pagelet-prose{max-width:none}\n}\n`\n", "// Small shared helpers for the runtime.\n\nconst PREFIX = '[pagelet]'\n\nexport function warn(scope: string, err: unknown): void {\n console.warn(`${PREFIX} ${scope}:`, err)\n}\n\n/** Strip the common leading indentation from a block (markdown is indent-sensitive). */\nexport function dedent(text: string): string {\n const lines = text.replace(/^\\n/, '').replace(/\\s+$/, '').split('\\n')\n let min = Infinity\n for (const line of lines) {\n if (!line.trim()) continue\n const indent = line.match(/^[ \\t]*/)?.[0].length ?? 0\n if (indent < min) min = indent\n }\n if (!isFinite(min) || min === 0) return lines.join('\\n')\n return lines.map((l) => l.slice(min)).join('\\n')\n}\n\n/** camelCase / \"primaryForeground\" -> \"primary-foreground\" for CSS var names. */\nexport function kebab(s: string): string {\n return s.replace(/([a-z0-9])([A-Z])/g, '$1-$2').replace(/_/g, '-').toLowerCase()\n}\n\n/** localStorage may be unavailable (sandboxed iframes, Claude.ai Artifacts) — degrade silently. */\nexport function safeGet(key: string): string | null {\n try {\n return window.localStorage.getItem(key)\n } catch {\n return null\n }\n}\n\nexport function safeSet(key: string, value: string): void {\n try {\n window.localStorage.setItem(key, value)\n } catch {\n /* no-op */\n }\n}\n", "// Color mode (light/dark/auto) + compiling a shadcn-style theme JSON block to CSS vars (D12).\nimport { kebab, safeGet, safeSet, warn } from './util'\n\nexport type Mode = 'light' | 'dark' | 'auto'\n\nconst STYLE_ID = 'pagelet-theme-vars'\nconst STORE_KEY = 'pagelet-mode'\n\n/** Resolve and apply the initial color mode. Respects an explicit html[data-theme]. */\nexport function initMode(): void {\n const html = document.documentElement\n const explicit = html.getAttribute('data-theme')\n if (explicit === 'light' || explicit === 'dark') {\n html.setAttribute('data-pagelet-mode', explicit)\n return\n }\n setMode((safeGet(STORE_KEY) as Mode) ?? 'auto')\n}\n\nexport function getMode(): Mode {\n return (document.documentElement.getAttribute('data-pagelet-mode') as Mode) ?? 'auto'\n}\n\nexport function setMode(mode: Mode): void {\n const resolved =\n mode === 'auto'\n ? window.matchMedia('(prefers-color-scheme: dark)').matches\n ? 'dark'\n : 'light'\n : mode\n const html = document.documentElement\n html.setAttribute('data-theme', resolved)\n html.setAttribute('data-pagelet-mode', mode)\n safeSet(STORE_KEY, mode)\n}\n\n/** Compile a `<script data-pagelet=\"theme\">{json}</script>` block to :root / [data-theme=dark] vars. */\nexport function applyTheme(): void {\n const el = document.querySelector('script[data-pagelet=\"theme\"]')\n if (!el) return\n let theme: { colors?: Record<string, string>; dark?: Record<string, string>; radius?: string }\n try {\n theme = JSON.parse(el.textContent || '{}')\n } catch (e) {\n warn('theme', e)\n return\n }\n const root: string[] = []\n for (const [k, v] of Object.entries(theme.colors ?? {})) root.push(`--${kebab(k)}:${v};`)\n if (theme.radius) root.push(`--radius:${theme.radius};`)\n const dark: string[] = []\n for (const [k, v] of Object.entries(theme.dark ?? {})) dark.push(`--${kebab(k)}:${v};`)\n\n const css =\n (root.length ? `:root{${root.join('')}}` : '') +\n (dark.length ? `[data-theme=\"dark\"]{${dark.join('')}}` : '')\n if (!css) return\n\n let style = document.getElementById(STYLE_ID) as HTMLStyleElement | null\n if (!style) {\n style = document.createElement('style')\n style.id = STYLE_ID\n document.head.appendChild(style)\n }\n style.textContent = css\n}\n", "// Round-trip export: reconstruct the Markdown source from the retained source blocks\n// so a human's view can be copied back to the agent as a prompt.\nimport { dedent } from './util'\n\nexport function collectMarkdown(): string {\n const blocks = document.querySelectorAll<HTMLScriptElement>(\n 'script[type=\"text/markdown\"][data-pagelet=\"markdown\"]',\n )\n return Array.from(blocks)\n .map((b) => dedent(b.textContent || ''))\n .join('\\n\\n')\n .trim()\n}\n", "// The standard floating toolbar: theme toggle, print/PDF, copy-as-Markdown (round-trip).\nimport { getMode, setMode, type Mode } from './theme'\nimport { collectMarkdown } from './export'\n\nconst CYCLE: Mode[] = ['auto', 'light', 'dark']\nconst GLYPH: Record<Mode, string> = { auto: '◐', light: '☀', dark: '☾' }\n\nexport function mountToolbar(onPng?: () => void): void {\n if (document.body.getAttribute('data-pagelet-toolbar') === 'off') return\n if (document.getElementById('pagelet-toolbar')) return\n\n const bar = document.createElement('div')\n bar.id = 'pagelet-toolbar'\n bar.innerHTML = `\n <button data-act=\"theme\" title=\"Theme\" aria-label=\"Toggle theme\">${GLYPH[getMode()]}</button>\n <button data-act=\"print\" title=\"Print / save as PDF\" aria-label=\"Print\">⎙</button>\n <button data-act=\"png\" title=\"Save as PNG\" aria-label=\"Save as PNG\">⤓</button>\n <button data-act=\"copy\" title=\"Copy as Markdown\" aria-label=\"Copy as Markdown\">⧉</button>`\n\n bar.addEventListener('click', (e) => {\n const act = (e.target as HTMLElement).closest('button')?.dataset.act\n if (act === 'theme') cycleTheme(bar)\n else if (act === 'print') window.print()\n else if (act === 'png') onPng?.()\n else if (act === 'copy') copyMarkdown(bar)\n })\n\n document.body.appendChild(bar)\n}\n\nfunction cycleTheme(bar: HTMLElement): void {\n const next = CYCLE[(CYCLE.indexOf(getMode()) + 1) % CYCLE.length]!\n setMode(next)\n const btn = bar.querySelector<HTMLButtonElement>('[data-act=\"theme\"]')\n if (btn) btn.textContent = GLYPH[next]\n}\n\nfunction copyMarkdown(bar: HTMLElement): void {\n const md = collectMarkdown()\n const btn = bar.querySelector<HTMLButtonElement>('[data-act=\"copy\"]')\n const done = () => {\n if (!btn) return\n const prev = btn.textContent\n btn.textContent = '✓'\n setTimeout(() => (btn.textContent = prev), 1200)\n }\n navigator.clipboard?.writeText(md).then(done, done)\n}\n", "// Core chrome (no external deps): a scroll-progress bar + a sticky TOC with scroll-spy.\nimport { warn } from './util'\n\nexport function mountChrome(): void {\n try {\n progressBar()\n } catch (e) {\n warn('progress', e)\n }\n try {\n buildToc()\n } catch (e) {\n warn('toc', e)\n }\n}\n\nfunction progressBar(): void {\n if (document.getElementById('pagelet-progress')) return\n const bar = document.createElement('div')\n bar.id = 'pagelet-progress'\n document.body.appendChild(bar)\n const update = (): void => {\n const h = document.documentElement\n const max = h.scrollHeight - h.clientHeight\n bar.style.width = (max > 0 ? (h.scrollTop / max) * 100 : 0) + '%'\n }\n document.addEventListener('scroll', update, { passive: true })\n update()\n}\n\nfunction buildToc(): void {\n if (document.getElementById('pagelet-toc')) return\n const prose = document.querySelector('.pagelet-prose')\n if (!prose) return\n const heads = Array.from(prose.querySelectorAll<HTMLElement>('h2, h3'))\n if (heads.length < 3) return\n\n const nav = document.createElement('nav')\n nav.id = 'pagelet-toc'\n const list = document.createElement('ul')\n const links = new Map<string, HTMLElement>()\n\n heads.forEach((h, i) => {\n if (!h.id) h.id = `pl-h-${i}`\n const li = document.createElement('li')\n li.className = `lvl-${h.tagName.toLowerCase()}`\n const a = document.createElement('a')\n a.href = `#${h.id}`\n a.textContent = h.textContent || ''\n li.appendChild(a)\n list.appendChild(li)\n links.set(h.id, a)\n })\n nav.appendChild(list)\n document.body.appendChild(nav)\n\n const obs = new IntersectionObserver(\n (entries) => {\n for (const e of entries) {\n if (!e.isIntersecting) continue\n nav.querySelectorAll('a.active').forEach((x) => x.classList.remove('active'))\n links.get((e.target as HTMLElement).id)?.classList.add('active')\n }\n },\n { rootMargin: '0px 0px -75% 0px' },\n )\n heads.forEach((h) => obs.observe(h))\n}\n", "// The Pagelet runtime loader (the one tag). Classic IIFE: boots core, detects which\n// capabilities the page uses, and lazy-imports only those module bundles at runtime.\n// Online-to-render (D14): the offline banner shows until this boots successfully.\nimport { BASE_CSS } from './styles'\nimport { initMode, applyTheme, setMode } from './theme'\nimport { mountToolbar } from './toolbar'\nimport { mountChrome } from './toc'\nimport { collectMarkdown } from './export'\nimport { warn } from './util'\n\nconst VERSION = '0.1.1'\nconst STYLE_ID = 'pagelet-base-css'\n\n// Capture the loader's own base URL synchronously (currentScript is null inside later callbacks).\nconst BASE = resolveBase()\n\ninterface PageletApi {\n version: string\n base: string\n exportMarkdown(): string\n setTheme(mode: 'light' | 'dark' | 'auto'): void\n}\ndeclare global {\n interface Window {\n __pagelet__?: PageletApi\n }\n}\n\nfunction resolveBase(): string {\n const src = (document.currentScript as HTMLScriptElement | null)?.src\n try {\n return new URL('.', src || location.href).href\n } catch {\n return './'\n }\n}\n\n/** Lazy-import a capability module by name; runtime URL keeps esbuild from bundling it. */\nfunction load(name: string): Promise<Record<string, (...a: never[]) => unknown>> {\n const url = new URL(`modules/${name}.js`, BASE).href\n return import(/* @vite-ignore */ url) as Promise<Record<string, (...a: never[]) => unknown>>\n}\n\nfunction injectBaseCss(): void {\n if (document.getElementById(STYLE_ID)) return\n const style = document.createElement('style')\n style.id = STYLE_ID\n style.textContent = BASE_CSS\n document.head.appendChild(style)\n}\n\nfunction hasMath(scope: Element): boolean {\n const t = scope.textContent || ''\n return t.includes('$$') || t.includes('\\\\(') || t.includes('\\\\[')\n}\n\nasync function run(name: string): Promise<void> {\n try {\n const mod = await load(name)\n await (mod.enhance as () => Promise<void>)()\n } catch (e) {\n warn(`${name}-load`, e)\n }\n}\n\nasync function boot(): Promise<void> {\n if (window.__pagelet__) return\n window.__pagelet__ = {\n version: VERSION,\n base: BASE,\n exportMarkdown: collectMarkdown,\n setTheme: setMode,\n }\n\n injectBaseCss()\n initMode()\n try {\n applyTheme()\n } catch (e) {\n warn('theme', e)\n }\n\n // 1. Markdown first (produces .pagelet-prose; normalises ```mermaid blocks).\n if (document.querySelector('script[type=\"text/markdown\"][data-pagelet=\"markdown\"]')) {\n await run('markdown')\n }\n\n // 2. Detect what the (now-rendered) page uses; load those modules in parallel.\n const scope = (document.querySelector('.pagelet-prose') as Element) || document.body\n const jobs: Promise<void>[] = []\n if (document.querySelector('pre.mermaid, .mermaid')) jobs.push(run('mermaid'))\n if (document.querySelector('pre > code[class*=\"language-\"]:not(.language-mermaid)')) jobs.push(run('code'))\n if (hasMath(scope)) jobs.push(run('math'))\n if (document.querySelector('script[type=\"application/json\"][data-pagelet=\"chart\"]')) jobs.push(run('charts'))\n await Promise.all(jobs)\n\n // 3. Chrome + toolbar (PNG export is itself lazy-loaded).\n mountChrome()\n mountToolbar(() => {\n void load('png').then((m) => (m.exportPng as () => Promise<void>)())\n })\n\n document.documentElement.classList.add('pagelet-ready')\n document.getElementById('pagelet-offline')?.remove()\n}\n\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', () => void boot())\n} else {\n void boot()\n}\n"],
|
|
5
5
|
"mappings": "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",
|
|
6
6
|
"names": ["BASE_CSS", "PREFIX", "warn", "scope", "err", "dedent", "text", "lines", "min", "line", "indent", "l", "kebab", "s", "safeGet", "key", "safeSet", "value", "STYLE_ID", "STORE_KEY", "initMode", "html", "explicit", "setMode", "safeGet", "getMode", "mode", "resolved", "safeSet", "applyTheme", "el", "theme", "e", "warn", "root", "k", "v", "kebab", "dark", "css", "style", "collectMarkdown", "blocks", "b", "dedent", "CYCLE", "GLYPH", "mountToolbar", "onPng", "bar", "getMode", "e", "act", "cycleTheme", "copyMarkdown", "next", "setMode", "btn", "md", "collectMarkdown", "done", "prev", "mountChrome", "progressBar", "warn", "buildToc", "bar", "update", "h", "max", "prose", "heads", "nav", "list", "links", "li", "a", "obs", "entries", "e", "x", "VERSION", "STYLE_ID", "BASE", "resolveBase", "src", "load", "name", "injectBaseCss", "style", "BASE_CSS", "hasMath", "scope", "run", "e", "warn", "boot", "collectMarkdown", "setMode", "initMode", "applyTheme", "jobs", "mountChrome", "mountToolbar", "m"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@usepagelet/runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "The Pagelet runtime — one tag that renders self-contained HTML pagelets (Markdown, Mermaid, KaTeX, charts, toolbar).",
|
|
6
6
|
"license": "Apache-2.0",
|
|
7
7
|
"homepage": "https://pagelet.link",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/
|
|
10
|
+
"url": "git+https://github.com/usepagelet/pagelet.git",
|
|
11
11
|
"directory": "packages/sdk"
|
|
12
12
|
},
|
|
13
13
|
"keywords": ["pagelet", "html", "agent", "markdown", "mermaid", "katex", "runtime"],
|