@1337exp/taoui 1.5.0 → 1.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.
package/dist/index.cjs CHANGED
@@ -2,17 +2,17 @@
2
2
  typeof exports === "object" && typeof module !== "undefined" ? factory(exports, require("vue")) : typeof define === "function" && define.amd ? define(["exports", "vue"], factory) : (global = typeof globalThis !== "undefined" ? globalThis : global || self, factory(global.TaoUI = {}, global.Vue));
3
3
  })(this, function(exports2, vue) {
4
4
  "use strict";
5
- const _hoisted_1$M = ["type", "disabled"];
6
- const _hoisted_2$F = {
5
+ const _hoisted_1$N = ["type", "disabled"];
6
+ const _hoisted_2$G = {
7
7
  key: 0,
8
8
  class: "tao-button__loader"
9
9
  };
10
- const _hoisted_3$y = {
10
+ const _hoisted_3$A = {
11
11
  key: 1,
12
12
  class: "tao-button__icon"
13
13
  };
14
- const _hoisted_4$r = { class: "tao-button__content" };
15
- const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({
14
+ const _hoisted_4$u = { class: "tao-button__content" };
15
+ const _sfc_main$V = /* @__PURE__ */ vue.defineComponent({
16
16
  ...{ name: "TaoButton" },
17
17
  __name: "TaoButton",
18
18
  props: {
@@ -51,12 +51,12 @@
51
51
  disabled: __props.disabled || __props.loading,
52
52
  onClick: handleClick
53
53
  }, [
54
- __props.loading ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$F)) : vue.createCommentVNode("", true),
55
- __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$y, vue.toDisplayString(__props.icon), 1)) : vue.createCommentVNode("", true),
56
- vue.createElementVNode("span", _hoisted_4$r, [
54
+ __props.loading ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$G)) : vue.createCommentVNode("", true),
55
+ __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$A, vue.toDisplayString(__props.icon), 1)) : vue.createCommentVNode("", true),
56
+ vue.createElementVNode("span", _hoisted_4$u, [
57
57
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
58
58
  ])
59
- ], 10, _hoisted_1$M);
59
+ ], 10, _hoisted_1$N);
60
60
  };
61
61
  }
62
62
  });
@@ -67,8 +67,8 @@
67
67
  }
68
68
  return target;
69
69
  };
70
- const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__scopeId", "data-v-c3034f66"]]);
71
- const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
70
+ const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$V, [["__scopeId", "data-v-c3034f66"]]);
71
+ const _sfc_main$U = /* @__PURE__ */ vue.defineComponent({
72
72
  ...{ name: "TaoBlock" },
73
73
  __name: "TaoBlock",
74
74
  props: {
@@ -100,24 +100,24 @@
100
100
  };
101
101
  }
102
102
  });
103
- const TaoBlock = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__scopeId", "data-v-feb87e36"]]);
103
+ const TaoBlock = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__scopeId", "data-v-feb87e36"]]);
104
104
  const formFieldKey = Symbol("taoFormField");
105
- const _hoisted_1$L = { class: "tao-input-wrapper" };
106
- const _hoisted_2$E = ["for"];
107
- const _hoisted_3$x = {
105
+ const _hoisted_1$M = { class: "tao-input-wrapper" };
106
+ const _hoisted_2$F = ["for"];
107
+ const _hoisted_3$z = {
108
108
  key: 0,
109
109
  class: "tao-input__affix tao-input__affix--prefix"
110
110
  };
111
- const _hoisted_4$q = ["id", "type", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby"];
112
- const _hoisted_5$i = {
111
+ const _hoisted_4$t = ["id", "type", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby"];
112
+ const _hoisted_5$m = {
113
113
  key: 1,
114
114
  class: "tao-input__affix tao-input__affix--suffix"
115
115
  };
116
- const _hoisted_6$e = {
116
+ const _hoisted_6$g = {
117
117
  key: 1,
118
118
  class: "tao-input__error"
119
119
  };
120
- const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
120
+ const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
121
121
  ...{ name: "TaoInput" },
122
122
  __name: "TaoInput",
123
123
  props: {
@@ -153,12 +153,12 @@
153
153
  emit("focus", event);
154
154
  }
155
155
  return (_ctx, _cache) => {
156
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$L, [
156
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$M, [
157
157
  __props.label && !vue.unref(field) ? (vue.openBlock(), vue.createElementBlock("label", {
158
158
  key: 0,
159
159
  class: "tao-input__label",
160
160
  for: controlId.value
161
- }, vue.toDisplayString(__props.label), 9, _hoisted_2$E)) : vue.createCommentVNode("", true),
161
+ }, vue.toDisplayString(__props.label), 9, _hoisted_2$F)) : vue.createCommentVNode("", true),
162
162
  vue.createElementVNode("div", {
163
163
  class: vue.normalizeClass(["tao-input-shell", {
164
164
  "tao-input-shell--focused": focused.value,
@@ -168,7 +168,7 @@
168
168
  "tao-input-shell--suffix": _ctx.$slots.suffix
169
169
  }])
170
170
  }, [
171
- _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$x, [
171
+ _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$z, [
172
172
  vue.renderSlot(_ctx.$slots, "prefix", {}, void 0, true)
173
173
  ])) : vue.createCommentVNode("", true),
174
174
  vue.createElementVNode("input", {
@@ -183,27 +183,27 @@
183
183
  onInput: handleInput,
184
184
  onBlur: handleBlur,
185
185
  onFocus: handleFocus
186
- }, null, 42, _hoisted_4$q),
187
- _ctx.$slots.suffix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$i, [
186
+ }, null, 42, _hoisted_4$t),
187
+ _ctx.$slots.suffix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$m, [
188
188
  vue.renderSlot(_ctx.$slots, "suffix", {}, void 0, true)
189
189
  ])) : vue.createCommentVNode("", true)
190
190
  ], 2),
191
- __props.error && __props.errorMessage ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$e, vue.toDisplayString(__props.errorMessage), 1)) : vue.createCommentVNode("", true)
191
+ __props.error && __props.errorMessage ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$g, vue.toDisplayString(__props.errorMessage), 1)) : vue.createCommentVNode("", true)
192
192
  ]);
193
193
  };
194
194
  }
195
195
  });
196
- const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__scopeId", "data-v-b522e041"]]);
197
- const _hoisted_1$K = {
196
+ const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__scopeId", "data-v-b522e041"]]);
197
+ const _hoisted_1$L = {
198
198
  key: 0,
199
199
  class: "tao-input-group__addon tao-input-group__addon--before"
200
200
  };
201
- const _hoisted_2$D = { class: "tao-input-group__field" };
202
- const _hoisted_3$w = {
201
+ const _hoisted_2$E = { class: "tao-input-group__field" };
202
+ const _hoisted_3$y = {
203
203
  key: 1,
204
204
  class: "tao-input-group__addon tao-input-group__addon--after"
205
205
  };
206
- const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
206
+ const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
207
207
  ...{ name: "TaoInputGroup" },
208
208
  __name: "TaoInputGroup",
209
209
  setup(__props) {
@@ -225,28 +225,30 @@
225
225
  onFocusin: onFocusIn,
226
226
  onFocusout: onFocusOut
227
227
  }, [
228
- _ctx.$slots.before ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$K, [
228
+ _ctx.$slots.before ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$L, [
229
229
  vue.renderSlot(_ctx.$slots, "before", {}, void 0, true)
230
230
  ])) : vue.createCommentVNode("", true),
231
- vue.createElementVNode("div", _hoisted_2$D, [
231
+ vue.createElementVNode("div", _hoisted_2$E, [
232
232
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
233
233
  ]),
234
- _ctx.$slots.after ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$w, [
234
+ _ctx.$slots.after ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$y, [
235
235
  vue.renderSlot(_ctx.$slots, "after", {}, void 0, true)
236
236
  ])) : vue.createCommentVNode("", true)
237
237
  ], 34);
238
238
  };
239
239
  }
240
240
  });
241
- const TaoInputGroup = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-f06bb3b1"]]);
242
- const _hoisted_1$J = ["id", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
243
- const _hoisted_2$C = {
241
+ const TaoInputGroup = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__scopeId", "data-v-f06bb3b1"]]);
242
+ const _hoisted_1$K = ["id", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
243
+ const _hoisted_2$D = {
244
244
  key: 0,
245
245
  class: "tao-input-number__steppers"
246
246
  };
247
- const _hoisted_3$v = ["disabled"];
248
- const _hoisted_4$p = ["disabled"];
249
- const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
247
+ const _hoisted_3$x = ["aria-label", "disabled"];
248
+ const _hoisted_4$s = { "aria-hidden": "true" };
249
+ const _hoisted_5$l = ["aria-label", "disabled"];
250
+ const _hoisted_6$f = { "aria-hidden": "true" };
251
+ const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
250
252
  ...{ name: "TaoInputNumber" },
251
253
  __name: "TaoInputNumber",
252
254
  props: {
@@ -257,7 +259,9 @@
257
259
  precision: {},
258
260
  disabled: { type: Boolean, default: false },
259
261
  placeholder: { default: "" },
260
- controls: { type: Boolean, default: true }
262
+ controls: { type: Boolean, default: true },
263
+ incrementLabel: { default: "Увеличить" },
264
+ decrementLabel: { default: "Уменьшить" }
261
265
  },
262
266
  emits: ["update:modelValue", "blur", "focus"],
263
267
  setup(__props, { emit: __emit }) {
@@ -395,34 +399,48 @@
395
399
  onFocus,
396
400
  onBlur,
397
401
  onKeydown
398
- }, null, 40, _hoisted_1$J),
399
- __props.controls ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$C, [
402
+ }, null, 40, _hoisted_1$K),
403
+ __props.controls ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$D, [
400
404
  vue.createElementVNode("button", {
401
405
  type: "button",
402
406
  class: "tao-input-number__step",
403
- "aria-label": "Увеличить",
407
+ "aria-label": __props.incrementLabel,
404
408
  tabindex: "-1",
405
409
  disabled: __props.disabled || atMax.value,
406
410
  onClick: _cache[0] || (_cache[0] = ($event) => bump(1))
407
- }, " + ", 8, _hoisted_3$v),
411
+ }, [
412
+ vue.createElementVNode("span", _hoisted_4$s, [
413
+ vue.renderSlot(_ctx.$slots, "increment-icon", {}, () => [
414
+ _cache[2] || (_cache[2] = vue.createTextVNode("+", -1))
415
+ ], true)
416
+ ])
417
+ ], 8, _hoisted_3$x),
408
418
  vue.createElementVNode("button", {
409
419
  type: "button",
410
420
  class: "tao-input-number__step",
411
- "aria-label": "Уменьшить",
421
+ "aria-label": __props.decrementLabel,
412
422
  tabindex: "-1",
413
423
  disabled: __props.disabled || atMin.value,
414
424
  onClick: _cache[1] || (_cache[1] = ($event) => bump(-1))
415
- }, " − ", 8, _hoisted_4$p)
425
+ }, [
426
+ vue.createElementVNode("span", _hoisted_6$f, [
427
+ vue.renderSlot(_ctx.$slots, "decrement-icon", {}, () => [
428
+ _cache[3] || (_cache[3] = vue.createTextVNode("−", -1))
429
+ ], true)
430
+ ])
431
+ ], 8, _hoisted_5$l)
416
432
  ])) : vue.createCommentVNode("", true)
417
433
  ], 2);
418
434
  };
419
435
  }
420
436
  });
421
- const TaoInputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-55b65a4d"]]);
422
- const _hoisted_1$I = ["aria-label", "disabled"];
423
- const _hoisted_2$B = ["id", "value", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
424
- const _hoisted_3$u = ["disabled"];
425
- const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
437
+ const TaoInputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-331dd958"]]);
438
+ const _hoisted_1$J = ["aria-label", "disabled"];
439
+ const _hoisted_2$C = { "aria-hidden": "true" };
440
+ const _hoisted_3$w = ["id", "value", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
441
+ const _hoisted_4$r = ["aria-label", "disabled"];
442
+ const _hoisted_5$k = { "aria-hidden": "true" };
443
+ const _sfc_main$Q = /* @__PURE__ */ vue.defineComponent({
426
444
  ...{ name: "TaoQuantity" },
427
445
  __name: "TaoQuantity",
428
446
  props: {
@@ -431,7 +449,10 @@
431
449
  max: {},
432
450
  disabled: { type: Boolean, default: false },
433
451
  allowRemove: { type: Boolean, default: true },
434
- forceMaxLimit: { type: Boolean, default: true }
452
+ forceMaxLimit: { type: Boolean, default: true },
453
+ decrementLabel: { default: "Уменьшить" },
454
+ removeLabel: { default: "Убрать" },
455
+ incrementLabel: { default: "Увеличить" }
435
456
  },
436
457
  emits: ["update:modelValue", "change", "dec", "inc", "blur", "focus"],
437
458
  setup(__props, { emit: __emit }) {
@@ -540,7 +561,7 @@
540
561
  const atMax = vue.computed(() => props.modelValue >= ceiling.value);
541
562
  const minusDisabled = vue.computed(() => props.disabled || !props.allowRemove && atMin.value);
542
563
  const plusDisabled = vue.computed(() => props.disabled || atMax.value);
543
- const minusLabel = vue.computed(() => atMin.value && props.allowRemove ? "Убрать" : "Уменьшить");
564
+ const minusLabel = vue.computed(() => atMin.value && props.allowRemove ? props.removeLabel : props.decrementLabel);
544
565
  return (_ctx, _cache) => {
545
566
  return vue.openBlock(), vue.createElementBlock("div", {
546
567
  class: vue.normalizeClass(["tao-quantity", {
@@ -555,7 +576,13 @@
555
576
  "aria-label": minusLabel.value,
556
577
  disabled: minusDisabled.value,
557
578
  onClick: onDec
558
- }, " − ", 8, _hoisted_1$I),
579
+ }, [
580
+ vue.createElementVNode("span", _hoisted_2$C, [
581
+ vue.renderSlot(_ctx.$slots, "decrement-icon", {}, () => [
582
+ _cache[0] || (_cache[0] = vue.createTextVNode("−", -1))
583
+ ], true)
584
+ ])
585
+ ], 8, _hoisted_1$J),
559
586
  vue.createElementVNode("input", {
560
587
  id: controlId.value,
561
588
  class: "tao-quantity__input",
@@ -575,49 +602,55 @@
575
602
  onFocus,
576
603
  onBlur,
577
604
  onKeydown
578
- }, null, 40, _hoisted_2$B),
605
+ }, null, 40, _hoisted_3$w),
579
606
  vue.createElementVNode("button", {
580
607
  type: "button",
581
608
  class: "tao-quantity__btn tao-quantity__btn--inc",
582
- "aria-label": "Увеличить",
609
+ "aria-label": __props.incrementLabel,
583
610
  disabled: plusDisabled.value,
584
611
  onClick: onInc
585
- }, " + ", 8, _hoisted_3$u)
612
+ }, [
613
+ vue.createElementVNode("span", _hoisted_5$k, [
614
+ vue.renderSlot(_ctx.$slots, "increment-icon", {}, () => [
615
+ _cache[1] || (_cache[1] = vue.createTextVNode("+", -1))
616
+ ], true)
617
+ ])
618
+ ], 8, _hoisted_4$r)
586
619
  ], 2);
587
620
  };
588
621
  }
589
622
  });
