Commit 1cc9ea41 authored by Яков's avatar Яков
Browse files

Панель: шесть границ групп вместо двадцати двух



Каждая граница стоит 17 px — разделитель и поля по 8. Почти каждая кнопка была
своей группой: 289 px уходило на волосяные линии, и панель на реальной ширине
1080 не укладывалась в один ряд. Двадцать две линии к тому же не показывают
структуру, а превращаются в частокол.

Подпись группы теперь решает по ширине самой панели (@container), а не окна:
в админке панель 1080 при окне 1600, и правило по @media показало бы подпись
там, где она не влезает.
Co-Authored-By: default avatarClaude Opus 5 (1M context) <noreply@anthropic.com>
parent d131f8a5
...@@ -36,29 +36,38 @@ const TABLE_GROUP = { ...@@ -36,29 +36,38 @@ const TABLE_GROUP = {
] ]
} }
/**
* Урок: полный набор.
*
* ── Почему групп мало ────────────────────────────────────────────────────────
*
* Каждая граница групп стоит 17 px (разделитель 1 + поля по 8). Раньше почти
* каждая кнопка была своей группой — двадцать две границы, 289 px только
* на волосяные линии, и панель не укладывалась в один ряд. Заодно двадцать две
* линии не показывают структуру, а превращаются в частокол.
*
* Теперь границ шесть, по смыслу: правка · структура · оформление блока ·
* вставка · оживить урок · документы и ссылки.
*/
const LESSON = [ const LESSON = [
{ type: 'g', items: ['undo', 'redo'] }, { type: 'g', items: ['undo', 'redo', 'clearMarks'] },
{ type: 'g', items: ['|'] }, { type: 'g', items: ['|'] },
HEADINGS, HEADINGS,
{ type: 'g', items: ['|'] }, { type: 'g', items: ['|'] },
{ type: 's', toggle: false, items: ['bulletList', 'orderedList'] }, { type: 'g', items: ['bulletList', 'orderedList'] },
{ type: 's', toggle: true, items: ['alignLeft', 'alignCenter', 'alignRight'] }, { type: 's', toggle: true, items: ['alignLeft', 'alignCenter', 'alignRight'] },
{ type: 's', toggle: false, items: ['blockquote', 'hr', 'codeBlock'] },
TABLE_GROUP, TABLE_GROUP,
{ type: 'g', items: ['emoji'] }, { type: 'g', items: ['emoji'] },
{ type: 'g', items: ['clearMarks'] },
{ type: 's', toggle: false, items: ['blockquote', 'hr', 'codeBlock'] },
{ type: 'g', items: ['|'] }, { type: 'g', items: ['|'] },
{ type: 'g', items: ['activityRef'] }, { type: 'g', items: ['activityRef'] },
{ type: 's', toggle: false, items: ['image'] }, { type: 'g', items: ['image'] },
{ type: 's', toggle: false, items: ['video', 'iframe'] }, { type: 's', toggle: false, items: ['video', 'iframe'] },
{ type: 'g', items: ['voicemessage'] }, { type: 'g', items: ['voicemessage', 'webcamera', 'screencust'] },
{ type: 'g', items: ['webcamera'] },
{ type: 'g', items: ['screencust'] },
{ type: 'g', items: ['|'] }, { type: 'g', items: ['|'] },
...@@ -68,23 +77,18 @@ const LESSON = [ ...@@ -68,23 +77,18 @@ const LESSON = [
// кнопка-ссылка. На боевой базе клиента (601 урок) каждая использована // кнопка-ссылка. На боевой базе клиента (601 урок) каждая использована
// НОЛЬ раз, хотя все работают. // НОЛЬ раз, хотя все работают.
// //
// Иконку и подсказку они уже получили — не помогло бы: растворённые между // Иконки и подсказки они уже получили — этого мало: растворённые между
// «изображением» и «ссылкой», они не читаются как отдельная возможность. // «изображением» и «ссылкой», они не читаются как отдельная возможность.
// Поэтому у них своя группа с подписью. Мера бесплатная и делает // Поэтому у них своя обведённая группа с подписью. Мера бесплатная
// необязательными дорогие: разовую подсветку новинки и карточки-примеры // и делает необязательными дорогие — разовую подсветку новинки
// в пустом уроке. // и карточки-примеры в пустом уроке.
//
// Подпись показывается только на широком экране — см. LABEL_MIN_WIDTH.
{ type: 'g', label: 'Оживить урок', { type: 'g', label: 'Оживить урок',
items: ['audio', 'interactiveImage', 'insertToggleBlock', 'buttonLink'] }, items: ['audio', 'interactiveImage', 'insertToggleBlock', 'buttonLink'] },
{ type: 'g', items: ['|'] }, { type: 'g', items: ['|'] },
{ type: 's', toggle: false, items: ['iframe_pptx', 'iframe_pdf', 'pdf'] }, { type: 's', toggle: false, items: ['iframe_pptx', 'iframe_pdf', 'pdf'] },
{ type: 'g', items: ['link'] }, { type: 'g', items: ['link', 'file', 'iframe_custom', 'export_pdf'] },
{ type: 'g', items: ['file'] },
{ type: 'g', items: ['iframe_custom'] },
{ type: 'g', items: ['export_pdf'] },
] ]
const toolsInit = { const toolsInit = {
......
...@@ -274,6 +274,12 @@ body{ ...@@ -274,6 +274,12 @@ body{
z-index: var(--atma-toolbar-z-index, 10); z-index: var(--atma-toolbar-z-index, 10);
gap: 2px; gap: 2px;
// Подпись группы решает, показываться ли ей, по ширине САМОЙ ПАНЕЛИ,
// а не окна. В админке панель шириной 1080 при окне 1600: правило
// по @media показало бы подпись там, где она не влезает, и панель
// уехала бы во второй ряд.
container-type: inline-size;
&-g{ &-g{
display: flex; display: flex;
flex-direction: row; flex-direction: row;
...@@ -301,8 +307,10 @@ body{ ...@@ -301,8 +307,10 @@ body{
padding: 0 8px 0 6px; padding: 0 8px 0 6px;
// Подпись занимает 96 px и появляется только там, где панель // Подпись занимает 96 px и появляется только там, где панель
// и без неё укладывается в один ряд. // и без неё укладывается в один ряд. Браузер без поддержки
@media (min-width: 1280px){ // @container подпись просто не покажет — деградация мягкая,
// группу всё равно видно по рамке.
@container (min-width: 1200px){
display: inline; display: inline;
} }
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment