Files
tolaria/src/App.css
Luca Rossi b05992e2b1 feat: new note creation — unsaved/in-memory state before first save (#112)
* feat: add pendingSave status indicator for new note creation

Track disk write state during note creation with a pulsing green dot
on tab and breadcrumb bar. The pending state resolves to 'new' once
the file is written to disk, giving users clear feedback during the
async save.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: add tests for pendingSave status lifecycle

Cover resolveNoteStatus priority, createAndPersist callbacks,
TabBar pulsing dot indicator, and BreadcrumbBar "Saving…" text.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add design frames for new note creation pending save state

Two frames in design/new-note-creation.pen:
- Pending save: pulsing green dot, italic title
- Saved: static green dot, normal title

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* design: add new-note-creation frames (pending save + after first save)

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-27 13:11:31 +00:00

64 lines
944 B
CSS

/* App layout - minimal CSS, most styling via Tailwind */
.app-shell {
display: flex;
flex-direction: column;
height: 100vh;
width: 100vw;
overflow: hidden;
box-shadow: inset 0 0 0 1px var(--border-primary);
}
.app {
display: flex;
flex: 1;
min-height: 0;
overflow: hidden;
}
.app__sidebar {
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.app__sidebar > * {
flex: 1;
}
.app__note-list {
flex-shrink: 0;
display: flex;
flex-direction: column;
}
.app__note-list > * {
flex: 1;
}
.app__editor {
flex: 1;
min-width: 0;
min-height: 0;
overflow: hidden;
display: flex;
flex-direction: column;
}
.app__editor > * {
flex: 1;
}
@keyframes spin {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes tab-status-pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
.tab-status-pulse {
animation: tab-status-pulse 1.2s ease-in-out infinite;
}