590
- const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-df6baf04"]]);
591
- const _hoisted_1$H = {
623
+ const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-c9c7c8b4"]]);
624
+ const _hoisted_1$I = {
592
625
  key: 0,
593
626
  class: "tao-card__cover"
594
627
  };
595
- const _hoisted_2$A = {
628
+ const _hoisted_2$B = {
596
629
  key: 0,
597
630
  class: "tao-card__header-title"
598
631
  };
599
- const _hoisted_3$t = { key: 0 };
600
- const _hoisted_4$o = {
632
+ const _hoisted_3$v = { key: 0 };
633
+ const _hoisted_4$q = {
601
634
  key: 2,
602
635
  class: "tao-card__title-block"
603
636
  };
604
- const _hoisted_5$h = {
637
+ const _hoisted_5$j = {
605
638
  key: 0,
606
639
  class: "tao-card__title"
607
640
  };
608
- const _hoisted_6$d = {
641
+ const _hoisted_6$e = {
609
642
  key: 1,
610
643
  class: "tao-card__sub"
611
644
  };
612
- const _hoisted_7$9 = {
645
+ const _hoisted_7$c = {
613
646
  key: 3,
614
647
  class: "tao-card__body"
615
648
  };
616
- const _hoisted_8$7 = {
649
+ const _hoisted_8$b = {
617
650
  key: 4,
618
651
  class: "tao-card__footer"
619
652
  };
620
- const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
653
+ const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
621
654
  ...{ name: "TaoCard" },
622
655
  __name: "TaoCard",
623
656
  props: {
@@ -649,14 +682,14 @@
649
682
  }]),
650
683
  style: vue.normalizeStyle(radiusStyle.value)
651
684
  }, [
652
- _ctx.$slots.cover ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$H, [
685
+ _ctx.$slots.cover ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$I, [
653
686
  vue.renderSlot(_ctx.$slots, "cover", {}, void 0, true)
654
687
  ])) : vue.createCommentVNode("", true),
655
688
  vue.createElementVNode("div", {
656
689
  class: "tao-card__content",
657
690
  style: vue.normalizeStyle(paddingStyle.value)
658
691
  }, [
659
- _ctx.$slots.headerTitle ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_2$A, [
692
+ _ctx.$slots.headerTitle ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_2$B, [
660
693
  vue.renderSlot(_ctx.$slots, "headerTitle", {}, void 0, true)
661
694
  ])) : vue.createCommentVNode("", true),
662
695
  _ctx.$slots.header || _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -666,22 +699,22 @@
666
699
  vue.createElementVNode("span", null, [
667
700
  vue.renderSlot(_ctx.$slots, "header", {}, void 0, true)
668
701
  ]),
669
- _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$t, [
702
+ _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$v, [
670
703
  vue.renderSlot(_ctx.$slots, "headerSecondary", {}, void 0, true)
671
704
  ])) : vue.createCommentVNode("", true)
672
705
  ], 2)) : vue.createCommentVNode("", true),
673
- _ctx.$slots.title || _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$o, [
674
- _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_5$h, [
706
+ _ctx.$slots.title || _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$q, [
707
+ _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_5$j, [
675
708
  vue.renderSlot(_ctx.$slots, "title", {}, void 0, true)
676
709
  ])) : vue.createCommentVNode("", true),
677
- _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$d, [
710
+ _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$e, [
678
711
  vue.renderSlot(_ctx.$slots, "sub", {}, void 0, true)
679
712
  ])) : vue.createCommentVNode("", true)
680
713
  ])) : vue.createCommentVNode("", true),
681
- _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$9, [
714
+ _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$c, [
682
715
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
683
716
  ])) : vue.createCommentVNode("", true),
684
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$7, [
717
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$b, [
685
718
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
686
719
  ])) : vue.createCommentVNode("", true)
687
720
  ], 4)
@@ -689,7 +722,7 @@
689
722
  };
690
723
  }
691
724
  });
692
- const TaoCard = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["__scopeId", "data-v-2ff3d055"]]);
725
+ const TaoCard = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-2ff3d055"]]);
693
726
  const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
694
727
  function getFocusable(root) {
695
728
  return [...root.querySelectorAll(FOCUSABLE)].filter(
@@ -718,25 +751,28 @@
718
751
  first.focus();
719
752
  }
720
753
  }
721
- const _hoisted_1$G = ["aria-labelledby"];
722
- const _hoisted_2$z = {
754
+ const _hoisted_1$H = ["aria-labelledby"];
755
+ const _hoisted_2$A = {
723
756
  key: 0,
724
757
  class: "tao-modal__header"
725
758
  };
726
- const _hoisted_3$s = ["id"];
727
- const _hoisted_4$n = { key: 1 };
728
- const _hoisted_5$g = { class: "tao-modal__content" };
729
- const _hoisted_6$c = {
759
+ const _hoisted_3$u = ["id"];
760
+ const _hoisted_4$p = { key: 1 };
761
+ const _hoisted_5$i = ["aria-label"];
762
+ const _hoisted_6$d = { "aria-hidden": "true" };
763
+ const _hoisted_7$b = { class: "tao-modal__content" };
764
+ const _hoisted_8$a = {
730
765
  key: 1,
731
766
  class: "tao-modal__footer"
732
767
  };
733
- const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
768
+ const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
734
769
  ...{ name: "TaoModal" },
735
770
  __name: "TaoModal",
736
771
  props: {
737
772
  modelValue: { type: Boolean },
738
773
  title: { default: "" },
739
- closable: { type: Boolean, default: true }
774
+ closable: { type: Boolean, default: true },
775
+ closeLabel: { default: "Закрыть" }
740
776
  },
741
777
  emits: ["update:modelValue", "close"],
742
778
  setup(__props, { emit: __emit }) {
@@ -830,29 +866,35 @@
830
866
  "aria-labelledby": __props.title ? vue.unref(titleId) : void 0,
831
867
  tabindex: "-1"
832
868
  }, [
833
- __props.title || _ctx.$slots.header || __props.closable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$z, [
869
+ __props.title || _ctx.$slots.header || __props.closable ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_2$A, [
834
870
  vue.renderSlot(_ctx.$slots, "header", {}, () => [
835
871
  __props.title ? (vue.openBlock(), vue.createElementBlock("h2", {
836
872
  key: 0,
837
873
  id: vue.unref(titleId),
838
874
  class: "tao-modal__title"
839
- }, vue.toDisplayString(__props.title), 9, _hoisted_3$s)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$n))
875
+ }, vue.toDisplayString(__props.title), 9, _hoisted_3$u)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$p))
840
876
  ], true),
841
877
  __props.closable ? (vue.openBlock(), vue.createElementBlock("button", {
842
878
  key: 0,
843
879
  type: "button",
844
880
  class: "tao-modal__close",
845
- "aria-label": "Закрыть",
881
+ "aria-label": __props.closeLabel,
846
882
  onClick: close
847
- }, " × ")) : vue.createCommentVNode("", true)
883
+ }, [
884
+ vue.createElementVNode("span", _hoisted_6$d, [
885
+ vue.renderSlot(_ctx.$slots, "close-icon", {}, () => [
886
+ _cache[0] || (_cache[0] = vue.createTextVNode("×", -1))
887
+ ], true)
888
+ ])
889
+ ], 8, _hoisted_5$i)) : vue.createCommentVNode("", true)
848
890
  ])) : vue.createCommentVNode("", true),
849
- vue.createElementVNode("div", _hoisted_5$g, [
891
+ vue.createElementVNode("div", _hoisted_7$b, [
850
892
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
851
893
  ]),
852
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$c, [
894
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$a, [
853
895
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
854
896
  ])) : vue.createCommentVNode("", true)
855
- ], 8, _hoisted_1$G)
897
+ ], 8, _hoisted_1$H)
856
898
  ], 32)) : vue.createCommentVNode("", true)
857
899
  ]),
858
900
  _: 3
@@ -861,11 +903,11 @@
861
903
  };
862
904
  }
863
905
  });
864
- const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["__scopeId", "data-v-0cffe849"]]);
865
- const _hoisted_1$F = { class: "tao-tabs" };
866
- const _hoisted_2$y = ["id", "aria-selected", "aria-controls", "tabindex", "disabled", "onClick"];
867
- const _hoisted_3$r = ["id", "aria-labelledby"];
868
- const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
906
+ const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$O, [["__scopeId", "data-v-67d4b1e8"]]);
907
+ const _hoisted_1$G = { class: "tao-tabs" };
908
+ const _hoisted_2$z = ["id", "aria-selected", "aria-controls", "tabindex", "disabled", "onClick"];
909
+ const _hoisted_3$t = ["id", "aria-labelledby"];
910
+ const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
869
911
  ...{ name: "TaoTabs" },
870
912
  __name: "TaoTabs",
871
913
  props: {
@@ -929,7 +971,7 @@
929
971
  }
930
972
  }
931
973
  return (_ctx, _cache) => {
932
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$F, [
974
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$G, [
933
975
  vue.createElementVNode("div", {
934
976
  class: "tao-tabs__list",
935
977
  role: "tablist",
@@ -954,7 +996,7 @@
954
996
  }, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
955
997
  vue.createTextVNode(vue.toDisplayString(tab.label), 1)
956
998
  ], 64))
957
- ], 8, _hoisted_2$y);
999
+ ], 8, _hoisted_2$z);
958
1000
  }), 128))
959
1001
  ], 32),
960
1002
  vue.createElementVNode("div", {
@@ -964,12 +1006,12 @@
964
1006
  "aria-labelledby": tabId(__props.modelValue)
965
1007
  }, [
966
1008
  vue.renderSlot(_ctx.$slots, "default", { activeTab: __props.modelValue }, void 0, true)
967
- ], 8, _hoisted_3$r)
1009
+ ], 8, _hoisted_3$t)
968
1010
  ]);
969
1011
  };
970
1012
  }
971
1013
  });
972
- const TaoTabs = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["__scopeId", "data-v-bf16735e"]]);
1014
+ const TaoTabs = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["__scopeId", "data-v-bf16735e"]]);
973
1015
  function listenFocusLoss(onLoss) {
974
1016
  function onVisibilityChange() {
975
1017
  if (document.hidden) {
@@ -985,7 +1027,7 @@
985
1027
  window.removeEventListener("pagehide", onLoss);
986
1028
  };
987
1029
  }
988
- const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
1030
+ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
989
1031
  ...{ name: "TaoTooltip" },
990
1032
  __name: "TaoTooltip",
991
1033
  props: {
@@ -1147,9 +1189,9 @@
1147
1189
  };
1148
1190
  }
1149
1191
  });
1150
- const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-926dfa73"]]);
1151
- const _hoisted_1$E = { class: "tao-popover" };
1152
- const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1192
+ const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$M, [["__scopeId", "data-v-926dfa73"]]);
1193
+ const _hoisted_1$F = { class: "tao-popover" };
1194
+ const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
1153
1195
  ...{ name: "TaoPopover" },
1154
1196
  __name: "TaoPopover",
1155
1197
  props: {
@@ -1307,7 +1349,7 @@
1307
1349
  window.removeEventListener("scroll", onViewportChange, true);
1308
1350
  });
1309
1351
  return (_ctx, _cache) => {
1310
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, [
1352
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$F, [
1311
1353
  vue.createElementVNode("div", {
1312
1354
  ref_key: "triggerRef",
1313
1355
  ref: triggerRef,
@@ -1336,17 +1378,17 @@
1336
1378
  };
1337
1379
  }
1338
1380
  });
1339
- const TaoPopover = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["__scopeId", "data-v-e4ead301"]]);
1381
+ const TaoPopover = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-e4ead301"]]);
1340
1382
  const spoilerGroupKey = Symbol("taoSpoilerGroup");
1341
- const _hoisted_1$D = { class: "tao-spoiler" };
1342
- const _hoisted_2$x = ["aria-expanded", "aria-controls"];
1343
- const _hoisted_3$q = {
1383
+ const _hoisted_1$E = { class: "tao-spoiler" };
1384
+ const _hoisted_2$y = ["aria-expanded", "aria-controls"];
1385
+ const _hoisted_3$s = {
1344
1386
  key: 0,
1345
1387
  class: "tao-spoiler__title"
1346
1388
  };
1347
- const _hoisted_4$m = ["id"];
1348
- const _hoisted_5$f = { class: "tao-spoiler__content-inner" };
1349
- const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1389
+ const _hoisted_4$o = ["id"];
1390
+ const _hoisted_5$h = { class: "tao-spoiler__content-inner" };
1391
+ const _sfc_main$K = /* @__PURE__ */ vue.defineComponent({
1350
1392
  ...{ name: "TaoSpoiler" },
1351
1393
  __name: "TaoSpoiler",
1352
1394
  props: {
@@ -1401,7 +1443,7 @@
1401
1443
  });
1402
1444
  }
1403
1445
  return (_ctx, _cache) => {
1404
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, [
1446
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, [
1405
1447
  vue.createElementVNode("button", {
1406
1448
  type: "button",
1407
1449
  class: "tao-spoiler__header",
@@ -1412,12 +1454,12 @@
1412
1454
  vue.createElementVNode("span", {
1413
1455
  class: vue.normalizeClass(["tao-spoiler__icon", { "tao-spoiler__icon--open": isOpen.value }])
1414
1456
  }, "▶", 2),
1415
- __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$q, [
1457
+ __props.title || _ctx.$slots.title ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$s, [
1416
1458
  vue.renderSlot(_ctx.$slots, "title", {}, () => [
1417
1459
  vue.createTextVNode(vue.toDisplayString(__props.title), 1)
1418
1460
  ], true)
1419
1461
  ])) : vue.createCommentVNode("", true)
1420
- ], 8, _hoisted_2$x),
1462
+ ], 8, _hoisted_2$y),
1421
1463
  vue.createVNode(vue.Transition, {
1422
1464
  name: "tao-spoiler-slide",
1423
1465
  onBeforeEnter,
@@ -1431,10 +1473,10 @@
1431
1473
  id: vue.unref(panelId),
1432
1474
  class: "tao-spoiler__content"
1433
1475
  }, [
1434
- vue.createElementVNode("div", _hoisted_5$f, [
1476
+ vue.createElementVNode("div", _hoisted_5$h, [
1435
1477
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1436
1478
  ])
1437
- ], 8, _hoisted_4$m)) : vue.createCommentVNode("", true)
1479
+ ], 8, _hoisted_4$o)) : vue.createCommentVNode("", true)
1438
1480
  ]),
1439
1481
  _: 3
1440
1482
  })
@@ -1442,9 +1484,9 @@
1442
1484
  };
1443
1485
  }
1444
1486
  });
1445
- const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__scopeId", "data-v-ccb052cf"]]);
1446
- const _hoisted_1$C = { class: "tao-spoiler-group" };
1447
- const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1487
+ const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$K, [["__scopeId", "data-v-ccb052cf"]]);
1488
+ const _hoisted_1$D = { class: "tao-spoiler-group" };
1489
+ const _sfc_main$J = /* @__PURE__ */ vue.defineComponent({
1448
1490
  ...{ name: "TaoSpoilerGroup" },
1449
1491
  __name: "TaoSpoilerGroup",
1450
1492
  props: {
@@ -1464,20 +1506,21 @@
1464
1506
  setOpen
1465
1507
  });
1466
1508
  return (_ctx, _cache) => {
1467
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
1509
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, [
1468
1510
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1469
1511
  ]);
1470
1512
  };
1471
1513
  }
1472
1514
  });
1473
- const TaoSpoilerGroup = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["__scopeId", "data-v-6b172e89"]]);
1474
- const _hoisted_1$B = ["aria-label"];
1475
- const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1515
+ const TaoSpoilerGroup = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__scopeId", "data-v-6b172e89"]]);
1516
+ const _hoisted_1$C = ["aria-label"];
1517
+ const _sfc_main$I = /* @__PURE__ */ vue.defineComponent({
1476
1518
  ...{ name: "TaoCopy" },
1477
1519
  __name: "TaoCopy",
1478
1520
  props: {
1479
1521
  text: {},
1480
1522
  successMessage: { default: "Скопировано!" },
1523
+ copyLabel: { default: "Копировать" },
1481
1524
  tip: { type: Boolean, default: true }
1482
1525
  },
1483
1526
  setup(__props) {
@@ -1579,7 +1622,7 @@
1579
1622
  vue.createElementVNode("button", {
1580
1623
  type: "button",
1581
1624
  class: vue.normalizeClass(["tao-copy__button", { "tao-copy__button--copied": copied.value }]),
1582
- "aria-label": copied.value ? __props.successMessage : "Копировать",
1625
+ "aria-label": copied.value ? __props.successMessage : __props.copyLabel,
1583
1626
  onClick: copy
1584
1627
  }, [..._cache[0] || (_cache[0] = [
1585
1628
  vue.createElementVNode("svg", {
@@ -1606,7 +1649,7 @@
1606
1649
  "stroke-width": "2"
1607
1650
  })
1608
1651
  ], -1)
1609
- ])], 10, _hoisted_1$B)
1652
+ ])], 10, _hoisted_1$C)
1610
1653
  ], true),
