most-box 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (68) hide show
  1. package/README.md +26 -0
  2. package/cli.js +2 -2
  3. package/out/404/index.html +15 -0
  4. package/out/404.html +15 -0
  5. package/out/__next.__PAGE__.txt +9 -0
  6. package/out/__next._full.txt +18 -0
  7. package/out/__next._head.txt +5 -0
  8. package/out/__next._index.txt +6 -0
  9. package/out/__next._tree.txt +2 -0
  10. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_buildManifest.js +11 -0
  11. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_clientMiddlewareManifest.js +1 -0
  12. package/out/_next/static/0h4f4QFk_KC9FlSRfQACk/_ssgManifest.js +1 -0
  13. package/out/_next/static/chunks/00l-yd3t8dvwz.js +5 -0
  14. package/out/_next/static/chunks/03k8t3tgym~8~.js +1 -0
  15. package/out/_next/static/chunks/03~yq9q893hmn.js +1 -0
  16. package/out/_next/static/chunks/09vfh8lfuacc0.css +1 -0
  17. package/out/_next/static/chunks/0bogtdbh.dcu1.js +1 -0
  18. package/out/_next/static/chunks/0dbhjjzl8qfwv.js +1 -0
  19. package/out/_next/static/chunks/0f73psqhr8dre.css +1 -0
  20. package/out/_next/static/chunks/0fbi7z4_.4j1j.js +1 -0
  21. package/out/_next/static/chunks/0ht900cau6_ur.js +31 -0
  22. package/out/_next/static/chunks/0ohm.ia-4ec60.js +1 -0
  23. package/out/_next/static/chunks/0u5ydb-f0.vxl.js +1 -0
  24. package/out/_next/static/chunks/14t2m1on-s5v~.js +1 -0
  25. package/out/_next/static/chunks/turbopack-076ce9exut_h3.js +1 -0
  26. package/out/_not-found/__next._full.txt +16 -0
  27. package/out/_not-found/__next._head.txt +5 -0
  28. package/out/_not-found/__next._index.txt +6 -0
  29. package/out/_not-found/__next._not-found/__PAGE__.txt +5 -0
  30. package/out/_not-found/__next._not-found.txt +5 -0
  31. package/out/_not-found/__next._tree.txt +2 -0
  32. package/out/_not-found/index.html +15 -0
  33. package/out/_not-found/index.txt +16 -0
  34. package/out/app.css +1535 -0
  35. package/out/bundle.js +107 -0
  36. package/out/bundle.js.map +7 -0
  37. package/out/chat/__next._full.txt +19 -0
  38. package/out/chat/__next._head.txt +5 -0
  39. package/out/chat/__next._index.txt +6 -0
  40. package/out/chat/__next._tree.txt +3 -0
  41. package/out/chat/__next.chat/__PAGE__.txt +9 -0
  42. package/out/chat/__next.chat.txt +5 -0
  43. package/out/chat/index.html +15 -0
  44. package/out/chat/index.txt +19 -0
  45. package/out/chat-page.js +112 -0
  46. package/out/chat.css +378 -0
  47. package/out/favicon.ico +0 -0
  48. package/out/index.html +15 -0
  49. package/out/index.js +148 -0
  50. package/out/index.txt +18 -0
  51. package/package.json +11 -6
  52. package/public/app.css +20 -4
  53. package/public/bundle.js +1 -1
  54. package/public/bundle.js.map +7 -0
  55. package/public/chat-page.js +112 -0
  56. package/public/chat.css +378 -0
  57. package/public/index.js +148 -0
  58. package/server.js +188 -6
  59. package/src/config.js +12 -1
  60. package/src/core/cid.js +7 -3
  61. package/src/index.js +475 -7
  62. package/src/utils/api.js +6 -0
  63. package/build.mjs +0 -40
  64. package/public/app.jsx +0 -1543
  65. package/public/bundle.css +0 -1
  66. package/public/error-boundary.jsx +0 -50
  67. package/public/index.html +0 -16
  68. package/public/index.jsx +0 -20
