/* ===== Palletization module ===== */ const PalletizationScreen = ({ onNavigate }) => { const [pallet, setPallet] = React.useState(window.Mojro.PALLETS[0]); const [pattern, setPattern] = React.useState('pinwheel'); const cartons = [ { id:'c1', sku:'BX-LRG-01', desc:'Apparel · large', qty:14, L:600, W:400, H:400, weight:22, color:'#E8893C' }, { id:'c2', sku:'BX-MED-04', desc:'Electronics · medium', qty:22, L:500, W:360, H:280, weight:14, color:'#2E5FA8' }, { id:'c3', sku:'BX-SML-02', desc:'Books · small', qty: 8, L:300, W:240, H:180, weight:6, color:'#1F8A5B' }, ]; const PATTERNS = [ { id:'block', name:'Block', gain:0, diag:'block' }, { id:'pinwheel', name:'Pinwheel', gain:12, diag:'pinwheel' }, { id:'turned', name:'Turned', gain:6, diag:'turned' }, { id:'mixed', name:'Mixed', gain:9, diag:'mixed' }, ]; return (
{/* Header */}
Palletization
Pallet build · {pallet.name}
{cartons.length} carton SKUs · 44 pcs All stack rules satisfied
{/* LEFT — inputs */}
Pallet spec
{window.Mojro.PALLETS.map(p => ( ))}
Stacking pattern
{PATTERNS.map(p => (
setPattern(p.id)} style={{ border:'1px solid '+(p.id===pattern?'var(--mojro-red)':'var(--line)'), borderRadius:6, padding:'8px', background: p.id===pattern ? 'rgba(193,51,51,0.04)' : '#fff', cursor:'pointer', }}>
{p.name} 0?'var(--ok)':'var(--ink-3)' }}> {p.gain>0 ? '+'+p.gain+'%' : 'baseline'}
))}
Cartons / SKUs in build
{cartons.map(c => (
{c.sku}
{c.desc} · {c.L}×{c.W}×{c.H}mm
×{c.qty}
))}
{/* CENTER — pallet view */}
{['3d','top','side'].map(v => {v.toUpperCase()})}
Layer · 3 of 5
1.32m / 1.80m max
{/* RIGHT — pallet summary + loading guide preview */}
Pallet summary
Layer-by-layer build
{[ { layer:1, item:'BX-LRG-01 × 4 + BX-MED-04 × 2', h:'0.40m', tone:'ok' }, { layer:2, item:'BX-LRG-01 × 4 + BX-MED-04 × 2', h:'0.40m', tone:'ok' }, { layer:3, item:'BX-LRG-01 × 4 + BX-MED-04 × 4', h:'0.28m', tone:'ok' }, { layer:4, item:'BX-MED-04 × 8', h:'0.28m', tone:'ok' }, { layer:5, item:'BX-SML-02 × 8', h:'0.18m', tone:'warn' }, ].map(l => (
L{l.layer}
{l.item}
{l.h}
))}
); }; const SectionTitle = ({ children }) => (
{children}
); const Field = ({ label, value }) => (
{label} {value}
); const FormGrid = ({ children }) => (
{children}
); window.PalletizationScreen = PalletizationScreen;