{"_id":"@ablative/grunk","name":"@ablative/grunk","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@ablative/grunk","version":"0.1.0","description":"Grunk — a structure-only DOM primitives library: framework-free structural primitives (console surfaces, overlays, the morph family, the dock/window model, the command surface, reorder and drag engines, and a vendored icon set) whose visual identity lives","keywords":["dom","primitives","structure-only","ui","collections","css","icons","typescript","esm"],"license":"Apache-2.0","type":"module","sideEffects":["**/*.css"],"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./collections/gig-poster.css":"./collections/gig-poster.css","./collections/meridian.css":"./collections/meridian.css","./collections/aion-ops.css":"./collections/aion-ops.css","./collections/ablative.css":"./collections/ablative.css"},"scripts":{"build":"tsc -p tsconfig.build.json","typecheck":"tsc --noEmit","test":"vitest run","proof":"node scripts/browser-proof.mjs","collection-proof":"node scripts/collection-proof.mjs","gesture-proof":"node scripts/gesture-proof.mjs","icon-proof":"node scripts/icon-proof.mjs"},"devDependencies":{"@types/node":"^24.13.3","esbuild":"^0.28.1","happy-dom":"^20.10.6","playwright-core":"^1.54.1","typescript":"^5.8.3","vitest":"^3.2.4"},"repository":{"type":"git","url":"git+https://github.com/ablative-io/frame.git","directory":"packages/grunk"},"publishConfig":{"access":"public"},"_id":"@ablative/grunk@0.1.0","bugs":{"url":"https://github.com/ablative-io/frame/issues"},"homepage":"https://github.com/ablative-io/frame#readme","_integrity":"sha512-1x9KquCcbS+fQNPgpsW+asfsuQE2l1cmqRUHHcXPY+M0kSR/LvrxmBCcxnrqlPFpy6xnvzWnazP69S3ITekbgA==","_resolved":"/Users/tom/Developer/ablative/stack/frame/.gate-waiter/ablative-grunk-0.1.0-certified-afeeaf3.tgz","_from":"file:/Users/tom/Developer/ablative/stack/frame/.gate-waiter/ablative-grunk-0.1.0-certified-afeeaf3.tgz","_nodeVersion":"26.4.0","_npmVersion":"11.17.0","dist":{"integrity":"sha512-1x9KquCcbS+fQNPgpsW+asfsuQE2l1cmqRUHHcXPY+M0kSR/LvrxmBCcxnrqlPFpy6xnvzWnazP69S3ITekbgA==","shasum":"8252a582f48f3cd18d67c5effbdbaf24611a9747","tarball":"https://registry.npmjs.org/@ablative/grunk/-/grunk-0.1.0.tgz","fileCount":185,"unpackedSize":804084,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCn4ihLVwQhNBcg0/5qxhnkjW/6T7VRrllWDqbeCWyEXwIgcE20BNC+DKCe+llSrqs9Bmex3bn7ulJZ8ywdkCr0zS8="}]},"_npmUser":{"name":"tomwhiting","email":"tom@ablative.com.au"},"directories":{},"maintainers":[{"name":"tomwhiting","email":"tom@ablative.com.au"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/grunk_0.1.0_1787175480770_0.35141974447182855"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-19T21:38:00.552Z","0.1.0":"2026-08-19T21:38:00.922Z","modified":"2026-08-19T21:38:01.194Z"},"maintainers":[{"name":"tomwhiting","email":"tom@ablative.com.au"}],"description":"Grunk — a structure-only DOM primitives library: framework-free structural primitives (console surfaces, overlays, the morph family, the dock/window model, the command surface, reorder and drag engines, and a vendored icon set) whose visual identity lives","homepage":"https://github.com/ablative-io/frame#readme","keywords":["dom","primitives","structure-only","ui","collections","css","icons","typescript","esm"],"repository":{"type":"git","url":"git+https://github.com/ablative-io/frame.git","directory":"packages/grunk"},"bugs":{"url":"https://github.com/ablative-io/frame/issues"},"license":"Apache-2.0","readme":"# `@ablative/grunk`\n\nGrunk is a structure-only DOM primitives library. Every primitive renders\nstructure — elements, classes, ARIA wiring, motion — and **no visual\nidentity**: colors, typography, radii, and shadows live entirely in tier-2\nCSS collections that a consumer swaps whole. Plain TypeScript over the DOM;\nno framework; zero runtime dependencies. ESM-only, browser-first: the\nshared overlay layer stack binds `document.body` at import time, so a\nbrowser (or a registered DOM implementation) is required to import it.\n\n## Install\n\n```sh\nnpm install @ablative/grunk\n```\n\n## The surface\n\nOne root entry carries the whole library:\n\n```ts\nimport { createOverlay, createDockRegion, commandScore } from \"@ablative/grunk\";\n```\n\nIt spans the structural primitive contract and tier-1 token vocabulary, the\nidentity guard, the console primitives (log view, data table, stat tile,\nstatus pill, and friends), the overlay foundation (portal, focus trap,\nscroll lock, dismiss), the shared-element morph family, the dock region and\nwindow model, the command surface with its keybinding registry, the reorder\nand drag-placement engines, the opt-in durable-state group, and a vendored\nicon set (Lucide-derived; attribution ships in\n`src/icons/vendored/LICENSE.md`).\n\n## Collections\n\nA collection is a stylesheet that carries ALL visual identity for every\nprimitive. Import exactly one:\n\n```ts\nimport \"@ablative/grunk/collections/ablative.css\";\n```\n\nShipped collections: `ablative.css`, `meridian.css`, `aion-ops.css`,\n`gig-poster.css`. Structure never changes across collections — swapping the\nstylesheet restyles every surface.\n\n## License\n\nApache-2.0. Vendored icon path data is used under the Lucide ISC license\n(see `src/icons/vendored/LICENSE.md` in the installed package).\n","readmeFilename":"README.md","_rev":"1-23657c92d658f0dc44c2f2bc5c8dd80a"}