@boobooking/dashboard-ui-components 0.16.3 → 0.17.1
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 +75 -30
- package/dist/index.js +259 -161
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,12 +90,12 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
|
|
|
90
90
|
|
|
91
91
|
## Компоненты
|
|
92
92
|
|
|
93
|
-
Пакет экспортирует
|
|
93
|
+
Пакет экспортирует семнадцать компонентов: `Dot`, `RussianMobileFilter`,
|
|
94
94
|
`Search`, `SelectDateInterval`, `SelectSingle`, `InfoPill`,
|
|
95
95
|
`ErrorMessages`, `ActionPill`, `ConfirmationModal`,
|
|
96
96
|
`DropdownButtonWithAction`, `HamburgerMenu`, `DataTable`,
|
|
97
|
-
`NavigationMenuElement`, `
|
|
98
|
-
функцию `downloadFile` и плагин `dashboardUi`. В архив пакета
|
|
97
|
+
`NavigationMenuElement`, `PageTabs`, `PageCard`, `NotificationMessage`,
|
|
98
|
+
`TextPopover`, функцию `downloadFile` и плагин `dashboardUi`. В архив пакета
|
|
99
99
|
(`files: ["dist"]`) исходники не попадают, поэтому контракт каждого
|
|
100
100
|
компонента — здесь и в playground, а не в исходном коде.
|
|
101
101
|
|
|
@@ -396,15 +396,21 @@ exportOrders() {
|
|
|
396
396
|
| `lang` | `String` | язык плагина | `"ru"` или `"en"` |
|
|
397
397
|
|
|
398
398
|
События: `actionConfirmed` — по кнопке действия, `actionCanceled` — по кнопке
|
|
399
|
-
|
|
400
|
-
ConfirmationModal нет v-model».
|
|
401
|
-
|
|
402
|
-
Панель модалки — белая, со скруглением `rounded-lg
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
399
|
+
отмены и по Escape. Ни одна из кнопок модалку не закрывает — см. раздел
|
|
400
|
+
«Почему у ConfirmationModal нет v-model».
|
|
401
|
+
|
|
402
|
+
Панель модалки — белая, со скруглением `rounded-lg`, стоит по центру и
|
|
403
|
+
занимает `max-w-lg`. `class` и другие атрибуты на `<confirmation-modal>`
|
|
404
|
+
попадают на полноэкранный корень, а не на панель. Панель не обрезает
|
|
405
|
+
содержимое, поэтому блоки текста и кнопок со своим фоном скругляют внешние
|
|
406
|
+
углы сами — верхний `rounded-t-lg`, нижний `rounded-b-lg`.
|
|
407
|
+
|
|
408
|
+
Открытая модалка держит фокус: в первом кадре после открытия он встаёт на
|
|
409
|
+
кнопку отмены, Tab и Shift+Tab ходят по её кнопкам по кругу, Escape —
|
|
410
|
+
`actionCanceled`, как кнопка отмены. После закрытия фокус возвращается туда,
|
|
411
|
+
где был до открытия, если страница не поставила его в другое место и тот
|
|
412
|
+
элемент ещё на странице. Кадр нужен модалкам, которые открывает пункт меню:
|
|
413
|
+
меню закрывается позже в том же клике и возвращает фокус на свою кнопку.
|
|
408
414
|
|
|
409
415
|
### DropdownButtonWithAction
|
|
410
416
|
|
|
@@ -621,12 +627,39 @@ Escape, клик по пункту, прокрутка и изменение р
|
|
|
621
627
|
|
|
622
628
|
Ссылка — через `navigate` плагина. Событий нет.
|
|
623
629
|
|
|
630
|
+
### PageTabs
|
|
631
|
+
|
|
632
|
+
Табы второго уровня: ссылки на страницы одного раздела под шапкой —
|
|
633
|
+
«Активные / Архив», «Ордера / Сертификаты / Sms».
|
|
634
|
+
|
|
635
|
+
<page-tabs :tabs="tabs" :active-key="activeTab" />
|
|
636
|
+
|
|
637
|
+
tabs() {
|
|
638
|
+
return [
|
|
639
|
+
{ key: 'active', name: 'Активные', url: route('events') },
|
|
640
|
+
{ key: 'archive', name: 'Архив', url: route('archive') },
|
|
641
|
+
];
|
|
642
|
+
},
|
|
643
|
+
|
|
644
|
+
| Проп | Тип | По умолчанию | Описание |
|
|
645
|
+
| --- | --- | --- | --- |
|
|
646
|
+
| `tabs` | `Array` | обязателен | `[{ key, name, url }]`: ключ, подпись и адрес таба — строки |
|
|
647
|
+
| `activeKey` | `String` | `null` | Ключ открытого таба |
|
|
648
|
+
| `lang` | `String` | язык плагина | `"ru"` или `"en"` — имя навигации для скринридера |
|
|
649
|
+
|
|
650
|
+
Ключ сравнивается с `activeKey` строго, поэтому ключи — строки. Открытый
|
|
651
|
+
таб выделен фоном и `aria-current="page"`; если ключа нет в списке, не
|
|
652
|
+
выделен ни один. Вид одинаков на любой ширине: ссылки в строку, без
|
|
653
|
+
переноса. Отступы вокруг и кнопки рядом — разметка страницы.
|
|
654
|
+
|
|
655
|
+
Ссылки — через `navigate` плагина. Событий нет.
|
|
656
|
+
|
|
624
657
|
### PageCard
|
|
625
658
|
|
|
626
659
|
Карточка отдельной страницы — формы или просмотра записи — по центру
|
|
627
660
|
с крестиком, который ведёт туда, откуда карточку открыли.
|
|
628
661
|
|
|
629
|
-
<page-card class="px-
|
|
662
|
+
<page-card class="px-6 pt-6" :fallback-url="route('users')">
|
|
630
663
|
<h3 class="pr-(--bb-closer-space) text-lg font-medium">Создание администратора</h3>
|
|
631
664
|
…поля формы…
|
|
632
665
|
</page-card>
|
|
@@ -634,10 +667,10 @@ Escape, клик по пункту, прокрутка и изменение р
|
|
|
634
667
|
Страница просмотра, у секций которой свои отступы:
|
|
635
668
|
|
|
636
669
|
<page-card :fallback-url="route('payments')">
|
|
637
|
-
<div class="px-
|
|
670
|
+
<div class="px-6 py-5 border-b border-gray-200">
|
|
638
671
|
<h3 class="pr-(--bb-closer-space) text-lg font-medium">{{ name }}</h3>
|
|
639
672
|
</div>
|
|
640
|
-
<div class="overflow-hidden
|
|
673
|
+
<div class="overflow-hidden rounded-b-lg">…строки…</div>
|
|
641
674
|
</page-card>
|
|
642
675
|
|
|
643
676
|
**Куда ведёт крестик.** Плагин `dashboardUi` с `currentUrl` (см.
|
|
@@ -667,7 +700,7 @@ Inertia с общим ключом окна:
|
|
|
667
700
|
width: '7xl',
|
|
668
701
|
windowKey: `group:${props.group.data.uuid}`,
|
|
669
702
|
fallbackUrl: route('groups'),
|
|
670
|
-
class: 'px-
|
|
703
|
+
class: 'px-6 py-6',
|
|
671
704
|
}],
|
|
672
705
|
}
|
|
673
706
|
|
|
@@ -699,7 +732,7 @@ Inertia с общим ключом окна:
|
|
|
699
732
|
которого крестик стоит снаружи, на `1rem` правее её края; ниже порога —
|
|
700
733
|
в правом верхнем углу:
|
|
701
734
|
|
|
702
|
-
| `width` | Ширина
|
|
735
|
+
| `width` | Ширина | Крестик снаружи |
|
|
703
736
|
| --- | --- | --- |
|
|
704
737
|
| `xl` (по умолчанию) | `max-w-xl` (36rem) | от `md` |
|
|
705
738
|
| `4xl` | `max-w-4xl` (56rem) | от `lg` |
|
|
@@ -716,7 +749,7 @@ Inertia с общим ключом окна:
|
|
|
716
749
|
`pr-[var(--bb-closer-space)]`. Вне `PageCard` отступ равен нулю.
|
|
717
750
|
|
|
718
751
|
**Атрибуты.** Карточка — `relative my-6 mx-auto bg-white shadow-xl
|
|
719
|
-
|
|
752
|
+
rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: форма
|
|
720
753
|
передаёт их классом на корень, страница просмотра — не передаёт. На корень
|
|
721
754
|
попадают `class`, `style`, `data-*` и `aria-*` приложения; классы
|
|
722
755
|
приложения сильнее классов пакета. Остальные атрибуты, в том числе `id`,
|
|
@@ -730,7 +763,7 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
|
|
|
730
763
|
Карточка не обрезает содержимое, как у `ConfirmationModal`: выпадающие
|
|
731
764
|
списки и календари могут выходить за её край. Блок со своим фоном у края
|
|
732
765
|
карточки скругляет свои углы сам — например, нижний блок строк:
|
|
733
|
-
`overflow-hidden
|
|
766
|
+
`overflow-hidden rounded-b-lg`.
|
|
734
767
|
|
|
735
768
|
Крестик доступен с клавиатуры: Tab, Enter, пробел; в порядке табуляции
|
|
736
769
|
крестик идёт после содержимого карточки; при фокусе с клавиатуры вокруг
|
|
@@ -758,7 +791,7 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
|
|
|
758
791
|
### NotificationMessage
|
|
759
792
|
|
|
760
793
|
Всплывающее уведомление: заголовок, текст, иконка по типу и крестик закрытия.
|
|
761
|
-
|
|
794
|
+
Стоит в правом верхнем углу.
|
|
762
795
|
|
|
763
796
|
<notification-message
|
|
764
797
|
v-model="message"
|
|
@@ -835,6 +868,7 @@ sm:rounded-lg`, `box-sizing: border-box`. Отступов у неё нет: ф
|
|
|
835
868
|
| `SelectDateInterval` — подсказки полей | от / до | from / to |
|
|
836
869
|
| Ластик `Search`, `RussianMobileFilter`, `SelectSingle` (язык плагина) и `SelectDateInterval` — подпись для скринридера | Очистить | Clear |
|
|
837
870
|
| `DataTable` — пагинация | Предыдущая / Следующая / Показаны результаты X - Y из Z | Previous / Next / Showing X - Y of Z results |
|
|
871
|
+
| `PageTabs` — имя навигации для скринридера | Закладки | Tabs |
|
|
838
872
|
| `PageCard` — доступное имя крестика | Назад | Back |
|
|
839
873
|
| `NotificationMessage` — подпись крестика для скринридера | Закрыть | Close |
|
|
840
874
|
| `TextPopover` — подпись кнопки и имя области | Показать текст / Полный текст | Show text / Full text |
|
|
@@ -919,8 +953,8 @@ Inertia SSR), а серверная разметка гидратируется
|
|
|
919
953
|
- Ссылка компонента — настоящий `<a href>`; обычный клик — через
|
|
920
954
|
`followLink($event, href)` миксина `withNavigation`, который отдаёт его
|
|
921
955
|
`navigate` плагина. Ни Inertia, ни роутер пакет не импортирует. Через `navigate` ходят
|
|
922
|
-
`DataTable` (его пагинация), `NavigationMenuElement`,
|
|
923
|
-
кнопка-переход и пункты-переходы `DropdownButtonWithAction` и
|
|
956
|
+
`DataTable` (его пагинация), `NavigationMenuElement`, `PageTabs`,
|
|
957
|
+
основная кнопка-переход и пункты-переходы `DropdownButtonWithAction` и
|
|
924
958
|
пункты-переходы `HamburgerMenu`. Крестик `PageCard` — кнопка, а не ссылка:
|
|
925
959
|
адрес возврата он тоже отдаёт `navigate`.
|
|
926
960
|
- Компонент обращается к `window`, `document` и другим API браузера только
|
|
@@ -929,6 +963,11 @@ Inertia SSR), а серверная разметка гидратируется
|
|
|
929
963
|
загружается и рендерится на сервере (см. «SSR»). Правило проверяют
|
|
930
964
|
`tests/ssr.test.js` и `tests/hydration.test.js`: каждый экспортируемый
|
|
931
965
|
компонент обязан иметь фикстуру в `tests/ssrFixtures.js`.
|
|
966
|
+
- Мобильных вариантов у компонентов нет: дашборды работают на десктопе,
|
|
967
|
+
и компонент на любой ширине выглядит так, как на десктопе. Порог ширины
|
|
968
|
+
(`bb:sm:`, `bb:md:`, …) ставится, только если без него компонент
|
|
969
|
+
не помещается в узкое окно десктопа, — как у крестика `PageCard`,
|
|
970
|
+
который от порога выходит за край карточки.
|
|
932
971
|
|
|
933
972
|
## Почему у Dot нет события changed
|
|
934
973
|
|
|
@@ -946,18 +985,28 @@ Inertia SSR), а серверная разметка гидратируется
|
|
|
946
985
|
Правило пакета — значение через `v-model` — относится к состоянию, которое
|
|
947
986
|
компонент меняет сам: меню `DropdownButtonWithAction` закрывается по клику
|
|
948
987
|
вне, `SelectSingle` меняет выбор. `ConfirmationModal` свою видимость не меняет
|
|
949
|
-
никогда. Обе кнопки только сообщают родителю решение пользователя,
|
|
950
|
-
модалку, оставить её открытой на время запроса или открыть
|
|
951
|
-
родитель.
|
|
988
|
+
никогда. Обе кнопки и Escape только сообщают родителю решение пользователя,
|
|
989
|
+
а закрыть модалку, оставить её открытой на время запроса или открыть
|
|
990
|
+
следующую — решает родитель.
|
|
952
991
|
|
|
953
992
|
`v-model` обещал бы двустороннюю связь, которой нет, поэтому видимость
|
|
954
993
|
передаётся пропом `isOpen`.
|
|
955
994
|
|
|
995
|
+
## Почему у PageTabs нет v-model
|
|
996
|
+
|
|
997
|
+
Открытый таб `PageTabs` сам не меняет: клик по ссылке ведёт на другую
|
|
998
|
+
страницу, и открытый таб приносит она — пропом `activeKey`. Пока новая
|
|
999
|
+
страница не пришла, выделен прежний таб, как у пунктов шапки
|
|
1000
|
+
`NavigationMenuElement`.
|
|
1001
|
+
|
|
1002
|
+
`v-model` обещал бы, что компонент меняет значение сам, поэтому открытый
|
|
1003
|
+
таб передаётся пропом `activeKey`.
|
|
1004
|
+
|
|
956
1005
|
## Playground
|
|
957
1006
|
|
|
958
1007
|
npm run playground
|
|
959
1008
|
|
|
960
|
-
Поднимает демо-страницы со всеми
|
|
1009
|
+
Поднимает демо-страницы со всеми семнадцатью компонентами в двух окружениях:
|
|
961
1010
|
голом (без Tailwind и стилей приложения) и в окружении приложения (с
|
|
962
1011
|
Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
|
|
963
1012
|
основной способ посмотреть, как компоненты выглядят и ведут себя, а не
|
|
@@ -1258,7 +1307,3 @@ exportOrders() {
|
|
|
1258
1307
|
Например, чекбоксу: `border border-gray-300 bg-white text-indigo-600
|
|
1259
1308
|
checked:bg-current checked:border-transparent focus:ring-2
|
|
1260
1309
|
focus:ring-offset-2`.
|
|
1261
|
-
|
|
1262
|
-
`ConfirmationModal` не переносит фокус внутрь при открытии, не удерживает его
|
|
1263
|
-
внутри, не возвращает на прежнее место после закрытия и не закрывается по
|
|
1264
|
-
Escape.
|