{"_id":"@affino/overlay-host","_rev":"2-34011b339e4a06e12ae6fcd04cc3ca91","name":"@affino/overlay-host","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@affino/overlay-host","version":"1.0.0","keywords":["overlay","portal","scroll-lock","keydown","host"],"author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"license":"MIT","_id":"@affino/overlay-host@1.0.0","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"homepage":"https://affino.dev","bugs":{"url":"https://github.com/affinio/affinio/issues"},"dist":{"shasum":"17048dac9514be4b6271dffbca75777fc455fecf","tarball":"https://registry.npmjs.org/@affino/overlay-host/-/overlay-host-1.0.0.tgz","fileCount":6,"integrity":"sha512-fvHMEvBPRdcrBeYaKY2Q3ZLas3D7KKDUe4nJeMMp19sY5PA/C8ylHAjhIVse2monjgJtPveVdoBGMgmcMO/K7A==","signatures":[{"sig":"MEYCIQD8nJUGMi5JHT8ZSiq2UC2lnJEBdp4uvZFDtPn8cCc2ZwIhAMx+PquxnrWbJs6RSBBqqApTtHJmVP+qCCFzq1bSQbUl","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":9112},"main":"dist/index.js","type":"module","_from":"file:affino-overlay-host-1.0.0.tgz","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"scripts":{"build":"tsc -p tsconfig.json"},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"_resolved":"/tmp/5f9829d22c205d08ed60ec261a5115a7/affino-overlay-host-1.0.0.tgz","_integrity":"sha512-fvHMEvBPRdcrBeYaKY2Q3ZLas3D7KKDUe4nJeMMp19sY5PA/C8ylHAjhIVse2monjgJtPveVdoBGMgmcMO/K7A==","repository":{"url":"git+https://github.com/affinio/affinio.git#main","type":"git"},"_npmVersion":"10.8.2","description":"Utilities for managing overlay portal hosts, scroll locking, and shared keydown handlers","directories":{},"sideEffects":false,"_nodeVersion":"20.19.6","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/overlay-host_1.0.0_1769943372391_0.7318244212650327","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@affino/overlay-host","version":"1.1.0","author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"type":"module","description":"Utilities for managing overlay portal hosts, scroll locking, and shared keydown handlers","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js"}},"main":"dist/index.js","types":"dist/index.d.ts","sideEffects":false,"repository":{"type":"git","url":"git+https://github.com/affinio/affinio.git#main"},"homepage":"https://affino.dev","keywords":["overlay","portal","scroll-lock","keydown","host"],"license":"MIT","bugs":{"url":"https://github.com/affinio/affinio/issues"},"module":"dist/index.js","scripts":{"build":"tsc -p tsconfig.json"},"_id":"@affino/overlay-host@1.1.0","_integrity":"sha512-f1adFx/bnNuO/Z4CSeUvGtLyr09/4zDIHpJuVs8LgCEsM1hXrxX6aJ4Qir5ujI1j/y5S+R1G22fapANDYMikWQ==","_resolved":"/tmp/0d93b2fb0aa230890a907d15b87e149a/affino-overlay-host-1.1.0.tgz","_from":"file:affino-overlay-host-1.1.0.tgz","_nodeVersion":"20.20.0","_npmVersion":"10.8.2","dist":{"integrity":"sha512-f1adFx/bnNuO/Z4CSeUvGtLyr09/4zDIHpJuVs8LgCEsM1hXrxX6aJ4Qir5ujI1j/y5S+R1G22fapANDYMikWQ==","shasum":"87c73ae54e60a5c7d72e35d3e53fea3dff7092b1","tarball":"https://registry.npmjs.org/@affino/overlay-host/-/overlay-host-1.1.0.tgz","fileCount":6,"unpackedSize":18402,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDLFzmmTKqba//ZRwSs8IXId6KHvrxzImLebO0oy9AYwQIgIhwiFACfcnkn6bIimp/oUNnK1myZgvazB2T/BJPzQ2Q="}]},"_npmUser":{"name":"affino","email":"anton.pavlov.personal@gmail.com"},"directories":{},"maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/overlay-host_1.1.0_1771584326406_0.774700704892912"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-01T10:56:12.226Z","modified":"2026-02-20T10:45:26.660Z","1.0.0":"2026-02-01T10:56:12.538Z","1.1.0":"2026-02-20T10:45:26.541Z"},"bugs":{"url":"https://github.com/affinio/affinio/issues"},"author":{"name":"Anton Pavlov","email":"a.pavlov@affino.dev"},"license":"MIT","homepage":"https://affino.dev","keywords":["overlay","portal","scroll-lock","keydown","host"],"repository":{"type":"git","url":"git+https://github.com/affinio/affinio.git#main"},"description":"Utilities for managing overlay portal hosts, scroll locking, and shared keydown handlers","maintainers":[{"name":"affino","email":"anton.pavlov.personal@gmail.com"}],"readme":"# @affino/overlay-host\n\nTiny helpers for creating a shared overlay portal host, toggling scroll lock, and wiring a single global `keydown` listener.\n\n```ts\nimport {\n  ensureOverlayHost,\n  createScrollLockController,\n  createGlobalKeydownManager,\n  getFloatingRelayoutMetrics,\n  resetFloatingRelayoutMetrics,\n  setFloatingRelayoutMetricsEnabled,\n} from \"@affino/overlay-host\"\n\nensureOverlayHost()\n\nconst scrollLock = createScrollLockController()\nconst keydown = createGlobalKeydownManager((event) => {\n  if (event.key === \"Escape\") {\n    // close the active surface\n  }\n})\n\nscrollLock.lock()\nkeydown.activate()\n\nsetFloatingRelayoutMetricsEnabled(true)\nresetFloatingRelayoutMetrics()\nconsole.table(getFloatingRelayoutMetrics().sources)\n```\n\n- `ensureOverlayHost()` – creates (or returns) a `<div>` that you can use as a Teleport/Portal root.\n- `createScrollLockController()` – body-level scroll lock that survives mobile Safari keyboard shenanigans.\n- `createGlobalKeydownManager()` – reference-count-free helper for attaching/detaching one handler.\n- `setFloatingRelayoutMetricsEnabled()` / `getFloatingRelayoutMetrics()` / `resetFloatingRelayoutMetrics()` – opt-in relayout counters for floating controllers (debug/dev usage).\n\nEach helper runs no-ops when `document`/`window` are unavailable, so you can safely import them in SSR contexts.\n","readmeFilename":"README.md"}