{"_id":"@dannysir/floating-components","_rev":"11-c64c2b89879dedbc0aa567c82721f71b","name":"@dannysir/floating-components","dist-tags":{"latest":"0.5.1"},"versions":{"0.1.0":{"name":"@dannysir/floating-components","version":"0.1.0","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.1.0","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"ed4c645c972f5b59caff64d60eec67bd8c6ce41f","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.1.0.tgz","fileCount":8,"integrity":"sha512-wgBqaMzEHIMt9i9iknHU5tZ1PpNeiOUABFsMEZeSxDGE+vW3NI7t2dHGxcXMyuZi42vvmCT6+43ln6qsk58Jvw==","signatures":[{"sig":"MEQCIDG2qNjBGJ9Zw8/OlcUj+EObG5ZfsExkivF0QV1d2QZ3AiA83U1OFveMrpIGRCKKUIIUwt4rVs9SdzAY4nEgXczdNQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":41628},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"0af42bf88d5ef97fff0f497eb311b58741c011f7","scripts":{"dev":"vite","build":"tsc && vite build","preview":"vite preview","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.1.0_1776154026948_0.17128654110677166","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@dannysir/floating-components","version":"0.2.0","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.0","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"ec29ab39055dbeb29b666f9a28f794afaa0ff7c3","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.0.tgz","fileCount":9,"integrity":"sha512-MjnmQsNqnf5WI/eGAlftBjHgvGWXTgXpb5mgNy55J7n/JVY+Y44U6mgtCzLiYxUuWz/8oDVxwO5aPQCA+k+emQ==","signatures":[{"sig":"MEQCIFdTrVjoWHfonJV8l0wuu/rgpJcATlbreADdMj+WTW4LAiACQmFqG5GIn5ORS6XRKv/phqBxDTcw6j2Afk15KNx8wA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":45930},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1bbc65e3bc7159904783896ab28781ae0bf5e56f","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.0_1776595146131_0.7238970143028527","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@dannysir/floating-components","version":"0.2.1","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.1","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"8e8e8fa6345147a02b42e7dd3cca4d5b7575b433","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.1.tgz","fileCount":9,"integrity":"sha512-pgt07KMlHzOwKlxkJnW00GLqQzCTckrOBbz/qZp7EFGbbPE3R5NBKs4M7EfRv+w4Usq6sKxlseS5lS6+IUWrNw==","signatures":[{"sig":"MEQCICqgJWj3gUtGiF9E5j7tPg3g86RUhStgSYuGevannD7BAiAyI3xwLtM0T04O3m5CzJdOrPI+41UKIFyiMWyHGWJ4JA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46796},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"7f46a98da3c7727f1094a62f8b763a1c3ab15457","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.1_1776598773377_0.7272715431684287","host":"s3://npm-registry-packages-npm-production"}},"0.2.2":{"name":"@dannysir/floating-components","version":"0.2.2","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.2","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"a20feea764187b2f2c7ca0c1712ea6399a30fe5d","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.2.tgz","fileCount":9,"integrity":"sha512-ZwRrgudBOHCVwEEnVcPm4RtBd7m/CYhTgKILKlpSAxrJrfBpYehthJJ/+KTqXCLSdNQfLk3HDvFhMdEgGLJ2YQ==","signatures":[{"sig":"MEUCIQC4rUDvtc1vpK/h4cDfEagHn7OYqZo5Svbatjd6p7KMuAIgJ7Rv2fByWT+qD9uAgBrBVZXyFj95ZMvEJhAPpv1OiWM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":50510},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"562da4eb9eb618ce8e0af8e1fcb7381c5027502c","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.2_1777022304644_0.16591665671266131","host":"s3://npm-registry-packages-npm-production"}},"0.2.3":{"name":"@dannysir/floating-components","version":"0.2.3","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.3","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"dbd3bf3fc4e3368693d5b4f97287a0391e27f0f0","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.3.tgz","fileCount":9,"integrity":"sha512-9X83blN6cRfGiQdLBJ3c5AhPKOPc9b9/ccyINUpMc/Sc47NATxPrp374FAWjpxuWh+k1+8GhWtz2HtqeizAssA==","signatures":[{"sig":"MEUCIBcffH27Btk6b5c+OUSBNHdVWYXvb/VWa8TQNpY8UN/GAiEArHnTv1cFRzw+6ZXtxDN/My7dp4VWZJv35euldmO0jhs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":55422},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"1f742fd39678b625504afe0f6c453e9c1a86f552","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.3_1777354298740_0.7363752231910499","host":"s3://npm-registry-packages-npm-production"}},"0.2.4":{"name":"@dannysir/floating-components","version":"0.2.4","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.4","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://github.com/dannysir/floating-component#readme","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"5341cebf5e5d6cb773080c19236617a1d22ebef3","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.4.tgz","fileCount":9,"integrity":"sha512-YC9VeZNaf09TVSkZNDr7f0jWIGEuEu5tHHrqUu+RATSKHllhvyDKigzlVixSpQuF5A59NiGuyex+oRISCKF45Q==","signatures":[{"sig":"MEYCIQDxdXokRTYu1jkZbftQO2TDcejAhwyIMkXlEyoUKU/r9QIhAI7yN/5q1q8J6LPCqoF993Iw19kziXhDSNxriIFlGd+i","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":57513},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"6cc7af367cb96b05f3cd49b36ce6bbad56b3773f","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.4_1778050970328_0.9454947389812145","host":"s3://npm-registry-packages-npm-production"}},"0.2.5":{"name":"@dannysir/floating-components","version":"0.2.5","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.2.5","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"a7ad608b4d93492863d23df32ac654e0d6f66cd1","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.2.5.tgz","fileCount":9,"integrity":"sha512-kJmBUMdyortb8Nll8CalJpXDS53yzuyI0OvksMMUIkqXTtg/SiUOS03GhNfbhe8rs57v5tNctlzUYDV+elCAWg==","signatures":[{"sig":"MEUCICxM7Rt+Rg2EiP/K4c52+s8Dc57bOyOJwQ1iExJkMEKjAiEAykNb7VZrP6ZDaJhOdhxBaeTAb+SUsRfhtRB8CjL1O3s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":58013},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"9db490171f958ea16e65232c5ac306f74d13ff35","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.2.5_1779348288178_0.4589342678523598","host":"s3://npm-registry-packages-npm-production"}},"0.3.0":{"name":"@dannysir/floating-components","version":"0.3.0","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.3.0","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"351905b0186b8dde604cd402cef66b3301dd2b3f","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.3.0.tgz","fileCount":9,"integrity":"sha512-/fRfFAcyT0qtG1FixU8VlgEMoJMKjopYN17O3+FXiIJL7k/b2XIbwm3Yyq0Sklhr9yBR7HhrsKoNfBR1s6pz8w==","signatures":[{"sig":"MEUCIQDJ+P7CBf6qLcTbbxg/9heTXn2DxWJP5SaLtW81v5PTfAIgBN64mVGTe/X3DnrRvzISdpIOFWoKmW0ldkMe9ePe37s=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":65661},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"4f1339dfdd10b6a288db5efbeeeccb96f8c8ed64","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.3.0_1779775966227_0.011784722005597992","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@dannysir/floating-components","version":"0.4.0","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.4.0","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"12e8624dccd68805fbb2f4cfab8d6157416a8f7d","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.4.0.tgz","fileCount":9,"integrity":"sha512-fuqLJbdXAk4r/pnvTXPUQ5pItlnYn+341NB1npGvUmxOFdn4xLCC5n8XZqfbhlCFVbVEVhJpcIOPLrSeOgdCKQ==","signatures":[{"sig":"MEYCIQDARSRxym86Vt4267p8IxHllgLDWS/R8llCSfuk9ZtcTQIhAJoQegG+WJHOFrABG6yKuFDzy5YrmMWJGkJkwm/itZmu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":70920},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"b0c60d83881a504857e96bba84efa6163f989e19","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.4.0_1781670966860_0.8039028361586669","host":"s3://npm-registry-packages-npm-production"}},"0.5.0":{"name":"@dannysir/floating-components","version":"0.5.0","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"author":{"name":"dannysir"},"license":"ISC","_id":"@dannysir/floating-components@0.5.0","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"dist":{"shasum":"ec8c490fd0e34952106acb851daab891bc5ab49d","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.5.0.tgz","fileCount":9,"integrity":"sha512-XMNPPeeXVW5eknO8PIWIM0niuHBUWj6bCiurSh8bvtHuWykpVRpk8j41hJVWzqLG+i9P6hp2FiBjorg2d8oIkQ==","signatures":[{"sig":"MEYCIQCA/T2FVjsCQt1gn315rbG8yaTG0mKIo5ZX9T7VOGDkjAIhAMrU4XBjBAxqWYKR8Pigv6yi9GGGvvBl010iIpqLDlKa","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":81899},"main":"./dist/index.cjs","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","engines":{"node":">=18"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"gitHead":"389f1093730bb8e996591b2c6aed05098d62372a","scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"dannysir","email":"dannysir@naver.com"},"repository":{"url":"git+https://github.com/dannysir/floating-component.git","type":"git"},"_npmVersion":"10.9.3","description":"VS Code-style tree-based panel layout for React","directories":{},"sideEffects":false,"_nodeVersion":"22.19.0","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^6.3.0","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","@types/node":"^25.5.2","@types/react":"^19.0.0","vite-plugin-dts":"^4.5.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4"},"peerDependencies":{"react":">=18.0.0"},"_npmOperationalInternal":{"tmp":"tmp/floating-components_0.5.0_1782278605149_0.14398772194901155","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"@dannysir/floating-components","version":"0.5.1","description":"VS Code-style tree-based panel layout for React","license":"ISC","author":{"name":"dannysir"},"keywords":["react","layout","panel","split","resize","drag-drop","tree"],"repository":{"type":"git","url":"git+https://github.com/dannysir/floating-component.git"},"bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","type":"module","main":"./dist/index.cjs","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","require":"./dist/index.cjs"}},"sideEffects":false,"scripts":{"build":"tsc && vite build","type-check":"tsc --noEmit","prepublishOnly":"npm run build"},"engines":{"node":">=18"},"publishConfig":{"access":"public"},"peerDependencies":{"react":">=18.0.0"},"devDependencies":{"@types/node":"^25.5.2","@types/react":"^19.0.0","@types/react-dom":"^19.0.0","@vitejs/plugin-react":"^4.3.4","react":"^19.0.0","react-dom":"^19.0.0","typescript":"^5.7.2","vite":"^6.3.0","vite-plugin-dts":"^4.5.0"},"gitHead":"fb67892a44f41dfb883ab66cf3e2ea93df8d4dad","_id":"@dannysir/floating-components@0.5.1","_nodeVersion":"22.23.1","_npmVersion":"12.0.2","dist":{"integrity":"sha512-82dn6lckcK0KHiLRqwkoc26MVZf91ECQgsubyJyBgCFKXQE+VTxpChXNfZHXLCEic185vJvFcAbnQSv6GijsYQ==","shasum":"45c7f8dfa32ed56799455984c83500395fe16d1a","tarball":"https://registry.npmjs.org/@dannysir/floating-components/-/floating-components-0.5.1.tgz","fileCount":9,"unpackedSize":83494,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dannysir%2ffloating-components@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFhQi1vR2m8bbhYUjxd38M+LQ9Jno5LgbcpV1UqgKAbMAiBbarc/G+jnICoyYcBp6Zcm1Mk7/6rmeGFsqIMsXmv7Pw=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:a0632a6d-03a4-4059-ac38-cb11ae34c47e"}},"directories":{},"maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/floating-components_0.5.1_1786407563965_0.5361852621943279"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-14T08:07:06.836Z","modified":"2026-08-11T00:19:24.490Z","0.1.0":"2026-04-14T08:07:07.087Z","0.2.0":"2026-04-19T10:39:06.261Z","0.2.1":"2026-04-19T11:39:33.515Z","0.2.2":"2026-04-24T09:18:24.785Z","0.2.3":"2026-04-28T05:31:38.873Z","0.2.4":"2026-05-06T07:02:50.508Z","0.2.5":"2026-05-21T07:24:48.319Z","0.3.0":"2026-05-26T06:12:46.376Z","0.4.0":"2026-06-17T04:36:07.011Z","0.5.0":"2026-06-24T05:23:25.295Z","0.5.1":"2026-08-11T00:19:24.187Z"},"bugs":{"url":"https://github.com/dannysir/floating-component/issues"},"author":{"name":"dannysir"},"license":"ISC","homepage":"https://dannysir-labs.vercel.app/en/libraries/floating-components","keywords":["react","layout","panel","split","resize","drag-drop","tree"],"repository":{"type":"git","url":"git+https://github.com/dannysir/floating-component.git"},"description":"VS Code-style tree-based panel layout for React","maintainers":[{"name":"dannysir","email":"dannysir@naver.com"}],"readme":"# @dannysir/floating-components\n\n[![npm version](https://img.shields.io/npm/v/@dannysir/floating-components)](https://www.npmjs.com/package/@dannysir/floating-components)\n[![npm downloads](https://img.shields.io/npm/dm/@dannysir/floating-components)](https://www.npmjs.com/package/@dannysir/floating-components)\n[![license](https://img.shields.io/npm/l/@dannysir/floating-components)](./LICENSE)\n\n[한국어 README](./README.ko.md) · [Live Demo](https://dannysir-labs.vercel.app/en/libraries/floating-components) · [API Reference](./doc/API.md)\n\nTree-based resizable and reorderable panel layout for React. Split panels horizontally or vertically, resize borders by dragging, and reorder panels via drag and drop — just like VS Code or any modern IDE.\n\n<img src=\"doc/assets/layout-overview.png\" alt=\"Layout overview\" width=\"640\" />\n\n---\n\n## What's New (0.5.0)\n\n- Border resize migrated to Pointer Events — a single path for mouse, touch, and pen\n- Touch panel drag — start from a handle or long-press (450ms), with a floating ghost tracking the finger\n- Resizers always shown on touch devices (`@media (hover: none)`)\n\nSee the full history in the [changelog](./CHANGELOG.md).\n\n---\n\n## Features\n\n- **N-ary tree structure** — `SplitNode` can hold two or more children, keeping the tree flat without unnecessary nesting\n- **Border drag resize** — drag panel borders to resize (Pointer Events based, requestAnimationFrame optimized)\n- **Panel size constraints** — set min/max with `minWidth`/`minHeight`/`maxWidth`/`maxHeight` (px); content scrolls when it overflows\n- **Drag-and-drop panel move** — reorder panels via HTML5 Drag & Drop on desktop, and a long-press-based path on touch\n- **Touch & pen support** — both border resize and panel drag work with touch and pen input (Pointer Events + a touch drag path)\n- **Multi-level drop target** — distinguishes panel edge, parent split edge, and root edge for depth-aware placement\n- **Immutable state** — all tree updates produce new objects via spread\n- **View / State separation** — `TreeLayout` (rendering) and `useLayoutTree` (state) can be used independently\n- **TypeScript** — full type declarations included\n- **ESM + CJS** — dual-format bundle output\n\n---\n\n## Installation\n\n```bash\nnpm install @dannysir/floating-components\n```\n\n> **Peer dependencies**: `react >= 18`\n\n---\n\n## Quick Start\n\n```tsx\nimport {\n  TreeLayout,\n  useLayoutTree,\n  createComponentStore,\n  type LayoutNode,\n} from \"@dannysir/floating-components\";\n\n// 1. Map string keys to the React nodes they render.\nconst store = createComponentStore({\n  \"panel-a\": <div style={{ padding: 16, background: \"#dbeafe\", height: \"100%\" }}>Panel A</div>,\n  \"panel-b\": <div style={{ padding: 16, background: \"#dcfce7\", height: \"100%\" }}>Panel B</div>,\n  \"panel-c\": <div style={{ padding: 16, background: \"#ffedd5\", height: \"100%\" }}>Panel C</div>,\n});\n\n// 2. The tree stores only string componentKeys — no React elements.\nconst initialTree: LayoutNode = {\n  type: \"split\",\n  direction: \"horizontal\",\n  size: 1,\n  children: [\n    { type: \"panel\", id: \"panel-a\", size: 1, componentKey: \"panel-a\" },\n    {\n      type: \"split\",\n      direction: \"vertical\",\n      size: 1,\n      children: [\n        { type: \"panel\", id: \"panel-b\", size: 1, componentKey: \"panel-b\" },\n        { type: \"panel\", id: \"panel-c\", size: 1, componentKey: \"panel-c\" },\n      ],\n    },\n  ],\n};\n\nconst App = () => {\n  const { tree, resizeBorder, movePanel } = useLayoutTree(initialTree);\n\n  return (\n    <div style={{ width: \"100vw\", height: \"100vh\" }}>\n      <TreeLayout tree={tree} components={store} onResizeBorder={resizeBorder} onMovePanel={movePanel} />\n    </div>\n  );\n};\n```\n\n> `TreeLayout` fills its parent by default (`width: 100%`, `height: 100%`). Use a sized parent as above, or pass `width`/`height` props to set explicit dimensions.\n\n> The tree holds only primitive values (`id`, `size`, `direction`, `componentKey`), so `JSON.stringify(tree)` round-trips cleanly. See [Persistence](#persistence) below.\n\n---\n\n## Recipes\n\n### Toggle panel visibility\n\n```tsx\nconst { panelIds, removePanel, insertPanel } = useLayoutTree(initialTree);\n\nconst togglePanel = (id: string, componentKey: string) => {\n  if (panelIds.includes(id)) {\n    removePanel(id);\n  } else {\n    insertPanel({ panel: { id, componentKey } });\n  }\n};\n```\n\n### Panel min/max size\n\n```tsx\n// min/max width for a sidebar (child of a horizontal split)\n{ type: \"panel\", id: \"sidebar\", size: 1, componentKey: \"sidebar\", minWidth: 240, maxWidth: 400 }\n```\n\n`minWidth`/`minHeight`/`maxWidth`/`maxHeight` (px) apply **only on the panel's split-direction axis** (horizontal split → width, vertical split → height). When content is larger than the panel it scrolls instead of being clipped. See [API → Panel size constraints](./doc/API.md#panel-size-constraints).\n\n---\n\n## Persistence\n\nBecause the tree contains only primitive values, you can save and restore the layout with plain `JSON.stringify` / `JSON.parse` — no custom serializer needed. The `ComponentStore` (the key → React node mapping) lives separately in your code, so it never needs to be serialized.\n\n```tsx\nconst store = createComponentStore({\n  sidebar: <Sidebar />,\n  editor: <Editor />,\n});\n\nconst STORAGE_KEY = \"my-layout\";\n\nconst load = (): LayoutNode => {\n  const saved = localStorage.getItem(STORAGE_KEY);\n  return saved ? (JSON.parse(saved) as LayoutNode) : defaultTree;\n};\n\nconst App = () => {\n  const { tree, resizeBorder, movePanel } = useLayoutTree(load());\n\n  useEffect(() => {\n    localStorage.setItem(STORAGE_KEY, JSON.stringify(tree));\n  }, [tree]);\n\n  return <TreeLayout tree={tree} components={store} onResizeBorder={resizeBorder} onMovePanel={movePanel} />;\n};\n```\n\nOn restore, the tree's `componentKey`s are looked up in the store. If a key isn't registered, the panel renders empty and a dev-mode console warning is emitted — so keep your store keys stable across releases.\n\n> Create the store once and keep a stable reference (module-level or `useMemo`). Calling `register`/`unregister` mutates the internal `Map` but does **not** trigger a re-render — to change what's on screen dynamically, swap the tree (e.g. `setTree`) rather than relying on store mutation.\n\n---\n\n## Drag & Drop\n\nDrag any panel to reorder. A translucent preview of the drop target follows the cursor, and dropping near different regions produces different placements:\n\n<img width=\"1280\" height=\"735\" alt=\"ezgif com-video-to-gif-converter\" src=\"https://github.com/user-attachments/assets/6d2ae844-8c40-4c7a-a879-a856741b3160\" />\n\n- Drop on the **panel center** → split the hovered panel\n- Drop near the **enclosing split's edge** → place as a sibling of the parent split\n- Drop near the **root's edge** → place at the top level\n\n### Touch devices\n\nOn touch, start a drag by **long-pressing (~0.45s)** a panel or pressing the handle set via `dragHandleSelector`. A translucent ghost follows your finger and the panel under the release point becomes the drop target. Border resize is Pointer Events based too, so it works with touch and pen.\n\n### Restrict to a single axis\n\nBy default `TreeLayout` uses 4-edge classification (`direction=\"complex\"`). Pass `direction` to lock the layout to one axis:\n\n```tsx\n<TreeLayout\n  tree={tree}\n  direction=\"vertical\"\n  onResizeBorder={resizeBorder}\n  onMovePanel={movePanel}\n/>\n```\n\n- `\"vertical\"` — drops classified by the Y midline (top/bottom only); only vertical splits are produced\n- `\"horizontal\"` — drops classified by the X midline (left/right only); only horizontal splits are produced\n- `\"complex\"` *(default)* — 4-edge classification with both axes\n\nIf the input `tree` contains splits whose direction conflicts with the prop, they are auto-normalized and a dev-mode console warning is emitted. `useLayoutTree.splitPanel(...)` direct calls are not constrained.\n\nSee [API Reference → `direction`](./doc/API.md#props).\n\nWire it up with `useLayoutTree`'s `movePanel`:\n\n```tsx\n<TreeLayout tree={tree} onResizeBorder={resizeBorder} onMovePanel={movePanel} />\n```\n\nSee [API Reference → Drag & Drop](./doc/API.md#drag--drop) for the full placement rules and the `depth` parameter.\n\n---\n\n## Documentation\n\n- **[API Reference](./doc/API.md)** — full props, hook return values, tree utilities, types\n- **[CHANGELOG](./CHANGELOG.md)**\n\n---\n\n## License\n\nISC\n","readmeFilename":"README.md"}