@boobooking/dashboard-ui-components 0.5.0 → 0.6.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 +72 -12
  2. package/dist/index.js +143 -137
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -24,10 +24,11 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
24
24
 
25
25
  ## Компоненты
26
26
 
27
- Пакет экспортирует тринадцать компонентов: `Popup`, `Dot`, `PickDay`,
27
+ Пакет экспортирует четырнадцать компонентов: `Popup`, `Dot`, `PickDay`,
28
28
  `RussianMobileFilter`, `Search`, `SelectDateInterval`, `SelectSingle`,
29
- `SmallBadge`, `ErrorMessages`, `Closer`, `DownloadLink`, `ConfirmationModal`,
30
- `DropdownButtonWithAction`. В архив пакета (`files: ["dist"]`) исходники не
29
+ `SmallBadge`, `ErrorMessages`, `Closer`, `DownloadLink`, `Modal`,
30
+ `ConfirmationModal`, `DropdownButtonWithAction`. В архив пакета
31
+ (`files: ["dist"]`) исходники не
31
32
  попадают, поэтому контракт каждого компонента — здесь и в playground, а не в
32
33
  исходном коде.
33
34
 
@@ -119,7 +120,9 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
119
120
  | `isRequired` | `Boolean` | `false` | Пометка обязательности в заголовке |
120
121
  | `isLoading` | `Boolean` | `false` | Индикатор загрузки в заголовке |
121
122
 
122
- События: `update:modelValue` и `changed` — оба на каждый ввод.
123
+ События: `update:modelValue` и `changed` — оба на каждый ввод. Значение,
124
+ изменённое родителем, поле показывает сразу и без событий: ответный
125
+ `update:modelValue` вернул бы родителю его же значение.
123
126
 
124
127
  ### SelectDateInterval
125
128
 
@@ -199,7 +202,8 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
199
202
  ### Closer
200
203
 
201
204
  Кнопка-крестик закрытия. Размер и положение задаёт приложение классами на
202
- корне: без них у крестика нулевой размер.
205
+ корне: без классов размера крестик получает размер SVG по умолчанию
206
+ (300×300).
203
207
 
204
208
  <closer class="absolute top-0 right-0 w-8 h-8" @clicked="close" />
205
209
 
@@ -218,6 +222,38 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
218
222
 
219
223
  Событий нет.
220
224
 
225
+ ### Modal
226
+
227
+ Оболочка модального окна: оверлей, панель и переходы открытия и закрытия.
228
+ Заголовок, текст и кнопки кладёт в слот приложение. На этой оболочке построен
229
+ `ConfirmationModal`.
230
+
231
+ <modal :is-open="isOpen" :heading-id="headingId">
232
+ <h3 :id="headingId">Заголовок</h3>
233
+ …содержимое…
234
+ </modal>
235
+
236
+ | Проп | Тип | По умолчанию | Описание |
237
+ | --- | --- | --- | --- |
238
+ | `isOpen` | `Boolean` | `false` | Открыта ли модалка |
239
+ | `headingId` | `String` | обязателен | `id` заголовка в слоте: им модалка подписывает диалог через `aria-labelledby` |
240
+
241
+ Событий нет. Модалка не закрывается сама ни по клику на оверлей, ни по
242
+ Escape: видимостью управляет родитель, как у `ConfirmationModal`. `id`
243
+ заголовка удобно получать через `useId()` — тогда у двух модалок на одной
244
+ странице он не совпадёт.
245
+
246
+ Содержимое слота смонтировано всегда, а закрытая модалка его только прячет
247
+ (`v-show`). Поэтому состояние внутри — выбор, введённый текст, ошибки —
248
+ переживает закрытие, и сбрасывать его должен родитель.
249
+
250
+ Панель белая, со скруглением `rounded-lg` и без внутренних отступов: их
251
+ задаёт содержимое слота. На узком экране панель прижата к нижнему краю, а её
252
+ ширина — по содержимому, но не больше экрана за вычетом полей; начиная с `sm`
253
+ панель стоит по центру и занимает `max-w-lg`. `class` и другие атрибуты на
254
+ `<modal>` попадают на полноэкранный корень, а не на панель: размер панели и
255
+ атрибуты диалога вроде `aria-describedby` снаружи не задаются.
256
+
221
257
  ### ConfirmationModal
222
258
 
223
259
  Модалка подтверждения действия: заголовок, текст, кнопка действия и кнопка
@@ -286,6 +322,10 @@ ConfirmationModal нет v-model».
286
322
  - Проп-перечисление — ограниченный набор строковых значений, как `color` у
287
323
  `Dot` или `align` у `Popup`, — обязательно имеет `validator`,
288
324
  отклоняющий значения вне списка.
325
+ - Компонент не падает ни на каком значении пропа. `null` и `undefined` там,
326
+ где ждут строку, объект или массив, он считает пустыми: пустой строкой,
327
+ отсутствием сообщений, пустым списком. Для обязательного пропа Vue при этом
328
+ предупредит о несовпадении типа, но компонент отрисуется.
289
329
 
290
330
  ## Почему у Popup и Dot нет события changed
291
331
 
@@ -320,7 +360,7 @@ ConfirmationModal нет v-model».
320
360
 
321
361
  npm run playground
322
362
 
