@boobooking/dashboard-ui-components 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -50,9 +50,9 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
50
50
 
51
51
  Пакет экспортирует семнадцать компонентов: `Popup`, `Dot`, `PickDay`,
52
52
  `RussianMobileFilter`, `Search`, `SelectDateInterval`, `SelectSingle`,
53
- `SmallBadge`, `ErrorMessages`, `Closer`, `DownloadLink`, `Modal`,
53
+ `SmallBadge`, `ErrorMessages`, `Closer`, `DownloadLink`,
54
54
  `ConfirmationModal`, `DropdownButtonWithAction`, `Pagination`,
55
- `NavigationMenuElement`, `PageCard` и плагин `dashboardUi`. В архив пакета
55
+ `NavigationMenuElement`, `PageCard`, `NotificationMessage` и плагин `dashboardUi`. В архив пакета
56
56
  (`files: ["dist"]`) исходники не
57
57
  попадают, поэтому контракт каждого компонента — здесь и в playground, а не в
58
58
  исходном коде.
@@ -250,44 +250,6 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
250
250
 
251
251
  Событий нет.
252
252
 
253
- ### Modal
254
-
255
- Оболочка модального окна: оверлей, панель и переходы открытия и закрытия.
256
- Заголовок, текст и кнопки кладёт в слот приложение. На этой оболочке построен
257
- `ConfirmationModal`.
258
-
259
- <modal :is-open="isOpen" :heading-id="headingId">
260
- <h3 :id="headingId">Заголовок</h3>
261
- …содержимое…
262
- </modal>
263
-
264
- | Проп | Тип | По умолчанию | Описание |
265
- | --- | --- | --- | --- |
266
- | `isOpen` | `Boolean` | `false` | Открыта ли модалка |
267
- | `headingId` | `String` | обязателен | `id` заголовка в слоте: им модалка подписывает диалог через `aria-labelledby` |
268
-
269
- Событий нет. Модалка не закрывается сама ни по клику на оверлей, ни по
270
- Escape: видимостью управляет родитель, как у `ConfirmationModal`. `id`
271
- заголовка удобно получать через `useId()` — тогда у двух модалок на одной
272
- странице он не совпадёт.
273
-
274
- Содержимое слота смонтировано всегда, а закрытая модалка его только прячет
275
- (`v-show`). Поэтому состояние внутри — выбор, введённый текст, ошибки —
276
- переживает закрытие, и сбрасывать его должен родитель.
277
-
278
- Панель белая, со скруглением `rounded-lg` и без внутренних отступов: их
279
- задаёт содержимое слота. На узком экране панель прижата к нижнему краю, а её
280
- ширина — по содержимому, но не больше экрана за вычетом полей; начиная с `sm`
281
- панель стоит по центру и занимает `max-w-lg`. `class` и другие атрибуты на
282
- `<modal>` попадают на полноэкранный корень, а не на панель: размер панели и
283
- атрибуты диалога вроде `aria-describedby` снаружи не задаются.
284
-
285
- Панель не обрезает содержимое, чтобы выпадающие списки и календари внутри
286
- модалки могли выходить за её край. Поэтому блок слота со своим фоном у края
287
- панели сам скругляет внешние углы — верхний `rounded-t-lg`, нижний
288
- `rounded-b-lg`, — иначе его квадратные углы закроют скругление панели. Так
289
- сделано у `ConfirmationModal`.
290
-
291
253
  ### ConfirmationModal
292
254
 
293
255
  Модалка подтверждения действия: заголовок, текст, кнопка действия и кнопка
