@boobooking/dashboard-ui-components 0.17.0 → 0.18.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 +74 -12
- package/dist/index.js +613 -474
- package/dist/style.css +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -90,9 +90,9 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
|
|
|
90
90
|
|
|
91
91
|
## Компоненты
|
|
92
92
|
|
|
93
|
-
Пакет экспортирует
|
|
93
|
+
Пакет экспортирует восемнадцать компонентов: `Dot`, `RussianMobileFilter`,
|
|
94
94
|
`Search`, `SelectDateInterval`, `SelectSingle`, `InfoPill`,
|
|
95
|
-
`ErrorMessages`, `ActionPill`, `ConfirmationModal`,
|
|
95
|
+
`ErrorMessages`, `FormInput`, `ActionPill`, `ConfirmationModal`,
|
|
96
96
|
`DropdownButtonWithAction`, `HamburgerMenu`, `DataTable`,
|
|
97
97
|
`NavigationMenuElement`, `PageTabs`, `PageCard`, `NotificationMessage`,
|
|
98
98
|
`TextPopover`, функцию `downloadFile` и плагин `dashboardUi`. В архив пакета
|
|
@@ -164,6 +164,65 @@ Enter, пробелом, расширением клавиатурной нав
|
|
|
164
164
|
изменённое родителем, поле показывает сразу и без событий: ответный
|
|
165
165
|
`update:modelValue` вернул бы родителю его же значение.
|
|
166
166
|
|
|
167
|
+
### FormInput
|
|
168
|
+
|
|
169
|
+
Поле формы с подписью над ним. Значение забирает форма: у поля нет
|
|
170
|
+
события `changed`.
|
|
171
|
+
|
|
172
|
+
<form-input v-model="name" label="Имя" :is-required="markNameRequired" />
|
|
173
|
+
<form-input v-model="email" label="Email" type="email" :is-required="markEmailRequired" />
|
|
174
|
+
<form-input v-model="password" label="Пароль" type="password" :is-required="markPasswordRequired" />
|
|
175
|
+
|
|
176
|
+
| Проп | Тип | По умолчанию | Описание |
|
|
177
|
+
| --- | --- | --- | --- |
|
|
178
|
+
| `modelValue` | `String` | `""` | Значение поля |
|
|
179
|
+
| `label` | `String` | обязателен | Подпись над полем |
|
|
180
|
+
| `type` | `String` | `"text"` | `"text"`, `"email"`, `"password"`, `"tel"`, `"url"` или `"search"` |
|
|
181
|
+
| `isRequired` | `Boolean` | `false` | Красная точка у подписи |
|
|
182
|
+
|
|
183
|
+
Событие `update:modelValue` уходит на каждый ввод со строкой из поля как
|
|
184
|
+
есть: пробелы не обрезаются, это решение формы. Исключение — `type="email"`
|
|
185
|
+
и `type="url"`: браузер сам убирает пробелы по краям значения, и Email из
|
|
186
|
+
одних пробелов приходит пустой строкой. Формы, которые проверяют
|
|
187
|
+
`length > 0`, оставляют у Email `type="text"`. Значение, изменённое
|
|
188
|
+
родителем, поле показывает сразу и без события. Набор через IME
|
|
189
|
+
(composition) отдаёт значение по его окончании.
|
|
190
|
+
|
|
191
|
+
Используйте `v-model` без модификаторов: модификаторы (`.trim`, `.number`,
|
|
192
|
+
`.lazy`) не входят в API `FormInput`; пробелы форма обрезает сама при
|
|
193
|
+
отправке.
|
|
194
|
+
|
|
195
|
+
Другой `type`, не из списка, отклоняется предупреждением Vue, а поле
|
|
196
|
+
рисуется с `type="text"`.
|
|
197
|
+
|
|
198
|
+
`class` и `style` ложатся на корень компонента, все остальные атрибуты
|
|
199
|
+
и слушатели (`autocomplete`, `placeholder`, `name`, `disabled`, `@blur`,
|
|
200
|
+
`@keydown.enter`) — на `<input>`. `id` поля создаётся сам, `for` подписи
|
|
201
|
+
указывает на него, поэтому две копии на странице не делят один `id`.
|
|
202
|
+
Атрибут `id` от формы заменяет созданный и в поле, и в `for`.
|
|
203
|
+
|
|
204
|
+
Красная точка значит «не заполнено»; когда её показывать, решает форма.
|
|
205
|
+
Основной способ: точки появляются после попытки отправить, ввод в поле
|
|
206
|
+
снимает свою, а стирание поля ставит точку снова (так делает watcher
|
|
207
|
+
из примера).
|
|
208
|
+
|
|
209
|
+
watch: {
|
|
210
|
+
name() { this.markNameRequired = this.name.length === 0 },
|
|
211
|
+
},
|
|
212
|
+
methods: {
|
|
213
|
+
create() {
|
|
214
|
+
this.markNameRequired = this.name.length === 0
|
|
215
|
+
// то же для остальных полей
|
|
216
|
+
},
|
|
217
|
+
},
|
|
218
|
+
|
|
219
|
+
Способ «сразу», точка видна, пока поле пусто:
|
|
220
|
+
|
|
221
|
+
<form-input v-model="number" label="Номер" :is-required="number.trim() === ''" />
|
|
222
|
+
|
|
223
|
+
`isRequired` только показывает точку: атрибут `required` и `aria-*` полю
|
|
224
|
+
он не ставит.
|
|
225
|
+
|
|
167
226
|
### SelectDateInterval
|
|
168
227
|
|
|
169
228
|
Два поля даты под одним заголовком — интервал дат «от» и «до». Дата
|
|
@@ -396,8 +455,8 @@ exportOrders() {
|
|
|
396
455
|
| `lang` | `String` | язык плагина | `"ru"` или `"en"` |
|
|
397
456
|
|
|
398
457
|
События: `actionConfirmed` — по кнопке действия, `actionCanceled` — по кнопке
|
|
399
|
-
|
|
400
|
-
ConfirmationModal нет v-model».
|
|
458
|
+
отмены и по Escape. Ни одна из кнопок модалку не закрывает — см. раздел
|
|
459
|
+
«Почему у ConfirmationModal нет v-model».
|
|
401
460
|
|
|
402
461
|
Панель модалки — белая, со скруглением `rounded-lg`, стоит по центру и
|
|
403
462
|
занимает `max-w-lg`. `class` и другие атрибуты на `<confirmation-modal>`
|
|
@@ -405,6 +464,13 @@ ConfirmationModal нет v-model».
|
|
|
405
464
|
содержимое, поэтому блоки текста и кнопок со своим фоном скругляют внешние
|
|
406
465
|
углы сами — верхний `rounded-t-lg`, нижний `rounded-b-lg`.
|
|
407
466
|
|
|
467
|
+
Открытая модалка держит фокус: в первом кадре после открытия он встаёт на
|
|
468
|
+
кнопку отмены, Tab и Shift+Tab ходят по её кнопкам по кругу, Escape —
|
|
469
|
+
`actionCanceled`, как кнопка отмены. После закрытия фокус возвращается туда,
|
|
470
|
+
где был до открытия, если страница не поставила его в другое место и тот
|
|
471
|
+
элемент ещё на странице. Кадр нужен модалкам, которые открывает пункт меню:
|
|
472
|
+
меню закрывается позже в том же клике и возвращает фокус на свою кнопку.
|
|
473
|
+
|
|
408
474
|
### DropdownButtonWithAction
|
|
409
475
|
|
|
410
476
|
Кнопка из списка действий `actions`. Первое действие — основная кнопка,
|
|
@@ -978,9 +1044,9 @@ Inertia SSR), а серверная разметка гидратируется
|
|
|
978
1044
|
Правило пакета — значение через `v-model` — относится к состоянию, которое
|
|
979
1045
|
компонент меняет сам: меню `DropdownButtonWithAction` закрывается по клику
|
|
980
1046
|
вне, `SelectSingle` меняет выбор. `ConfirmationModal` свою видимость не меняет
|
|
981
|
-
никогда. Обе кнопки только сообщают родителю решение пользователя,
|
|
982
|
-
модалку, оставить её открытой на время запроса или открыть
|
|
983
|
-
родитель.
|
|
1047
|
+
никогда. Обе кнопки и Escape только сообщают родителю решение пользователя,
|
|
1048
|
+
а закрыть модалку, оставить её открытой на время запроса или открыть
|
|
1049
|
+
следующую — решает родитель.
|
|
984
1050
|
|
|
985
1051
|
`v-model` обещал бы двустороннюю связь, которой нет, поэтому видимость
|
|
986
1052
|
передаётся пропом `isOpen`.
|
|
@@ -999,7 +1065,7 @@ Inertia SSR), а серверная разметка гидратируется
|
|
|
999
1065
|
|
|
1000
1066
|
npm run playground
|
|
1001
1067
|
|
|
1002
|
-
Поднимает демо-страницы со всеми
|
|
1068
|
+
Поднимает демо-страницы со всеми восемнадцатью компонентами в двух окружениях:
|
|
1003
1069
|
голом (без Tailwind и стилей приложения) и в окружении приложения (с
|
|
1004
1070
|
Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
|
|
1005
1071
|
основной способ посмотреть, как компоненты выглядят и ведут себя, а не
|
|
@@ -1300,7 +1366,3 @@ exportOrders() {
|
|
|
1300
1366
|
Например, чекбоксу: `border border-gray-300 bg-white text-indigo-600
|
|
1301
1367
|
checked:bg-current checked:border-transparent focus:ring-2
|
|
1302
1368
|
focus:ring-offset-2`.
|
|
1303
|
-
|
|
1304
|
-
`ConfirmationModal` не переносит фокус внутрь при открытии, не удерживает его
|
|
1305
|
-
внутри, не возвращает на прежнее место после закрытия и не закрывается по
|
|
1306
|
-
Escape.
|