diff options
| author | Bobby <[email protected]> | 2026-03-13 18:25:44 +0530 |
|---|---|---|
| committer | Bobby <[email protected]> | 2026-03-13 18:25:44 +0530 |
| commit | 344d02a7feddefb5c08f88dbe5f3a3f7e7da385f (patch) | |
| tree | 94deed23d82d7f868721cc00b5550f5c27e8b8f7 /garden/src/styles | |
| parent | 9f808807a557fc10a38a44cb52be6bfcdfda68b2 (diff) | |
| download | pagoda-main.tar.xz pagoda-main.zip | |
- Introduced new routes for letters and their details.
- Created pages for displaying letter details and listing letters.
- Added new types for letters, including participants, messages, and attachments.
- Implemented API calls for fetching letters and managing messages (reply, edit, delete).
- Enhanced stats to include unread letters and pending districts for staff users.
- Updated styles for letters and their components.
- Added privacy settings for letters (public and friends).
- Modified user model to include letter privacy settings.
- Improved error handling and user feedback in the UI.
Diffstat (limited to 'garden/src/styles')
| -rw-r--r-- | garden/src/styles/districts.css | 2 | ||||
| -rw-r--r-- | garden/src/styles/letters.css | 362 |
2 files changed, 363 insertions, 1 deletions
diff --git a/garden/src/styles/districts.css b/garden/src/styles/districts.css index fae7f2e..ae65e47 100644 --- a/garden/src/styles/districts.css +++ b/garden/src/styles/districts.css @@ -341,7 +341,7 @@ .district-req-grid .council-grid-header, .district-req-grid .council-grid-row { - grid-template-columns: 3fr 2fr 2fr 1.5fr 2fr; + grid-template-columns: 2fr 1.5fr 1.5fr 1fr 3fr; } .district-site-grid .council-grid-header, diff --git a/garden/src/styles/letters.css b/garden/src/styles/letters.css new file mode 100644 index 0000000..4fa8a1b --- /dev/null +++ b/garden/src/styles/letters.css @@ -0,0 +1,362 @@ +.letters-header { + display: flex; + justify-content: space-between; + align-items: center; + margin-bottom: 16px; +} + +.letters-header .page-title { + margin: 0; +} + +.letters-list { + display: flex; + flex-direction: column; +} + +.letters-empty { + text-align: center; + color: var(--color-text-muted); + font-style: italic; + padding: 40px 8px; +} + +.letter-item { + display: flex; + align-items: center; + gap: 12px; + padding: 10px 12px; + border-bottom: 1px solid var(--color-border); + text-decoration: none; + color: var(--color-text); + transition: background 0.15s; +} + +.letter-item:hover { + background: var(--color-overlay-light); +} + +.letter-unread { + background: var(--color-overlay-lighter); +} + +.letter-avatars { + display: flex; + flex-shrink: 0; +} + +.letter-avatar { + width: 32px; + height: 32px; + border-radius: 50%; + border: 2px solid var(--color-panel); + object-fit: cover; +} + +.letter-avatar:not(:first-child) { + margin-left: -10px; +} + +.letter-avatar-more { + display: flex; + align-items: center; + justify-content: center; + width: 32px; + height: 32px; + border-radius: 50%; + background: var(--color-panel-header); + border: 2px solid var(--color-panel); + margin-left: -10px; + font-size: 11px; + color: var(--color-text-muted); +} + +.letter-content { + flex: 1; + min-width: 0; +} + +.letter-top { + display: flex; + justify-content: space-between; + align-items: baseline; + gap: 8px; +} + +.letter-title { + font-size: 13px; + font-weight: 600; + color: var(--color-text-bright); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.letter-system-badge { + display: inline-block; + background: var(--color-purple); + color: var(--color-white); + font-size: 10px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 1px 5px; + margin-right: 6px; + vertical-align: middle; +} + +.letter-time { + font-size: 11px; + color: var(--color-text-muted); + white-space: nowrap; + flex-shrink: 0; +} + +.letter-preview { + font-size: 12px; + color: var(--color-text-muted); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + margin-top: 2px; +} + +.letter-unread-dot { + width: 8px; + height: 8px; + border-radius: 50%; + background: var(--color-pink); + flex-shrink: 0; +} + +.letter-detail-header { + display: flex; + align-items: center; + gap: 12px; + margin-bottom: 12px; +} + +.letter-back { + background: none; + border: none; + color: var(--color-link); + cursor: pointer; + font-family: var(--font-body); + font-size: 13px; + padding: 0; +} + +.letter-back:hover { + color: var(--color-link-hover); +} + +.letter-detail-title { + flex: 1; + font-size: 18px; + margin: 0; + color: var(--color-text-bright); + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; +} + +.letter-detail-actions { + display: flex; + gap: 6px; + flex-shrink: 0; +} + +.letter-participants { + display: flex; + flex-wrap: wrap; + gap: 8px; + padding: 8px 0; + margin-bottom: 12px; + border-bottom: 1px solid var(--color-border); +} + +.letter-participant { + display: flex; + align-items: center; + gap: 4px; + font-size: 12px; + color: var(--color-text-muted); +} + +.letter-participant-avatar { + width: 20px; + height: 20px; + border-radius: 50%; + object-fit: cover; +} + +.letter-messages { + display: flex; + flex-direction: column; + gap: 2px; + margin-bottom: 16px; +} + +.letter-message { + padding: 10px 12px; + border-bottom: 1px solid var(--color-border); +} + +.letter-message-own { + background: var(--color-overlay-lighter); +} + +.letter-message-deleted { + opacity: 0.5; +} + +.letter-message-sender { + display: flex; + align-items: center; + gap: 6px; + margin-bottom: 4px; +} + +.letter-message-avatar { + width: 24px; + height: 24px; + border-radius: 50%; + object-fit: cover; +} + +.letter-message-name { + font-size: 12px; + font-weight: 600; + color: var(--color-text-bright); +} + +.letter-message-time { + font-size: 11px; + color: var(--color-text-muted); + margin-left: auto; +} + +.letter-message-body { + font-size: 13px; + line-height: 1.5; + color: var(--color-text); + word-break: break-word; +} + +.letter-message-body p { + margin: 0 0 4px; +} + +.letter-message-deleted-text { + font-style: italic; + color: var(--color-text-muted); +} + +.letter-message-actions { + display: flex; + gap: 8px; + margin-top: 4px; +} + +.letter-msg-action { + background: none; + border: none; + font-family: var(--font-body); + font-size: 11px; + color: var(--color-text-muted); + cursor: pointer; + padding: 0; +} + +.letter-msg-action:hover { + color: var(--color-text); +} + +.letter-msg-action-delete:hover { + color: var(--color-red); +} + +.letter-message-edit { + margin-top: 6px; +} + +.letter-message-edit textarea { + width: 100%; + background: var(--color-bg); + border: 1px solid var(--color-border); + color: var(--color-text); + font-family: var(--font-body); + font-size: 13px; + padding: 6px 8px; + resize: vertical; + outline: none; + box-sizing: border-box; +} + +.letter-message-edit textarea:focus { + border-color: var(--color-purple); +} + +.letter-message-edit-actions { + display: flex; + gap: 6px; + margin-top: 6px; +} + +.letter-attachments { + display: flex; + flex-wrap: wrap; + gap: 6px; + margin-top: 6px; +} + +.letter-attachment { + text-decoration: none; +} + +.letter-attachment-image { + max-width: 200px; + max-height: 150px; + border: 1px solid var(--color-border); + object-fit: cover; +} + +.letter-attachment-file { + display: inline-block; + padding: 4px 8px; + background: var(--color-panel-header); + border: 1px solid var(--color-border); + font-size: 12px; + color: var(--color-link); +} + +.letter-attachment-file:hover { + color: var(--color-link-hover); +} + +.letter-reply { + border-top: 1px solid var(--color-border); + padding-top: 12px; +} + +.letter-reply textarea { + width: 100%; + background: var(--color-bg); + border: 1px solid var(--color-border); + color: var(--color-text); + font-family: var(--font-body); + font-size: 13px; + padding: 8px; + resize: vertical; + outline: none; + box-sizing: border-box; + margin-bottom: 8px; +} + +.letter-reply textarea:focus { + border-color: var(--color-purple); +} + +.letter-reply .form-button { + margin-top: 0; +}
\ No newline at end of file |