1611
1654
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
1612
1655
  copied.value && __props.tip && __props.successMessage ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -1622,8 +1665,8 @@
1622
1665
  };
1623
1666
  }
1624
1667
  });
1625
- const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__scopeId", "data-v-1953c07e"]]);
1626
- const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1668
+ const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["__scopeId", "data-v-38d3381d"]]);
1669
+ const _sfc_main$H = /* @__PURE__ */ vue.defineComponent({
1627
1670
  ...{ name: "TaoContainer" },
1628
1671
  __name: "TaoContainer",
1629
1672
  props: {
@@ -1640,8 +1683,8 @@
1640
1683
  };
1641
1684
  }
1642
1685
  });
1643
- const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["__scopeId", "data-v-4c0deb90"]]);
1644
- const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1686
+ const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__scopeId", "data-v-4c0deb90"]]);
1687
+ const _sfc_main$G = /* @__PURE__ */ vue.defineComponent({
1645
1688
  ...{ name: "TaoFlex" },
1646
1689
  __name: "TaoFlex",
1647
1690
  props: {
@@ -1672,7 +1715,7 @@
1672
1715
  };
1673
1716
  }
1674
1717
  });
1675
- const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1718
+ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1676
1719
  ...{ name: "TaoSpace" },
1677
1720
  __name: "TaoSpace",
1678
1721
  props: {
@@ -1692,7 +1735,332 @@
1692
1735
  };
1693
1736
  }
1694
1737
  });
1695
- const TaoSpace = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["__scopeId", "data-v-698ca712"]]);
1738
+ const TaoSpace = /* @__PURE__ */ _export_sfc(_sfc_main$F, [["__scopeId", "data-v-698ca712"]]);
1739
+ const _hoisted_1$B = { class: "tao-split__pane tao-split__pane--start" };
1740
+ const _hoisted_2$x = ["aria-orientation", "aria-valuemin", "aria-valuemax", "aria-valuenow", "aria-valuetext", "aria-disabled", "tabindex"];
1741
+ const _hoisted_3$r = { class: "tao-split__pane tao-split__pane--end" };
1742
+ const _hoisted_4$n = {
1743
+ key: 0,
1744
+ class: "tao-split__shield"
1745
+ };
1746
+ const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1747
+ ...{ name: "TaoSplit" },
1748
+ __name: "TaoSplit",
1749
+ props: {
1750
+ modelValue: { default: 50 },
1751
+ direction: { default: "row" },
1752
+ unit: { default: "%" },
1753
+ min: { default: 0 },
1754
+ max: {},
1755
+ minEnd: { default: 0 },
1756
+ resizable: { type: Boolean, default: true },
1757
+ step: {}
1758
+ },
1759
+ emits: ["update:modelValue"],
1760
+ setup(__props, { emit: __emit }) {
1761
+ const props = __props;
1762
+ const emit = __emit;
1763
+ const rootRef = vue.ref(null);
1764
+ const handleRef = vue.ref(null);
1765
+ const startPx = vue.ref(0);
1766
+ const available = vue.ref(0);
1767
+ const isDragging = vue.ref(false);
1768
+ const size = vue.ref(props.modelValue);
1769
+ const isRow = vue.computed(() => props.direction === "row");
1770
+ const stepValue = vue.computed(() => props.step ?? (props.unit === "%" ? 1 : 8));
1771
+ const ariaOrientation = vue.computed(() => isRow.value ? "vertical" : "horizontal");
1772
+ let dragPointer = -1;
1773
+ let dragStartPx = 0;
1774
+ let dragStartCoord = 0;
1775
+ let savedBodyCursor = "";
1776
+ let savedHtmlCursor = "";
1777
+ let savedUserSelect = "";
1778
+ let resizeObserver = null;
1779
+ let stopFocusLoss;
1780
+ function axisSize(el) {
1781
+ const rect = el.getBoundingClientRect();
1782
+ return isRow.value ? rect.width : rect.height;
1783
+ }
1784
+ function measureAvailable() {
1785
+ if (!rootRef.value || !handleRef.value) {
1786
+ return 0;
1787
+ }
1788
+ return Math.max(0, axisSize(rootRef.value) - axisSize(handleRef.value));
1789
+ }
1790
+ function toPx(value, avail) {
1791
+ if (avail <= 0) {
1792
+ return 0;
1793
+ }
1794
+ return props.unit === "%" ? value / 100 * avail : value;
1795
+ }
1796
+ function fromPx(px, avail) {
1797
+ if (props.unit === "%") {
1798
+ if (avail <= 0) {
1799
+ return 0;
1800
+ }
1801
+ return Math.round(px / avail * 1e4) / 100;
1802
+ }
1803
+ return Math.round(px);
1804
+ }
1805
+ function valuesEqual(a, b) {
1806
+ if (props.unit === "%") {
1807
+ return Math.abs(a - b) < 5e-3;
1808
+ }
1809
+ return Math.round(a) === Math.round(b);
1810
+ }
1811
+ function clampStartPx(desiredPx, avail) {
1812
+ if (avail <= 0) {
1813
+ return 0;
1814
+ }
1815
+ const minStartPx = toPx(props.min, avail);
1816
+ const minEndPx = toPx(props.minEnd, avail);
1817
+ const maxStartPx = props.max != null ? toPx(props.max, avail) : Infinity;
1818
+ if (minStartPx + minEndPx > avail) {
1819
+ return Math.min(Math.max(desiredPx, 0), avail);
1820
+ }
1821
+ const lo = minStartPx;
1822
+ const hi = Math.min(maxStartPx, avail - minEndPx);
1823
+ return Math.min(Math.max(desiredPx, lo), Math.max(lo, hi));
1824
+ }
1825
+ function commit(next) {
1826
+ if (valuesEqual(next, size.value)) {
1827
+ size.value = next;
1828
+ return;
1829
+ }
1830
+ size.value = next;
1831
+ emit("update:modelValue", next);
1832
+ }
1833
+ function applyLayout(emitIfChanged) {
1834
+ const avail = measureAvailable();
1835
+ available.value = avail;
1836
+ const clamped = clampStartPx(toPx(size.value, avail), avail);
1837
+ startPx.value = clamped;
1838
+ const next = fromPx(clamped, avail);
1839
+ if (emitIfChanged) {
1840
+ commit(next);
1841
+ }
1842
+ }
1843
+ function isRtl() {
1844
+ return !!rootRef.value && getComputedStyle(rootRef.value).direction === "rtl";
1845
+ }
1846
+ function applyDragCursor() {
1847
+ savedBodyCursor = document.body.style.cursor;
1848
+ savedHtmlCursor = document.documentElement.style.cursor;
1849
+ savedUserSelect = document.body.style.userSelect;
1850
+ const cursor = isRow.value ? "col-resize" : "row-resize";
1851
+ document.body.style.cursor = cursor;
1852
+ document.documentElement.style.cursor = cursor;
1853
+ document.body.style.userSelect = "none";
1854
+ }
1855
+ function restoreDragCursor() {
1856
+ document.body.style.cursor = savedBodyCursor;
1857
+ document.documentElement.style.cursor = savedHtmlCursor;
1858
+ document.body.style.userSelect = savedUserSelect;
1859
+ }
1860
+ function releaseDragCapture() {
1861
+ const el = handleRef.value;
1862
+ const id = dragPointer;
1863
+ if (!el || id === -1) {
1864
+ return;
1865
+ }
1866
+ if (typeof el.hasPointerCapture === "function" && !el.hasPointerCapture(id)) {
1867
+ return;
1868
+ }
1869
+ try {
1870
+ el.releasePointerCapture(id);
1871
+ } catch {
1872
+ }
1873
+ }
1874
+ function endDrag() {
1875
+ if (!isDragging.value) {
1876
+ return;
1877
+ }
1878
+ isDragging.value = false;
1879
+ releaseDragCapture();
1880
+ dragPointer = -1;
1881
+ restoreDragCursor();
1882
+ applyLayout(true);
1883
+ }
1884
+ function setStartFromDelta(delta) {
1885
+ const avail = measureAvailable();
1886
+ available.value = avail;
1887
+ const nextPx = clampStartPx(dragStartPx + delta, avail);
1888
+ startPx.value = nextPx;
1889
+ commit(fromPx(nextPx, avail));
1890
+ }
1891
+ function onPointerDown(event) {
1892
+ if (!props.resizable || event.button !== 0 || !handleRef.value) {
1893
+ return;
1894
+ }
1895
+ dragPointer = event.pointerId;
1896
+ isDragging.value = true;
1897
+ dragStartPx = startPx.value;
1898
+ dragStartCoord = isRow.value ? event.clientX : event.clientY;
1899
+ applyDragCursor();
1900
+ event.preventDefault();
1901
+ try {
1902
+ handleRef.value.setPointerCapture(event.pointerId);
1903
+ } catch {
1904
+ }
1905
+ }
1906
+ function onPointerMove(event) {
1907
+ if (!isDragging.value || event.pointerId !== dragPointer) {
1908
+ return;
1909
+ }
1910
+ const coord = isRow.value ? event.clientX : event.clientY;
1911
+ let delta = coord - dragStartCoord;
1912
+ if (isRow.value && isRtl()) {
1913
+ delta = -delta;
1914
+ }
1915
+ setStartFromDelta(delta);
1916
+ }
1917
+ function onPointerEnd(event) {
1918
+ if (!isDragging.value) {
1919
+ return;
1920
+ }
1921
+ if (dragPointer !== -1 && event.pointerId !== dragPointer) {
1922
+ return;
1923
+ }
1924
+ endDrag();
1925
+ }
1926
+ function onLostPointerCapture() {
1927
+ endDrag();
1928
+ }
1929
+ function ariaMax() {
1930
+ const avail = available.value;
1931
+ if (avail <= 0) {
1932
+ return props.max ?? (props.unit === "%" ? 100 - props.minEnd : 0);
1933
+ }
1934
+ const maxByEnd = fromPx(Math.max(0, avail - toPx(props.minEnd, avail)), avail);
1935
+ if (props.max == null) {
1936
+ return maxByEnd;
1937
+ }
1938
+ return Math.min(props.max, maxByEnd);
1939
+ }
1940
+ const ariaValueMin = vue.computed(() => props.min);
1941
+ const ariaValueMax = vue.computed(() => ariaMax());
1942
+ const ariaValueNow = vue.computed(() => size.value);
1943
+ const ariaValueText = vue.computed(() => props.unit === "%" ? `${size.value}%` : `${Math.round(size.value)}px`);
1944
+ function onKeydown(event) {
1945
+ if (!props.resizable) {
1946
+ return;
1947
+ }
1948
+ const avail = measureAvailable();
1949
+ available.value = avail;
1950
+ if (event.key === "Home") {
1951
+ event.preventDefault();
1952
+ const nextPx2 = clampStartPx(toPx(props.min, avail), avail);
1953
+ startPx.value = nextPx2;
1954
+ commit(fromPx(nextPx2, avail));
1955
+ return;
1956
+ }
1957
+ if (event.key === "End") {
1958
+ event.preventDefault();
1959
+ const nextPx2 = clampStartPx(toPx(ariaMax(), avail), avail);
1960
+ startPx.value = nextPx2;
1961
+ commit(fromPx(nextPx2, avail));
1962
+ return;
1963
+ }
1964
+ const primary = isRow.value && (event.key === "ArrowLeft" || event.key === "ArrowRight") || !isRow.value && (event.key === "ArrowUp" || event.key === "ArrowDown");
1965
+ const secondary = isRow.value && (event.key === "ArrowUp" || event.key === "ArrowDown") || !isRow.value && (event.key === "ArrowLeft" || event.key === "ArrowRight");
1966
+ if (!primary && !secondary) {
1967
+ return;
1968
+ }
1969
+ event.preventDefault();
1970
+ let dir = event.key === "ArrowRight" || event.key === "ArrowDown" ? 1 : -1;
1971
+ if (isRow.value && isRtl() && (event.key === "ArrowLeft" || event.key === "ArrowRight")) {
1972
+ dir = -dir;
1973
+ }
1974
+ const nextModel = size.value + dir * stepValue.value;
1975
+ const nextPx = clampStartPx(toPx(nextModel, avail), avail);
1976
+ startPx.value = nextPx;
1977
+ commit(fromPx(nextPx, avail));
1978
+ }
1979
+ vue.watch(
1980
+ () => props.modelValue,
1981
+ (value) => {
1982
+ if (isDragging.value) {
1983
+ return;
1984
+ }
1985
+ if (!valuesEqual(value, size.value)) {
1986
+ size.value = value;
1987
+ applyLayout(false);
1988
+ }
1989
+ }
1990
+ );
1991
+ vue.watch(
1992
+ () => [props.unit, props.direction, props.min, props.max, props.minEnd, props.resizable],
1993
+ () => {
1994
+ if (!isDragging.value) {
1995
+ applyLayout(true);
1996
+ }
1997
+ }
1998
+ );
1999
+ vue.onMounted(() => {
2000
+ applyLayout(false);
2001
+ resizeObserver = new ResizeObserver(() => {
2002
+ if (isDragging.value) {
2003
+ return;
2004
+ }
2005
+ applyLayout(true);
2006
+ });
2007
+ if (rootRef.value) {
2008
+ resizeObserver.observe(rootRef.value);
2009
+ }
2010
+ stopFocusLoss = listenFocusLoss(endDrag);
2011
+ });
2012
+ vue.onBeforeUnmount(() => {
2013
+ endDrag();
2014
+ resizeObserver == null ? void 0 : resizeObserver.disconnect();
2015
+ resizeObserver = null;
2016
+ stopFocusLoss == null ? void 0 : stopFocusLoss();
2017
+ });
2018
+ return (_ctx, _cache) => {
2019
+ return vue.openBlock(), vue.createElementBlock("div", {
2020
+ ref_key: "rootRef",
2021
+ ref: rootRef,
2022
+ class: vue.normalizeClass(["tao-split", [
2023
+ `tao-split--${__props.direction}`,
2024
+ {
2025
+ "tao-split--fixed": !__props.resizable,
2026
+ "tao-split--dragging": isDragging.value
2027
+ }
2028
+ ]]),
2029
+ style: vue.normalizeStyle({ "--tao-split-start": `${startPx.value}px` })
2030
+ }, [
2031
+ vue.createElementVNode("div", _hoisted_1$B, [
2032
+ vue.renderSlot(_ctx.$slots, "start", {}, void 0, true)
2033
+ ]),
2034
+ vue.createElementVNode("div", {
2035
+ ref_key: "handleRef",
2036
+ ref: handleRef,
2037
+ class: "tao-split__handle",
2038
+ role: "separator",
2039
+ "aria-orientation": ariaOrientation.value,
2040
+ "aria-valuemin": ariaValueMin.value,
2041
+ "aria-valuemax": ariaValueMax.value,
2042
+ "aria-valuenow": ariaValueNow.value,
2043
+ "aria-valuetext": ariaValueText.value,
2044
+ "aria-disabled": __props.resizable ? void 0 : true,
2045
+ tabindex: __props.resizable ? 0 : -1,
2046
+ onPointerdown: onPointerDown,
2047
+ onPointermove: onPointerMove,
2048
+ onPointerup: onPointerEnd,
2049
+ onPointercancel: onPointerEnd,
2050
+ onLostpointercapture: onLostPointerCapture,
2051
+ onKeydown,
2052
+ onDragstart: _cache[0] || (_cache[0] = vue.withModifiers(() => {
2053
+ }, ["prevent"]))
2054
+ }, null, 40, _hoisted_2$x),
2055
+ vue.createElementVNode("div", _hoisted_3$r, [
2056
+ vue.renderSlot(_ctx.$slots, "end", {}, void 0, true)
2057
+ ]),
2058
+ isDragging.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$n)) : vue.createCommentVNode("", true)
2059
+ ], 6);
2060
+ };
2061
+ }
2062
+ });
2063
+ const TaoSplit = /* @__PURE__ */ _export_sfc(_sfc_main$E, [["__scopeId", "data-v-f44196dc"]]);
1696
2064
  const _hoisted_1$A = { class: "tao-icon" };
