@boobooking/dashboard-ui-components 0.20.0 → 0.21.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
@@ -92,11 +92,12 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
92
92
 
93
93
  ## Компоненты
94
94
 
95
- Пакет экспортирует двадцать четыре компонента: `Dot`, `RussianMobileFilter`,
95
+ Пакет экспортирует двадцать шесть компонентов: `Dot`, `RussianMobileFilter`,
96
96
  `Search`, `SelectDateFilter`, `SelectDateForm`, `SelectDateIntervalFilter`,
97
97
  `SelectDateIntervalForm`,
98
98
  `SelectSingleFilter`, `SelectSingleForm`, `SelectMultipleFilter`,
99
- `SelectMultipleForm`, `InfoPill`, `ErrorMessages`, `FormInput`, `ActionPill`,
99
+ `SelectMultipleForm`, `SelectSingleCards`, `SelectMultipleList`, `InfoPill`,
100
+ `ErrorMessages`, `FormInput`, `ActionPill`,
100
101
  `ConfirmationModal`, `DropdownButtonWithAction`, `HamburgerMenu`, `DataTable`,
101
102
  `NavigationMenuElement`, `PageTabs`, `PageCard`, `NotificationMessage`,
102
103
  `TextPopover`, функцию `downloadFile` и плагин `dashboardUi`. В архив пакета
@@ -572,6 +573,126 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
572
573
  все остальные атрибуты и слушатели ложатся на корень компонента (у `FormInput`
573
574
  остальные атрибуты уходят на поле ввода).
574
575
 
