@boobooking/dashboard-ui-components 0.1.0 → 1.0.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.
Files changed (3) hide show
  1. package/README.md +6 -143
  2. package/dist/index.js +21 -28
  3. package/package.json +2 -11
package/README.md CHANGED
@@ -14,6 +14,9 @@ import '@boobooking/dashboard-ui-components/style.css'
14
14
 
15
15
  Стили пакета подключаются **до** стилей приложения.
16
16
 
17
+ Пример использует только экспорты, доступные в этой версии, — полным списком он
18
+ не является и обновляется вместе с составом экспортов.
19
+
17
20
  ## Требования
18
21
 
19
22
  Vue не ниже 3.2, ESM, сборщик, умеющий импорт CSS из пакета.
@@ -21,127 +24,7 @@ Vue не ниже 3.2, ESM, сборщик, умеющий импорт CSS из
21
24
  Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в CSS приложения
22
25
  пакету не нужны.
23
26
 
24
- ## Компоненты
25
-
26
- Пакет экспортирует семь компонентов: `Popup`, `Dot`, `PickDay`,
27
- `RussianMobileFilter`, `Search`, `SelectDateInterval`, `SelectSingle`. В
28
- архив пакета (`files: ["dist"]`) исходники не попадают, поэтому контракт
29
- каждого компонента — здесь и в playground, а не в исходном коде.
30
-
31
- ### Popup
32
-
33
- Всплывающее меню с оверлеем, закрывающим по клику вне, и переходом на
34
- открытие/закрытие. `PickDay` и `SelectSingle` держат его внутри как обёртку
35
- над своим содержимым.
36
-
37
- <popup v-model:is-open="isOpen" align="right">
38
- …содержимое меню…
39
- </popup>
40
-
41
- | Проп | Тип | По умолчанию | Описание |
42
- | --- | --- | --- | --- |
43
- | `isOpen` | `Boolean` | `false` | Открыто ли меню |
44
- | `align` | `String` | `"left"` | `"left"` или `"right"` — с какой стороны прижать меню |
45
-
46
- Событие: `update:isOpen` — при каждом открытии и закрытии, включая клик по
47
- оверлею.
48
-
49
- ### Dot
50
-
51
- Индикатор-точка: красная или зелёная, с пульсацией или без.
52
-
53
- <dot color="green" :add-pulse="isLive" />
54
-
55
- | Проп | Тип | По умолчанию | Описание |
56
- | --- | --- | --- | --- |
57
- | `color` | `String` | обязателен | `"red"` или `"green"` |
58
- | `addPulse` | `Boolean` | `false` | Добавляет анимацию пульсации |
59
-
60
- Событий нет.
61
-
62
- ### PickDay
63
-
64
- Поле выбора одной даты на Pikaday, с ластиком очистки.
65
-
66
- <pick-day v-model="date" placeholder-text="от" />
67
-
68
- | Проп | Тип | По умолчанию | Описание |
69
- | --- | --- | --- | --- |
70
- | `modelValue` | `String` | обязателен | Текущая дата |
71
- | `withEraser` | `Boolean` | `true` | Показывать ли ластик очистки |
72
- | `placeholderText` | `String` | `""` | Текст подсказки в пустом поле |
73
-
74
- События: `update:modelValue` — при выборе даты в календаре и при очистке
75
- (пустой строкой); `changed` — в тех же двух случаях, для использования наравне
76
- с остальными фильтрами.
77
-
78
- ### RussianMobileFilter
79
-
80
- Поле ввода российского мобильного номера с маской `+7 (000) 000 00 00` и
81
- дебаунсом перед отправкой.
82
-
83
- <russian-mobile-filter v-model="phone" header="Телефон" @changed="reload" />
84
-
85
- | Проп | Тип | По умолчанию | Описание |
86
- | --- | --- | --- | --- |
87
- | `modelValue` | `String` | `""` | Номер: цифры вместе с кодом страны, без «+» (например, `79031234567`), либо пустая строка |
88
- | `header` | `String` | обязателен | Подпись поля |
89
- | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
90
- | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
91
-
92
- «+» — неудачный символ для URL, поэтому в параметре только цифры; плюс к
93
- номеру дописывает бэкенд.
94
-
95
- События: `update:modelValue` — на каждое принятое маской изменение;
96
- `changed` — через 400 мс паузы после ввода, начиная с третьей цифры (раньше
97
- событие не летит вовсе), а также сразу — без дебаунса — при опустевшем поле,
98
- по клику на ластик, по Enter и по уходу фокуса. Дублей не бывает: компонент
99
- помнит последнее отправленное значение и не шлёт его повторно.
100
-
101
- ### Search
102
-
103
- Текстовое поле поиска с ластиком очистки.
104
-
105
- <search v-model="query" header="Поиск" @changed="reload" />
106
-
107
- | Проп | Тип | По умолчанию | Описание |
108
- | --- | --- | --- | --- |
109
- | `modelValue` | `String` | `""` | Текущий текст поиска |
110
- | `header` | `String` | обязателен | Подпись поля |
111
- | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
112
- | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
113
-
114
- События: `update:modelValue` и `changed` — оба на каждый ввод.
115
-
116
- ### SelectDateInterval
117
-
118
- Пара `PickDay` под одним заголовком — интервал дат «от» и «до».
119
-
120
- <select-date-interval
121
- header="Период"
122
- :date-from="dateFrom"
123
- :date-to="dateTo"
124
- @update:date-from="dateFrom = $event"
125
- @update:date-to="dateTo = $event"
126
- @changed="reload"
127
- />
128
-
129
- | Проп | Тип | По умолчанию | Описание |
130
- | --- | --- | --- | --- |
131
- | `dateFrom` | `String` | обязателен | Начало интервала |
132
- | `dateTo` | `String` | обязателен | Конец интервала |
133
- | `header` | `String` | обязателен | Подпись поля |
134
- | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
135
- | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
136
-
137
- `dateFrom` и `dateTo` обязательны без умолчания — потребитель должен
138
- передавать обе даты явно.
139
-
140
- События: `update:dateFrom`, `update:dateTo` — на каждый выбор в
141
- соответствующем `PickDay`; `changed` — когда новое значение отличается от
142
- переданного пропса (отдельно для каждой из двух дат).
143
-
144
- ### SelectSingle
27
+ ## SelectSingle
145
28
 