1697
2065
  const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
1698
2066
  ...{ name: "TaoIcon" },
@@ -1785,6 +2153,7 @@
1785
2153
  const TaoLoader = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["__scopeId", "data-v-75a40018"]]);
1786
2154
  const _hoisted_1$z = { class: "tao-image" };
1787
2155
  const _hoisted_2$w = ["src", "alt", "loading"];
2156
+ const _hoisted_3$q = { class: "tao-image__placeholder" };
1788
2157
  const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
1789
2158
  ...{ name: "TaoImage" },
1790
2159
  __name: "TaoImage",
@@ -1792,7 +2161,8 @@
1792
2161
  src: { default: "" },
1793
2162
  alt: { default: "" },
1794
2163
  pixelated: { type: Boolean, default: false },
1795
- lazy: { type: Boolean, default: false }
2164
+ lazy: { type: Boolean, default: false },
2165
+ placeholderText: { default: "No image available" }
1796
2166
  },
1797
2167
  emits: ["load", "error"],
1798
2168
  setup(__props, { emit: __emit }) {
@@ -1823,20 +2193,20 @@
1823
2193
  onLoad: handleLoad,
1824
2194
  onError: handleError
1825
2195
  }, null, 42, _hoisted_2$w)) : vue.renderSlot(_ctx.$slots, "default", {}, () => [
1826
- _cache[0] || (_cache[0] = vue.createElementVNode("div", { class: "tao-image__placeholder" }, "No image available", -1))
2196
+ vue.createElementVNode("div", _hoisted_3$q, vue.toDisplayString(__props.placeholderText), 1)
1827
2197
  ], true, 1)
1828
2198
  ]);
1829
2199
  };
1830
2200
  }
1831
2201
  });
1832
- const TaoImage = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["__scopeId", "data-v-522fe4da"]]);
2202
+ const TaoImage = /* @__PURE__ */ _export_sfc(_sfc_main$B, [["__scopeId", "data-v-e7c911e5"]]);
1833
2203
  const _hoisted_1$y = ["for"];
1834
2204
  const _hoisted_2$v = ["id", "checked", "disabled", "aria-checked", "aria-invalid", "aria-describedby"];
1835
2205
  const _hoisted_3$p = {
1836
2206
  key: 0,
1837
2207
  class: "tao-checkbox__label"
1838
2208
  };
1839
- const _hoisted_4$l = {
2209
+ const _hoisted_4$m = {
1840
2210
  key: 1,
1841
2211
  class: "tao-checkbox__label"
1842
2212
  };
@@ -1912,7 +2282,7 @@
1912
2282
  onChange: onInputChange
1913
2283
  }, null, 40, _hoisted_2$v),
1914
2284
  _cache[0] || (_cache[0] = vue.createElementVNode("span", { class: "tao-checkbox__box" }, null, -1)),
1915
- __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$p, vue.toDisplayString(__props.label), 1)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$l, [
2285
+ __props.label ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$p, vue.toDisplayString(__props.label), 1)) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$m, [
1916
2286
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1917
2287
  ])),
1918
2288
  vue.renderSlot(_ctx.$slots, "post", { text: __props.label }, void 0, true)
@@ -1927,6 +2297,7 @@
1927
2297
  };
1928
2298
  const _hoisted_2$u = { class: "tao-tag__text" };
1929
2299
  const _hoisted_3$o = ["aria-label"];
2300
+ const _hoisted_4$l = { "aria-hidden": "true" };
1930
2301
  const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
1931
2302
  ...{ name: "TaoTag" },
1932
2303
  __name: "TaoTag",
@@ -1979,12 +2350,18 @@
1979
2350
  class: "tao-tag__close",
1980
2351
  "aria-label": __props.closeLabel,
1981
2352
  onClick: vue.withModifiers(onClose, ["stop"])
1982
- }, " ✕ ", 8, _hoisted_3$o)) : vue.createCommentVNode("", true)
2353
+ }, [
2354
+ vue.createElementVNode("span", _hoisted_4$l, [
2355
+ vue.renderSlot(_ctx.$slots, "close-icon", {}, () => [
2356
+ _cache[0] || (_cache[0] = vue.createTextVNode("✕", -1))
2357
+ ], true)
2358
+ ])
2359
+ ], 8, _hoisted_3$o)) : vue.createCommentVNode("", true)
1983
2360
  ], 6);
1984
2361
  };
1985
2362
  }
1986
2363
  });
1987
- const TaoTag = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["__scopeId", "data-v-5bd7ca79"]]);
2364
+ const TaoTag = /* @__PURE__ */ _export_sfc(_sfc_main$z, [["__scopeId", "data-v-f353f529"]]);
1988
2365
  const _hoisted_1$w = {
1989
2366
  key: 1,
1990
2367
  class: "tao-divider-text"
@@ -2221,7 +2598,7 @@
2221
2598
  }
2222
2599
  });
2223
2600
  const TaoTextarea = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["__scopeId", "data-v-2534c0c4"]]);
2224
- const _hoisted_1$t = ["tabindex"];
2601
+ const _hoisted_1$t = ["tabindex", "aria-label"];
2225
2602
  const _hoisted_2$q = { class: "tao-scroll-top__content" };
2226
2603
  const RIPPLE_DURATION = 750;
2227
2604
  const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
@@ -2234,7 +2611,8 @@
2234
2611
  zIndex: { default: 1e3 },
2235
2612
  boundary: { default: 300 },
2236
2613
  hasOutline: { type: Boolean, default: true },
2237
- tabindex: { default: 0 }
2614
+ tabindex: { default: 0 },
2615
+ ariaLabel: { default: "Наверх" }
2238
2616
  },
2239
2617
  setup(__props) {
2240
2618
  const props = __props;
@@ -2321,7 +2699,7 @@
2321
2699
  style: vue.normalizeStyle(mainStyle),
2322
2700
  tabindex: props.tabindex,
2323
2701
  class: vue.normalizeClass(["tao-scroll-top", { "tao-scroll-top--no-outline": !props.hasOutline }]),
2324
- "aria-label": "Наверх",
2702
+ "aria-label": props.ariaLabel,
2325
2703
  onClick: vue.withModifiers(onClick, ["prevent"])
2326
2704
  }, [
2327
2705
  vue.createElementVNode("div", _hoisted_2$q, [
@@ -2348,7 +2726,7 @@
2348
2726
  };
2349
2727
  }
2350
2728
  });
2351
- const TaoScrollTop = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-ce902f42"]]);
2729
+ const TaoScrollTop = /* @__PURE__ */ _export_sfc(_sfc_main$u, [["__scopeId", "data-v-59678649"]]);
2352
2730
  const _hoisted_1$s = { class: "tao-progress" };
2353
2731
  const _hoisted_2$p = {
2354
2732
  key: 0,
@@ -2359,11 +2737,11 @@
2359
2737
  key: 0,
2360
2738
  class: "tao-progress__percentage"
2361
2739
  };
2362
- const _hoisted_5$e = {
2740
+ const _hoisted_5$g = {
2363
2741
  key: 1,
2364
2742
  class: "tao-progress__side"
2365
2743
  };
2366
- const _hoisted_6$b = {
2744
+ const _hoisted_6$c = {
2367
2745
  key: 0,
2368
2746
  class: "tao-progress__percentage"
2369
2747
  };
@@ -2418,9 +2796,9 @@
2418
2796
  }, null, 6)
2419
2797
  ], 4)
2420
2798
  ]),
2421
- _ctx.$slots.right || showEndPercent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$e, [
2799
+ _ctx.$slots.right || showEndPercent.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$g, [
2422
2800
  vue.renderSlot(_ctx.$slots, "right", {}, void 0, true),
2423
- showEndPercent.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$b, vue.toDisplayString(endPercentLabel.value), 1)) : vue.createCommentVNode("", true)
2801
+ showEndPercent.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$c, vue.toDisplayString(endPercentLabel.value), 1)) : vue.createCommentVNode("", true)
2424
2802
  ])) : vue.createCommentVNode("", true)
2425
2803
  ], 6)
2426
2804
  ]);
@@ -2665,14 +3043,17 @@
2665
3043
  const TaoSlider = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-24a38782"]]);
2666
3044
  const _hoisted_1$q = { class: "tao-file-drop" };
2667
3045
  const _hoisted_2$n = { class: "tao-file-drop__row" };
2668
- const _hoisted_3$j = ["accept", "multiple"];
2669
- const _hoisted_4$i = {
3046
+ const _hoisted_3$j = ["aria-label"];
3047
+ const _hoisted_4$i = { "aria-hidden": "true" };
3048
+ const _hoisted_5$f = ["accept", "multiple"];
3049
+ const _hoisted_6$b = {
2670
3050
  key: 0,
2671
3051
  class: "tao-file-drop__list"
2672
3052
  };
2673
- const _hoisted_5$d = { class: "tao-file-drop__name" };
2674
- const _hoisted_6$a = { class: "tao-file-drop__meta" };
2675
- const _hoisted_7$8 = ["aria-label", "onClick"];
3053
+ const _hoisted_7$a = { class: "tao-file-drop__name" };
3054
+ const _hoisted_8$9 = { class: "tao-file-drop__meta" };
3055
+ const _hoisted_9$4 = ["aria-label", "onClick"];
3056
+ const _hoisted_10$4 = { "aria-hidden": "true" };
2676
3057
  const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
2677
3058
  ...{ name: "TaoFileDrop" },
2678
3059
  __name: "TaoFileDrop",
@@ -2682,6 +3063,9 @@
2682
3063
  accept: { default: "*" },
2683
3064
  multiple: { type: Boolean, default: false },
2684
3065
  showClear: { type: Boolean, default: false },
3066
+ clearLabel: { default: "Очистить файлы" },
3067
+ removeLabel: { default: "Убрать «{name}»" },
3068
+ formatSize: {},
2685
3069
  list: { type: Boolean, default: true }
2686
3070
  },
2687
3071
  emits: ["update:modelValue", "files", "clear-request"],
@@ -2748,7 +3132,7 @@
2748
3132
  el.type = "file";
2749
3133
  }
2750
3134
  }
2751
- function formatSize(bytes) {
3135
+ function defaultFormatSize(bytes) {
2752
3136
  if (bytes < 1024) {
2753
3137
  return `${bytes} Б`;
2754
3138
  }
@@ -2761,6 +3145,9 @@
2761
3145
  const value = mb < 10 ? mb.toFixed(1) : String(Math.round(mb));
2762
3146
  return `${value.replace(".", ",")} МБ`;
2763
3147
  }
3148
+ function sizeLabel(bytes) {
3149
+ return props.formatSize ? props.formatSize(bytes) : defaultFormatSize(bytes);
3150
+ }
2764
3151
  function fileKey(file, index) {
2765
3152
  return `${file.name}-${file.size}-${file.lastModified}-${index}`;
2766
3153
  }
@@ -2778,9 +3165,15 @@
2778
3165
  key: 0,
2779
3166
  type: "button",
2780
3167
  class: "tao-file-drop__clear",
2781
- "aria-label": "Очистить файлы",
3168
+ "aria-label": __props.clearLabel,
2782
3169
  onClick: requestClear
2783
- }, " ✕ ")) : vue.createCommentVNode("", true),
3170
+ }, [
3171
+ vue.createElementVNode("span", _hoisted_4$i, [
3172
+ vue.renderSlot(_ctx.$slots, "clear-icon", {}, () => [
3173
+ _cache[1] || (_cache[1] = vue.createTextVNode("✕", -1))
3174
+ ], true)
3175
+ ])
3176
+ ], 8, _hoisted_3$j)) : vue.createCommentVNode("", true),
2784
3177
  vue.createElementVNode("label", {
2785
3178
  class: vue.normalizeClass(["tao-file-drop__zone", [`tao-file-drop__zone--${__props.size}`, { "tao-file-drop__zone--dragging": isDragging.value }]]),
2786
3179
  onDragover: handleDragOver,
@@ -2788,7 +3181,7 @@
2788
3181
  onDrop: handleDrop
2789
3182
  }, [
2790
3183
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
2791
- _cache[1] || (_cache[1] = vue.createTextVNode("Перетащите файл сюда или нажмите, чтобы выбрать", -1))
3184
+ _cache[2] || (_cache[2] = vue.createTextVNode("Перетащите файл сюда или нажмите, чтобы выбрать", -1))
2792
3185
  ], true),
2793
3186
  vue.createElementVNode("input", {
2794
3187
  ref_key: "fileInput",
@@ -2800,23 +3193,29 @@
2800
3193
  onChange: handleFileSelect,
2801
3194
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
2802
3195
  }, ["stop"]))
2803
- }, null, 40, _hoisted_3$j)
3196
+ }, null, 40, _hoisted_5$f)
2804
3197
  ], 34)
2805
3198
  ]),
2806
- __props.list && __props.modelValue.length ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_4$i, [
3199
+ __props.list && __props.modelValue.length ? (vue.openBlock(), vue.createElementBlock("ul", _hoisted_6$b, [
2807
3200
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.modelValue, (file, index) => {
2808
3201
  return vue.openBlock(), vue.createElementBlock("li", {
2809
3202
  key: fileKey(file, index),
2810
3203
  class: "tao-file-drop__file"
2811
3204
  }, [
2812
- vue.createElementVNode("span", _hoisted_5$d, vue.toDisplayString(file.name), 1),
2813
- vue.createElementVNode("span", _hoisted_6$a, vue.toDisplayString(formatSize(file.size)), 1),
3205
+ vue.createElementVNode("span", _hoisted_7$a, vue.toDisplayString(file.name), 1),
3206
+ vue.createElementVNode("span", _hoisted_8$9, vue.toDisplayString(sizeLabel(file.size)), 1),
2814
3207
  vue.createElementVNode("button", {
2815
3208
  type: "button",
2816
3209
  class: "tao-file-drop__remove",
2817
- "aria-label": `Убрать «${file.name}»`,
3210
+ "aria-label": __props.removeLabel.replace("{name}", file.name),
2818
3211
  onClick: ($event) => removeAt(index)
2819
- }, " ✕ ", 8, _hoisted_7$8)
3212
+ }, [
3213
+ vue.createElementVNode("span", _hoisted_10$4, [
3214
+ vue.renderSlot(_ctx.$slots, "remove-icon", {}, () => [
3215
+ _cache[3] || (_cache[3] = vue.createTextVNode("✕", -1))
3216
+ ], true)
3217
+ ])
3218
+ ], 8, _hoisted_9$4)
2820
3219
  ]);
2821
3220
  }), 128))
2822
3221
  ])) : vue.createCommentVNode("", true)
@@ -2824,19 +3223,18 @@
2824
3223
  };
2825
3224
  }
2826
3225
  });
2827
- const TaoFileDrop = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-f97c4e91"]]);
3226
+ const TaoFileDrop = /* @__PURE__ */ _export_sfc(_sfc_main$r, [["__scopeId", "data-v-570fc1bb"]]);
2828
3227
  const _hoisted_1$p = ["aria-expanded"];
2829
- const _hoisted_2$m = {
2830
- key: 1,
2831
- "aria-label": "Меню"
2832
- };
2833
- const _hoisted_3$i = ["onClick", "onMouseenter"];
2834
- const _hoisted_4$h = { key: 1 };
3228
+ const _hoisted_2$m = ["aria-label"];
3229
+ const _hoisted_3$i = { "aria-hidden": "true" };
3230
+ const _hoisted_4$h = ["onClick", "onMouseenter"];
3231
+ const _hoisted_5$e = { key: 1 };
2835
3232
  const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
2836
3233
  ...{ name: "TaoDropdownMenu" },
2837
3234
  __name: "TaoDropdownMenu",
2838
3235
  props: {
2839
- actions: { default: () => [] }
3236
+ actions: { default: () => [] },
3237
+ menuLabel: { default: "Меню" }
2840
3238
  },
2841
3239
  emits: ["selected"],
