{"_id":"@bimetal/overlay-headless","_rev":"2-42803919790b78d94f323be0a51aacb4","name":"@bimetal/overlay-headless","dist-tags":{"latest":"0.37.0"},"versions":{"0.36.0":{"name":"@bimetal/overlay-headless","version":"0.36.0","keywords":["overlay","dialog","modal","popover","tooltip","menu","drawer","headless","controller","framework-agnostic","a11y"],"author":{"name":"Andreas Biederbeck"},"license":"Apache-2.0","_id":"@bimetal/overlay-headless@0.36.0","maintainers":[{"name":"biederbe","email":"mail@biederbeck.de"}],"homepage":"https://github.com/bimetal/bimetal#readme","bugs":{"url":"https://github.com/bimetal/bimetal/issues"},"dist":{"shasum":"6d662be18a53f0fcc36a5e464f4a46b99cf9c473","tarball":"https://registry.npmjs.org/@bimetal/overlay-headless/-/overlay-headless-0.36.0.tgz","fileCount":20,"integrity":"sha512-vEu1Pllo5pplbuhBoMmAGxzBkA3mOtKQ54+KItCni7yRXutDZt2aPJXMrzdGnaIm3gE2GqsSvGYu7n/G423uOA==","signatures":[{"sig":"MEYCIQDfawYq1/xt63InSs6GILbc7gHnbP06wLgrrxXWbRzYvwIhAN/1wL9dkg5V3Mb+lFAJYgx2FWTUH6ERjI92GjE+GMPK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":71069},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"c398884cce8cfe7004bcd7523398ebaf63c5452c","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build"},"_npmUser":{"name":"biederbe","email":"mail@biederbeck.de"},"repository":{"url":"git+https://github.com/bimetal/bimetal.git","type":"git","directory":"packages/overlay/overlay-headless"},"_npmVersion":"11.17.0","description":"Canonical, framework-agnostic overlay controller (open/close + dismiss policy) shared by Dialog/Popover/Tooltip/Menu/Drawer.","directories":{},"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@bimetal/headless-core":"^0.36.0"},"_hasShrinkwrap":false,"devDependencies":{"vitest":"^3.2.4"},"_npmOperationalInternal":{"tmp":"tmp/overlay-headless_0.36.0_1788079201098_0.15884309562867305","host":"s3://npm-registry-packages-npm-production"}},"0.37.0":{"_id":"@bimetal/overlay-headless@0.37.0","bugs":{"url":"https://github.com/bimetal/bimetal/issues"},"dist":{"shasum":"dbc844722a1840498d2bbb63927a363bc060b774","tarball":"https://registry.npmjs.org/@bimetal/overlay-headless/-/overlay-headless-0.37.0.tgz","fileCount":20,"integrity":"sha512-NBOEb9cjSTtS/ZoRrjY2CXvtRUk2cPFEu6nHCpw3k3Ya70XQLpTaTj4RQO75JU+0zMh6tsfAEcc4xazX4HW8Sg==","signatures":[{"sig":"MEUCIE5Pw+7qddba9m0HoKzNNWk+WzWBcgUG1DKaCRxxzDeXAiEAlS62CcNPPN7uOK6Ir6Uh0+z5B38X9kSBnpG7F8DCipU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICMppMdgn/zegmHIjJoSNxtfC3k3QWAsVu0PABmMYoN0AiEAyl5fxDs+kTVmalkiA5jPgcvwNCHJbifvbHDH7jvx0i0="}],"unpackedSize":71091},"main":"./dist/index.js","name":"@bimetal/overlay-headless","type":"module","types":"./dist/index.d.ts","author":{"name":"Andreas Biederbeck"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"gitHead":"7c443deff9a8b0a534c68757c83f5a6b0794e018","license":"Apache-2.0","scripts":{"dev":"tsc -b --watch","test":"vitest run","build":"tsc -b","typecheck":"tsc --noEmit -p tsconfig.test.json","test:watch":"vitest","prepublishOnly":"npm run build"},"version":"0.37.0","_npmUser":{"name":"biederbe","email":"mail@biederbeck.de"},"homepage":"https://github.com/bimetal/bimetal#readme","keywords":["overlay","dialog","modal","popover","tooltip","menu","drawer","headless","controller","framework-agnostic","a11y"],"repository":{"url":"git+https://github.com/bimetal/bimetal.git","type":"git","directory":"packages/overlay/overlay-headless"},"_npmVersion":"11.17.0","description":"Canonical, framework-agnostic overlay controller (open/close + dismiss policy) shared by Dialog/Popover/Tooltip/Menu/Drawer.","directories":{},"maintainers":[{"name":"biederbe","email":"mail@biederbeck.de"}],"sideEffects":false,"_nodeVersion":"26.5.0","dependencies":{"@bimetal/headless-core":"^0.37.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^8.0.1","vitest":"^5.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/overlay-headless_0.37.0_1789245205002_0.14012579388893553"}}},"time":{"created":"2026-08-30T08:40:00.926Z","modified":"2026-09-12T20:33:25.242Z","0.36.0":"2026-08-30T08:40:01.239Z","0.37.0":"2026-09-12T20:33:25.091Z"},"bugs":{"url":"https://github.com/bimetal/bimetal/issues"},"author":{"name":"Andreas Biederbeck"},"license":"Apache-2.0","homepage":"https://github.com/bimetal/bimetal#readme","keywords":["overlay","dialog","modal","popover","tooltip","menu","drawer","headless","controller","framework-agnostic","a11y"],"repository":{"url":"git+https://github.com/bimetal/bimetal.git","type":"git","directory":"packages/overlay/overlay-headless"},"description":"Canonical, framework-agnostic overlay controller (open/close + dismiss policy) shared by Dialog/Popover/Tooltip/Menu/Drawer.","maintainers":[{"name":"biederbe","email":"mail@biederbeck.de"}],"readme":"# @bimetal/overlay-headless\n\nCanonical, framework-agnostic **overlay controller** — the shared core for the overlay\nfamily (Dialog first; Popover / Tooltip / Menu / Drawer to follow). It owns the open/close\n**state** and the dismiss **policy** (whether an `Esc` or backdrop dismiss is honored); it is\ndeliberately **DOM-free**. The render-layer bindings install the focus trap\n(`@bimetal/a11y-dom`), the scroll lock and the backdrop, and feed dismiss gestures back via\n`requestClose(reason)`.\n\n```ts\nimport { createOverlayController } from '@bimetal/overlay-headless';\n\nconst dialog = createOverlayController({ onOpenChange: (open) => {} });\ndialog.open();\ndialog.requestClose('esc');       // closes iff config.closeOnEsc\ndialog.requestClose('backdrop');  // closes iff config.closeOnBackdrop\ndialog.close();                   // force-close (a close button / app action)\n```\n\n- `open()` / `close()` / `toggle()` — drive the state (`close()` bypasses policy).\n- `requestClose('esc' | 'backdrop' | 'programmatic')` — the single place the dismiss\n  decision lives, so no binding diverges.\n- `getSnapshot()` / `subscribe()` — identity-stable snapshot for `useSyncExternalStore`.\n\nPart of the BIMETAL component family. Apache-2.0.\n","readmeFilename":"README.md"}