diff --git a/packages/docs/guides/development-workflow.md b/packages/docs/guides/development-workflow.md
index 2181aced4..1ecde3bf5 100644
--- a/packages/docs/guides/development-workflow.md
+++ b/packages/docs/guides/development-workflow.md
@@ -257,7 +257,6 @@ pnpm install
## Resources
-- [Contributing Guide](/.github/Contributing.md) - Detailed contribution guidelines
- [Architecture Diagrams](/architecture/) - System architecture
- [Error Handling Guide](/guides/error-handling) - Error handling patterns
- [Style Guide](/guides/style-guide) - UI/UX guidelines
diff --git a/packages/landing/app.config.timestamp_1766853344755.js b/packages/landing/app.config.timestamp_1766853344755.js
new file mode 100644
index 000000000..ab88ea3e8
--- /dev/null
+++ b/packages/landing/app.config.timestamp_1766853344755.js
@@ -0,0 +1,21 @@
+// app.config.js
+import { defineConfig } from "@solidjs/start/config";
+import tailwindcss from "@tailwindcss/vite";
+var app_config_default = defineConfig({
+ vite: {
+ plugins: [tailwindcss()],
+ build: {
+ target: ["es2020", "safari14"]
+ }
+ },
+ server: {
+ preset: "static",
+ prerender: {
+ routes: ["/", "/about", "/contact", "/privacy", "/resources", "/security", "/terms"],
+ crawlLinks: true
+ }
+ }
+});
+export {
+ app_config_default as default
+};
diff --git a/packages/web/jsconfig.json b/packages/web/jsconfig.json
index a70519a1e..88f23bb69 100644
--- a/packages/web/jsconfig.json
+++ b/packages/web/jsconfig.json
@@ -4,12 +4,11 @@
"paths": {
"@/*": ["src/*"],
"@components/*": ["src/components/*"],
- "@auth-ui/*": ["src/components/auth-ui/*"],
- "@checklist-ui/*": ["src/components/checklist-ui/*"],
- "@project-ui/*": ["src/components/project-ui/*"],
+ "@auth/*": ["src/components/auth/*"],
+ "@checklist/*": ["src/components/checklist/*"],
+ "@project/*": ["src/components/project/*"],
"@routes/*": ["src/routes/*"],
"@primitives/*": ["src/primitives/*"],
- "@auth/*": ["src/components/auth-ui/*"],
"@offline/*": ["src/offline/*"],
"@api/*": ["src/api/*"],
"@config/*": ["src/config/*"],
diff --git a/packages/web/src/AMSTAR2/checklist.js b/packages/web/src/AMSTAR2/checklist.js
index 99453750b..d97f34ebb 100644
--- a/packages/web/src/AMSTAR2/checklist.js
+++ b/packages/web/src/AMSTAR2/checklist.js
@@ -198,6 +198,53 @@ function getSelectedAnswer(answers, question) {
return null;
}
+/**
+ * Check if an AMSTAR2 checklist is complete (all questions have final answers).
+ * A question has a final answer if the last column has at least one option selected.
+ *
+ * @param {Object} checklist - The checklist object to validate
+ * @returns {boolean} True if all questions have final answers, false otherwise
+ */
+export function isAMSTAR2Complete(checklist) {
+ if (!checklist || typeof checklist !== 'object') return false;
+
+ // All required AMSTAR2 questions
+ const requiredQuestions = [
+ 'q1',
+ 'q2',
+ 'q3',
+ 'q4',
+ 'q5',
+ 'q6',
+ 'q7',
+ 'q8',
+ 'q9a',
+ 'q9b',
+ 'q10',
+ 'q11a',
+ 'q11b',
+ 'q12',
+ 'q13',
+ 'q14',
+ 'q15',
+ 'q16',
+ ];
+
+ // Check each required question has a final answer
+ for (const questionKey of requiredQuestions) {
+ const question = checklist[questionKey];
+ if (!question || !Array.isArray(question.answers)) return false;
+
+ // Check if the last column has at least one option selected
+ const lastCol = question.answers[question.answers.length - 1];
+ if (!Array.isArray(lastCol)) return false;
+ const hasAnswer = lastCol.some(v => v === true);
+ if (!hasAnswer) return false;
+ }
+
+ return true;
+}
+
export function getAnswers(checklist) {
if (!checklist || typeof checklist !== 'object') return null;
const result = {};
diff --git a/packages/web/src/Layout.jsx b/packages/web/src/Layout.jsx
index ce2664143..e4fd3aa0c 100644
--- a/packages/web/src/Layout.jsx
+++ b/packages/web/src/Layout.jsx
@@ -2,7 +2,7 @@ import { createSignal, onMount } from 'solid-js';
import Navbar from './components/Navbar.jsx';
import Sidebar from './components/sidebar/Sidebar.jsx';
import { Toaster } from '@corates/ui';
-import { ImpersonationBanner } from '@components/admin-ui/index.js';
+import { ImpersonationBanner } from '@/components/admin/index.js';
import { isImpersonating } from '@/stores/adminStore.js';
const SIDEBAR_STORAGE_KEY = 'corates-sidebar-open';
diff --git a/packages/web/src/Routes.jsx b/packages/web/src/Routes.jsx
index 96316f832..6464ee045 100644
--- a/packages/web/src/Routes.jsx
+++ b/packages/web/src/Routes.jsx
@@ -1,24 +1,24 @@
import { Router, Route } from '@solidjs/router';
import Dashboard from './components/Dashboard.jsx';
-import SignIn from '@auth-ui/SignIn.jsx';
-import SignUp from '@auth-ui/SignUp.jsx';
-import CheckEmail from '@auth-ui/CheckEmail.jsx';
-import CompleteProfile from '@auth-ui/CompleteProfile.jsx';
-import ResetPassword from '@auth-ui/ResetPassword.jsx';
-import AuthLayout from '@auth-ui/AuthLayout.jsx';
+import SignIn from '@/components/auth/SignIn.jsx';
+import SignUp from '@/components/auth/SignUp.jsx';
+import CheckEmail from '@/components/auth/CheckEmail.jsx';
+import CompleteProfile from '@/components/auth/CompleteProfile.jsx';
+import ResetPassword from '@/components/auth/ResetPassword.jsx';
+import AuthLayout from '@/components/auth/AuthLayout.jsx';
import Layout from '@/Layout.jsx';
-import ChecklistYjsWrapper from '@checklist-ui/ChecklistYjsWrapper.jsx';
-import ReconciliationWrapper from '@/components/checklist-ui/compare/ReconciliationWrapper.jsx';
-import ProjectView from '@project-ui/ProjectView.jsx';
-import LocalChecklistView from '@checklist-ui/LocalChecklistView.jsx';
-import ProfilePage from '@components/profile-ui/ProfilePage.jsx';
-import SettingsPage from '@components/profile-ui/SettingsPage.jsx';
+import ChecklistYjsWrapper from '@/components/checklist/ChecklistYjsWrapper.jsx';
+import ReconciliationWrapper from '@/components/checklist/compare/ReconciliationWrapper.jsx';
+import ProjectView from '@/components/project/ProjectView.jsx';
+import LocalChecklistView from '@/components/checklist/LocalChecklistView.jsx';
+import ProfilePage from '@/components/profile/ProfilePage.jsx';
+import SettingsPage from '@/components/profile/SettingsPage.jsx';
import BillingPage from '@components/billing/BillingPage.jsx';
import NotFoundPage from '@components/NotFoundPage.jsx';
-import { AdminDashboard } from '@components/admin-ui/index.js';
-import StorageManagement from '@components/admin-ui/StorageManagement.jsx';
+import { AdminDashboard } from '@/components/admin/index.js';
+import StorageManagement from '@/components/admin/StorageManagement.jsx';
import { BASEPATH } from '@config/api.js';
-import ProtectedGuard from '@/components/auth-ui/ProtectedGuard.jsx';
+import ProtectedGuard from '@/components/auth/ProtectedGuard.jsx';
export default function AppRoutes() {
return (
diff --git a/packages/web/src/components/Dashboard.jsx b/packages/web/src/components/Dashboard.jsx
index 02f19ef01..a8d65803f 100644
--- a/packages/web/src/components/Dashboard.jsx
+++ b/packages/web/src/components/Dashboard.jsx
@@ -1,6 +1,6 @@
import { Show } from 'solid-js';
-import ProjectDashboard from '@project-ui/ProjectDashboard.jsx';
-import ChecklistsDashboard from '@checklist-ui/ChecklistsDashboard.jsx';
+import ProjectDashboard from '@/components/project/ProjectDashboard.jsx';
+import ChecklistsDashboard from '@/components/checklist/ChecklistsDashboard.jsx';
import { useBetterAuth } from '@api/better-auth-store.js';
import { API_BASE } from '@config/api.js';
diff --git a/packages/web/src/components/admin-ui/AdminDashboard.jsx b/packages/web/src/components/admin/AdminDashboard.jsx
similarity index 100%
rename from packages/web/src/components/admin-ui/AdminDashboard.jsx
rename to packages/web/src/components/admin/AdminDashboard.jsx
diff --git a/packages/web/src/components/admin-ui/ImpersonationBanner.jsx b/packages/web/src/components/admin/ImpersonationBanner.jsx
similarity index 100%
rename from packages/web/src/components/admin-ui/ImpersonationBanner.jsx
rename to packages/web/src/components/admin/ImpersonationBanner.jsx
diff --git a/packages/web/src/components/admin-ui/StatsCard.jsx b/packages/web/src/components/admin/StatsCard.jsx
similarity index 100%
rename from packages/web/src/components/admin-ui/StatsCard.jsx
rename to packages/web/src/components/admin/StatsCard.jsx
diff --git a/packages/web/src/components/admin-ui/StorageManagement.jsx b/packages/web/src/components/admin/StorageManagement.jsx
similarity index 100%
rename from packages/web/src/components/admin-ui/StorageManagement.jsx
rename to packages/web/src/components/admin/StorageManagement.jsx
diff --git a/packages/web/src/components/admin-ui/UserTable.jsx b/packages/web/src/components/admin/UserTable.jsx
similarity index 100%
rename from packages/web/src/components/admin-ui/UserTable.jsx
rename to packages/web/src/components/admin/UserTable.jsx
diff --git a/packages/web/src/components/admin-ui/index.js b/packages/web/src/components/admin/index.js
similarity index 100%
rename from packages/web/src/components/admin-ui/index.js
rename to packages/web/src/components/admin/index.js
diff --git a/packages/web/src/components/auth-ui/AuthButtons.jsx b/packages/web/src/components/auth/AuthButtons.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/AuthButtons.jsx
rename to packages/web/src/components/auth/AuthButtons.jsx
diff --git a/packages/web/src/components/auth-ui/AuthLayout.jsx b/packages/web/src/components/auth/AuthLayout.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/AuthLayout.jsx
rename to packages/web/src/components/auth/AuthLayout.jsx
diff --git a/packages/web/src/components/auth-ui/CheckEmail.jsx b/packages/web/src/components/auth/CheckEmail.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/CheckEmail.jsx
rename to packages/web/src/components/auth/CheckEmail.jsx
diff --git a/packages/web/src/components/auth-ui/CompleteProfile.jsx b/packages/web/src/components/auth/CompleteProfile.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/CompleteProfile.jsx
rename to packages/web/src/components/auth/CompleteProfile.jsx
diff --git a/packages/web/src/components/auth-ui/ErrorMessage.jsx b/packages/web/src/components/auth/ErrorMessage.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/ErrorMessage.jsx
rename to packages/web/src/components/auth/ErrorMessage.jsx
diff --git a/packages/web/src/components/auth-ui/LastLoginHint.jsx b/packages/web/src/components/auth/LastLoginHint.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/LastLoginHint.jsx
rename to packages/web/src/components/auth/LastLoginHint.jsx
diff --git a/packages/web/src/components/auth-ui/MagicLinkForm.jsx b/packages/web/src/components/auth/MagicLinkForm.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/MagicLinkForm.jsx
rename to packages/web/src/components/auth/MagicLinkForm.jsx
diff --git a/packages/web/src/components/auth-ui/ProtectedGuard.jsx b/packages/web/src/components/auth/ProtectedGuard.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/ProtectedGuard.jsx
rename to packages/web/src/components/auth/ProtectedGuard.jsx
diff --git a/packages/web/src/components/auth-ui/ResetPassword.jsx b/packages/web/src/components/auth/ResetPassword.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/ResetPassword.jsx
rename to packages/web/src/components/auth/ResetPassword.jsx
diff --git a/packages/web/src/components/auth-ui/RoleSelector.jsx b/packages/web/src/components/auth/RoleSelector.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/RoleSelector.jsx
rename to packages/web/src/components/auth/RoleSelector.jsx
diff --git a/packages/web/src/components/auth-ui/SignIn.jsx b/packages/web/src/components/auth/SignIn.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/SignIn.jsx
rename to packages/web/src/components/auth/SignIn.jsx
diff --git a/packages/web/src/components/auth-ui/SignUp.jsx b/packages/web/src/components/auth/SignUp.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/SignUp.jsx
rename to packages/web/src/components/auth/SignUp.jsx
diff --git a/packages/web/src/components/auth-ui/SocialAuthButtons.jsx b/packages/web/src/components/auth/SocialAuthButtons.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/SocialAuthButtons.jsx
rename to packages/web/src/components/auth/SocialAuthButtons.jsx
diff --git a/packages/web/src/components/auth-ui/StepIndicator.jsx b/packages/web/src/components/auth/StepIndicator.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/StepIndicator.jsx
rename to packages/web/src/components/auth/StepIndicator.jsx
diff --git a/packages/web/src/components/auth-ui/StrengthIndicator.jsx b/packages/web/src/components/auth/StrengthIndicator.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/StrengthIndicator.jsx
rename to packages/web/src/components/auth/StrengthIndicator.jsx
diff --git a/packages/web/src/components/auth-ui/TwoFactorVerify.jsx b/packages/web/src/components/auth/TwoFactorVerify.jsx
similarity index 100%
rename from packages/web/src/components/auth-ui/TwoFactorVerify.jsx
rename to packages/web/src/components/auth/TwoFactorVerify.jsx
diff --git a/packages/web/src/components/checklist-ui/AMSTAR2Checklist.jsx b/packages/web/src/components/checklist/AMSTAR2Checklist.jsx
similarity index 99%
rename from packages/web/src/components/checklist-ui/AMSTAR2Checklist.jsx
rename to packages/web/src/components/checklist/AMSTAR2Checklist.jsx
index ab6cf57c5..64da4aa69 100644
--- a/packages/web/src/components/checklist-ui/AMSTAR2Checklist.jsx
+++ b/packages/web/src/components/checklist/AMSTAR2Checklist.jsx
@@ -3,7 +3,7 @@ import { AMSTAR_CHECKLIST } from '@/AMSTAR2/checklist-map.js';
import { createChecklist as createAMSTAR2Checklist } from '@/AMSTAR2/checklist.js';
import { FaSolidCircleInfo } from 'solid-icons/fa';
import { Tooltip } from '@corates/ui';
-import NoteEditor from '@checklist-ui/common/NoteEditor.jsx';
+import NoteEditor from '@/components/checklist/common/NoteEditor.jsx';
export function Question1(props) {
const state = () => props.checklistState().q1;
diff --git a/packages/web/src/components/checklist-ui/ChecklistWithPdf.jsx b/packages/web/src/components/checklist/ChecklistWithPdf.jsx
similarity index 86%
rename from packages/web/src/components/checklist-ui/ChecklistWithPdf.jsx
rename to packages/web/src/components/checklist/ChecklistWithPdf.jsx
index bda9f9b8e..e1b24873d 100644
--- a/packages/web/src/components/checklist-ui/ChecklistWithPdf.jsx
+++ b/packages/web/src/components/checklist/ChecklistWithPdf.jsx
@@ -5,9 +5,9 @@
* Supports multiple checklist types via the GenericChecklist component.
*/
-import GenericChecklist from '@checklist-ui/GenericChecklist.jsx';
-import PdfViewer from '@/components/checklist-ui/pdf/PdfViewer.jsx';
-import SplitScreenLayout from '@checklist-ui/SplitScreenLayout.jsx';
+import GenericChecklist from '@/components/checklist/GenericChecklist.jsx';
+import PdfViewer from '@/components/checklist/pdf/PdfViewer.jsx';
+import SplitScreenLayout from '@/components/checklist/SplitScreenLayout.jsx';
export default function ChecklistWithPdf(props) {
// props.checklistType - the type of checklist ('AMSTAR2', 'ROBINS_I', etc.)
@@ -24,6 +24,7 @@ export default function ChecklistWithPdf(props) {
// props.selectedPdfId - currently selected PDF ID
// props.onPdfSelect - handler for PDF selection change
// props.getQuestionNote - function to get Y.Text for a question note
+ // props.pdfUrl - optional PDF URL (for server-hosted PDFs)
return (
@@ -33,6 +34,8 @@ export default function ChecklistWithPdf(props) {
defaultRatio={50}
showSecondPanel={false}
headerContent={props.headerContent}
+ pdfUrl={props.pdfUrl}
+ pdfData={props.pdfData}
>
{/* First panel: Checklist (type-aware) */}
{
- const checklist = currentChecklist();
- const study = currentStudy();
- if (!checklist) return 'todo';
+ // Validate checklist completion - only for AMSTAR2 checklists
+ const isChecklistValid = createMemo(() => {
+ const type = checklistType();
+ const checklist = checklistForUI();
- if (checklist.status === CHECKLIST_STATUS.COMPLETED) {
- // Completed checklist: navigate to appropriate tab
- const isSingleReviewer = study?.reviewer1 && !study?.reviewer2;
- return isSingleReviewer ? 'completed' : 'reconcile';
- }
+ // For non-AMSTAR2 checklists, allow completion (no validation)
+ if (type !== 'AMSTAR2') return true;
- if (checklist.status === CHECKLIST_STATUS.AWAITING_RECONCILE) {
- return 'reconcile';
- }
+ // For AMSTAR2, check if all questions have final answers
+ if (!checklist) return false;
+ return isAMSTAR2Complete(checklist);
+ });
+
+ // Generate PDF URL for opening in new tab
+ const pdfUrl = createMemo(() => {
+ const fileName = pdfFileName();
+ if (!fileName) return null;
+ return getPdfUrl(params.projectId, params.studyId, fileName);
+ });
- return 'todo';
+ // Determine back button navigation from tab query param
+ const getBackTab = () => {
+ // console.log('location', location.search);
+ const tabFromUrl = new URLSearchParams(location.search).get('tab');
+ return tabFromUrl || 'overview';
};
// Header content for the split screen toolbar (left side)
@@ -357,9 +376,16 @@ export default function ChecklistYjsWrapper() {
>
diff --git a/packages/web/src/components/checklist-ui/common/NoteEditor.jsx b/packages/web/src/components/checklist/common/NoteEditor.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/common/NoteEditor.jsx
rename to packages/web/src/components/checklist/common/NoteEditor.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/AnswerPanel.jsx b/packages/web/src/components/checklist/compare/AnswerPanel.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/AnswerPanel.jsx
rename to packages/web/src/components/checklist/compare/AnswerPanel.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/ChecklistReconciliation.jsx b/packages/web/src/components/checklist/compare/ChecklistReconciliation.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/ChecklistReconciliation.jsx
rename to packages/web/src/components/checklist/compare/ChecklistReconciliation.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/Footer.jsx b/packages/web/src/components/checklist/compare/Footer.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/Footer.jsx
rename to packages/web/src/components/checklist/compare/Footer.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/MultiPartQuestionPage.jsx b/packages/web/src/components/checklist/compare/MultiPartQuestionPage.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/MultiPartQuestionPage.jsx
rename to packages/web/src/components/checklist/compare/MultiPartQuestionPage.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/Navbar.jsx b/packages/web/src/components/checklist/compare/Navbar.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/Navbar.jsx
rename to packages/web/src/components/checklist/compare/Navbar.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/NotesCompareSection.jsx b/packages/web/src/components/checklist/compare/NotesCompareSection.jsx
similarity index 99%
rename from packages/web/src/components/checklist-ui/compare/NotesCompareSection.jsx
rename to packages/web/src/components/checklist/compare/NotesCompareSection.jsx
index 63cd99d7d..d009b7f9c 100644
--- a/packages/web/src/components/checklist-ui/compare/NotesCompareSection.jsx
+++ b/packages/web/src/components/checklist/compare/NotesCompareSection.jsx
@@ -8,7 +8,7 @@ import { createSignal, createEffect, onCleanup, Show } from 'solid-js';
import { BiRegularChevronRight } from 'solid-icons/bi';
import { BsJournalText, BsClipboard2 } from 'solid-icons/bs';
import { Collapsible } from '@corates/ui';
-import NoteEditor from '@checklist-ui/common/NoteEditor.jsx';
+import NoteEditor from '@/components/checklist/common/NoteEditor.jsx';
const MAX_LENGTH = 2000;
diff --git a/packages/web/src/components/checklist-ui/compare/ReconciliationQuestionPage.jsx b/packages/web/src/components/checklist/compare/ReconciliationQuestionPage.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/ReconciliationQuestionPage.jsx
rename to packages/web/src/components/checklist/compare/ReconciliationQuestionPage.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/ReconciliationWithPdf.jsx b/packages/web/src/components/checklist/compare/ReconciliationWithPdf.jsx
similarity index 94%
rename from packages/web/src/components/checklist-ui/compare/ReconciliationWithPdf.jsx
rename to packages/web/src/components/checklist/compare/ReconciliationWithPdf.jsx
index fccafb44c..060351a57 100644
--- a/packages/web/src/components/checklist-ui/compare/ReconciliationWithPdf.jsx
+++ b/packages/web/src/components/checklist/compare/ReconciliationWithPdf.jsx
@@ -6,10 +6,10 @@
import { Show, createMemo } from 'solid-js';
import { createStore } from 'solid-js/store';
import { AiOutlineArrowLeft } from 'solid-icons/ai';
-import PdfViewer from '@/components/checklist-ui/pdf/PdfViewer.jsx';
+import PdfViewer from '@/components/checklist/pdf/PdfViewer.jsx';
import ChecklistReconciliation from './ChecklistReconciliation.jsx';
import Navbar from './Navbar.jsx';
-import SplitScreenLayout from '@/components/checklist-ui/SplitScreenLayout.jsx';
+import SplitScreenLayout from '@/components/checklist/SplitScreenLayout.jsx';
export default function ReconciliationWithPdf(props) {
// props.checklist1 - First reviewer's checklist data
@@ -22,6 +22,7 @@ export default function ReconciliationWithPdf(props) {
// props.reviewer2Name - Display name for second reviewer
// props.pdfData - ArrayBuffer of the study PDF (optional)
// props.pdfFileName - Name of the PDF file (optional)
+ // props.pdfUrl - URL for the PDF (optional, for server-hosted PDFs)
// props.pdfLoading - Whether PDF is still loading
// props.pdfs - Array of PDFs for multi-PDF selection
// props.selectedPdfId - Currently selected PDF ID
@@ -83,9 +84,11 @@ export default function ReconciliationWithPdf(props) {
{/* First panel: Reconciliation view */}
{
+ const fileName = pdfFileName();
+ if (!fileName) return null;
+ return getPdfUrl(params.projectId, params.studyId, fileName);
+ });
+
// Get checklist metadata from store
const checklist1Meta = createMemo(() => {
const study = currentStudy();
@@ -445,6 +452,7 @@ export default function ReconciliationWrapper() {
onCancel={handleCancel}
pdfData={pdfData()}
pdfFileName={pdfFileName()}
+ pdfUrl={pdfUrl()}
pdfLoading={pdfLoading()}
pdfs={studyPdfs()}
selectedPdfId={selectedPdfId()}
diff --git a/packages/web/src/components/checklist-ui/compare/SummaryView.jsx b/packages/web/src/components/checklist/compare/SummaryView.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/SummaryView.jsx
rename to packages/web/src/components/checklist/compare/SummaryView.jsx
diff --git a/packages/web/src/components/checklist-ui/compare/navbar-utils.js b/packages/web/src/components/checklist/compare/navbar-utils.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/navbar-utils.js
rename to packages/web/src/components/checklist/compare/navbar-utils.js
diff --git a/packages/web/src/components/checklist-ui/compare/reconciliation-store.js b/packages/web/src/components/checklist/compare/reconciliation-store.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/compare/reconciliation-store.js
rename to packages/web/src/components/checklist/compare/reconciliation-store.js
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfEmptyState.jsx b/packages/web/src/components/checklist/pdf/PdfEmptyState.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfEmptyState.jsx
rename to packages/web/src/components/checklist/pdf/PdfEmptyState.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfList.jsx b/packages/web/src/components/checklist/pdf/PdfList.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfList.jsx
rename to packages/web/src/components/checklist/pdf/PdfList.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx b/packages/web/src/components/checklist/pdf/PdfListItem.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfListItem.jsx
rename to packages/web/src/components/checklist/pdf/PdfListItem.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfSelector.jsx b/packages/web/src/components/checklist/pdf/PdfSelector.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfSelector.jsx
rename to packages/web/src/components/checklist/pdf/PdfSelector.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfTagBadge.jsx b/packages/web/src/components/checklist/pdf/PdfTagBadge.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfTagBadge.jsx
rename to packages/web/src/components/checklist/pdf/PdfTagBadge.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfTagSelect.jsx b/packages/web/src/components/checklist/pdf/PdfTagSelect.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfTagSelect.jsx
rename to packages/web/src/components/checklist/pdf/PdfTagSelect.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx b/packages/web/src/components/checklist/pdf/PdfToolbar.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfToolbar.jsx
rename to packages/web/src/components/checklist/pdf/PdfToolbar.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/PdfViewer.jsx b/packages/web/src/components/checklist/pdf/PdfViewer.jsx
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/PdfViewer.jsx
rename to packages/web/src/components/checklist/pdf/PdfViewer.jsx
diff --git a/packages/web/src/components/checklist-ui/pdf/index.js b/packages/web/src/components/checklist/pdf/index.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/index.js
rename to packages/web/src/components/checklist/pdf/index.js
diff --git a/packages/web/src/components/checklist-ui/pdf/pdfDocument.js b/packages/web/src/components/checklist/pdf/pdfDocument.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/pdfDocument.js
rename to packages/web/src/components/checklist/pdf/pdfDocument.js
diff --git a/packages/web/src/components/checklist-ui/pdf/pdfFileHandler.js b/packages/web/src/components/checklist/pdf/pdfFileHandler.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/pdfFileHandler.js
rename to packages/web/src/components/checklist/pdf/pdfFileHandler.js
diff --git a/packages/web/src/components/checklist-ui/pdf/pdfRenderer.js b/packages/web/src/components/checklist/pdf/pdfRenderer.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/pdfRenderer.js
rename to packages/web/src/components/checklist/pdf/pdfRenderer.js
diff --git a/packages/web/src/components/checklist-ui/pdf/pdfScrollHandler.js b/packages/web/src/components/checklist/pdf/pdfScrollHandler.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/pdfScrollHandler.js
rename to packages/web/src/components/checklist/pdf/pdfScrollHandler.js
diff --git a/packages/web/src/components/checklist-ui/pdf/pdfTextSelection.js b/packages/web/src/components/checklist/pdf/pdfTextSelection.js
similarity index 95%
rename from packages/web/src/components/checklist-ui/pdf/pdfTextSelection.js
rename to packages/web/src/components/checklist/pdf/pdfTextSelection.js
index 82445c73a..3a1b9a13d 100644
--- a/packages/web/src/components/checklist-ui/pdf/pdfTextSelection.js
+++ b/packages/web/src/components/checklist/pdf/pdfTextSelection.js
@@ -37,6 +37,10 @@ export function createTextSelectionLayer(container, page, initialViewport) {
try {
const textContent = await page.getTextContent();
+
+ // Check again after async operation - cleanup may have run
+ if (!textLayerDiv) return;
+
textItems = textContent.items;
// Clear existing content
@@ -92,6 +96,8 @@ export function createTextSelectionLayer(container, page, initialViewport) {
span.style.height = `${itemHeight * viewport.scale}px`;
span.style.display = 'inline-block';
+ // Check again before appending - cleanup may have run during loop
+ if (!textLayerDiv) return;
textLayerDiv.appendChild(span);
}
} catch (err) {
diff --git a/packages/web/src/components/checklist-ui/pdf/usePdfJs.js b/packages/web/src/components/checklist/pdf/usePdfJs.js
similarity index 100%
rename from packages/web/src/components/checklist-ui/pdf/usePdfJs.js
rename to packages/web/src/components/checklist/pdf/usePdfJs.js
diff --git a/packages/web/src/components/profile-ui/AccountProviderCard.jsx b/packages/web/src/components/profile/AccountProviderCard.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/AccountProviderCard.jsx
rename to packages/web/src/components/profile/AccountProviderCard.jsx
diff --git a/packages/web/src/components/profile-ui/GoogleDriveSettings.jsx b/packages/web/src/components/profile/GoogleDriveSettings.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/GoogleDriveSettings.jsx
rename to packages/web/src/components/profile/GoogleDriveSettings.jsx
diff --git a/packages/web/src/components/profile-ui/LinkedAccountsSection.jsx b/packages/web/src/components/profile/LinkedAccountsSection.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/LinkedAccountsSection.jsx
rename to packages/web/src/components/profile/LinkedAccountsSection.jsx
diff --git a/packages/web/src/components/profile-ui/MergeAccountsDialog.jsx b/packages/web/src/components/profile/MergeAccountsDialog.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/MergeAccountsDialog.jsx
rename to packages/web/src/components/profile/MergeAccountsDialog.jsx
diff --git a/packages/web/src/components/profile-ui/ProfilePage.jsx b/packages/web/src/components/profile/ProfilePage.jsx
similarity index 99%
rename from packages/web/src/components/profile-ui/ProfilePage.jsx
rename to packages/web/src/components/profile/ProfilePage.jsx
index 326fd6f80..30d0dbb28 100644
--- a/packages/web/src/components/profile-ui/ProfilePage.jsx
+++ b/packages/web/src/components/profile/ProfilePage.jsx
@@ -3,7 +3,7 @@ import { useBetterAuth } from '@api/better-auth-store.js';
import { FiCamera } from 'solid-icons/fi';
import { showToast } from '@corates/ui';
import { LANDING_URL, API_BASE } from '@config/api.js';
-import { ROLES, getRoleLabel } from '@components/auth-ui/RoleSelector.jsx';
+import { ROLES, getRoleLabel } from '@/components/auth/RoleSelector.jsx';
import { compressImageFile } from '@lib/imageUtils.js';
const ALLOWED_TYPES = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
diff --git a/packages/web/src/components/profile-ui/SettingsPage.jsx b/packages/web/src/components/profile/SettingsPage.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/SettingsPage.jsx
rename to packages/web/src/components/profile/SettingsPage.jsx
diff --git a/packages/web/src/components/profile-ui/TwoFactorSetup.jsx b/packages/web/src/components/profile/TwoFactorSetup.jsx
similarity index 100%
rename from packages/web/src/components/profile-ui/TwoFactorSetup.jsx
rename to packages/web/src/components/profile/TwoFactorSetup.jsx
diff --git a/packages/web/src/components/project-ui/AddStudiesForm.jsx b/packages/web/src/components/project/AddStudiesForm.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/AddStudiesForm.jsx
rename to packages/web/src/components/project/AddStudiesForm.jsx
diff --git a/packages/web/src/components/project-ui/ChecklistForm.jsx b/packages/web/src/components/project/ChecklistForm.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ChecklistForm.jsx
rename to packages/web/src/components/project/ChecklistForm.jsx
diff --git a/packages/web/src/components/project-ui/ChecklistRow.jsx b/packages/web/src/components/project/ChecklistRow.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ChecklistRow.jsx
rename to packages/web/src/components/project/ChecklistRow.jsx
diff --git a/packages/web/src/components/project-ui/ContactPrompt.jsx b/packages/web/src/components/project/ContactPrompt.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ContactPrompt.jsx
rename to packages/web/src/components/project/ContactPrompt.jsx
diff --git a/packages/web/src/components/project-ui/CreateProjectForm.jsx b/packages/web/src/components/project/CreateProjectForm.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/CreateProjectForm.jsx
rename to packages/web/src/components/project/CreateProjectForm.jsx
diff --git a/packages/web/src/components/project-ui/PdfPreviewPanel.jsx b/packages/web/src/components/project/PdfPreviewPanel.jsx
similarity index 96%
rename from packages/web/src/components/project-ui/PdfPreviewPanel.jsx
rename to packages/web/src/components/project/PdfPreviewPanel.jsx
index ccb938948..6ada13354 100644
--- a/packages/web/src/components/project-ui/PdfPreviewPanel.jsx
+++ b/packages/web/src/components/project/PdfPreviewPanel.jsx
@@ -7,7 +7,7 @@
import { Show } from 'solid-js';
import SlidingPanel from './SlidingPanel.jsx';
-import PdfViewer from '@/components/checklist-ui/pdf/PdfViewer.jsx';
+import PdfViewer from '@/components/checklist/pdf/PdfViewer.jsx';
import pdfPreviewStore from '@/stores/pdfPreviewStore.js';
export default function PdfPreviewPanel() {
diff --git a/packages/web/src/components/project-ui/ProjectCard.jsx b/packages/web/src/components/project/ProjectCard.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ProjectCard.jsx
rename to packages/web/src/components/project/ProjectCard.jsx
diff --git a/packages/web/src/components/project-ui/ProjectContext.jsx b/packages/web/src/components/project/ProjectContext.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ProjectContext.jsx
rename to packages/web/src/components/project/ProjectContext.jsx
diff --git a/packages/web/src/components/project-ui/ProjectDashboard.jsx b/packages/web/src/components/project/ProjectDashboard.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ProjectDashboard.jsx
rename to packages/web/src/components/project/ProjectDashboard.jsx
diff --git a/packages/web/src/components/project-ui/ProjectHeader.jsx b/packages/web/src/components/project/ProjectHeader.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/ProjectHeader.jsx
rename to packages/web/src/components/project/ProjectHeader.jsx
diff --git a/packages/web/src/components/project-ui/ProjectView.jsx b/packages/web/src/components/project/ProjectView.jsx
similarity index 97%
rename from packages/web/src/components/project-ui/ProjectView.jsx
rename to packages/web/src/components/project/ProjectView.jsx
index 1c4050ecc..88dd41dca 100644
--- a/packages/web/src/components/project-ui/ProjectView.jsx
+++ b/packages/web/src/components/project/ProjectView.jsx
@@ -24,11 +24,11 @@ import { getChecklistCount } from '@/lib/checklist-domain.js';
import { ProjectProvider } from './ProjectContext.jsx';
import ProjectHeader from './ProjectHeader.jsx';
import PdfPreviewPanel from './PdfPreviewPanel.jsx';
-import { OverviewTab } from './overview-tab';
-import { AllStudiesTab } from './all-studies-tab';
-import { ToDoTab } from './todo-tab';
-import { ReconcileTab } from './reconcile-tab';
-import { CompletedTab } from './completed-tab';
+import { OverviewTab } from './overview-tab/index.js';
+import { AllStudiesTab } from './all-studies-tab/index.js';
+import { ToDoTab } from './todo-tab/index.js';
+import { ReconcileTab } from './reconcile-tab/index.js';
+import { CompletedTab } from './completed-tab/index.js';
export default function ProjectView() {
const params = useParams();
diff --git a/packages/web/src/components/project-ui/SlidingPanel.jsx b/packages/web/src/components/project/SlidingPanel.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/SlidingPanel.jsx
rename to packages/web/src/components/project/SlidingPanel.jsx
diff --git a/packages/web/src/components/project-ui/add-studies/AddStudiesContext.jsx b/packages/web/src/components/project/add-studies/AddStudiesContext.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/add-studies/AddStudiesContext.jsx
rename to packages/web/src/components/project/add-studies/AddStudiesContext.jsx
diff --git a/packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx b/packages/web/src/components/project/add-studies/DoiLookupSection.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/add-studies/DoiLookupSection.jsx
rename to packages/web/src/components/project/add-studies/DoiLookupSection.jsx
diff --git a/packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx b/packages/web/src/components/project/add-studies/GoogleDriveSection.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/add-studies/GoogleDriveSection.jsx
rename to packages/web/src/components/project/add-studies/GoogleDriveSection.jsx
diff --git a/packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx b/packages/web/src/components/project/add-studies/PdfUploadSection.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/add-studies/PdfUploadSection.jsx
rename to packages/web/src/components/project/add-studies/PdfUploadSection.jsx
diff --git a/packages/web/src/components/project-ui/add-studies/ReferenceImportSection.jsx b/packages/web/src/components/project/add-studies/ReferenceImportSection.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/add-studies/ReferenceImportSection.jsx
rename to packages/web/src/components/project/add-studies/ReferenceImportSection.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/AllStudiesTab.jsx b/packages/web/src/components/project/all-studies-tab/AllStudiesTab.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/AllStudiesTab.jsx
rename to packages/web/src/components/project/all-studies-tab/AllStudiesTab.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/AssignReviewersModal.jsx b/packages/web/src/components/project/all-studies-tab/AssignReviewersModal.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/AssignReviewersModal.jsx
rename to packages/web/src/components/project/all-studies-tab/AssignReviewersModal.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/EditPdfMetadataModal.jsx b/packages/web/src/components/project/all-studies-tab/EditPdfMetadataModal.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/EditPdfMetadataModal.jsx
rename to packages/web/src/components/project/all-studies-tab/EditPdfMetadataModal.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/index.js b/packages/web/src/components/project/all-studies-tab/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/index.js
rename to packages/web/src/components/project/all-studies-tab/index.js
diff --git a/packages/web/src/components/project-ui/all-studies-tab/study-card/StudyCard.jsx b/packages/web/src/components/project/all-studies-tab/study-card/StudyCard.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/study-card/StudyCard.jsx
rename to packages/web/src/components/project/all-studies-tab/study-card/StudyCard.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/study-card/StudyCardHeader.jsx b/packages/web/src/components/project/all-studies-tab/study-card/StudyCardHeader.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/study-card/StudyCardHeader.jsx
rename to packages/web/src/components/project/all-studies-tab/study-card/StudyCardHeader.jsx
diff --git a/packages/web/src/components/project-ui/all-studies-tab/study-card/StudyPdfSection.jsx b/packages/web/src/components/project/all-studies-tab/study-card/StudyPdfSection.jsx
similarity index 97%
rename from packages/web/src/components/project-ui/all-studies-tab/study-card/StudyPdfSection.jsx
rename to packages/web/src/components/project/all-studies-tab/study-card/StudyPdfSection.jsx
index 915730638..239aed520 100644
--- a/packages/web/src/components/project-ui/all-studies-tab/study-card/StudyPdfSection.jsx
+++ b/packages/web/src/components/project/all-studies-tab/study-card/StudyPdfSection.jsx
@@ -8,8 +8,8 @@
import { createSignal, createMemo, Show, For } from 'solid-js';
import { FaBrandsGoogleDrive, FaSolidPlus } from 'solid-icons/fa';
import { showToast } from '@corates/ui';
-import PdfListItem from '@/components/checklist-ui/pdf/PdfListItem.jsx';
-import EditPdfMetadataModal from '@/components/project-ui/all-studies-tab/EditPdfMetadataModal.jsx';
+import PdfListItem from '@/components/checklist/pdf/PdfListItem.jsx';
+import EditPdfMetadataModal from '@/components/project/all-studies-tab/EditPdfMetadataModal.jsx';
import projectActionsStore from '@/stores/projectActionsStore';
export default function StudyPdfSection(props) {
diff --git a/packages/web/src/components/project-ui/all-studies-tab/study-card/index.js b/packages/web/src/components/project/all-studies-tab/study-card/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/all-studies-tab/study-card/index.js
rename to packages/web/src/components/project/all-studies-tab/study-card/index.js
diff --git a/packages/web/src/components/project-ui/completed-tab/CompletedChecklistRow.jsx b/packages/web/src/components/project/completed-tab/CompletedChecklistRow.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/completed-tab/CompletedChecklistRow.jsx
rename to packages/web/src/components/project/completed-tab/CompletedChecklistRow.jsx
diff --git a/packages/web/src/components/project-ui/completed-tab/CompletedStudyCard.jsx b/packages/web/src/components/project/completed-tab/CompletedStudyCard.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/completed-tab/CompletedStudyCard.jsx
rename to packages/web/src/components/project/completed-tab/CompletedStudyCard.jsx
diff --git a/packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx b/packages/web/src/components/project/completed-tab/CompletedStudyRow.jsx
similarity index 99%
rename from packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
rename to packages/web/src/components/project/completed-tab/CompletedStudyRow.jsx
index d01db0b1a..8c2685246 100644
--- a/packages/web/src/components/project-ui/completed-tab/CompletedStudyRow.jsx
+++ b/packages/web/src/components/project/completed-tab/CompletedStudyRow.jsx
@@ -9,7 +9,7 @@ import { For, Show, createMemo, createSignal } from 'solid-js';
import { BiRegularChevronRight } from 'solid-icons/bi';
import { Collapsible } from '@corates/ui';
import { getChecklistMetadata } from '@/checklist-registry';
-import PdfListItem from '@/components/checklist-ui/pdf/PdfListItem.jsx';
+import PdfListItem from '@/components/checklist/pdf/PdfListItem.jsx';
import { getCompletedChecklists } from '@/lib/checklist-domain.js';
import { getStatusLabel, getStatusStyle } from '@/constants/checklist-status.js';
import PreviousReviewersView from './PreviousReviewersView.jsx';
diff --git a/packages/web/src/components/project-ui/completed-tab/CompletedTab.jsx b/packages/web/src/components/project/completed-tab/CompletedTab.jsx
similarity index 95%
rename from packages/web/src/components/project-ui/completed-tab/CompletedTab.jsx
rename to packages/web/src/components/project/completed-tab/CompletedTab.jsx
index 033b96f2e..cb8210690 100644
--- a/packages/web/src/components/project-ui/completed-tab/CompletedTab.jsx
+++ b/packages/web/src/components/project/completed-tab/CompletedTab.jsx
@@ -3,7 +3,7 @@ import { useNavigate } from '@solidjs/router';
import { AiFillCheckCircle } from 'solid-icons/ai';
import projectStore from '@/stores/projectStore.js';
import projectActionsStore from '@/stores/projectActionsStore';
-import { useProjectContext } from '@project-ui/ProjectContext.jsx';
+import { useProjectContext } from '@/components/project/ProjectContext.jsx';
import { getStudiesForTab, isDualReviewerStudy } from '@/lib/checklist-domain.js';
import useProject from '@/primitives/useProject/index.js';
import CompletedStudyRow from './CompletedStudyRow.jsx';
@@ -25,7 +25,7 @@ export default function CompletedTab() {
// Navigation helpers
const openChecklist = (studyId, checklistId) => {
- navigate(`/projects/${projectId}/studies/${studyId}/checklists/${checklistId}`);
+ navigate(`/projects/${projectId}/studies/${studyId}/checklists/${checklistId}?tab=completed`);
};
const handleViewPdf = (studyId, pdf) => {
diff --git a/packages/web/src/components/project-ui/completed-tab/PreviousReviewersView.jsx b/packages/web/src/components/project/completed-tab/PreviousReviewersView.jsx
similarity index 97%
rename from packages/web/src/components/project-ui/completed-tab/PreviousReviewersView.jsx
rename to packages/web/src/components/project/completed-tab/PreviousReviewersView.jsx
index 9de2d9279..43e1f4c9b 100644
--- a/packages/web/src/components/project-ui/completed-tab/PreviousReviewersView.jsx
+++ b/packages/web/src/components/project/completed-tab/PreviousReviewersView.jsx
@@ -7,11 +7,11 @@
import { Show, createMemo, createSignal, createEffect } from 'solid-js';
import { Dialog, Tabs } from '@corates/ui';
-import { useProjectContext } from '@project-ui/ProjectContext.jsx';
+import { useProjectContext } from '@/components/project/ProjectContext.jsx';
import useProject from '@/primitives/useProject/index.js';
import { getOriginalReviewerChecklists } from '@/lib/checklist-domain.js';
import { getChecklistMetadata } from '@/checklist-registry';
-import GenericChecklist from '@/components/checklist-ui/GenericChecklist.jsx';
+import GenericChecklist from '@/components/checklist/GenericChecklist.jsx';
export default function PreviousReviewersView(props) {
// props.study: Study object
diff --git a/packages/web/src/components/project-ui/completed-tab/index.js b/packages/web/src/components/project/completed-tab/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/completed-tab/index.js
rename to packages/web/src/components/project/completed-tab/index.js
diff --git a/packages/web/src/components/project-ui/google-drive/GoogleDrivePickerLauncher.jsx b/packages/web/src/components/project/google-drive/GoogleDrivePickerLauncher.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/google-drive/GoogleDrivePickerLauncher.jsx
rename to packages/web/src/components/project/google-drive/GoogleDrivePickerLauncher.jsx
diff --git a/packages/web/src/components/project-ui/google-drive/GoogleDrivePickerModal.jsx b/packages/web/src/components/project/google-drive/GoogleDrivePickerModal.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/google-drive/GoogleDrivePickerModal.jsx
rename to packages/web/src/components/project/google-drive/GoogleDrivePickerModal.jsx
diff --git a/packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx b/packages/web/src/components/project/overview-tab/AMSTAR2ResultsTable.jsx
similarity index 96%
rename from packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
rename to packages/web/src/components/project/overview-tab/AMSTAR2ResultsTable.jsx
index 93a9dfe10..898a8dbd4 100644
--- a/packages/web/src/components/project-ui/overview-tab/AMSTAR2ResultsTable.jsx
+++ b/packages/web/src/components/project/overview-tab/AMSTAR2ResultsTable.jsx
@@ -1,7 +1,7 @@
import { For, Show, createMemo } from 'solid-js';
import { scoreChecklist } from '@/AMSTAR2/checklist.js';
import { CHECKLIST_STATUS } from '@/constants/checklist-status.js';
-import ScoreTag from '@/components/checklist-ui/ScoreTag.jsx';
+import ScoreTag, { ScoreTooltip } from '@/components/checklist/ScoreTag.jsx';
/**
* AMSTAR2ResultsTable - Displays AMSTAR 2 quality scores for each study
@@ -172,7 +172,9 @@ export default function AMSTAR2ResultsTable(props) {
scope='col'
class='px-6 py-3 text-left text-xs font-medium tracking-wider text-gray-500 uppercase'
>
- Score
+
+ Rating
+
@@ -184,7 +186,7 @@ export default function AMSTAR2ResultsTable(props) {
{item.studyName}
-
+
)}
diff --git a/packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx b/packages/web/src/components/project/overview-tab/AddMemberModal.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/overview-tab/AddMemberModal.jsx
rename to packages/web/src/components/project/overview-tab/AddMemberModal.jsx
diff --git a/packages/web/src/components/project-ui/overview-tab/ChartSection.jsx b/packages/web/src/components/project/overview-tab/ChartSection.jsx
similarity index 99%
rename from packages/web/src/components/project-ui/overview-tab/ChartSection.jsx
rename to packages/web/src/components/project/overview-tab/ChartSection.jsx
index 7aae252bb..718c7360c 100644
--- a/packages/web/src/components/project-ui/overview-tab/ChartSection.jsx
+++ b/packages/web/src/components/project/overview-tab/ChartSection.jsx
@@ -104,7 +104,7 @@ export default function ChartSection(props) {
const [greyscale, setGreyscale] = createSignal(false);
const [robvisTitle, setRobvisTitle] = createSignal('AMSTAR-2 Quality Assessment');
const [distributionTitle, setDistributionTitle] = createSignal(
- 'Distribution of AMSTAR Ratings on Each Item Across Included Reviews',
+ 'Distribution of AMSTAR2 Ratings on Each Item Across Included Reviews',
);
const [transparentExport, setTransparentExport] = createSignal(false);
diff --git a/packages/web/src/components/project-ui/overview-tab/CircularProgress.jsx b/packages/web/src/components/project/overview-tab/CircularProgress.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/overview-tab/CircularProgress.jsx
rename to packages/web/src/components/project/overview-tab/CircularProgress.jsx
diff --git a/packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx b/packages/web/src/components/project/overview-tab/OverviewTab.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/overview-tab/OverviewTab.jsx
rename to packages/web/src/components/project/overview-tab/OverviewTab.jsx
diff --git a/packages/web/src/components/project-ui/overview-tab/ReviewerAssignment.jsx b/packages/web/src/components/project/overview-tab/ReviewerAssignment.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/overview-tab/ReviewerAssignment.jsx
rename to packages/web/src/components/project/overview-tab/ReviewerAssignment.jsx
diff --git a/packages/web/src/components/project-ui/overview-tab/index.js b/packages/web/src/components/project/overview-tab/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/overview-tab/index.js
rename to packages/web/src/components/project/overview-tab/index.js
diff --git a/packages/web/src/components/project-ui/reconcile-tab/ReconcileStatusTag.jsx b/packages/web/src/components/project/reconcile-tab/ReconcileStatusTag.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/reconcile-tab/ReconcileStatusTag.jsx
rename to packages/web/src/components/project/reconcile-tab/ReconcileStatusTag.jsx
diff --git a/packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx b/packages/web/src/components/project/reconcile-tab/ReconcileStudyRow.jsx
similarity index 98%
rename from packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
rename to packages/web/src/components/project/reconcile-tab/ReconcileStudyRow.jsx
index 75fb6ecda..49f9978e4 100644
--- a/packages/web/src/components/project-ui/reconcile-tab/ReconcileStudyRow.jsx
+++ b/packages/web/src/components/project/reconcile-tab/ReconcileStudyRow.jsx
@@ -11,7 +11,7 @@ import { BsFileDiff } from 'solid-icons/bs';
import { Collapsible } from '@corates/ui';
import { CHECKLIST_STATUS } from '@/constants/checklist-status.js';
import { isReconciledChecklist } from '@/lib/checklist-domain.js';
-import PdfListItem from '@/components/checklist-ui/pdf/PdfListItem.jsx';
+import PdfListItem from '@/components/checklist/pdf/PdfListItem.jsx';
import ReconcileStatusTag from './ReconcileStatusTag.jsx';
export default function ReconcileStudyRow(props) {
diff --git a/packages/web/src/components/project-ui/reconcile-tab/ReconcileTab.jsx b/packages/web/src/components/project/reconcile-tab/ReconcileTab.jsx
similarity index 100%
rename from packages/web/src/components/project-ui/reconcile-tab/ReconcileTab.jsx
rename to packages/web/src/components/project/reconcile-tab/ReconcileTab.jsx
diff --git a/packages/web/src/components/project-ui/reconcile-tab/index.js b/packages/web/src/components/project/reconcile-tab/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/reconcile-tab/index.js
rename to packages/web/src/components/project/reconcile-tab/index.js
diff --git a/packages/web/src/components/project-ui/todo-tab/ToDoTab.jsx b/packages/web/src/components/project/todo-tab/ToDoTab.jsx
similarity index 99%
rename from packages/web/src/components/project-ui/todo-tab/ToDoTab.jsx
rename to packages/web/src/components/project/todo-tab/ToDoTab.jsx
index d05ad248b..05390e235 100644
--- a/packages/web/src/components/project-ui/todo-tab/ToDoTab.jsx
+++ b/packages/web/src/components/project/todo-tab/ToDoTab.jsx
@@ -48,7 +48,7 @@ export default function ToDoTab() {
};
const openChecklist = (studyId, checklistId) => {
- navigate(`/projects/${projectId}/studies/${studyId}/checklists/${checklistId}`);
+ navigate(`/projects/${projectId}/studies/${studyId}/checklists/${checklistId}?tab=todo`);
};
const handleViewPdf = (studyId, pdf) => {
diff --git a/packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx b/packages/web/src/components/project/todo-tab/TodoStudyRow.jsx
similarity index 98%
rename from packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
rename to packages/web/src/components/project/todo-tab/TodoStudyRow.jsx
index 9aea1e661..c033a644c 100644
--- a/packages/web/src/components/project-ui/todo-tab/TodoStudyRow.jsx
+++ b/packages/web/src/components/project/todo-tab/TodoStudyRow.jsx
@@ -9,7 +9,7 @@ import { For, Show, createMemo, createSignal } from 'solid-js';
import { BiRegularChevronRight } from 'solid-icons/bi';
import { Collapsible } from '@corates/ui';
import { getChecklistMetadata } from '@/checklist-registry';
-import PdfListItem from '@/components/checklist-ui/pdf/PdfListItem.jsx';
+import PdfListItem from '@/components/checklist/pdf/PdfListItem.jsx';
import ChecklistForm from '../ChecklistForm.jsx';
import { getStatusLabel, getStatusStyle } from '@/constants/checklist-status.js';
diff --git a/packages/web/src/components/project-ui/todo-tab/index.js b/packages/web/src/components/project/todo-tab/index.js
similarity index 100%
rename from packages/web/src/components/project-ui/todo-tab/index.js
rename to packages/web/src/components/project/todo-tab/index.js
diff --git a/packages/web/vite.config.js b/packages/web/vite.config.js
index 70b2e9ed5..8c61dbebf 100644
--- a/packages/web/vite.config.js
+++ b/packages/web/vite.config.js
@@ -11,10 +11,9 @@ export default defineConfig(({ mode }) => ({
'@components': path.resolve(__dirname, 'src/components'),
'@routes': path.resolve(__dirname, 'src/routes'),
'@primitives': path.resolve(__dirname, 'src/primitives'),
- '@auth': path.resolve(__dirname, 'src/auth'),
- '@auth-ui': path.resolve(__dirname, 'src/components/auth-ui'),
- '@checklist-ui': path.resolve(__dirname, 'src/components/checklist-ui'),
- '@project-ui': path.resolve(__dirname, 'src/components/project-ui'),
+ '@auth': path.resolve(__dirname, 'src/components/auth'),
+ '@checklist': path.resolve(__dirname, 'src/components/checklist'),
+ '@project': path.resolve(__dirname, 'src/components/project'),
'@offline': path.resolve(__dirname, 'src/offline'),
'@api': path.resolve(__dirname, 'src/api'),
'@config': path.resolve(__dirname, 'src/config'),
diff --git a/packages/workers/src/__tests__/admin.test.js b/packages/workers/src/__tests__/admin.test.js
index 750f631c4..68db96137 100644
--- a/packages/workers/src/__tests__/admin.test.js
+++ b/packages/workers/src/__tests__/admin.test.js
@@ -93,7 +93,7 @@ async function resetSchema() {
for (const table of tablesToDrop) {
try {
await run(`DROP TABLE IF EXISTS \`${table}\``);
- } catch (error) {
+ } catch (_error) {
// Ignore all errors during drop - tables might not exist or have constraint issues
// This is safe because we're recreating the schema anyway
}