2842
3240
  setup(__props, { emit: __emit }) {
@@ -2967,7 +3365,16 @@
2967
3365
  "aria-expanded": isOpen.value,
2968
3366
  onClick: toggleMenu
2969
3367
  }, [
2970
- _ctx.$slots.button ? vue.renderSlot(_ctx.$slots, "button", {}, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$m, "⋮"))
3368
+ _ctx.$slots.button ? vue.renderSlot(_ctx.$slots, "button", {}, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock("span", {
3369
+ key: 1,
3370
+ "aria-label": __props.menuLabel
3371
+ }, [
3372
+ vue.createElementVNode("span", _hoisted_3$i, [
3373
+ vue.renderSlot(_ctx.$slots, "icon", {}, () => [
3374
+ _cache[0] || (_cache[0] = vue.createTextVNode("⋮", -1))
3375
+ ], true)
3376
+ ])
3377
+ ], 8, _hoisted_2$m))
2971
3378
  ], 8, _hoisted_1$p),
2972
3379
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
2973
3380
  isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -2993,8 +3400,8 @@
2993
3400
  id: action.id,
2994
3401
  ico: action.ico,
2995
3402
  text: action.name
2996
- }, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$h, vue.toDisplayString(action.name), 1))
2997
- ], 42, _hoisted_3$i);
3403
+ }, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$e, vue.toDisplayString(action.name), 1))
3404
+ ], 42, _hoisted_4$h);
2998
3405
  }), 128))
2999
3406
  ], 36)) : vue.createCommentVNode("", true)
3000
3407
  ]))
@@ -3002,7 +3409,7 @@
3002
3409
  };
3003
3410
  }
3004
3411
  });
3005
- const TaoDropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-420a7e63"]]);
3412
+ const TaoDropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-42bc0a2a"]]);
3006
3413
  const _hoisted_1$o = ["aria-invalid", "aria-describedby"];
3007
3414
  const _hoisted_2$l = ["id", "value", "placeholder", "type", "inputmode", "pattern", "onInput", "onKeydown", "onFocus"];
3008
3415
  const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
@@ -3286,7 +3693,8 @@
3286
3693
  options: { default: () => [] },
3287
3694
  placeholder: { default: "Выберите" },
3288
3695
  disabled: { type: Boolean, default: false },
3289
- error: { type: Boolean, default: false }
3696
+ error: { type: Boolean, default: false },
3697
+ clearText: { default: "Очистить" }
3290
3698
  },
3291
3699
  emits: ["update:modelValue", "change"],
3292
3700
  setup(__props, { emit: __emit }) {
@@ -3492,10 +3900,12 @@
3492
3900
  onKeydown: onTriggerKeydown
3493
3901
  }, [
3494
3902
  vue.createElementVNode("span", _hoisted_2$k, vue.toDisplayString(((_a = selected.value) == null ? void 0 : _a.label) ?? __props.placeholder), 1),
3495
- _cache[2] || (_cache[2] = vue.createElementVNode("span", {
3496
- class: "tao-select__chevron",
3903
+ vue.createElementVNode("span", {
3904
+ class: vue.normalizeClass(["tao-select__chevron", { "tao-select__chevron--custom": _ctx.$slots.chevron }]),
3497
3905
  "aria-hidden": "true"
3498
- }, null, -1))
3906
+ }, [
3907
+ vue.renderSlot(_ctx.$slots, "chevron", {}, void 0, true)
3908
+ ], 2)
3499
3909
  ], 42, _hoisted_1$m),
3500
3910
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
3501
3911
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -3542,14 +3952,18 @@
3542
3952
  onMousedown: _cache[1] || (_cache[1] = vue.withModifiers(() => {
3543
3953
  }, ["prevent"])),
3544
3954
  onClick: clear
3545
- }, " Очистить ", 32)) : vue.createCommentVNode("", true)
3955
+ }, [
3956
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
3957
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
3958
+ ], true)
3959
+ ], 32)) : vue.createCommentVNode("", true)
3546
3960
  ], 4)) : vue.createCommentVNode("", true)
3547
3961
  ]))
3548
3962
  ], 2);
3549
3963
  };
3550
3964
  }
3551
3965
  });
3552
- const TaoSelect = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-42551757"]]);
3966
+ const TaoSelect = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-c5d6cdd3"]]);
3553
3967
  const _hoisted_1$l = ["id", "aria-expanded", "aria-activedescendant", "aria-invalid", "aria-describedby", "disabled", "placeholder", "value"];
3554
3968
  const _hoisted_2$j = {
3555
3969
  key: 0,
@@ -3565,6 +3979,8 @@
3565
3979
  placeholder: { default: "Начните вводить" },
3566
3980
  disabled: { type: Boolean, default: false },
3567
3981
  error: { type: Boolean, default: false },
3982
+ emptyText: { default: "Ничего не найдено" },
3983
+ clearText: { default: "Очистить" },
3568
3984
  allowCreate: { type: Boolean, default: false }
3569
3985
  },
3570
3986
  emits: ["update:modelValue", "change", "create"],
@@ -3965,10 +4381,12 @@
3965
4381
  onBlur,
3966
4382
  onKeydown: onInputKeydown
3967
4383
  }, null, 40, _hoisted_1$l),
3968
- _cache[1] || (_cache[1] = vue.createElementVNode("span", {
3969
- class: "tao-combobox__chevron",
4384
+ vue.createElementVNode("span", {
4385
+ class: vue.normalizeClass(["tao-combobox__chevron", { "tao-combobox__chevron--custom": _ctx.$slots.chevron }]),
3970
4386
  "aria-hidden": "true"
3971
- }, null, -1))
4387
+ }, [
4388
+ vue.renderSlot(_ctx.$slots, "chevron", {}, void 0, true)
4389
+ ], 2)
3972
4390
  ], 544),
3973
4391
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
3974
4392
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -3985,7 +4403,11 @@
3985
4403
  class: "tao-combobox__list",
3986
4404
  role: "listbox"
3987
4405
  }, [
3988
- !rows.value.length ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_2$j, "Ничего не найдено")) : vue.createCommentVNode("", true),
4406
+ !rows.value.length ? (vue.openBlock(), vue.createElementBlock("li", _hoisted_2$j, [
4407
+ vue.renderSlot(_ctx.$slots, "empty", {}, () => [
4408
+ vue.createTextVNode(vue.toDisplayString(__props.emptyText), 1)
4409
+ ], true)
4410
+ ])) : vue.createCommentVNode("", true),
3989
4411
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(rows.value, (row, index) => {
3990
4412
  return vue.openBlock(), vue.createElementBlock("li", {
3991
4413
  id: `${listId}-row-${index}`,
@@ -4004,9 +4426,11 @@
4004
4426
  onClick: ($event) => activateRow(row),
4005
4427
  onMouseenter: ($event) => !(row.kind === "option" && row.option.disabled) && (activeIndex.value = index)
4006
4428
  }, [
4007
- row.kind === "create" ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
4429
+ row.kind === "create" ? vue.renderSlot(_ctx.$slots, "create", {
4430
+ text: row.text
4431
+ }, () => [
4008
4432
  vue.createTextVNode("Добавить «" + vue.toDisplayString(row.text) + "»", 1)
4009
- ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
4433
+ ], true, 0) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
4010
4434
  vue.createTextVNode(vue.toDisplayString(row.option.label), 1)
4011
4435
  ], 64))
4012
4436
  ], 42, _hoisted_3$g);
@@ -4017,14 +4441,18 @@
4017
4441
  type: "button",
4018
4442
  class: "tao-combobox__clear",
4019
4443
  onMousedown: vue.withModifiers(markPicking, ["prevent"])
4020
- }, " Очистить ", 32)) : vue.createCommentVNode("", true)
4444
+ }, [
4445
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
4446
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
4447
+ ], true)
4448
+ ], 32)) : vue.createCommentVNode("", true)
4021
4449
  ], 4)) : vue.createCommentVNode("", true)
4022
4450
  ]))
4023
4451
  ], 2);
4024
4452
  };
4025
4453
  }
4026
4454
  });
4027
- const TaoCombobox = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-60be67d0"]]);
4455
+ const TaoCombobox = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-2281e009"]]);
4028
4456
  const ISO_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
4029
4457
  function formatTaoDateIso(parts) {
4030
4458
  return `${String(parts.y).padStart(4, "0")}-${String(parts.m).padStart(2, "0")}-${String(parts.d).padStart(2, "0")}`;
@@ -4154,20 +4582,28 @@
4154
4582
  }
4155
4583
  const _hoisted_1$k = ["id", "aria-expanded", "aria-invalid", "aria-describedby", "disabled"];
4156
4584
  const _hoisted_2$i = { class: "tao-date__value" };
4157
- const _hoisted_3$f = ["aria-label"];
4158
- const _hoisted_4$f = { class: "tao-date__header" };
4159
- const _hoisted_5$c = { class: "tao-date__month" };
4160
- const _hoisted_6$9 = {
4585
+ const _hoisted_3$f = {
4586
+ class: "tao-date__icon",
4587
+ "aria-hidden": "true"
4588
+ };
4589
+ const _hoisted_4$f = ["aria-label"];
4590
+ const _hoisted_5$d = { class: "tao-date__header" };
4591
+ const _hoisted_6$a = ["aria-label"];
4592
+ const _hoisted_7$9 = { "aria-hidden": "true" };
4593
+ const _hoisted_8$8 = { class: "tao-date__month" };
4594
+ const _hoisted_9$3 = ["aria-label"];
4595
+ const _hoisted_10$3 = { "aria-hidden": "true" };
4596
+ const _hoisted_11$2 = {
4161
4597
  class: "tao-date__weekdays",
4162
4598
  "aria-hidden": "true"
4163
4599
  };
4164
- const _hoisted_7$7 = {
4600
+ const _hoisted_12$1 = {
4165
4601
  class: "tao-date__grid",
4166
4602
  role: "grid"
4167
4603
  };
4168
- const _hoisted_8$6 = ["aria-label", "aria-selected", "disabled", "onClick"];
4169
- const _hoisted_9$2 = { class: "tao-date__footer" };
4170
- const _hoisted_10$1 = ["disabled"];
4604
+ const _hoisted_13$1 = ["aria-label", "aria-selected", "disabled", "onClick"];
4605
+ const _hoisted_14$1 = { class: "tao-date__footer" };
4606
+ const _hoisted_15 = ["disabled"];
4171
4607
  const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
4172
4608
  ...{ name: "TaoDate" },
4173
4609
  __name: "TaoDate",
@@ -4178,7 +4614,11 @@
4178
4614
  error: { type: Boolean, default: false },
4179
4615
  min: { default: void 0 },
4180
4616
  max: { default: void 0 },
4181
- locale: { default: "ru-RU" }
4617
+ locale: { default: "ru-RU" },
4618
+ todayText: { default: "Сегодня" },
4619
+ clearText: { default: "Очистить" },
4620
+ prevMonthLabel: { default: "Предыдущий месяц" },
4621
+ nextMonthLabel: { default: "Следующий месяц" }
4182
4622
  },
4183
4623
  emits: ["update:modelValue", "change"],
4184
4624
  setup(__props, { emit: __emit }) {
@@ -4399,32 +4839,34 @@
4399
4839
  onKeydown: onTriggerKeydown
4400
4840
  }, [
4401
4841
  vue.createElementVNode("span", _hoisted_2$i, vue.toDisplayString(displayLabel.value || __props.placeholder), 1),
4402
- _cache[4] || (_cache[4] = vue.createElementVNode("svg", {
4403
- class: "tao-date__icon",
4404
- viewBox: "0 0 16 16",
4405
- width: "16",
4406
- height: "16",
4407
- "aria-hidden": "true",
4408
- focusable: "false"
4409
- }, [
4410
- vue.createElementVNode("rect", {
4411
- x: "2",
4412
- y: "3",
4413
- width: "12",
4414
- height: "11",
4415
- rx: "1.5",
4416
- fill: "none",
4417
- stroke: "currentColor",
4418
- "stroke-width": "1.4"
4419
- }),
4420
- vue.createElementVNode("path", {
4421
- d: "M5 1.5v3M11 1.5v3M2 6.5h12",
4422
- fill: "none",
4423
- stroke: "currentColor",
4424
- "stroke-width": "1.4",
4425
- "stroke-linecap": "round"
4426
- })
4427
- ], -1))
4842
+ vue.createElementVNode("span", _hoisted_3$f, [
4843
+ vue.renderSlot(_ctx.$slots, "icon", {}, () => [
4844
+ _cache[4] || (_cache[4] = vue.createElementVNode("svg", {
4845
+ viewBox: "0 0 16 16",
4846
+ width: "16",
4847
+ height: "16",
4848
+ focusable: "false"
4849
+ }, [
4850
+ vue.createElementVNode("rect", {
4851
+ x: "2",
4852
+ y: "3",
4853
+ width: "12",
4854
+ height: "11",
4855
+ rx: "1.5",
4856
+ fill: "none",
4857
+ stroke: "currentColor",
4858
+ "stroke-width": "1.4"
4859
+ }),
4860
+ vue.createElementVNode("path", {
4861
+ d: "M5 1.5v3M11 1.5v3M2 6.5h12",
4862
+ fill: "none",
4863
+ stroke: "currentColor",
4864
+ "stroke-width": "1.4",
4865
+ "stroke-linecap": "round"
4866
+ })
4867
+ ], -1))
4868
+ ], true)
4869
+ ])
4428
4870
  ], 42, _hoisted_1$k),
4429
4871
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
4430
4872
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -4439,61 +4881,67 @@
4439
4881
  style: vue.normalizeStyle(panelStyle.value),
4440
4882
  onKeydown: onPanelKeydown
4441
4883
  }, [
4442
- vue.createElementVNode("div", _hoisted_4$f, [
4884
+ vue.createElementVNode("div", _hoisted_5$d, [
4443
4885
  vue.createElementVNode("button", {
4444
4886
  type: "button",
4445
4887
  class: "tao-date__nav",
4446
- "aria-label": "Предыдущий месяц",
4888
+ "aria-label": __props.prevMonthLabel,
4447
4889
  onClick: _cache[0] || (_cache[0] = ($event) => goMonth(-1))
4448
- }, [..._cache[5] || (_cache[5] = [
4449
- vue.createElementVNode("svg", {
4450
- viewBox: "0 0 24 24",
4451
- width: "14",
4452
- height: "14",
4453
- "aria-hidden": "true",
4454
- focusable: "false"
4455
- }, [
4456
- vue.createElementVNode("path", {
4457
- fill: "none",
4458
- stroke: "currentColor",
4459
- "stroke-width": "2.2",
4460
- "stroke-linecap": "round",
4461
- "stroke-linejoin": "round",
4462
- d: "M14.5 5 8 12l6.5 7"
4463
- })
4464
- ], -1)
4465
- ])]),
4466
- vue.createElementVNode("p", _hoisted_5$c, vue.toDisplayString(monthLabel.value), 1),
4890
+ }, [
4891
+ vue.createElementVNode("span", _hoisted_7$9, [
4892
+ vue.renderSlot(_ctx.$slots, "prev-icon", {}, () => [
4893
+ _cache[5] || (_cache[5] = vue.createElementVNode("svg", {
4894
+ viewBox: "0 0 24 24",
4895
+ width: "14",
4896
+ height: "14",
4897
+ focusable: "false"
4898
+ }, [
4899
+ vue.createElementVNode("path", {
4900
+ fill: "none",
4901
+ stroke: "currentColor",
4902
+ "stroke-width": "2.2",
4903
+ "stroke-linecap": "round",
4904
+ "stroke-linejoin": "round",
4905
+ d: "M14.5 5 8 12l6.5 7"
4906
+ })
4907
+ ], -1))
4908
+ ], true)
4909
+ ])
4910
+ ], 8, _hoisted_6$a),
4911
+ vue.createElementVNode("p", _hoisted_8$8, vue.toDisplayString(monthLabel.value), 1),
4467
4912
  vue.createElementVNode("button", {
4468
4913
  type: "button",
4469
4914
  class: "tao-date__nav",
4470
- "aria-label": "Следующий месяц",
4915
+ "aria-label": __props.nextMonthLabel,
4471
4916
  onClick: _cache[1] || (_cache[1] = ($event) => goMonth(1))
4472
- }, [..._cache[6] || (_cache[6] = [
4473
- vue.createElementVNode("svg", {
4474
- viewBox: "0 0 24 24",
4475
- width: "14",
4476
- height: "14",
4477
- "aria-hidden": "true",
4478
- focusable: "false"
4479
- }, [
4480
- vue.createElementVNode("path", {
4481
- fill: "none",
4482
- stroke: "currentColor",
4483
- "stroke-width": "2.2",
4484
- "stroke-linecap": "round",
4485
- "stroke-linejoin": "round",
4486
- d: "M9.5 5 16 12l-6.5 7"
4487
- })
4488
- ], -1)
4489
- ])])
4917
+ }, [
4918
+ vue.createElementVNode("span", _hoisted_10$3, [
4919
+ vue.renderSlot(_ctx.$slots, "next-icon", {}, () => [
4920
+ _cache[6] || (_cache[6] = vue.createElementVNode("svg", {
4921
+ viewBox: "0 0 24 24",
4922
+ width: "14",
4923
+ height: "14",
4924
+ focusable: "false"
4925
+ }, [
4926
+ vue.createElementVNode("path", {
4927
+ fill: "none",
4928
+ stroke: "currentColor",
4929
+ "stroke-width": "2.2",
4930
+ "stroke-linecap": "round",
4931
+ "stroke-linejoin": "round",
4932
+ d: "M9.5 5 16 12l-6.5 7"
4933
+ })
4934
+ ], -1))
4935
+ ], true)
4936
+ ])
4937
+ ], 8, _hoisted_9$3)
4490
4938
  ]),