576
+ ### SelectSingleCards
577
+
578
+ Выбор одного пункта карточками в форме: подпись над карточками, в каждой
579
+ карточке кружок слева и надпись. У выбранной карточки синяя рамка, светло-синий
580
+ фон и точка в кружке. Карточки стоят в несколько колонок на всю ширину формы.
581
+
582
+ <select-single-cards label="Бренд" :items="brands" v-model="brand" :is-required="markBrandRequired"/>
583
+
584
+ | Проп | Тип | По умолчанию | Описание |
585
+ | --- | --- | --- | --- |
586
+ | `items` | `Array` | обязателен | Массив `{ id, name }` |
587
+ | `modelValue` | `String \| Number \| Boolean` | `null` | `id` выбранного пункта или `null` |
588
+ | `label` | `String` | обязателен | Подпись над карточками |
589
+ | `isRequired` | `Boolean` | `false` | Красная точка у подписи |
590
+ | `columns` | `Number` | `2` | Число колонок, целое от 1; иначе — две колонки. Vue предупреждает о нецелом, меньшем 1 и нечисловом значении, но не о `null` |
591
+
592
+ Событий два: `update:modelValue` с `id` выбранного пункта и сразу за ним
593
+ `changed`, после каждого выбора пользователя. `id` уходит в событие как есть,
594
+ без приведения к строке: строки, числа и `true` / `false` сравниваются строго.
595
+ Надпись карточки — `name`.
596
+
597
+ Без пунктов (`items` пуст, `null` или не массив) видна только подпись, сетки нет;
598
+ элементы, не являющиеся объектами, пропускаются.
599
+
600
+ Клик в любом месте карточки выбирает её. Клик по уже выбранной карточке
601
+ ничего не меняет и событий не вызывает: выбор не снимается, «ничего не
602
+ выбрано» бывает только до первого выбора. Если `modelValue` не совпадает
603
+ ни с одним `id`, не выбрана ни одна карточка.
604
+
605
+ Если родитель не принял значение (не обновил `modelValue` в ответ на
606
+ `update:modelValue`), выбранной остаётся карточка, которую задаёт проп.
607
+
608
+ Колонки компонент раскладывает сам: пункты идут по колонкам в порядке массива,
609
+ сначала заполняется первая колонка сверху вниз, потом вторая и так далее.
610
+ Длины колонок различаются не больше чем на один пункт, лишние пункты достаются
611
+ первым колонкам. Для `n` пунктов и `c` колонок:
612
+
613
+ | `n` | `c` | Колонки |
614
+ | --- | --- | --- |
615
+ | 14 | 2 | 7, 7 |
616
+ | 14 | 3 | 5, 5, 4 |
617
+ | 4 | 3 | 2, 1, 1 |
618
+ | 2 | 2 | 1, 1 |
619
+ | 2 | 3 | 1, 1, пустая |
620
+ | 1 | 2 | 1, пустая |
621
+
622
+ Колонки одинаковой ширины, их число всегда равно `columns`: при `n < c`
623
+ пустые колонки остаются местом справа, и ширина карточек от числа пунктов не
624
+ зависит. Карточки одной строки одной высоты, по самой высокой: так надпись,
625
+ перенесённая на две строки, не делает соседнюю карточку ниже. Колонки не
626
+ перестраиваются под узкий экран. Порядок Tab и стрелок — порядок массива, а не
627
+ порядок строк на экране.
628
+
629
+ С клавиатуры карточки ведут себя как родная группа переключателей: Tab входит
630
+ в группу один раз — на выбранную карточку, а если выбранной нет, на первую;
631
+ следующий Tab уходит из группы. Стрелки переходят к соседней карточке в
632
+ порядке массива и выбирают её, пробел выбирает карточку под фокусом. Кольцо
633
+ фокуса — вокруг всей карточки, только при фокусе с клавиатуры.
634
+
635
+ Для скринридера сетка карточек — группа `radiogroup`, названная подписью;
636
+ каждая карточка называется своей надписью. Клик по подписи ничего не делает.
637
+
638
+ В режиме высокой контрастности (`forced-colors: active`) браузер заменяет цвета
639
+ системными, а выбранная карточка остаётся видна: точка в кружке — системным
640
+ цветом текста, кружок — цветом выделения. Кольцо фокуса в этом режиме — одна
641
+ линия, ореол браузер снимает.
642
+
643
+ `isRequired` только показывает точку, как у `FormInput`: атрибутов `required`
644
+ и `aria-required` компонент не ставит. `class`, `style`, все остальные атрибуты
645
+ и слушатели ложатся на корень компонента. Своих надписей у компонента нет,
646
+ поэтому `lang` нет. Вид не зависит от preflight и `@tailwindcss/forms`
647
+ приложения: кружок и точку рисует сам компонент.
648
+
649
+ ### SelectMultipleList
650
+
651
+ Выбор нескольких пунктов списком галочек в форме: подпись над списком, у
652
+ каждого пункта квадрат с галочкой и надпись. Отмеченный квадрат закрашен
653
+ индиго с белой галочкой. Пункты стоят в несколько колонок.
654
+
655
+ <select-multiple-list label="Участники" :items="participantTypes" v-model="participants" :columns="2"/>
656
+
657
+ | Проп | Тип | По умолчанию | Описание |
658
+ | --- | --- | --- | --- |
659
+ | `items` | `Array` | обязателен | Массив `{ id, name }` |
660
+ | `modelValue` | `Array` | `[]` | `id` отмеченных пунктов |
661
+ | `label` | `String` | обязателен | Подпись над списком |
662
+ | `isRequired` | `Boolean` | `false` | Красная точка у подписи |
663
+ | `columns` | `Number` | `2` | Число колонок, целое от 1; иначе — две колонки. Vue предупреждает о нецелом, меньшем 1 и нечисловом значении, но не о `null` |
664
+
665
+ Событий два: `update:modelValue` с новым массивом и сразу за ним `changed`,
666
+ после каждого выбора пользователя. Отметка добавляет `id` в конец массива,
667
+ снятие убирает его; `id`, которых нет среди пунктов, остаются в значении.
668
+ `modelValue`, не являющийся массивом, значит «ничего не отмечено». Клик по
669
+ квадрату и по надписи отмечает или снимает пункт.
670
+
671
+ Без пунктов (`items` пуст, `null` или не массив) видна только подпись, списка нет;
672
+ элементы, не являющиеся объектами, пропускаются.
673
+
674
+ Если родитель не принял значение (не обновил `modelValue`), отметки остаются
675
+ такими, какими их задаёт проп.
676
+
677
+ Раскладка по колонкам, ширина колонок, высота строк и порядок — как у
678
+ `SelectSingleCards` (см. «SelectSingleCards»), в том числе таблица `n` / `c`.
679
+
680
+ С клавиатуры каждая галочка — отдельная остановка Tab в порядке массива,
681
+ пробел отмечает и снимает. Кольцо фокуса — вокруг квадрата, только при фокусе
682
+ с клавиатуры.
683
+
684
+ Для скринридера список — группа `group`, названная подписью; каждая галочка
685
+ называется своей надписью. Клик по подписи ничего не делает.
686
+
687
+ В режиме высокой контрастности (`forced-colors: active`) компонент показывает
688
+ родные галочки браузера в системных цветах: свой закрашенный квадрат браузер
689
+ перекрасил бы в цвет фона, и отмеченный пункт не отличался бы от неотмеченного.
690
+ Кольцо фокуса в этом режиме — одна линия, как у `SelectSingleCards`.
691
+
692
+ `isRequired`, `class`, `style`, остальные атрибуты и слушатели, отсутствие
693
+ `lang` и независимость вида от preflight и `@tailwindcss/forms` — как у
694
+ `SelectSingleCards`.
695
+
575
696
  ### InfoPill
