ES
MR
@@ -892,7 +92,7 @@
Archivos
- +Arrastra archivos aquí o haz clic para seleccionar
@@ -923,7 +123,7 @@
Home
@@ -948,1334 +148,5 @@
diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 00000000..1b0be91c --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,929 @@ +/* Reset y estilos base */ +* { + box-sizing: border-box; + margin: 0; + padding: 0; + font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +body { + display: flex; + height: 100vh; + background-color: #f5f7fa; + overflow: hidden; +} + +/* Barra lateral */ +.sidebar { + width: 250px; + background-color: #2a3042; + color: #fff; + display: flex; + flex-direction: column; + height: 100%; + flex-shrink: 0; +} + +.logo-container { + padding: 20px; + display: flex; + align-items: center; + margin-bottom: 20px; +} + +.logo { + width: 40px; + height: 40px; + background-color: #ff5e3a; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + margin-right: 10px; +} + +.logo svg { + width: 24px; + height: 24px; + fill: white; +} + +.app-name { + font-size: 18px; + font-weight: bold; + color: white; +} + +.nav-menu { + display: flex; + flex-direction: column; + flex-grow: 1; + padding: 0 15px; +} + +.nav-item { + display: flex; + align-items: center; + padding: 12px 15px; + margin-bottom: 5px; + border-radius: 8px; + cursor: pointer; + color: white; + font-size: 16px; +} + +.nav-item:hover { + background-color: #3a4157; +} + +.nav-item.active { + background-color: #374e65; +} + +.nav-item i { + margin-right: 15px; + width: 20px; + text-align: center; +} + +/* Indicador de almacenamiento */ +.storage-container { + margin: 20px 15px; + background-color: #374e65; + border-radius: 8px; + padding: 15px; +} + +.storage-title { + text-align: center; + margin-bottom: 10px; + font-size: 14px; +} + +.storage-bar { + height: 10px; + background-color: #6b7e8f; + border-radius: 5px; + overflow: hidden; + margin-bottom: 10px; +} + +.storage-fill { + height: 100%; + background-color: #ff5e3a; + width: 56%; +} + +.storage-info { + text-align: center; + font-size: 12px; + color: #f5f5f5; +} + +/* Contenido principal */ +.main-content { + flex-grow: 1; + display: flex; + flex-direction: column; + overflow: hidden; +} + +/* Barra superior */ +.top-bar { + height: 70px; + background-color: white; + border-bottom: 1px solid #e6e6e6; + display: flex; + align-items: center; + padding: 0 30px; + justify-content: space-between; +} + +.search-container { + flex-grow: 1; + max-width: 500px; + position: relative; + margin-right: 20px; +} + +.search-container input { + width: 100%; + padding: 10px 15px 10px 40px; + border-radius: 50px; + border: none; + background-color: #f0f3f7; + font-size: 14px; + height: 40px; +} + +.search-icon { + position: absolute; + left: 15px; + top: 50%; + transform: translateY(-50%); + color: #8895a7; + font-size: 16px; +} + +.user-controls { + display: flex; + align-items: center; +} + +.language-selector { + margin-right: 15px; + padding: 5px 12px; + background-color: #f0f3f7; + border-radius: 6px; + cursor: pointer; + font-size: 14px; + display: flex; + align-items: center; +} + +.language-selector::after { + content: "▼"; + font-size: 8px; + margin-left: 5px; + color: #718096; +} + +.user-avatar { + width: 40px; + height: 40px; + background-color: #ff5e3a; + border-radius: 50%; + display: flex; + align-items: center; + justify-content: center; + color: white; + font-weight: bold; +} + +/* Área de contenido */ +.content-area { + flex-grow: 1; + padding: 20px; + overflow-y: auto; +} + +.page-title { + font-size: 24px; + font-weight: bold; + margin-bottom: 20px; + color: #2d3748; +} + +.actions-bar { + display: flex; + justify-content: space-between; + margin-bottom: 20px; +} + +.action-buttons { + display: flex; + gap: 10px; +} + +.btn { + padding: 10px 20px; + border-radius: 50px; + border: none; + cursor: pointer; + display: flex; + align-items: center; + font-size: 14px; +} + +.btn-primary { + background-color: #ff5e3a; + color: white; +} + +.btn-secondary { + background-color: #f0f3f7; + color: #333; +} + +.view-toggle { + display: flex; + border-radius: 8px; + overflow: hidden; +} + +.toggle-btn { + background-color: #f0f3f7; + border: none; + padding: 8px 15px; + cursor: pointer; +} + +.toggle-btn.active { + background-color: #e6e6e6; +} + +/* Files grid */ +.files-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); + gap: 20px; +} + +.file-card { + background-color: white; + border-radius: 8px; + padding: 20px; + display: flex; + flex-direction: column; + align-items: center; + box-shadow: 0 1px 3px rgba(0,0,0,0.05); + cursor: pointer; + transition: transform 0.2s, box-shadow 0.2s; +} + +.file-card:hover { + transform: translateY(-2px); + box-shadow: 0 5px 15px rgba(0,0,0,0.05); +} + +.file-card.dragging { + opacity: 0.5; + transform: scale(0.95); + box-shadow: none; +} + +.file-card.drop-target { + background-color: rgba(255, 193, 7, 0.1); + border: 2px dashed #ffc107; +} + +/* Estilos para las carpetas como en el mockup */ +.file-icon.folder-icon { + width: 100px; + height: 70px; + background-color: #ffeaa7; /* Color amarillo claro */ + border-radius: 8px; + position: relative; + margin-bottom: 10px; + display: flex; + align-items: center; + justify-content: center; +} + +.file-icon.folder-icon::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 20px; + background-color: #fdcb6e; /* Color amarillo más oscuro para la pestaña */ + border-radius: 8px 8px 0 0; +} + +.file-icon.folder-icon i { + display: none; /* Ocultar el icono Font Awesome */ +} + +/* Estilo para documentos */ +.file-icon.doc-icon { + width: 100px; + height: 70px; + background-color: #e2e8f0; /* Fondo gris claro */ + border-radius: 4px; + position: relative; + margin-bottom: 10px; +} + +.file-icon.doc-icon::before { + content: ""; + position: absolute; + top: 15px; + left: 20px; + right: 20px; + height: 4px; + background-color: #a0aec0; + border-radius: 2px; +} + +.file-icon.doc-icon::after { + content: ""; + position: absolute; + top: 25px; + left: 20px; + right: 30px; + height: 4px; + background-color: #a0aec0; + border-radius: 2px; +} + +/* Estilo para imágenes */ +.file-icon.image-icon { + width: 100px; + height: 70px; + background-color: #74b9ff; /* Fondo azul claro */ + border-radius: 4px; + position: relative; + margin-bottom: 10px; + overflow: hidden; +} + +.file-icon.image-icon::before { + content: ""; + position: absolute; + top: 10px; + left: 15px; + width: 20px; + height: 20px; + background-color: #ffda79; /* Círculo amarillo como un sol */ + border-radius: 50%; +} + +/* Estilo para videos */ +.file-icon.video-icon { + width: 100px; + height: 70px; + background-color: #111; /* Fondo negro */ + border-radius: 4px; + position: relative; + margin-bottom: 10px; + display: flex; + align-items: center; + justify-content: center; +} + +.file-icon.video-icon::before { + content: ""; + width: 0; + height: 0; + border-top: 15px solid transparent; + border-bottom: 15px solid transparent; + border-left: 20px solid white; /* Triángulo de reproducción */ +} + +/* Estilos para archivos de código */ +.file-icon.code-icon { + width: 100px; + height: 70px; + background-color: #e2e8f0; /* Fondo gris claro */ + border-radius: 4px; + position: relative; + margin-bottom: 10px; + border-top: 3px solid #556ee6; /* Borde superior azul */ + overflow: hidden; +} + +/* Líneas que simulan código */ +.file-icon.code-icon::before, +.file-icon.code-icon::after { + content: ""; + position: absolute; + left: 10px; + right: 10px; + height: 2px; + background-color: #556ee6; /* Color azul para el código */ +} + +.file-icon.code-icon::before { + top: 15px; + width: 80%; +} + +.file-icon.code-icon::after { + top: 25px; + width: 60%; +} + +/* Agregar líneas adicionales para simular código */ +.file-icon.code-icon .code-line-1, +.file-icon.code-icon .code-line-2, +.file-icon.code-icon .code-line-3 { + position: absolute; + left: 10px; + height: 2px; + background-color: #a0aec0; /* Color gris para el código */ +} + +.file-icon.code-icon .code-line-1 { + top: 35px; + width: 70%; +} + +.file-icon.code-icon .code-line-2 { + top: 45px; + width: 85%; +} + +.file-icon.code-icon .code-line-3 { + top: 55px; + width: 50%; +} + +/* Colores específicos para distintos tipos de archivo de código */ +.file-icon.json-icon { + border-top-color: #ffb86c; /* Naranja para JSON */ +} + +.file-icon.json-icon::before, +.file-icon.json-icon::after { + background-color: #ffb86c; +} + +.file-icon.js-icon { + border-top-color: #ffd43b; /* Amarillo para JavaScript */ +} + +.file-icon.js-icon::before, +.file-icon.js-icon::after { + background-color: #ffd43b; +} + +.file-icon.html-icon { + border-top-color: #e34c26; /* Rojo para HTML */ +} + +.file-icon.html-icon::before, +.file-icon.html-icon::after { + background-color: #e34c26; +} + +.file-icon.css-icon { + border-top-color: #2965f1; /* Azul para CSS */ +} + +.file-icon.css-icon::before, +.file-icon.css-icon::after { + background-color: #2965f1; +} + +.file-icon.py-icon { + border-top-color: #3776ab; /* Azul oscuro para Python */ +} + +.file-icon.py-icon::before, +.file-icon.py-icon::after { + background-color: #3776ab; +} + +.file-name { + font-size: 14px; + font-weight: 500; + text-align: center; + margin-bottom: 5px; + color: #2d3748; +} + +.file-info { + font-size: 12px; + color: #718096; + text-align: center; +} + +/* Lista de archivos - Estilo mejorado */ +.files-list-view { + display: flex; + flex-direction: column; + width: 100%; + border-radius: 10px; + overflow: hidden; + background-color: white; + box-shadow: 0 1px 3px rgba(0,0,0,0.05); +} + +.list-header { + display: grid; + grid-template-columns: minmax(200px, 2fr) 1fr 1fr 120px; + padding: 15px; + font-weight: 600; + color: #2d3748; + background-color: #f8f9fa; + border-bottom: 1px solid #e0e6ed; +} + +.file-item { + display: grid; + grid-template-columns: minmax(200px, 2fr) 1fr 1fr 120px; + padding: 12px 15px; + border-bottom: 1px solid #f0f0f0; + align-items: center; + cursor: pointer; + transition: background-color 0.2s; + background-color: white; +} + +.file-item:hover { + background-color: #f0f8ff; +} + +.file-item .name-cell { + display: flex; + align-items: center; + gap: 12px; +} + +.file-item .file-icon { + width: 36px; + height: 36px; + display: flex; + align-items: center; + justify-content: center; + border-radius: 8px; + font-size: 20px; + margin-bottom: 0; +} + +.file-item .file-icon.folder-icon { + background-color: #ffeaa7; + position: relative; + width: 36px; + height: 36px; + margin-bottom: 0; +} + +.file-item .file-icon.folder-icon::before { + content: ""; + position: absolute; + top: 0; + left: 0; + right: 0; + height: 8px; + background-color: #fdcb6e; + border-radius: 8px 8px 0 0; +} + +.file-item .file-icon.folder-icon i { + display: none; +} + +/* Iconos específicos para archivos en vista de lista */ +.file-item .file-icon.pdf-icon { + background-color: #fee2e2; +} + +.file-item .file-icon.pdf-icon i { + color: #e53e3e; +} + +.file-item .file-icon.image-icon { + background-color: #e0f2fe; +} + +.file-item .file-icon.image-icon i { + color: #3b82f6; +} + +.file-item .file-icon.video-icon { + background-color: #e2e8f0; +} + +.file-item .file-icon.video-icon i { + color: #ef4444; +} + +.file-item .file-icon.audio-icon { + background-color: #fef3c7; +} + +.file-item .file-icon.audio-icon i { + color: #f59e0b; +} + +.file-item .file-icon.text-icon { + background-color: #f3f4f6; +} + +.file-item .file-icon.text-icon i { + color: #6b7280; +} + +.file-item .date-cell { + color: #718096; + font-size: 14px; +} + +.file-item .size-cell { + color: #718096; + font-size: 14px; + text-align: right; +} + +.file-item .type-cell { + color: #4b5563; + font-weight: 500; + font-size: 14px; +} + +.file-item.dragging { + opacity: 0.5; + background-color: #f9fafb; +} + +.file-item.drop-target { + background-color: rgba(255, 193, 7, 0.1); + border: 2px dashed #ffc107; +} + +/* Breadcrumb */ +.breadcrumb { + display: flex; + align-items: center; + margin-bottom: 15px; + font-size: 14px; + color: #666; +} + +.breadcrumb-item { + cursor: pointer; +} + +.breadcrumb-item:hover { + text-decoration: underline; +} + +.breadcrumb-separator { + margin: 0 8px; +} + +/* Context menu */ +.context-menu { + position: absolute; + background-color: white; + border: 1px solid #ddd; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + padding: 5px 0; + min-width: 150px; + z-index: 1000; + display: none; +} + +.context-menu-item { + padding: 8px 15px; + cursor: pointer; + display: flex; + align-items: center; + color: #333; +} + +.context-menu-item:hover { + background-color: #f0f8ff; +} + +.context-menu-item i { + margin-right: 8px; + width: 16px; + text-align: center; +} + +/* Dialog */ +.rename-dialog { + position: fixed; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: rgba(0,0,0,0.5); + display: flex; + align-items: center; + justify-content: center; + z-index: 2000; + display: none; +} + +.rename-dialog-content { + background-color: white; + border-radius: 8px; + padding: 20px; + width: 400px; + max-width: 90%; +} + +.rename-dialog-header { + font-size: 18px; + font-weight: bold; + margin-bottom: 15px; +} + +.rename-dialog input { + width: 100%; + padding: 10px; + margin-bottom: 15px; + border: 1px solid #ddd; + border-radius: 4px; + font-size: 14px; +} + +.rename-dialog-buttons { + display: flex; + justify-content: flex-end; + gap: 10px; +} + +/* Dropzone */ +.dropzone { + border: 2px dashed #ddd; + border-radius: 8px; + padding: 20px; + text-align: center; + margin: 20px 0; + color: #666; + display: none; +} + +.dropzone.active { + border-color: #ff5e3a; + background-color: rgba(255, 94, 58, 0.05); +} + +.upload-progress { + margin-top: 15px; + width: 100%; + display: none; +} + +.progress-bar { + background-color: #f0f0f0; + height: 6px; + border-radius: 3px; + overflow: hidden; +} + +.progress-fill { + height: 100%; + background-color: #ff5e3a; + width: 0%; + transition: width 0.3s; +} + +/* Notificación */ +.notification { + position: absolute; + top: 70px; + right: 20px; + background-color: white; + width: 250px; + border-radius: 8px; + box-shadow: 0 5px 15px rgba(0,0,0,0.1); + padding: 15px; + border-left: 4px solid #ff5e3a; + z-index: 1000; + display: none; +} + +.notification-title { + font-weight: bold; + font-size: 14px; + margin-bottom: 5px; + color: #2d3748; +} + +.notification-message { + font-size: 12px; + color: #718096; +} + +/* Compartir diálogo */ +.share-dialog { + position: absolute; + top: 50%; + right: 50px; + width: 250px; + background-color: white; + border-radius: 8px; + box-shadow: 0 5px 20px rgba(0,0,0,0.15); + z-index: 1000; + padding: 15px; +} + +.share-title { + font-weight: bold; + margin-bottom: 15px; + color: #2d3748; + padding-bottom: 10px; + border-bottom: 1px solid #e0e6ed; +} + +.share-user { + display: flex; + align-items: center; + margin-bottom: 10px; +} + +.user-avatar-small { + width: 24px; + height: 24px; + border-radius: 50%; + background-color: #dfe4ea; + display: flex; + align-items: center; + justify-content: center; + font-size: 12px; + margin-right: 10px; +} + +.user-name { + font-size: 13px; + color: #2d3748; +} + +.add-user { + display: flex; + align-items: center; + justify-content: center; + padding: 8px; + margin-top: 10px; + background-color: #f0f3f7; + border-radius: 50px; + cursor: pointer; + font-size: 13px; + color: #718096; +} + +/* Responsive */ +@media (max-width: 768px) { + .sidebar { + width: 60px; + padding: 15px 10px; + } + + .app-name, .storage-title, .storage-info { + display: none; + } + + .nav-item { + justify-content: center; + padding: 12px 0; + } + + .nav-item i { + margin-right: 0; + } + + .nav-item span { + display: none; + } +} + +/* Folder selection for move dialog */ +.folder-select-item { + padding: 8px 10px; + margin-bottom: 5px; + border-radius: 4px; + cursor: pointer; + display: flex; + align-items: center; +} + +.folder-select-item:hover { + background-color: #f0f8ff; +} + +.folder-select-item.selected { + background-color: #e6f7ff; + border-left: 3px solid #1890ff; +} + +.folder-select-item i { + margin-right: 8px; + color: #ffc107; +} diff --git a/static/index.html b/static/index.html index b0c0373f..0c138250 100644 --- a/static/index.html +++ b/static/index.html @@ -3,822 +3,21 @@
-