package/public/bundle.css DELETED
@@ -1 +0,0 @@
1
- :root{--bg-primary: #f8fafc;--bg-secondary: #ffffff;--bg-tertiary: #f1f5f9;--text-primary: #0f172a;--text-secondary: #64748b;--text-muted: #94a3b8;--border-color: rgba(0, 0, 0, .06);--accent-blue: #3b82f6;--danger: #ef4444;--success: #22c55e;--warning: #f59e0b;--info: #6366f1}[data-theme=dark]{--bg-primary: #0f172a;--bg-secondary: #1e293b;--bg-tertiary: #334155;--text-primary: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--border-color: rgba(255, 255, 255, .08);--accent-blue: #60a5fa}*{margin:0;padding:0;box-sizing:border-box}body{font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Microsoft YaHei,sans-serif}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-thumb{background:var(--text-muted);border-radius:4px}.app-layout{display:flex;min-height:100vh;background:var(--bg-primary);color:var(--text-primary)}.sidebar{width:200px;background:var(--bg-tertiary);display:flex;flex-direction:column;border-right:1px solid var(--border-color);flex-shrink:0;.sidebar-header{padding:20px 16px;border-bottom:1px solid var(--border-color);h1{font-size:18px;font-weight:700;color:var(--accent-blue)}}.sidebar-nav{padding:12px 8px;flex:1}.sidebar-nav-btn{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:8px;border:none;cursor:pointer;margin-bottom:4px;background:transparent;color:var(--text-secondary);font-weight:500;font-size:13px;transition:background .15s;&.active{background:color-mix(in srgb,var(--accent-blue) 12%,transparent);color:var(--accent-blue);font-weight:600}&:hover:not(.active){background:color-mix(in srgb,var(--accent-blue) 6%,transparent)}}.sidebar-footer{padding:12px 16px;border-top:1px solid var(--border-color)}.sidebar-footer-label{display:flex;align-items:center;gap:6px;margin-bottom:6px;font-size:11px;color:var(--text-secondary)}.storage-bar{height:4px;border-radius:2px;background:var(--bg-secondary);overflow:hidden}.storage-bar-fill{height:100%;background:var(--accent-blue);transition:width .3s}.storage-info{display:flex;justify-content:space-between;font-size:10px;color:var(--text-secondary);margin-top:4px}}.sidebar-overlay,.mobile-menu-btn{display:none}.main-content{flex:1;display:flex;flex-direction:column;min-width:0}.app-header{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;padding:16px 24px;border-bottom:1px solid var(--border-color);background:var(--bg-secondary);gap:16px;.header-left{display:flex;align-items:center;gap:12px}.header-title{font-size:16px;font-weight:600}.header-badge{display:flex;align-items:center;gap:4px;padding:3px 8px;border-radius:12px;background:var(--bg-tertiary);font-size:11px;color:var(--text-secondary)}.header-badge-dot{width:6px;height:6px;border-radius:50%;background:var(--warning);&.connected{background:var(--success)}}.header-right{display:flex;align-items:center;gap:8px;flex-wrap:wrap}}.search-box{display:flex;align-items:center;gap:8px;padding:6px 12px;border-radius:8px;background:var(--bg-tertiary);border:1px solid var(--border-color);input{background:none;border:none;outline:none;font-size:12px;color:var(--text-primary);width:120px}button{display:flex;background:none;border:none;cursor:pointer;color:var(--text-secondary);padding:0}}.icon-btn{width:32px;height:32px;border-radius:8px;border:none;background:var(--bg-tertiary);cursor:pointer;color:var(--text-secondary);position:relative;display:flex;align-items:center;justify-content:center;transition:background .15s;&:hover{background:color-mix(in srgb,var(--accent-blue) 10%,var(--bg-tertiary))}&.accent{color:var(--accent-blue)}&.theme-toggle{color:#6366f1}}.icon-btn-badge{position:absolute;top:-4px;right:-4px;width:14px;height:14px;border-radius:50%;background:var(--danger);color:#fff;font-size:9px;font-weight:700;display:flex;align-items:center;justify-content:center}.action-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;padding:16px 24px;position:relative}.action-card{border:2px dashed color-mix(in srgb,var(--accent-blue) 20%,transparent);border-radius:12px;padding:20px;text-align:center;cursor:pointer;position:relative;background:transparent;transition:background .15s,border-color .15s;&:hover{background:color-mix(in srgb,var(--accent-blue) 4%,transparent)}p{font-size:12px;color:var(--accent-blue);font-weight:500}}.action-card.upload.drag-over{border-color:var(--accent-blue);background:color-mix(in srgb,var(--accent-blue) 5%,transparent)}.action-card-download{p{color:#6366f1}}.action-card-input{position:absolute;inset:0;width:100%;height:100%;opacity:0;cursor:pointer;z-index:1}.breadcrumb{display:flex;align-items:center;gap:4px;padding:0 24px;font-size:12px;button{background:none;border:none;color:var(--text-muted);cursor:pointer}button.current{color:var(--text-secondary)}.breadcrumb-edit-btn{background:none;border:none;cursor:pointer;color:var(--text-secondary);padding:2px;display:flex;align-items:center}}.content-grid{flex:1;padding:12px 24px;overflow:auto}.file-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:16px}.empty-state{text-align:center;color:var(--text-muted);padding:48px;font-size:13px}.card{display:flex;flex-direction:column;align-items:center;padding:16px;border-radius:12px;cursor:pointer;background:var(--bg-secondary);border:1px solid var(--border-color);transition:all .15s;&:hover{border-color:var(--accent-blue);box-shadow:0 2px 8px #0000000f}&.selected{background:color-mix(in srgb,var(--accent-blue) 8%,transparent);border-color:var(--accent-blue)}}.card-icon{width:56px;height:56px;border-radius:12px;margin-bottom:10px;display:flex;align-items:center;justify-content:center}.card-icon.folder{background:linear-gradient(135deg,#818cf8,#6366f1)}.card-icon.file{background:linear-gradient(135deg,#a78bfa,#8b5cf6)}.card-icon.starred{background:linear-gradient(135deg,#fbbf24,#f59e0b)}.card-icon.trash{background:linear-gradient(135deg,#94a3b8,#64748b)}.card-name{font-size:12px;font-weight:500;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-primary)}.card-date{font-size:10px;color:var(--text-muted);margin-top:2px}.modal-overlay{position:fixed;inset:0;z-index:200;background:#00000080;backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center}.modal-container{width:380px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color)}.modal-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;h3{font-size:16px;font-weight:600}button{background:none;border:none;cursor:pointer;color:var(--text-muted)}}.modal-close-btn{background:none;border:none;cursor:pointer;color:var(--text-muted)}.welcome-modal{width:380px;max-width:calc(100vw - 32px);padding:28px;border-radius:16px;background:#fff;text-align:center;h2{font-size:18px;font-weight:600;margin-bottom:12px}p{font-size:13px;color:#64748b;line-height:1.6;margin-bottom:20px}}.welcome-steps{display:flex;justify-content:center;gap:6px;margin-bottom:20px}.welcome-step-dot{width:6px;height:6px;border-radius:50%;background:#e2e8f0;&.active{background:#3b82f6}}.welcome-actions{display:flex;gap:10px;justify-content:center}.welcome-success-icon{width:48px;height:48px;border-radius:50%;background:#dcfce7;display:flex;align-items:center;justify-content:center;margin:0 auto 16px}.btn{padding:10px 20px;border-radius:10px;border:none;cursor:pointer;font-size:14px;transition:opacity .15s;&.primary{background:#3b82f6;color:#fff}&.secondary{background:transparent;border:1px solid #e5e7eb;color:#6b7280}&.danger{background:var(--danger);color:#fff}&.small{padding:6px 12px;border-radius:8px;font-size:12px}&.full{width:100%;display:flex;align-items:center;justify-content:center;gap:6px}&:disabled{opacity:.5;cursor:not-allowed}}.settings-modal{width:420px;max-width:calc(100vw - 32px);padding:28px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);.settings-title{font-size:18px;font-weight:600;color:var(--text-primary)}.settings-label{display:block;font-size:13px;font-weight:500;margin-bottom:8px;color:var(--text-primary)}.settings-row{display:flex;gap:8px;align-items:center}.settings-input{flex:1;padding:10px 12px;border-radius:8px;border:1.5px solid var(--border-color);font-size:13px;outline:none;background:var(--bg-tertiary);color:var(--text-primary)}.settings-hint{font-size:11px;color:var(--text-muted);margin-top:8px}.settings-divider{border-top:1px solid var(--border-color);padding-top:16px}.settings-about{text-align:center;margin-bottom:16px;h3{font-size:16px;font-weight:600;margin-bottom:4px;color:var(--text-primary)}p{font-size:12px;color:var(--text-muted)}}}.input-modal{width:360px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);h3{font-size:16px;font-weight:600;margin-bottom:16px;color:var(--text-primary)}}.modal-input{width:100%;padding:10px 12px;border-radius:8px;border:1.5px solid var(--border-color);font-size:13px;outline:none;background:var(--bg-tertiary);color:var(--text-primary);margin-bottom:16px}.modal-actions{display:flex;gap:8px;.btn{flex:1;padding:10px;border-radius:8px;font-size:13px}}.confirm-modal{width:360px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);h3{font-size:16px;font-weight:600;margin-bottom:12px;color:var(--text-primary)}p{font-size:13px;color:var(--text-secondary);margin-bottom:20px}}.move-modal{width:400px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);.move-breadcrumb{display:flex;gap:6px;margin-bottom:12px;flex-wrap:wrap}.move-breadcrumb-btn{padding:4px 8px;border-radius:6px;border:none;background:var(--bg-tertiary);color:var(--text-secondary);cursor:pointer;font-size:12px;&.active{background:color-mix(in srgb,var(--accent-blue) 12%,transparent);color:var(--accent-blue)}}.move-folder-list{max-height:200px;overflow:auto;margin-bottom:16px}.move-folder-item{width:100%;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:8px;border:none;background:transparent;cursor:pointer;font-size:13px;color:var(--text-primary);text-align:left;&:hover{background:var(--bg-tertiary)}&.selected{background:color-mix(in srgb,var(--accent-blue) 12%,transparent);color:var(--accent-blue)}}.move-new-folder{display:flex;gap:8px;margin-bottom:16px;input{flex:1;padding:8px 10px;border-radius:8px;border:1.5px solid var(--border-color);font-size:12px;outline:none;background:var(--bg-tertiary);color:var(--text-primary)}}}.share-modal{width:420px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);.share-link-box{display:flex;gap:10px;margin-bottom:16px}.share-link-text{flex:1;padding:12px 14px;border-radius:10px;background:var(--bg-tertiary);font-size:13px;font-family:monospace;color:var(--text-primary);word-break:break-all}.share-copy-btn{width:44px;border-radius:10px;border:none;background:var(--accent-blue);color:#fff;cursor:pointer;&.copied{background:var(--success)}}}.download-modal{width:400px;max-width:calc(100vw - 32px);padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);.download-input{width:100%;padding:12px 14px;border-radius:10px;border:1.5px solid var(--border-color);font-size:13px;font-family:monospace;outline:none;background:var(--bg-tertiary);color:var(--text-primary);margin-bottom:16px}.download-btn{width:100%;padding:12px;border-radius:10px;border:none;background:var(--info);color:#fff;font-size:13px;font-weight:600;cursor:pointer;&:disabled{background:var(--bg-tertiary);color:var(--text-muted);cursor:not-allowed}}}.preview-overlay{position:fixed;inset:0;z-index:200;background:#000000e6;display:flex;align-items:center;justify-content:center;padding:24px;.preview-close{position:absolute;top:20px;right:20px;width:36px;height:36px;border-radius:10px;border:none;background:#ffffff1a;cursor:pointer;color:#fff}img,video{max-width:100%;max-height:80vh;border-radius:12px}.preview-audio{background:#ffffff0d;border-radius:16px;padding:40px 48px;display:flex;flex-direction:column;align-items:center;gap:20px;min-width:320px}.preview-audio-icon{width:72px;height:72px;border-radius:50%;background:#3b82f626;display:flex;align-items:center;justify-content:center}.preview-audio-filename{font-size:14px;color:var(--text-secondary);margin:0;text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.preview-audio-player{width:100%;max-width:400px;height:40px}.preview-audio-player::-webkit-media-controls-panel{background:var(--bg-tertiary)}}.batch-bar{position:fixed;bottom:24px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:12px;background:var(--bg-secondary);box-shadow:0 4px 20px #00000026;border:1px solid var(--border-color);z-index:100;.batch-info{font-size:12px;color:var(--text-secondary)}.batch-dismiss{background:none;border:none;cursor:pointer;color:var(--text-muted);padding:4px}.batch-divider{width:1px;height:20px;background:var(--border-color)}}.transfer-modal{width:380px;max-width:calc(100vw - 32px);max-height:70vh;padding:24px;border-radius:16px;background:var(--bg-secondary);border:1px solid var(--border-color);overflow:auto;.transfer-item{padding:10px 0;border-bottom:1px solid var(--border-color)}.transfer-item-header{display:flex;align-items:center;gap:8px;margin-bottom:4px}.transfer-item-name{font-size:12px;font-weight:500;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.transfer-item-cancel{background:none;border:none;cursor:pointer;color:var(--danger);padding:2px}.transfer-progress-row{display:flex;align-items:center;gap:8px}.transfer-progress-bar{flex:1;height:4px;border-radius:2px;background:var(--bg-tertiary)}.transfer-progress-fill{height:100%;border-radius:2px;background:var(--accent-blue);transition:width .2s;&.download{background:var(--info)}&.error{background:var(--danger)}&.cancelled{background:var(--warning)}}.transfer-progress-text{font-size:10px;color:var(--text-muted);min-width:32px;text-align:right}}@keyframes toastSlideIn{0%{transform:translate(100%);opacity:0}to{transform:translate(0);opacity:1}}.toast{position:fixed;right:24px;z-index:9999;color:#fff;padding:12px 20px;border-radius:12px;font-size:13px;font-weight:500;box-shadow:0 4px 16px #0003;animation:toastSlideIn .2s ease;&.success{background:var(--success)}&.error{background:var(--danger)}&.warning{background:var(--warning)}&.info{background:var(--accent-blue)}}.welcome-path-section{text-align:left;margin-bottom:20px;.path-label{font-size:12px;color:#9ca3af;margin-bottom:4px}.path-value{font-size:12px;color:#374151;font-family:monospace;background:#f3f4f6;padding:8px 10px;border-radius:6px;word-break:break-all;margin-bottom:12px}.path-input{width:100%;padding:10px 12px;border-radius:8px;border:1.5px solid #e5e7eb;font-size:13px;outline:none;box-sizing:border-box}.path-hint{font-size:11px;color:#9ca3af;margin-top:4px}}@media(max-width:768px){.sidebar{position:fixed;top:0;left:0;bottom:0;z-index:300;transform:translate(-100%);transition:transform .25s ease;width:240px;&.open{transform:translate(0)}}.sidebar-overlay{display:block;position:fixed;inset:0;z-index:299;background:#0006;opacity:0;visibility:hidden;transition:opacity .25s ease,visibility .25s ease;&.visible{opacity:1;visibility:visible}}.mobile-menu-btn{display:flex}.app-header{padding:12px 16px;gap:8px;.header-right{gap:4px}}.action-grid{grid-template-columns:1fr;padding:12px 16px;gap:8px}.action-card{padding:14px}.breadcrumb{padding:0 16px}.content-grid{padding:12px 16px}.file-grid{grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:10px}.card{padding:12px}.card-icon{width:44px;height:44px;border-radius:10px;margin-bottom:8px}.card-name{font-size:11px}.modal-overlay{align-items:flex-end;padding:0}.modal-container{width:100%;max-width:100%;border-radius:16px 16px 0 0;max-height:85vh;overflow:auto}.welcome-modal,.settings-modal,.input-modal,.confirm-modal,.move-modal,.share-modal,.download-modal,.transfer-modal{width:100%;max-width:100%;border-radius:16px 16px 0 0}.toast{right:12px;left:12px}.batch-bar{left:8px;right:8px;transform:none;flex-wrap:wrap;justify-content:center;bottom:12px;gap:6px}.preview-overlay{padding:12px}}@media(max-width:480px){.file-grid{grid-template-columns:repeat(auto-fill,minmax(90px,1fr));gap:8px}.card{padding:10px}.card-icon{width:40px;height:40px;margin-bottom:6px}.card-name{font-size:10px}.app-header{padding:10px 12px;.header-title{font-size:14px}.header-badge{font-size:10px;padding:2px 6px}}.action-grid,.content-grid{padding:10px 12px}.breadcrumb{padding:0 12px;font-size:11px}.batch-bar{padding:8px 12px;gap:4px;.batch-info{font-size:11px}}}.preview-text-container{width:90vw;max-width:900px;max-height:80vh;overflow:auto;background:var(--bg-secondary);border-radius:12px;padding:20px;display:flex;flex-direction:column}.preview-text-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:16px;padding-bottom:12px;border-bottom:1px solid var(--border-color);font-size:13px;color:var(--text-secondary)}.preview-text{color:#0f172a;font-family:SF Mono,Fira Code,Consolas,monospace;font-size:13px;line-height:1.6;white-space:pre-wrap;word-break:break-all;margin:0;overflow:auto;max-height:100%}.preview-text-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;color:var(--text-secondary);gap:12px}.preview-text-spinner{animation:spin .8s linear infinite;opacity:.6}.preview-text-loading-hint{font-size:12px;opacity:.6;text-align:center;max-width:300px}.preview-media-wrapper{position:relative;display:flex;align-items:center;justify-content:center;min-width:100px;min-height:100px}.preview-media-wrapper .preview-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;z-index:1}.preview-loading-spinner{width:32px;height:32px;border:3px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin .8s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.preview-media-wrapper img,.preview-media-wrapper video{max-width:100%;max-height:80vh;border-radius:12px}.preview-unsupported{background:var(--bg-secondary);border-radius:12px;padding:40px;text-align:center;color:var(--text-primary)}.preview-unsupported p:first-of-type{font-size:14px;font-weight:500;word-break:break-all}[data-theme=dark] .preview-text{color:#e2e8f0}
@@ -1,50 +0,0 @@
1
- import React from 'react'
2
-
3
- export class ErrorBoundary extends React.Component {
4
- constructor(props) {
5
- super(props)
6
- this.state = { hasError: false, error: null }
7
- }
8
-
9
- static getDerivedStateFromError(error) {
10
- return { hasError: true, error }
11
- }
12
-
13
- componentDidCatch(error, info) {
14
- console.error('[ErrorBoundary]', error, info)
15
- }
16
-
17
- handleReload = () => {
18
- window.location.reload()
19
- }
20
-
21
- render() {
22
- if (this.state.hasError) {
23
- return (
24
- <div style={{
25
- display: 'flex', flexDirection: 'column', alignItems: 'center',
26
- justifyContent: 'center', minHeight: '100vh', padding: 32,
27
- background: '#f8fafc', fontFamily: 'system-ui'
28
- }}>
29
- <h1 style={{ fontSize: 20, fontWeight: 600, marginBottom: 8, color: '#1e293b' }}>
30
- 出错了
31
- </h1>
32
- <p style={{ color: '#64748b', marginBottom: 24, textAlign: 'center', maxWidth: 400 }}>
33
- 发生了意外错误,请尝试重新加载页面
34
- </p>
35
- <button
36
- onClick={this.handleReload}
37
- style={{
38
- padding: '10px 24px', borderRadius: 8, border: 'none',
39
- background: '#3b82f6', color: '#fff', fontSize: 14,
40
- cursor: 'pointer'
41
- }}
42
- >
43
- 重新加载
44
- </button>
45
- </div>
46
- )
47
- }
48
- return this.props.children
49
- }
50
- }
package/public/index.html DELETED
@@ -1,16 +0,0 @@
1
- <!doctype html>
2
- <html lang="zh-CN" data-theme="light">
3
-
4
- <head>
5
- <meta charset="UTF-8" />
6
- <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" />
7
- <title>MostBox 文件管理</title>
8
- <link rel="stylesheet" href="./bundle.css" />
9
- </head>
10
-
11
- <body>
12
- <div id="root"></div>
13
- <script type="module" src="./bundle.js"></script>
14
- </body>
15
-
16
- </html>
package/public/index.jsx DELETED
@@ -1,20 +0,0 @@
1
- import { createRoot } from 'react-dom/client'
2
- import React from 'react'
3
- import App from './app.jsx'
4
- import { ErrorBoundary } from './error-boundary.jsx'
5
- import './app.css'
6
-
7
- window.onerror = (message, source, lineno, colno, error) => {
8
- console.error('[Global Error]', { message, source, lineno, colno, error })
9
- }
10
-
11
- window.onunhandledrejection = (event) => {
12
- console.error('[Unhandled Promise Rejection]', event.reason)
13
- }
14
-
15
- const root = createRoot(document.getElementById('root'))
16
- root.render(
17
- <ErrorBoundary>
18
- <App />
19
- </ErrorBoundary>
20
- )