4491
- vue.createElementVNode("div", _hoisted_6$9, [
4939
+ vue.createElementVNode("div", _hoisted_11$2, [
4492
4940
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekdays.value, (day) => {
4493
4941
  return vue.openBlock(), vue.createElementBlock("span", { key: day }, vue.toDisplayString(day), 1);
4494
4942
  }), 128))
4495
4943
  ]),
4496
- vue.createElementVNode("div", _hoisted_7$7, [
4944
+ vue.createElementVNode("div", _hoisted_12$1, [
4497
4945
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(cells.value, (cell) => {
4498
4946
  return vue.openBlock(), vue.createElementBlock("button", {
4499
4947
  key: cell.iso,
@@ -4512,42 +4960,58 @@
4512
4960
  onMousedown: _cache[2] || (_cache[2] = vue.withModifiers(() => {
4513
4961
  }, ["prevent"])),
4514
4962
  onClick: ($event) => selectDay(cell.iso)
4515
- }, vue.toDisplayString(cell.day), 43, _hoisted_8$6);
4963
+ }, vue.toDisplayString(cell.day), 43, _hoisted_13$1);
4516
4964
  }), 128))
4517
4965
  ]),
4518
- vue.createElementVNode("div", _hoisted_9$2, [
4966
+ vue.createElementVNode("div", _hoisted_14$1, [
4519
4967
  vue.createElementVNode("button", {
4520
4968
  type: "button",
4521
4969
  class: "tao-date__link",
4522
4970
  disabled: !todayEnabled.value,
4523
4971
  onClick: _cache[3] || (_cache[3] = ($event) => selectDay(todayIso.value))
4524
- }, " Сегодня ", 8, _hoisted_10$1),
4972
+ }, [
4973
+ vue.renderSlot(_ctx.$slots, "today", {}, () => [
4974
+ vue.createTextVNode(vue.toDisplayString(__props.todayText), 1)
4975
+ ], true)
4976
+ ], 8, _hoisted_15),
4525
4977
  valueIso.value ? (vue.openBlock(), vue.createElementBlock("button", {
4526
4978
  key: 0,
4527
4979
  type: "button",
4528
4980
  class: "tao-date__link",
4529
4981
  onClick: clear
4530
- }, "Очистить")) : vue.createCommentVNode("", true)
4982
+ }, [
4983
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
4984
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
4985
+ ], true)
4986
+ ])) : vue.createCommentVNode("", true)
4531
4987
  ])
4532
- ], 44, _hoisted_3$f)) : vue.createCommentVNode("", true)
4988
+ ], 44, _hoisted_4$f)) : vue.createCommentVNode("", true)
4533
4989
  ]))
4534
4990
  ], 2);
4535
4991
  };
4536
4992
  }
4537
4993
  });
4538
- const TaoDate = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-f4a9cddd"]]);
4994
+ const TaoDate = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-771836c8"]]);
4539
4995
  const _hoisted_1$j = ["id", "aria-expanded", "aria-invalid", "aria-describedby", "disabled"];
4540
4996
  const _hoisted_2$h = { class: "tao-date-range__value" };
4541
- const _hoisted_3$e = ["aria-label"];
4542
- const _hoisted_4$e = { class: "tao-date__header" };
4543
- const _hoisted_5$b = { class: "tao-date__month" };
4544
- const _hoisted_6$8 = {
4997
+ const _hoisted_3$e = {
4998
+ class: "tao-date-range__icon",
4999
+ "aria-hidden": "true"
5000
+ };
5001
+ const _hoisted_4$e = ["aria-label"];
5002
+ const _hoisted_5$c = { class: "tao-date__header" };
5003
+ const _hoisted_6$9 = ["aria-label"];
5004
+ const _hoisted_7$8 = { "aria-hidden": "true" };
5005
+ const _hoisted_8$7 = { class: "tao-date__month" };
5006
+ const _hoisted_9$2 = ["aria-label"];
5007
+ const _hoisted_10$2 = { "aria-hidden": "true" };
5008
+ const _hoisted_11$1 = {
4545
5009
  class: "tao-date__weekdays",
4546
5010
  "aria-hidden": "true"
4547
5011
  };
4548
- const _hoisted_7$6 = ["aria-label", "aria-selected", "disabled", "onMouseenter", "onClick"];
4549
- const _hoisted_8$5 = { class: "tao-date__footer" };
4550
- const _hoisted_9$1 = ["disabled"];
5012
+ const _hoisted_12 = ["aria-label", "aria-selected", "disabled", "onMouseenter", "onClick"];
5013
+ const _hoisted_13 = { class: "tao-date__footer" };
5014
+ const _hoisted_14 = ["disabled"];
4551
5015
  const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
4552
5016
  ...{ name: "TaoDateRange" },
4553
5017
  __name: "TaoDateRange",
@@ -4558,7 +5022,11 @@
4558
5022
  error: { type: Boolean, default: false },
4559
5023
  min: { default: void 0 },
4560
5024
  max: { default: void 0 },
4561
- locale: { default: "ru-RU" }
5025
+ locale: { default: "ru-RU" },
5026
+ todayText: { default: "Сегодня" },
5027
+ clearText: { default: "Очистить" },
5028
+ prevMonthLabel: { default: "Предыдущий месяц" },
5029
+ nextMonthLabel: { default: "Следующий месяц" }
4562
5030
  },
4563
5031
  emits: ["update:modelValue", "change"],
4564
5032
  setup(__props, { emit: __emit }) {
@@ -4833,32 +5301,34 @@
4833
5301
  onKeydown: onTriggerKeydown
4834
5302
  }, [
4835
5303
  vue.createElementVNode("span", _hoisted_2$h, vue.toDisplayString(displayLabel.value || __props.placeholder), 1),
4836
- _cache[3] || (_cache[3] = vue.createElementVNode("svg", {
4837
- class: "tao-date-range__icon",
4838
- viewBox: "0 0 16 16",
4839
- width: "16",
4840
- height: "16",
4841
- "aria-hidden": "true",
4842
- focusable: "false"
4843
- }, [
4844
- vue.createElementVNode("rect", {
4845
- x: "2",
4846
- y: "3",
4847
- width: "12",
4848
- height: "11",
4849
- rx: "1.5",
4850
- fill: "none",
4851
- stroke: "currentColor",
4852
- "stroke-width": "1.4"
4853
- }),
4854
- vue.createElementVNode("path", {
4855
- d: "M5 1.5v3M11 1.5v3M2 6.5h12",
4856
- fill: "none",
4857
- stroke: "currentColor",
4858
- "stroke-width": "1.4",
4859
- "stroke-linecap": "round"
4860
- })
4861
- ], -1))
5304
+ vue.createElementVNode("span", _hoisted_3$e, [
5305
+ vue.renderSlot(_ctx.$slots, "icon", {}, () => [
5306
+ _cache[3] || (_cache[3] = vue.createElementVNode("svg", {
5307
+ viewBox: "0 0 16 16",
5308
+ width: "16",
5309
+ height: "16",
5310
+ focusable: "false"
5311
+ }, [
5312
+ vue.createElementVNode("rect", {
5313
+ x: "2",
5314
+ y: "3",
5315
+ width: "12",
5316
+ height: "11",
5317
+ rx: "1.5",
5318
+ fill: "none",
5319
+ stroke: "currentColor",
5320
+ "stroke-width": "1.4"
5321
+ }),
5322
+ vue.createElementVNode("path", {
5323
+ d: "M5 1.5v3M11 1.5v3M2 6.5h12",
5324
+ fill: "none",
5325
+ stroke: "currentColor",
5326
+ "stroke-width": "1.4",
5327
+ "stroke-linecap": "round"
5328
+ })
5329
+ ], -1))
5330
+ ], true)
5331
+ ])
4862
5332
  ], 42, _hoisted_1$j),
4863
5333
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
4864
5334
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -4873,56 +5343,62 @@
4873
5343
  style: vue.normalizeStyle(panelStyle.value),
4874
5344
  onKeydown: onPanelKeydown
4875
5345
  }, [
4876
- vue.createElementVNode("div", _hoisted_4$e, [
5346
+ vue.createElementVNode("div", _hoisted_5$c, [
4877
5347
  vue.createElementVNode("button", {
4878
5348
  type: "button",
4879
5349
  class: "tao-date__nav",
4880
- "aria-label": "Предыдущий месяц",
5350
+ "aria-label": __props.prevMonthLabel,
4881
5351
  onClick: _cache[0] || (_cache[0] = ($event) => goMonth(-1))
4882
- }, [..._cache[4] || (_cache[4] = [
4883
- vue.createElementVNode("svg", {
4884
- viewBox: "0 0 24 24",
4885
- width: "14",
4886
- height: "14",
4887
- "aria-hidden": "true",
4888
- focusable: "false"
4889
- }, [
4890
- vue.createElementVNode("path", {
4891
- fill: "none",
4892
- stroke: "currentColor",
4893
- "stroke-width": "2.2",
4894
- "stroke-linecap": "round",
4895
- "stroke-linejoin": "round",
4896
- d: "M14.5 5 8 12l6.5 7"
4897
- })
4898
- ], -1)
4899
- ])]),
4900
- vue.createElementVNode("p", _hoisted_5$b, vue.toDisplayString(monthLabel.value), 1),
5352
+ }, [
5353
+ vue.createElementVNode("span", _hoisted_7$8, [
5354
+ vue.renderSlot(_ctx.$slots, "prev-icon", {}, () => [
5355
+ _cache[4] || (_cache[4] = vue.createElementVNode("svg", {
5356
+ viewBox: "0 0 24 24",
5357
+ width: "14",
5358
+ height: "14",
5359
+ focusable: "false"
5360
+ }, [
5361
+ vue.createElementVNode("path", {
5362
+ fill: "none",
5363
+ stroke: "currentColor",
5364
+ "stroke-width": "2.2",
5365
+ "stroke-linecap": "round",
5366
+ "stroke-linejoin": "round",
5367
+ d: "M14.5 5 8 12l6.5 7"
5368
+ })
5369
+ ], -1))
5370
+ ], true)
5371
+ ])
5372
+ ], 8, _hoisted_6$9),
5373
+ vue.createElementVNode("p", _hoisted_8$7, vue.toDisplayString(monthLabel.value), 1),
4901
5374
  vue.createElementVNode("button", {
4902
5375
  type: "button",
4903
5376
  class: "tao-date__nav",
4904
- "aria-label": "Следующий месяц",
5377
+ "aria-label": __props.nextMonthLabel,
4905
5378
  onClick: _cache[1] || (_cache[1] = ($event) => goMonth(1))
4906
- }, [..._cache[5] || (_cache[5] = [
4907
- vue.createElementVNode("svg", {
4908
- viewBox: "0 0 24 24",
4909
- width: "14",
4910
- height: "14",
4911
- "aria-hidden": "true",
4912
- focusable: "false"
4913
- }, [
4914
- vue.createElementVNode("path", {
4915
- fill: "none",
4916
- stroke: "currentColor",
4917
- "stroke-width": "2.2",
4918
- "stroke-linecap": "round",
4919
- "stroke-linejoin": "round",
4920
- d: "M9.5 5 16 12l-6.5 7"
4921
- })
4922
- ], -1)
4923
- ])])
5379
+ }, [
5380
+ vue.createElementVNode("span", _hoisted_10$2, [
5381
+ vue.renderSlot(_ctx.$slots, "next-icon", {}, () => [
5382
+ _cache[5] || (_cache[5] = vue.createElementVNode("svg", {
5383
+ viewBox: "0 0 24 24",
5384
+ width: "14",
5385
+ height: "14",
5386
+ focusable: "false"
5387
+ }, [
5388
+ vue.createElementVNode("path", {
5389
+ fill: "none",
5390
+ stroke: "currentColor",
5391
+ "stroke-width": "2.2",
5392
+ "stroke-linecap": "round",
5393
+ "stroke-linejoin": "round",
5394
+ d: "M9.5 5 16 12l-6.5 7"
5395
+ })
5396
+ ], -1))
5397
+ ], true)
5398
+ ])
5399
+ ], 8, _hoisted_9$2)
4924
5400
  ]),
4925
- vue.createElementVNode("div", _hoisted_6$8, [
5401
+ vue.createElementVNode("div", _hoisted_11$1, [
4926
5402
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekdays.value, (day) => {
4927
5403
  return vue.openBlock(), vue.createElementBlock("span", { key: day }, vue.toDisplayString(day), 1);
4928
5404
  }), 128))
@@ -4955,30 +5431,38 @@
4955
5431
  }, ["prevent"])),
4956
5432
  onMouseenter: ($event) => onDayEnter(cell.iso),
4957
5433
  onClick: ($event) => selectDay(cell.iso)
4958
- }, vue.toDisplayString(cell.day), 43, _hoisted_7$6);
5434
+ }, vue.toDisplayString(cell.day), 43, _hoisted_12);
4959
5435
  }), 128))
4960
5436
  ], 32),
4961
- vue.createElementVNode("div", _hoisted_8$5, [
5437
+ vue.createElementVNode("div", _hoisted_13, [
4962
5438
  vue.createElementVNode("button", {
4963
5439
  type: "button",
4964
5440
  class: "tao-date__link",
4965
5441
  disabled: !todayEnabled.value,
4966
5442
  onClick: selectToday
4967
- }, " Сегодня ", 8, _hoisted_9$1),
5443
+ }, [
5444
+ vue.renderSlot(_ctx.$slots, "today", {}, () => [
5445
+ vue.createTextVNode(vue.toDisplayString(__props.todayText), 1)
5446
+ ], true)
5447
+ ], 8, _hoisted_14),
4968
5448
  committed.value ? (vue.openBlock(), vue.createElementBlock("button", {
4969
5449
  key: 0,
4970
5450
  type: "button",
4971
5451
  class: "tao-date__link",
4972
5452
  onClick: clear
4973
- }, "Очистить")) : vue.createCommentVNode("", true)
5453
+ }, [
5454
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
5455
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
5456
+ ], true)
5457
+ ])) : vue.createCommentVNode("", true)
4974
5458
  ])
4975
- ], 44, _hoisted_3$e)) : vue.createCommentVNode("", true)
5459
+ ], 44, _hoisted_4$e)) : vue.createCommentVNode("", true)
4976
5460
  ]))
4977
5461
  ], 2);
4978
5462
  };
4979
5463
  }
4980
5464
  });
4981
- const TaoDateRange = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-3d067081"]]);
5465
+ const TaoDateRange = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-4394053c"]]);
4982
5466
  const _hoisted_1$i = ["for"];
4983
5467
  const _hoisted_2$g = ["id", "checked", "disabled", "aria-checked"];
