Організм · рівень 3

Діалог клієнта

Файл названо діалогом клієнта, і саме діалог клієнта тут не має кольору. .cemodal і .cedlg це спільна коробка, яку wireframes/_nav.js будує на льоту для дев'яти діалогів: новий клієнт, редагування клієнта, видалення клієнта, адреса, видалення адреси, телефон, e-mail, мова, видалення акаунта. Кольору сягають шість, і всі шість - про покупця.

рівень 3design/system/components/client-dialog.css117 рядків22 селектори84 оголошення5 екранів, діалог на 2
З чого складається

Коробка не має власного вмісту: 24 з її дитячих класів належать шістьом іншим файлам, бо всередину кладе той потік, який її відкрив.

ФайлКласівЯкі саме
address-card.css11.addr-2col .addr-check .addr-cityfld .addr-del-row .addr-method .addr-methods .addr-note .am-ar ...
button.css4.btn--danger .btn--icon .btn--s .btn--text
otp.css3.box .otp .otp-note
radio.css3.pf-lang .pf-langs .rc
field.css2.cef .field
checkout-form.css1.pf-resend

7 класів усередині кореня мають більш ніж одного власника, тож із коду не видно, чий вони: .btn--accent .btn--ghost .btn--outline .on .opt .uiv-ic .uiv-trail

Анатомія

Розмітка тут - не переписана від руки. Її знято з design/account-addresses.html у цій же сесії, обробники зняті, посилання підняті на рівень. Цей організм у спокої не існує - він display: none, доки щось не додасть open, - тож стенд додає цей клас сам. Показано на сцені: трансформований предок стає для position: fixed тим блоком, від якого рахується його inset, тож панель не накриває сторінку й не втрачає жодного свого оголошення.

Показано в рамці шириною 390, і ширина названа не для краси: це ширина, на якій цей організм у продукті стоїть. Медіа-умова читає в'юпорт, а не контейнер, тож жодне правило самого стенда цього не вирішує - тільки справжній в'юпорт, а він є лише в рамки. Сам організм у рамці обмежено до 460px - це ширина, яку він займає в продукті на 1280. Витягнутий зі своєї колонки, він розтягнувся б на всю рамку, і кнопка на 294 стала б кнопкою на 1490.

1Коробка .cemodal - не більше 460, --radius-12, --elevation-4, margin:auto. Вона не fixed: центрує й тримає її .ceov з overlay.css. 4 екземпляри на 2 екранах
2Шапка .ce-top і закриття .ce-x - і хрестик тут досі надрукований шрифтом. Знято з design/account-addresses.html на 390 після openAddr('choose'): 117 елементів, 342x585, і в шапці символ, а не знак із набору
3Дві дії .ceact - display:flex і > * { flex:1 }, «два контроли й нічого більше» кроку 7.9. Те саме речення написане ще двічі: .cedlg .act у цьому ж файлі й .pm-f у модалці відгуку
4Підтвердження .cedlg .ic .act - вужча коробка на 400, текст по центру, коло 48px із --line-inverse. .ic називають три файли: account-shell, client-dialog, filter-rail
5Небезпечна дія .cedel і .dn - блок «Видалити клієнта». З 7.96 носить btn--outline btn--danger btn--s, як і близнюк в адресах. Не рендериться на жодному кольоровому екрані, і 51 з 52 незбіглих властивостей вирішувача - звідси
6Режим редагування .cemodal.mode-edit .addr-back - .mode-edit дописує JavaScript у _nav.js:1046 і лише після openAddrEdit(). Перепис у спокої його не бачить ніколи

.dn: сто двадцять шосте ім'я, якого перепис не бачить

У цьому файлі .dn це попередження під кнопкою видалення клієнта. На трьох екранах чекауту це <span class="dn">Нова Пошта</span> - назва доставки. owners.json дає .dn одного власника, тож у 126 неоднозначних імен шару воно не входить: друге значення живе в розмітці, де css немає взагалі. Наслідок заміряно: .dn рендериться на трьох кольорових екранах і не оформлений на жодному, бо єдине правило для нього вимагає предка .cedel, якого колір не малює. 126 - це нижня межа, а не підсумок: перепис звіряє файл із файлом і не бачить зіткнення файлу з розміткою.

Чому хрестик друкований. openAddr() викликає wfAddrDialog(), а той щоразу переписує innerHTML контейнера - уже після того, як uivMarks() відпрацював на завантаженні. Діалог міста й модалка відгуку будуються один раз і далі лише отримують .open, тому їхні хрестики намальовані набором. Ця сама форма вже двічі має обгортку в design/_nav.js: uivPatchMenus для оверлея каталогу і uivToastMarks для тостів. Тут обгортки немає.
Дві частини, яких у діалога не було: список і запуск

Обидва прийшли з модалки «Додати клієнта в сесію» на 8.31b, і обидва справді нові: цей діалог ніколи не мав СПИСКУ, з якого обирають, бо два його штатні екземпляри редагують одного клієнта, а цей набирає кількох.

+Додати клієнтаповне додавання: ім'я, ціль, телефон, e-mail, нотатки

Список прокручується, а діалог - ні. max-height: 240px - це значення приватного блоку, перенесене, а не виведене заново: приблизно чотири рядки, і саме це каже «нижче є ще», не змушуючи саму коробку вилізти за падінг скрима. Запуск пунктирний, бо empty-state.css і .ctab.add вже вживають пунктир для «того, чого ще немає» - тут те саме речення в рядку.

