{"_id":"@11thdeg/lys","_rev":"4-06eaedb47a62a92a59ea484013edded6","name":"@11thdeg/lys","dist-tags":{"latest":"1.2.1"},"versions":{"1.1.0":{"name":"@11thdeg/lys","version":"1.1.0","keywords":["slides","presentation","css","accessible","llm"],"license":"MIT","_id":"@11thdeg/lys@1.1.0","maintainers":[{"name":"villetakanen","email":"vitkukissa@gmail.com"}],"homepage":"https://villetakanen.github.io/lys/","bugs":{"url":"https://github.com/villetakanen/lys/issues"},"dist":{"shasum":"da476a2d1cdf79218cb4e6a75972c5ec44a10098","tarball":"https://registry.npmjs.org/@11thdeg/lys/-/lys-1.1.0.tgz","fileCount":15,"integrity":"sha512-UWpx+DqQKZVjJDuaLkBtYvPsW53WEkRpYzPbWAdiSvDxFDrPweFo1nb5GnqOdi7IfOcMpbkE/aAMNgG+Id5KOg==","signatures":[{"sig":"MEQCIHgeFOxm90W6gthPe5C4LskLRI1fYr0VS96llgwYWZb/AiBLID3kX4QnCDjvlWmi7f+mJpv3VG6HtnO03LaZ8SMJrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29525},"main":"dist/lys.js","pnpm":{"onlyBuiltDependencies":["lefthook"]},"type":"module","types":"dist/lys.d.ts","module":"dist/lys.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lys.d.ts","import":"./dist/lys.js"},"./css":"./dist/lys.css"},"gitHead":"fabb16ea7274ce1762530a192acbafcc6d29650a","scripts":{"dev":"vite","lint":"biome check --write .","test":"vitest run","build":"tsc --noEmit && vite build && tsc --emitDeclarationOnly --outDir dist && node scripts/inject-skill.js && node scripts/build-site.js","prepare":"lefthook install","preview":"vite preview","test:all":"vitest run && playwright test","test:e2e":"playwright test","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ui":"playwright test --ui","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"villetakanen","email":"vitkukissa@gmail.com"},"repository":{"url":"git+https://github.com/villetakanen/lys.git","type":"git"},"_npmVersion":"10.9.4","description":"A structural CSS+TS slide engine for LLM-generated presentations","directories":{},"_nodeVersion":"22.21.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"packageManager":"pnpm@10.30.3","devDependencies":{"vite":"^8.0.2","vitest":"^4.1.1","lefthook":"^2.1.4","happy-dom":"^20.8.8","typescript":"^6.0.2","@biomejs/biome":"^2.4.8","@playwright/test":"^1.58.2","@vitest/coverage-v8":"^4.1.1","@axe-core/playwright":"^4.11.1"},"_npmOperationalInternal":{"tmp":"tmp/lys_1.1.0_1782460323166_0.05235245955843526","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@11thdeg/lys","version":"1.1.1","keywords":["slides","presentation","css","accessible","llm"],"license":"MIT","_id":"@11thdeg/lys@1.1.1","maintainers":[{"name":"villetakanen","email":"vitkukissa@gmail.com"}],"homepage":"https://villetakanen.github.io/lys/","bugs":{"url":"https://github.com/villetakanen/lys/issues"},"dist":{"shasum":"953e603e3b2d8d066622dadbccd884434423bec0","tarball":"https://registry.npmjs.org/@11thdeg/lys/-/lys-1.1.1.tgz","fileCount":15,"integrity":"sha512-GKi0UuWONKdZRLrNHUfqGkOPZxg9PRSvcFRLJeknbtesPhQrMK8vdtywFQP3Twea5Kw5Eu1tl85WOxVt+EjO/Q==","signatures":[{"sig":"MEYCIQDL/Xm1w4etY5hCtl8V4XMjoRSF/P3749+YXWT+O5MZXQIhAKBLjf6Lpr/ZyYYZUdarsIFfOiAq/apfTTV9CF6TO+PK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@11thdeg%2flys@1.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29382},"main":"dist/lys.js","type":"module","_from":"file:11thdeg-lys-1.1.1.tgz","types":"dist/lys.d.ts","module":"dist/lys.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lys.d.ts","import":"./dist/lys.js"},"./css":"./dist/lys.css"},"scripts":{"dev":"vite","lint":"biome check --write .","test":"vitest run","build":"tsc --noEmit && vite build && tsc --emitDeclarationOnly --outDir dist && node scripts/inject-skill.js && node scripts/build-site.js","preview":"vite preview","test:all":"vitest run && playwright test","test:e2e":"playwright test","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ui":"playwright test --ui","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ad4835b9-23eb-468f-a63a-902eb716b616"}},"_resolved":"/tmp/c648f46558951e05b9fcd8c96a6df6e5/11thdeg-lys-1.1.1.tgz","_integrity":"sha512-GKi0UuWONKdZRLrNHUfqGkOPZxg9PRSvcFRLJeknbtesPhQrMK8vdtywFQP3Twea5Kw5Eu1tl85WOxVt+EjO/Q==","repository":{"url":"git+https://github.com/villetakanen/lys.git","type":"git"},"_npmVersion":"11.13.0","description":"A structural CSS+TS slide engine for LLM-generated presentations","directories":{},"_nodeVersion":"24.17.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.2","vitest":"^4.1.1","lefthook":"^2.1.4","happy-dom":"^20.8.8","typescript":"^6.0.2","@biomejs/biome":"^2.4.8","@playwright/test":"^1.58.2","@vitest/coverage-v8":"^4.1.1","@axe-core/playwright":"^4.11.1"},"_npmOperationalInternal":{"tmp":"tmp/lys_1.1.1_1782807564945_0.6544626137099094","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@11thdeg/lys","version":"1.2.0","keywords":["slides","presentation","css","accessible","llm"],"license":"MIT","_id":"@11thdeg/lys@1.2.0","maintainers":[{"name":"villetakanen","email":"vitkukissa@gmail.com"}],"homepage":"https://villetakanen.github.io/lys/","bugs":{"url":"https://github.com/villetakanen/lys/issues"},"dist":{"shasum":"b4f8d0450589e92fac5911a73ae0a6c5bf3ebca5","tarball":"https://registry.npmjs.org/@11thdeg/lys/-/lys-1.2.0.tgz","fileCount":15,"integrity":"sha512-C2gv772JFc78SDSPbm790YpAhHffNDq31woGhfHcdqexPElu168K8SVCER+2/WIUZmF6zgSJmpGdPzsRcfrHXw==","signatures":[{"sig":"MEQCID8jaZi9TmMow5Oinc6WOjAeSbzRR6E2aiWheiZA9P5AAiBhCY8ajCj4PpVwTMUDtgN0IYKqbyu+Yx6lQeZZ5TU71A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@11thdeg%2flys@1.2.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":29545},"main":"dist/lys.js","type":"module","_from":"file:11thdeg-lys-1.2.0.tgz","types":"dist/lys.d.ts","module":"dist/lys.js","engines":{"node":">=20"},"exports":{".":{"types":"./dist/lys.d.ts","import":"./dist/lys.js"},"./css":"./dist/lys.css"},"scripts":{"dev":"vite","lint":"biome check --write .","test":"vitest run","build":"tsc --noEmit && vite build && tsc --emitDeclarationOnly --outDir dist && node scripts/inject-skill.js && node scripts/build-site.js","preview":"vite preview","test:all":"vitest run && playwright test","test:e2e":"playwright test","typecheck":"tsc --noEmit","test:watch":"vitest","test:e2e:ui":"playwright test --ui","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ad4835b9-23eb-468f-a63a-902eb716b616"}},"_resolved":"/tmp/e094df406b2c7dd0148119e389008831/11thdeg-lys-1.2.0.tgz","_integrity":"sha512-C2gv772JFc78SDSPbm790YpAhHffNDq31woGhfHcdqexPElu168K8SVCER+2/WIUZmF6zgSJmpGdPzsRcfrHXw==","repository":{"url":"git+https://github.com/villetakanen/lys.git","type":"git"},"_npmVersion":"11.16.0","description":"A structural CSS+TS slide engine for LLM-generated presentations","directories":{},"_nodeVersion":"24.18.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.2","vitest":"^4.1.1","lefthook":"^2.1.4","happy-dom":"^20.8.8","typescript":"^6.0.2","@biomejs/biome":"^2.4.8","@playwright/test":"^1.58.2","@vitest/coverage-v8":"^4.1.1","@axe-core/playwright":"^4.11.1"},"_npmOperationalInternal":{"tmp":"tmp/lys_1.2.0_1786444274391_0.5118787699417167","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@11thdeg/lys","version":"1.2.1","type":"module","description":"A structural CSS+TS slide engine for LLM-generated presentations","main":"dist/lys.js","module":"dist/lys.js","types":"dist/lys.d.ts","exports":{".":{"import":"./dist/lys.js","types":"./dist/lys.d.ts"},"./css":"./dist/lys.css"},"publishConfig":{"access":"public"},"keywords":["slides","presentation","css","accessible","llm"],"engines":{"node":">=20"},"homepage":"https://villetakanen.github.io/lys/","repository":{"type":"git","url":"git+https://github.com/villetakanen/lys.git"},"bugs":{"url":"https://github.com/villetakanen/lys/issues"},"license":"MIT","devDependencies":{"@axe-core/playwright":"^4.11.1","@biomejs/biome":"^2.4.8","@playwright/test":"^1.58.2","@vitest/coverage-v8":"^4.1.1","happy-dom":"^20.8.8","lefthook":"^2.1.4","typescript":"^6.0.2","vite":"^8.0.2","vitest":"^4.1.1"},"scripts":{"dev":"vite","build":"tsc --noEmit && vite build && tsc --emitDeclarationOnly --outDir dist && node scripts/inject-skill.js && node scripts/build-site.js","preview":"vite preview","lint":"biome check --write .","typecheck":"tsc --noEmit","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage","test:e2e":"playwright test","test:e2e:ui":"playwright test --ui","test:all":"vitest run && playwright test"},"_id":"@11thdeg/lys@1.2.1","_integrity":"sha512-G+7F+nAJVje40ASUPNjimqcXFe3ei0N4p7RfKk7b4dHGWLkQpozFHs3ny2nttuwBStaECmnMuKLxZtr+Qfpk0A==","_resolved":"/tmp/2b7597f78743f17dd1d671aed8263895/11thdeg-lys-1.2.1.tgz","_from":"file:11thdeg-lys-1.2.1.tgz","_nodeVersion":"24.18.0","_npmVersion":"11.16.0","dist":{"integrity":"sha512-G+7F+nAJVje40ASUPNjimqcXFe3ei0N4p7RfKk7b4dHGWLkQpozFHs3ny2nttuwBStaECmnMuKLxZtr+Qfpk0A==","shasum":"542713774c52648a87dc1c5cb7e3c347ba522e97","tarball":"https://registry.npmjs.org/@11thdeg/lys/-/lys-1.2.1.tgz","fileCount":15,"unpackedSize":29547,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@11thdeg%2flys@1.2.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCl0mFTmh3HVM1AB0xtXLo9IIWpiQvvYB0ItbGLgHiANQIhAIWnMMNKEVjwYQvAXuN/vLRofcuEUy8kQLPH60mgEznk"}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:ad4835b9-23eb-468f-a63a-902eb716b616"}},"directories":{},"maintainers":[{"name":"villetakanen","email":"vitkukissa@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/lys_1.2.1_1786446826659_0.6904124110749388"},"_hasShrinkwrap":false}},"time":{"created":"2026-06-26T07:52:02.907Z","modified":"2026-08-11T11:13:47.325Z","1.1.0":"2026-06-26T07:52:03.364Z","1.1.1":"2026-06-30T08:19:25.092Z","1.2.0":"2026-08-11T10:31:14.527Z","1.2.1":"2026-08-11T11:13:46.806Z"},"bugs":{"url":"https://github.com/villetakanen/lys/issues"},"license":"MIT","homepage":"https://villetakanen.github.io/lys/","keywords":["slides","presentation","css","accessible","llm"],"repository":{"type":"git","url":"git+https://github.com/villetakanen/lys.git"},"description":"A structural CSS+TS slide engine for LLM-generated presentations","maintainers":[{"name":"villetakanen","email":"vitkukissa@gmail.com"}],"readme":"# ⚜ Lys\n\n[![npm version](https://img.shields.io/npm/v/@11thdeg/lys)](https://www.npmjs.com/package/@11thdeg/lys)\n[![bundle size](https://img.shields.io/bundlephobia/minzip/@11thdeg/lys?label=CSS%20%2B%20JS)](https://bundlephobia.com/package/@11thdeg/lys)\n[![license](https://img.shields.io/npm/l/@11thdeg/lys)](./LICENSE)\n\n**A structural slide engine for the age of generated content.**\n\n[Live demo](https://villetakanen.github.io/lys/)\n\n## What it does\n\n- **Structural slides from semantic HTML** — Write `<article>` elements, get accessible, navigable presentations with keyboard, touch, and screen reader support.\n- **Zero dependencies** — Ships as a single CSS file and a single JS file. Inline both into one HTML file and you have a complete deck.\n- **LLM-first design** — A stable, predictable target format for AI-generated presentations. Flat markup, graceful degradation, no framework overhead.\n\n## Minimal example\n\n```html\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <meta charset=\"UTF-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n  <title>My Deck</title>\n  <link rel=\"stylesheet\" href=\"https://unpkg.com/@11thdeg/lys/dist/lys.css\">\n</head>\n<body>\n  <div data-lys>\n    <article>\n      <h1>Hello, Lys</h1>\n      <p>Your first slide.</p>\n    </article>\n    <article>\n      <h2>Second Slide</h2>\n      <p>Navigate with arrow keys, swipe, or click.</p>\n    </article>\n  </div>\n  <script src=\"https://unpkg.com/@11thdeg/lys/dist/lys.iife.js\"></script>\n</body>\n</html>\n```\n\n## CDN usage\n\n```html\n<link rel=\"stylesheet\" href=\"https://unpkg.com/@11thdeg/lys/dist/lys.css\">\n<script src=\"https://unpkg.com/@11thdeg/lys/dist/lys.iife.js\"></script>\n```\n\nNo setup code needed — Lys auto-initializes on `[data-lys]` containers.\n\n## Token customization\n\nOverride `--lys-*` CSS custom properties at any cascade level:\n\n```css\n:root {\n  --lys-aspect-ratio: 4/3;\n  --lys-slide-padding: 3rem 4rem;\n  --lys-transition-duration: 500ms;\n}\n```\n\n## Chapter navigation (opt-in)\n\nAdd a `data-lys-nav` region inside the deck with anchor links to slide `id`s. Lys positions it\nout of the scroll-snap flow and marks the current slide's link with `aria-current=\"true\"` and\n`data-lys-nav-active`; you write the links and the styling. The links work as anchors even without JavaScript.\n\n```html\n<div data-lys>\n  <nav data-lys-nav aria-label=\"Slides\">\n    <a href=\"#intro\">Intro</a>\n    <a href=\"#results\">Results</a>\n  </nav>\n  <article id=\"intro\"><h1>Intro</h1></article>\n  <article id=\"results\"><h2>Results</h2></article>\n</div>\n```\n\nSee [`examples/nav.html`](./examples/nav.html).\n\n## For LLMs\n\nLys is designed to be used by language models generating presentations. If you are an LLM, read [`llms.txt`](https://raw.githubusercontent.com/villetakanen/lys/main/llms.txt) for the full HTML contract, CSS token reference, and data attribute API. For a generation-ready skill prompt, see [`skill/SKILL.md`](./skill/SKILL.md).\n\n## Links\n\n- [Live demo and examples](https://villetakanen.github.io/lys/)\n- [`llms.txt`](https://raw.githubusercontent.com/villetakanen/lys/main/llms.txt) — Machine-readable API reference\n- [`examples/`](./examples/) — Example decks\n- [`ARCHITECTURE.md`](./ARCHITECTURE.md) — Technical contract and internals\n- [`PROJECT.md`](./PROJECT.md) — Development setup and toolchain\n\n## Built with ASDLC\n\nLys is developed using the [ASDLC](https://asdlc.io) (Agent-Spec-Driven Lifecycle) methodology — specs define the contract, agents fulfill it.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}