diff --git a/examples/crash_reporter/backend/public/assets/css/app.css b/examples/crash_reporter/backend/public/assets/css/app.css index dc4d7a1..d7cfcc9 100644 --- a/examples/crash_reporter/backend/public/assets/css/app.css +++ b/examples/crash_reporter/backend/public/assets/css/app.css @@ -180,42 +180,6 @@ a:hover { text-decoration: underline; } box-sizing: border-box; } /* Hamburger (nav handle) */ -.nav-link--create { - border: none; - cursor: pointer; - background: rgba(61, 139, 253, .18); - color: var(--accent); - font: inherit; -} -.nav-link--create:hover, -.nav-link--create:focus-visible { - background: rgba(61, 139, 253, .32); - color: var(--accent); - outline: none; -} -.nav-icon--plus { - width: 18px; - height: 18px; - position: relative; -} -.nav-icon--plus::before, -.nav-icon--plus::after { - content: ""; - position: absolute; - left: 50%; - top: 50%; - background: currentColor; - border-radius: 1px; - transform: translate(-50%, -50%); -} -.nav-icon--plus::before { - width: 14px; - height: 2px; -} -.nav-icon--plus::after { - width: 2px; - height: 14px; -} .nav-icon--menu { width: 18px; height: 2px; @@ -1767,33 +1731,85 @@ button.report-tag--filter:hover { pointer-events: none; white-space: nowrap; } -.modal-dialog { +.ticket-create-dialog { border: 1px solid var(--border); border-radius: 12px; padding: 0; + margin: auto; + max-width: 36rem; + width: calc(100% - 32px); background: var(--surface); color: var(--text); - max-width: 32rem; - width: calc(100% - 32px); + box-shadow: 0 16px 48px rgba(0, 0, 0, 0.45); } -.modal-dialog::backdrop { background: rgba(8, 12, 20, 0.72); } -.modal-form { +.ticket-create-dialog::backdrop { + background: rgba(8, 12, 20, 0.72); +} +.ticket-create-form { + display: flex; + flex-direction: column; + margin: 0; +} +.ticket-create-header { + display: flex; + align-items: center; + justify-content: space-between; + gap: 12px; + padding: 14px 18px; + border-bottom: 1px solid var(--border); +} +.ticket-create-header h2 { + margin: 0; + font-size: 1.05rem; + font-weight: 600; +} +.ticket-create-close { + border: none; + background: transparent; + color: var(--muted); + font-size: 1.4rem; + line-height: 1; + padding: 4px 8px; + border-radius: 8px; + cursor: pointer; +} +.ticket-create-close:hover { + color: var(--text); + background: var(--row-hover); +} +.ticket-create-body { display: flex; flex-direction: column; gap: 12px; - padding: 20px 22px; + padding: 16px 18px; } -.modal-form label { display: flex; flex-direction: column; gap: 6px; font-size: 0.9rem; } -.modal-form input, -.modal-form textarea { +.ticket-create-body label { + display: flex; + flex-direction: column; + gap: 6px; + font-size: 0.9rem; + color: var(--muted); +} +.ticket-create-body input, +.ticket-create-body textarea { width: 100%; - padding: 8px 10px; + padding: 10px 12px; border-radius: 8px; border: 1px solid var(--border); - background: var(--surface2); + background: var(--bg); color: var(--text); + font: inherit; +} +.ticket-create-footer { + padding: 12px 18px 16px; + border-top: 1px solid var(--border); +} +.ticket-create-actions { + display: flex; + gap: 8px; + justify-content: flex-end; + margin-top: 8px; } -.modal-actions { display: flex; gap: 8px; justify-content: flex-end; margin-top: 4px; } .graphs-grid canvas { width: 100%; height: auto; max-width: 100%; min-height: 120px; } .graph-detail-overlay { position: fixed; diff --git a/examples/crash_reporter/backend/public/assets/i18n/en.json b/examples/crash_reporter/backend/public/assets/i18n/en.json index f63bb64..4286852 100644 --- a/examples/crash_reporter/backend/public/assets/i18n/en.json +++ b/examples/crash_reporter/backend/public/assets/i18n/en.json @@ -146,7 +146,6 @@ "nav.security": "Security", "footer.copyright": "© Anton Afanaasyeu, {year}", "tickets.title": "Tickets", - "issue.new": "+ New issue", "tickets.new": "New ticket", "ticket.create": "Create", "ticket.cancel": "Cancel", diff --git a/examples/crash_reporter/backend/public/assets/i18n/ru.json b/examples/crash_reporter/backend/public/assets/i18n/ru.json index fd3af0e..7aa9f0a 100644 --- a/examples/crash_reporter/backend/public/assets/i18n/ru.json +++ b/examples/crash_reporter/backend/public/assets/i18n/ru.json @@ -4,6 +4,12 @@ "nav.reports": "Задачи (Issues)", "nav.tickets": "Задачи", "tickets.title": "Задачи", + "tickets.new": "Новая задача", + "ticket.create": "Создать", + "ticket.cancel": "Отмена", + "ticket.title": "Заголовок", + "ticket.brief": "Кратко", + "ticket.body": "Описание", "tickets.empty": "Задач пока нет.", "ticket.detail_title": "Задача", "nav.logout": "Выход", @@ -148,7 +154,6 @@ "nav.security": "Безопасность", "footer.copyright": "© Anton Afanaasyeu, {year}", "nav.tickets": "Тикеты", - "issue.new": "+ Новая задача", "ticket.lifecycle": "Жизненный цикл", "ticket.assignees": "Исполнители", "ticket.assignee_add": "Добавить", diff --git a/examples/crash_reporter/backend/public/assets/js/ticket_create.js b/examples/crash_reporter/backend/public/assets/js/ticket_create.js index af398c5..ac6077f 100644 --- a/examples/crash_reporter/backend/public/assets/js/ticket_create.js +++ b/examples/crash_reporter/backend/public/assets/js/ticket_create.js @@ -22,19 +22,25 @@ const dialog = document.getElementById('ticket-create-dialog'); const form = document.getElementById('ticket-create-form'); const cancelBtn = document.getElementById('ticket-create-cancel'); + const closeBtn = document.getElementById('ticket-create-close'); const status = document.getElementById('ticket-create-status'); if (!dialog || !form) return; - document.querySelectorAll('.js-new-issue-btn').forEach((btn) => { + document.querySelectorAll('.js-new-ticket-btn').forEach((btn) => { btn.addEventListener('click', (ev) => { ev.preventDefault(); openDialog(); }); }); - if (cancelBtn) { - cancelBtn.addEventListener('click', () => dialog.close()); + function closeDialog() { + dialog.close(); } + if (cancelBtn) cancelBtn.addEventListener('click', closeDialog); + if (closeBtn) closeBtn.addEventListener('click', closeDialog); + dialog.addEventListener('click', (ev) => { + if (ev.target === dialog) closeDialog(); + }); form.addEventListener('submit', (ev) => { ev.preventDefault(); diff --git a/examples/crash_reporter/backend/views/layout.php b/examples/crash_reporter/backend/views/layout.php index 0f6aaa8..ab9acd6 100644 --- a/examples/crash_reporter/backend/views/layout.php +++ b/examples/crash_reporter/backend/views/layout.php @@ -58,14 +58,6 @@