Почтовый кабинет: регистрация, папки, черновики, вложения, грид @jambotron/aria-grid, интерфейс по synthwave-шаблону

Бэкенд: регистрация со входом сразу и /api/config, профиль и смена пароля, свои папки, PATCH письма
(прочитано, флажок, перенос; Спам ставит отметку), корзина и очистка, черновики, несколько адресатов и копия,
вложения черновика уходят с письмом, вложения и заголовки To/Cc входящих сохраняются, письма заблокированных —
в Спам. Исправлено: загрузка файла (415), колонка content_id (500 на любых вложениях), SPA-маршрут с точкой.
Фронтенд переписан: все таблицы — грид, оформление — шаблон synthwave-design-showcase.html.

α
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-11-05 16:41:29 +01:00
parent f605fbfd85
commit 29b1beabe0
70 changed files with 3468 additions and 1737 deletions
+26
View File
@@ -0,0 +1,26 @@
import { Provider, inject } from '@angular/core';
import { JT_GRID_BULK_UI, JtGridBulkUi } from '@jambotron/aria-grid';
import { DialogService } from './dialog.service';
import { ToastService } from './toast.service';
/** The grid's bulk actions ask through our glass dialog and report through our toasts. */
export function provideMailGrid(): Provider[] {
return [{
provide: JT_GRID_BULK_UI,
useFactory: (): JtGridBulkUi => {
const dialogs = inject(DialogService);
const toasts = inject(ToastService);
return {
ask: request => dialogs.ask({
title: request.title,
message: request.message,
confirmLabel: request.confirmLabel,
danger: request.danger,
...(request.reason ? { input: '', inputLabel: 'Reason', required: true } : {})
}),
success: message => toasts.ok(message),
error: message => toasts.error(message)
};
}
}];
}