feat: Add 9 new features for enhanced UX and security

Quick Wins:
- Feature 1: Ticket linking in comments (#123456789 auto-links)
- Feature 6: Checkbox click area fix (click anywhere in cell)
- Feature 7: User groups display in settings modal

UI Enhancements:
- Feature 4: Collapsible sidebar with localStorage persistence
- Feature 5: Inline ticket preview popup on hover (300ms delay)
- Feature 2: Mobile responsive improvements (44px touch targets, iOS zoom fix)

Major Features:
- Feature 3: Kanban card view with status columns (toggle with localStorage)
- Feature 9: API key generation admin panel (/admin/api-keys)
- Feature 8: Ticket visibility levels (public/internal/confidential)

New files:
- views/admin/ApiKeysView.php
- api/generate_api_key.php
- api/revoke_api_key.php
- migrations/008_ticket_visibility.sql

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-23 10:01:50 -05:00
parent c32e9c871b
commit e86a5de3fd
19 changed files with 1933 additions and 39 deletions

View File

@@ -1499,3 +1499,116 @@ body.dark-mode .editable {
background: rgba(0, 255, 65, 0.1);
color: var(--terminal-amber);
}
/* ===== ENHANCED MOBILE RESPONSIVE - TICKET PAGE ===== */
@media (max-width: 768px) {
/* Prevent iOS zoom on input focus */
input[type="text"],
input[type="email"],
input[type="search"],
textarea,
select {
font-size: 16px !important;
}
/* Touch-friendly button sizes */
.btn,
button,
.tab-btn {
min-height: 44px;
padding: 12px 16px;
}
/* Stack ticket metadata vertically */
.ticket-metadata-fields {
grid-template-columns: 1fr !important;
gap: 1rem;
}
.metadata-field {
width: 100%;
}
/* Stack header controls */
.ticket-subheader {
flex-direction: column;
gap: 1rem;
}
.header-controls {
width: 100%;
flex-direction: column;
}
.status-priority-group {
width: 100%;
margin-right: 0;
}
.status-select {
width: 100%;
}
/* Full width buttons */
#editButton {
width: 100%;
}
/* Improve comment form */
.comment-form textarea {
width: 100%;
min-height: 120px;
}
.comment-controls {
flex-direction: column;
gap: 1rem;
}
.markdown-toggles {
flex-direction: column;
gap: 0.75rem;
}
/* Improve assignment dropdown */
.ticket-assignment {
flex-direction: column;
align-items: flex-start;
}
.assignment-select {
width: 100%;
min-height: 44px;
}
/* Full width tabs with better spacing */
.ticket-tabs {
flex-wrap: wrap;
}
.tab-btn {
flex: 1 1 auto;
text-align: center;
min-width: 100px;
}
/* Improve upload zone */
.upload-zone {
padding: 1.5rem;
}
.upload-zone-content p {
font-size: 0.9rem;
}
/* Improve timeline readability */
.timeline-header {
flex-direction: column;
align-items: flex-start;
gap: 0.25rem;
}
.timeline-date {
margin-left: 0;
}
}