@boobooking/dashboard-ui-components 0.2.1 → 0.4.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
@@ -1,7 +1,6 @@
1
1
  # @boobooking/dashboard-ui-components
2
2
 
3
- Компоненты фильтров дашборда на Vue 3: телефон, поиск, выпадающий список,
4
- интервал дат.
3
+ Компоненты дашборда на Vue 3: фильтры и общие элементы интерфейса.
5
4
 
6
5
  ## Установка
7
6
 
@@ -16,15 +15,18 @@ import '@boobooking/dashboard-ui-components/style.css'
16
15
 
17
16
  ## Требования
18
17
 
19
- Vue не ниже 3.2, ESM, сборщик, умеющий импорт CSS из пакета.
18
+ Vue не ниже 3.5, ESM, сборщик, умеющий импорт CSS из пакета. Версия 3.5 нужна
19
+ ради `useId()`: им компоненты связывают свои `id` с `aria-`атрибутами, и две
20
+ копии компонента на одной странице не делят один `id`.
20
21
 
21
22
  Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в CSS приложения
22
23
  пакету не нужны.
23
24
 
24
25
  ## Компоненты
25
26
 
26
- Пакет экспортирует семь компонентов: `Popup`, `Dot`, `PickDay`,
27
- `RussianMobileFilter`, `Search`, `SelectDateInterval`, `SelectSingle`. В
27
+ Пакет экспортирует двенадцать компонентов: `Popup`, `Dot`, `PickDay`,
28
+ `RussianMobileFilter`, `Search`, `SelectDateInterval`, `SelectSingle`,
29
+ `SmallBadge`, `ErrorMessages`, `Closer`, `DownloadLink`, `ConfirmationModal`. В
28
30
  архив пакета (`files: ["dist"]`) исходники не попадают, поэтому контракт
29
31
  каждого компонента — здесь и в playground, а не в исходном коде.
30
32
 
@@ -166,6 +168,83 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
166
168
  События: `update:modelValue` и `changed` — при выборе элемента (повторный
167
169
  клик по уже выбранному снимает выбор) и при очистке через ластик.
168
170
 
171
+ ### SmallBadge
172
+
173
+ Бейдж-пилюля с коротким текстом. Текст не переносится.
174
+
175
+ <small-badge text="Отправлено" color="green" />
176
+
177
+ | Проп | Тип | По умолчанию | Описание |
178
+ | --- | --- | --- | --- |
179
+ | `text` | `String` | обязателен | Текст бейджа |
180
+ | `color` | `String` | обязателен | `"green"`, `"indigo"`, `"gray"`, `"blue"`, `"red"` или `"yellow"` |
181
+
182
+ Событий нет.
183
+
184
+ ### ErrorMessages
185
+
186
+ Плашка со списком сообщений: жёлтая для предупреждений, красная для ошибок.
187
+ Без сообщений не отрисовывается вовсе.
188
+
189
+ <error-messages :messages="errors" type="dangerous" />
190
+
191
+ | Проп | Тип | По умолчанию | Описание |
192
+ | --- | --- | --- | --- |
193
+ | `messages` | `Object \| Array` | обязателен | Объект ошибок валидации (ключ — поле, значение — текст) или массив строк |
194
+ | `type` | `String` | `"warning"` | `"warning"` (жёлтая) или `"dangerous"` (красная) |
195
+
196
+ Событий нет.
197
+
198
+ ### Closer
199
+
200
+ Кнопка-крестик закрытия. Размер и положение задаёт приложение классами на
201
+ корне: без них у крестика нулевой размер.
202
+
203
+ <closer class="absolute top-0 right-0 w-8 h-8" @clicked="close" />
204
+
205
+ Пропов нет. Событие: `clicked` — по клику.
206
+
207
+ ### DownloadLink
208
+
209
+ Ссылка на файл в виде бейджа с иконкой скачивания. Кликабелен весь бейдж.
210
+
211
+ <download-link :url="exportUrl" title="скачать xlsx" />
212
+
213
+ | Проп | Тип | По умолчанию | Описание |
214
+ | --- | --- | --- | --- |
215
+ | `url` | `String` | обязателен | Адрес файла |
216
+ | `title` | `String` | `"Скачать"` | Подпись и всплывающая подсказка |
217
+
218
+ Событий нет.
219
+
220
+ ### ConfirmationModal
221
+
222
+ Модалка подтверждения действия: заголовок, текст, кнопка действия и кнопка
223
+ отмены.
224
+
225
+ <confirmation-modal
226
+ :is-open="showDelete"
227
+ type="dangerous"
228
+ confirmation-heading="Удаление администратора"
229
+ confirmation-text="Это действие необратимо."
230
+ action-button-text="Удалить"
231
+ @action-canceled="showDelete = false"
232
+ @action-confirmed="deleteUser"
233
+ />
234
+
235
+ | Проп | Тип | По умолчанию | Описание |
236
+ | --- | --- | --- | --- |
237
+ | `isOpen` | `Boolean` | `false` | Открыта ли модалка |
238
+ | `type` | `String` | `"warning"` | `"warning"` (жёлтая) или `"dangerous"` (красная) |
239
+ | `confirmationHeading` | `String` | `""` | Заголовок |
240
+ | `confirmationText` | `String` | `""` | Текст под заголовком |
241
+ | `cancelButtonText` | `String` | `"Отмена"` | Подпись кнопки отмены |
242
+ | `actionButtonText` | `String` | обязателен | Подпись кнопки действия |
243
+
244
+ События: `actionConfirmed` — по кнопке действия, `actionCanceled` — по кнопке
245
+ отмены. Ни одна из кнопок модалку не закрывает — см. раздел «Почему у
246
+ ConfirmationModal нет v-model».
247
+
169
248
  ## Правила API пакета
170
249
 
171
250
  Компонент, добавляемый в пакет, следует тем же правилам, что и уже
@@ -205,11 +284,22 @@ Tailwind, `@tailwindcss/forms`, Inertia и какие-либо токены в C
205
284
  Отсутствие `changed` у `Popup` и `Dot` — сознательное решение, а не
206
285
  пропуск.
207
286
 
287
+ ## Почему у ConfirmationModal нет v-model
288
+
289
+ Правило пакета — значение через `v-model` — относится к состоянию, которое
290
+ компонент меняет сам: `Popup` закрывается по клику вне, `SelectSingle` меняет
291
+ выбор. `ConfirmationModal` свою видимость не меняет никогда. Обе кнопки только
292
+ сообщают родителю решение пользователя, а закрыть модалку, оставить её открытой
293
+ на время запроса или открыть следующую — решает родитель.
294
+
295
+ `v-model` обещал бы двустороннюю связь, которой нет, поэтому видимость
296
+ передаётся пропом `isOpen`.
297
+
208
298
  ## Playground
209
299
 
210
300
  npm run playground
211
301
 
212
- Поднимает демо-страницы со всеми семью компонентами в двух окружениях:
302
+ Поднимает демо-страницы со всеми двенадцатью компонентами в двух окружениях:
213
303
  голом (без Tailwind и стилей приложения) и в окружении приложения (с
214
304
  Tailwind, `@tailwindcss/forms` и типографикой, как у потребителя). Это
215
305
  основной способ посмотреть, как компоненты выглядят и ведут себя, а не
@@ -235,3 +325,11 @@ Tailwind, `@tailwindcss/forms` и типографикой, как у потре
235
325
  Ресет пакета распространяется и на содержимое слотов — разметку приложения
236
326
  внутри `Popup`. В приложении с preflight это ничего не меняет; без него
237
327
  содержимое слота получит `box-sizing` и снятые границы.
328
+
329
+ У `Closer` нет доступного имени, и он выключен из порядка табуляции
330
+ (`tabindex="-1"`): скринридер его не назовёт, а с клавиатуры до него не
331
+ добраться.
332
+
333
+ `ConfirmationModal` не переносит фокус внутрь при открытии, не удерживает его
334
+ внутри, не возвращает на прежнее место после закрытия и не закрывается по
335
+ Escape.
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
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, vModelText as m, vShow as h, withCtx as g, withDirectives as _, withKeys as v, withModifiers as y } from "vue";
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 b from "imask";
3
+ import x from "imask";
4
4
  //#region \0plugin-vue:export-helper
