Changeset ba52069 for src/app/students
- Timestamp:
- 02/13/26 19:32:02 (7 months ago)
- Branches:
- master
- Children:
- d7deae5
- Parents:
- 50f2fb4
- Location:
- src/app/students
- Files:
-
- 6 edited
-
applications/page.tsx (modified) (17 diffs)
-
documents/page.tsx (modified) (27 diffs)
-
layout.tsx (modified) (1 diff)
-
profile/page.tsx (modified) (4 diffs)
-
semesters/page.tsx (modified) (18 diffs)
-
subjects/page.tsx (modified) (17 diffs)
Legend:
- Unmodified
- Added
- Removed
-
src/app/students/applications/page.tsx
r50f2fb4 rba52069 23 23 24 24 const TableCell = ({ children, className = "" }: TableCellProps) => ( 25 <td className={`px-4 py-3 text-sm border-b border- gray-200${className}`}>25 <td className={`px-4 py-3 text-sm border-b border-border ${className}`}> 26 26 {children} 27 27 </td> … … 78 78 <div className="bg-primary text-white rounded-xl p-8 mb-8"> 79 79 <div className="flex items-center gap-4"> 80 <div className="bg-white bg-opacity-20rounded-full p-4">81 <FontAwesomeIcon icon={faPenToSquare} className="text-3xl text- primary" />80 <div className="bg-white rounded-full p-4"> 81 <FontAwesomeIcon icon={faPenToSquare} className="text-3xl text-[#0272D1]" /> 82 82 </div> 83 83 <div> … … 91 91 92 92 {/* Session Selection */} 93 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100mb-8">93 <div className="bg-card rounded-xl p-6 shadow-sm border border-border mb-8"> 94 94 <div className="flex items-center justify-between"> 95 <h2 className="text-lg font-semibold text- gray-900flex items-center gap-2">95 <h2 className="text-lg font-semibold text-card-foreground flex items-center gap-2"> 96 96 <FontAwesomeIcon icon={faCalendarAlt} className="text-primary" /> 97 97 {t('select_exam_session', 'Избери испитна сесија:')} … … 101 101 <button 102 102 onClick={() => setIsDropdownOpen(!isDropdownOpen)} 103 className="bg- white border border-gray-300rounded-lg px-4 py-2 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary min-w-80"103 className="bg-card border border-border rounded-lg px-4 py-2 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary min-w-80" 104 104 > 105 105 <div className="flex items-center justify-between"> … … 109 109 <FontAwesomeIcon 110 110 icon={faChevronDown} 111 className={`w-4 h-4 text- gray-400transition-transform ml-4 ${isDropdownOpen ? 'rotate-180' : ''}`}111 className={`w-4 h-4 text-muted-foreground transition-transform ml-4 ${isDropdownOpen ? 'rotate-180' : ''}`} 112 112 /> 113 113 </div> … … 115 115 116 116 {isDropdownOpen && ( 117 <div className="absolute z-10 right-0 mt-1 w-80 bg- white border border-gray-200rounded-lg shadow-lg">117 <div className="absolute z-10 right-0 mt-1 w-80 bg-card border border-border rounded-lg shadow-lg"> 118 118 {applicationsData.examSessions.map((session) => ( 119 119 <button … … 123 123 setIsDropdownOpen(false); 124 124 }} 125 className="w-full px-4 py-3 text-left text-sm hover:bg- gray-50 focus:outline-none focus:bg-gray-50first:rounded-t-lg last:rounded-b-lg"125 className="w-full px-4 py-3 text-left text-sm hover:bg-accent focus:outline-none focus:bg-accent first:rounded-t-lg last:rounded-b-lg" 126 126 > 127 <div className="font-medium text- gray-900">{t(session.id, session.name)}</div>128 <div className="text-xs text- gray-500">{session.year} - {t(session.semester, session.semester)} - {t(session.session, session.session)}</div>127 <div className="font-medium text-card-foreground">{t(session.id, session.name)}</div> 128 <div className="text-xs text-muted-foreground">{session.year} - {t(session.semester, session.semester)} - {t(session.session, session.session)}</div> 129 129 </button> 130 130 ))} … … 136 136 137 137 {/* Applications Section */} 138 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">138 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 139 139 <div className="bg-primary text-white px-6 py-4"> 140 140 <h2 className="text-xl font-bold">{t('registered_exams', 'Пријавени испити')}</h2> … … 143 143 <div className="overflow-x-auto"> 144 144 <table className="w-full"> 145 <thead className="bg- gray-50">145 <thead className="bg-accent"> 146 146 <tr> 147 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">#</th>148 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('serial_number', 'Сериски број')}</th>149 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('code', 'Код')}</th>150 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('subject', 'Предмет')}</th>151 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('completed', 'Завршена')}</th>152 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('fee', 'Таксени')}</th>153 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('date', 'Датум')}</th>154 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('instructor', 'Наставник')}</th>155 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('decade', 'Декада')}</th>147 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">#</th> 148 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('serial_number', 'Сериски број')}</th> 149 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('code', 'Код')}</th> 150 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('subject', 'Предмет')}</th> 151 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('completed', 'Завршена')}</th> 152 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('fee', 'Таксени')}</th> 153 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('date', 'Датум')}</th> 154 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('instructor', 'Наставник')}</th> 155 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('decade', 'Декада')}</th> 156 156 </tr> 157 157 </thead> 158 <tbody className="divide-y divide- gray-100">158 <tbody className="divide-y divide-border"> 159 159 {applications.map((application) => ( 160 <tr key={application.id} className="hover:bg- gray-50transition-colors">161 <TableCell className="font-medium text- gray-900">{application.id}</TableCell>160 <tr key={application.id} className="hover:bg-accent transition-colors"> 161 <TableCell className="font-medium text-card-foreground">{application.id}</TableCell> 162 162 <TableCell> 163 163 <span className="font-mono text-sm text-primary font-medium hover:underline cursor-pointer"> … … 166 166 </TableCell> 167 167 <TableCell className="font-mono text-sm font-medium">{application.code}</TableCell> 168 <TableCell className="font-medium text- gray-900max-w-xs">168 <TableCell className="font-medium text-card-foreground max-w-xs"> 169 169 <div className="flex items-center gap-2"> 170 170 <FontAwesomeIcon icon={faFileText} className="w-4 h-4 text-primary" /> … … 178 178 <FeeBadge fee={application.fee} /> 179 179 </TableCell> 180 <TableCell className="text- gray-600font-medium">{application.date}</TableCell>180 <TableCell className="text-muted-foreground font-medium">{application.date}</TableCell> 181 181 <TableCell> 182 182 <div className="flex items-center gap-2"> 183 <FontAwesomeIcon icon={faUser} className="w-4 h-4 text- gray-400" />184 <span className="font-medium text- gray-900">{t(application.instructor, application.instructor)}</span>183 <FontAwesomeIcon icon={faUser} className="w-4 h-4 text-muted-foreground" /> 184 <span className="font-medium text-card-foreground">{t(application.instructor, application.instructor)}</span> 185 185 </div> 186 186 </TableCell> … … 208 208 {/* Statistics Cards */} 209 209 <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mt-8"> 210 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">210 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 211 211 <div className="flex items-center gap-4"> 212 212 <div className="bg-blue-100 text-blue-600 rounded-full p-3"> … … 214 214 </div> 215 215 <div> 216 <h3 className="text-lg font-bold text- gray-900">{t('registered_exams', 'Пријавени испити')}</h3>216 <h3 className="text-lg font-bold text-card-foreground">{t('registered_exams', 'Пријавени испити')}</h3> 217 217 <p className="text-2xl font-bold text-blue-600"> 218 218 {applications.length} … … 222 222 </div> 223 223 224 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">224 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 225 225 <div className="flex items-center gap-4"> 226 226 <div className="bg-green-100 text-green-600 rounded-full p-3"> … … 228 228 </div> 229 229 <div> 230 <h3 className="text-lg font-bold text- gray-900">{t('completed', 'Завршени')}</h3>230 <h3 className="text-lg font-bold text-card-foreground">{t('completed', 'Завршени')}</h3> 231 231 <p className="text-2xl font-bold text-green-600"> 232 232 {applications.filter(app => app.completed === t('yes', 'Да')).length} … … 236 236 </div> 237 237 238 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">238 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 239 239 <div className="flex items-center gap-4"> 240 240 <div className="bg-yellow-100 text-yellow-600 rounded-full p-3"> … … 242 242 </div> 243 243 <div> 244 <h3 className="text-lg font-bold text- gray-900">{t('total_fee', 'Вкупна такса')}</h3>244 <h3 className="text-lg font-bold text-card-foreground">{t('total_fee', 'Вкупна такса')}</h3> 245 245 <p className="text-2xl font-bold text-yellow-600"> 246 246 {applications.reduce((sum, app) => sum + parseFloat(app.fee.replace(',', '.')), 0).toFixed(2)} -
src/app/students/documents/page.tsx
r50f2fb4 rba52069 23 23 24 24 const TableCell = ({ children, className = "" }: TableCellProps) => ( 25 <td className={`px-4 py-3 text-sm border-b border- gray-200${className}`}>25 <td className={`px-4 py-3 text-sm border-b border-border ${className}`}> 26 26 {children} 27 27 </td> … … 38 38 } 39 39 return ( 40 <span className="inline-flex items-center justify-center w-8 h-8 bg- gray-100 text-gray-600rounded-full">40 <span className="inline-flex items-center justify-center w-8 h-8 bg-accent text-muted-foreground rounded-full"> 41 41 <FontAwesomeIcon icon={faFileText} className="w-4 h-4" /> 42 42 </span> … … 73 73 <div className="bg-primary text-white rounded-xl p-8 mb-8"> 74 74 <div className="flex items-center gap-4"> 75 <div className="bg-white bg-opacity-20rounded-full p-4">76 <FontAwesomeIcon icon={faFilePdf} className="text-3xl text- primary" />75 <div className="bg-white rounded-full p-4"> 76 <FontAwesomeIcon icon={faFilePdf} className="text-3xl text-[#0272D1]" /> 77 77 </div> 78 78 <div> … … 86 86 87 87 {/* Document Request Form */} 88 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100mb-8">89 <h2 className="text-lg font-semibold text- gray-900mb-6 flex items-center gap-2">88 <div className="bg-card rounded-xl p-6 shadow-sm border border-border mb-8"> 89 <h2 className="text-lg font-semibold text-card-foreground mb-6 flex items-center gap-2"> 90 90 <FontAwesomeIcon icon={faFileText} className="text-primary" /> 91 91 {t('new_document_request', 'Ново барање за документ')} … … 95 95 {/* Document Type Selection */} 96 96 <div> 97 <label className="block text-sm font-medium text- gray-700mb-2">97 <label className="block text-sm font-medium text-muted-foreground mb-2"> 98 98 {t('select_document', 'Избери документ')}: 99 99 </label> … … 101 101 <button 102 102 onClick={() => setIsDropdownOpen(!isDropdownOpen)} 103 className="w-full bg- white border border-gray-300rounded-lg px-4 py-3 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary"103 className="w-full bg-card border border-border rounded-lg px-4 py-3 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary" 104 104 > 105 105 <div className="flex items-center justify-between"> 106 <span className="text-sm text- gray-900truncate">106 <span className="text-sm text-card-foreground truncate"> 107 107 {selectedDocument ? t(selectedDocument.id) : t('select_document', 'Избери документ')} 108 108 </span> 109 109 <FontAwesomeIcon 110 110 icon={faChevronDown} 111 className={`w-4 h-4 text- gray-400transition-transform ml-2 flex-shrink-0 ${isDropdownOpen ? 'rotate-180' : ''}`}111 className={`w-4 h-4 text-muted-foreground transition-transform ml-2 flex-shrink-0 ${isDropdownOpen ? 'rotate-180' : ''}`} 112 112 /> 113 113 </div> … … 115 115 116 116 {isDropdownOpen && ( 117 <div className="absolute z-10 w-full mt-1 bg- white border border-gray-200rounded-lg shadow-lg max-h-80 overflow-y-auto">117 <div className="absolute z-10 w-full mt-1 bg-card border border-border rounded-lg shadow-lg max-h-80 overflow-y-auto"> 118 118 {documentsData.documentTypes.map((docType) => ( 119 119 <button … … 123 123 setIsDropdownOpen(false); 124 124 }} 125 className="w-full px-4 py-3 text-left text-sm hover:bg- gray-50 focus:outline-none focus:bg-gray-50 border-b border-gray-100last:border-b-0"125 className="w-full px-4 py-3 text-left text-sm hover:bg-accent focus:outline-none focus:bg-accent border-b border-border last:border-b-0" 126 126 > 127 <div className="font-medium text- gray-900">{t(docType.id)}</div>127 <div className="font-medium text-card-foreground">{t(docType.id)}</div> 128 128 {docType.price > 0 && ( 129 129 <div className="text-xs text-blue-600 mt-1">{t('price', 'Цена')}: {docType.price} мкд</div> … … 138 138 {/* Comment Section */} 139 139 <div> 140 <label className="block text-sm font-medium text- gray-700mb-2">140 <label className="block text-sm font-medium text-muted-foreground mb-2"> 141 141 {t('comment', 'Коментар')}: 142 142 </label> … … 145 145 onChange={(e) => setComment(e.target.value)} 146 146 rows={4} 147 className="w-full border border- gray-300rounded-lg px-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary resize-none"147 className="w-full border border-border rounded-lg px-4 py-3 focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary resize-none" 148 148 placeholder={t('add_comment', 'Додај коментар')} 149 149 /> … … 163 163 164 164 {/* Documents Table */} 165 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">165 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 166 166 <div className="bg-primary text-white px-6 py-4"> 167 167 <h2 className="text-xl font-bold">{t('my_documents', 'Мои документи')}</h2> … … 170 170 <div className="overflow-x-auto"> 171 171 <table className="w-full"> 172 <thead className="bg- gray-50">172 <thead className="bg-accent"> 173 173 <tr> 174 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">#</th>175 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('archive', 'Архива')}</th>176 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('date', 'Датум')}</th>177 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('request', 'Барање')}</th>178 <th className="px-4 py-4 text-right text-xs font-medium text- gray-500uppercase tracking-wider">{t('price', 'Цена')}</th>179 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('paid', 'Платено')}</th>180 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('document', 'Документ')}</th>181 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('pay_online', 'Плати онлајн')}</th>182 <th className="px-4 py-4 text-center text-xs font-medium text- gray-500uppercase tracking-wider">{t('status', 'Статус')}</th>183 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('comment', 'Коментар')}</th>174 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">#</th> 175 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('archive', 'Архива')}</th> 176 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('date', 'Датум')}</th> 177 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('request', 'Барање')}</th> 178 <th className="px-4 py-4 text-right text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('price', 'Цена')}</th> 179 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('paid', 'Платено')}</th> 180 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('document', 'Документ')}</th> 181 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('pay_online', 'Плати онлајн')}</th> 182 <th className="px-4 py-4 text-center text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('status', 'Статус')}</th> 183 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('comment', 'Коментар')}</th> 184 184 </tr> 185 185 </thead> 186 <tbody className="divide-y divide- gray-100">186 <tbody className="divide-y divide-border"> 187 187 {currentDocuments.map((document) => ( 188 <tr key={document.id} className="hover:bg- gray-50transition-colors">189 <TableCell className="font-medium text- gray-900">{document.id}</TableCell>188 <tr key={document.id} className="hover:bg-accent transition-colors"> 189 <TableCell className="font-medium text-card-foreground">{document.id}</TableCell> 190 190 <TableCell className="font-mono text-sm text-primary font-medium">{document.archive}</TableCell> 191 <TableCell className="text- gray-600">{document.date}</TableCell>192 <TableCell className="font-medium text- gray-900max-w-xs">191 <TableCell className="text-muted-foreground">{document.date}</TableCell> 192 <TableCell className="font-medium text-card-foreground max-w-xs"> 193 193 {t(document.request)} 194 194 </TableCell> … … 210 210 <FontAwesomeIcon icon={faCheckCircle} className="w-5 h-5 text-green-600" /> 211 211 ) : ( 212 <span className="text- gray-400">{t('none', '—')}</span>212 <span className="text-muted-foreground">{t('none', '—')}</span> 213 213 )} 214 214 </TableCell> … … 218 218 <TableCell> 219 219 {document.comment || ( 220 <span className="text- gray-400">{t('none', '—')}</span>220 <span className="text-muted-foreground">{t('none', '—')}</span> 221 221 )} 222 222 </TableCell> … … 228 228 229 229 {/* Pagination */} 230 <div className="bg- gray-50 px-6 py-4 flex items-center justify-between border-t border-gray-200">231 <div className="flex items-center gap-4 text-sm text- gray-700">230 <div className="bg-accent px-6 py-4 flex items-center justify-between border-t border-border"> 231 <div className="flex items-center gap-4 text-sm text-muted-foreground"> 232 232 <div className="flex items-center gap-2"> 233 233 <span>{t('show_rows', 'Прикажи редови')}:</span> … … 235 235 value={recordsPerPage} 236 236 onChange={(e) => setRecordsPerPage(Number(e.target.value))} 237 className="border border- gray-300rounded px-2 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-primary"237 className="border border-border rounded px-2 py-1 text-sm focus:outline-none focus:ring-1 focus:ring-primary" 238 238 > 239 239 <option value={15}>15</option> … … 249 249 value={currentPage} 250 250 onChange={(e) => setCurrentPage(Number(e.target.value))} 251 className="w-12 border border- gray-300rounded px-2 py-1 text-sm text-center focus:outline-none focus:ring-1 focus:ring-primary"251 className="w-12 border border-border rounded px-2 py-1 text-sm text-center focus:outline-none focus:ring-1 focus:ring-primary" 252 252 /> {t('of', 'од')} {totalPages} 253 253 </div> … … 258 258 onClick={() => setCurrentPage(1)} 259 259 disabled={currentPage === 1} 260 className="p-2 text- gray-500hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed"260 className="p-2 text-muted-foreground hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed" 261 261 > 262 262 <FontAwesomeIcon icon={faAngleDoubleLeft} className="w-4 h-4" /> … … 265 265 onClick={() => setCurrentPage(Math.max(1, currentPage - 1))} 266 266 disabled={currentPage === 1} 267 className="p-2 text- gray-500hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed"267 className="p-2 text-muted-foreground hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed" 268 268 > 269 269 <FontAwesomeIcon icon={faChevronLeft} className="w-4 h-4" /> … … 275 275 onClick={() => setCurrentPage(Math.min(totalPages, currentPage + 1))} 276 276 disabled={currentPage === totalPages} 277 className="p-2 text- gray-500hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed"277 className="p-2 text-muted-foreground hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed" 278 278 > 279 279 <FontAwesomeIcon icon={faChevronRight} className="w-4 h-4" /> … … 282 282 onClick={() => setCurrentPage(totalPages)} 283 283 disabled={currentPage === totalPages} 284 className="p-2 text- gray-500hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed"284 className="p-2 text-muted-foreground hover:text-primary disabled:opacity-50 disabled:cursor-not-allowed" 285 285 > 286 286 <FontAwesomeIcon icon={faAngleDoubleRight} className="w-4 h-4" /> 287 287 </button> 288 <span className="ml-4 text-sm text- gray-700">288 <span className="ml-4 text-sm text-muted-foreground"> 289 289 {t('last', 'Последна')} 290 290 </span> 291 291 </div> 292 292 293 <div className="text-sm text- gray-700">293 <div className="text-sm text-muted-foreground"> 294 294 {t('total', 'Вкупно')}: {documents.length} 295 295 </div> … … 309 309 {/* Statistics Cards */} 310 310 <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mt-8"> 311 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">311 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 312 312 <div className="flex items-center gap-4"> 313 313 <div className="bg-blue-100 text-blue-600 rounded-full p-3"> … … 315 315 </div> 316 316 <div> 317 <h3 className="text-lg font-bold text- gray-900">{t('total_documents', 'Вкупно документи')}</h3>317 <h3 className="text-lg font-bold text-card-foreground">{t('total_documents', 'Вкупно документи')}</h3> 318 318 <p className="text-2xl font-bold text-blue-600"> 319 319 {documents.length} … … 323 323 </div> 324 324 325 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">325 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 326 326 <div className="flex items-center gap-4"> 327 327 <div className="bg-green-100 text-green-600 rounded-full p-3"> … … 329 329 </div> 330 330 <div> 331 <h3 className="text-lg font-bold text- gray-900">{t('approved', 'Одобрени')}</h3>331 <h3 className="text-lg font-bold text-card-foreground">{t('approved', 'Одобрени')}</h3> 332 332 <p className="text-2xl font-bold text-green-600"> 333 333 {documents.filter(doc => doc.status === "approved").length} … … 337 337 </div> 338 338 339 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">339 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 340 340 <div className="flex items-center gap-4"> 341 341 <div className="bg-yellow-100 text-yellow-600 rounded-full p-3"> … … 343 343 </div> 344 344 <div> 345 <h3 className="text-lg font-bold text- gray-900">{t('total_price', 'Вкупна цена')}</h3>345 <h3 className="text-lg font-bold text-card-foreground">{t('total_price', 'Вкупна цена')}</h3> 346 346 <p className="text-2xl font-bold text-yellow-600"> 347 347 {documents.reduce((sum, doc) => sum + doc.price, 0).toFixed(2)} {t('mkd', 'мкд')} -
src/app/students/layout.tsx
r50f2fb4 rba52069 32 32 }>) { 33 33 return ( 34 <html lang="en"> 35 <body className={`${geistSans.variable} ${geistMono.variable} antialiased`}> 36 <div className="mx-auto max-w-6xl px-4"> 37 <Header /> 38 <Navbar /> 39 {children} 40 </div> 41 </body> 42 </html> 34 <div className={`${geistSans.variable} ${geistMono.variable} antialiased`}> 35 <Header /> 36 <Navbar /> 37 {children} 38 </div> 43 39 ); 44 40 } -
src/app/students/profile/page.tsx
r50f2fb4 rba52069 98 98 const { t } = useTranslation(); 99 99 return ( 100 <div className="flex justify-between items-center py-3 border-b border- gray-100last:border-b-0">101 <div className="flex items-center gap-2 text- gray-600font-medium">100 <div className="flex justify-between items-center py-3 border-b border-border last:border-b-0"> 101 <div className="flex items-center gap-2 text-muted-foreground font-medium"> 102 102 {icon && <FontAwesomeIcon icon={icon} className="w-4 h-4" />} 103 103 <span>{t(label)}:</span> 104 104 </div> 105 <div className="text- gray-900font-semibold text-right max-w-xs break-words">105 <div className="text-card-foreground font-semibold text-right max-w-xs break-words"> 106 106 {value || t('n_a')} 107 107 </div> … … 119 119 const { t } = useTranslation(); 120 120 return ( 121 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">121 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 122 122 <div className="bg-primary text-white px-6 py-4"> 123 123 <div className="flex items-center gap-3"> … … 187 187 return ( 188 188 <div className="min-h-screen pb-8"> 189 <div className="bg- white rounded-xl shadow-sm border border-gray-100p-6">189 <div className="bg-card rounded-xl shadow-sm border border-border p-6"> 190 190 {t('loading')} 191 191 </div> … … 212 212 <div className="flex items-center gap-6"> 213 213 <div className="relative"> 214 <div className="w-20 h-20 bg-white bg-opacity-20 rounded-full flex items-center justify-center border-2 border-white border-opacity-30">215 <FontAwesomeIcon icon={faUser} className="text-3xl text- primary" />214 <div className="w-20 h-20 bg-white rounded-full flex items-center justify-center border-2 border-white shadow-lg"> 215 <FontAwesomeIcon icon={faUser} className="text-3xl text-[#0272D1]" /> 216 216 </div> 217 217 <div className="absolute -bottom-1 -right-1 w-6 h-6 bg-green-500 rounded-full border-2 border-white"></div> -
src/app/students/semesters/page.tsx
r50f2fb4 rba52069 49 49 50 50 const TableCell = ({ children, className = "" }: TableCellProps) => ( 51 <td className={`px-4 py-3 text-sm border-b border- gray-100${className}`}>51 <td className={`px-4 py-3 text-sm border-b border-border ${className}`}> 52 52 {children} 53 53 </td> … … 66 66 } 67 67 return ( 68 <span className={`${baseClasses} bg- gray-100text-gray-800`}>68 <span className={`${baseClasses} bg-accent text-gray-800`}> 69 69 {t(status) || status} 70 70 </span> … … 87 87 ); 88 88 } 89 return <span className="text- gray-400">—</span>;89 return <span className="text-muted-foreground">—</span>; 90 90 }; 91 91 … … 163 163 return ( 164 164 <div className="min-h-screen pb-8"> 165 <div className="bg- white rounded-xl shadow-sm border border-gray-100p-6">165 <div className="bg-card rounded-xl shadow-sm border border-border p-6"> 166 166 {t('loading')} 167 167 </div> … … 185 185 <div className="bg-primary text-white rounded-xl p-8 mb-8"> 186 186 <div className="flex items-center gap-4"> 187 <div className="bg-white bg-opacity-20rounded-full p-4">188 <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text- primary" />187 <div className="bg-white rounded-full p-4"> 188 <FontAwesomeIcon icon={faCalendarAlt} className="text-3xl text-[#0272D1]" /> 189 189 </div> 190 190 <div> … … 198 198 199 199 {/* Table Container */} 200 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">200 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 201 201 <div className="bg-primary text-white px-6 py-4"> 202 202 <h2 className="text-xl font-bold">{t('semesters_list')}</h2> … … 205 205 <div className="overflow-x-auto"> 206 206 <table className="w-full"> 207 <thead className="bg- gray-50">207 <thead className="bg-accent"> 208 208 <tr> 209 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">#</th>210 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('semester')}</th>211 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('direction')}</th>212 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('quota')}</th>213 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('note')}</th>214 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('student_com')}</th>215 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('sum')}</th>216 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('paid')}</th>217 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('ukim')}</th>218 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('created_on')}</th>219 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('date_changed')}</th>220 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('credits')}</th>221 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('type')}</th>222 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('doc')}</th>223 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('doc1')}</th>224 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('verified')}</th>225 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('taxes')}</th>226 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('signatures')}</th>227 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('status')}</th>228 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('completed')}</th>209 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">#</th> 210 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('semester')}</th> 211 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('direction')}</th> 212 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('quota')}</th> 213 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('note')}</th> 214 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('student_com')}</th> 215 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('sum')}</th> 216 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('paid')}</th> 217 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('ukim')}</th> 218 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('created_on')}</th> 219 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('date_changed')}</th> 220 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('credits')}</th> 221 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('type')}</th> 222 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('doc')}</th> 223 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('doc1')}</th> 224 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('verified')}</th> 225 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('taxes')}</th> 226 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('signatures')}</th> 227 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('status')}</th> 228 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('completed')}</th> 229 229 </tr> 230 230 </thead> 231 <tbody className="divide-y divide- gray-100">231 <tbody className="divide-y divide-border"> 232 232 {semesters.map((semester) => ( 233 <tr key={semester.id} className="hover:bg- gray-50transition-colors">234 <TableCell className="font-medium text- gray-900">{semester.id}</TableCell>233 <tr key={semester.id} className="hover:bg-accent transition-colors"> 234 <TableCell className="font-medium text-card-foreground">{semester.id}</TableCell> 235 235 <TableCell className="font-medium text-primary">{semester.semester}</TableCell> 236 236 <TableCell>{semester.direction}</TableCell> … … 246 246 </span> 247 247 ) : ( 248 <span className="text- gray-400">—</span>248 <span className="text-muted-foreground">—</span> 249 249 )} 250 250 </TableCell> … … 255 255 </span> 256 256 ) : ( 257 <span className="text- gray-400">—</span>257 <span className="text-muted-foreground">—</span> 258 258 )} 259 259 </TableCell> … … 265 265 </span> 266 266 ) : ( 267 <span className="text- gray-400">—</span>267 <span className="text-muted-foreground">—</span> 268 268 )} 269 269 </TableCell> … … 275 275 </span> 276 276 ) : ( 277 <span className="text- gray-400">—</span>277 <span className="text-muted-foreground">—</span> 278 278 )} 279 279 </TableCell> … … 282 282 <span className="text-blue-600">{semester.ukim}</span> 283 283 ) : ( 284 <span className="text- gray-400">—</span>285 )} 286 </TableCell> 287 <TableCell className="text- gray-600">{semester.createdOn}</TableCell>288 <TableCell className="text- gray-600">{semester.dateChanged}</TableCell>284 <span className="text-muted-foreground">—</span> 285 )} 286 </TableCell> 287 <TableCell className="text-muted-foreground">{semester.createdOn}</TableCell> 288 <TableCell className="text-muted-foreground">{semester.dateChanged}</TableCell> 289 289 <TableCell className="font-medium text-primary">{semester.credits}</TableCell> 290 290 <TableCell> … … 331 331 {/* Summary Cards */} 332 332 <div className="grid grid-cols-1 md:grid-cols-3 gap-6 mt-8"> 333 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">333 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 334 334 <div className="flex items-center gap-4"> 335 335 <div className="bg-green-100 text-green-600 rounded-full p-3"> … … 337 337 </div> 338 338 <div> 339 <h3 className="text-lg font-bold text- gray-900">{t('completed_semesters')}</h3>339 <h3 className="text-lg font-bold text-card-foreground">{t('completed_semesters')}</h3> 340 340 <p className="text-2xl font-bold text-green-600"> 341 341 {semesters.filter(s => s.completed !== "Не").length} … … 345 345 </div> 346 346 347 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">347 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 348 348 <div className="flex items-center gap-4"> 349 349 <div className="bg-blue-100 text-blue-600 rounded-full p-3"> … … 351 351 </div> 352 352 <div> 353 <h3 className="text-lg font-bold text- gray-900">{t('verified_semesters')}</h3>353 <h3 className="text-lg font-bold text-card-foreground">{t('verified_semesters')}</h3> 354 354 <p className="text-2xl font-bold text-blue-600"> 355 355 {semesters.filter(s => s.verified === "Да").length} … … 359 359 </div> 360 360 361 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">361 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 362 362 <div className="flex items-center gap-4"> 363 363 <div className="bg-primary text-white rounded-full p-3"> … … 365 365 </div> 366 366 <div> 367 <h3 className="text-lg font-bold text- gray-900">{t('total_semesters')}</h3>367 <h3 className="text-lg font-bold text-card-foreground">{t('total_semesters')}</h3> 368 368 <p className="text-2xl font-bold text-primary"> 369 369 {semesters.length} -
src/app/students/subjects/page.tsx
r50f2fb4 rba52069 142 142 143 143 const TableCell = ({ children, className = "" }: TableCellProps) => ( 144 <td className={`px-4 py-3 text-sm border-b border- gray-200${className}`}>144 <td className={`px-4 py-3 text-sm border-b border-border ${className}`}> 145 145 {children} 146 146 </td> … … 164 164 } 165 165 return ( 166 <span className={`${baseClasses} bg- gray-100text-gray-800`}>166 <span className={`${baseClasses} bg-accent text-gray-800`}> 167 167 {t(status) || status} 168 168 </span> … … 275 275 return ( 276 276 <div className="min-h-screen pb-8"> 277 <div className="bg- white rounded-xl shadow-sm border border-gray-100p-6">277 <div className="bg-card rounded-xl shadow-sm border border-border p-6"> 278 278 {t('loading')} 279 279 </div> … … 305 305 <div className="bg-primary text-white rounded-xl p-8 mb-8"> 306 306 <div className="flex items-center gap-4"> 307 <div className="bg-white bg-opacity-20rounded-full p-4">308 <FontAwesomeIcon icon={faBook} className="text-3xl text- primary" />307 <div className="bg-white rounded-full p-4"> 308 <FontAwesomeIcon icon={faBook} className="text-3xl text-[#0272D1]" /> 309 309 </div> 310 310 <div> … … 324 324 325 325 {/* Status Card */} 326 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">327 <div className="text-sm text- gray-600mb-2">326 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 327 <div className="text-sm text-muted-foreground mb-2"> 328 328 {t('status')}: <span className="text-primary font-semibold">{t('enrolled_by_student')}</span> 329 329 </div> 330 <div className="text-sm text- gray-600">330 <div className="text-sm text-muted-foreground"> 331 331 {t('ticket_number')}: <span className="font-semibold">{currentSemester.ticketNumber}</span> 332 332 </div> … … 334 334 335 335 {/* Semester Selection */} 336 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">337 <div className="text-sm text- gray-600mb-2">336 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 337 <div className="text-sm text-muted-foreground mb-2"> 338 338 {t('debt_from_documents')}: <span className="font-semibold">{currentSemester.debt}</span> 339 339 </div> 340 340 341 341 <div className="relative mt-4"> 342 <label className="block text-sm font-medium text- gray-700mb-2">342 <label className="block text-sm font-medium text-muted-foreground mb-2"> 343 343 {t('select_semester')}: 344 344 </label> … … 346 346 <button 347 347 onClick={() => setIsDropdownOpen(!isDropdownOpen)} 348 className="w-full bg- white border border-gray-300rounded-lg px-4 py-3 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary"348 className="w-full bg-card border border-border rounded-lg px-4 py-3 text-left focus:outline-none focus:ring-2 focus:ring-primary focus:border-primary" 349 349 > 350 350 <div className="flex items-center justify-between"> … … 354 354 <FontAwesomeIcon 355 355 icon={faChevronDown} 356 className={`w-4 h-4 text- gray-400transition-transform ${isDropdownOpen ? 'rotate-180' : ''}`}356 className={`w-4 h-4 text-muted-foreground transition-transform ${isDropdownOpen ? 'rotate-180' : ''}`} 357 357 /> 358 358 </div> … … 360 360 361 361 {isDropdownOpen && ( 362 <div className="absolute z-10 w-full mt-1 bg- white border border-gray-200rounded-lg shadow-lg">362 <div className="absolute z-10 w-full mt-1 bg-card border border-border rounded-lg shadow-lg"> 363 363 {subjectsData.semesters.map((semester) => ( 364 364 <button … … 368 368 setIsDropdownOpen(false); 369 369 }} 370 className="w-full px-4 py-3 text-left text-sm hover:bg- gray-50 focus:outline-none focus:bg-gray-50first:rounded-t-lg last:rounded-b-lg"370 className="w-full px-4 py-3 text-left text-sm hover:bg-accent focus:outline-none focus:bg-accent first:rounded-t-lg last:rounded-b-lg" 371 371 > 372 <div className="font-medium text- gray-900">{semester.name}</div>373 <div className="text-xs text- gray-500">{t('status')}: {semester.status}</div>372 <div className="font-medium text-card-foreground">{semester.name}</div> 373 <div className="text-xs text-muted-foreground">{t('status')}: {semester.status}</div> 374 374 </button> 375 375 ))} … … 387 387 388 388 {/* Enrolled Subjects */} 389 <div className="bg- white rounded-xl p-6 shadow-sm border border-gray-100">390 <h3 className="font-semibold text- gray-900mb-3 flex items-center gap-2">389 <div className="bg-card rounded-xl p-6 shadow-sm border border-border"> 390 <h3 className="font-semibold text-card-foreground mb-3 flex items-center gap-2"> 391 391 <FontAwesomeIcon icon={faBook} className="w-4 h-4 text-primary" /> 392 392 {t('enrolled_subjects')} … … 400 400 {/* Right Column - Financial Information */} 401 401 <div className="lg:col-span-2"> 402 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">402 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 403 403 <div className="bg-primary text-white px-6 py-4"> 404 404 <h2 className="text-xl font-bold flex items-center gap-2"> … … 413 413 {/* Left Financial Column */} 414 414 <div className="space-y-4"> 415 <div className="flex justify-between items-center py-2 border-b border- gray-100">416 <span className="text- gray-600">{t('sum')}:</span>415 <div className="flex justify-between items-center py-2 border-b border-border"> 416 <span className="text-muted-foreground">{t('sum')}:</span> 417 417 <span className="font-semibold text-primary">{currentSemester.financialInfo.sum}</span> 418 418 </div> 419 <div className="flex justify-between items-center py-2 border-b border- gray-100">420 <span className="text- gray-600">{t('paid')}:</span>419 <div className="flex justify-between items-center py-2 border-b border-border"> 420 <span className="text-muted-foreground">{t('paid')}:</span> 421 421 <span className="font-semibold text-green-600">{currentSemester.financialInfo.paid}</span> 422 422 </div> 423 <div className="flex justify-between items-center py-2 border-b border- gray-100">424 <span className="text- gray-600">{t('due')}:</span>423 <div className="flex justify-between items-center py-2 border-b border-border"> 424 <span className="text-muted-foreground">{t('due')}:</span> 425 425 <span className="font-semibold text-red-600">{currentSemester.financialInfo.due}</span> 426 426 </div> … … 433 433 {/* Right Financial Column */} 434 434 <div className="space-y-4"> 435 <div className="flex justify-between items-center py-2 border-b border- gray-100">436 <span className="text- gray-600">{t('credits')}:</span>435 <div className="flex justify-between items-center py-2 border-b border-border"> 436 <span className="text-muted-foreground">{t('credits')}:</span> 437 437 <span className="font-semibold text-primary">{currentSemester.financialInfo.credits}</span> 438 438 </div> 439 <div className="flex justify-between items-center py-2 border-b border- gray-100">440 <span className="text- gray-600">{t('mksa')}:</span>439 <div className="flex justify-between items-center py-2 border-b border-border"> 440 <span className="text-muted-foreground">{t('mksa')}:</span> 441 441 <span className="font-semibold">{currentSemester.financialInfo.MKSA}</span> 442 442 </div> 443 <div className="flex justify-between items-center py-2 border-b border- gray-100">444 <span className="text- gray-600">{t('electronic_registration')}:</span>443 <div className="flex justify-between items-center py-2 border-b border-border"> 444 <span className="text-muted-foreground">{t('electronic_registration')}:</span> 445 445 <span className="font-semibold">{currentSemester.financialInfo.electronicRegistration}</span> 446 446 </div> 447 <div className="flex justify-between items-center py-2 border-b border- gray-100">448 <span className="text- gray-600">{t('eukim')}:</span>447 <div className="flex justify-between items-center py-2 border-b border-border"> 448 <span className="text-muted-foreground">{t('eukim')}:</span> 449 449 <span className="font-semibold">{currentSemester.financialInfo.eUKIM}</span> 450 450 </div> 451 <div className="flex justify-between items-center py-2 border-b border- gray-100">452 <span className="text- gray-600">{t('bank_provision')}:</span>451 <div className="flex justify-between items-center py-2 border-b border-border"> 452 <span className="text-muted-foreground">{t('bank_provision')}:</span> 453 453 <span className="font-semibold">{currentSemester.financialInfo.bankProvision}</span> 454 454 </div> … … 465 465 466 466 {/* Subjects Table */} 467 <div className="bg- white rounded-xl shadow-sm border border-gray-100overflow-hidden">467 <div className="bg-card rounded-xl shadow-sm border border-border overflow-hidden"> 468 468 <div className="bg-primary text-white px-6 py-4"> 469 469 <h2 className="text-xl font-bold">{t('subjects_list')}</h2> … … 472 472 <div className="overflow-x-auto"> 473 473 <table className="w-full"> 474 <thead className="bg- gray-50">474 <thead className="bg-accent"> 475 475 <tr> 476 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">#</th>477 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('code')}</th>478 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('hours')}</th>479 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('which_time')}</th>480 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('subject')}</th>481 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('semester')}</th>482 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('status')}</th>483 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('signature')}</th>484 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('group')}</th>485 <th className="px-4 py-4 text-left text-xs font-medium text- gray-500uppercase tracking-wider">{t('professor')}</th>476 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">#</th> 477 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('code')}</th> 478 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('hours')}</th> 479 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('which_time')}</th> 480 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('subject')}</th> 481 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('semester')}</th> 482 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('status')}</th> 483 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('signature')}</th> 484 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('group')}</th> 485 <th className="px-4 py-4 text-left text-xs font-medium text-muted-foreground uppercase tracking-wider">{t('professor')}</th> 486 486 </tr> 487 487 </thead> 488 <tbody className="divide-y divide- gray-100">488 <tbody className="divide-y divide-border"> 489 489 {currentSubjects.map((subject: Subject) => ( 490 <tr key={subject.id} className="hover:bg- gray-50transition-colors">491 <TableCell className="font-medium text- gray-900">{subject.id}</TableCell>490 <tr key={subject.id} className="hover:bg-accent transition-colors"> 491 <TableCell className="font-medium text-card-foreground">{subject.id}</TableCell> 492 492 <TableCell className="font-mono text-sm text-primary font-medium">{subject.code}</TableCell> 493 493 <TableCell className="font-medium">{subject.hours}</TableCell> 494 494 <TableCell className="text-center font-medium">{subject.kojPat}</TableCell> 495 <TableCell className="font-medium text- gray-900max-w-xs">495 <TableCell className="font-medium text-card-foreground max-w-xs"> 496 496 <div className="flex items-center gap-2"> 497 497 <FontAwesomeIcon icon={faBook} className="w-4 h-4 text-primary" /> … … 505 505 <TableCell className="text-center"> 506 506 {subject.signature ? t(subject.signature, subject.signature) : ( 507 <span className="text- gray-400">—</span>507 <span className="text-muted-foreground">—</span> 508 508 )} 509 509 </TableCell> 510 510 <TableCell className="text-center"> 511 511 {subject.group ? t(subject.group, subject.group) : ( 512 <span className="text- gray-400">—</span>512 <span className="text-muted-foreground">—</span> 513 513 )} 514 514 </TableCell> 515 515 <TableCell> 516 516 {subject.professor ? t(subject.professor, subject.professor) : ( 517 <span className="text- gray-400">—</span>517 <span className="text-muted-foreground">—</span> 518 518 )} 519 519 </TableCell>
Note:
See TracChangeset
for help on using the changeset viewer.