146
29
  <select-single
147
30
  header="Вендор"
@@ -151,28 +34,8 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
151
34
  />
152
35
 
153
36
  `items` — массив объектов `{ id, name }`. `v-model` держит `id` выбранного или
154
- `null`, если не выбрано.
155
-
156
- | Проп | Тип | По умолчанию | Описание |
157
- | --- | --- | --- | --- |
158
- | `items` | `Array` | обязателен | Массив `{ id, name }` |
159
- | `modelValue` | `String \| Number` | `null` | `id` выбранного элемента или `null` |
160
- | `header` | `String` | обязателен | Подпись поля |
161
- | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
162
- | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
163
-
164
- События: `update:modelValue` и `changed` — при выборе элемента (повторный
165
- клик по уже выбранному снимает выбор) и при очистке через ластик.
166
-
167
- ## Playground
168
-
169
- npm run playground
170
-
171
- Поднимает демо-страницы со всеми семью компонентами в двух окружениях:
172
- голом (без Tailwind и стилей приложения) и в окружении приложения (с
173
- Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
174
- основной способ посмотреть, как компоненты выглядят и ведут себя, а не
175
- угадывать по исходникам или по этому README.
37
+ `null`, если не выбрано. Событие `changed` приходит на каждое изменение выбора,
38
+ включая очистку.
176
39
 
177
40
  ## Что пакет берёт у приложения
178
41
 
package/dist/index.js CHANGED
@@ -171,9 +171,9 @@ var I = {
171
171
  Popup: D,
172
172
  Eraser: N
173
173
  },
174
- emits: ["update:modelValue", "changed"],
174
+ emits: ["update:day"],
175
175
  props: {
176
- modelValue: {
176
+ day: {
177
177
  type: String,
178
178
  required: !0
179
179
  },
@@ -235,7 +235,7 @@ var I = {
235
235
  ]
236
236
  },
237
237
  onSelect: (e) => {
238
- this.popupIsOpen = !1, this.$emit("update:modelValue", P(e)), this.$emit("changed");
238
+ this.popupIsOpen = !1, this.$emit("update:day", P(e));
239
239
  }
240
240
  });
241
241
  },