5
- var x = (e, t) => {
5
+ var S = (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
- }, S = {
9
+ }, C = {
10
10
  props: {
11
11
  isOpen: {
12
12
  type: Boolean,
@@ -33,21 +33,21 @@ var x = (e, t) => {
33
33
  document.removeEventListener("keydown", this.handleEscape);
34
34
  }
35
35
  };
36
- function C(e, t, n, r, a, o) {
37
- return _((l(), i("button", {
36
+ function w(e, t, n, r, a, o) {
37
+ return v((l(), i("button", {
38
38
  tabindex: "-1",
39
- onClick: t[0] ||= y((...e) => o.closeOverlay && o.closeOverlay(...e), ["prevent"]),
39
+ onClick: t[0] ||= b((...e) => o.closeOverlay && o.closeOverlay(...e), ["prevent"]),
40
40
  class: c(["fixed inset-0 w-full h-full cursor-default flex items-start", {
41
41
  "z-20": n.isOpen,
42
42
  "bg-transparent": n.isTransparent,
43
43
  "bg-gray-900 opacity-75": !n.isTransparent
44
44
  }])
45
- }, null, 2)), [[h, n.isOpen]]);
45
+ }, null, 2)), [[g, n.isOpen]]);
46
46
  }
47
47
  //#endregion
48
48
  //#region src/components/Popup.vue
49
- var w = {
50
- components: { Overlay: /* @__PURE__ */ x(S, [["render", C]]) },
49
+ var T = {
50
+ components: { Overlay: /* @__PURE__ */ S(C, [["render", w]]) },
51
51
  inheritAttrs: !1,
52
52
  emits: ["update:modelValue"],
53
53
  props: {
@@ -80,10 +80,10 @@ var w = {
80
80
  return this.align === "right";
81
81
  }
82
82
  }
83
- }, T = { class: "bb-dashboard-ui relative" };
84
- function E(e, n, r, c, u, p) {
83
+ }, E = { class: "bb-dashboard-ui relative" };
84
+ function D(e, n, r, c, u, p) {
85
85
  let m = f("overlay");
86
- return l(), i("div", T, [o(m, {
86
+ return l(), i("div", E, [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, {
@@ -94,14 +94,14 @@ function E(e, n, r, c, u, p) {
94
94
  "leave-from-class": "opacity-100 scale-100",
95
95
  "leave-to-class": "opacity-0 scale-95"
96
96
  }, {
97
- default: g(() => [_(a("div", s(e.$attrs, { class: ["absolute z-20", {
97
+ default: _(() => [v(a("div", s(e.$attrs, { class: ["absolute z-20", {
98
98
  "left-0": p.alignLeft,
99
99
  "right-0": p.alignRight
100
- }] }), [d(e.$slots, "default")], 16), [[h, r.modelValue]])]),
100
+ }] }), [d(e.$slots, "default")], 16), [[g, r.modelValue]])]),
101
101
  _: 3
102
102
  })]);
103
103
  }
104
- var D = /*#__PURE__*/ x(w, [["render", E]]), O = {
104
+ var O = /*#__PURE__*/ S(T, [["render", D]]), te = {
105
105
  props: {
106
106
  withPulse: {
107
107
  type: Boolean,
@@ -122,7 +122,7 @@ var D = /*#__PURE__*/ x(w, [["render", E]]), O = {
122
122
  }
123
123
  }
124
124
  };
125
- function te(e, t, n, r, o, s) {
125
+ function ne(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,7 +136,7 @@ function te(e, t, n, r, o, s) {
136
136
  r: "45"
137
137
  })], -1)]], 2);
138
138
  }
139
- var k = /*#__PURE__*/ x(O, [["render", te]]), A = {}, j = {
139
+ var k = /*#__PURE__*/ S(te, [["render", ne]]), A = {}, j = {
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"
@@ -153,7 +153,7 @@ 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__*/ x(A, [["render", M]]);
156
+ var N = /*#__PURE__*/ S(A, [["render", M]]);
157
157
  //#endregion
158
158
  //#region src/date.js
159
159
  function P(e) {
@@ -169,7 +169,7 @@ function F(e) {
169
169
  //#region src/components/PickDay.vue
170
170
  var I = {
171
171
  components: {
172
- Popup: D,
172
+ Popup: O,
173
173
  Eraser: N
174
174
  },
175
175
  emits: ["update:modelValue", "changed"],
@@ -303,11 +303,11 @@ function H(e, t, s, u, d, p) {
303
303
  modelValue: d.popupIsOpen,
304
304
  "onUpdate:modelValue": t[1] ||= (e) => d.popupIsOpen = e
305
305
  }, {
306
- default: g(() => [a("div", V, null, 512)]),
306
+ default: _(() => [a("div", V, null, 512)]),
307
307
  _: 1
308
308
  }, 8, ["modelValue"])]);
309
309
  }
310
- var U = /*#__PURE__*/ x(I, [["render", H]]), W = {
310
+ var U = /*#__PURE__*/ S(I, [["render", H]]), W = {
311
311
  components: { Dot: k },
312
312
  props: {
313
313
  text: {
@@ -331,18 +331,18 @@ function q(e, t, n, r, s, c) {
331
331
  class: "flex flex-1 h-full items-center text-xs text-gray-500 whitespace-nowrap truncate leading-tight select-none",
332
332
  textContent: p(n.text)
333
333
  }, null, 8, K),
334
- _(o(u, {
334
+ v(o(u, {
335
335
  color: "red",
336
336
  "with-pulse": !0,
337
337
  class: "ml-3"
338
- }, null, 512), [[h, n.isLoading]]),
339
- _(o(u, {
338
+ }, null, 512), [[g, n.isLoading]]),
339
+ v(o(u, {
340
340
  color: "red",
341
341
  class: "ml-3"
342
- }, null, 512), [[h, n.isRequired]])
342
+ }, null, 512), [[g, n.isRequired]])
343
343
  ]);
344
344
  }
345
- var J = /*#__PURE__*/ x(W, [["render", q]]), Y = 10;
345
+ var J = /*#__PURE__*/ S(W, [["render", q]]), Y = 10;
346
346
  function X(e) {
347
347
  let t = e.replace(/\D/g, "");
348
348
  return (t.startsWith("7") || t.startsWith("8")) && t[1] === "9" && (t = t.slice(1)), t.slice(0, Y);
@@ -356,7 +356,7 @@ function Q(e) {
356
356
  }
357
357
  //#endregion
358
358
  //#region src/components/RussianMobileFilter.vue
359
- var ne = 400, re = 3, ie = {
359
+ var re = 400, ie = 3, ae = {
360
360
  components: {
361
361
  ElementHeader: J,
362
362
  Eraser: N
@@ -387,7 +387,7 @@ var ne = 400, re = 3, ie = {
387
387
  this.mask = null, this.debounceTimer = null, this.isWritingProgrammatically = !1, this.lastCommitted = Q(this.modelValue);
388
388
  },
389
389
  mounted() {
390
- this.mask = b(this.$refs.input, {
390
+ this.mask = x(this.$refs.input, {
391
391
  mask: "+7 (000) 000 00 00",
392
392
  lazy: !0,
393
393
  prepare: (e, t) => t.unmaskedValue === "" && (e === "7" || e === "8") ? "" : e
@@ -439,16 +439,16 @@ var ne = 400, re = 3, ie = {
439
439
  this.commit();
440
440
  return;
441
441
  }
442
- this.digits.length < re || (this.debounceTimer = setTimeout(() => this.commit(), ne));
442
+ this.digits.length < ie || (this.debounceTimer = setTimeout(() => this.commit(), re));
443
443
  },
444
444
  commit() {
445
445
  clearTimeout(this.debounceTimer), this.digits !== this.lastCommitted && (this.lastCommitted = this.digits, this.$emit("changed"));
446
446
  }
447
447
  }
448
- }, ae = { class: "bb-dashboard-ui flex flex-none" }, oe = { class: "flex w-full flex-col border border-white bg-white" }, se = { class: "relative flex h-full w-full" }, ce = { class: "flex w-full h-full items-center justify-center" };
449
- function le(e, t, n, r, s, c) {
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) {
450
450
  let u = f("element-header"), d = f("eraser");
451
- return l(), i("div", ae, [a("div", oe, [o(u, {
451
+ return l(), i("div", oe, [a("div", se, [o(u, {
452
452
  text: n.header,
453
453
  "is-required": n.isRequired,
454
454
  "is-loading": n.isLoading
@@ -456,7 +456,7 @@ function le(e, t, n, r, s, c) {
456
456
  "text",
457
457
  "is-required",
458
458
  "is-loading"
459
- ]), a("div", se, [a("label", ce, [a("input", {
459
+ ]), a("div", ce, [a("label", le, [a("input", {
460
460
  ref: "input",
461
461
  type: "tel",
462
462
  inputmode: "tel",
@@ -464,15 +464,15 @@ function le(e, t, n, r, s, c) {
464
464
  class: "flex w-phone h-full px-3 py-2 cursor-pointer truncate focus:outline-hidden border-none",
465
465
  onFocus: t[0] ||= (...e) => c.onFocus && c.onFocus(...e),
466
466
  onBlur: t[1] ||= (...e) => c.onBlur && c.onBlur(...e),
467
- onKeydown: t[2] ||= v((...e) => c.commit && c.commit(...e), ["enter"]),
468
- onPaste: t[3] ||= y((...e) => c.onPaste && c.onPaste(...e), ["prevent"])
469
- }, null, 544), _(o(d, {
470
- onMousedown: t[4] ||= y(() => {}, ["prevent"]),
467
+ onKeydown: t[2] ||= y((...e) => c.commit && c.commit(...e), ["enter"]),
468
+ onPaste: t[3] ||= b((...e) => c.onPaste && c.onPaste(...e), ["prevent"])
469
+ }, null, 544), v(o(d, {
470
+ onMousedown: t[4] ||= b(() => {}, ["prevent"]),
471
471
  onClick: c.clear,
472
472
  class: "pr-2 h-full"
473
- }, null, 8, ["onClick"]), [[h, s.digits.length > 0]])])])])]);
473
+ }, null, 8, ["onClick"]), [[g, s.digits.length > 0]])])])])]);
474
474
  }
475
- var ue = /*#__PURE__*/ x(ie, [["render", le]]), de = {
475
+ var de = /*#__PURE__*/ S(ae, [["render", ue]]), fe = {
476
476
  components: {
477
477
  ElementHeader: J,
478
478
  Eraser: N
@@ -511,10 +511,10 @@ var ue = /*#__PURE__*/ x(ie, [["render", le]]), de = {
511
511
  this.$emit("update:modelValue", this.search), this.$emit("changed");
512
512
  }
513
513
  }
514
- }, fe = { class: "bb-dashboard-ui flex flex-none" }, pe = { class: "flex w-full flex-col border border-white bg-white" }, me = { class: "relative flex h-full w-full" }, he = { class: "flex w-full h-full items-center justify-center" };
515
- function ge(e, t, n, r, s, c) {
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) {
516
516
  let u = f("element-header"), d = f("eraser");
517
- return l(), i("div", fe, [a("div", pe, [o(u, {
517
+ return l(), i("div", pe, [a("div", me, [o(u, {
518
518
  text: n.header,
519
519
  "is-required": n.isRequired,
520
520
  "is-loading": n.isLoading
@@ -522,21 +522,21 @@ function ge(e, t, n, r, s, c) {
522
522
  "text",
523
523
  "is-required",
524
524
  "is-loading"
525
- ]), a("div", me, [a("label", he, [_(a("input", {
525
+ ]), a("div", he, [a("label", ge, [v(a("input", {
526
526
  class: "flex w-full h-full px-3 py-2 cursor-pointer truncate focus:outline-hidden border-none",
527
527
  "onUpdate:modelValue": t[0] ||= (e) => s.search = e,
528
528
  onInput: t[1] ||= (...e) => c.startSearch && c.startSearch(...e)
529
529
  }, null, 544), [[
530
- m,
530
+ h,
531
531
  s.search,
532
532
  void 0,
533
533
  { trim: !0 }
534
- ]]), _(o(d, {
534
+ ]]), v(o(d, {
535
535
  onClick: c.clearInput,
536
536
  class: "pr-2 h-full"
537
- }, null, 8, ["onClick"]), [[h, c.inputNeedsEraser]])])])])]);
537
+ }, null, 8, ["onClick"]), [[g, c.inputNeedsEraser]])])])])]);
538
538
  }
539
- var _e = /*#__PURE__*/ x(de, [["render", ge]]), ve = {
539
+ var ve = /*#__PURE__*/ S(fe, [["render", _e]]), ye = {
540
540
  components: {
541
541
  ElementHeader: J,
542
542
  PickDay: U
@@ -588,10 +588,10 @@ var _e = /*#__PURE__*/ x(de, [["render", ge]]), ve = {
588
588
  this.$emit("update:dateTo", e), this.dateTo !== e && this.$emit("changed");
589
589
  }
590
590
  }
591
- }, 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" };
592
- function Ce(e, t, n, r, s, c) {
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) {
593
593
  let u = f("element-header"), d = f("pick-day");
594
- return l(), i("div", ye, [a("div", be, [a("div", xe, [o(u, {
594
+ return l(), i("div", be, [a("div", xe, [a("div", Se, [o(u, {
595
595
  text: n.header,
596
596
  "is-required": n.isRequired,
597
597
  "is-loading": n.isLoading
@@ -599,7 +599,7 @@ function Ce(e, t, n, r, s, c) {
599
599
  "text",
600
600
  "is-required",
601
601
  "is-loading"
602
- ]), a("div", Se, [o(d, {
602
+ ]), a("div", Ce, [o(d, {
603
603
  modelValue: s.userDateFrom,
604
604
  "onUpdate:modelValue": t[0] ||= (e) => s.userDateFrom = e,
605
605
  class: "flex-1 min-w-36 pl-3",
@@ -611,9 +611,9 @@ function Ce(e, t, n, r, s, c) {
611
611
  "placeholder-text": "до"
612
612
  }, null, 8, ["modelValue"])])])])]);
613
613
  }
614
- var we = /*#__PURE__*/ x(ve, [["render", Ce]]), Te = {
614
+ var Te = /*#__PURE__*/ S(ye, [["render", we]]), Ee = {
615
615
  components: {
616
- Popup: D,
616
+ Popup: O,
617
617
  Eraser: N
618
618
  },
619
619
  emits: ["update:isOpen", "erased"],
@@ -645,17 +645,17 @@ var we = /*#__PURE__*/ x(ve, [["render", Ce]]), Te = {
645
645
  computed: { needsEraser() {
646
646
  return !this.isOpen && this.hasValue;
647
647
  } }
648
- }, Ee = { class: "flex flex-col grow bg-white" }, De = { class: "relative flex w-full h-full" }, $ = ["textContent"];
649
- function Oe(e, t, s, u, m, h) {
650
- let _ = f("eraser"), v = f("popup");
651
- return l(), i("div", Ee, [a("div", De, [a("button", {
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) {
650
+ let g = f("eraser"), v = f("popup");
651
+ return l(), i("div", De, [a("div", Oe, [a("button", {
652
652
  type: "button",
653
653
  class: c(["flex w-full h-full items-center focus:outline-hidden cursor-pointer", { "z-20": s.isOpen }]),
654
- onClick: t[0] ||= y((t) => e.$emit("update:isOpen", !s.isOpen), ["prevent"])
654
+ onClick: t[0] ||= b((t) => e.$emit("update:isOpen", !s.isOpen), ["prevent"])
655
655
  }, [a("span", {
656
656
  class: "flex w-full h-full pl-3 pr-12 py-2 items-center whitespace-nowrap leading-none",
657
657
  textContent: p(s.title)
658
- }, null, 8, $)], 2), h.needsEraser ? (l(), n(_, {
658
+ }, null, 8, ke)], 2), h.needsEraser ? (l(), n(g, {
659
659
  key: 0,
660
660
  onClick: t[1] ||= (t) => e.$emit("erased"),
661
661
  class: "pr-2 h-full"
@@ -663,11 +663,11 @@ function Oe(e, t, s, u, m, h) {
663
663
  modelValue: m.popupIsOpen,
664
664
  "onUpdate:modelValue": t[2] ||= (e) => m.popupIsOpen = e
665
665
  }, {
666
- default: g(() => [d(e.$slots, "default")]),
666
+ default: _(() => [d(e.$slots, "default")]),
667
667
  _: 3
668
668
  }, 8, ["modelValue"])]);
669
669
  }
670
- var ke = /*#__PURE__*/ x(Te, [["render", Oe]]), Ae = {
670
+ var je = /*#__PURE__*/ S(Ee, [["render", Ae]]), Me = {
671
671
  props: {
672
672
  isChecked: {
673
673
  type: Boolean,
@@ -679,31 +679,31 @@ var ke = /*#__PURE__*/ x(Te, [["render", Oe]]), Ae = {
679
679
  methods: { toggle() {
680
680
  this.$emit("clicked");
681
681
  } }
682
- }, je = { class: "flex w-9 h-9 items-center justify-center" }, Me = {
682
+ }, Ne = { class: "flex w-9 h-9 items-center justify-center" }, Pe = {
683
683
  class: "w-5 h-5 fill-current text-green-300",
684
684
  viewBox: "0 0 20 20"
685
- }, Ne = ["textContent"];
686
- function Pe(e, t, n, r, o, s) {
685
+ }, Fe = ["textContent"];
686
+ function Ie(e, t, n, r, o, s) {
687
687
  return l(), i("button", {
688
688
  type: "button",
689
- onClick: t[0] ||= y((...e) => s.toggle && s.toggle(...e), ["prevent"]),
689
+ onClick: t[0] ||= b((...e) => s.toggle && s.toggle(...e), ["prevent"]),
690
690
  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", je, [_((l(), i("svg", Me, [...t[1] ||= [a("path", {
691
+ }, [a("span", Ne, [v((l(), i("svg", Pe, [...t[1] ||= [a("path", {
692
692
  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
693
  "clip-rule": "evenodd",
694
694
  "fill-rule": "evenodd"
695
- }, null, -1)]], 512)), [[h, n.isChecked]])]), a("span", {
695
+ }, null, -1)]], 512)), [[g, n.isChecked]])]), a("span", {
696
696
  class: "flex h-9 justify-center items-center pr-6 whitespace-nowrap select-none",
697
697
  textContent: p(n.name)
698
- }, null, 8, Ne)]);
698
+ }, null, 8, Fe)]);
699
699
  }
700
700
  //#endregion
701
701
  //#region src/components/SelectSingle.vue
702
- var Fe = {
702
+ var Le = {
703
703
  components: {
704
704
  ElementHeader: J,
705
- DropdownButton: ke,
706
- ListElement: /* @__PURE__ */ x(Ae, [["render", Pe]])
705
+ DropdownButton: je,
706
+ ListElement: /* @__PURE__ */ S(Me, [["render", Ie]])
707
707
  },
708
708
  emits: ["update:modelValue", "changed"],
709
709
  props: {
@@ -753,10 +753,10 @@ var Fe = {
753
753
  this.$emit("update:modelValue", null), this.$emit("changed");
754
754
  }
755
755
  }
756
- }, Ie = { class: "bb-dashboard-ui flex flex-none" }, Le = { class: "flex w-full flex-col border border-white bg-white" }, Re = { 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 ze(t, s, c, d, p, m) {
758
- let h = f("element-header"), _ = f("list-element"), v = f("dropdown-button");
759
- return l(), i("div", Ie, [a("div", Le, [o(h, {
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) {
758
+ let h = f("element-header"), g = f("list-element"), v = f("dropdown-button");
759
+ return l(), i("div", Re, [a("div", ze, [o(h, {
760
760
  text: c.header,
761
761
  "is-required": c.isRequired,
762
762
  "is-loading": c.isLoading
@@ -772,7 +772,7 @@ function ze(t, s, c, d, p, m) {
772
772
  "has-value": m.hasValue,
773
773
  onErased: m.clear
774
774
  }, {
775
- default: g(() => [a("div", Re, [(l(!0), i(e, null, u(c.items, (e) => (l(), n(_, {
775
+ default: _(() => [a("div", Be, [(l(!0), i(e, null, u(c.items, (e) => (l(), n(g, {
776
776
  name: e.name,
777
777
  key: e.id,
778
778
  "is-checked": e.id === c.modelValue,
@@ -790,6 +790,301 @@ function ze(t, s, c, d, p, m) {
790
790
  "onErased"
791
791
  ])) : r("", !0)])]);
792
792
  }
793
- var Be = /*#__PURE__*/ x(Fe, [["render", ze]]);
793
+ var He = /*#__PURE__*/ S(Le, [["render", Ve]]), Ue = {
794
+ props: {
795
+ text: {
796
+ type: String,
797
+ required: !0
798
+ },
799
+ color: {
800
+ type: String,
801
+ required: !0,
802
+ validator: (e) => [
803
+ "green",
804
+ "indigo",
805
+ "gray",
806
+ "blue",
807
+ "red",
808
+ "yellow"
809
+ ].indexOf(e) !== -1
810
+ }
811
+ },
812
+ computed: {
813
+ isGreen() {
814
+ return this.color === "green";
815
+ },
816
+ isIndigo() {
817
+ return this.color === "indigo";
818
+ },
819
+ isGray() {
820
+ return this.color === "gray";
821
+ },
822
+ isBlue() {
823
+ return this.color === "blue";
824
+ },
825
+ isRed() {
826
+ return this.color === "red";
827
+ },
828
+ isYellow() {
829
+ return this.color === "yellow";
830
+ }
831
+ }
832
+ }, We = ["textContent"];
833
+ function Ge(e, t, n, r, a, o) {
834
+ return l(), i("span", {
835
+ 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
+ "bg-green-50 text-gray-700": o.isGreen,
837
+ "bg-indigo-100 text-gray-700": o.isIndigo,
838
+ "bg-gray-200 text-gray-700": o.isGray,
839
+ "bg-blue-100 text-blue-800": o.isBlue,
840
+ "bg-red-100 text-red-800": o.isRed,
841
+ "bg-yellow-100 text-yellow-800": o.isYellow
842
+ }]),
843
+ textContent: p(n.text)
844
+ }, null, 10, We);
845
+ }
846
+ var Ke = /*#__PURE__*/ S(Ue, [["render", Ge]]), qe = {
847
+ props: {
848
+ messages: {
849
+ type: [Object, Array],
850
+ required: !0
851
+ },
852
+ type: {
853
+ type: String,
854
+ default: "warning",
855
+ validator: (e) => ["warning", "dangerous"].indexOf(e) !== -1
856
+ }
857
+ },
858
+ computed: {
859
+ hasErrors() {
860
+ return Object.keys(this.messages).length > 0;
861
+ },
862
+ isDangerous() {
863
+ return this.type === "dangerous";
864
+ }
865
+ }
866
+ }, Je = { class: "flex" }, Ye = { class: "shrink-0" }, Xe = { class: "ml-3" }, Ze = ["textContent"];
867
+ function Qe(t, n, o, s, d, f) {
868
+ return f.hasErrors ? (l(), i("div", {
869
+ key: 0,
870
+ 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", {
872
+ class: c(["h-5 w-5", f.isDangerous ? "text-red-400" : "text-yellow-400"]),
873
+ viewBox: "0 0 20 20",
874
+ fill: "currentColor"
875
+ }, [...n[0] ||= [a("path", {
876
+ "fill-rule": "evenodd",
877
+ 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
+ "clip-rule": "evenodd"
879
+ }, null, -1)]], 2))]), a("div", Xe, [(l(!0), i(e, null, u(o.messages, (e, t) => (l(), i("p", {
880
+ class: c(["text-sm leading-5", f.isDangerous ? "text-red-700" : "text-yellow-700"]),
881
+ key: t,
882
+ textContent: p(e)
883
+ }, null, 10, Ze))), 128))])])], 2)) : r("", !0);
884
+ }
885
+ var $e = /*#__PURE__*/ S(qe, [["render", Qe]]), et = { emits: ["clicked"] };
886
+ function tt(e, t, n, r, o, s) {
887
+ return l(), i("button", {
888
+ type: "button",
889
+ tabindex: "-1",
890
+ class: "bb-dashboard-ui flex items-center justify-center bg-transparent cursor-pointer text-gray-400 focus:outline-hidden hover:text-gray-600",
891
+ onClick: t[0] ||= b((t) => e.$emit("clicked"), ["prevent"])
892
+ }, [...t[1] ||= [a("svg", {
893
+ class: "w-full h-full stroke-current",
894
+ fill: "none",
895
+ viewBox: "0 0 24 24"
896
+ }, [a("path", {
897
+ "stroke-linecap": "round",
898
+ "stroke-linejoin": "round",
899
+ "stroke-width": "2",
900
+ d: "M6 18L18 6M6 6l12 12"
901
+ })], -1)]]);
902
+ }
903
+ var nt = /*#__PURE__*/ S(et, [["render", tt]]), rt = {}, it = {
904
+ class: "w-4 h-4",
905
+ fill: "none",
906
+ stroke: "currentColor",
907
+ viewBox: "0 0 24 24",
908
+ xmlns: "http://www.w3.org/2000/svg"
909
+ };
910
+ function at(e, t, n, r, o, s) {
911
+ return l(), i("svg", it, [...t[0] ||= [a("path", {
912
+ "stroke-linecap": "round",
913
+ "stroke-linejoin": "round",
914
+ "stroke-width": "2",
915
+ d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-4l-4 4m0 0l-4-4m4 4V4"
916
+ }, null, -1)]]);
917
+ }
918
+ //#endregion
919
+ //#region src/components/DownloadLink.vue
920
+ var ot = {
921
+ components: { "download-icon": /* @__PURE__ */ S(rt, [["render", at]]) },
922
+ props: {
923
+ url: {
924
+ type: String,
925
+ required: !0
926
+ },
927
+ title: {
928
+ type: String,
929
+ default: "Скачать"
930
+ }
931
+ }
932
+ }, st = ["href", "title"], ct = { class: "ml-1" };
933
+ function lt(e, t, n, r, s, c) {
934
+ let u = f("download-icon");
935
+ return l(), i("a", {
936
+ href: n.url,
937
+ title: n.title,
938
+ 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);
940
+ }
941
+ var ut = /*#__PURE__*/ S(ot, [["render", lt]]), dt = { props: {
942
+ isOpen: {
943
+ type: Boolean,
944
+ default: !1
945
+ },
946
+ headingId: {
947
+ type: String,
948
+ required: !0
949
+ }
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, [
953
+ o(t, {
954
+ "enter-active-class": "ease-out duration-300",
955
+ "enter-from-class": "opacity-0",
956
+ "enter-to-class": "opacity-100",
957
+ "leave-active-class": "ease-in duration-200",
958
+ "leave-from-class": "opacity-100",
959
+ "leave-to-class": "opacity-0"
960
+ }, {
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]])]),
962
+ _: 1
963
+ }),
964
+ n[1] ||= a("span", { class: "hidden sm:inline-block sm:align-middle sm:h-screen" }, null, -1),
965
+ o(t, {
966
+ "enter-active-class": "ease-out duration-300",
967
+ "enter-from-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
968
+ "enter-to-class": "opacity-100 translate-y-0 sm:scale-100",
969
+ "leave-active-class": "ease-in duration-200",
970
+ "leave-from-class": "opacity-100 translate-y-0 sm:scale-100",
971
+ "leave-to-class": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
972
+ }, {
973
+ default: _(() => [v(a("div", {
974
+ class: "relative inline-block align-bottom bg-white rounded-lg text-left overflow-visible shadow-xl transition-all sm:my-8 sm:align-middle sm:max-w-lg sm:w-full",
975
+ role: "dialog",
976
+ "aria-modal": "true",
977
+ "aria-labelledby": r.headingId
978
+ }, [d(e.$slots, "default")], 8, mt), [[g, r.isOpen]])]),
979
+ _: 3
980
+ })
981
+ ])], 2);
982
+ }
983
+ var gt = /*#__PURE__*/ S(dt, [["render", ht]]), _t = {}, vt = {
984
+ class: "h-7 w-7 text-red-600",
985
+ xmlns: "http://www.w3.org/2000/svg",
986
+ fill: "none",
987
+ viewBox: "0 0 24 24",
988
+ stroke: "currentColor",
989
+ "aria-hidden": "true"
990
+ };
991
+ function yt(e, t, n, r, o, s) {
992
+ return l(), i("svg", vt, [...t[0] ||= [a("path", {
993
+ "stroke-linecap": "round",
994
+ "stroke-linejoin": "round",
995
+ "stroke-width": "2",
996
+ 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
+ }, null, -1)]]);
998
+ }
999
+ var $ = /*#__PURE__*/ S(_t, [["render", yt]]), bt = {}, xt = {
1000
+ class: "h-7 w-7 text-yellow-400",
1001
+ xmlns: "http://www.w3.org/2000/svg",
1002
+ viewBox: "0 0 20 20",
1003
+ fill: "currentColor",
1004
+ "aria-hidden": "true"
1005
+ };
1006
+ function St(e, t, n, r, o, s) {
1007
+ return l(), i("svg", xt, [...t[0] ||= [a("path", {
1008
+ "fill-rule": "evenodd",
1009
+ 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",
1010
+ "clip-rule": "evenodd"
1011
+ }, null, -1)]]);
1012
+ }
1013
+ //#endregion
1014
+ //#region src/components/ConfirmationModal.vue
1015
+ var Ct = {
1016
+ components: {
1017
+ Modal: gt,
1018
+ Dangerous: $,
1019
+ Warning: /* @__PURE__ */ S(bt, [["render", St]])
1020
+ },
1021
+ emits: ["actionConfirmed", "actionCanceled"],
1022
+ props: {
1023
+ isOpen: {
1024
+ type: Boolean,
1025
+ default: !1
1026
+ },
1027
+ type: {
1028
+ type: String,
1029
+ default: "warning",
1030
+ validator: (e) => ["warning", "dangerous"].indexOf(e) !== -1
1031
+ },
1032
+ confirmationHeading: {
1033
+ type: String,
1034
+ default: ""
1035
+ },
1036
+ confirmationText: {
1037
+ type: String,
1038
+ default: ""
1039
+ },
1040
+ cancelButtonText: {
1041
+ type: String,
1042
+ default: "Отмена"
1043
+ },
1044
+ actionButtonText: {
1045
+ type: String,
1046
+ required: !0
1047
+ }
1048
+ },
1049
+ setup() {
1050
+ return { headingId: m() };
1051
+ },
1052
+ computed: {
1053
+ isDangerous() {
1054
+ return this.type === "dangerous";
1055
+ },
1056
+ isWarning() {
1057
+ return this.type === "warning";
1058
+ }
1059
+ }
1060
+ }, wt = { class: "flex bg-white px-4 pt-5 pb-4 sm:p-6 sm:pb-4" }, Tt = { class: "sm:flex sm:items-start" }, Et = { class: "mt-3 text-center sm:mt-0 sm:ml-4 sm:text-left" }, Dt = ["id"], Ot = { class: "mt-2" }, kt = { class: "text-sm text-gray-500" }, At = { class: "bg-gray-50 px-4 py-3 sm:px-6 sm:flex sm:flex-row-reverse" };
1061
+ function jt(e, t, i, o, s, u) {
1062
+ let d = f("warning"), m = f("dangerous"), h = f("modal");
1063
+ return l(), n(h, {
1064
+ "is-open": i.isOpen,
1065
+ "heading-id": o.headingId
1066
+ }, {
1067
+ default: _(() => [a("div", wt, [a("div", Tt, [a("div", { class: c(["mx-auto shrink-0 flex items-center justify-center h-12 w-12 rounded-full sm:mx-0 sm:h-10 sm:w-10", {
1068
+ "bg-red-100": u.isDangerous,
1069
+ "bg-yellow-100": u.isWarning
1070
+ }]) }, [u.isWarning ? (l(), n(d, { key: 0 })) : r("", !0), u.isDangerous ? (l(), n(m, { key: 1 })) : r("", !0)], 2), a("div", Et, [a("h3", {
1071
+ class: "text-lg leading-6 font-medium text-gray-900",
1072
+ id: o.headingId
1073
+ }, p(i.confirmationHeading), 9, Dt), a("div", Ot, [a("p", kt, p(i.confirmationText), 1)])])])]), a("div", At, [a("button", {
1074
+ type: "button",
1075
+ class: c(["w-full inline-flex justify-center rounded-md border border-transparent shadow-xs px-4 py-2 text-base font-medium text-white focus:outline-hidden focus:ring-2 focus:ring-offset-2 sm:ml-3 sm:w-auto sm:text-sm", {
1076
+ "bg-red-600 hover:bg-red-700 focus:ring-red-500": u.isDangerous,
1077
+ "bg-yellow-400 hover:bg-yellow-500 focus:ring-yellow-300": u.isWarning
1078
+ }]),
1079
+ onClick: t[0] ||= b((t) => e.$emit("actionConfirmed"), ["prevent"])
1080
+ }, p(i.actionButtonText), 3), a("button", {
1081
+ type: "button",
1082
+ class: "mt-3 w-full inline-flex justify-center rounded-md border border-gray-300 shadow-xs px-4 py-2 bg-white text-base font-medium text-gray-700 hover:bg-gray-50 focus:outline-hidden focus:ring-2 focus:ring-offset-2 focus:ring-indigo-500 sm:mt-0 sm:ml-3 sm:w-auto sm:text-sm",
1083
+ onClick: t[1] ||= b((t) => e.$emit("actionCanceled"), ["prevent"])
1084
+ }, p(i.cancelButtonText), 1)])]),
1085
+ _: 1
1086
+ }, 8, ["is-open", "heading-id"]);
1087
+ }
1088
+ var Mt = /*#__PURE__*/ S(Ct, [["render", jt]]);
794
1089
  //#endregion
795
- export { k as Dot, U as PickDay, D as Popup, ue as RussianMobileFilter, _e as Search, we as SelectDateInterval, Be as SelectSingle };
1090
+ export { nt as Closer, Mt as ConfirmationModal, k as Dot, ut as DownloadLink, $e as ErrorMessages, U as PickDay, O as Popup, de as RussianMobileFilter, ve as Search, Te as SelectDateInterval, He as SelectSingle, Ke as SmallBadge };
package/dist/style.css CHANGED
@@ -1,2 +1,2 @@
1
- @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-red-500:oklch(63.7% .237 25.331);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-blue-500:oklch(62.3% .214 259.815);--color-indigo-100:oklch(93% .034 272.788);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--leading-tight:1.25;--radius-md:.375rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--container-phone:calc(19ch + 16px)}}@layer base;@layer components{.bb-dashboard-ui,.bb-dashboard-ui *,.bb-dashboard-ui :before,.bb-dashboard-ui :after{box-sizing:border-box;border:0 solid;margin:0;padding:0}.bb-dashboard-ui button,.bb-dashboard-ui input{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}.bb-dashboard-ui button{appearance:button}.bb-dashboard-ui input{appearance:none}.bb-dashboard-ui input:focus{box-shadow:none}.bb-dashboard-ui ::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){.bb-dashboard-ui ::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}.bb-dashboard-ui ::placeholder{opacity:1}}@layer utilities{.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-0{top:0}.right-0{right:0}.left-0{left:0}.z-10{z-index:10}.z-20{z-index:20}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mt-1{margin-top:var(--spacing)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.h-2{height:calc(var(--spacing) * 2)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-9{height:calc(var(--spacing) * 9)}.h-full{height:100%}.w-2{width:calc(var(--spacing) * 2)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-9{width:calc(var(--spacing) * 9)}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.w-phone{width:var(--container-phone)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-72{min-width:calc(var(--spacing) * 72)}.flex-1{flex:1}.flex-none{flex:none}.grow{flex-grow:1}.origin-top-right{transform-origin:100% 0}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-dashed>:not(:last-child)){--tw-border-style:dashed;border-style:dashed}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-none{--tw-border-style:none;border-style:none}.border-gray-200{border-color:var(--color-gray-200)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.px-3{padding-inline:calc(var(--spacing) * 3)}.py-1{padding-block:var(--spacing)}.py-2{padding-block:calc(var(--spacing) * 2)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.whitespace-nowrap{white-space:nowrap}.text-gray-300{color:var(--color-gray-300)}.text-gray-500{color:var(--color-gray-500)}.text-green-300{color:var(--color-green-300)}.text-green-500{color:var(--color-green-500)}.text-red-500{color:var(--color-red-500)}.placeholder-gray-300::placeholder{color:var(--color-gray-300)}.opacity-0{opacity:0}.opacity-75{opacity:.75}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-sm::placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}@media (hover:hover){.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}}.focus\:z-10:focus{z-index:10}.focus\:ring-3:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500\/50:focus{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.focus\:ring-blue-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 50%, transparent)}}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}.pika-single{z-index:9999;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:relative}.pika-single:before,.pika-single:after{content:" ";display:table}.pika-single:after{clear:both}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px #00000080}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{text-align:center;position:relative}.pika-label{z-index:9999;background-color:#fff;margin:0;padding:5px 3px;font-size:14px;font-weight:700;line-height:20px;display:inline-block;position:relative;overflow:hidden}.pika-title select{cursor:pointer;z-index:9998;opacity:0;margin:0;position:absolute;top:5px;left:0}.pika-prev,.pika-next{cursor:pointer;text-indent:20px;white-space:nowrap;opacity:.5;background-color:#0000;background-position:50%;background-repeat:no-repeat;background-size:75% 75%;border:0;outline:none;width:20px;height:30px;padding:0;display:block;position:relative;overflow:hidden}.pika-prev:hover,.pika-next:hover{opacity:1}.pika-prev,.is-rtl .pika-next{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.pika-next,.is-rtl .pika-prev{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-prev.is-disabled,.pika-next.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{border-collapse:collapse;border-spacing:0;border:0;width:100%}.pika-table th,.pika-table td{width:14.2857%;padding:0}.pika-table th{color:#999;text-align:center;font-size:12px;font-weight:700;line-height:25px}.pika-button{cursor:pointer;box-sizing:border-box;color:#666;text-align:right;width:100%;height:initial;background:#f5f5f5;border:0;outline:none;margin:0;padding:5px;font-size:12px;line-height:15px;display:block}.pika-week{color:#999;font-size:11px}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button,.has-event .pika-button{color:#fff;background:#3af;border-radius:3px;font-weight:700;box-shadow:inset 0 1px 3px #178fe5}.has-event .pika-button{background:#005da9;box-shadow:inset 0 1px 3px #0076c9}.is-disabled .pika-button,.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{color:#fff;box-shadow:none;background:#6cb31d;border-radius:3px}.is-endrange .pika-button{color:#fff;box-shadow:none;background:#3af;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-selection-disabled{pointer-events:none;cursor:default}.pika-button:hover,.pika-row.pick-whole-week:hover .pika-button{color:#fff;box-shadow:none;background:#ff8000;border-radius:3px}.pika-table abbr{cursor:help;border-bottom:none}
1
+ @layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-translate-x:0;--tw-translate-y:0;--tw-translate-z:0;--tw-scale-x:1;--tw-scale-y:1;--tw-scale-z:1;--tw-divide-x-reverse:0;--tw-border-style:solid;--tw-divide-y-reverse:0;--tw-leading:initial;--tw-font-weight:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-duration:initial;--tw-ease:initial}}}@layer theme{:root,:host{--color-red-50:oklch(97.1% .013 17.38);--color-red-100:oklch(93.6% .032 17.717);--color-red-400:oklch(70.4% .191 22.216);--color-red-500:oklch(63.7% .237 25.331);--color-red-600:oklch(57.7% .245 27.325);--color-red-700:oklch(50.5% .213 27.518);--color-red-800:oklch(44.4% .177 26.899);--color-yellow-50:oklch(98.7% .026 102.212);--color-yellow-100:oklch(97.3% .071 103.193);--color-yellow-300:oklch(90.5% .182 98.111);--color-yellow-400:oklch(85.2% .199 91.936);--color-yellow-500:oklch(79.5% .184 86.047);--color-yellow-700:oklch(55.4% .135 66.442);--color-yellow-800:oklch(47.6% .114 61.907);--color-green-50:oklch(98.2% .018 155.826);--color-green-300:oklch(87.1% .15 154.449);--color-green-500:oklch(72.3% .219 149.579);--color-blue-100:oklch(93.2% .032 255.585);--color-blue-500:oklch(62.3% .214 259.815);--color-blue-800:oklch(42.4% .199 265.638);--color-indigo-100:oklch(93% .034 272.788);--color-indigo-500:oklch(58.5% .233 277.117);--color-purple-100:oklch(94.6% .033 307.174);--color-purple-600:oklch(55.8% .288 302.321);--color-purple-800:oklch(43.8% .218 303.724);--color-gray-50:oklch(98.5% .002 247.839);--color-gray-200:oklch(92.8% .006 264.531);--color-gray-300:oklch(87.2% .01 258.338);--color-gray-400:oklch(70.7% .022 261.325);--color-gray-500:oklch(55.1% .027 264.364);--color-gray-600:oklch(44.6% .03 256.802);--color-gray-700:oklch(37.3% .034 259.733);--color-gray-900:oklch(21% .034 264.665);--color-white:#fff;--spacing:.25rem;--container-lg:32rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-4xl:2.25rem;--text-4xl--line-height:calc(2.5 / 2.25);--font-weight-medium:500;--leading-tight:1.25;--radius-md:.375rem;--radius-lg:.5rem;--ease-in:cubic-bezier(.4, 0, 1, 1);--ease-out:cubic-bezier(0, 0, .2, 1);--animate-pulse:pulse 2s cubic-bezier(.4, 0, .6, 1) infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--container-phone:calc(19ch + 16px)}}@layer base;@layer components{.bb-dashboard-ui,.bb-dashboard-ui *,.bb-dashboard-ui :before,.bb-dashboard-ui :after{box-sizing:border-box;border:0 solid;margin:0;padding:0}.bb-dashboard-ui button,.bb-dashboard-ui input,button.bb-dashboard-ui{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}.bb-dashboard-ui button,button.bb-dashboard-ui{appearance:button}.bb-dashboard-ui a,a.bb-dashboard-ui{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}.bb-dashboard-ui input{appearance:none}.bb-dashboard-ui input:focus{box-shadow:none}.bb-dashboard-ui ::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){.bb-dashboard-ui ::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}.bb-dashboard-ui ::placeholder{opacity:1}}@layer utilities{.pointer-events-none{pointer-events:none}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.inset-0{inset:0}.top-0{top:0}.right-0{right:0}.left-0{left:0}.z-10{z-index:10}.z-20{z-index:20}.container{width:100%}@media (width>=40rem){.container{max-width:40rem}}@media (width>=48rem){.container{max-width:48rem}}@media (width>=64rem){.container{max-width:64rem}}@media (width>=80rem){.container{max-width:80rem}}@media (width>=96rem){.container{max-width:96rem}}.mx-auto{margin-inline:auto}.mt-1{margin-top:var(--spacing)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.ml-1{margin-left:var(--spacing)}.ml-3{margin-left:calc(var(--spacing) * 3)}.block{display:block}.flex{display:flex}.hidden{display:none}.inline-block{display:inline-block}.inline-flex{display:inline-flex}.h-2{height:calc(var(--spacing) * 2)}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-7{height:calc(var(--spacing) * 7)}.h-9{height:calc(var(--spacing) * 9)}.h-12{height:calc(var(--spacing) * 12)}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-2{width:calc(var(--spacing) * 2)}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-7{width:calc(var(--spacing) * 7)}.w-9{width:calc(var(--spacing) * 9)}.w-12{width:calc(var(--spacing) * 12)}.w-72{width:calc(var(--spacing) * 72)}.w-full{width:100%}.w-phone{width:var(--container-phone)}.min-w-24{min-width:calc(var(--spacing) * 24)}.min-w-36{min-width:calc(var(--spacing) * 36)}.min-w-72{min-width:calc(var(--spacing) * 72)}.flex-1{flex:1}.flex-none{flex:none}.shrink-0{flex-shrink:0}.grow{flex-grow:1}.origin-top-right{transform-origin:100% 0}.translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.translate-y-4{--tw-translate-y:calc(var(--spacing) * 4);translate:var(--tw-translate-x) var(--tw-translate-y)}.scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.animate-pulse{animation:var(--animate-pulse)}.cursor-default{cursor:default}.cursor-pointer{cursor:pointer}.flex-col{flex-direction:column}.items-center{align-items:center}.items-end{align-items:flex-end}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}:where(.divide-x>:not(:last-child)){--tw-divide-x-reverse:0;border-inline-style:var(--tw-border-style);border-inline-start-width:calc(1px * var(--tw-divide-x-reverse));border-inline-end-width:calc(1px * calc(1 - var(--tw-divide-x-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-dashed>:not(:last-child)){--tw-border-style:dashed;border-style:dashed}:where(.divide-gray-200>:not(:last-child)){border-color:var(--color-gray-200)}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-visible{overflow:visible}.overflow-y-auto{overflow-y:auto}.rounded-full{border-radius:2147483647px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-gray-200{border-color:var(--color-gray-200)}.border-gray-300{border-color:var(--color-gray-300)}.border-red-400{border-color:var(--color-red-400)}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-yellow-400{border-color:var(--color-yellow-400)}.bg-blue-100{background-color:var(--color-blue-100)}.bg-gray-50{background-color:var(--color-gray-50)}.bg-gray-200{background-color:var(--color-gray-200)}.bg-gray-500{background-color:var(--color-gray-500)}.bg-gray-900{background-color:var(--color-gray-900)}.bg-green-50{background-color:var(--color-green-50)}.bg-indigo-100{background-color:var(--color-indigo-100)}.bg-purple-100{background-color:var(--color-purple-100)}.bg-red-50{background-color:var(--color-red-50)}.bg-red-100{background-color:var(--color-red-100)}.bg-red-600{background-color:var(--color-red-600)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-yellow-50{background-color:var(--color-yellow-50)}.bg-yellow-100{background-color:var(--color-yellow-100)}.bg-yellow-400{background-color:var(--color-yellow-400)}.fill-current{fill:currentColor}.stroke-current{stroke:currentColor}.p-4{padding:calc(var(--spacing) * 4)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.py-1{padding-block:var(--spacing)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pt-5{padding-top:calc(var(--spacing) * 5)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pr-3{padding-right:calc(var(--spacing) * 3)}.pr-6{padding-right:calc(var(--spacing) * 6)}.pr-12{padding-right:calc(var(--spacing) * 12)}.pb-4{padding-bottom:calc(var(--spacing) * 4)}.pb-20{padding-bottom:calc(var(--spacing) * 20)}.pl-3{padding-left:calc(var(--spacing) * 3)}.text-center{text-align:center}.text-left{text-align:left}.align-bottom{vertical-align:bottom}.text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-none{--tw-leading:1;line-height:1}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.whitespace-nowrap{white-space:nowrap}.text-blue-800{color:var(--color-blue-800)}.text-gray-300{color:var(--color-gray-300)}.text-gray-400{color:var(--color-gray-400)}.text-gray-500{color:var(--color-gray-500)}.text-gray-700{color:var(--color-gray-700)}.text-gray-900{color:var(--color-gray-900)}.text-green-300{color:var(--color-green-300)}.text-green-500{color:var(--color-green-500)}.text-purple-800{color:var(--color-purple-800)}.text-red-400{color:var(--color-red-400)}.text-red-500{color:var(--color-red-500)}.text-red-600{color:var(--color-red-600)}.text-red-700{color:var(--color-red-700)}.text-red-800{color:var(--color-red-800)}.text-white{color:var(--color-white)}.text-yellow-400{color:var(--color-yellow-400)}.text-yellow-700{color:var(--color-yellow-700)}.text-yellow-800{color:var(--color-yellow-800)}.placeholder-gray-300::placeholder{color:var(--color-gray-300)}.opacity-0{opacity:0}.opacity-75{opacity:.75}.opacity-100{opacity:1}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xl{--tw-shadow:0 20px 25px -5px var(--tw-shadow-color,#0000001a), 0 8px 10px -6px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-xs{--tw-shadow:0 1px 2px 0 var(--tw-shadow-color,#0000000d);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-opacity{transition-property:opacity;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-75{--tw-duration:75ms;transition-duration:75ms}.duration-100{--tw-duration:.1s;transition-duration:.1s}.duration-200{--tw-duration:.2s;transition-duration:.2s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.ease-in{--tw-ease:var(--ease-in);transition-timing-function:var(--ease-in)}.ease-out{--tw-ease:var(--ease-out);transition-timing-function:var(--ease-out)}.select-none{-webkit-user-select:none;user-select:none}.placeholder\:text-sm::placeholder{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}@media (hover:hover){.hover\:bg-gray-50:hover{background-color:var(--color-gray-50)}.hover\:bg-indigo-100:hover{background-color:var(--color-indigo-100)}.hover\:bg-red-700:hover{background-color:var(--color-red-700)}.hover\:bg-yellow-500:hover{background-color:var(--color-yellow-500)}.hover\:text-gray-400:hover{color:var(--color-gray-400)}.hover\:text-gray-600:hover{color:var(--color-gray-600)}.hover\:text-purple-600:hover{color:var(--color-purple-600)}}.focus\:z-10:focus{z-index:10}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-3:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-blue-500\/50:focus{--tw-ring-color:#3080ff80}@supports (color:color-mix(in lab, red, red)){.focus\:ring-blue-500\/50:focus{--tw-ring-color:color-mix(in oklab, var(--color-blue-500) 50%, transparent)}}.focus\:ring-indigo-500:focus{--tw-ring-color:var(--color-indigo-500)}.focus\:ring-red-500:focus{--tw-ring-color:var(--color-red-500)}.focus\:ring-yellow-300:focus{--tw-ring-color:var(--color-yellow-300)}.focus\:ring-offset-2:focus{--tw-ring-offset-width:2px;--tw-ring-offset-shadow:var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color)}.focus\:outline-hidden:focus{--tw-outline-style:none;outline-style:none}@media (forced-colors:active){.focus\:outline-hidden:focus{outline-offset:2px;outline:2px solid #0000}}@media (width>=40rem){.sm\:mx-0{margin-inline:0}.sm\:my-8{margin-block:calc(var(--spacing) * 8)}.sm\:mt-0{margin-top:0}.sm\:ml-3{margin-left:calc(var(--spacing) * 3)}.sm\:ml-4{margin-left:calc(var(--spacing) * 4)}.sm\:block{display:block}.sm\:flex{display:flex}.sm\:inline-block{display:inline-block}.sm\:h-10{height:calc(var(--spacing) * 10)}.sm\:h-screen{height:100vh}.sm\:w-10{width:calc(var(--spacing) * 10)}.sm\:w-auto{width:auto}.sm\:w-full{width:100%}.sm\:max-w-lg{max-width:var(--container-lg)}.sm\:translate-y-0{--tw-translate-y:0px;translate:var(--tw-translate-x) var(--tw-translate-y)}.sm\:scale-95{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.sm\:scale-100{--tw-scale-x:100%;--tw-scale-y:100%;--tw-scale-z:100%;scale:var(--tw-scale-x) var(--tw-scale-y)}.sm\:flex-row-reverse{flex-direction:row-reverse}.sm\:items-start{align-items:flex-start}.sm\:p-0{padding:0}.sm\:p-6{padding:calc(var(--spacing) * 6)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}.sm\:pb-4{padding-bottom:calc(var(--spacing) * 4)}.sm\:text-left{text-align:left}.sm\:align-middle{vertical-align:middle}.sm\:text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-divide-x-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@property --tw-ease{syntax:"*";inherits:false}@keyframes pulse{50%{opacity:.5}}.pika-single{z-index:9999;color:#333;background:#fff;border:1px solid #ccc;border-bottom-color:#bbb;font-family:Helvetica Neue,Helvetica,Arial,sans-serif;display:block;position:relative}.pika-single:before,.pika-single:after{content:" ";display:table}.pika-single:after{clear:both}.pika-single.is-hidden{display:none}.pika-single.is-bound{position:absolute;box-shadow:0 5px 15px -5px #00000080}.pika-lendar{float:left;width:240px;margin:8px}.pika-title{text-align:center;position:relative}.pika-label{z-index:9999;background-color:#fff;margin:0;padding:5px 3px;font-size:14px;font-weight:700;line-height:20px;display:inline-block;position:relative;overflow:hidden}.pika-title select{cursor:pointer;z-index:9998;opacity:0;margin:0;position:absolute;top:5px;left:0}.pika-prev,.pika-next{cursor:pointer;text-indent:20px;white-space:nowrap;opacity:.5;background-color:#0000;background-position:50%;background-repeat:no-repeat;background-size:75% 75%;border:0;outline:none;width:20px;height:30px;padding:0;display:block;position:relative;overflow:hidden}.pika-prev:hover,.pika-next:hover{opacity:1}.pika-prev,.is-rtl .pika-next{float:left;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAUklEQVR42u3VMQoAIBADQf8Pgj+OD9hG2CtONJB2ymQkKe0HbwAP0xucDiQWARITIDEBEnMgMQ8S8+AqBIl6kKgHiXqQqAeJepBo/z38J/U0uAHlaBkBl9I4GwAAAABJRU5ErkJggg==)}.pika-next,.is-rtl .pika-prev{float:right;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAeCAYAAAAsEj5rAAAAU0lEQVR42u3VOwoAMAgE0dwfAnNjU26bYkBCFGwfiL9VVWoO+BJ4Gf3gtsEKKoFBNTCoCAYVwaAiGNQGMUHMkjGbgjk2mIONuXo0nC8XnCf1JXgArVIZAQh5TKYAAAAASUVORK5CYII=)}.pika-prev.is-disabled,.pika-next.is-disabled{cursor:default;opacity:.2}.pika-select{display:inline-block}.pika-table{border-collapse:collapse;border-spacing:0;border:0;width:100%}.pika-table th,.pika-table td{width:14.2857%;padding:0}.pika-table th{color:#999;text-align:center;font-size:12px;font-weight:700;line-height:25px}.pika-button{cursor:pointer;box-sizing:border-box;color:#666;text-align:right;width:100%;height:initial;background:#f5f5f5;border:0;outline:none;margin:0;padding:5px;font-size:12px;line-height:15px;display:block}.pika-week{color:#999;font-size:11px}.is-today .pika-button{color:#3af;font-weight:700}.is-selected .pika-button,.has-event .pika-button{color:#fff;background:#3af;border-radius:3px;font-weight:700;box-shadow:inset 0 1px 3px #178fe5}.has-event .pika-button{background:#005da9;box-shadow:inset 0 1px 3px #0076c9}.is-disabled .pika-button,.is-inrange .pika-button{background:#d5e9f7}.is-startrange .pika-button{color:#fff;box-shadow:none;background:#6cb31d;border-radius:3px}.is-endrange .pika-button{color:#fff;box-shadow:none;background:#3af;border-radius:3px}.is-disabled .pika-button{pointer-events:none;cursor:default;color:#999;opacity:.3}.is-outside-current-month .pika-button{color:#999;opacity:.3}.is-selection-disabled{pointer-events:none;cursor:default}.pika-button:hover,.pika-row.pick-whole-week:hover .pika-button{color:#fff;box-shadow:none;background:#ff8000;border-radius:3px}.pika-table abbr{cursor:help;border-bottom:none}
2
2
  /*$vite$:1*/
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@boobooking/dashboard-ui-components",
3
- "version": "0.2.1",
4
- "description": "Компоненты фильтров дашборда на Vue 3",
3
+ "version": "0.4.0",
4
+ "description": "Компоненты дашборда на Vue 3",
5
5
  "keywords": [
6
6
  "vue",
7
7
  "vue3",
@@ -30,7 +30,7 @@
30
30
  "playground": "npm run build && vite --config vite.playground.config.js"
31
31
  },
32
32
  "peerDependencies": {
33
- "vue": "^3.2"
33
+ "vue": "^3.5.0"
34
34
  },
35
35
  "dependencies": {
36
36
  "imask": "^7.6.1",
@@ -40,6 +40,8 @@
40
40
  "@tailwindcss/forms": "^0.5.10",
41
41
  "@tailwindcss/vite": "^4.3.3",
42
42
  "@vitejs/plugin-vue": "^6.0.8",
43
+ "@vue/test-utils": "^2.5.1",
44
+ "happy-dom": "^20.14.5",
43
45
  "tailwindcss": "^4.3.3",
44
46
  "vite": "^8.3.0",
45
47
  "vitest": "^5.0.0",