{"_id":"@cristiancosano/pallet-builder","_rev":"6-d962fd758383f71e45f6e94d3b57bceb","name":"@cristiancosano/pallet-builder","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.0":{"name":"@cristiancosano/pallet-builder","version":"0.1.0","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","_id":"@cristiancosano/pallet-builder@0.1.0","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"homepage":"https://github.com/cristiancosano/pallet-builder#readme","bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"dist":{"shasum":"6a76a7ca793259382fcb590879c2a3414594f72e","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.0.tgz","fileCount":93,"integrity":"sha512-IMvYuhWGhIrRrufDMMxeJVqh+UEF3VqOOpvIxaD8fZFFYHq+v5ax6KArVJBqNLaj9p4x9iAALCYWy9AMSyFS5g==","signatures":[{"sig":"MEYCIQCOaBI+ZAJnzS1ZxTE1nuIh6G5d9+I1KY4jM4Ix4wpchAIhAPcIcRN5qqjaP3hr0oPfeTzd65Ur2GE99/jERVpS+Qpu","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5552659},"main":"./dist/pallet-builder.js","type":"module","_from":"file:cristiancosano-pallet-builder-0.1.0.tgz","types":"./dist/pallet-builder.d.ts","exports":{".":{"types":"./dist/pallet-builder.d.ts","import":"./dist/pallet-builder.js"}},"scripts":{"dev":"vite","lint":"eslint .","test":"vitest run","build":"vite build && tsc -p tsconfig.lib.json","preview":"vite preview","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"cristiancosano","email":"cristiancosano@icloud.com"},"_resolved":"/private/var/folders/06/d0g3lr3j697fdgj1y7vy0r1w0000gn/T/b918a1cf9b8c826cd54799ae2a052ad9/cristiancosano-pallet-builder-0.1.0.tgz","_integrity":"sha512-IMvYuhWGhIrRrufDMMxeJVqh+UEF3VqOOpvIxaD8fZFFYHq+v5ax6KArVJBqNLaj9p4x9iAALCYWy9AMSyFS5g==","repository":{"url":"git+https://github.com/cristiancosano/pallet-builder.git","type":"git"},"_npmVersion":"10.9.4","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","directories":{},"_nodeVersion":"22.21.1","dependencies":{"react":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11","react-dom":"^19.2.0","@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","eslint":"^9.39.1","vitest":"^4.0.18","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/three":"^0.182.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.4","@vitejs/plugin-react":"^5.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/pallet-builder_0.1.0_1770991879446_0.08070668325040864","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@cristiancosano/pallet-builder","version":"0.1.1","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","_id":"@cristiancosano/pallet-builder@0.1.1","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"homepage":"https://github.com/cristiancosano/pallet-builder#readme","bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"dist":{"shasum":"93e5df62d66663b19f62ef300395345b304e98b9","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.1.tgz","fileCount":93,"integrity":"sha512-7zqRN0PdKIeKpF76f9US9+2Abc0Xx32VvBqJySf0JRACawzUf0ZLkA+Uk1FCORuGGQ7W4zHWzDnzjt+/TOQsmg==","signatures":[{"sig":"MEUCIQCRUucxkI4C75FoQjm8JFpeKw5/jUVCsPMAM3JjYP1MmQIgJUPZ1IYBASdx5P9m2UDpA+SbuNzjChD0cGTg6tY9cL4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cristiancosano%2fpallet-builder@0.1.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5552659},"main":"./dist/pallet-builder.js","type":"module","_from":"file:cristiancosano-pallet-builder-0.1.1.tgz","types":"./dist/pallet-builder.d.ts","exports":{".":{"types":"./dist/pallet-builder.d.ts","import":"./dist/pallet-builder.js"}},"scripts":{"dev":"vite","lint":"eslint .","test":"vitest run","build":"vite build && tsc -p tsconfig.lib.json","preview":"vite preview","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:259c0796-76a4-488c-b85c-bad9215efaf7"}},"_resolved":"/tmp/84022525b96af5b69863f4d5b0d061f2/cristiancosano-pallet-builder-0.1.1.tgz","_integrity":"sha512-7zqRN0PdKIeKpF76f9US9+2Abc0Xx32VvBqJySf0JRACawzUf0ZLkA+Uk1FCORuGGQ7W4zHWzDnzjt+/TOQsmg==","repository":{"url":"git+https://github.com/cristiancosano/pallet-builder.git","type":"git"},"_npmVersion":"11.6.2","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11","react-dom":"^19.2.0","@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","eslint":"^9.39.1","vitest":"^4.0.18","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/three":"^0.182.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.4","@vitejs/plugin-react":"^5.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/pallet-builder_0.1.1_1770994906032_0.8213077388958991","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@cristiancosano/pallet-builder","version":"0.1.2","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","_id":"@cristiancosano/pallet-builder@0.1.2","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"homepage":"https://github.com/cristiancosano/pallet-builder#readme","bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"dist":{"shasum":"b78aa2cfe2a74845ad4b45532fb9e73ef05f5447","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.2.tgz","fileCount":93,"integrity":"sha512-ECYJmWwhZ+MpIqQ1Fk0KcqK1R70KPEIrVnqlrQikqS1QSioppYBq3qFtF2AzuWSoDqMFN65dAOFKnaz+NXhfyQ==","signatures":[{"sig":"MEUCIQDgtc6LkCbvR74bkDL4oboP48IQpxAF0OuBbPT5aVfhJQIgYVruDWCIBDwtoprrt23gCXdqbUJZxQ3Qs0JhnJbdAOc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cristiancosano%2fpallet-builder@0.1.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5552375},"main":"./dist/pallet-builder.js","type":"module","_from":"file:cristiancosano-pallet-builder-0.1.2.tgz","types":"./dist/pallet-builder.d.ts","exports":{".":{"types":"./dist/pallet-builder.d.ts","import":"./dist/pallet-builder.js"}},"scripts":{"dev":"vite","lint":"eslint .","test":"vitest run","build":"vite build && tsc -p tsconfig.lib.json","preview":"vite preview","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:259c0796-76a4-488c-b85c-bad9215efaf7"}},"_resolved":"/tmp/fb435c861530388f82c83fbcdb00794c/cristiancosano-pallet-builder-0.1.2.tgz","_integrity":"sha512-ECYJmWwhZ+MpIqQ1Fk0KcqK1R70KPEIrVnqlrQikqS1QSioppYBq3qFtF2AzuWSoDqMFN65dAOFKnaz+NXhfyQ==","repository":{"url":"git+https://github.com/cristiancosano/pallet-builder.git","type":"git"},"_npmVersion":"11.6.2","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11","react-dom":"^19.2.0","@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","eslint":"^9.39.1","vitest":"^4.0.18","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/three":"^0.182.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.4","@vitejs/plugin-react":"^5.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/pallet-builder_0.1.2_1771014150315_0.5476881739318853","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@cristiancosano/pallet-builder","version":"0.1.3","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","_id":"@cristiancosano/pallet-builder@0.1.3","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"homepage":"https://github.com/cristiancosano/pallet-builder#readme","bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"dist":{"shasum":"2ba0bad0efc424c74124a89d8cf2559fe08dd2e3","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.3.tgz","fileCount":94,"integrity":"sha512-luEn6kBshqIyr1dHIRK9m5SHods2pwfbA2zqmhp3NG6JcuRZm38eaJekoQHHrhn/iplg/qlemnZPuOa1ybkQ8w==","signatures":[{"sig":"MEYCIQCCfNQ0F2hkkK7BfGSaMx+JmyrB8EOkFX2XqqMVLL6VmgIhAODz1k5Ror9k22ms8zagaqOeVTLcgnecWhL5DJMB35VQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cristiancosano%2fpallet-builder@0.1.3","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5616645},"main":"./dist/pallet-builder.js","type":"module","_from":"file:cristiancosano-pallet-builder-0.1.3.tgz","types":"./dist/pallet-builder.d.ts","exports":{".":{"types":"./dist/pallet-builder.d.ts","import":"./dist/pallet-builder.js"}},"scripts":{"dev":"vite","lint":"eslint .","test":"vitest run","build":"vite build && tsc -p tsconfig.lib.json","preview":"vite preview","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:259c0796-76a4-488c-b85c-bad9215efaf7"}},"_resolved":"/tmp/f3ecd703d95bf2a31ef004bf18dba0be/cristiancosano-pallet-builder-0.1.3.tgz","_integrity":"sha512-luEn6kBshqIyr1dHIRK9m5SHods2pwfbA2zqmhp3NG6JcuRZm38eaJekoQHHrhn/iplg/qlemnZPuOa1ybkQ8w==","repository":{"url":"git+https://github.com/cristiancosano/pallet-builder.git","type":"git"},"_npmVersion":"11.6.2","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11","react-dom":"^19.2.0","@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","eslint":"^9.39.1","vitest":"^4.0.18","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/three":"^0.182.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.4","@vitejs/plugin-react":"^5.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/pallet-builder_0.1.3_1771595178047_0.6221420747876427","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@cristiancosano/pallet-builder","version":"0.1.4","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","_id":"@cristiancosano/pallet-builder@0.1.4","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"homepage":"https://github.com/cristiancosano/pallet-builder#readme","bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"dist":{"shasum":"3df7462af86e1e7523110a123f66282f35f9a2cd","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.4.tgz","fileCount":94,"integrity":"sha512-3YsOx3sD7fzXkrNsT6U7HfKmts1qteMeKXLhV/OfaWX5zHOhUVNs6tVNjtQw8s2c8/ljuRrG0mHsholSAP/FQA==","signatures":[{"sig":"MEUCIQDeEHTjtXyy/3JF18OwNzURUp+6MtVhRZ/PbwHcQrypmgIgd90G++7dmDtQBrK7V3wYfzMofLlDfpFLL2Gzxh5Tcuk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cristiancosano%2fpallet-builder@0.1.4","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":5616789},"main":"./dist/pallet-builder.js","type":"module","_from":"file:cristiancosano-pallet-builder-0.1.4.tgz","types":"./dist/pallet-builder.d.ts","exports":{".":{"types":"./dist/pallet-builder.d.ts","import":"./dist/pallet-builder.js"}},"scripts":{"dev":"vite","lint":"eslint .","test":"vitest run","build":"vite build && tsc -p tsconfig.lib.json","preview":"vite preview","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:259c0796-76a4-488c-b85c-bad9215efaf7"}},"_resolved":"/tmp/a9b9a563e96ccea5421dfffbacf56a70/cristiancosano-pallet-builder-0.1.4.tgz","_integrity":"sha512-3YsOx3sD7fzXkrNsT6U7HfKmts1qteMeKXLhV/OfaWX5zHOhUVNs6tVNjtQw8s2c8/ljuRrG0mHsholSAP/FQA==","repository":{"url":"git+https://github.com/cristiancosano/pallet-builder.git","type":"git"},"_npmVersion":"11.6.2","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","directories":{},"_nodeVersion":"24.13.0","dependencies":{"react":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11","react-dom":"^19.2.0","@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0"},"_hasShrinkwrap":false,"devDependencies":{"vite":"^7.2.4","eslint":"^9.39.1","vitest":"^4.0.18","globals":"^16.5.0","@eslint/js":"^9.39.1","typescript":"~5.9.3","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/three":"^0.182.0","@types/react-dom":"^19.2.3","typescript-eslint":"^8.46.4","@vitejs/plugin-react":"^5.1.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24"},"_npmOperationalInternal":{"tmp":"tmp/pallet-builder_0.1.4_1771607637936_0.22863425683366678","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@cristiancosano/pallet-builder","version":"0.1.5","type":"module","description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","main":"./dist/pallet-builder.js","types":"./dist/pallet-builder.d.ts","exports":{".":{"import":"./dist/pallet-builder.js","types":"./dist/pallet-builder.d.ts"}},"repository":{"type":"git","url":"git+https://github.com/cristiancosano/pallet-builder.git"},"bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"homepage":"https://github.com/cristiancosano/pallet-builder#readme","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"author":{"name":"Cristian Cosano"},"license":"MIT","dependencies":{"@react-three/drei":"^10.7.7","@react-three/fiber":"^9.5.0","react":"^19.2.0","react-dom":"^19.2.0","three":"^0.182.0","zustand":"^5.0.11"},"devDependencies":{"@eslint/js":"^9.39.1","@types/node":"^24.10.1","@types/react":"^19.2.5","@types/react-dom":"^19.2.3","@types/three":"^0.182.0","@vitejs/plugin-react":"^5.1.1","eslint":"^9.39.1","eslint-plugin-react-hooks":"^7.0.1","eslint-plugin-react-refresh":"^0.4.24","globals":"^16.5.0","typescript":"~5.9.3","typescript-eslint":"^8.46.4","vite":"^7.2.4","vitest":"^4.0.18"},"scripts":{"dev":"vite","build":"vite build && tsc -p tsconfig.lib.json","lint":"eslint .","preview":"vite preview","test":"vitest run","test:watch":"vitest","test:coverage":"vitest run --coverage"},"_id":"@cristiancosano/pallet-builder@0.1.5","_integrity":"sha512-5l7bJ/sJ/jS4PRE6cYedp6CfZszwTp9YcEzVUqytRahPKZT7oFG89R2oT2A8IkZAr5P0hzSfQck9o9eWgD4GkQ==","_resolved":"/tmp/f332fc66e1147ac94a22fe92d620a590/cristiancosano-pallet-builder-0.1.5.tgz","_from":"file:cristiancosano-pallet-builder-0.1.5.tgz","_nodeVersion":"24.13.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-5l7bJ/sJ/jS4PRE6cYedp6CfZszwTp9YcEzVUqytRahPKZT7oFG89R2oT2A8IkZAr5P0hzSfQck9o9eWgD4GkQ==","shasum":"9ec348f30f656760060f240c1badebd762086322","tarball":"https://registry.npmjs.org/@cristiancosano/pallet-builder/-/pallet-builder-0.1.5.tgz","fileCount":95,"unpackedSize":5623637,"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@cristiancosano%2fpallet-builder@0.1.5","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIBqxcvSNjoq/9wByJ3Ny/HG+iPGfSOae6GbjhzyM4bHjAiBBw8HGK04JrOpuercf0tgHpFqZ5ilgHFP4sczT8JbqXQ=="}]},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:259c0796-76a4-488c-b85c-bad9215efaf7"}},"directories":{},"maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/pallet-builder_0.1.5_1771685109595_0.5501971935204002"},"_hasShrinkwrap":false}},"time":{"created":"2026-02-13T14:11:19.291Z","modified":"2026-02-21T14:45:10.277Z","0.1.0":"2026-02-13T14:11:19.781Z","0.1.1":"2026-02-13T15:01:46.365Z","0.1.2":"2026-02-13T20:22:30.677Z","0.1.3":"2026-02-20T13:46:18.394Z","0.1.4":"2026-02-20T17:13:58.246Z","0.1.5":"2026-02-21T14:45:09.999Z"},"bugs":{"url":"https://github.com/cristiancosano/pallet-builder/issues"},"author":{"name":"Cristian Cosano"},"license":"MIT","homepage":"https://github.com/cristiancosano/pallet-builder#readme","keywords":["react","three","react-three-fiber","3d","pallet","logistics","warehouse","bin-packing"],"repository":{"type":"git","url":"git+https://github.com/cristiancosano/pallet-builder.git"},"description":"React Three Fiber component library for 3D pallet visualization and logistics simulation","maintainers":[{"name":"cristiancosano","email":"cristiancosano@icloud.com"}],"readme":"# 📦 @cristiancosano/pallet-builder\n\nModular system for 3D logistics visualization based on React and React Three Fiber.\n\n## 🎯 Description\n\nReact component library that allows building interactive 3D scenes to visualize logistics operations such as warehouses, pallets, boxes, and shipping containers.\n\n## ✨ Features\n\n- 🧱 **Modular System**: Clean architecture with separation between core logic and visualization\n- 🎨 **Declarative Components**: Simple API based on React components\n- 📐 **Industry Standards**: Support for EURO, ISO, and custom pallets\n- 🔄 **Real-time**: Interactive 3D visualization with camera controls\n- 📊 **Validations**: Business logic to validate dimensions, weights, and occupancy\n- 🎯 **Agnostic**: Core in pure TypeScript without dependencies on visualization frameworks\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\npnpm install\n```\n\n### Development\n\n```bash\npnpm dev\n```\n\nOpen [http://localhost:5173](http://localhost:5173) to view the demo.\n\n## 📖 Basic Usage\n\n```tsx\nimport { Warehouse, Pallet, Box } from '@cristiancosano/pallet-builder';\n\nfunction MyLogisticsApp() {\n  return (\n    <Warehouse width={5000} depth={5000} showGrid>\n      \n      <Pallet id=\"pallet-A\" position={[0, 0, 0]} type=\"EURO\">\n        <Box \n          dimensions={[400, 300, 200]} \n          position={[0, 0, 0]} \n          color=\"orange\" \n          label=\"Box 1\"\n        />\n      </Pallet>\n\n      <Pallet id=\"pallet-B\" position={[1500, 0, 0]} type=\"ISO\">\n        <Box \n          dimensions={[500, 400, 300]} \n          position={[0, 0, 0]} \n          color=\"blue\" \n        />\n      </Pallet>\n\n    </Warehouse>\n  );\n}\n```\n\n## 🏗️ Architecture\n\n### Core (Pure TypeScript)\n\nFramework-agnostic business logic:\n\n```typescript\nimport { BoxEntity, PalletEntity, ContainerEntity } from '@cristiancosano/pallet-builder';\n\n// Create a pallet with validations\nconst pallet = new PalletEntity({\n  id: 'pallet-1',\n  type: 'EURO',\n  position: [0, 0, 0],\n  boxes: [\n    {\n      id: 'box-1',\n      dimensions: [400, 300, 200], // mm\n      position: [0, 0, 0],\n      weight: 25, // kg\n    }\n  ]\n});\n\n// Validate configuration\nconst validation = pallet.validate();\nconsole.log('Total weight:', pallet.getTotalWeight(), 'kg');\nconsole.log('Occupancy:', pallet.getOccupancyRate(), '%');\n```\n\n### Components (React + R3F)\n\n3D visual components built with React Three Fiber:\n\n- **`<Warehouse>`**: Main container of the 3D scene\n- **`<Pallet>`**: Represents a pallet with support for EURO, ISO, or custom\n- **`<Box>`**: Box/package positionable inside a pallet\n- **`<CameraControls>`**: Camera controls (orbit, first person, etc.)\n\n## 📐 Pallet Standards\n\n### EUR-Pallet (EURO)\n- Dimensions: 800 x 1200 x 144 mm\n- Maximum weight: 1500 kg\n- Maximum height: 2200 mm\n\n### ISO Pallet (ISO)\n- Dimensions: 1000 x 1200 x 144 mm\n- Maximum weight: 2000 kg\n- Maximum height: 2200 mm\n\n### Custom\n- Customizable dimensions\n- Flexible configuration\n\n## 🎨 Available Components\n\n### Warehouse\n\nMain container that creates the 3D scene with lighting and controls.\n\n```tsx\n<Warehouse \n  width={5000}      // mm\n  depth={5000}      // mm\n  height={3000}     // mm (optional)\n  showGrid={true}   // Show ground grid\n  backgroundColor=\"#f0f0f0\"\n>\n  {/* Content */}\n</Warehouse>\n```\n\n### Pallet\n\nRepresents a standard or custom pallet.\n\n```tsx\n<Pallet \n  id=\"pallet-1\"\n  type=\"EURO\"             // 'EURO' | 'ISO' | 'CUSTOM'\n  position={[0, 0, 0]}    // [x, y, z] in mm\n  rotation={[0, 0, 0]}    // [x, y, z] in radians\n  color=\"#8B4513\"\n  showDimensions={false}\n  customDimensions={[1000, 144, 1200]}  // For CUSTOM\n>\n  {/* Boxes */}\n</Pallet>\n```\n\n### Box\n\nBox or package inside a pallet.\n\n```tsx\n<Box \n  dimensions={[400, 300, 200]}  // [width, height, depth] in mm\n  position={[0, 0, 0]}           // [x, y, z] inside the pallet\n  color=\"#ff6b35\"\n  label=\"Box 1\"\n  onClick={() => console.log('Click!')}\n  onHover={(hovered) => console.log(hovered)}\n/>\n```\n\n## 🎨 Customization with AspectConfig\n\nThe `AspectConfig` system allows customizing the visual appearance of each component individually.\n\n### Global Configuration\n\nDefine default values for all components:\n\n```tsx\nimport { ConfigurationProvider, PalletBuilder, Box } from '@cristiancosano/pallet-builder';\n\nfunction App() {\n  return (\n    <ConfigurationProvider \n      config={{ \n        usePalletModel: true,\n        palletModelUrl: '/objects/pallet.glb',\n        palletTextureUrl: '/textures/pallet_planks.png',\n        useBoxModel: true,\n        boxModelUrl: '/objects/box.glb',\n        boxTextureUrl: '/textures/crate_roughness.png'\n      }}\n    >\n      <PalletBuilder palletType=\"EURO\">\n        <Box dimensions={[400, 300, 200]} position={[0, 0, 0]} color=\"#ff6b35\" />\n      </PalletBuilder>\n    </ConfigurationProvider>\n  );\n}\n```\n\n### Component-level Customization\n\nEach pallet or box can have its own texture, model, or color:\n\n```tsx\n<PalletBuilder \n  palletType=\"EURO\"\n  palletAspect={{ textureUrl: '/textures/dark_wood.png' }}\n>\n  {/* Box with custom color */}\n  <Box \n    dimensions={[400, 300, 200]} \n    position={[0, 0, 0]}\n    aspect={{ color: '#00d9ff' }}\n    label=\"Blue Box\"\n  />\n  \n  {/* Box with custom texture */}\n  <Box \n    dimensions={[400, 300, 200]} \n    position={[400, 0, 0]}\n    aspect={{ textureUrl: '/textures/cardboard.png' }}\n    label=\"Cardboard Box\"\n  />\n  \n  {/* Box with custom 3D model */}\n  <Box \n    dimensions={[400, 300, 200]} \n    position={[0, 0, 400]}\n    aspect={{ \n      modelUrl: '/objects/custom_box.glb',\n      textureUrl: '/textures/metal.png'\n    }}\n    label=\"Metal Box\"\n  />\n</PalletBuilder>\n```\n\n### Default 3D Models and Textures\n\nThe library comes configured with default models and textures:\n\n**Pallets:**\n- Model: `/objects/pallet.glb`\n- Texture: `/textures/pallet_planks.png`\n\n**Boxes:**\n- Model: `/objects/box.glb`\n- Texture: `/textures/crate_roughness.png`\n\nYou can use your own GLB models and textures by customizing the global configuration or using the `aspect` prop on each individual component.\n\n**Priority**: `aspect prop` > `ConfigurationProvider` > `defaults`\n\nSee [docs/guides/aspect-customization.md](./docs/guides/aspect-customization.md) for full examples.\n\n## 🔮 Roadmap\n\n- [ ] **`<Truck>`**: Component for truck visualization\n- [ ] **`<Container>`**: Shipping container\n- [ ] **Optimization Algorithms**: Automatic placement suggestions\n- [ ] **Export**: Generate reports and visualizations\n- [ ] **Physics**: Weight and stability simulation\n- [ ] **Multiplayer**: Real-time collaboration\n\n## 📚 Documentation\n\nCheck the `/docs` folder for more information:\n\n- [3D Components Guide](./docs/guides/3d-components-development.md)\n- [Domain Model](./docs/context/domain-model.md)\n- [Coding Conventions](./docs/context/coding-conventions.md)\n\n## 🤝 Contributing\n\nSee [CONTRIBUTING.md](./docs/guides/contributing.md)\n\n## 📄 Attributions\n\nThis project uses third-party assets:\n\n- **HDR Environment Map**: [HDRI Haven/Poly Haven](https://polyhaven.com/) (CC0 License) via [pmndrs/drei-assets](https://github.com/pmndrs/drei-assets)\n\nSee [ATTRIBUTIONS.md](./ATTRIBUTIONS.md) for full details.\n\n## 📄 License\n\nMIT © Cristian Cosano\n\n---\n\n**Made with ❤️ using React Three Fiber**\n","readmeFilename":"README.md"}