@boobooking/dashboard-ui-components 0.1.0 → 0.2.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 +55 -14
  2. package/dist/index.js +20 -19
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -31,33 +31,38 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
31
31
  ### Popup
32
32
 
33
33
  Всплывающее меню с оверлеем, закрывающим по клику вне, и переходом на
34
- открытие/закрытие. `PickDay` и `SelectSingle` держат его внутри как обёртку
35
- над своим содержимым.
34
+ открытие/закрытие. Другие компоненты пакета используют его как обёртку над
35
+ своим содержимым — некоторые напрямую, некоторые через внутренние
36
+ компоненты.
36
37
 
37
- <popup v-model:is-open="isOpen" align="right">
38
+ <popup v-model="isOpen" align="right">
38
39
  …содержимое меню…
39
40
  </popup>
40
41
 
41
42
  | Проп | Тип | По умолчанию | Описание |
42
43
  | --- | --- | --- | --- |
43
- | `isOpen` | `Boolean` | `false` | Открыто ли меню |
44
+ | `modelValue` | `Boolean` | `false` | Открыто ли меню |
44
45
  | `align` | `String` | `"left"` | `"left"` или `"right"` — с какой стороны прижать меню |
45
46
 
46
- Событие: `update:isOpen` — при каждом открытии и закрытии, включая клик по
47
+ Событие: `update:modelValue` — при каждом открытии и закрытии, включая клик по
47
48
  оверлею.
48
49
 
50
+ У `Popup` нет события `changed`, и это не пропуск — см. раздел
51
+ «Почему у Popup и Dot нет события changed».
52
+
49
53
  ### Dot
50
54
 
51
55
  Индикатор-точка: красная или зелёная, с пульсацией или без.
52
56
 
53
- <dot color="green" :add-pulse="isLive" />
57
+ <dot color="green" :with-pulse="isLive" />
54
58
 
55
59
  | Проп | Тип | По умолчанию | Описание |
56
60
  | --- | --- | --- | --- |
57
61
  | `color` | `String` | обязателен | `"red"` или `"green"` |
58
- | `addPulse` | `Boolean` | `false` | Добавляет анимацию пульсации |
62
+ | `withPulse` | `Boolean` | `false` | Добавляет анимацию пульсации |
59
63
 
60
- Событий нет.
64
+ Событий нет. Значения у `Dot` тоже нет — см. раздел
65
+ «Почему у Popup и Dot нет события changed».
61
66
 
62
67
  ### PickDay
63
68
 
@@ -67,7 +72,7 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
67
72
 
68
73
  | Проп | Тип | По умолчанию | Описание |
69
74
  | --- | --- | --- | --- |
70
- | `modelValue` | `String` | обязателен | Текущая дата |
75
+ | `modelValue` | `String` | `""` | Текущая дата |
71
76
  | `withEraser` | `Boolean` | `true` | Показывать ли ластик очистки |
72
77
  | `placeholderText` | `String` | `""` | Текст подсказки в пустом поле |
73
78
 
@@ -128,15 +133,12 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
128
133
 
129
134
  | Проп | Тип | По умолчанию | Описание |
130
135
  | --- | --- | --- | --- |
131
- | `dateFrom` | `String` | обязателен | Начало интервала |
132
- | `dateTo` | `String` | обязателен | Конец интервала |
136
+ | `dateFrom` | `String` | `""` | Начало интервала |
137
+ | `dateTo` | `String` | `""` | Конец интервала |
133
138
  | `header` | `String` | обязателен | Подпись поля |
134
139
  | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
135
140
  | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
136
141
 
137
- `dateFrom` и `dateTo` обязательны без умолчания — потребитель должен
138
- передавать обе даты явно.
139
-
140
142
  События: `update:dateFrom`, `update:dateTo` — на каждый выбор в
141
143
  соответствующем `PickDay`; `changed` — когда новое значение отличается от
142
144
  переданного пропса (отдельно для каждой из двух дат).