4984
5468
  const _hoisted_3$d = {
@@ -5297,15 +5781,15 @@
5297
5781
  class: "tao-segmented-option__icon",
5298
5782
  "aria-hidden": "true"
5299
5783
  };
5300
- const _hoisted_5$a = {
5784
+ const _hoisted_5$b = {
5301
5785
  key: 1,
5302
5786
  class: "tao-segmented-option__label"
5303
5787
  };
5304
- const _hoisted_6$7 = {
5788
+ const _hoisted_6$8 = {
5305
5789
  key: 2,
5306
5790
  class: "tao-segmented-option__sr"
5307
5791
  };
5308
- const _hoisted_7$5 = {
5792
+ const _hoisted_7$7 = {
5309
5793
  key: 3,
5310
5794
  class: "tao-segmented-option__count"
5311
5795
  };
@@ -5390,12 +5874,12 @@
5390
5874
  vue.createTextVNode(vue.toDisplayString(__props.icon), 1)
5391
5875
  ], true)
5392
5876
  ])) : vue.createCommentVNode("", true),
5393
- hasLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$a, [
5877
+ hasLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$b, [
5394
5878
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
5395
5879
  vue.createTextVNode(vue.toDisplayString(__props.label), 1)
5396
5880
  ], true)
5397
- ])) : __props.ariaLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$7, vue.toDisplayString(__props.ariaLabel), 1)) : vue.createCommentVNode("", true),
5398
- countLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$5, vue.toDisplayString(countLabel.value), 1)) : vue.createCommentVNode("", true)
5881
+ ])) : __props.ariaLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$8, vue.toDisplayString(__props.ariaLabel), 1)) : vue.createCommentVNode("", true),
5882
+ countLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$7, vue.toDisplayString(countLabel.value), 1)) : vue.createCommentVNode("", true)
5399
5883
  ])
5400
5884
  ], 10, _hoisted_1$e);
5401
5885
  };
@@ -5412,13 +5896,16 @@
5412
5896
  key: 1,
5413
5897
  class: "tao-alert__message"
5414
5898
  };
5899
+ const _hoisted_5$a = ["aria-label"];
5900
+ const _hoisted_6$7 = { "aria-hidden": "true" };
5415
5901
  const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
5416
5902
  ...{ name: "TaoAlert" },
5417
5903
  __name: "TaoAlert",
5418
5904
  props: {
5419
5905
  type: { default: "info" },
5420
5906
  title: { default: "" },
5421
- closable: { type: Boolean, default: false }
5907
+ closable: { type: Boolean, default: false },
5908
+ closeLabel: { default: "Закрыть" }
5422
5909
  },
5423
5910
  emits: ["close"],
5424
5911
  setup(__props, { emit: __emit }) {
@@ -5442,22 +5929,28 @@
5442
5929
  key: 0,
5443
5930
  type: "button",
5444
5931
  class: "tao-alert__close",
5445
- "aria-label": "Закрыть",
5932
+ "aria-label": __props.closeLabel,
5446
5933
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
5447
- }, " × ")) : vue.createCommentVNode("", true)
5934
+ }, [
5935
+ vue.createElementVNode("span", _hoisted_6$7, [
5936
+ vue.renderSlot(_ctx.$slots, "close-icon", {}, () => [
5937
+ _cache[1] || (_cache[1] = vue.createTextVNode("×", -1))
5938
+ ], true)
5939
+ ])
5940
+ ], 8, _hoisted_5$a)) : vue.createCommentVNode("", true)
5448
5941
  ], 10, _hoisted_1$d);
5449
5942
  };
5450
5943
  }
5451
5944
  });
5452
- const TaoAlert = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-4c89fa1f"]]);
5945
+ const TaoAlert = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-1a1dbef3"]]);
5453
5946
  const _hoisted_1$c = { key: 0 };
5454
5947
  const _hoisted_2$a = ["aria-sort"];
5455
5948
  const _hoisted_3$9 = ["onClick"];
5456
5949
  const _hoisted_4$9 = { key: 1 };
5457
5950
  const _hoisted_5$9 = { key: 0 };
5458
5951
  const _hoisted_6$6 = ["colspan"];
5459
- const _hoisted_7$4 = ["onClick"];
5460
- const _hoisted_8$4 = {
5952
+ const _hoisted_7$6 = ["onClick"];
5953
+ const _hoisted_8$6 = {
5461
5954
  key: 0,
5462
5955
  class: "tao-table__loading",
5463
5956
  "aria-busy": "true"
@@ -5610,11 +6103,11 @@
5610
6103
  ], true)
5611
6104
  ], 4);
5612
6105
  }), 128))
5613
- ], 8, _hoisted_7$4);
6106
+ ], 8, _hoisted_7$6);
5614
6107
  }), 128))
5615
6108
  ])
5616
6109
  ], 2),
5617
- __props.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$4, [
6110
+ __props.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$6, [
5618
6111
  vue.renderSlot(_ctx.$slots, "loading", {}, () => [
5619
6112
  vue.createVNode(TaoLoader, { size: 36 })
5620
6113
  ], true)
@@ -5654,15 +6147,17 @@
5654
6147
  class: "tao-pagination__total"
5655
6148
  };
5656
6149
  const _hoisted_3$8 = { class: "tao-pagination__pages" };
5657
- const _hoisted_4$8 = ["disabled"];
5658
- const _hoisted_5$8 = ["aria-label", "disabled", "onClick"];
5659
- const _hoisted_6$5 = {
6150
+ const _hoisted_4$8 = ["aria-label", "disabled"];
6151
+ const _hoisted_5$8 = { "aria-hidden": "true" };
6152
+ const _hoisted_6$5 = ["aria-label", "disabled", "onClick"];
6153
+ const _hoisted_7$5 = {
5660
6154
  key: 1,
5661
6155
  class: "tao-pagination__ellipsis",
5662
6156
  "aria-hidden": "true"
5663
6157
  };
5664
- const _hoisted_7$3 = ["aria-current", "aria-label", "disabled", "onClick"];
5665
- const _hoisted_8$3 = ["disabled"];
6158
+ const _hoisted_8$5 = ["aria-current", "aria-label", "disabled", "onClick"];
6159
+ const _hoisted_9$1 = ["aria-label", "disabled"];
6160
+ const _hoisted_10$1 = { "aria-hidden": "true" };
5666
6161
  const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
5667
6162
  ...{ name: "TaoPagination" },
5668
6163
  __name: "TaoPagination",
@@ -5675,7 +6170,12 @@
5675
6170
  showTotal: { type: Boolean, default: true },
5676
6171
  size: { default: "medium" },
5677
6172
  jump: { default: 5 },
5678
- ariaLabel: { default: "Пагинация" }
6173
+ ariaLabel: { default: "Пагинация" },
6174
+ prevLabel: { default: "Назад" },
6175
+ nextLabel: { default: "Вперёд" },
6176
+ pageLabel: { default: "Страница {page}" },
6177
+ jumpPrevLabel: { default: "Назад на {n} страниц" },
6178
+ jumpNextLabel: { default: "Вперёд на {n} страниц" }
5679
6179
  },
5680
6180
  emits: ["update:page", "change"],
5681
6181
  setup(__props, { emit: __emit }) {
@@ -5708,20 +6208,32 @@
5708
6208
  "aria-label": __props.ariaLabel
5709
6209
  }, [
5710
6210
  __props.showTotal ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$9, [
5711
- __props.total === 0 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
5712
- vue.createTextVNode("0 из 0")
5713
- ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
5714
- vue.createTextVNode(vue.toDisplayString(from.value) + "–" + vue.toDisplayString(to.value) + " из " + vue.toDisplayString(__props.total), 1)
5715
- ], 64))
6211
+ vue.renderSlot(_ctx.$slots, "total", {
6212
+ from: from.value,
6213
+ to: to.value,
6214
+ total: __props.total
6215
+ }, () => [
6216
+ __props.total === 0 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
6217
+ vue.createTextVNode("0 из 0")
6218
+ ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
6219
+ vue.createTextVNode(vue.toDisplayString(from.value) + "–" + vue.toDisplayString(to.value) + " из " + vue.toDisplayString(__props.total), 1)
6220
+ ], 64))
6221
+ ], true)
5716
6222
  ])) : vue.createCommentVNode("", true),
5717
6223
  vue.createElementVNode("div", _hoisted_3$8, [
5718
6224
  vue.createElementVNode("button", {
5719
6225
  type: "button",
5720
6226
  class: "tao-pagination__btn",
5721
- "aria-label": "Назад",
6227
+ "aria-label": __props.prevLabel,
5722
6228
  disabled: __props.disabled || current.value <= 1,
5723
6229
  onClick: _cache[0] || (_cache[0] = ($event) => goTo(current.value - 1))
5724
- }, " ‹ ", 8, _hoisted_4$8),
6230
+ }, [
6231
+ vue.createElementVNode("span", _hoisted_5$8, [
6232
+ vue.renderSlot(_ctx.$slots, "prev-icon", {}, () => [
6233
+ _cache[2] || (_cache[2] = vue.createTextVNode("‹", -1))
6234
+ ], true)
6235
+ ])
6236
+ ], 8, _hoisted_4$8),
5725
6237
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(items.value, (item) => {
5726
6238
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5727
6239
  key: item.type === "page" ? item.page : item.id
@@ -5730,33 +6242,39 @@
5730
6242
  key: 0,
5731
6243
  type: "button",
5732
6244
  class: "tao-pagination__btn tao-pagination__btn--jump",
5733
- "aria-label": item.id === "left" ? `Назад на ${__props.jump} страниц` : `Вперёд на ${__props.jump} страниц`,
6245
+ "aria-label": item.id === "left" ? __props.jumpPrevLabel.replace("{n}", String(__props.jump)) : __props.jumpNextLabel.replace("{n}", String(__props.jump)),
5734
6246
  disabled: __props.disabled,
5735
6247
  onClick: ($event) => goTo(item.id === "left" ? current.value - __props.jump : current.value + __props.jump)
5736
- }, " … ", 8, _hoisted_5$8)) : item.type === "ellipsis" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$5, "…")) : (vue.openBlock(), vue.createElementBlock("button", {
6248
+ }, " … ", 8, _hoisted_6$5)) : item.type === "ellipsis" ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_7$5, "…")) : (vue.openBlock(), vue.createElementBlock("button", {
5737
6249
  key: 2,
5738
6250
  type: "button",
5739
6251
  class: vue.normalizeClass(["tao-pagination__btn", { "tao-pagination__btn--current": item.page === current.value }]),
5740
6252
  "aria-current": item.page === current.value ? "page" : void 0,
5741
- "aria-label": `Страница ${item.page}`,
6253
+ "aria-label": __props.pageLabel.replace("{page}", String(item.page)),
5742
6254
  disabled: __props.disabled,
5743
6255
  onClick: ($event) => goTo(item.page)
5744
- }, vue.toDisplayString(item.page), 11, _hoisted_7$3))
6256
+ }, vue.toDisplayString(item.page), 11, _hoisted_8$5))
5745
6257
  ], 64);
5746
6258
  }), 128)),
5747
6259
  vue.createElementVNode("button", {
5748
6260
  type: "button",
5749
6261
  class: "tao-pagination__btn",
5750
- "aria-label": "Вперёд",
6262
+ "aria-label": __props.nextLabel,
5751
6263
  disabled: __props.disabled || current.value >= pageCount.value,
5752
6264
  onClick: _cache[1] || (_cache[1] = ($event) => goTo(current.value + 1))
5753
- }, " › ", 8, _hoisted_8$3)
6265
+ }, [
6266
+ vue.createElementVNode("span", _hoisted_10$1, [
6267
+ vue.renderSlot(_ctx.$slots, "next-icon", {}, () => [
6268
+ _cache[3] || (_cache[3] = vue.createTextVNode("›", -1))
6269
+ ], true)
6270
+ ])
6271
+ ], 8, _hoisted_9$1)
5754
6272
  ])
5755
6273
  ], 10, _hoisted_1$b);
5756
6274
  };
5757
6275
  }
5758
6276
  });
5759
- const TaoPagination = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-fd69be36"]]);
6277
+ const TaoPagination = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-a890810c"]]);
5760
6278
  const _hoisted_1$a = { class: "tao-empty" };
5761
6279
  const _hoisted_2$8 = {
5762
6280
  key: 0,
@@ -5835,8 +6353,10 @@
5835
6353
  };
5836
6354
  const _hoisted_3$6 = ["id"];
5837
6355
  const _hoisted_4$6 = { key: 1 };
5838
- const _hoisted_5$6 = { class: "tao-drawer__content" };
5839
- const _hoisted_6$4 = {
6356
+ const _hoisted_5$6 = ["aria-label"];
6357
+ const _hoisted_6$4 = { "aria-hidden": "true" };
6358
+ const _hoisted_7$4 = { class: "tao-drawer__content" };
6359
+ const _hoisted_8$4 = {
5840
6360
  key: 1,
5841
6361
  class: "tao-drawer__footer"
5842
6362
  };
@@ -5847,7 +6367,8 @@
5847
6367
  modelValue: { type: Boolean },
5848
6368
  title: { default: "" },
5849
6369
  side: { default: "right" },
5850
- closable: { type: Boolean, default: true }
6370
+ closable: { type: Boolean, default: true },
6371
+ closeLabel: { default: "Закрыть" }
5851
6372
  },
5852
6373
  emits: ["update:modelValue", "close"],
5853
6374
  setup(__props, { emit: __emit }) {
@@ -5956,14 +6477,20 @@
5956
6477
  key: 2,
5957
6478
  type: "button",
5958
6479
  class: "tao-drawer__close",
5959
- "aria-label": "Закрыть",
6480
+ "aria-label": __props.closeLabel,
5960
6481
  onClick: close
5961
- }, " × ")) : vue.createCommentVNode("", true)
6482
+ }, [
6483
+ vue.createElementVNode("span", _hoisted_6$4, [
6484
+ vue.renderSlot(_ctx.$slots, "close-icon", {}, () => [
6485
+ _cache[0] || (_cache[0] = vue.createTextVNode("×", -1))
6486
+ ], true)
6487
+ ])
6488
+ ], 8, _hoisted_5$6)) : vue.createCommentVNode("", true)
5962
6489
  ])) : vue.createCommentVNode("", true),
5963
- vue.createElementVNode("div", _hoisted_5$6, [
6490
+ vue.createElementVNode("div", _hoisted_7$4, [
5964
6491
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
5965
6492
  ]),
5966
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, [
6493
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$4, [
5967
6494
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
5968
6495
  ])) : vue.createCommentVNode("", true)
5969
6496
  ], 8, _hoisted_1$8)
@@ -5975,7 +6502,7 @@
5975
6502
  };
5976
6503
  }
5977
6504
  });
5978
- const TaoDrawer = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-6a0c0e98"]]);
6505
+ const TaoDrawer = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-14730fe9"]]);
5979
6506
  const _hoisted_1$7 = ["title"];
5980
6507
  const _hoisted_2$6 = { class: "tao-avatar__face" };
5981
6508
  const _hoisted_3$5 = ["src", "alt"];
@@ -5994,7 +6521,10 @@
5994
6521
  alt: { default: "" },
5995
6522
  size: { default: "medium" },
5996
6523
  dot: { type: [Boolean, String], default: false },
5997
- count: { default: void 0 }
6524
+ count: { default: void 0 },
6525
+ fallbackLabel: { default: "Аватар" },
6526
+ notificationsLabel: { default: "{count} уведомлений" },
6527
+ dotLabels: { default: () => ({}) }
5998
6528
  },
5999
6529
  setup(__props) {
6000
6530
  const props = __props;
@@ -6039,7 +6569,7 @@
6039
6569
  }
6040
6570
  return String(props.count);
6041
6571
  });
