@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 +135 -6
- package/dist/index.js +677 -455
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -92,11 +92,12 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
|
|
|
92
92
|
|
|
93
93
|
## Компоненты
|
|
94
94
|
|
|
95
|
-
Пакет экспортирует двадцать
|
|
95
|
+
Пакет экспортирует двадцать шесть компонентов: `Dot`, `RussianMobileFilter`,
|
|
96
96
|
`Search`, `SelectDateFilter`, `SelectDateForm`, `SelectDateIntervalFilter`,
|
|
97
97
|
`SelectDateIntervalForm`,
|
|
98
98
|
`SelectSingleFilter`, `SelectSingleForm`, `SelectMultipleFilter`,
|
|
99
|
-
`SelectMultipleForm`, `
|
|
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
|
-
|
|
1220
|
-
|
|
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
|
основной способ посмотреть, как компоненты выглядят и ведут себя, а не
|