576
697
 
577
698
  Пилюля, которая только показывает текст: статус, счётчик, флаг, пометку.
@@ -1216,10 +1337,14 @@ Vimium, Vimari, Vimlike — по их подсказкам, как мышью;
1216
1337
 
1217
1338
  Фокус у всех компонентов пакета выглядит одинаково, как у `FormInput`: линия
1218
1339
  1px `blue-300` по краю элемента и ореол 3px `blue-200` с прозрачностью 50%.
1219
- Вид задан одной утилитой `focus-ring` в `src/styles/index.css`, компоненты
1220
- выбирают только момент. Поля, крестик `NotificationMessage`, кнопки
1340
+ В режиме высокой контрастности (`forced-colors: active`) ореола нет, а линия
1341
+ отстоит от края элемента на 2px: на рамке того же системного цвета она бы
1342
+ слилась с ней. Вид задан одной утилитой `focus-ring` в `src/styles/index.css`,
1343
+ компоненты выбирают только момент. Поля, кроме `SelectSingleCards` и
1344
+ `SelectMultipleList`, крестик `NotificationMessage`, кнопки
1221
1345
  `ConfirmationModal` и `DropdownButtonWithAction` показывают фокус при любом
1222
- его появлении, в том числе после клика мышью; остальные кнопки и ссылки —
1346
+ его появлении, в том числе после клика мышью. Карточки `SelectSingleCards`,
1347
+ галочки `SelectMultipleList`, остальные кнопки и ссылки показывают фокус
1223
1348
  только с клавиатуры. Стрелки месяцев и подпись месяца в календаре поля даты
1224
1349
  берут тот же вид, когда фокус в них с клавиатуры.
1225
1350
 
@@ -1235,6 +1360,10 @@ Vimlike (Safari на iPhone, iPad и Mac) считает кнопкой любо
1235
1360
  внутри кнопки Vimlike считал бы кнопкой вместо неё. В поле по-прежнему можно
1236
1361
  перейти Tab и набрать дату.
1237
1362
 
1363
+ У карточки `SelectSingleCards` одна подсказка расширения на всей карточке,
1364
+ у галочки `SelectMultipleList` — одна на пункт. Safari на Mac без настройки
1365
+ Tab по всем объектам пропускает переключатели и галочки, как и кнопки пакета.
1366
+
1238
1367
  Подсказки Vimlike в открытых меню, списках `SelectSingleFilter`,
1239
1368
  `SelectSingleForm`, `SelectMultipleFilter` и `SelectMultipleForm` и календарях
1240
1369
  `SelectDateFilter`, `SelectDateForm`, `SelectDateIntervalFilter`
@@ -1351,7 +1480,7 @@ Inertia SSR), а серверная разметка гидратируется
1351
1480
 
1352
1481
  npm run playground
1353
1482
 
1354
- Поднимает демо-страницы со всеми двадцатью четырьмя компонентами в двух окружениях:
1483
+ Поднимает демо-страницы со всеми двадцатью шестью компонентами в двух окружениях:
1355
1484
  голом (без Tailwind и стилей приложения) и в окружении приложения (с
1356
1485
  Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
1357
1486
  основной способ посмотреть, как компоненты выглядят и ведут себя, а не