6042
- const dotLabel = {
6572
+ const defaultDotLabel = {
6043
6573
  success: "в сети",
6044
6574
  danger: "занят",
6045
6575
  warning: "отошёл",
@@ -6047,13 +6577,13 @@
6047
6577
  neutral: "не в сети"
6048
6578
  };
6049
6579
  const label = vue.computed(() => {
6050
- const base = props.alt || props.name || "Аватар";
6580
+ const base = props.alt || props.name || props.fallbackLabel;
6051
6581
  const extra = [];
6052
6582
  if (dotTone.value) {
6053
- extra.push(dotLabel[dotTone.value]);
6583
+ extra.push(props.dotLabels[dotTone.value] ?? defaultDotLabel[dotTone.value]);
6054
6584
  }
6055
6585
  if (badge.value) {
6056
- extra.push(`${badge.value} уведомлений`);
6586
+ extra.push(props.notificationsLabel.replace("{count}", badge.value));
6057
6587
  }
6058
6588
  return extra.length ? `${base}, ${extra.join(", ")}` : base;
6059
6589
  });
@@ -6084,11 +6614,8 @@
6084
6614
  };
6085
6615
  }
6086
6616
  });
6087
- const TaoAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-cb4ec893"]]);
6088
- const _hoisted_1$6 = {
6089
- class: "tao-breadcrumb",
6090
- "aria-label": "Хлебные крошки"
6091
- };
6617
+ const TaoAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-03b60017"]]);
6618
+ const _hoisted_1$6 = ["aria-label"];
6092
6619
  const _hoisted_2$5 = { class: "tao-breadcrumb__list" };
6093
6620
  const _hoisted_3$4 = {
6094
6621
  key: 0,
@@ -6108,11 +6635,15 @@
6108
6635
  ...{ name: "TaoBreadcrumb" },
6109
6636
  __name: "TaoBreadcrumb",
6110
6637
  props: {
6111
- items: {}
6638
+ items: {},
6639
+ ariaLabel: { default: "Хлебные крошки" }
6112
6640
  },
6113
6641
  setup(__props) {
6114
6642
  return (_ctx, _cache) => {
6115
- return vue.openBlock(), vue.createElementBlock("nav", _hoisted_1$6, [
6643
+ return vue.openBlock(), vue.createElementBlock("nav", {
6644
+ class: "tao-breadcrumb",
6645
+ "aria-label": __props.ariaLabel
6646
+ }, [
6116
6647
  vue.createElementVNode("ol", _hoisted_2$5, [
6117
6648
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
6118
6649
  return vue.openBlock(), vue.createElementBlock("li", {
@@ -6133,11 +6664,11 @@
6133
6664
  ]);
6134
6665
  }), 128))
6135
6666
  ])
6136
- ]);
6667
+ ], 8, _hoisted_1$6);
6137
6668
  };
6138
6669
  }
6139
6670
  });
6140
- const TaoBreadcrumb = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-48cf9bb5"]]);
6671
+ const TaoBreadcrumb = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-94ab1f67"]]);
6141
6672
  const _hoisted_1$5 = ["aria-label"];
6142
6673
  const _hoisted_2$4 = {
6143
6674
  class: "tao-counter__row",
@@ -6221,16 +6752,13 @@
6221
6752
  });
6222
6753
  const TaoCounter = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-6b746f2f"]]);
6223
6754
  const _hoisted_1$4 = { class: "tao-carousel__row" };
6224
- const _hoisted_2$3 = ["disabled"];
6225
- const _hoisted_3$3 = ["aria-label"];
6226
- const _hoisted_4$3 = ["disabled"];
6227
- const _hoisted_5$3 = {
6228
- key: 0,
6229
- class: "tao-carousel__dots",
6230
- role: "group",
6231
- "aria-label": "Слайды"
6232
- };
6233
- const _hoisted_6$3 = ["aria-label", "aria-current", "onClick"];
6755
+ const _hoisted_2$3 = ["aria-label", "disabled"];
6756
+ const _hoisted_3$3 = { "aria-hidden": "true" };
6757
+ const _hoisted_4$3 = ["aria-label"];
6758
+ const _hoisted_5$3 = ["aria-label", "disabled"];
6759
+ const _hoisted_6$3 = { "aria-hidden": "true" };
6760
+ const _hoisted_7$3 = ["aria-label"];
6761
+ const _hoisted_8$3 = ["aria-label", "aria-current", "onClick"];
6234
6762
  const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
6235
6763
  ...{ name: "TaoCarousel" },
6236
6764
  __name: "TaoCarousel",
@@ -6242,7 +6770,11 @@
6242
6770
  autoplay: { default: 0 },
6243
6771
  loop: { type: Boolean, default: false },
6244
6772
  dots: { type: Boolean, default: false },
6245
- ariaLabel: { default: "Лента" }
6773
+ ariaLabel: { default: "Лента" },
6774
+ prevLabel: { default: "Назад" },
6775
+ nextLabel: { default: "Вперёд" },
6776
+ dotsLabel: { default: "Слайды" },
6777
+ slideLabel: { default: "Слайд {n} из {count}" }
6246
6778
  },
6247
6779
  emits: ["update:modelValue", "change"],
6248
6780
  setup(__props, { emit: __emit }) {
@@ -6533,27 +7065,30 @@
6533
7065
  key: 0,
6534
7066
  type: "button",
6535
7067
  class: "tao-carousel__nav",
6536
- "aria-label": "Назад",
7068
+ "aria-label": __props.prevLabel,
6537
7069
  disabled: atStart.value,
6538
7070
  onClick: goPrev
6539
- }, [..._cache[0] || (_cache[0] = [
6540
- vue.createElementVNode("svg", {
6541
- viewBox: "0 0 24 24",
6542
- width: "16",
6543
- height: "16",
6544
- "aria-hidden": "true",
6545
- focusable: "false"
6546
- }, [
6547
- vue.createElementVNode("path", {
6548
- fill: "none",
6549
- stroke: "currentColor",
6550
- "stroke-width": "2.2",
6551
- "stroke-linecap": "round",
6552
- "stroke-linejoin": "round",
6553
- d: "M14.5 5 8 12l6.5 7"
6554
- })
6555
- ], -1)
6556
- ])], 8, _hoisted_2$3)) : vue.createCommentVNode("", true)
7071
+ }, [
7072
+ vue.createElementVNode("span", _hoisted_3$3, [
7073
+ vue.renderSlot(_ctx.$slots, "prev-icon", {}, () => [
7074
+ _cache[0] || (_cache[0] = vue.createElementVNode("svg", {
7075
+ viewBox: "0 0 24 24",
7076
+ width: "16",
7077
+ height: "16",
7078
+ focusable: "false"
7079
+ }, [
7080
+ vue.createElementVNode("path", {
7081
+ fill: "none",
7082
+ stroke: "currentColor",
7083
+ "stroke-width": "2.2",
7084
+ "stroke-linecap": "round",
7085
+ "stroke-linejoin": "round",
7086
+ d: "M14.5 5 8 12l6.5 7"
7087
+ })
7088
+ ], -1))
7089
+ ], true)
7090
+ ])
7091
+ ], 8, _hoisted_2$3)) : vue.createCommentVNode("", true)
6557
7092
  ], true),
6558
7093
  vue.createElementVNode("div", {
6559
7094
  ref_key: "track",
@@ -6572,7 +7107,7 @@
6572
7107
  onClickCapture
6573
7108
  }, [
6574
7109
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
6575
- ], 42, _hoisted_3$3),
7110
+ ], 42, _hoisted_4$3),
6576
7111
  vue.renderSlot(_ctx.$slots, "next", {
6577
7112
  disabled: atEnd.value,
6578
7113
  go: goNext
@@ -6581,27 +7116,30 @@
6581
7116
  key: 0,
6582
7117
  type: "button",
6583
7118
  class: "tao-carousel__nav",
6584
- "aria-label": "Вперёд",
7119
+ "aria-label": __props.nextLabel,
6585
7120
  disabled: atEnd.value,
6586
7121
  onClick: goNext
6587
- }, [..._cache[1] || (_cache[1] = [
6588
- vue.createElementVNode("svg", {
6589
- viewBox: "0 0 24 24",
6590
- width: "16",
6591
- height: "16",
6592
- "aria-hidden": "true",
6593
- focusable: "false"
6594
- }, [
6595
- vue.createElementVNode("path", {
6596
- fill: "none",
6597
- stroke: "currentColor",
6598
- "stroke-width": "2.2",
6599
- "stroke-linecap": "round",
6600
- "stroke-linejoin": "round",
6601
- d: "M9.5 5 16 12l-6.5 7"
6602
- })
6603
- ], -1)
6604
- ])], 8, _hoisted_4$3)) : vue.createCommentVNode("", true)
7122
+ }, [
7123
+ vue.createElementVNode("span", _hoisted_6$3, [
7124
+ vue.renderSlot(_ctx.$slots, "next-icon", {}, () => [
7125
+ _cache[1] || (_cache[1] = vue.createElementVNode("svg", {
7126
+ viewBox: "0 0 24 24",
7127
+ width: "16",
7128
+ height: "16",
7129
+ focusable: "false"
7130
+ }, [
7131
+ vue.createElementVNode("path", {
7132
+ fill: "none",
7133
+ stroke: "currentColor",
7134
+ "stroke-width": "2.2",
7135
+ "stroke-linecap": "round",
7136
+ "stroke-linejoin": "round",
7137
+ d: "M9.5 5 16 12l-6.5 7"
7138
+ })
7139
+ ], -1))
7140
+ ], true)
7141
+ ])
7142
+ ], 8, _hoisted_5$3)) : vue.createCommentVNode("", true)
6605
7143
  ], true)
6606
7144
  ]),
6607
7145
  vue.renderSlot(_ctx.$slots, "dots", {
@@ -6609,13 +7147,18 @@
6609
7147
  count: snapCount.value,
6610
7148
  go: goTo
6611
7149
  }, () => [
6612
- showDots.value ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_5$3, [
7150
+ showDots.value ? (vue.openBlock(), vue.createElementBlock("div", {
7151
+ key: 0,
7152
+ class: "tao-carousel__dots",
7153
+ role: "group",
7154
+ "aria-label": __props.dotsLabel
7155
+ }, [
6613
7156
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(snapCount.value, (n) => {
6614
7157
  return vue.openBlock(), vue.createElementBlock("button", {
6615
7158
  key: n,
6616
7159
  type: "button",
6617
7160
  class: vue.normalizeClass(["tao-carousel__dot", { "tao-carousel__dot--active": n - 1 === index.value }]),
6618
- "aria-label": `Слайд ${n} из ${snapCount.value}`,
7161
+ "aria-label": __props.slideLabel.replace("{n}", String(n)).replace("{count}", String(snapCount.value)),
6619
7162
  "aria-current": n - 1 === index.value ? "true" : void 0,
6620
7163
  onClick: ($event) => goTo(n - 1)
6621
7164
  }, [
@@ -6626,15 +7169,15 @@
6626
7169
  }, () => [
6627
7170
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "tao-carousel__pip" }, null, -1))
6628
7171
  ], true)
6629
- ], 10, _hoisted_6$3);
7172
+ ], 10, _hoisted_8$3);
6630
7173
  }), 128))
6631
- ])) : vue.createCommentVNode("", true)
7174
+ ], 8, _hoisted_7$3)) : vue.createCommentVNode("", true)
6632
7175
  ], true)
6633
7176
  ], 36);
6634
7177
  };
6635
7178
  }
6636
7179
  });
6637
- const TaoCarousel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-4f6de725"]]);
7180
+ const TaoCarousel = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-239073ed"]]);
6638
7181
  const _hoisted_1$3 = ["aria-label"];
6639
7182
  const _hoisted_2$2 = ["aria-label"];
6640
7183
  const _hoisted_3$2 = {
@@ -6676,11 +7219,12 @@
6676
7219
  props: {
6677
7220
  items: { default: () => [] },
6678
7221
  vertical: { type: Boolean, default: true },
6679
- ariaLabel: { default: "Стадии" }
7222
+ ariaLabel: { default: "Стадии" },
7223
+ statusLabels: { default: () => ({}) }
6680
7224
  },
6681
7225
  setup(__props) {
6682
7226
  const props = __props;
6683
- const statusText = {
7227
+ const fallbackStatusText = {
6684
7228
  wait: "ожидание",
6685
7229
  work: "в работе",
6686
7230
  ok: "готово",
@@ -6693,7 +7237,8 @@
6693
7237
  return item.status ?? "wait";
6694
7238
  }
6695
7239
  function itemLabel(item) {
6696
- return `${item.label ?? item.key}, ${statusText[statusOf(item)]}`;
7240
+ const status = statusOf(item);
7241
+ return `${item.label ?? item.key}, ${props.statusLabels[status] ?? fallbackStatusText[status]}`;
6697
7242
  }
6698
7243
  return (_ctx, _cache) => {
6699
7244
  return vue.openBlock(), vue.createElementBlock("ul", {
@@ -6767,7 +7312,7 @@
6767
7312
  };
6768
7313
  }
6769
7314
  });
6770
- const TaoStages = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-fefa5c65"]]);
7315
+ const TaoStages = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-b62db56d"]]);
6771
7316
  const TOAST_POSITIONS = [
6772
7317
  "topRight",
6773
7318
  "topLeft",
@@ -6781,7 +7326,8 @@
6781
7326
  position: "topCenter",
6782
7327
  timeout: 3e3,
6783
7328
  closable: true,
6784
- progress: true
7329
+ progress: true,
7330
+ closeLabel: "Закрыть уведомление"
6785
7331
  };
6786
7332
  const toasts = vue.ref([]);
6787
7333
  const toastsByPosition = vue.computed(() => {
@@ -6892,6 +7438,7 @@
6892
7438
  key: 2,
6893
7439
  class: "tao-toast__actions"
6894
7440
  };
7441
+ const _hoisted_11 = ["aria-label"];
6895
7442
  const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
6896
7443
  ...{ name: "TaoToastItem" },
6897
7444
  __name: "TaoToastItem",
@@ -7060,9 +7607,9 @@
7060
7607
  key: 0,
7061
7608
  type: "button",
7062
7609
  class: "tao-toast__close",
7063
- "aria-label": "Закрыть уведомление",
7610
+ "aria-label": vue.unref(toastDefaults).closeLabel,
7064
7611
  onClick: close
7065
- }, " × ")) : vue.createCommentVNode("", true),
7612
+ }, " × ", 8, _hoisted_11)) : vue.createCommentVNode("", true),
7066
7613
  __props.toast.progress && __props.toast.timeout ? (vue.openBlock(), vue.createElementBlock("span", {
7067
7614
  key: 1,
7068
7615
  class: "tao-toast__progress",
@@ -7072,7 +7619,7 @@
7072
7619
  };
7073
7620
  }
7074
7621
  });
7075
- const TaoToastItem = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-7c4692c0"]]);
7622
+ const TaoToastItem = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-3909ff09"]]);
7076
7623
  const _hoisted_1$1 = { class: "tao-toast-slot__inner" };
7077
7624
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7078
7625
  ...{ name: "TaoToastViewport" },
@@ -7781,8 +8328,9 @@
7781
8328
  TaoSpoilerGroup,
7782
8329
  TaoCopy,
7783
8330
  TaoContainer,
7784
- _sfc_main$F,
8331
+ _sfc_main$G,
7785
8332
  TaoSpace,
8333
+ TaoSplit,
7786
8334
  TaoIcon,
7787
8335
  TaoLoader,
7788
8336
  TaoImage,
@@ -7852,7 +8400,7 @@
7852
8400
  exports2.TaoEmpty = TaoEmpty;
7853
8401
  exports2.TaoFieldset = TaoFieldset;
7854
8402
  exports2.TaoFileDrop = TaoFileDrop;
7855
- exports2.TaoFlex = _sfc_main$F;
8403
+ exports2.TaoFlex = _sfc_main$G;
7856
8404
  exports2.TaoFormField = TaoFormField;
7857
8405
  exports2.TaoIcon = TaoIcon;
7858
8406
  exports2.TaoImage = TaoImage;
@@ -7876,6 +8424,7 @@
7876
8424
  exports2.TaoSkeleton = TaoSkeleton;
7877
8425
  exports2.TaoSlider = TaoSlider;
7878
8426
  exports2.TaoSpace = TaoSpace;
8427
+ exports2.TaoSplit = TaoSplit;
7879
8428
  exports2.TaoSpoiler = TaoSpoiler;
7880
8429
  exports2.TaoSpoilerGroup = TaoSpoilerGroup;
7881
8430
  exports2.TaoStages = TaoStages;