{% extends "base.html" %} {% block title %}Nowa grupa - Norda Biznes Partner{% endblock %} {% block head_extra %} {% endblock %} {% block extra_css %} .quill-container { border: 1px solid var(--border); border-radius: var(--radius); } .quill-container .ql-toolbar { border-top-left-radius: var(--radius); border-top-right-radius: var(--radius); } .quill-container .ql-container { border-bottom-left-radius: var(--radius); border-bottom-right-radius: var(--radius); font-size: var(--font-size-base); } .quill-container .ql-editor { min-height: 200px; } .quill-container .ql-editor img { max-width: 100%; height: auto; border-radius: var(--radius); margin: var(--spacing-sm) 0; } .compose-container { max-width: 700px; margin: 0 auto; } .compose-header { margin-bottom: var(--spacing-xl); } .compose-header h1 { font-size: var(--font-size-3xl); color: var(--text-primary); } .compose-card { background: var(--surface); border-radius: var(--radius-lg); padding: var(--spacing-xl); box-shadow: var(--shadow); } .form-group { margin-bottom: var(--spacing-lg); } .form-group label { display: block; font-weight: 500; margin-bottom: var(--spacing-xs); color: var(--text-primary); } .form-group input, .form-group select, .form-group textarea { width: 100%; padding: var(--spacing-sm) var(--spacing-md); border: 1px solid var(--border); border-radius: var(--radius); font-size: var(--font-size-base); transition: var(--transition); } .form-group input:focus, .form-group select:focus, .form-group textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.1); } .form-actions { display: flex; gap: var(--spacing-md); margin-top: var(--spacing-xl); } .back-link { display: inline-flex; align-items: center; gap: var(--spacing-xs); color: var(--text-secondary); text-decoration: none; margin-bottom: var(--spacing-lg); } .back-link:hover { color: var(--primary); } /* Member picker */ .member-picker { border: 1px solid var(--border); border-radius: var(--radius); overflow: hidden; } .selected-members { display: flex; flex-wrap: wrap; gap: var(--spacing-xs); padding: var(--spacing-sm) var(--spacing-md); min-height: 44px; align-items: center; border-bottom: 1px solid var(--border); background: var(--background); } .selected-members:empty { border-bottom: none; } .member-pill { display: inline-flex; align-items: center; gap: 6px; padding: 4px 10px; background: var(--primary); color: white; border-radius: 16px; font-size: var(--font-size-sm); font-weight: 500; } .member-pill-avatar { width: 22px; height: 22px; border-radius: 50%; object-fit: cover; } .member-pill-initial { width: 22px; height: 22px; border-radius: 50%; background: rgba(255,255,255,0.3); display: flex; align-items: center; justify-content: center; font-size: 11px; font-weight: 600; } .member-pill-remove { background: none; border: none; color: rgba(255,255,255,0.7); cursor: pointer; padding: 0; font-size: 14px; line-height: 1; } .member-pill-remove:hover { color: white; } .member-search-box { padding: var(--spacing-sm) var(--spacing-md); border-bottom: 1px solid var(--border); } .member-search-box input { width: 100%; border: none; outline: none; font-size: var(--font-size-sm); padding: 4px 0; background: transparent; } .member-picker-collapsible { display: none; } .member-picker.open .member-picker-collapsible { display: block; } .member-picker-toggle { display: flex; align-items: center; justify-content: space-between; padding: var(--spacing-xs) var(--spacing-md); background: var(--background); cursor: pointer; font-size: var(--font-size-sm); color: var(--primary); font-weight: 500; border-top: 1px solid var(--border); user-select: none; } .member-picker-toggle:hover { background: rgba(46, 72, 114, 0.05); } .member-picker-toggle .toggle-arrow { transition: transform 0.2s; } .member-picker.open .member-picker-toggle .toggle-arrow { transform: rotate(180deg); } .member-list { max-height: 240px; overflow-y: auto; } .member-list-item { display: flex; align-items: center; gap: var(--spacing-xs); padding: 6px var(--spacing-md); cursor: pointer; transition: background 0.15s; } .member-list-item:hover { background: var(--background); } .member-list-item.selected { background: rgba(37, 99, 235, 0.06); } .member-list-item input[type="checkbox"] { width: auto; flex-shrink: 0; } .member-list-avatar { width: 28px; height: 28px; border-radius: 50%; object-fit: cover; flex-shrink: 0; } .member-list-initial { width: 28px; height: 28px; border-radius: 50%; background: var(--primary); color: white; display: flex; align-items: center; justify-content: center; font-weight: 600; font-size: 12px; flex-shrink: 0; } .member-list-info { flex: 1; min-width: 0; display: flex; align-items: center; gap: 6px; overflow: hidden; } .member-list-name { font-weight: 500; font-size: var(--font-size-sm); color: var(--text-primary); white-space: nowrap; } .member-list-sep { color: var(--border-color, #cbd5e1); flex-shrink: 0; } .member-list-company { font-size: var(--font-size-xs); color: var(--text-secondary); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .member-list-empty { padding: var(--spacing-md); text-align: center; color: var(--text-secondary); font-size: var(--font-size-sm); } .selected-count { font-size: var(--font-size-sm); color: var(--text-secondary); } @media (max-width: 640px) { .compose-card { padding: var(--spacing-md); } } {% endblock %} {% block content %}
{% endblock %} {% block extra_js %} /* Member picker */ (function() { var users = [ {% for user in users %} {id: {{ user.id }}, name: {{ (user.name or user.email.split('@')[0]) | tojson }}, email: {{ user.email | tojson }}, companyName: {{ (user._company_name or '') | tojson }}, avatarPath: {% if user.avatar_path %}{{ url_for('static', filename=user.avatar_path) | tojson }}{% else %}""{% endif %}}{{ ',' if not loop.last }} {% endfor %} ]; var selectedIds = new Set(); var searchInput = document.getElementById('member-search'); var listDiv = document.getElementById('member-list'); var selectedDiv = document.getElementById('selected-members'); var countDiv = document.getElementById('selected-count'); var hiddenInputsDiv = document.getElementById('members-hidden-inputs'); var placeholderText = document.getElementById('placeholder-text'); function normalize(str) { return str.toLowerCase().normalize('NFD').replace(/[\u0300-\u036f]/g, ''); } function filterUsers(query) { if (!query) return users; var q = normalize(query); return users.filter(function(u) { return normalize(u.name).indexOf(q) !== -1 || normalize(u.companyName).indexOf(q) !== -1 || normalize(u.email).indexOf(q) !== -1; }); } function renderList() { var query = searchInput.value.trim(); var filtered = filterUsers(query); if (filtered.length === 0) { listDiv.innerHTML = '