@@ -164,6 +166,45 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
164
166
  События: `update:modelValue` и `changed` — при выборе элемента (повторный
165
167
  клик по уже выбранному снимает выбор) и при очистке через ластик.
166
168
 
169
+ ## Правила API пакета
170
+
171
+ Компонент, добавляемый в пакет, следует тем же правилам, что и уже
172
+ имеющиеся:
173
+
174
+ - Значение компонента передаётся через `v-model` (проп `modelValue` и
175
+ событие `update:modelValue`) и не обязательно: компонент обязан
176
+ отрисовываться без переданного значения. `required: true` оставляют
177
+ только там, без чего компонент бессмыслен, — например, у `items` в
178
+ `SelectSingle` или у `header` во всех фильтрах.
179
+ - Именованные модели (`v-model:date-from`, `v-model:date-to`, как у
180
+ `SelectDateInterval`) — исключение для компонентов с несколькими
181
+ значениями. У компонента с одним значением именованная модель не нужна:
182
+ для него это и есть обычный `v-model`.
183
+ - Булев проп называется `is*`, если описывает состояние компонента
184
+ (`isRequired`, `isLoading`), и `with*`, если описывает необязательную
185
+ возможность (`withEraser` у `PickDay`, `withPulse` у `Dot`).
186
+ - Проп-перечисление — ограниченный набор строковых значений, как `color` у
187
+ `Dot` или `align` у `Popup`, — обязательно имеет `validator`,
188
+ отклоняющий значения вне списка.
189
+
190
+ ## Почему у Popup и Dot нет события changed
191
+
192
+ `changed` означает не «значение изменилось», а «пользователь закончил
193
+ выбор, можно обновлять выдачу» — фильтры дашборда эмитят его как сигнал к
194
+ перезапросу данных.
195
+
196
+ У `Popup` такого момента нет: он не хранит значение фильтра, а лишь
197
+ управляет видимостью меню, и открытие меню — не повод перезагружать
198
+ данные. Момент, когда выбор действительно завершён, отслеживает
199
+ компонент, который использует `Popup` — сам или через внутренние
200
+ компоненты пакета, — `changed` эмитит он.
201
+
202
+ У `Dot` события нет по другой причине: у него нет значения вообще, поэтому
203
+ эмитить не о чем.
204
+
205
+ Отсутствие `changed` у `Popup` и `Dot` — сознательное решение, а не
206
+ пропуск.
207
+
167
208
  ## Playground
168
209
 
169
210
  npm run playground
package/dist/index.js CHANGED
@@ -49,26 +49,27 @@ function C(e, t, n, r, a, o) {
49
49
  var w = {
50
50
  components: { Overlay: /* @__PURE__ */ x(S, [["render", C]]) },
51
51
  inheritAttrs: !1,
52
- emits: ["update:isOpen"],
52
+ emits: ["update:modelValue"],
53
53
  props: {
54
- isOpen: {
54
+ modelValue: {
55
55
  type: Boolean,
56
56
  default: !1
57
57
  },
58
58
  align: {
59
59
  type: String,
60
- default: "left"
60
+ default: "left",
61
+ validator: (e) => ["left", "right"].indexOf(e) !== -1
61
62
  }
62
63
  },
63
64
  data() {
64
- return { overlayIsOpen: this.isOpen };
65
+ return { overlayIsOpen: this.modelValue };
65
66
  },
66
67
  watch: {
67
- isOpen: function(e) {
68
+ modelValue: function(e) {
68
69
  this.overlayIsOpen = e;
69
70
  },
70
71
  overlayIsOpen(e) {
71
- this.$emit("update:isOpen", e);
72
+ this.$emit("update:modelValue", e);
72
73
  }
73
74
  },
74
75
  computed: {
@@ -96,13 +97,13 @@ function E(e, n, r, c, u, p) {
96
97
  default: g(() => [_(a("div", s(e.$attrs, { class: ["absolute z-20", {
97
98
  "left-0": p.alignLeft,
98
99
  "right-0": p.alignRight
99
- }] }), [d(e.$slots, "default")], 16), [[h, r.isOpen]])]),
100
+ }] }), [d(e.$slots, "default")], 16), [[h, r.modelValue]])]),
100
101
  _: 3
