{ "files": [ { "path": "src/lib/theme/build-tokens.ts", "content": "#!/usr/bin/env -S deno run --allow-read --allow-write\nimport { join } from \"https://deno.land/std@0.224.0/path/mod.ts\";\nimport { parse as parseYaml } from \"https://deno.land/std@0.224.0/yaml/mod.ts\";\nconst themesDir = \"src/lib/theme/themes\";\nconst outCss = \"src/lib/theme/generated/themes.css\";\nfunction toRgb(hex: string) {\n const h = hex.replace(\"#\", \"\").trim();\n const n = (s: string) => parseInt(s, 16);\n if (h.length === 3) return `${n(h[0]+h[0])} ${n(h[1]+h[1])} ${n(h[2]+h[2])}`;\n return `${n(h.slice(0,2))} ${n(h.slice(2,4))} ${n(h.slice(4,6))}`;\n}\nconst entries: string[] = [];\nfor await (const ent of Deno.readDir(themesDir)) if (ent.isFile && ent.name.endsWith(\".yaml\")) entries.push(ent.name);\nentries.sort();\nlet css = \"\";\nfor (const file of entries) {\n const t = parseYaml(await Deno.readTextFile(join(themesDir, file))) as any;\n const sel = t.name === \"light\" ? ':root,[data-theme=\"light\"]' : `[data-theme=\"${t.name}\"]`;\n css += `${sel}{\\n`;\n for (const [k, v] of Object.entries(t.colors ?? {})) css += `--color-${k}: ${toRgb(String(v))};\\n`;\n for (const [k, v] of Object.entries(t.radii ?? {})) css += `--radius-${k}: ${v};\\n`;\n for (const [k, v] of Object.entries(t.spacing ?? {})) css += `--space-${k}: ${v};\\n`;\n const ty = t.typography ?? {};\n if (ty[\"font-reading\"]) css += `--font-reading: ${ty[\"font-reading\"]};\\n`;\n if (ty[\"font-ui\"]) css += `--font-ui: ${ty[\"font-ui\"]};\\n`;\n if (ty[\"leading-reading\"]) css += `--leading-reading: ${ty[\"leading-reading\"]};\\n`;\n if (ty[\"measure-ch\"]) css += `--measure-ch: ${ty[\"measure-ch\"]};\\n`;\n css += `}\\n\\n`;\n}\nawait Deno.mkdir(join(\"src/lib/theme/generated\"), { recursive: true });\nawait Deno.writeTextFile(outCss, css);\nconsole.log(\"Wrote\", outCss);\n" }, { "path": "deno.json", "content": "{\n \"tasks\": {\n \"tokens\": \"deno run --allow-read --allow-write src/lib/theme/build-tokens.ts\",\n \"scaffold\": \"deno run --allow-read --allow-write scripts/scaffold.ts scripts/a-ui.v5.manifest.json\"\n }\n}\n" }, { "path": "src/lib/a/primitives/AButton.svelte", "content": "\n\n\n \n\n" }, { "path": "src/lib/a/primitives/AInput.svelte", "content": "\n\n" }, { "path": "src/lib/a/primitives/ACard.svelte", "content": "\n
\n \n
\n \n
\n" }, { "path": "src/lib/a/primitives/ASwitch.svelte", "content": "\n\n" }, { "path": "src/lib/a/primitives/ADetails.svelte", "content": "\n
\n \n \n {summary}\n {#if tech}Technical{/if}\n {open ? 'Hide':'Show'}\n \n {#if !(tech && !$showTech && forceHide)}
{/if}\n
\n" }, { "path": "src/lib/a/reader/AReaderTOC.svelte", "content": "\n\n" }, { "path": "src/lib/a/reader/TocNode.svelte", "content": "\n
  • \n
    \n {#if collapsible && hasChildren}\n \n {:else}\n \n {/if}\n onNavigate(item.href ?? `#${item.id}`)}>\n {item.title}\n \n
    \n {#if hasChildren}\n
      \n {#each item.children as child (child.id)}\n \n {/each}\n
    \n {/if}\n
  • \n" }, { "path": "src/lib/a/nav/ANavbar.svelte", "content": "\n
    \n
    \n
    \n \n {#if logo}{/if}{brand}\n \n
    \n \n \n
    \n
    \n
    \n \n
    \n" }, { "path": "src/lib/a/nav/UserDropdown.svelte", "content": "\n
    \n \n {#if open}\n
    \n {#if user}\n
    \n
    {user.name}
    \n {#if user.email}
    {user.email}
    {/if}\n
    \n \n {/if}\n
    \n" }, { "path": "src/lib/a/nav/MobileNav.svelte", "content": "\n{#if open}\n
    \n
    \n \n
    \n{/if}\n" } ] }