{"_id":"flexdesk","_rev":"9-8121dcbcf16876423e9d62e9a6c0a185","name":"flexdesk","dist-tags":{"latest":"0.4.5"},"versions":{"0.1.0":{"name":"flexdesk","version":"0.1.0","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.1.0","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"3edde23797e9745baa3f256d132d8fcef172e3c1","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.1.0.tgz","fileCount":124,"integrity":"sha512-67s3Ki6UOFzP5R5OJKtHiO3Qmz5wcDumikesC+O6O2ie8bJBw2dLFPjHfUJ6sVamQ4qkMCFLuCtj9XeIkO3g6g==","signatures":[{"sig":"MEYCIQC/eFx7AjKr64UUIC/dGHc6ziUT5tA4dQwOm2Byv53LyAIhAJNWqclhxJd5dakpvhjF1A3TswhgkxFlG69LlQQvgB7T","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4130865},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"d20d3c23ce32c33a9bf33478f61813626dabdaf6","scripts":{"build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.11.0","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.1.0_1785416836517_0.40452709312562907","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"flexdesk","version":"0.2.0","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.2.0","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"d367cd6f0b2591371960451e5239d0e0c346ac8e","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.2.0.tgz","fileCount":124,"integrity":"sha512-8gF6SJqJmLNCOPfph6ZwFOCILMP3teLbbRr5PLtE2kFQufUG/Ty9dkJiwhJua30W0d8sI8+eL91urOemJD/OKA==","signatures":[{"sig":"MEQCIBOLeODXo0EzqYUQ0nPj0KtcxiLaI74IyHIAmJlT1Ba7AiB1sCBGDFNauHNinLs2msZy1/y56fqKEU9wjbeNXTRUeA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4130865},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"d4cfe5ce17d23cab95b7bdb47789eaaabe7c2153","scripts":{"build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.11.0","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.14.1","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.2.0_1789026385030_0.725579621125577","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"flexdesk","version":"0.3.0","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.3.0","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"d61ca6b74f1b1940a92e78b8f71752057d8e1a04","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.3.0.tgz","fileCount":127,"integrity":"sha512-BoKAtsYmOgz9eLy95t5LqHnfcDYH9pLmFB+9eDS0uvkeibTX3pgXFfnF+z6DYc8e57YSQdcId+yWH8YrmK/Jng==","signatures":[{"sig":"MEUCIQDNF80giPIQN7KPDwD3hzxBAb79AzxZBsBBHB6kPRbwFwIgev4kaNVwnxTdvmro+lYZjt8HAA6SAsDO+zuFDPa3Y64=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDfvYrCXNYNBO8zhiVKsIRaA3TDQY2F3zQi/uvN3pFPBQIhAKyfunScxY08jDS/UAkKyedXXc2DT3YIEAcv3GDqnbBG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5297759},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"0e407bbc5f71f44a17d37648eff489cbddcee923","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.3.0_1789210728461_0.9944206338163137","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"flexdesk","version":"0.4.0","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.4.0","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"73c5d25acd1eebb22710c0d616d284871c8d552b","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.0.tgz","fileCount":128,"integrity":"sha512-JVcssNJ1ReT3wHAPzfuTQRUtjB+Ddh/4ciUHbUIL8FKwVXE/UhlAA2sV4/2SQesEkiX4MwjsDiVfK3QF04mPpQ==","signatures":[{"sig":"MEUCIQD26l8XDpFt1jnFqw5r8wiZi2QGpAAndJxYbDeveDIuRgIgZHkMlH0KJ1LIFrmiz3naAbayXia1ng+vWhaFu8maixk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAzt8rUEmMUSXOEblkwLEI/lcEDtYLKxGQdR3pwZeG7jAiEAtuFCpJjdoP+7y9V07WaY/iYgG9qaNoYXT3ul0X+WGK4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5344703},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"0e407bbc5f71f44a17d37648eff489cbddcee923","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.4.0_1789289085803_0.34442228618307147","host":"s3://npm-registry-packages-npm-production"}},"0.4.1":{"name":"flexdesk","version":"0.4.1","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.4.1","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"c00ddd896e7da5baea8dfc19b083d870df06beab","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.1.tgz","fileCount":128,"integrity":"sha512-4PrneYPdr642TEXogKge7JQubJDZv6uCcBnkBOz4I4DcSsmtgmg/lNjtpHK1NXokszJxHs7HyjHo3Ejpq1bU2g==","signatures":[{"sig":"MEUCIFaC5ym6omDcB+k2n20/MkDgi0KE++fActQJgArFKx/DAiEAi27kITRrDQcJ/n7ERX8aXSgWdA2hk4BSOg6pAHj/JAc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCzb6Vv0hkm3EKSP3jDCqSU2HFnZRrDjVY++0QfpWP6BwIgEZ0RtnKwoO0NNmJe9+cHCyZ6BV+Q1SGdQJ3XkEQTPp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5359566},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"0e407bbc5f71f44a17d37648eff489cbddcee923","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.4.1_1789290964077_0.6661174779891621","host":"s3://npm-registry-packages-npm-production"}},"0.4.2":{"name":"flexdesk","version":"0.4.2","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.4.2","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"fb3785053da1a31901aa8d94ee192f9ed305f744","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.2.tgz","fileCount":128,"integrity":"sha512-1fpjN+t3L/P/yrczgDBPominSCre03dNYko/+4xNv7WMU55CyU7gL0CaQ/6G6HL9lvotrOWA5iHIL3dd8zZmtw==","signatures":[{"sig":"MEYCIQCY0xcq0pP0afG6e82y/lNKT9cYTeFwonPgKLY43tvNCwIhAOkwxh6SK1djAyV8OHWBSZZVJa+oZdZ1D7/d0vcJ3UEu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIE3kxoL9BF8AXayq1Oo84IlC5d4S10D2Hnv13b5vfUhWAiBPKAACJcibcF6eQgW4MToZxx/SJbL5WtZg+S1HSHPL4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5379078},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"0e407bbc5f71f44a17d37648eff489cbddcee923","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.4.2_1789292213980_0.26143903484904407","host":"s3://npm-registry-packages-npm-production"}},"0.4.3":{"name":"flexdesk","version":"0.4.3","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.4.3","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"7d4cb798e35c69d220d0147edcf33f8c98c09766","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.3.tgz","fileCount":128,"integrity":"sha512-HLSA8z45YRZksyL8t+gO1KoGBoO7HmbwAF8OABf9Rm5AZVuioV4hnNdBDfWr588mI+dwoLnpHCNhDH6hjxyP7w==","signatures":[{"sig":"MEYCIQDK8gdvcddi4OHSDEIpyIl89R/IEY+03QCJhkvQeGp5ggIhALjPcLQwToi9a5y2fHlfIqDnCYTIN+bTmDyhoPe9NvDG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGXux7/QoARuMAr9SDP7MRUe44UTe7LG7gOEaX+l/Nd+AiEArF671mhNYQ8Po4Qo3BDQBXzFNIjyAxgpf7NYicjCNXg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5387729},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"a72e1636f90f6b01ced98ae0de4c0ad8648cfd27","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.4.3_1789302213319_0.46017732328463357","host":"s3://npm-registry-packages-npm-production"}},"0.4.4":{"name":"flexdesk","version":"0.4.4","keywords":["tiling","window-manager","datatable","command-palette","ui"],"license":"MIT","_id":"flexdesk@0.4.4","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"homepage":"https://github.com/nor-os/FlexDesk","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"393927ad21ecd7d828a5ef942202098512655c38","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.4.tgz","fileCount":129,"integrity":"sha512-EDO2ewBkMFomoP4GX1LOjRbXsBvLNGk5Wq018hZA2IgeGKIAzG9LnBbp1yM9/FCBouofpniK81pG5p8OjYS9aQ==","signatures":[{"sig":"MEUCIQDM6r8s85++/b1dFKAzPI02+INm5CQnlnlPkTle2GzCWAIgJNLW+/mJotaZsibBXfDODJE+CMQqYNWg9fTBmOsVg+w=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCwbLhn/ECPFPAZwSczLDf3qli9ZPK0jvhcXBeHNWBlCwIgTquptywZKRS2RSSv9WxcHTB86Ig1IUIOxYcK0a+ZWS4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5411416},"type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"73c5bf31e493fec34ff31b56a7faa82b6514a315","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/flexdesk_0.4.4_1789304685303_0.28305359346274384","host":"s3://npm-registry-packages-npm-production"}},"0.4.5":{"_id":"flexdesk@0.4.5","bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"dist":{"shasum":"6edcfd3a9158d4e8baf38c442462f4b79b9bd4ec","tarball":"https://registry.npmjs.org/flexdesk/-/flexdesk-0.4.5.tgz","fileCount":130,"integrity":"sha512-7RT0Jj5/jSIzOag2VSuAZmKjDTtpARwxAamsujyDiqeeZXUtNRw4X8ZQqSLAl+SQHEB6oer2fnL6YxWBU5rWBg==","signatures":[{"sig":"MEYCIQCaf8QSqE3sFcqFu5EVJqmGVnMYdHMeezhYivs6wca67wIhALYHWM196isK1+OJZHd6HzatMAJCsaTiv5u0R6U9Bvuc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCQu4pumpTHrQaeakdShByH2okjuEwb8u1+DepSA0t3/QIhAKw5BilZ3lu8bi32k7hDAPj1/5J+1J/byRaDcHsPIdnX"}],"unpackedSize":5464088},"name":"flexdesk","type":"module","exports":{"./wm":{"import":"./dist/wm.js","development":"./wm.js"},"./css":"./dist/flexdesk.css","./core":{"import":"./dist/core.js","development":"./core.js"},"./host":{"import":"./dist/host.js","development":"./host.js"},"./tiles":{"import":"./dist/tiles.js","development":"./tiles.js"},"./charts":{"import":"./dist/charts.js","development":"./charts.js"},"./editor":{"import":"./dist/editor.js","development":"./editor.js"},"./widgets":{"import":"./dist/widgets.js","development":"./widgets.js"},"./css/tokens":"./css/tokens.css"},"gitHead":"eb7283382c2ae5b628d886f8276f88797b989c48","license":"MIT","scripts":{"test":"node tests/run.mjs","build":"node build.mjs","check":"node build.mjs --check"},"version":"0.4.5","_npmUser":{"name":"nor-os","email":"norman@norwie.net"},"homepage":"https://github.com/nor-os/FlexDesk","keywords":["tiling","window-manager","datatable","command-palette","ui"],"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"_npmVersion":"11.6.2","description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","directories":{},"maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"sideEffects":["*.css"],"_nodeVersion":"24.12.0","_hasShrinkwrap":false,"devDependencies":{"esbuild":"^0.28.1"},"peerDependenciesMeta":{"plotly.js":{"optional":true},"monaco-editor":{"optional":true}},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/flexdesk_0.4.5_1789307034334_0.06678562993226889"}}},"time":{"created":"2026-07-30T13:07:16.147Z","modified":"2026-09-13T13:43:54.634Z","0.1.0":"2026-07-30T13:07:16.675Z","0.2.0":"2026-09-10T07:46:25.196Z","0.3.0":"2026-09-12T10:58:48.567Z","0.4.0":"2026-09-13T08:44:45.956Z","0.4.1":"2026-09-13T09:16:04.212Z","0.4.2":"2026-09-13T09:36:54.088Z","0.4.3":"2026-09-13T12:23:33.441Z","0.4.4":"2026-09-13T13:04:45.437Z","0.4.5":"2026-09-13T13:43:54.459Z"},"bugs":{"url":"https://github.com/nor-os/FlexDesk/issues"},"license":"MIT","homepage":"https://github.com/nor-os/FlexDesk","keywords":["tiling","window-manager","datatable","command-palette","ui"],"repository":{"url":"git+ssh://git@github.com/nor-os/FlexDesk.git","type":"git"},"description":"A tiling window manager and widget set for desktop-class web applications. Zero runtime dependencies.","maintainers":[{"name":"nor-os","email":"norman@norwie.net"}],"readme":"# FlexDesk\n\nA tiling window manager and widget set for desktop-class web applications.\n\nTiles that split and tab, a command palette, dockable panels, virtual desktops, a\nDataTable with sticky headers and CSV export, managed windows, modals, toasts,\ntrees and context menus.\n\n**Zero runtime dependencies.** No React, no framework, nothing. If you install\nFlexDesk, you install FlexDesk.\n\nFlexDesk was extracted from [EcoAgent](https://github.com/nor-os/EcoAgent), a\nmacroeconomic simulation platform, and it knows nothing about economics: no\napplication vocabulary, no import of anything application-specific, in any\nshipped file.\n\n```bash\nnpm install flexdesk\n```\n\nOr vendor `dist/` and load it through an import map — no bundler, no build step.\nThat is exactly what EcoAgent does:\n\n```html\n<script type=\"importmap\">\n{ \"imports\": {\n    \"@flexdesk/core\":    \"./vendor/flexdesk/core.js\",\n    \"@flexdesk/host\":    \"./vendor/flexdesk/host.js\",\n    \"@flexdesk/wm\":      \"./vendor/flexdesk/wm.js\",\n    \"@flexdesk/widgets\": \"./vendor/flexdesk/widgets.js\"\n} }\n</script>\n<link href=\"./vendor/flexdesk/flexdesk.css\" rel=\"stylesheet\" />\n```\n\n## Seven entry points\n\nBecause someone who wants a DataTable should not have to download a window\nmanager, and neither of them should drag in a plotting engine or a code editor.\n\n| Entry | Size | What is in it |\n|---|---|---|\n| `@flexdesk/core` | 30 kB | Event bus, settings store, logging, state machine, state guard |\n| `@flexdesk/host` | 5 kB | The host port (below) |\n| `@flexdesk/wm` | 166 kB | Tiling window manager: tabs, splits, desktops, command palette, taxonomy, `createShell()` |\n| `@flexdesk/widgets` | 192 kB | DataTable, modals, managed windows, toasts, trees, panels, context menus |\n| `@flexdesk/charts` | 26 kB | Plotly wrapper, chart types, subplot layouts, downsampling, plot windows |\n| `@flexdesk/tiles` | 67 kB | Draggable/resizable widget grid, tile base class, widget registry, layout persistence |\n| `@flexdesk/editor` | 62 kB | Monaco loader + factory, multi-file tab bar, search, split panes, undo manager |\n\nThey share code through chunks, so importing two of them does **not** give you two\nevent buses — and therefore not two copies of every module-level singleton. A test\nasserts each kernel symbol is defined exactly once across the whole `dist/`.\n\nTwo different things here are called \"tiles\", which is unfortunate but honest to\nthe code: `@flexdesk/wm` tiles the *window*; `@flexdesk/tiles` is a dashboard\n*widget grid*.\n\n## Hello, shell\n\n```js\nimport { createShell, createTaxonomy, createEntityCatalog } from '@flexdesk/wm';\nimport { createHost } from '@flexdesk/host';\nimport { DataTable } from '@flexdesk/widgets';\n\nconst store = new Map();\n\nconst shell = await createShell({\n    root: document.getElementById('app'),\n\n    // YOUR ontology. FlexDesk has none.\n    taxonomy: createTaxonomy({\n        root: 'cosmos',\n        kinds: {\n            cosmos: { label: 'Cosmos', isTopNav: true, sources: ['planet'] },\n            planet: { label: 'Planet', icon: 'circle' },\n            moon: {\n                label: 'Moon',\n                // \"jupiter/europa\" — your naming convention, not the library's.\n                ancestors: ({ id }) => {\n                    const i = String(id).indexOf('/');\n                    return i > 0 ? [{ kind: 'planet', id: String(id).slice(0, i) }] : [];\n                },\n            },\n        },\n    }),\n\n    entities: createEntityCatalog({ sources: [/* what the palette searches */] }),\n    content:  { planet: (hostEl, props) => { /* render a tile */ } },\n\n    // Where persistence goes. An in-memory Map is a perfectly good host.\n    host: createHost({\n        state: {\n            read:  async (k) => store.get(k) ?? null,\n            write: async (k, v) => (store.set(k, v), true),\n        },\n    }),\n\n    // Chrome is ELEMENTS, not selectors. The library never guesses at your markup.\n    chrome: { topNav: document.getElementById('nav') },\n});\n```\n\nA working version of exactly this — planets and moons, a mock host, no backend —\nlives in `demo/`.\n\n### Opt-in shell features\n\nThese change what the user sees, so all of them are off until you ask:\n\n```js\nawait createShell({\n    // …everything above…\n    snapPromotion: true,     // drag a floating window onto a tile: it snaps, and docks back in\n    promoteInPlace: true,    // a window floated out of a tile stays inside that tile's pane\n    backToOpenList: true,    // Back in a record opened beside its list closes onto that list\n    floatActiveTab: true,    // floating a tile takes the tab on screen, not the whole pane\n    chrome: {\n        topNav: document.getElementById('nav'),\n        zoom:   document.getElementById('status-bar'),   // content zoom, 50–200%\n    },\n});\n```\n\n**`chrome.zoom`** paints a − / track / + / readout control into the element you\npass, restores the saved zoom through the host's `state` capability, and scales\nthe content of tiles and floating windows. It deliberately scales *content only*\n— never the root, a tile's frame or a window's frame — because CSS `zoom`\nestablishes a scaled coordinate space and every window drag, resize and snap\nmeasures in real pixels. `shell.chrome.zoom` exposes `get()` and `set(percent)`\nfor a settings pane. An embedder that builds its own `WindowManager` instead of\ncalling `createShell` mounts the same control with `mountZoomControl(el, { root,\nhost })`.\n\n**`backToOpenList`** is for apps that open a record from a list in a new tab.\nWithout it, Back in that record has no history to pop, so it walks the taxonomy\nup and rewrites the record into its parent, and the tile now shows the list\ntwice. With it, Back closes the record tab and activates the list it came from:\nthe nearest tab to the left, else to the right, that is not a record (no\n`props.id`) and belongs to the same top-nav section. Per-tab history still comes\nfirst, and a record with no such list beside it still walks up in place.\n\n**`floatActiveTab`** is for apps whose tabs are separate records rather than\nviews of one pane. The float button, Alt+F and the tile menu take only the tab\non screen and leave its siblings in the tile, so the window holds one tab and\ndraws no strip. Without it the whole pane floats, strip and all.\n\n**Back and the breadcrumb are one rule.** `wm.navigateBack()` (Backspace) and\n`wm.navigateUp(kind, props, { ctx })` (every breadcrumb crumb) share it. With\n`backToOpenList`, a record whose section has a list open closes onto that list;\notherwise Back walks the taxonomy up and a crumb navigates to its level, in\nplace. A crumb naming an entity, such as an epic above a story, opens that\nentity. `navigate` stays the verb for going to exactly a target; use\n`navigateUp` for anything that means \"up to this level\".\n\nA filter or other props passed to `openInPrimary` for a list that is already\nshowing are applied to it. A bare open, such as a top-nav click, keeps the tab\nas you left it.\n\n**Back in a floating window** always acts on that window, whichever option is\nset. The last click decides: inside a window, Backspace walks that window up;\nanywhere else, it walks the focused tile as before. With `backToOpenList`, a\nrecord in a window closes onto an open list of its section, first among the\nwindow's own tabs and then in any tile of its desktop.\n\n### Column sizing\n\n`fitColumns(columns, avail)` (from `@flexdesk/widgets`) turns per-column\nmeasurements into widths. Pass each column's widest cell (`natural`), the width\nmost cells fit (`typical`), the header label (`header`) and any user-dragged\nwidth (`pinned`). Short columns such as ids, dates and statuses keep their full\nvalues, and free-text columns (`text`, or anything 240px and wider) take the\nrest. When space runs short, short columns lose their rare outliers first,\nthen text shrinks to a floor. The widths are fractional and add up to `avail`\nexactly whenever the floors fit. `DataTable` does not use it yet; an embedder\nthat measures its own columns can.\n\n### Scrollbars\n\n`installAutoScrollbars(root)` (from `@flexdesk/widgets`) replaces the browser's\nscrollbars under `root` with thin overlay bars that show while an element is\nhovered or scrolling and fade out afterwards. Native bars are hidden, so no\nelement reserves layout width for one. The overlay bars live in one fixed\nlayer, so a container that redraws its contents cannot lose its bar, and\ntextareas get one too. Containers that already use `installOverlayScrollbar`\nkeep their own.\n\n## The host port\n\nFlexDesk never touches `pywebview`, `fetch`, `localStorage` or the filesystem. It\nasks a **Host**, and you supply one. `createHost({...})` validates the capabilities\nyou pass and freezes the result; anything you leave out is simply absent, and the\nlibrary degrades rather than throwing.\n\n```js\ncreateHost({\n    state:   { read, write },              // layout persistence\n    dialogs: { saveFile },                 // optional — CSV export falls back to a Blob\n    window:  { minimize, maximize, ... },  // optional — no native chrome buttons without it\n})\n```\n\n`NULL_HOST` is a valid host with nothing behind it.\n\n## Peer dependencies\n\n`@flexdesk/charts` needs Plotly (4.4 MB). `@flexdesk/editor` needs Monaco (14 MB).\nNeither is bundled, and **neither is guessed at**:\n\n```js\nimport { setPlotlySource } from '@flexdesk/charts';\nimport { setMonacoBasePath, setDefaultLanguage } from '@flexdesk/editor';\n\nsetPlotlySource('/vendor/plotly/plotly.min.js');\nsetMonacoBasePath('/vendor/monaco');\nsetDefaultLanguage('my-dsl');              // default: 'plaintext'\n```\n\nThere is deliberately **no default path**. A hardcoded `'vendor/monaco'` is one\napplication's directory layout, and for everyone else it is a 404 that surfaces as\nan editor which silently never appears. `initMonaco()` throws instead.\n\nIf you already load Plotly yourself (a `<script>` tag that sets `window.Plotly`),\nthe chart loader short-circuits and you can skip `setPlotlySource`.\n\n## Layouts are keyed by whatever you key them by\n\n`@flexdesk/tiles` stores layouts under keys **you** choose and resolves a starting\nlayout through a callback **you** supply:\n\n```js\nimport { configureLayoutPersistence } from '@flexdesk/tiles';\n\nconfigureLayoutPersistence({\n    layoutsKey: 'myapp.layouts',                          // default: 'twm.tiles.layouts'\n    resolveTemplate: (ctx) => pickTemplate(ctx) ?? null,  // null => empty grid\n});\n```\n\n**Configure it before anything reads it.** The store is a singleton; built before\nyou supply your key, it is built with the default, and every layout your users have\nsaved becomes silently invisible. That is a data-loss bug that raises no error, so\nthe configuration step is explicit rather than lazy.\n\nA layout is keyed by *something* — a document, a user, a run — and the library has\nno opinion about which. It calls that a `contextId`.\n\n## Styling\n\nThree stylesheets, and that is the whole CSS contract:\n\n| | |\n|---|---|\n| `dist/tokens.css` | Every rule reads `var(--…)` from here. Swap this one file and the shell restyles. |\n| `dist/reset.css` | The reset. |\n| `dist/flexdesk.css` | The library. Every class is `twm-` prefixed (the original working name; the prefix is stable and not worth a breaking rename). |\n\nIcons are rendered by applying the `material-symbols-outlined` class. FlexDesk does\nnot ship the font — supply it from Google Fonts or self-host. Without it, icons fall\nback to their text names and nothing breaks.\n\n## Build\n\n```bash\nnpm install\nnpm run build      # -> dist/\n```\n\n`dist/` is committed. The packaging decision is *prebuilt dist*: this repo owns the\nbuild so that a consumer with no bundler can load the library through a plain import\nmap. See `.gitignore` — it says so there too, because it is the kind of thing someone\n\"tidies up\" later.\n\n## Licence\n\nMIT. See [`LICENSE`](LICENSE) and [`THIRD_PARTY_LICENSES.md`](THIRD_PARTY_LICENSES.md).\n","readmeFilename":"README.md"}