@@ -317,6 +279,13 @@ Escape: видимостью управляет родитель, как у `Con
317
279
  отмены. Ни одна из кнопок модалку не закрывает — см. раздел «Почему у
318
280
  ConfirmationModal нет v-model».
319
281
 
282
+ Панель модалки — белая, со скруглением `rounded-lg`: на узком экране прижата
283
+ к нижнему краю, начиная с `sm` стоит по центру и занимает `max-w-lg`. `class` и
284
+ другие атрибуты на `<confirmation-modal>` попадают на полноэкранный корень, а
285
+ не на панель. Панель не обрезает содержимое, поэтому блоки текста и кнопок со
286
+ своим фоном скругляют внешние углы сами — верхний `rounded-t-lg`, нижний
287
+ `rounded-b-lg`.
288
+
320
289
  ### DropdownButtonWithAction
321
290
 
322
291
  Кнопка с меню дополнительных действий: основная часть — слот `button`, стрелка
@@ -415,7 +384,7 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
415
384
  `padding-right: var(--bb-closer-space)`, а в Tailwind 3 —
416
385
  `pr-[var(--bb-closer-space)]`. Вне `PageCard` отступ равен нулю.
417
386
 
418
- Карточка не обрезает содержимое, как `Modal`: выпадающие списки и календари
387
+ Карточка не обрезает содержимое, как у `ConfirmationModal`: выпадающие списки и календари
419
388
  могут выходить за её край. Блок со своим фоном у края карточки скругляет свои
420
389
  углы сам — например, нижний блок строк: `overflow-hidden sm:rounded-b-lg`.
421
390
 
@@ -429,6 +398,47 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
429
398
 
430
399
  Событий нет.
431
400
 
401
+ ### NotificationMessage
402
+
403
+ Всплывающее уведомление: заголовок, текст, иконка по типу и крестик закрытия.
404
+ На узком экране стоит снизу по центру, начиная с `sm` — в правом верхнем углу.
405
+
406
+ <notification-message
407
+ v-model="message"
408
+ type="confirmation"
409
+ notification-heading="Письмо отправлено"
410
+ />
411
+
412
+ | Проп | Тип | По умолчанию | Описание |
413
+ | --- | --- | --- | --- |
414
+ | `modelValue` | `String` | `""` | Текст уведомления; пустая строка или `null` — уведомления нет |
415
+ | `type` | `String` | `"warning"` | `"confirmation"` (галочка, серый фон), `"warning"` (жёлтое) или `"dangerous"` (красное) |
416
+ | `notificationHeading` | `String` | `""` | Заголовок |
417
+ | `lang` | `String` | язык плагина | `"ru"` или `"en"` |
418
+
419
+ Уведомление показано, пока текст непуст. Крестик закрывает его сам — эмитит
420
+ `update:modelValue` с пустой строкой, поэтому странице достаточно `v-model`.
421
+ Других событий нет.
422
+
423
+ Для скринридера уведомление — живая область: `role="alert"` у `dangerous`,
424
+ `role="status"` у остальных. Область есть на странице всегда, а пустая
425
+ невидима и не перехватывает клики. Скринридер объявляет текст, который
426
+ появился после монтирования компонента; текст, уже стоявший при монтировании,
427
+ может остаться необъявленным. Роль задаётся типом, поэтому `type` стоит менять
428
+ только пока текст пуст — проще всего держать по экземпляру на каждый тип.
429
+ Показывайте одно уведомление за раз: все они стоят в одном углу. Подпись
430
+ крестика для скринридера — «Закрыть» / «Close». После закрытия с клавиатуры
431
+ фокус не возвращается и уходит на `body` страницы.
432
+
433
+ Корень — на весь экран (`fixed inset-0`), с ресетом пакета; слотов нет.
434
+
435
+ У корня нет `z-index`, поэтому среди позиционированных элементов он рисуется в
436
+ порядке DOM: ставьте компонент в разметке страницы последним. Под открытой
437
+ модалкой или выпадающим меню пакета (их подложки — `z-20`) уведомление скрыто,
438
+ а его крестик не нажимается, поэтому закрывайте модалку, прежде чем показать
439
+ уведомление. `class` и атрибуты попадают на корень на весь экран, так что
440
+ страница может поднять его своим классом, например `class="z-30"`.
441
+
432
442
  ## Языки
433
443
 
434
444
  Тексты пакета есть на русском и английском. Язык компонента — проп `lang`, если
@@ -445,6 +455,7 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
445
455
  | `SelectDateInterval` — подсказки полей | от / до | from / to |
446
456
  | `Pagination` | Предыдущая / Следующая / Показаны результаты X - Y из Z | Previous / Next / Showing X - Y of Z results |
447
457
  | `PageCard` — доступное имя крестика | Назад | Back |
458
+ | `NotificationMessage` — подпись крестика для скринридера | Закрыть | Close |
448
459
 
449
460
  Формат даты — `дд.мм.гггг` в обоих языках: это формат значения, а не текст.
450
461
  Неделя начинается с понедельника. Календарь `PickDay` берёт язык при
@@ -561,8 +572,10 @@ Tailwind, `@tailwindcss/forms` и типографикой, как у потре
561
572
  такие обращения перестанут находить элементы: внутренние классы в контракт
562
573
  пакета не входят.
563
574
 
575
+ С версии 0.10.0 `Modal` не экспортируется: это внутренняя оболочка `ConfirmationModal`.
576
+
564
577
  Ресет пакета распространяется и на содержимое слотов — разметку приложения
565
- внутри `Popup`, `DropdownButtonWithAction` и `Modal`. Ресет лежит в слое
578
+ внутри `Popup` и `DropdownButtonWithAction`. Ресет лежит в слое
566
579
  `components`, поэтому внутри слота он сильнее всего, что приложение объявило
567
580
  в слое `base`: preflight, `@tailwindcss/forms` и собственных умолчаний
568
581
  приложения. В слоте он задаёт:
@@ -590,6 +603,6 @@ focus:ring-offset-2`.
590
603
  (`tabindex="-1"`): скринридер его не назовёт, а с клавиатуры до него не
591
604
  добраться.
592
605
 
593
- `Modal` и построенный на нём `ConfirmationModal` не переносят фокус внутрь при
594
- открытии, не удерживают его внутри, не возвращают на прежнее место после
595
- закрытия и не закрываются по Escape.
606
+ `ConfirmationModal` не переносит фокус внутрь при открытии, не удерживает его
607
+ внутри, не возвращает на прежнее место после закрытия и не закрывается по
608
+ Escape.