І друга коробка цього ж файлу - підтвердження, яку сторінка досі називала словами й не показувала. Її холостий контроль був червоний і цього ніхто не читав, бо вердикт малюється в браузері, а жоден гейт туди не дивився. З 8.31b дивиться accept.mjs.

🗑

Видалити клієнта?

Історія замовлень цього клієнта залишиться у ваших замовленнях, але його профіль і ціль буде видалено.

🗑 Видалити клієнта
Дію не можна скасувати.

Сам рядок списку - не цього файлу: .ac-cli це п'яте ім'я рядкового рунґа radio.css, і воно пішло туди на 8.30. Тут лишились контейнер і запуск.

Стани
СтанЩо робитьЧому так
вибір способуdata-step="choose" - три способи доставкиперший крок спільного діалогу адреси; кроки перемикає addrStep() атрибутом hidden, а не класом
форма способуdata-step="vidd|post|cour"три повні форми лежать у розмітці одночасно, показана одна
редагування.mode-edit ховає .addr-back, міняє підпис кнопки й показує рядок видаленняу кольорі не рендериться: клас пише JavaScript у момент дії
підтвердження.cedlg замінює .cemodal, а не накриває йогоopenAddrDelete() знімає .open з одного оверлея й ставить на другий - два .ceov, ніколи не разом
видалення клієнта.cedel .dnіснує тільки в сірому прототипі: wfClientEdit() кличуть лише п'ять wireframes/coach-*.html, а 42 екрани тренера кольору не мають
фокуспастка 7.85 веде фокус на .ceovроль і aria-modal лежать теж на .ceov, тобто в overlay.css; сама коробка не оголошує нічого
Межі

Одна медіа-умова, і вона з'явилась на 8.31b, коли другий діалог уперся в те саме: під 480 пара дій стає стовпчиком. coach-tariff.css написав це правило для .tfdlg ще на 8.7 зі своїм заміром («пара ніколи не влазить у цю коробку - 2.08 за край на КОЖНІЙ ширині»), а модалка додавання клієнта відтворила знахідку з іншого кінця: «Додати першого клієнта» поруч зі «Скасувати» іде 154..387 у в'юпорті 360, тобто 27px за край, і сторінку це не прокручує - скрим обрізає, тож правий край головної дії просто недосяжний, а всі гейти читають 0. Два діалоги, по одному заміру кожен - і це вже відповідь компонента, а не екрана. Межа 479 - та сама, що в button.css для його власного телефонного кроку.

Обмеження

Правила вживання, які називають саме цей компонент: U9. Автор правил один, і це architecture.html, розділ I; тут - витяг.

Ряд дій діалогу ще не переведений, і це сказано вголос: його розмітку будує wireframes/_nav.js, спільний скрипт обох корпусів, а сірий корпус цей етап не редагує. Переведення записане в беклог для етапу 12.

Холостий контроль

Сторінка звіряє себе з файлом: 12 власних класів і 1 стан. .mode-edit стоїть у станах, а не в класах, і це не послаблення контролю: цей клас дописує JavaScript у момент дії, тож у спокої його не існує ніде - показати його можна лише підробкою, а підроблений стан заборонено тим самим правилом, що й вигадану роль.

ПОВЕДІНКА НА ШИРИНІ - етап 10, крок 4

Від якого порогу: --bp-grid-2col дзеркалом 619. Що саме міняється: ряд дій діалогу складається в стовпчик, зворотним порядком. Було 479, поза реєстром.
Токени

Прочитані з client-dialog.css: 8 семантичних ролей і 16 примітивів.

Семантичні ролі (8)Примітиви (16)
--bg-page --elevation-4 --line-hair --line-inverse --line-strong --text-muted --text-primary --text-secondary--fs-12 --fs-14 --fs-18 --fs-20 --fs-24 --fw-black --fw-semibold --lh-airy --lh-flat --radius-12 --radius-circle --space-2 --space-8 --space-12 --space-16 --space-24
Що знайшов вирішувач

Оголошень, які збігаються з елементами й не виграють, - жодного. Зате 52 властивості не збігаються з жодним елементом, і всі вони приходять із чотирьох з 17 селекторів файлу: .cedel, .cedel button, .cedel .dn і .cemodal.mode-edit .addr-back.

Це дві різні речі під одним показником, і плутати їх не можна. .mode-edit - стан, який дописує JavaScript у момент дії: розмітка є, просто перепис у спокої її не застає. .cedel - розмітка, що існує тільки в сірому прототипі, і не тому, що її забули, а тому, що вона на екранах тренера, яких у кольорі немає. Перше лікується заміром у русі, друге - роботою етапу 09. Мертвого коду тут немає ні там, ні там.

Немає в коді -> етап 09

Чого бракує

  • Діалог клієнта не має кольору - це ім'я файлу й це первинна аудиторія продукту. 42 екрани тренера з 142 стоять сірими
  • Хрестик друкований шрифтом - потрібна обгортка над wfAddrDialog(), така сама, як uivToastMarks; це правило, а не правка одного файлу
  • .dn означає дві різні речі, і перепис неоднозначності це не ловить
  • Роль лежить в overlay.css, а коробка анонімна - рішення про те, чий це діалог
  • Колірного блоку немає: кольоровий продукт малює цю коробку правилами сірого шару

Не домальовано наперед і не замовчано: етап 09 стартує з цього списку, зведеного в design/kit/docs/architecture.md.