323
- Поднимает демо-страницы со всеми тринадцатью компонентами в двух окружениях:
363
+ Поднимает демо-страницы со всеми четырнадцатью компонентами в двух окружениях:
324
364
  голом (без Tailwind и стилей приложения) и в окружении приложения (с
325
365
  Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
326
366
  основной способ посмотреть, как компоненты выглядят и ведут себя, а не
@@ -344,14 +384,34 @@ Tailwind, `@tailwindcss/forms` и типографикой, как у потре
344
384
  победит подключённое позже, то есть компоненты возьмут палитру приложения.
345
385
 
346
386
  Ресет пакета распространяется и на содержимое слотов — разметку приложения
347
- внутри `Popup` и `DropdownButtonWithAction`. В приложении с preflight это
348
- ничего не меняет; без него содержимое слота получит `box-sizing` и снятые
349
- границы.
387
+ внутри `Popup`, `DropdownButtonWithAction` и `Modal`. Ресет лежит в слое
388
+ `components`, поэтому внутри слота он сильнее всего, что приложение объявило
389
+ в слое `base`: preflight, `@tailwindcss/forms` и собственных умолчаний
390
+ приложения. В слоте он задаёт:
391
+
392
+ - всем элементам — нулевые `margin` и `padding` и рамку `0 solid` цвета
393
+ `currentColor`. Умолчания приложения из слоя `base`, например цвет рамок,
394
+ внутри слота не действуют: голые `border` или `divide-*` получат цвет
395
+ текста;
396
+ - кнопкам и полям `input` — унаследованные шрифт и цвет, нулевое
397
+ скругление, прозрачный фон и `opacity: 1`;
398
+ - полям `input` — `appearance: none` и снятое кольцо фокуса (`box-shadow`).
399
+
400
+ Обычная разметка в приложении с preflight почти не меняется — ресет
401
+ повторяет preflight, а без preflight она получит `box-sizing`, нулевые
402
+ отступы и снятые рамки. Поля из `@tailwindcss/forms` меняются заметно:
403
+ текстовые поля, `select` и `textarea` теряют рамку и внутренние отступы,
404
+ текстовые поля — ещё фон и размер шрифта; чекбоксы и радиокнопки теряют
405
+ рамку, фон, цвет отметки и кольцо фокуса, радиокнопки — ещё и круглую форму.
406
+ Вернуть оформление можно утилитами: слой `utilities` сильнее ресета.
407
+ Например, чекбоксу: `border border-gray-300 bg-white text-indigo-600
408
+ checked:bg-current checked:border-transparent focus:ring-2
409
+ focus:ring-offset-2`.
350
410
 
351
411
  У `Closer` нет доступного имени, и он выключен из порядка табуляции
352
412
  (`tabindex="-1"`): скринридер его не назовёт, а с клавиатуры до него не
353
413
  добраться.
354
414
 
355
- `ConfirmationModal` не переносит фокус внутрь при открытии, не удерживает его
356
- внутри, не возвращает на прежнее место после закрытия и не закрывается по
357
- Escape.
415
+ `Modal` и построенный на нём `ConfirmationModal` не переносят фокус внутрь при
416
+ открытии, не удерживают его внутри, не возвращают на прежнее место после
417
+ закрытия и не закрываются по Escape.
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  import { Fragment as e, Transition as t, createBlock as n, createCommentVNode as r, createElementBlock as i, createElementVNode as a, createVNode as o, mergeProps as s, normalizeClass as c, openBlock as l, renderList as u, renderSlot as d, resolveComponent as f, toDisplayString as p, useId as m, vModelText as h, vShow as g, withCtx as _, withDirectives as v, withKeys as y, withModifiers as b } from "vue";
2
2
  import ee from "pikaday";
3
- import x from "imask";
3
+ import te from "imask";
4
4
  //#region \0plugin-vue:export-helper
5
- var S = (e, t) => {
5
+ var x = (e, t) => {
6
6
  let n = e.__vccOpts || e;
7
7
  for (let [e, r] of t) n[e] = r;
8
8
  return n;
9
- }, C = {
9
+ }, S = {
10
10
  props: {
11
11
  isOpen: {
12
12
  type: Boolean,
@@ -33,7 +33,7 @@ var S = (e, t) => {
33
33
  document.removeEventListener("keydown", this.handleEscape);
34
34
  }
35
35
  };
36
- function w(e, t, n, r, a, o) {
36
+ function C(e, t, n, r, a, o) {
37
37
  return v((l(), i("button", {
38
38
  tabindex: "-1",
39
39
  onClick: t[0] ||= b((...e) => o.closeOverlay && o.closeOverlay(...e), ["prevent"]),
@@ -46,8 +46,8 @@ function w(e, t, n, r, a, o) {
46
46
  }
47
47
  //#endregion
48
48
  //#region src/components/Popup.vue
49
- var T = {
50
- components: { Overlay: /* @__PURE__ */ S(C, [["render", w]]) },
49
+ var w = {
50
+ components: { Overlay: /* @__PURE__ */ x(S, [["render", C]]) },
51
51
  inheritAttrs: !1,
52
52
  emits: ["update:modelValue"],
53
53
  props: {
@@ -80,10 +80,10 @@ var T = {
80
80
  return this.align === "right";
81
81
  }
82
82
  }
83
- }, E = { class: "bb-dashboard-ui relative" };
84
- function D(e, n, r, c, u, p) {
83
+ }, T = { class: "bb-dashboard-ui relative" };
84
+ function E(e, n, r, c, u, p) {
85
85
  let m = f("overlay");
86
- return l(), i("div", E, [o(m, {
86
+ return l(), i("div", T, [o(m, {
87
87
  "is-open": u.overlayIsOpen,
88
88
  "onUpdate:isOpen": n[0] ||= (e) => u.overlayIsOpen = e
89
89
  }, null, 8, ["is-open"]), o(t, {
@@ -101,7 +101,7 @@ function D(e, n, r, c, u, p) {
101
101
  _: 3
102
102
  })]);
103
103
  }
104
- var O = /*#__PURE__*/ S(T, [["render", D]]), te = {
104
+ var D = /*#__PURE__*/ x(w, [["render", E]]), ne = {
105
105
  props: {
106
106
  withPulse: {
107
107
  type: Boolean,
@@ -122,7 +122,7 @@ var O = /*#__PURE__*/ S(T, [["render", D]]), te = {
122
122
  }
123
123
  }
124
124
  };
125
- function ne(e, t, n, r, o, s) {
125
+ function re(e, t, n, r, o, s) {
126
126
  return l(), i("div", { class: c(["bb-dashboard-ui flex h-full items-center leading-none text-4xl", {
127
127
  "text-red-500": s.isRed,
128
128
  "text-green-500": s.isGreen,
@@ -136,13 +136,13 @@ function ne(e, t, n, r, o, s) {
136
136
  r: "45"
137
137
  })], -1)]], 2);
138
138
  }
139
- var k = /*#__PURE__*/ S(te, [["render", ne]]), A = {}, j = {
139
+ var O = /*#__PURE__*/ x(ne, [["render", re]]), k = {}, A = {
140
140
  type: "button",
141
141
  tabindex: "-1",
142
142
  class: "absolute right-0 top-0 flex items-center justify-center bg-transparent cursor-pointer text-gray-300 hover:text-gray-400 focus:outline-hidden"
143
143
  };
144
- function M(e, t, n, r, o, s) {
145
- return l(), i("button", j, [...t[0] ||= [a("svg", {
144
+ function j(e, t, n, r, o, s) {
145
+ return l(), i("button", A, [...t[0] ||= [a("svg", {
146
146
  class: "w-6 h-6 stroke-current",
147
147
  fill: "none",
148
148
  viewBox: "0 0 24 24"
@@ -153,13 +153,13 @@ function M(e, t, n, r, o, s) {
153
153
  d: "M6 18L18 6M6 6l12 12"
154
154
  })], -1)]]);
155
155
  }
156
- var N = /*#__PURE__*/ S(A, [["render", M]]);
156
+ var M = /*#__PURE__*/ x(k, [["render", j]]);
157
157
  //#endregion
158
158
  //#region src/date.js
159
- function P(e) {
159
+ function N(e) {
160
160
  return `${String(e.getDate()).padStart(2, "0")}.${String(e.getMonth() + 1).padStart(2, "0")}.${String(e.getFullYear()).padStart(4, "0")}`;
161
161
  }
162
- function F(e) {
162
+ function P(e) {
163
163
  let t = /^(\d{1,2})\.(\d{1,2})\.(\d{4})$/.exec(e);
164
164
  if (t === null) return null;
165
165
  let [, n, r, i] = t.map(Number), a = /* @__PURE__ */ new Date(0);
@@ -167,10 +167,10 @@ function F(e) {
167
167
  }
168
168
  //#endregion
169
169
  //#region src/components/PickDay.vue
170
- var I = {
170
+ var F = {
171
171
  components: {
172
- Popup: O,
173
- Eraser: N
172
+ Popup: D,
173
+ Eraser: M
174
174
  },
175
175
  emits: ["update:modelValue", "changed"],
176
176
  props: {
@@ -197,8 +197,8 @@ var I = {
197
197
  keyboardInput: !1,
198
198
  bound: !1,
199
199
  firstDay: 1,
200
- parse: (e) => F(e),
201
- toString: (e) => P(e),
200
+ parse: (e) => P(e),
201
+ toString: (e) => N(e),
202
202
  i18n: {
203
203
  previousMonth: "Предыдущий месяц",
204
204
  nextMonth: "Следующий месяц",
@@ -236,7 +236,7 @@ var I = {
236
236
  ]
237
237
  },
238
238
  onSelect: (e) => {
239
- this.popupIsOpen = !1, this.$emit("update:modelValue", P(e)), this.$emit("changed");
239
+ this.popupIsOpen = !1, this.$emit("update:modelValue", N(e)), this.$emit("changed");
240
240
  }
241
241
  });
242
242
  },
@@ -246,15 +246,16 @@ var I = {
246
246
  data() {
247
247
  return {
248
248
  popupIsOpen: !1,
249
- dayValue: this.modelValue
249
+ dayValue: this.modelValue ?? ""
250
250
  };
251
251
  },
252
252
  watch: { modelValue(e) {
253
- this.dayValue = e, this.syncPicker(e);
253
+ let t = e ?? "";
254
+ this.dayValue = t, this.syncPicker(t);
254
255
  } },
255
256
  methods: {
256
257
  syncPicker(e) {
257
- let t = F(e);
258
+ let t = P(e);
258
259
  if (t === null) {
259
260
  this.picker.clear();
260
261
  return;
@@ -267,35 +268,35 @@ var I = {
267
268
  },
268
269
  computed: {
269
270
  hasValue() {
270
- return this.modelValue.length > 0;
271
+ return (this.modelValue ?? "").length > 0;
271
272
  },
272
273
  needsEraser() {
273
274
  return !this.withEraser || this.popupIsOpen ? !1 : this.hasValue;
274
275
  }
275
276
  }
276
- }, L = { class: "bb-dashboard-ui flex flex-col" }, R = { class: "relative flex h-full cursor-pointer leading-none" }, z = { class: "min-w-24 w-full h-full" }, B = [
277
+ }, I = { class: "bb-dashboard-ui flex flex-col" }, L = { class: "relative flex h-full cursor-pointer leading-none" }, R = { class: "min-w-24 w-full h-full" }, z = [
277
278
  "disabled",
278
279
  "value",
279
280
  "placeholder"
280
- ], V = {
281
+ ], B = {
281
282
  ref: "container",
282
283
  class: "flex mt-1 bg-white border border-gray-200 rounded-md shadow-lg"
283
284
  };
284
- function H(e, t, s, u, d, p) {
285
+ function V(e, t, s, u, d, p) {
285
286
  let m = f("eraser"), h = f("popup");
286
- return l(), i("div", L, [a("div", R, [a("button", {
287
+ return l(), i("div", I, [a("div", L, [a("button", {
287
288
  ref: "trigger",
288
289
  type: "button",
289
290
  class: c(["flex w-full items-center focus:outline-hidden", { "z-20": d.popupIsOpen }]),
290
291
  onClick: t[0] ||= (e) => d.popupIsOpen = !d.popupIsOpen
291
- }, [a("label", z, [a("input", {
292
+ }, [a("label", R, [a("input", {
292
293
  disabled: d.popupIsOpen,
293
294
  ref: "field",
294
295
  type: "text",
295
296
  value: d.dayValue,
296
297
  placeholder: s.placeholderText,
297
298
  class: "w-full h-full py-2 pr-3 leading-none border border-transparent whitespace-nowrap bg-transparent placeholder:text-sm placeholder-gray-300 cursor-pointer focus:outline-hidden"
298
- }, null, 8, B)])], 2), p.needsEraser ? (l(), n(m, {
299
+ }, null, 8, z)])], 2), p.needsEraser ? (l(), n(m, {
299
300
  key: 0,
300
301
  onClick: p.clearPicker,
301
302
  class: "z-10 h-full pr-2"
@@ -303,12 +304,12 @@ function H(e, t, s, u, d, p) {
303
304
  modelValue: d.popupIsOpen,
304
305
  "onUpdate:modelValue": t[1] ||= (e) => d.popupIsOpen = e
305
306
  }, {
306
- default: _(() => [a("div", V, null, 512)]),
307
+ default: _(() => [a("div", B, null, 512)]),
307
308
  _: 1
308
309
  }, 8, ["modelValue"])]);
309
310
  }
310
- var U = /*#__PURE__*/ S(I, [["render", H]]), W = {
311
- components: { Dot: k },
311
+ var H = /*#__PURE__*/ x(F, [["render", V]]), U = {
312
+ components: { Dot: O },
312
313
  props: {
313
314
  text: {
314
315
  type: String,
@@ -323,14 +324,14 @@ var U = /*#__PURE__*/ S(I, [["render", H]]), W = {
323
324
  default: !1
324
325
  }
325
326
  }
326
- }, G = { class: "flex h-6 px-3 bg-white items-center justify-between" }, K = ["textContent"];
327
- function q(e, t, n, r, s, c) {
327
+ }, W = { class: "flex h-6 px-3 bg-white items-center justify-between" }, G = ["textContent"];
328
+ function K(e, t, n, r, s, c) {
328
329
  let u = f("dot");
329
- return l(), i("div", G, [
330
+ return l(), i("div", W, [
330
331
  a("div", {
331
332
  class: "flex flex-1 h-full items-center text-xs text-gray-500 whitespace-nowrap truncate leading-tight select-none",
332
333
  textContent: p(n.text)
333
- }, null, 8, K),
334
+ }, null, 8, G),
334
335
  v(o(u, {
335
336
  color: "red",
336
337
  "with-pulse": !0,
@@ -342,24 +343,24 @@ function q(e, t, n, r, s, c) {
342
343
  }, null, 512), [[g, n.isRequired]])
343
344
  ]);
344
345
  }
345
- var J = /*#__PURE__*/ S(W, [["render", q]]), Y = 10;
346
- function X(e) {
346
+ var q = /*#__PURE__*/ x(U, [["render", K]]), J = 10;
347
+ function Y(e) {
347
348
  let t = e.replace(/\D/g, "");
348
- return (t.startsWith("7") || t.startsWith("8")) && t[1] === "9" && (t = t.slice(1)), t.slice(0, Y);
349
+ return (t.startsWith("7") || t.startsWith("8")) && t[1] === "9" && (t = t.slice(1)), t.slice(0, J);
349
350
  }
350
- function Z(e) {
351
+ function X(e) {
351
352
  return e === "" ? "" : `7${e}`;
352
353
  }
353
- function Q(e) {
354
- let t = e.startsWith("+") ? e.slice(1) : e;
355
- return t.startsWith("7") ? t.slice(1) : t;
354
+ function Z(e) {
355
+ let t = e ?? "", n = t.startsWith("+") ? t.slice(1) : t;
356
+ return n.startsWith("7") ? n.slice(1) : n;
356
357
  }
357
358
  //#endregion
358
359
  //#region src/components/RussianMobileFilter.vue
359
- var re = 400, ie = 3, ae = {
360
+ var ie = 400, ae = 3, oe = {
360
361
  components: {
361
- ElementHeader: J,
362
- Eraser: N
362
+ ElementHeader: q,
363
+ Eraser: M
363
364
  },
364
365
  emits: ["update:modelValue", "changed"],
365
366
  props: {
@@ -381,32 +382,32 @@ var re = 400, ie = 3, ae = {
381
382
  }
382
383
  },
383
384
  data() {
384
- return { digits: Q(this.modelValue) };
385
+ return { digits: Z(this.modelValue) };
385
386
  },
386
387
  created() {
387
- this.mask = null, this.debounceTimer = null, this.isWritingProgrammatically = !1, this.lastCommitted = Q(this.modelValue);
388
+ this.mask = null, this.debounceTimer = null, this.isWritingProgrammatically = !1, this.lastCommitted = Z(this.modelValue);
388
389
  },
389
390
  mounted() {
390
- this.mask = x(this.$refs.input, {
391
+ this.mask = te(this.$refs.input, {
391
392
  mask: "+7 (000) 000 00 00",
392
393
  lazy: !0,
393
394
  prepare: (e, t) => t.unmaskedValue === "" && (e === "7" || e === "8") ? "" : e
394
395
  }), this.mask.on("accept", () => {
395
- this.isWritingProgrammatically || (this.digits = this.mask.unmaskedValue, this.$emit("update:modelValue", Z(this.digits)), this.scheduleCommit());
396
+ this.isWritingProgrammatically || (this.digits = this.mask.unmaskedValue, this.$emit("update:modelValue", X(this.digits)), this.scheduleCommit());
396
397
  }), this.syncFromModelValue(this.modelValue);
397
398
  },
398
399
  beforeUnmount() {
399
400
  clearTimeout(this.debounceTimer), this.mask?.destroy();
400
401
  },
401
402
  watch: { modelValue(e) {
402
- e !== Z(this.digits) && this.syncFromModelValue(e);
403
+ e !== X(this.digits) && this.syncFromModelValue(e);
403
404
  } },
404
405
  methods: {
405
406
  syncFromModelValue(e) {
406
- this.writeToMask(Q(e)), this.digits = this.mask.unmaskedValue, this.lastCommitted = this.digits;
407
+ this.writeToMask(Z(e)), this.digits = this.mask.unmaskedValue, this.lastCommitted = this.digits;
407
408
  },
408
409
  applyUserDigits(e) {
409
- this.writeToMask(e), this.digits = this.mask.unmaskedValue, this.$emit("update:modelValue", Z(this.digits));
410
+ this.writeToMask(e), this.digits = this.mask.unmaskedValue, this.$emit("update:modelValue", X(this.digits));
410
411
  },
411
412
  writeToMask(e) {
412
413
  if (this.isWritingProgrammatically = !0, e === "") this.mask.value = "";
@@ -429,7 +430,7 @@ var re = 400, ie = 3, ae = {
429
430
  this.setLazy(!0), this.digits === "" && this.writeToMask(""), this.commit();
430
431
  },
431
432
  onPaste(e) {
432
- this.applyUserDigits(X(e.clipboardData?.getData("text") ?? "")), this.scheduleCommit();
433
+ this.applyUserDigits(Y(e.clipboardData?.getData("text") ?? "")), this.scheduleCommit();
433
434
  },
434
435
  clear() {
435
436
  this.applyUserDigits(""), this.commit();
@@ -439,16 +440,16 @@ var re = 400, ie = 3, ae = {
439
440
  this.commit();
440
441
  return;
441
442
  }
442
- this.digits.length < ie || (this.debounceTimer = setTimeout(() => this.commit(), re));
443
+ this.digits.length < ae || (this.debounceTimer = setTimeout(() => this.commit(), ie));
443
444
  },
444
445
  commit() {
445
446
  clearTimeout(this.debounceTimer), this.digits !== this.lastCommitted && (this.lastCommitted = this.digits, this.$emit("changed"));
446
447
  }
447
448
  }
448
- }, oe = { class: "bb-dashboard-ui flex flex-none" }, se = { class: "flex w-full flex-col border border-white bg-white" }, ce = { class: "relative flex h-full w-full" }, le = { class: "flex w-full h-full items-center justify-center" };
449
- function ue(e, t, n, r, s, c) {
449
+ }, se = { class: "bb-dashboard-ui flex flex-none" }, ce = { class: "flex w-full flex-col border border-white bg-white" }, le = { class: "relative flex h-full w-full" }, ue = { class: "flex w-full h-full items-center justify-center" };
450
+ function de(e, t, n, r, s, c) {
450
451
  let u = f("element-header"), d = f("eraser");
451
- return l(), i("div", oe, [a("div", se, [o(u, {
452
+ return l(), i("div", se, [a("div", ce, [o(u, {
452
453
  text: n.header,
453
454
  "is-required": n.isRequired,
454
455
  "is-loading": n.isLoading
@@ -456,7 +457,7 @@ function ue(e, t, n, r, s, c) {
456
457
  "text",
457
458
  "is-required",
458
459
  "is-loading"
459
- ]), a("div", ce, [a("label", le, [a("input", {
460
+ ]), a("div", le, [a("label", ue, [a("input", {
460
461
  ref: "input",
461
462
  type: "tel",
462
463
  inputmode: "tel",
@@ -472,10 +473,10 @@ function ue(e, t, n, r, s, c) {
472
473
  class: "pr-2 h-full"
473
474
  }, null, 8, ["onClick"]), [[g, s.digits.length > 0]])])])])]);
474
475
  }
475
- var de = /*#__PURE__*/ S(ae, [["render", ue]]), fe = {
476
+ var fe = /*#__PURE__*/ x(oe, [["render", de]]), pe = {
476
477
  components: {
477
- ElementHeader: J,
478
- Eraser: N
478
+ ElementHeader: q,
479
+ Eraser: M
479
480
  },
480
481
  emits: ["update:modelValue", "changed"],
481
482
  props: {
@@ -497,12 +498,14 @@ var de = /*#__PURE__*/ S(ae, [["render", ue]]), fe = {
497
498
  }
498
499
  },
499
500
  data() {
500
- return { search: this.modelValue };
501
+ return { search: this.modelValue ?? "" };
501
502
  },
502
503
  computed: { inputNeedsEraser() {
503
504
  return this.search.length > 0;
504
505
  } },
505
- watch: {},
506
+ watch: { modelValue(e) {
507
+ this.search = e ?? "";
508
+ } },
506
509
  methods: {
507
510
  clearInput() {
508
511
  this.search = "", this.startSearch();
@@ -511,10 +514,10 @@ var de = /*#__PURE__*/ S(ae, [["render", ue]]), fe = {
511
514
  this.$emit("update:modelValue", this.search), this.$emit("changed");
512
515
  }
513
516
  }
514
- }, pe = { class: "bb-dashboard-ui flex flex-none" }, me = { class: "flex w-full flex-col border border-white bg-white" }, he = { class: "relative flex h-full w-full" }, ge = { class: "flex w-full h-full items-center justify-center" };
515
- function _e(e, t, n, r, s, c) {
517
+ }, me = { class: "bb-dashboard-ui flex flex-none" }, he = { class: "flex w-full flex-col border border-white bg-white" }, ge = { class: "relative flex h-full w-full" }, _e = { class: "flex w-full h-full items-center justify-center" };
518
+ function ve(e, t, n, r, s, c) {
516
519
  let u = f("element-header"), d = f("eraser");
517
- return l(), i("div", pe, [a("div", me, [o(u, {
520
+ return l(), i("div", me, [a("div", he, [o(u, {
518
521
  text: n.header,
519
522
  "is-required": n.isRequired,
520
523
  "is-loading": n.isLoading
@@ -522,7 +525,7 @@ function _e(e, t, n, r, s, c) {
522
525
  "text",
523
526
  "is-required",
524
527
  "is-loading"
525
- ]), a("div", he, [a("label", ge, [v(a("input", {
528
+ ]), a("div", ge, [a("label", _e, [v(a("input", {
526
529
  class: "flex w-full h-full px-3 py-2 cursor-pointer truncate focus:outline-hidden border-none",
527
530
  "onUpdate:modelValue": t[0] ||= (e) => s.search = e,
528
531
  onInput: t[1] ||= (...e) => c.startSearch && c.startSearch(...e)
@@ -536,10 +539,10 @@ function _e(e, t, n, r, s, c) {
536
539
  class: "pr-2 h-full"
537
540
  }, null, 8, ["onClick"]), [[g, c.inputNeedsEraser]])])])])]);
538
541
  }
539
- var ve = /*#__PURE__*/ S(fe, [["render", _e]]), ye = {
542
+ var ye = /*#__PURE__*/ x(pe, [["render", ve]]), be = {
540
543
  components: {
541
- ElementHeader: J,
542
- PickDay: U
544
+ ElementHeader: q,
545
+ PickDay: H
543
546
  },
544
547
  emits: [
545
548
  "update:dateFrom",
@@ -588,10 +591,10 @@ var ve = /*#__PURE__*/ S(fe, [["render", _e]]), ye = {
588
591
  this.$emit("update:dateTo", e), this.dateTo !== e && this.$emit("changed");
589
592
  }
590
593
  }
591
- }, be = { class: "bb-dashboard-ui flex" }, xe = { class: "flex border border-white" }, Se = { class: "flex flex-col min-w-72 w-72 bg-white h-full" }, Ce = { class: "flex h-full divide-x divide-gray-200" };
592
- function we(e, t, n, r, s, c) {
594
+ }, xe = { class: "bb-dashboard-ui flex" }, Se = { class: "flex border border-white" }, Ce = { class: "flex flex-col min-w-72 w-72 bg-white h-full" }, we = { class: "flex h-full divide-x divide-gray-200" };
595
+ function Te(e, t, n, r, s, c) {
593
596
  let u = f("element-header"), d = f("pick-day");
594
- return l(), i("div", be, [a("div", xe, [a("div", Se, [o(u, {
597
+ return l(), i("div", xe, [a("div", Se, [a("div", Ce, [o(u, {
595
598
  text: n.header,
596
599
  "is-required": n.isRequired,
597
600
  "is-loading": n.isLoading
@@ -599,7 +602,7 @@ function we(e, t, n, r, s, c) {
599
602
  "text",
600
603
  "is-required",
601
604
  "is-loading"
602
- ]), a("div", Ce, [o(d, {
605
+ ]), a("div", we, [o(d, {
603
606
  modelValue: s.userDateFrom,
604
607
  "onUpdate:modelValue": t[0] ||= (e) => s.userDateFrom = e,
605
608
  class: "flex-1 min-w-36 pl-3",
@@ -611,10 +614,10 @@ function we(e, t, n, r, s, c) {
611
614
  "placeholder-text": "до"
612
615
  }, null, 8, ["modelValue"])])])])]);
613
616
  }
614
- var Te = /*#__PURE__*/ S(ye, [["render", we]]), Ee = {
617
+ var Ee = /*#__PURE__*/ x(be, [["render", Te]]), De = {
615
618
  components: {
616
- Popup: O,
617
- Eraser: N
619
+ Popup: D,
620
+ Eraser: M
618
621
  },
619
622
  emits: ["update:isOpen", "erased"],
620
623
  props: {
@@ -645,17 +648,17 @@ var Te = /*#__PURE__*/ S(ye, [["render", we]]), Ee = {
645
648
  computed: { needsEraser() {
646
649
  return !this.isOpen && this.hasValue;
647
650
  } }
648
- }, De = { class: "flex flex-col grow bg-white" }, Oe = { class: "relative flex w-full h-full" }, ke = ["textContent"];
649
- function Ae(e, t, s, u, m, h) {
651
+ }, Oe = { class: "flex flex-col grow bg-white" }, ke = { class: "relative flex w-full h-full" }, Ae = ["textContent"];
652
+ function je(e, t, s, u, m, h) {
650
653
  let g = f("eraser"), v = f("popup");
651
- return l(), i("div", De, [a("div", Oe, [a("button", {
654
+ return l(), i("div", Oe, [a("div", ke, [a("button", {
652
655
  type: "button",
653
656
  class: c(["flex w-full h-full items-center focus:outline-hidden cursor-pointer", { "z-20": s.isOpen }]),
654
657
  onClick: t[0] ||= b((t) => e.$emit("update:isOpen", !s.isOpen), ["prevent"])
655
658
  }, [a("span", {
656
659
  class: "flex w-full h-full pl-3 pr-12 py-2 items-center whitespace-nowrap leading-none",
657
660
  textContent: p(s.title)
658
- }, null, 8, ke)], 2), h.needsEraser ? (l(), n(g, {
661
+ }, null, 8, Ae)], 2), h.needsEraser ? (l(), n(g, {
659
662
  key: 0,
660
663
  onClick: t[1] ||= (t) => e.$emit("erased"),
661
664
  class: "pr-2 h-full"
@@ -667,7 +670,7 @@ function Ae(e, t, s, u, m, h) {
667
670
  _: 3
668
671
  }, 8, ["modelValue"])]);
669
672
  }
670
- var je = /*#__PURE__*/ S(Ee, [["render", Ae]]), Me = {
673
+ var Me = /*#__PURE__*/ x(De, [["render", je]]), Ne = {
671
674
  props: {
672
675
  isChecked: {
673
676
  type: Boolean,
@@ -679,31 +682,31 @@ var je = /*#__PURE__*/ S(Ee, [["render", Ae]]), Me = {
679
682
  methods: { toggle() {
680
683
  this.$emit("clicked");
681
684
  } }
682
- }, Ne = { class: "flex w-9 h-9 items-center justify-center" }, Pe = {
685
+ }, Pe = { class: "flex w-9 h-9 items-center justify-center" }, Fe = {
683
686
  class: "w-5 h-5 fill-current text-green-300",
684
687
  viewBox: "0 0 20 20"
685
- }, Fe = ["textContent"];
686
- function Ie(e, t, n, r, o, s) {
688
+ }, Ie = ["textContent"];
689
+ function Le(e, t, n, r, o, s) {
687
690
  return l(), i("button", {
688
691
  type: "button",
689
692
  onClick: t[0] ||= b((...e) => s.toggle && s.toggle(...e), ["prevent"]),
690
693
  class: "flex w-full bg-white hover:bg-indigo-100 cursor-pointer focus:outline-hidden focus:ring-3 focus:z-10 focus:ring-blue-500/50"
691
- }, [a("span", Ne, [v((l(), i("svg", Pe, [...t[1] ||= [a("path", {
694
+ }, [a("span", Pe, [v((l(), i("svg", Fe, [...t[1] ||= [a("path", {
692
695
  d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z",
693
696
  "clip-rule": "evenodd",
694
697
  "fill-rule": "evenodd"
695
698
  }, null, -1)]], 512)), [[g, n.isChecked]])]), a("span", {
696
699
  class: "flex h-9 justify-center items-center pr-6 whitespace-nowrap select-none",
697
700
  textContent: p(n.name)
698
- }, null, 8, Fe)]);
701
+ }, null, 8, Ie)]);
699
702
  }
700
703
  //#endregion
701
704
  //#region src/components/SelectSingle.vue
702
- var Le = {
705
+ var Re = {
703
706
  components: {
704
- ElementHeader: J,
705
- DropdownButton: je,
706
- ListElement: /* @__PURE__ */ S(Me, [["render", Ie]])
707
+ ElementHeader: q,
708
+ DropdownButton: Me,
709
+ ListElement: /* @__PURE__ */ x(Ne, [["render", Le]])
707
710
  },
708
711
  emits: ["update:modelValue", "changed"],
709
712
  props: {
@@ -732,14 +735,17 @@ var Le = {
732
735
  return { isOpen: !1 };
733
736
  },
734
737
  computed: {
738
+ itemList() {
739
+ return this.items ?? [];
740
+ },
735
741
  activeItem() {
736
- return this.items.find((e) => e.id === this.modelValue) ?? null;
742
+ return this.itemList.find((e) => e.id === this.modelValue) ?? null;
737
743
  },
738
744
  activeItemName() {
739
745
  return this.activeItem === null ? null : this.activeItem.name;
740
746
  },
741
747
  hasItems() {
742
- return this.items.length > 0;
748
+ return this.itemList.length > 0;
743
749
  },
744
750
  hasValue() {
745
751
  return this.activeItem !== null;
@@ -753,10 +759,10 @@ var Le = {
753
759
  this.$emit("update:modelValue", null), this.$emit("changed");
754
760
  }
755
761
  }
756
- }, Re = { class: "bb-dashboard-ui flex flex-none" }, ze = { class: "flex w-full flex-col border border-white bg-white" }, Be = { class: "flex flex-col py-1 mt-1 bg-white border border-gray-200 rounded-md shadow-lg divide-y divide-gray-200 divide-dashed" };
757
- function Ve(t, s, c, d, p, m) {
762
+ }, ze = { class: "bb-dashboard-ui flex flex-none" }, Be = { class: "flex w-full flex-col border border-white bg-white" }, Ve = { class: "flex flex-col py-1 mt-1 bg-white border border-gray-200 rounded-md shadow-lg divide-y divide-gray-200 divide-dashed" };
763
+ function He(t, s, c, d, p, m) {
758
764
  let h = f("element-header"), g = f("list-element"), v = f("dropdown-button");
759
- return l(), i("div", Re, [a("div", ze, [o(h, {
765
+ return l(), i("div", ze, [a("div", Be, [o(h, {
760
766
  text: c.header,
761
767
  "is-required": c.isRequired,
762
768
  "is-loading": c.isLoading
@@ -772,7 +778,7 @@ function Ve(t, s, c, d, p, m) {
772
778
  "has-value": m.hasValue,
773
779
  onErased: m.clear
774
780
  }, {
775
- default: _(() => [a("div", Be, [(l(!0), i(e, null, u(c.items, (e) => (l(), n(g, {
781
+ default: _(() => [a("div", Ve, [(l(!0), i(e, null, u(m.itemList, (e) => (l(), n(g, {
776
782
  name: e.name,
777
783
  key: e.id,
778
784
  "is-checked": e.id === c.modelValue,
@@ -790,7 +796,7 @@ function Ve(t, s, c, d, p, m) {
790
796
  "onErased"
791
797
  ])) : r("", !0)])]);
792
798
  }
793
- var He = /*#__PURE__*/ S(Le, [["render", Ve]]), Ue = {
799
+ var Ue = /*#__PURE__*/ x(Re, [["render", He]]), We = {
794
800
  props: {
795
801
  text: {
796
802
  type: String,
@@ -829,8 +835,8 @@ var He = /*#__PURE__*/ S(Le, [["render", Ve]]), Ue = {
829
835
  return this.color === "yellow";
830
836
  }
831
837
  }
832
- }, We = ["textContent"];
833
- function Ge(e, t, n, r, a, o) {
838
+ }, Ge = ["textContent"];
839
+ function Ke(e, t, n, r, a, o) {
834
840
  return l(), i("span", {
835
841
  class: c(["bb-dashboard-ui inline-flex items-center px-3 py-2 rounded-full text-xs font-medium leading-none select-none whitespace-nowrap", {
836
842
  "bg-green-50 text-gray-700": o.isGreen,
@@ -841,9 +847,9 @@ function Ge(e, t, n, r, a, o) {
841
847
  "bg-yellow-100 text-yellow-800": o.isYellow
842
848
  }]),
843
849
  textContent: p(n.text)
844
- }, null, 10, We);
850
+ }, null, 10, Ge);
845
851
  }
846
- var Ke = /*#__PURE__*/ S(Ue, [["render", Ge]]), qe = {
852
+ var qe = /*#__PURE__*/ x(We, [["render", Ke]]), Je = {
847
853
  props: {
848
854
  messages: {
849
855
  type: [Object, Array],
@@ -857,18 +863,18 @@ var Ke = /*#__PURE__*/ S(Ue, [["render", Ge]]), qe = {
857
863
  },
858
864
  computed: {
859
865
  hasErrors() {
860
- return Object.keys(this.messages).length > 0;
866
+ return Object.keys(this.messages ?? {}).length > 0;
861
867
  },
862
868
  isDangerous() {
863
869
  return this.type === "dangerous";
864
870
  }
865
871
  }
866
- }, Je = { class: "flex" }, Ye = { class: "shrink-0" }, Xe = { class: "ml-3" }, Ze = ["textContent"];
867
- function Qe(t, n, o, s, d, f) {
872
+ }, Ye = { class: "flex" }, Xe = { class: "shrink-0" }, Ze = { class: "ml-3" }, Qe = ["textContent"];
873
+ function $e(t, n, o, s, d, f) {
868
874
  return f.hasErrors ? (l(), i("div", {
869
875
  key: 0,
870
876
  class: c(["bb-dashboard-ui border-l-4 p-4", f.isDangerous ? "bg-red-50 border-red-400" : "bg-yellow-50 border-yellow-400"])
871
- }, [a("div", Je, [a("div", Ye, [(l(), i("svg", {
877
+ }, [a("div", Ye, [a("div", Xe, [(l(), i("svg", {
872
878
  class: c(["h-5 w-5", f.isDangerous ? "text-red-400" : "text-yellow-400"]),
873
879
  viewBox: "0 0 20 20",
874
880
  fill: "currentColor"
@@ -876,14 +882,14 @@ function Qe(t, n, o, s, d, f) {
876
882
  "fill-rule": "evenodd",
877
883
  d: "M8.257 3.099c.765-1.36 2.722-1.36 3.486 0l5.58 9.92c.75 1.334-.213 2.98-1.742 2.98H4.42c-1.53 0-2.493-1.646-1.743-2.98l5.58-9.92zM11 13a1 1 0 11-2 0 1 1 0 012 0zm-1-8a1 1 0 00-1 1v3a1 1 0 002 0V6a1 1 0 00-1-1z",
878
884
  "clip-rule": "evenodd"
879
- }, null, -1)]], 2))]), a("div", Xe, [(l(!0), i(e, null, u(o.messages, (e, t) => (l(), i("p", {
885
+ }, null, -1)]], 2))]), a("div", Ze, [(l(!0), i(e, null, u(o.messages, (e, t) => (l(), i("p", {
880
886
  class: c(["text-sm leading-5", f.isDangerous ? "text-red-700" : "text-yellow-700"]),
881
887
  key: t,
882
888
  textContent: p(e)
883
- }, null, 10, Ze))), 128))])])], 2)) : r("", !0);
889
+ }, null, 10, Qe))), 128))])])], 2)) : r("", !0);
884
890
  }
885
- var $e = /*#__PURE__*/ S(qe, [["render", Qe]]), et = { emits: ["clicked"] };
886
- function tt(e, t, n, r, o, s) {
891
+ var et = /*#__PURE__*/ x(Je, [["render", $e]]), tt = { emits: ["clicked"] };
892
+ function nt(e, t, n, r, o, s) {
887
893
  return l(), i("button", {
888
894
  type: "button",
889
895
  tabindex: "-1",
@@ -900,15 +906,15 @@ function tt(e, t, n, r, o, s) {
900
906
  d: "M6 18L18 6M6 6l12 12"
901
907
  })], -1)]]);
902
908
  }
903
- var nt = /*#__PURE__*/ S(et, [["render", tt]]), rt = {}, it = {
909
+ var rt = /*#__PURE__*/ x(tt, [["render", nt]]), it = {}, at = {
904
910
  class: "w-4 h-4",
905
911
  fill: "none",
906
912
  stroke: "currentColor",
907
913
  viewBox: "0 0 24 24",
908
914
  xmlns: "http://www.w3.org/2000/svg"
909
915
  };
910
- function at(e, t, n, r, o, s) {
911
- return l(), i("svg", it, [...t[0] ||= [a("path", {
916
+ function ot(e, t, n, r, o, s) {
917
+ return l(), i("svg", at, [...t[0] ||= [a("path", {
912
918
  "stroke-linecap": "round",
913
919
  "stroke-linejoin": "round",
914
920
  "stroke-width": "2",
@@ -917,8 +923,8 @@ function at(e, t, n, r, o, s) {
917
923
  }
918
924
  //#endregion
919
925
  //#region src/components/DownloadLink.vue
920
- var ot = {
921
- components: { "download-icon": /* @__PURE__ */ S(rt, [["render", at]]) },
926
+ var st = {
927
+ components: { "download-icon": /* @__PURE__ */ x(it, [["render", ot]]) },
922
928
  props: {
923
929
  url: {
924
930
  type: String,
@@ -929,16 +935,16 @@ var ot = {
929
935
  default: "Скачать"
930
936
  }
931
937
  }
932
- }, st = ["href", "title"], ct = { class: "ml-1" };
933
- function lt(e, t, n, r, s, c) {
938
+ }, ct = ["href", "title"], lt = { class: "ml-1" };
939
+ function ut(e, t, n, r, s, c) {
934
940
  let u = f("download-icon");
935
941
  return l(), i("a", {
936
942
  href: n.url,
937
943
  title: n.title,
938
944
  class: "bb-dashboard-ui inline-flex items-center px-3 py-1.5 rounded-full text-xs font-medium leading-none select-none bg-purple-100 text-purple-800 hover:text-purple-600"
939
- }, [o(u), a("span", ct, p(n.title), 1)], 8, st);
945
+ }, [o(u), a("span", lt, p(n.title), 1)], 8, ct);
940
946
  }
941
- var ut = /*#__PURE__*/ S(ot, [["render", lt]]), dt = { props: {
947
+ var dt = /*#__PURE__*/ x(st, [["render", ut]]), ft = { props: {
942
948
  isOpen: {
943
949
  type: Boolean,
944
950
  default: !1
@@ -947,9 +953,9 @@ var ut = /*#__PURE__*/ S(ot, [["render", lt]]), dt = { props: {
947
953
  type: String,
948
954
  required: !0
949
955
  }
950
- } }, ft = { class: "flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0" }, pt = { class: "fixed inset-0 transition-opacity" }, mt = ["aria-labelledby"];
951
- function ht(e, n, r, s, u, f) {
952
- return l(), i("div", { class: c(["bb-dashboard-ui fixed inset-0 overflow-y-auto z-20", { "pointer-events-none": !r.isOpen }]) }, [a("div", ft, [
956
+ } }, pt = { class: "flex items-end justify-center min-h-screen pt-4 px-4 pb-20 text-center sm:block sm:p-0" }, mt = { class: "fixed inset-0 transition-opacity" }, ht = ["aria-labelledby"];
957
+ function gt(e, n, r, s, u, f) {
958
+ return l(), i("div", { class: c(["bb-dashboard-ui fixed inset-0 overflow-y-auto z-20", { "pointer-events-none": !r.isOpen }]) }, [a("div", pt, [
953
959
  o(t, {
954
960
  "enter-active-class": "ease-out duration-300",
955
961
  "enter-from-class": "opacity-0",
@@ -958,7 +964,7 @@ function ht(e, n, r, s, u, f) {
958
964
  "leave-from-class": "opacity-100",
959
965
  "leave-to-class": "opacity-0"
960
966
  }, {
961
- default: _(() => [v(a("div", pt, [...n[0] ||= [a("div", { class: "absolute inset-0 bg-gray-500 opacity-75" }, null, -1)]], 512), [[g, r.isOpen]])]),
967
+ default: _(() => [v(a("div", mt, [...n[0] ||= [a("div", { class: "absolute inset-0 bg-gray-500 opacity-75" }, null, -1)]], 512), [[g, r.isOpen]])]),
962
968
  _: 1
963
969
  }),
964
970
  n[1] ||= a("span", { class: "hidden sm:inline-block sm:align-middle sm:h-screen" }, null, -1),
@@ -975,12 +981,12 @@ function ht(e, n, r, s, u, f) {
975
981
  role: "dialog",
976
982
  "aria-modal": "true",
977
983
  "aria-labelledby": r.headingId
978
- }, [d(e.$slots, "default")], 8, mt), [[g, r.isOpen]])]),
984
+ }, [d(e.$slots, "default")], 8, ht), [[g, r.isOpen]])]),
979
985
  _: 3
980
986
  })
981
987
  ])], 2);
982
988
  }
983
- var gt = /*#__PURE__*/ S(dt, [["render", ht]]), _t = {}, vt = {
989
+ var Q = /*#__PURE__*/ x(ft, [["render", gt]]), _t = {}, vt = {
984
990
  class: "h-7 w-7 text-red-600",
985
991
  xmlns: "http://www.w3.org/2000/svg",
986
992
  fill: "none",
@@ -996,7 +1002,7 @@ function yt(e, t, n, r, o, s) {
996
1002
  d: "M12 9v2m0 4h.01m-6.938 4h13.856c1.54 0 2.502-1.667 1.732-3L13.732 4c-.77-1.333-2.694-1.333-3.464 0L3.34 16c-.77 1.333.192 3 1.732 3z"
997
1003
  }, null, -1)]]);
998
1004
  }
999
- var bt = /*#__PURE__*/ S(_t, [["render", yt]]), xt = {}, St = {
1005
+ var bt = /*#__PURE__*/ x(_t, [["render", yt]]), xt = {}, St = {
1000
1006
  class: "h-7 w-7 text-yellow-400",
1001
1007
  xmlns: "http://www.w3.org/2000/svg",
1002
1008
  viewBox: "0 0 20 20",
@@ -1014,9 +1020,9 @@ function Ct(e, t, n, r, o, s) {
1014
1020
  //#region src/components/ConfirmationModal.vue
1015
1021
  var wt = {
1016
1022
  components: {
1017
- Modal: gt,
1023
+ Modal: Q,
1018
1024
  Dangerous: bt,
1019
- Warning: /* @__PURE__ */ S(xt, [["render", Ct]])
1025
+ Warning: /* @__PURE__ */ x(xt, [["render", Ct]])
1020
1026
  },
1021
1027
  emits: ["actionConfirmed", "actionCanceled"],
1022
1028
  props: {
@@ -1085,8 +1091,8 @@ function jt(e, t, i, o, s, u) {
1085
1091
  _: 1
1086
1092
  }, 8, ["is-open", "heading-id"]);
1087
1093
  }
1088
- var Mt = /*#__PURE__*/ S(wt, [["render", jt]]), Nt = {
1089
- components: { Popup: O },
1094
+ var Mt = /*#__PURE__*/ x(wt, [["render", jt]]), Nt = {
1095
+ components: { Popup: D },
1090
1096
  emits: ["update:modelValue"],
1091
1097
  props: { modelValue: {
1092
1098
  type: Boolean,
@@ -1143,6 +1149,6 @@ function Rt(e, t, n, s, u, p) {
1143
1149
  _: 3
1144
1150
  }, 8, ["model-value", "onUpdate:modelValue"])])) : r("", !0)]);
1145
1151
  }
1146
- var zt = /*#__PURE__*/ S(Nt, [["render", Rt]]);
1152
+ var zt = /*#__PURE__*/ x(Nt, [["render", Rt]]);
1147
1153
  //#endregion
1148
- export { nt as Closer, Mt as ConfirmationModal, k as Dot, ut as DownloadLink, zt as DropdownButtonWithAction, $e as ErrorMessages, U as PickDay, O as Popup, de as RussianMobileFilter, ve as Search, Te as SelectDateInterval, He as SelectSingle, Ke as SmallBadge };
1154
+ export { rt as Closer, Mt as ConfirmationModal, O as Dot, dt as DownloadLink, zt as DropdownButtonWithAction, et as ErrorMessages, Q as Modal, H as PickDay, D as Popup, fe as RussianMobileFilter, ye as Search, Ee as SelectDateInterval, Ue as SelectSingle, qe as SmallBadge };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boobooking/dashboard-ui-components",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "description": "Компоненты дашборда на Vue 3",
5
5
  "keywords": [
6
6
  "vue",