101
102
  })]);
102
103
  }
103
104
  var D = /*#__PURE__*/ x(w, [["render", E]]), O = {
104
105
  props: {
105
- addPulse: {
106
+ withPulse: {
106
107
  type: Boolean,
107
108
  default: !1
108
109
  },
@@ -125,7 +126,7 @@ function te(e, t, n, r, o, s) {
125
126
  return l(), i("div", { class: c(["bb-dashboard-ui flex h-full items-center leading-none text-4xl", {
126
127
  "text-red-500": s.isRed,
127
128
  "text-green-500": s.isGreen,
128
- "animate-pulse": n.addPulse
129
+ "animate-pulse": n.withPulse
129
130
  }]) }, [...t[0] ||= [a("svg", {
130
131
  class: "fill-current w-2 h-2",
131
132
  viewBox: "0 0 120 120"
@@ -175,7 +176,7 @@ var I = {
175
176
  props: {
176
177
  modelValue: {
177
178
  type: String,
178
- required: !0
179
+ default: ""
179
180
  },
180
181
  withEraser: {
181
182
  type: Boolean,
@@ -299,12 +300,12 @@ function H(e, t, s, u, d, p) {
299
300
  onClick: p.clearPicker,
300
301
  class: "z-10 h-full pr-2"
301
302
  }, null, 8, ["onClick"])) : r("", !0)]), o(h, {
302
- "is-open": d.popupIsOpen,
303
- "onUpdate:isOpen": t[1] ||= (e) => d.popupIsOpen = e
303
+ modelValue: d.popupIsOpen,
304
+ "onUpdate:modelValue": t[1] ||= (e) => d.popupIsOpen = e
304
305
  }, {
305
306
  default: g(() => [a("div", V, null, 512)]),
306
307
  _: 1
307
- }, 8, ["is-open"])]);
308
+ }, 8, ["modelValue"])]);
308
309
  }
309
310
  var U = /*#__PURE__*/ x(I, [["render", H]]), W = {
310
311
  components: { Dot: k },
@@ -332,7 +333,7 @@ function q(e, t, n, r, s, c) {
332
333
  }, null, 8, K),
333
334
  _(o(u, {
334
335
  color: "red",
335
- "add-pulse": !0,
336
+ "with-pulse": !0,
336
337
  class: "ml-3"
337
338
  }, null, 512), [[h, n.isLoading]]),
338
339
  _(o(u, {
@@ -548,11 +549,11 @@ var _e = /*#__PURE__*/ x(de, [["render", ge]]), ve = {
548
549
  props: {
549
550
  dateFrom: {
550
551
  type: String,
551
- required: !0
552
+ default: ""
552
553
  },
553
554
  dateTo: {
554
555
  type: String,
555
- required: !0
556
+ default: ""
556
557
  },
557
558
  header: {
558
559
  type: String,
@@ -659,12 +660,12 @@ function Oe(e, t, s, u, m, h) {
659
660
  onClick: t[1] ||= (t) => e.$emit("erased"),
660
661
  class: "pr-2 h-full"
661
662
  })) : r("", !0)]), o(v, {
662
- "is-open": m.popupIsOpen,
663
- "onUpdate:isOpen": t[2] ||= (e) => m.popupIsOpen = e
663
+ modelValue: m.popupIsOpen,
664
+ "onUpdate:modelValue": t[2] ||= (e) => m.popupIsOpen = e
664
665
  }, {
665
666
  default: g(() => [d(e.$slots, "default")]),
666
667
  _: 3
667
- }, 8, ["is-open"])]);
668
+ }, 8, ["modelValue"])]);
668
669
  }
669
670
  var ke = /*#__PURE__*/ x(Te, [["render", Oe]]), Ae = {
670
671
  props: {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boobooking/dashboard-ui-components",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "Компоненты фильтров дашборда на Vue 3",
5
5
  "keywords": [
6
6
  "vue",