Merge all role-dispatcher pages into single files; add FileBrowser with file-type icons

- DashboardPage, Projects, RequestsPage, ProjectDetailPage, RequestDetail: each now handles team/external/client in one file via role flags — removed 10 old role-specific sub-files
- Layout: client Company nav link goes directly to /company/:id when user has a single company
- FileBrowser: replace emoji icons with colored extension-text badges (square); folder icon stays 📁; Adobe/Figma/design-tool colors for design files
- CompaniesPage: merged team Companies + client company routing (single-company redirect, multi-company list)
- FileSharing: integrated FileBrowser component
- Removed: seafile API + lib, old ServerStatus, TaskDetail, role-split page files

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Krao Hasanee
2026-05-19 22:11:34 -04:00
parent f9e66dfced
commit b9a4c4a353
47 changed files with 5202 additions and 7217 deletions
+57 -7
View File
@@ -131,7 +131,7 @@ body {
top: 0;
width: 26px;
height: 26px;
border-radius: 20px;
border-radius: 4px;
border: 1px solid #333;
background: transparent;
color: var(--sidebar-text);
@@ -161,7 +161,7 @@ body {
.sidebar-link {
display: flex; align-items: center; gap: 10px;
padding: 9px 12px; border-radius: 20px;
padding: 9px 12px; border-radius: 4px;
color: var(--sidebar-text); text-decoration: none;
font-size: 13px; font-weight: 500;
transition: background 0.15s, color 0.15s;
@@ -185,7 +185,7 @@ body {
.sidebar-theme-toggle {
background: transparent;
border: 1px solid #333;
border-radius: 20px;
border-radius: 4px;
padding: 7px 10px;
cursor: pointer;
color: #888;
@@ -615,7 +615,7 @@ body {
.file-row {
display: grid;
grid-template-columns: 34px minmax(260px, 1fr) minmax(90px, 120px) minmax(110px, 140px) minmax(170px, 190px);
grid-template-columns: 34px minmax(180px, 2fr) minmax(90px, 120px) minmax(110px, 140px) minmax(220px, 1fr);
gap: 10px;
align-items: center;
width: 100%;
@@ -692,6 +692,7 @@ body {
.file-meta {
color: var(--text-secondary);
font-size: 12px;
text-align: right;
}
.file-row-actions {
@@ -700,6 +701,44 @@ body {
justify-content: flex-end;
}
.file-action-btn {
width: 32px;
height: 32px;
padding: 0;
justify-content: center;
font-size: 14px;
}
.btn-icon {
background: none;
border: none;
cursor: pointer;
padding: 4px 6px;
color: var(--text-secondary);
display: inline-flex;
align-items: center;
border-radius: 6px;
font-family: inherit;
font-size: 17px;
line-height: 1;
transition: color 0.15s, background 0.15s;
}
.btn-icon:hover:not(:disabled) {
color: var(--text-primary);
background: var(--interactive-row-hover);
}
.btn-icon:disabled {
opacity: 0.4;
cursor: not-allowed;
}
.btn-icon-danger {
color: var(--danger);
}
.btn-icon-danger:hover:not(:disabled) {
color: var(--danger);
background: var(--interactive-row-hover);
}
.file-drop-overlay {
position: absolute;
inset: 0;
@@ -764,7 +803,7 @@ body {
}
.file-row {
grid-template-columns: 34px minmax(220px, 1fr) 90px 110px 170px;
grid-template-columns: 34px minmax(150px, 2fr) 90px 110px minmax(170px, 1fr);
min-width: 700px;
}
}
@@ -772,7 +811,7 @@ body {
/* Buttons */
.btn {
display: inline-flex; align-items: center; gap: 6px;
padding: 9px 18px; border-radius: 20px; font-size: 13px;
padding: 9px 18px; border-radius: 4px; font-size: 13px;
font-weight: 600; cursor: pointer; border: 1px solid transparent;
transition: all 0.15s; text-decoration: none; white-space: nowrap;
font-family: inherit; line-height: 1;
@@ -998,6 +1037,17 @@ select option { background: #222; color: #fff; }
color: var(--text-muted);
}
.request-toolbar-card { margin-bottom: 24px; }
.filter-select {
padding: 6px 10px;
border-radius: 4px;
border: 1px solid var(--border);
background: var(--card-bg);
color: var(--text);
font-size: 13px;
cursor: pointer;
width: 25%;
min-width: 120px;
}
.request-toolbar-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
@@ -1258,7 +1308,7 @@ select option { background: #222; color: #fff; }
/* Tab bar */
.tab-btn {
padding: 6px 14px;
border-radius: 20px;
border-radius: 4px;
border: 1px solid var(--border);
background: transparent;
color: var(--text-muted);