@boobooking/dashboard-ui-components 0.17.1 → 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 CHANGED
@@ -90,9 +90,9 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
90
90
 
91
91
  ## Компоненты
92
92
 
93
- Пакет экспортирует семнадцать компонентов: `Dot`, `RussianMobileFilter`,
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
  Два поля даты под одним заголовком — интервал дат «от» и «до». Дата
@@ -1006,7 +1065,7 @@ Inertia SSR), а серверная разметка гидратируется
1006
1065
 
1007
1066
  npm run playground
1008
1067
 
1009
- Поднимает демо-страницы со всеми семнадцатью компонентами в двух окружениях:
1068
+ Поднимает демо-страницы со всеми восемнадцатью компонентами в двух окружениях:
1010
1069
  голом (без Tailwind и стилей приложения) и в окружении приложения (с
1011
1070
  Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
1012
1071
  основной способ посмотреть, как компоненты выглядят и ведут себя, а не