Refine sidebar, Notes, and Patients per review feedback

Round-2 fixes to the 6 features:

- Logo: enlarge the sidebar mark, drop the inline wordmark, and show
  "temetro" via a hover tooltip; bigger logo on the auth screens.
- Sidebar footer: wrap the quick-nav, clinic switcher, and user menu in a
  single bordered block so it reads as one footer instead of three cards.
- Sidebar nav: highlight the active page (usePathname + data-[active]), and
  add an Appointments & Schedule sub-page under Patients that auto-expands
  for the current section. New mock /appointments page; reachable via ⌘K.
- Notes: redesign to a two-pane list + editor with an Empty state on the
  right when nothing is selected; fix the editor so text starts top-left
  (div instead of a centering <button>); compact the toolbar; add
  .note-content typography in globals.css so headings/lists/etc. actually
  render (the app has no typography plugin).
- Patients: new PatientDetail laid out to fit the side Sheet (stacked
  full-width sections, no nested click-to-expand dialogs); keep Edit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Khalid Abdi
2026-06-05 00:49:43 +03:00
parent ea2ecb572c
commit 9588d16869
14 changed files with 1031 additions and 148 deletions
+10
View File
@@ -0,0 +1,10 @@
import { AppointmentsView } from "@/components/appointments/appointments-view";
import { SidebarInset } from "@/components/ui/sidebar";
export default function AppointmentsPage() {
return (
<SidebarInset className="flex flex-1 flex-col overflow-y-auto">
<AppointmentsView />
</SidebarInset>
);
}
+97
View File
@@ -215,4 +215,101 @@
html {
@apply font-sans;
}
}
/*
* Rich-text styling for the Notes Tiptap editor. The app has no typography
* plugin, and Tailwind's preflight resets headings/lists — so without this,
* H1/H2/lists render identically to body text. Scoped to `.note-content`
* (set on the editor's contenteditable) and themed via semantic tokens.
*/
.note-content {
@apply text-foreground;
font-size: 0.95rem;
line-height: 1.7;
}
.note-content:focus {
outline: none;
}
.note-content > :first-child {
margin-top: 0;
}
.note-content p {
margin: 0.5rem 0;
}
.note-content h1 {
@apply font-heading font-bold;
font-size: 1.6rem;
line-height: 1.25;
margin: 1.2rem 0 0.6rem;
}
.note-content h2 {
@apply font-heading font-semibold;
font-size: 1.3rem;
line-height: 1.3;
margin: 1rem 0 0.5rem;
}
.note-content h3 {
@apply font-heading font-semibold;
font-size: 1.1rem;
margin: 0.9rem 0 0.4rem;
}
.note-content ul,
.note-content ol {
margin: 0.5rem 0;
padding-left: 1.5rem;
}
.note-content ul {
list-style: disc;
}
.note-content ol {
list-style: decimal;
}
.note-content li {
margin: 0.2rem 0;
}
.note-content li > p {
margin: 0;
}
.note-content blockquote {
@apply border-border text-muted-foreground;
border-left-width: 3px;
margin: 0.75rem 0;
padding-left: 1rem;
}
.note-content a {
@apply text-primary underline underline-offset-2;
}
.note-content strong {
font-weight: 600;
}
.note-content code {
@apply bg-muted font-mono;
border-radius: 0.375rem;
font-size: 0.85em;
padding: 0.1rem 0.35rem;
}
.note-content pre {
@apply bg-muted font-mono;
border-radius: 0.6rem;
margin: 0.75rem 0;
overflow-x: auto;
padding: 0.75rem 1rem;
}
.note-content pre code {
background: transparent;
padding: 0;
}
.note-content hr {
@apply border-border;
border-top-width: 1px;
margin: 1.25rem 0;
}
/* Tiptap placeholder (empty document) */
.note-content p.is-editor-empty:first-child::before {
@apply text-muted-foreground;
content: attr(data-placeholder);
float: left;
height: 0;
pointer-events: none;
}