@@ -245,10 +245,10 @@ var I = {
245
245
  data() {
246
246
  return {
247
247
  popupIsOpen: !1,
248
- dayValue: this.modelValue
248
+ dayValue: this.day
249
249
  };
250
250
  },
251
- watch: { modelValue(e) {
251
+ watch: { day(e) {
252
252
  this.dayValue = e, this.syncPicker(e);
253
253
  } },
254
254
  methods: {
@@ -261,12 +261,12 @@ var I = {
261
261
  this.picker.setDate(t, !0);
262
262
  },
263
263
  clearPicker() {
264
- this.$emit("update:modelValue", ""), this.dayValue = "", this.picker.clear(), this.$emit("changed");
264
+ this.$emit("update:day", ""), this.dayValue = "", this.picker.clear();
265
265
  }
266
266
  },
267
267
  computed: {
268
268
  hasValue() {
269
- return this.modelValue.length > 0;
269
+ return this.day.length > 0;
270
270
  },
271
271
  needsEraser() {
272
272
  return !this.withEraser || this.popupIsOpen ? !1 : this.hasValue;
@@ -368,11 +368,7 @@ var ne = 400, re = 3, ie = {
368
368
  },
369
369
  header: {
370
370
  type: String,
371
- required: !0
372
- },
373
- isRequired: {
374
- type: Boolean,
375
- default: !1
371
+ default: "Телефон"
376
372
  },
377
373
  isLoading: {
378
374
  type: Boolean,
@@ -449,13 +445,8 @@ function le(e, t, n, r, s, c) {
449
445
  let u = f("element-header"), d = f("eraser");
450
446
  return l(), i("div", ae, [a("div", oe, [o(u, {
451
447
  text: n.header,
452
- "is-required": n.isRequired,
453
448
  "is-loading": n.isLoading
454
- }, null, 8, [
455
- "text",
456
- "is-required",
457
- "is-loading"
458
- ]), a("div", se, [a("label", ce, [a("input", {
449
+ }, null, 8, ["text", "is-loading"]), a("div", se, [a("label", ce, [a("input", {
459
450
  ref: "input",
460
451
  type: "tel",
461
452
  inputmode: "tel",
@@ -484,7 +475,7 @@ var ue = /*#__PURE__*/ x(ie, [["render", le]]), de = {
484
475
  },
485
476
  header: {
486
477
  type: String,
487
- required: !0
478
+ default: ""
488
479
  },
489
480
  isRequired: {
490
481
  type: Boolean,
@@ -543,15 +534,17 @@ var _e = /*#__PURE__*/ x(de, [["render", ge]]), ve = {
543
534
  emits: [
544
535
  "update:dateFrom",
545
536
  "update:dateTo",
546
- "changed"
537
+ "updated"
547
538
  ],
548
539
  props: {
549
540
  dateFrom: {
550
541
  type: String,
542
+ default: "",
551
543
  required: !0
552
544
  },
553
545
  dateTo: {
554
546
  type: String,
547
+ default: "",
555
548
  required: !0
556
549
  },
557
550
  header: {
@@ -581,10 +574,10 @@ var _e = /*#__PURE__*/ x(de, [["render", ge]]), ve = {
581
574
  this.userDateTo = e;
582
575
  },
583
576
  userDateFrom(e) {
584
- this.$emit("update:dateFrom", e), this.dateFrom !== e && this.$emit("changed");
577
+ this.$emit("update:dateFrom", e), this.dateFrom !== e && this.$emit("updated");
585
578
  },
586
579
  userDateTo(e) {
587
- this.$emit("update:dateTo", e), this.dateTo !== e && this.$emit("changed");
580
+ this.$emit("update:dateTo", e), this.dateTo !== e && this.$emit("updated");
588
581
  }
589
582
  }
590
583
  }, ye = { class: "bb-dashboard-ui flex" }, be = { class: "flex border border-white" }, xe = { class: "flex flex-col min-w-72 w-72 bg-white h-full" }, Se = { class: "flex h-full divide-x divide-gray-200" };
@@ -599,16 +592,16 @@ function Ce(e, t, n, r, s, c) {
599
592
  "is-required",
600
593
  "is-loading"
601
594
  ]), a("div", Se, [o(d, {
602
- modelValue: s.userDateFrom,
603
- "onUpdate:modelValue": t[0] ||= (e) => s.userDateFrom = e,
595
+ day: s.userDateFrom,
596
+ "onUpdate:day": t[0] ||= (e) => s.userDateFrom = e,
604
597
  class: "flex-1 min-w-36 pl-3",
605
598
  "placeholder-text": "от"
606
- }, null, 8, ["modelValue"]), o(d, {
607
- modelValue: s.userDateTo,
608
- "onUpdate:modelValue": t[1] ||= (e) => s.userDateTo = e,
599
+ }, null, 8, ["day"]), o(d, {
600
+ day: s.userDateTo,
601
+ "onUpdate:day": t[1] ||= (e) => s.userDateTo = e,
609
602
  class: "flex-1 min-w-36 pl-3",
610
603
  "placeholder-text": "до"
611
- }, null, 8, ["modelValue"])])])])]);
604
+ }, null, 8, ["day"])])])])]);
612
605
  }
613
606
  var we = /*#__PURE__*/ x(ve, [["render", Ce]]), Te = {
614
607
  components: {
package/package.json CHANGED
@@ -1,15 +1,7 @@
1
1
  {
2
2
  "name": "@boobooking/dashboard-ui-components",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Компоненты фильтров дашборда на Vue 3",
5
- "keywords": [
6
- "vue",
7
- "vue3",
8
- "components",
9
- "dashboard",
10
- "filters",
11
- "tailwind"
12
- ],
13
5
  "license": "MIT",
14
6
  "repository": {
15
7
  "type": "git",
@@ -21,8 +13,7 @@
21
13
  ],
22
14
  "exports": {
23
15
  ".": "./dist/index.js",
24
- "./style.css": "./dist/style.css",
25
- "./package.json": "./package.json"
16
+ "./style.css": "./dist/style.css"
26
17
  },
27
18
  "scripts": {
28
19
  "build": "vite build",