@1337exp/taoui 1.4.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,23 +2,24 @@
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: {
19
19
  type: { default: "button" },
20
20
  size: { default: "medium" },
21
21
  variant: { default: "primary" },
22
+ tone: { default: "" },
22
23
  disabled: { type: Boolean, default: false },
23
24
  loading: { type: Boolean, default: false },
24
25
  block: { type: Boolean, default: false },
@@ -42,19 +43,20 @@
42
43
  "tao-button--disabled": __props.disabled,
43
44
  "tao-button--loading": __props.loading,
44
45
  "tao-button--block": __props.block,
45
- "tao-button--icon": !!__props.icon
46
+ "tao-button--icon": !!__props.icon,
47
+ [`tao-button--tone-${__props.tone}`]: !!__props.tone
46
48
  }
47
49
  ]]),
48
50
  type: __props.type,
49
51
  disabled: __props.disabled || __props.loading,
50
52
  onClick: handleClick
51
53
  }, [
52
- __props.loading ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_2$F)) : vue.createCommentVNode("", true),
53
- __props.icon ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$y, vue.toDisplayString(__props.icon), 1)) : vue.createCommentVNode("", true),
54
- 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, [
55
57
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
56
58
  ])
57
- ], 10, _hoisted_1$M);
59
+ ], 10, _hoisted_1$N);
58
60
  };
59
61
  }
60
62
  });
@@ -65,8 +67,8 @@
65
67
  }
66
68
  return target;
67
69
  };
68
- const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$U, [["__scopeId", "data-v-085cd74d"]]);
69
- 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({
70
72
  ...{ name: "TaoBlock" },
71
73
  __name: "TaoBlock",
72
74
  props: {
@@ -98,24 +100,24 @@
98
100
  };
99
101
  }
100
102
  });
101
- 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"]]);
102
104
  const formFieldKey = Symbol("taoFormField");
103
- const _hoisted_1$L = { class: "tao-input-wrapper" };
104
- const _hoisted_2$E = ["for"];
105
- const _hoisted_3$x = {
105
+ const _hoisted_1$M = { class: "tao-input-wrapper" };
106
+ const _hoisted_2$F = ["for"];
107
+ const _hoisted_3$z = {
106
108
  key: 0,
107
109
  class: "tao-input__affix tao-input__affix--prefix"
108
110
  };
109
- const _hoisted_4$q = ["id", "type", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby"];
110
- const _hoisted_5$i = {
111
+ const _hoisted_4$t = ["id", "type", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby"];
112
+ const _hoisted_5$m = {
111
113
  key: 1,
112
114
  class: "tao-input__affix tao-input__affix--suffix"
113
115
  };
114
- const _hoisted_6$e = {
116
+ const _hoisted_6$g = {
115
117
  key: 1,
116
118
  class: "tao-input__error"
117
119
  };
118
- const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
120
+ const _sfc_main$T = /* @__PURE__ */ vue.defineComponent({
119
121
  ...{ name: "TaoInput" },
120
122
  __name: "TaoInput",
121
123
  props: {
@@ -151,12 +153,12 @@
151
153
  emit("focus", event);
152
154
  }
153
155
  return (_ctx, _cache) => {
154
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$L, [
156
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$M, [
155
157
  __props.label && !vue.unref(field) ? (vue.openBlock(), vue.createElementBlock("label", {
156
158
  key: 0,
157
159
  class: "tao-input__label",
158
160
  for: controlId.value
159
- }, vue.toDisplayString(__props.label), 9, _hoisted_2$E)) : vue.createCommentVNode("", true),
161
+ }, vue.toDisplayString(__props.label), 9, _hoisted_2$F)) : vue.createCommentVNode("", true),
160
162
  vue.createElementVNode("div", {
161
163
  class: vue.normalizeClass(["tao-input-shell", {
162
164
  "tao-input-shell--focused": focused.value,
@@ -166,7 +168,7 @@
166
168
  "tao-input-shell--suffix": _ctx.$slots.suffix
167
169
  }])
168
170
  }, [
169
- _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$x, [
171
+ _ctx.$slots.prefix ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$z, [
170
172
  vue.renderSlot(_ctx.$slots, "prefix", {}, void 0, true)
171
173
  ])) : vue.createCommentVNode("", true),
172
174
  vue.createElementVNode("input", {
@@ -181,27 +183,27 @@
181
183
  onInput: handleInput,
182
184
  onBlur: handleBlur,
183
185
  onFocus: handleFocus
184
- }, null, 42, _hoisted_4$q),
185
- _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, [
186
188
  vue.renderSlot(_ctx.$slots, "suffix", {}, void 0, true)
187
189
  ])) : vue.createCommentVNode("", true)
188
190
  ], 2),
189
- __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)
190
192
  ]);
191
193
  };
192
194
  }
193
195
  });
194
- const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$S, [["__scopeId", "data-v-b522e041"]]);
195
- const _hoisted_1$K = {
196
+ const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$T, [["__scopeId", "data-v-b522e041"]]);
197
+ const _hoisted_1$L = {
196
198
  key: 0,
197
199
  class: "tao-input-group__addon tao-input-group__addon--before"
198
200
  };
199
- const _hoisted_2$D = { class: "tao-input-group__field" };
200
- const _hoisted_3$w = {
201
+ const _hoisted_2$E = { class: "tao-input-group__field" };
202
+ const _hoisted_3$y = {
201
203
  key: 1,
202
204
  class: "tao-input-group__addon tao-input-group__addon--after"
203
205
  };
204
- const _sfc_main$R = /* @__PURE__ */ vue.defineComponent({
206
+ const _sfc_main$S = /* @__PURE__ */ vue.defineComponent({
205
207
  ...{ name: "TaoInputGroup" },
206
208
  __name: "TaoInputGroup",
207
209
  setup(__props) {
@@ -223,28 +225,30 @@
223
225
  onFocusin: onFocusIn,
224
226
  onFocusout: onFocusOut
225
227
  }, [
226
- _ctx.$slots.before ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$K, [
228
+ _ctx.$slots.before ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$L, [
227
229
  vue.renderSlot(_ctx.$slots, "before", {}, void 0, true)
228
230
  ])) : vue.createCommentVNode("", true),
229
- vue.createElementVNode("div", _hoisted_2$D, [
231
+ vue.createElementVNode("div", _hoisted_2$E, [
230
232
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
231
233
  ]),
232
- _ctx.$slots.after ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$w, [
234
+ _ctx.$slots.after ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_3$y, [
233
235
  vue.renderSlot(_ctx.$slots, "after", {}, void 0, true)
234
236
  ])) : vue.createCommentVNode("", true)
235
237
  ], 34);
236
238
  };
237
239
  }
238
240
  });
239
- const TaoInputGroup = /* @__PURE__ */ _export_sfc(_sfc_main$R, [["__scopeId", "data-v-f06bb3b1"]]);
240
- const _hoisted_1$J = ["id", "value", "placeholder", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
241
- 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 = {
242
244
  key: 0,
243
245
  class: "tao-input-number__steppers"
244
246
  };
245
- const _hoisted_3$v = ["disabled"];
246
- const _hoisted_4$p = ["disabled"];
247
- 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({
248
252
  ...{ name: "TaoInputNumber" },
249
253
  __name: "TaoInputNumber",
250
254
  props: {
@@ -255,7 +259,9 @@
255
259
  precision: {},
256
260
  disabled: { type: Boolean, default: false },
257
261
  placeholder: { default: "" },
258
- controls: { type: Boolean, default: true }
262
+ controls: { type: Boolean, default: true },
263
+ incrementLabel: { default: "Увеличить" },
264
+ decrementLabel: { default: "Уменьшить" }
259
265
  },
260
266
  emits: ["update:modelValue", "blur", "focus"],
261
267
  setup(__props, { emit: __emit }) {
@@ -393,34 +399,48 @@
393
399
  onFocus,
394
400
  onBlur,
395
401
  onKeydown
396
- }, null, 40, _hoisted_1$J),
397
- __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, [
398
404
  vue.createElementVNode("button", {
399
405
  type: "button",
400
406
  class: "tao-input-number__step",
401
- "aria-label": "Увеличить",
407
+ "aria-label": __props.incrementLabel,
402
408
  tabindex: "-1",
403
409
  disabled: __props.disabled || atMax.value,
404
410
  onClick: _cache[0] || (_cache[0] = ($event) => bump(1))
405
- }, " + ", 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),
406
418
  vue.createElementVNode("button", {
407
419
  type: "button",
408
420
  class: "tao-input-number__step",
409
- "aria-label": "Уменьшить",
421
+ "aria-label": __props.decrementLabel,
410
422
  tabindex: "-1",
411
423
  disabled: __props.disabled || atMin.value,
412
424
  onClick: _cache[1] || (_cache[1] = ($event) => bump(-1))
413
- }, " − ", 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)
414
432
  ])) : vue.createCommentVNode("", true)
415
433
  ], 2);
416
434
  };
417
435
  }
418
436
  });
419
- const TaoInputNumber = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-55b65a4d"]]);
420
- const _hoisted_1$I = ["aria-label", "disabled"];
421
- const _hoisted_2$B = ["id", "value", "disabled", "aria-invalid", "aria-describedby", "aria-valuenow", "aria-valuemin", "aria-valuemax"];
422
- const _hoisted_3$u = ["disabled"];
423
- 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({
424
444
  ...{ name: "TaoQuantity" },
425
445
  __name: "TaoQuantity",
426
446
  props: {
@@ -429,7 +449,10 @@
429
449
  max: {},
430
450
  disabled: { type: Boolean, default: false },
431
451
  allowRemove: { type: Boolean, default: true },
432
- forceMaxLimit: { type: Boolean, default: true }
452
+ forceMaxLimit: { type: Boolean, default: true },
453
+ decrementLabel: { default: "Уменьшить" },
454
+ removeLabel: { default: "Убрать" },
455
+ incrementLabel: { default: "Увеличить" }
433
456
  },
434
457
  emits: ["update:modelValue", "change", "dec", "inc", "blur", "focus"],
435
458
  setup(__props, { emit: __emit }) {
@@ -538,7 +561,7 @@
538
561
  const atMax = vue.computed(() => props.modelValue >= ceiling.value);
539
562
  const minusDisabled = vue.computed(() => props.disabled || !props.allowRemove && atMin.value);
540
563
  const plusDisabled = vue.computed(() => props.disabled || atMax.value);
541
- const minusLabel = vue.computed(() => atMin.value && props.allowRemove ? "Убрать" : "Уменьшить");
564
+ const minusLabel = vue.computed(() => atMin.value && props.allowRemove ? props.removeLabel : props.decrementLabel);
542
565
  return (_ctx, _cache) => {
543
566
  return vue.openBlock(), vue.createElementBlock("div", {
544
567
  class: vue.normalizeClass(["tao-quantity", {
@@ -553,7 +576,13 @@
553
576
  "aria-label": minusLabel.value,
554
577
  disabled: minusDisabled.value,
555
578
  onClick: onDec
556
- }, " − ", 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),
557
586
  vue.createElementVNode("input", {
558
587
  id: controlId.value,
559
588
  class: "tao-quantity__input",
@@ -573,49 +602,55 @@
573
602
  onFocus,
574
603
  onBlur,
575
604
  onKeydown
576
- }, null, 40, _hoisted_2$B),
605
+ }, null, 40, _hoisted_3$w),
577
606
  vue.createElementVNode("button", {
578
607
  type: "button",
579
608
  class: "tao-quantity__btn tao-quantity__btn--inc",
580
- "aria-label": "Увеличить",
609
+ "aria-label": __props.incrementLabel,
581
610
  disabled: plusDisabled.value,
582
611
  onClick: onInc
583
- }, " + ", 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)
584
619
  ], 2);
585
620
  };
586
621
  }
587
622
  });
588
- const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$P, [["__scopeId", "data-v-df6baf04"]]);
589
- const _hoisted_1$H = {
623
+ const TaoQuantity = /* @__PURE__ */ _export_sfc(_sfc_main$Q, [["__scopeId", "data-v-c9c7c8b4"]]);
624
+ const _hoisted_1$I = {
590
625
  key: 0,
591
626
  class: "tao-card__cover"
592
627
  };
593
- const _hoisted_2$A = {
628
+ const _hoisted_2$B = {
594
629
  key: 0,
595
630
  class: "tao-card__header-title"
596
631
  };
597
- const _hoisted_3$t = { key: 0 };
598
- const _hoisted_4$o = {
632
+ const _hoisted_3$v = { key: 0 };
633
+ const _hoisted_4$q = {
599
634
  key: 2,
600
635
  class: "tao-card__title-block"
601
636
  };
602
- const _hoisted_5$h = {
637
+ const _hoisted_5$j = {
603
638
  key: 0,
604
639
  class: "tao-card__title"
605
640
  };
606
- const _hoisted_6$d = {
641
+ const _hoisted_6$e = {
607
642
  key: 1,
608
643
  class: "tao-card__sub"
609
644
  };
610
- const _hoisted_7$9 = {
645
+ const _hoisted_7$c = {
611
646
  key: 3,
612
647
  class: "tao-card__body"
613
648
  };
614
- const _hoisted_8$7 = {
649
+ const _hoisted_8$b = {
615
650
  key: 4,
616
651
  class: "tao-card__footer"
617
652
  };
618
- const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
653
+ const _sfc_main$P = /* @__PURE__ */ vue.defineComponent({
619
654
  ...{ name: "TaoCard" },
620
655
  __name: "TaoCard",
621
656
  props: {
@@ -647,14 +682,14 @@
647
682
  }]),
648
683
  style: vue.normalizeStyle(radiusStyle.value)
649
684
  }, [
650
- _ctx.$slots.cover ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$H, [
685
+ _ctx.$slots.cover ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_1$I, [
651
686
  vue.renderSlot(_ctx.$slots, "cover", {}, void 0, true)
652
687
  ])) : vue.createCommentVNode("", true),
653
688
  vue.createElementVNode("div", {
654
689
  class: "tao-card__content",
655
690
  style: vue.normalizeStyle(paddingStyle.value)
656
691
  }, [
657
- _ctx.$slots.headerTitle ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_2$A, [
692
+ _ctx.$slots.headerTitle ? (vue.openBlock(), vue.createElementBlock("h2", _hoisted_2$B, [
658
693
  vue.renderSlot(_ctx.$slots, "headerTitle", {}, void 0, true)
659
694
  ])) : vue.createCommentVNode("", true),
660
695
  _ctx.$slots.header || _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -664,22 +699,22 @@
664
699
  vue.createElementVNode("span", null, [
665
700
  vue.renderSlot(_ctx.$slots, "header", {}, void 0, true)
666
701
  ]),
667
- _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$t, [
702
+ _ctx.$slots.headerSecondary ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_3$v, [
668
703
  vue.renderSlot(_ctx.$slots, "headerSecondary", {}, void 0, true)
669
704
  ])) : vue.createCommentVNode("", true)
670
705
  ], 2)) : vue.createCommentVNode("", true),
671
- _ctx.$slots.title || _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_4$o, [
672
- _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, [
673
708
  vue.renderSlot(_ctx.$slots, "title", {}, void 0, true)
674
709
  ])) : vue.createCommentVNode("", true),
675
- _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$d, [
710
+ _ctx.$slots.sub ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$e, [
676
711
  vue.renderSlot(_ctx.$slots, "sub", {}, void 0, true)
677
712
  ])) : vue.createCommentVNode("", true)
678
713
  ])) : vue.createCommentVNode("", true),
679
- _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$9, [
714
+ _ctx.$slots.default ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_7$c, [
680
715
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
681
716
  ])) : vue.createCommentVNode("", true),
682
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$7, [
717
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$b, [
683
718
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
684
719
  ])) : vue.createCommentVNode("", true)
685
720
  ], 4)
@@ -687,7 +722,7 @@
687
722
  };
688
723
  }
689
724
  });
690
- 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"]]);
691
726
  const FOCUSABLE = 'a[href], button:not([disabled]), input:not([disabled]), select:not([disabled]), textarea:not([disabled]), [tabindex]:not([tabindex="-1"])';
692
727
  function getFocusable(root) {
693
728
  return [...root.querySelectorAll(FOCUSABLE)].filter(
@@ -716,25 +751,28 @@
716
751
  first.focus();
717
752
  }
718
753
  }
719
- const _hoisted_1$G = ["aria-labelledby"];
720
- const _hoisted_2$z = {
754
+ const _hoisted_1$H = ["aria-labelledby"];
755
+ const _hoisted_2$A = {
721
756
  key: 0,
722
757
  class: "tao-modal__header"
723
758
  };
724
- const _hoisted_3$s = ["id"];
725
- const _hoisted_4$n = { key: 1 };
726
- const _hoisted_5$g = { class: "tao-modal__content" };
727
- 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 = {
728
765
  key: 1,
729
766
  class: "tao-modal__footer"
730
767
  };
731
- const _sfc_main$N = /* @__PURE__ */ vue.defineComponent({
768
+ const _sfc_main$O = /* @__PURE__ */ vue.defineComponent({
732
769
  ...{ name: "TaoModal" },
733
770
  __name: "TaoModal",
734
771
  props: {
735
772
  modelValue: { type: Boolean },
736
773
  title: { default: "" },
737
- closable: { type: Boolean, default: true }
774
+ closable: { type: Boolean, default: true },
775
+ closeLabel: { default: "Закрыть" }
738
776
  },
739
777
  emits: ["update:modelValue", "close"],
740
778
  setup(__props, { emit: __emit }) {
@@ -828,29 +866,35 @@
828
866
  "aria-labelledby": __props.title ? vue.unref(titleId) : void 0,
829
867
  tabindex: "-1"
830
868
  }, [
831
- __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, [
832
870
  vue.renderSlot(_ctx.$slots, "header", {}, () => [
833
871
  __props.title ? (vue.openBlock(), vue.createElementBlock("h2", {
834
872
  key: 0,
835
873
  id: vue.unref(titleId),
836
874
  class: "tao-modal__title"
837
- }, 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))
838
876
  ], true),
839
877
  __props.closable ? (vue.openBlock(), vue.createElementBlock("button", {
840
878
  key: 0,
841
879
  type: "button",
842
880
  class: "tao-modal__close",
843
- "aria-label": "Закрыть",
881
+ "aria-label": __props.closeLabel,
844
882
  onClick: close
845
- }, " × ")) : 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)
846
890
  ])) : vue.createCommentVNode("", true),
847
- vue.createElementVNode("div", _hoisted_5$g, [
891
+ vue.createElementVNode("div", _hoisted_7$b, [
848
892
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
849
893
  ]),
850
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$c, [
894
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$a, [
851
895
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
852
896
  ])) : vue.createCommentVNode("", true)
853
- ], 8, _hoisted_1$G)
897
+ ], 8, _hoisted_1$H)
854
898
  ], 32)) : vue.createCommentVNode("", true)
855
899
  ]),
856
900
  _: 3
@@ -859,11 +903,11 @@
859
903
  };
860
904
  }
861
905
  });
862
- const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$N, [["__scopeId", "data-v-0cffe849"]]);
863
- const _hoisted_1$F = { class: "tao-tabs" };
864
- const _hoisted_2$y = ["id", "aria-selected", "aria-controls", "tabindex", "disabled", "onClick"];
865
- const _hoisted_3$r = ["id", "aria-labelledby"];
866
- 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({
867
911
  ...{ name: "TaoTabs" },
868
912
  __name: "TaoTabs",
869
913
  props: {
@@ -927,7 +971,7 @@
927
971
  }
928
972
  }
929
973
  return (_ctx, _cache) => {
930
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$F, [
974
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$G, [
931
975
  vue.createElementVNode("div", {
932
976
  class: "tao-tabs__list",
933
977
  role: "tablist",
@@ -952,7 +996,7 @@
952
996
  }, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
953
997
  vue.createTextVNode(vue.toDisplayString(tab.label), 1)
954
998
  ], 64))
955
- ], 8, _hoisted_2$y);
999
+ ], 8, _hoisted_2$z);
956
1000
  }), 128))
957
1001
  ], 32),
958
1002
  vue.createElementVNode("div", {
@@ -962,12 +1006,12 @@
962
1006
  "aria-labelledby": tabId(__props.modelValue)
963
1007
  }, [
964
1008
  vue.renderSlot(_ctx.$slots, "default", { activeTab: __props.modelValue }, void 0, true)
965
- ], 8, _hoisted_3$r)
1009
+ ], 8, _hoisted_3$t)
966
1010
  ]);
967
1011
  };
968
1012
  }
969
1013
  });
970
- 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"]]);
971
1015
  function listenFocusLoss(onLoss) {
972
1016
  function onVisibilityChange() {
973
1017
  if (document.hidden) {
@@ -983,7 +1027,7 @@
983
1027
  window.removeEventListener("pagehide", onLoss);
984
1028
  };
985
1029
  }
986
- const _sfc_main$L = /* @__PURE__ */ vue.defineComponent({
1030
+ const _sfc_main$M = /* @__PURE__ */ vue.defineComponent({
987
1031
  ...{ name: "TaoTooltip" },
988
1032
  __name: "TaoTooltip",
989
1033
  props: {
@@ -1145,9 +1189,9 @@
1145
1189
  };
1146
1190
  }
1147
1191
  });
1148
- const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$L, [["__scopeId", "data-v-926dfa73"]]);
1149
- const _hoisted_1$E = { class: "tao-popover" };
1150
- 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({
1151
1195
  ...{ name: "TaoPopover" },
1152
1196
  __name: "TaoPopover",
1153
1197
  props: {
@@ -1305,7 +1349,7 @@
1305
1349
  window.removeEventListener("scroll", onViewportChange, true);
1306
1350
  });
1307
1351
  return (_ctx, _cache) => {
1308
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, [
1352
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$F, [
1309
1353
  vue.createElementVNode("div", {
1310
1354
  ref_key: "triggerRef",
1311
1355
  ref: triggerRef,
@@ -1334,17 +1378,17 @@
1334
1378
  };
1335
1379
  }
1336
1380
  });
1337
- 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"]]);
1338
1382
  const spoilerGroupKey = Symbol("taoSpoilerGroup");
1339
- const _hoisted_1$D = { class: "tao-spoiler" };
1340
- const _hoisted_2$x = ["aria-expanded", "aria-controls"];
1341
- 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 = {
1342
1386
  key: 0,
1343
1387
  class: "tao-spoiler__title"
1344
1388
  };
1345
- const _hoisted_4$m = ["id"];
1346
- const _hoisted_5$f = { class: "tao-spoiler__content-inner" };
1347
- 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({
1348
1392
  ...{ name: "TaoSpoiler" },
1349
1393
  __name: "TaoSpoiler",
1350
1394
  props: {
@@ -1399,7 +1443,7 @@
1399
1443
  });
1400
1444
  }
1401
1445
  return (_ctx, _cache) => {
1402
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, [
1446
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$E, [
1403
1447
  vue.createElementVNode("button", {
1404
1448
  type: "button",
1405
1449
  class: "tao-spoiler__header",
@@ -1410,12 +1454,12 @@
1410
1454
  vue.createElementVNode("span", {
1411
1455
  class: vue.normalizeClass(["tao-spoiler__icon", { "tao-spoiler__icon--open": isOpen.value }])
1412
1456
  }, "▶", 2),
1413
- __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, [
1414
1458
  vue.renderSlot(_ctx.$slots, "title", {}, () => [
1415
1459
  vue.createTextVNode(vue.toDisplayString(__props.title), 1)
1416
1460
  ], true)
1417
1461
  ])) : vue.createCommentVNode("", true)
1418
- ], 8, _hoisted_2$x),
1462
+ ], 8, _hoisted_2$y),
1419
1463
  vue.createVNode(vue.Transition, {
1420
1464
  name: "tao-spoiler-slide",
1421
1465
  onBeforeEnter,
@@ -1429,10 +1473,10 @@
1429
1473
  id: vue.unref(panelId),
1430
1474
  class: "tao-spoiler__content"
1431
1475
  }, [
1432
- vue.createElementVNode("div", _hoisted_5$f, [
1476
+ vue.createElementVNode("div", _hoisted_5$h, [
1433
1477
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1434
1478
  ])
1435
- ], 8, _hoisted_4$m)) : vue.createCommentVNode("", true)
1479
+ ], 8, _hoisted_4$o)) : vue.createCommentVNode("", true)
1436
1480
  ]),
1437
1481
  _: 3
1438
1482
  })
@@ -1440,9 +1484,9 @@
1440
1484
  };
1441
1485
  }
1442
1486
  });
1443
- const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$J, [["__scopeId", "data-v-ccb052cf"]]);
1444
- const _hoisted_1$C = { class: "tao-spoiler-group" };
1445
- 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({
1446
1490
  ...{ name: "TaoSpoilerGroup" },
1447
1491
  __name: "TaoSpoilerGroup",
1448
1492
  props: {
@@ -1462,20 +1506,21 @@
1462
1506
  setOpen
1463
1507
  });
1464
1508
  return (_ctx, _cache) => {
1465
- return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$C, [
1509
+ return vue.openBlock(), vue.createElementBlock("div", _hoisted_1$D, [
1466
1510
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1467
1511
  ]);
1468
1512
  };
1469
1513
  }
1470
1514
  });
1471
- const TaoSpoilerGroup = /* @__PURE__ */ _export_sfc(_sfc_main$I, [["__scopeId", "data-v-6b172e89"]]);
1472
- const _hoisted_1$B = ["aria-label"];
1473
- 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({
1474
1518
  ...{ name: "TaoCopy" },
1475
1519
  __name: "TaoCopy",
1476
1520
  props: {
1477
1521
  text: {},
1478
1522
  successMessage: { default: "Скопировано!" },
1523
+ copyLabel: { default: "Копировать" },
1479
1524
  tip: { type: Boolean, default: true }
1480
1525
  },
1481
1526
  setup(__props) {
@@ -1577,7 +1622,7 @@
1577
1622
  vue.createElementVNode("button", {
1578
1623
  type: "button",
1579
1624
  class: vue.normalizeClass(["tao-copy__button", { "tao-copy__button--copied": copied.value }]),
1580
- "aria-label": copied.value ? __props.successMessage : "Копировать",
1625
+ "aria-label": copied.value ? __props.successMessage : __props.copyLabel,
1581
1626
  onClick: copy
1582
1627
  }, [..._cache[0] || (_cache[0] = [
1583
1628
  vue.createElementVNode("svg", {
@@ -1604,7 +1649,7 @@
1604
1649
  "stroke-width": "2"
1605
1650
  })
1606
1651
  ], -1)
1607
- ])], 10, _hoisted_1$B)
1652
+ ])], 10, _hoisted_1$C)
1608
1653
  ], true),
1609
1654
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
1610
1655
  copied.value && __props.tip && __props.successMessage ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -1620,8 +1665,8 @@
1620
1665
  };
1621
1666
  }
1622
1667
  });
1623
- const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$H, [["__scopeId", "data-v-1953c07e"]]);
1624
- 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({
1625
1670
  ...{ name: "TaoContainer" },
1626
1671
  __name: "TaoContainer",
1627
1672
  props: {
@@ -1638,8 +1683,8 @@
1638
1683
  };
1639
1684
  }
1640
1685
  });
1641
- const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$G, [["__scopeId", "data-v-4c0deb90"]]);
1642
- 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({
1643
1688
  ...{ name: "TaoFlex" },
1644
1689
  __name: "TaoFlex",
1645
1690
  props: {
@@ -1670,7 +1715,7 @@
1670
1715
  };
1671
1716
  }
1672
1717
  });
1673
- const _sfc_main$E = /* @__PURE__ */ vue.defineComponent({
1718
+ const _sfc_main$F = /* @__PURE__ */ vue.defineComponent({
1674
1719
  ...{ name: "TaoSpace" },
1675
1720
  __name: "TaoSpace",
1676
1721
  props: {
@@ -1690,7 +1735,332 @@
1690
1735
  };
1691
1736
  }
1692
1737
  });
1693
- 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"]]);
1694
2064
  const _hoisted_1$A = { class: "tao-icon" };
1695
2065
  const _sfc_main$D = /* @__PURE__ */ vue.defineComponent({
1696
2066
  ...{ name: "TaoIcon" },
@@ -1783,6 +2153,7 @@
1783
2153
  const TaoLoader = /* @__PURE__ */ _export_sfc(_sfc_main$C, [["__scopeId", "data-v-75a40018"]]);
1784
2154
  const _hoisted_1$z = { class: "tao-image" };
1785
2155
  const _hoisted_2$w = ["src", "alt", "loading"];
2156
+ const _hoisted_3$q = { class: "tao-image__placeholder" };
1786
2157
  const _sfc_main$B = /* @__PURE__ */ vue.defineComponent({
1787
2158
  ...{ name: "TaoImage" },
1788
2159
  __name: "TaoImage",
@@ -1790,7 +2161,8 @@
1790
2161
  src: { default: "" },
1791
2162
  alt: { default: "" },
1792
2163
  pixelated: { type: Boolean, default: false },
1793
- lazy: { type: Boolean, default: false }
2164
+ lazy: { type: Boolean, default: false },
2165
+ placeholderText: { default: "No image available" }
1794
2166
  },
1795
2167
  emits: ["load", "error"],
1796
2168
  setup(__props, { emit: __emit }) {
@@ -1821,20 +2193,20 @@
1821
2193
  onLoad: handleLoad,
1822
2194
  onError: handleError
1823
2195
  }, null, 42, _hoisted_2$w)) : vue.renderSlot(_ctx.$slots, "default", {}, () => [
1824
- _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)
1825
2197
  ], true, 1)
1826
2198
  ]);
1827
2199
  };
1828
2200
  }
1829
2201
  });
1830
- 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"]]);
1831
2203
  const _hoisted_1$y = ["for"];
1832
2204
  const _hoisted_2$v = ["id", "checked", "disabled", "aria-checked", "aria-invalid", "aria-describedby"];
1833
2205
  const _hoisted_3$p = {
1834
2206
  key: 0,
1835
2207
  class: "tao-checkbox__label"
1836
2208
  };
1837
- const _hoisted_4$l = {
2209
+ const _hoisted_4$m = {
1838
2210
  key: 1,
1839
2211
  class: "tao-checkbox__label"
1840
2212
  };
@@ -1910,7 +2282,7 @@
1910
2282
  onChange: onInputChange
1911
2283
  }, null, 40, _hoisted_2$v),
1912
2284
  _cache[0] || (_cache[0] = vue.createElementVNode("span", { class: "tao-checkbox__box" }, null, -1)),
1913
- __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, [
1914
2286
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
1915
2287
  ])),
1916
2288
  vue.renderSlot(_ctx.$slots, "post", { text: __props.label }, void 0, true)
@@ -1925,6 +2297,7 @@
1925
2297
  };
1926
2298
  const _hoisted_2$u = { class: "tao-tag__text" };
1927
2299
  const _hoisted_3$o = ["aria-label"];
2300
+ const _hoisted_4$l = { "aria-hidden": "true" };
1928
2301
  const _sfc_main$z = /* @__PURE__ */ vue.defineComponent({
1929
2302
  ...{ name: "TaoTag" },
1930
2303
  __name: "TaoTag",
@@ -1977,12 +2350,18 @@
1977
2350
  class: "tao-tag__close",
1978
2351
  "aria-label": __props.closeLabel,
1979
2352
  onClick: vue.withModifiers(onClose, ["stop"])
1980
- }, " ✕ ", 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)
1981
2360
  ], 6);
1982
2361
  };
1983
2362
  }
1984
2363
  });
1985
- 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"]]);
1986
2365
  const _hoisted_1$w = {
1987
2366
  key: 1,
1988
2367
  class: "tao-divider-text"
@@ -2219,7 +2598,7 @@
2219
2598
  }
2220
2599
  });
2221
2600
  const TaoTextarea = /* @__PURE__ */ _export_sfc(_sfc_main$v, [["__scopeId", "data-v-2534c0c4"]]);
2222
- const _hoisted_1$t = ["tabindex"];
2601
+ const _hoisted_1$t = ["tabindex", "aria-label"];
2223
2602
  const _hoisted_2$q = { class: "tao-scroll-top__content" };
2224
2603
  const RIPPLE_DURATION = 750;
2225
2604
  const _sfc_main$u = /* @__PURE__ */ vue.defineComponent({
@@ -2232,7 +2611,8 @@
2232
2611
  zIndex: { default: 1e3 },
2233
2612
  boundary: { default: 300 },
2234
2613
  hasOutline: { type: Boolean, default: true },
2235
- tabindex: { default: 0 }
2614
+ tabindex: { default: 0 },
2615
+ ariaLabel: { default: "Наверх" }
2236
2616
  },
2237
2617
  setup(__props) {
2238
2618
  const props = __props;
@@ -2319,7 +2699,7 @@
2319
2699
  style: vue.normalizeStyle(mainStyle),
2320
2700
  tabindex: props.tabindex,
2321
2701
  class: vue.normalizeClass(["tao-scroll-top", { "tao-scroll-top--no-outline": !props.hasOutline }]),
2322
- "aria-label": "Наверх",
2702
+ "aria-label": props.ariaLabel,
2323
2703
  onClick: vue.withModifiers(onClick, ["prevent"])
2324
2704
  }, [
2325
2705
  vue.createElementVNode("div", _hoisted_2$q, [
@@ -2346,7 +2726,7 @@
2346
2726
  };
2347
2727
  }
2348
2728
  });
2349
- 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"]]);
2350
2730
  const _hoisted_1$s = { class: "tao-progress" };
2351
2731
  const _hoisted_2$p = {
2352
2732
  key: 0,
@@ -2357,11 +2737,11 @@
2357
2737
  key: 0,
2358
2738
  class: "tao-progress__percentage"
2359
2739
  };
2360
- const _hoisted_5$e = {
2740
+ const _hoisted_5$g = {
2361
2741
  key: 1,
2362
2742
  class: "tao-progress__side"
2363
2743
  };
2364
- const _hoisted_6$b = {
2744
+ const _hoisted_6$c = {
2365
2745
  key: 0,
2366
2746
  class: "tao-progress__percentage"
2367
2747
  };
@@ -2416,9 +2796,9 @@
2416
2796
  }, null, 6)
2417
2797
  ], 4)
2418
2798
  ]),
2419
- _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, [
2420
2800
  vue.renderSlot(_ctx.$slots, "right", {}, void 0, true),
2421
- 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)
2422
2802
  ])) : vue.createCommentVNode("", true)
2423
2803
  ], 6)
2424
2804
  ]);
@@ -2663,14 +3043,17 @@
2663
3043
  const TaoSlider = /* @__PURE__ */ _export_sfc(_sfc_main$s, [["__scopeId", "data-v-24a38782"]]);
2664
3044
  const _hoisted_1$q = { class: "tao-file-drop" };
2665
3045
  const _hoisted_2$n = { class: "tao-file-drop__row" };
2666
- const _hoisted_3$j = ["accept", "multiple"];
2667
- 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 = {
2668
3050
  key: 0,
2669
3051
  class: "tao-file-drop__list"
2670
3052
  };
2671
- const _hoisted_5$d = { class: "tao-file-drop__name" };
2672
- const _hoisted_6$a = { class: "tao-file-drop__meta" };
2673
- 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" };
2674
3057
  const _sfc_main$r = /* @__PURE__ */ vue.defineComponent({
2675
3058
  ...{ name: "TaoFileDrop" },
2676
3059
  __name: "TaoFileDrop",
@@ -2680,6 +3063,9 @@
2680
3063
  accept: { default: "*" },
2681
3064
  multiple: { type: Boolean, default: false },
2682
3065
  showClear: { type: Boolean, default: false },
3066
+ clearLabel: { default: "Очистить файлы" },
3067
+ removeLabel: { default: "Убрать «{name}»" },
3068
+ formatSize: {},
2683
3069
  list: { type: Boolean, default: true }
2684
3070
  },
2685
3071
  emits: ["update:modelValue", "files", "clear-request"],
@@ -2746,7 +3132,7 @@
2746
3132
  el.type = "file";
2747
3133
  }
2748
3134
  }
2749
- function formatSize(bytes) {
3135
+ function defaultFormatSize(bytes) {
2750
3136
  if (bytes < 1024) {
2751
3137
  return `${bytes} Б`;
2752
3138
  }
@@ -2759,6 +3145,9 @@
2759
3145
  const value = mb < 10 ? mb.toFixed(1) : String(Math.round(mb));
2760
3146
  return `${value.replace(".", ",")} МБ`;
2761
3147
  }
3148
+ function sizeLabel(bytes) {
3149
+ return props.formatSize ? props.formatSize(bytes) : defaultFormatSize(bytes);
3150
+ }
2762
3151
  function fileKey(file, index) {
2763
3152
  return `${file.name}-${file.size}-${file.lastModified}-${index}`;
2764
3153
  }
@@ -2776,9 +3165,15 @@
2776
3165
  key: 0,
2777
3166
  type: "button",
2778
3167
  class: "tao-file-drop__clear",
2779
- "aria-label": "Очистить файлы",
3168
+ "aria-label": __props.clearLabel,
2780
3169
  onClick: requestClear
2781
- }, " ✕ ")) : 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),
2782
3177
  vue.createElementVNode("label", {
2783
3178
  class: vue.normalizeClass(["tao-file-drop__zone", [`tao-file-drop__zone--${__props.size}`, { "tao-file-drop__zone--dragging": isDragging.value }]]),
2784
3179
  onDragover: handleDragOver,
@@ -2786,7 +3181,7 @@
2786
3181
  onDrop: handleDrop
2787
3182
  }, [
2788
3183
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
2789
- _cache[1] || (_cache[1] = vue.createTextVNode("Перетащите файл сюда или нажмите, чтобы выбрать", -1))
3184
+ _cache[2] || (_cache[2] = vue.createTextVNode("Перетащите файл сюда или нажмите, чтобы выбрать", -1))
2790
3185
  ], true),
2791
3186
  vue.createElementVNode("input", {
2792
3187
  ref_key: "fileInput",
@@ -2798,23 +3193,29 @@
2798
3193
  onChange: handleFileSelect,
2799
3194
  onClick: _cache[0] || (_cache[0] = vue.withModifiers(() => {
2800
3195
  }, ["stop"]))
2801
- }, null, 40, _hoisted_3$j)
3196
+ }, null, 40, _hoisted_5$f)
2802
3197
  ], 34)
2803
3198
  ]),
2804
- __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, [
2805
3200
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.modelValue, (file, index) => {
2806
3201
  return vue.openBlock(), vue.createElementBlock("li", {
2807
3202
  key: fileKey(file, index),
2808
3203
  class: "tao-file-drop__file"
2809
3204
  }, [
2810
- vue.createElementVNode("span", _hoisted_5$d, vue.toDisplayString(file.name), 1),
2811
- 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),
2812
3207
  vue.createElementVNode("button", {
2813
3208
  type: "button",
2814
3209
  class: "tao-file-drop__remove",
2815
- "aria-label": `Убрать «${file.name}»`,
3210
+ "aria-label": __props.removeLabel.replace("{name}", file.name),
2816
3211
  onClick: ($event) => removeAt(index)
2817
- }, " ✕ ", 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)
2818
3219
  ]);
2819
3220
  }), 128))
2820
3221
  ])) : vue.createCommentVNode("", true)
@@ -2822,19 +3223,18 @@
2822
3223
  };
2823
3224
  }
2824
3225
  });
2825
- 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"]]);
2826
3227
  const _hoisted_1$p = ["aria-expanded"];
2827
- const _hoisted_2$m = {
2828
- key: 1,
2829
- "aria-label": "Меню"
2830
- };
2831
- const _hoisted_3$i = ["onClick", "onMouseenter"];
2832
- 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 };
2833
3232
  const _sfc_main$q = /* @__PURE__ */ vue.defineComponent({
2834
3233
  ...{ name: "TaoDropdownMenu" },
2835
3234
  __name: "TaoDropdownMenu",
2836
3235
  props: {
2837
- actions: { default: () => [] }
3236
+ actions: { default: () => [] },
3237
+ menuLabel: { default: "Меню" }
2838
3238
  },
2839
3239
  emits: ["selected"],
2840
3240
  setup(__props, { emit: __emit }) {
@@ -2965,7 +3365,16 @@
2965
3365
  "aria-expanded": isOpen.value,
2966
3366
  onClick: toggleMenu
2967
3367
  }, [
2968
- _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))
2969
3378
  ], 8, _hoisted_1$p),
2970
3379
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
2971
3380
  isOpen.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -2991,8 +3400,8 @@
2991
3400
  id: action.id,
2992
3401
  ico: action.ico,
2993
3402
  text: action.name
2994
- }, void 0, true, 0) : (vue.openBlock(), vue.createElementBlock("span", _hoisted_4$h, vue.toDisplayString(action.name), 1))
2995
- ], 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);
2996
3405
  }), 128))
2997
3406
  ], 36)) : vue.createCommentVNode("", true)
2998
3407
  ]))
@@ -3000,7 +3409,7 @@
3000
3409
  };
3001
3410
  }
3002
3411
  });
3003
- 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"]]);
3004
3413
  const _hoisted_1$o = ["aria-invalid", "aria-describedby"];
3005
3414
  const _hoisted_2$l = ["id", "value", "placeholder", "type", "inputmode", "pattern", "onInput", "onKeydown", "onFocus"];
3006
3415
  const _sfc_main$p = /* @__PURE__ */ vue.defineComponent({
@@ -3284,7 +3693,8 @@
3284
3693
  options: { default: () => [] },
3285
3694
  placeholder: { default: "Выберите" },
3286
3695
  disabled: { type: Boolean, default: false },
3287
- error: { type: Boolean, default: false }
3696
+ error: { type: Boolean, default: false },
3697
+ clearText: { default: "Очистить" }
3288
3698
  },
3289
3699
  emits: ["update:modelValue", "change"],
3290
3700
  setup(__props, { emit: __emit }) {
@@ -3490,10 +3900,12 @@
3490
3900
  onKeydown: onTriggerKeydown
3491
3901
  }, [
3492
3902
  vue.createElementVNode("span", _hoisted_2$k, vue.toDisplayString(((_a = selected.value) == null ? void 0 : _a.label) ?? __props.placeholder), 1),
3493
- _cache[2] || (_cache[2] = vue.createElementVNode("span", {
3494
- class: "tao-select__chevron",
3903
+ vue.createElementVNode("span", {
3904
+ class: vue.normalizeClass(["tao-select__chevron", { "tao-select__chevron--custom": _ctx.$slots.chevron }]),
3495
3905
  "aria-hidden": "true"
3496
- }, null, -1))
3906
+ }, [
3907
+ vue.renderSlot(_ctx.$slots, "chevron", {}, void 0, true)
3908
+ ], 2)
3497
3909
  ], 42, _hoisted_1$m),
3498
3910
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
3499
3911
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -3540,14 +3952,18 @@
3540
3952
  onMousedown: _cache[1] || (_cache[1] = vue.withModifiers(() => {
3541
3953
  }, ["prevent"])),
3542
3954
  onClick: clear
3543
- }, " Очистить ", 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)
3544
3960
  ], 4)) : vue.createCommentVNode("", true)
3545
3961
  ]))
3546
3962
  ], 2);
3547
3963
  };
3548
3964
  }
3549
3965
  });
3550
- 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"]]);
3551
3967
  const _hoisted_1$l = ["id", "aria-expanded", "aria-activedescendant", "aria-invalid", "aria-describedby", "disabled", "placeholder", "value"];
3552
3968
  const _hoisted_2$j = {
3553
3969
  key: 0,
@@ -3563,6 +3979,8 @@
3563
3979
  placeholder: { default: "Начните вводить" },
3564
3980
  disabled: { type: Boolean, default: false },
3565
3981
  error: { type: Boolean, default: false },
3982
+ emptyText: { default: "Ничего не найдено" },
3983
+ clearText: { default: "Очистить" },
3566
3984
  allowCreate: { type: Boolean, default: false }
3567
3985
  },
3568
3986
  emits: ["update:modelValue", "change", "create"],
@@ -3963,10 +4381,12 @@
3963
4381
  onBlur,
3964
4382
  onKeydown: onInputKeydown
3965
4383
  }, null, 40, _hoisted_1$l),
3966
- _cache[1] || (_cache[1] = vue.createElementVNode("span", {
3967
- class: "tao-combobox__chevron",
4384
+ vue.createElementVNode("span", {
4385
+ class: vue.normalizeClass(["tao-combobox__chevron", { "tao-combobox__chevron--custom": _ctx.$slots.chevron }]),
3968
4386
  "aria-hidden": "true"
3969
- }, null, -1))
4387
+ }, [
4388
+ vue.renderSlot(_ctx.$slots, "chevron", {}, void 0, true)
4389
+ ], 2)
3970
4390
  ], 544),
3971
4391
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
3972
4392
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -3983,7 +4403,11 @@
3983
4403
  class: "tao-combobox__list",
3984
4404
  role: "listbox"
3985
4405
  }, [
3986
- !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),
3987
4411
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(rows.value, (row, index) => {
3988
4412
  return vue.openBlock(), vue.createElementBlock("li", {
3989
4413
  id: `${listId}-row-${index}`,
@@ -4002,9 +4426,11 @@
4002
4426
  onClick: ($event) => activateRow(row),
4003
4427
  onMouseenter: ($event) => !(row.kind === "option" && row.option.disabled) && (activeIndex.value = index)
4004
4428
  }, [
4005
- 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
+ }, () => [
4006
4432
  vue.createTextVNode("Добавить «" + vue.toDisplayString(row.text) + "»", 1)
4007
- ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
4433
+ ], true, 0) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
4008
4434
  vue.createTextVNode(vue.toDisplayString(row.option.label), 1)
4009
4435
  ], 64))
4010
4436
  ], 42, _hoisted_3$g);
@@ -4015,14 +4441,18 @@
4015
4441
  type: "button",
4016
4442
  class: "tao-combobox__clear",
4017
4443
  onMousedown: vue.withModifiers(markPicking, ["prevent"])
4018
- }, " Очистить ", 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)
4019
4449
  ], 4)) : vue.createCommentVNode("", true)
4020
4450
  ]))
4021
4451
  ], 2);
4022
4452
  };
4023
4453
  }
4024
4454
  });
4025
- 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"]]);
4026
4456
  const ISO_DATE = /^(\d{4})-(\d{2})-(\d{2})$/;
4027
4457
  function formatTaoDateIso(parts) {
4028
4458
  return `${String(parts.y).padStart(4, "0")}-${String(parts.m).padStart(2, "0")}-${String(parts.d).padStart(2, "0")}`;
@@ -4152,20 +4582,28 @@
4152
4582
  }
4153
4583
  const _hoisted_1$k = ["id", "aria-expanded", "aria-invalid", "aria-describedby", "disabled"];
4154
4584
  const _hoisted_2$i = { class: "tao-date__value" };
4155
- const _hoisted_3$f = ["aria-label"];
4156
- const _hoisted_4$f = { class: "tao-date__header" };
4157
- const _hoisted_5$c = { class: "tao-date__month" };
4158
- 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 = {
4159
4597
  class: "tao-date__weekdays",
4160
4598
  "aria-hidden": "true"
4161
4599
  };
4162
- const _hoisted_7$7 = {
4600
+ const _hoisted_12$1 = {
4163
4601
  class: "tao-date__grid",
4164
4602
  role: "grid"
4165
4603
  };
4166
- const _hoisted_8$6 = ["aria-label", "aria-selected", "disabled", "onClick"];
4167
- const _hoisted_9$2 = { class: "tao-date__footer" };
4168
- 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"];
4169
4607
  const _sfc_main$k = /* @__PURE__ */ vue.defineComponent({
4170
4608
  ...{ name: "TaoDate" },
4171
4609
  __name: "TaoDate",
@@ -4176,7 +4614,11 @@
4176
4614
  error: { type: Boolean, default: false },
4177
4615
  min: { default: void 0 },
4178
4616
  max: { default: void 0 },
4179
- locale: { default: "ru-RU" }
4617
+ locale: { default: "ru-RU" },
4618
+ todayText: { default: "Сегодня" },
4619
+ clearText: { default: "Очистить" },
4620
+ prevMonthLabel: { default: "Предыдущий месяц" },
4621
+ nextMonthLabel: { default: "Следующий месяц" }
4180
4622
  },
4181
4623
  emits: ["update:modelValue", "change"],
4182
4624
  setup(__props, { emit: __emit }) {
@@ -4397,32 +4839,34 @@
4397
4839
  onKeydown: onTriggerKeydown
4398
4840
  }, [
4399
4841
  vue.createElementVNode("span", _hoisted_2$i, vue.toDisplayString(displayLabel.value || __props.placeholder), 1),
4400
- _cache[4] || (_cache[4] = vue.createElementVNode("svg", {
4401
- class: "tao-date__icon",
4402
- viewBox: "0 0 16 16",
4403
- width: "16",
4404
- height: "16",
4405
- "aria-hidden": "true",
4406
- focusable: "false"
4407
- }, [
4408
- vue.createElementVNode("rect", {
4409
- x: "2",
4410
- y: "3",
4411
- width: "12",
4412
- height: "11",
4413
- rx: "1.5",
4414
- fill: "none",
4415
- stroke: "currentColor",
4416
- "stroke-width": "1.4"
4417
- }),
4418
- vue.createElementVNode("path", {
4419
- d: "M5 1.5v3M11 1.5v3M2 6.5h12",
4420
- fill: "none",
4421
- stroke: "currentColor",
4422
- "stroke-width": "1.4",
4423
- "stroke-linecap": "round"
4424
- })
4425
- ], -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
+ ])
4426
4870
  ], 42, _hoisted_1$k),
4427
4871
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
4428
4872
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -4437,61 +4881,67 @@
4437
4881
  style: vue.normalizeStyle(panelStyle.value),
4438
4882
  onKeydown: onPanelKeydown
4439
4883
  }, [
4440
- vue.createElementVNode("div", _hoisted_4$f, [
4884
+ vue.createElementVNode("div", _hoisted_5$d, [
4441
4885
  vue.createElementVNode("button", {
4442
4886
  type: "button",
4443
4887
  class: "tao-date__nav",
4444
- "aria-label": "Предыдущий месяц",
4888
+ "aria-label": __props.prevMonthLabel,
4445
4889
  onClick: _cache[0] || (_cache[0] = ($event) => goMonth(-1))
4446
- }, [..._cache[5] || (_cache[5] = [
4447
- vue.createElementVNode("svg", {
4448
- viewBox: "0 0 24 24",
4449
- width: "14",
4450
- height: "14",
4451
- "aria-hidden": "true",
4452
- focusable: "false"
4453
- }, [
4454
- vue.createElementVNode("path", {
4455
- fill: "none",
4456
- stroke: "currentColor",
4457
- "stroke-width": "2.2",
4458
- "stroke-linecap": "round",
4459
- "stroke-linejoin": "round",
4460
- d: "M14.5 5 8 12l6.5 7"
4461
- })
4462
- ], -1)
4463
- ])]),
4464
- 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),
4465
4912
  vue.createElementVNode("button", {
4466
4913
  type: "button",
4467
4914
  class: "tao-date__nav",
4468
- "aria-label": "Следующий месяц",
4915
+ "aria-label": __props.nextMonthLabel,
4469
4916
  onClick: _cache[1] || (_cache[1] = ($event) => goMonth(1))
4470
- }, [..._cache[6] || (_cache[6] = [
4471
- vue.createElementVNode("svg", {
4472
- viewBox: "0 0 24 24",
4473
- width: "14",
4474
- height: "14",
4475
- "aria-hidden": "true",
4476
- focusable: "false"
4477
- }, [
4478
- vue.createElementVNode("path", {
4479
- fill: "none",
4480
- stroke: "currentColor",
4481
- "stroke-width": "2.2",
4482
- "stroke-linecap": "round",
4483
- "stroke-linejoin": "round",
4484
- d: "M9.5 5 16 12l-6.5 7"
4485
- })
4486
- ], -1)
4487
- ])])
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)
4488
4938
  ]),
4489
- vue.createElementVNode("div", _hoisted_6$9, [
4939
+ vue.createElementVNode("div", _hoisted_11$2, [
4490
4940
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekdays.value, (day) => {
4491
4941
  return vue.openBlock(), vue.createElementBlock("span", { key: day }, vue.toDisplayString(day), 1);
4492
4942
  }), 128))
4493
4943
  ]),
4494
- vue.createElementVNode("div", _hoisted_7$7, [
4944
+ vue.createElementVNode("div", _hoisted_12$1, [
4495
4945
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(cells.value, (cell) => {
4496
4946
  return vue.openBlock(), vue.createElementBlock("button", {
4497
4947
  key: cell.iso,
@@ -4510,42 +4960,58 @@
4510
4960
  onMousedown: _cache[2] || (_cache[2] = vue.withModifiers(() => {
4511
4961
  }, ["prevent"])),
4512
4962
  onClick: ($event) => selectDay(cell.iso)
4513
- }, vue.toDisplayString(cell.day), 43, _hoisted_8$6);
4963
+ }, vue.toDisplayString(cell.day), 43, _hoisted_13$1);
4514
4964
  }), 128))
4515
4965
  ]),
4516
- vue.createElementVNode("div", _hoisted_9$2, [
4966
+ vue.createElementVNode("div", _hoisted_14$1, [
4517
4967
  vue.createElementVNode("button", {
4518
4968
  type: "button",
4519
4969
  class: "tao-date__link",
4520
4970
  disabled: !todayEnabled.value,
4521
4971
  onClick: _cache[3] || (_cache[3] = ($event) => selectDay(todayIso.value))
4522
- }, " Сегодня ", 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),
4523
4977
  valueIso.value ? (vue.openBlock(), vue.createElementBlock("button", {
4524
4978
  key: 0,
4525
4979
  type: "button",
4526
4980
  class: "tao-date__link",
4527
4981
  onClick: clear
4528
- }, "Очистить")) : vue.createCommentVNode("", true)
4982
+ }, [
4983
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
4984
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
4985
+ ], true)
4986
+ ])) : vue.createCommentVNode("", true)
4529
4987
  ])
4530
- ], 44, _hoisted_3$f)) : vue.createCommentVNode("", true)
4988
+ ], 44, _hoisted_4$f)) : vue.createCommentVNode("", true)
4531
4989
  ]))
4532
4990
  ], 2);
4533
4991
  };
4534
4992
  }
4535
4993
  });
4536
- 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"]]);
4537
4995
  const _hoisted_1$j = ["id", "aria-expanded", "aria-invalid", "aria-describedby", "disabled"];
4538
4996
  const _hoisted_2$h = { class: "tao-date-range__value" };
4539
- const _hoisted_3$e = ["aria-label"];
4540
- const _hoisted_4$e = { class: "tao-date__header" };
4541
- const _hoisted_5$b = { class: "tao-date__month" };
4542
- 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 = {
4543
5009
  class: "tao-date__weekdays",
4544
5010
  "aria-hidden": "true"
4545
5011
  };
4546
- const _hoisted_7$6 = ["aria-label", "aria-selected", "disabled", "onMouseenter", "onClick"];
4547
- const _hoisted_8$5 = { class: "tao-date__footer" };
4548
- 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"];
4549
5015
  const _sfc_main$j = /* @__PURE__ */ vue.defineComponent({
4550
5016
  ...{ name: "TaoDateRange" },
4551
5017
  __name: "TaoDateRange",
@@ -4556,7 +5022,11 @@
4556
5022
  error: { type: Boolean, default: false },
4557
5023
  min: { default: void 0 },
4558
5024
  max: { default: void 0 },
4559
- locale: { default: "ru-RU" }
5025
+ locale: { default: "ru-RU" },
5026
+ todayText: { default: "Сегодня" },
5027
+ clearText: { default: "Очистить" },
5028
+ prevMonthLabel: { default: "Предыдущий месяц" },
5029
+ nextMonthLabel: { default: "Следующий месяц" }
4560
5030
  },
4561
5031
  emits: ["update:modelValue", "change"],
4562
5032
  setup(__props, { emit: __emit }) {
@@ -4831,32 +5301,34 @@
4831
5301
  onKeydown: onTriggerKeydown
4832
5302
  }, [
4833
5303
  vue.createElementVNode("span", _hoisted_2$h, vue.toDisplayString(displayLabel.value || __props.placeholder), 1),
4834
- _cache[3] || (_cache[3] = vue.createElementVNode("svg", {
4835
- class: "tao-date-range__icon",
4836
- viewBox: "0 0 16 16",
4837
- width: "16",
4838
- height: "16",
4839
- "aria-hidden": "true",
4840
- focusable: "false"
4841
- }, [
4842
- vue.createElementVNode("rect", {
4843
- x: "2",
4844
- y: "3",
4845
- width: "12",
4846
- height: "11",
4847
- rx: "1.5",
4848
- fill: "none",
4849
- stroke: "currentColor",
4850
- "stroke-width": "1.4"
4851
- }),
4852
- vue.createElementVNode("path", {
4853
- d: "M5 1.5v3M11 1.5v3M2 6.5h12",
4854
- fill: "none",
4855
- stroke: "currentColor",
4856
- "stroke-width": "1.4",
4857
- "stroke-linecap": "round"
4858
- })
4859
- ], -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
+ ])
4860
5332
  ], 42, _hoisted_1$j),
4861
5333
  (vue.openBlock(), vue.createBlock(vue.Teleport, { to: "body" }, [
4862
5334
  open.value ? (vue.openBlock(), vue.createElementBlock("div", {
@@ -4871,56 +5343,62 @@
4871
5343
  style: vue.normalizeStyle(panelStyle.value),
4872
5344
  onKeydown: onPanelKeydown
4873
5345
  }, [
4874
- vue.createElementVNode("div", _hoisted_4$e, [
5346
+ vue.createElementVNode("div", _hoisted_5$c, [
4875
5347
  vue.createElementVNode("button", {
4876
5348
  type: "button",
4877
5349
  class: "tao-date__nav",
4878
- "aria-label": "Предыдущий месяц",
5350
+ "aria-label": __props.prevMonthLabel,
4879
5351
  onClick: _cache[0] || (_cache[0] = ($event) => goMonth(-1))
4880
- }, [..._cache[4] || (_cache[4] = [
4881
- vue.createElementVNode("svg", {
4882
- viewBox: "0 0 24 24",
4883
- width: "14",
4884
- height: "14",
4885
- "aria-hidden": "true",
4886
- focusable: "false"
4887
- }, [
4888
- vue.createElementVNode("path", {
4889
- fill: "none",
4890
- stroke: "currentColor",
4891
- "stroke-width": "2.2",
4892
- "stroke-linecap": "round",
4893
- "stroke-linejoin": "round",
4894
- d: "M14.5 5 8 12l6.5 7"
4895
- })
4896
- ], -1)
4897
- ])]),
4898
- 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),
4899
5374
  vue.createElementVNode("button", {
4900
5375
  type: "button",
4901
5376
  class: "tao-date__nav",
4902
- "aria-label": "Следующий месяц",
5377
+ "aria-label": __props.nextMonthLabel,
4903
5378
  onClick: _cache[1] || (_cache[1] = ($event) => goMonth(1))
4904
- }, [..._cache[5] || (_cache[5] = [
4905
- vue.createElementVNode("svg", {
4906
- viewBox: "0 0 24 24",
4907
- width: "14",
4908
- height: "14",
4909
- "aria-hidden": "true",
4910
- focusable: "false"
4911
- }, [
4912
- vue.createElementVNode("path", {
4913
- fill: "none",
4914
- stroke: "currentColor",
4915
- "stroke-width": "2.2",
4916
- "stroke-linecap": "round",
4917
- "stroke-linejoin": "round",
4918
- d: "M9.5 5 16 12l-6.5 7"
4919
- })
4920
- ], -1)
4921
- ])])
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)
4922
5400
  ]),
4923
- vue.createElementVNode("div", _hoisted_6$8, [
5401
+ vue.createElementVNode("div", _hoisted_11$1, [
4924
5402
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(weekdays.value, (day) => {
4925
5403
  return vue.openBlock(), vue.createElementBlock("span", { key: day }, vue.toDisplayString(day), 1);
4926
5404
  }), 128))
@@ -4953,30 +5431,38 @@
4953
5431
  }, ["prevent"])),
4954
5432
  onMouseenter: ($event) => onDayEnter(cell.iso),
4955
5433
  onClick: ($event) => selectDay(cell.iso)
4956
- }, vue.toDisplayString(cell.day), 43, _hoisted_7$6);
5434
+ }, vue.toDisplayString(cell.day), 43, _hoisted_12);
4957
5435
  }), 128))
4958
5436
  ], 32),
4959
- vue.createElementVNode("div", _hoisted_8$5, [
5437
+ vue.createElementVNode("div", _hoisted_13, [
4960
5438
  vue.createElementVNode("button", {
4961
5439
  type: "button",
4962
5440
  class: "tao-date__link",
4963
5441
  disabled: !todayEnabled.value,
4964
5442
  onClick: selectToday
4965
- }, " Сегодня ", 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),
4966
5448
  committed.value ? (vue.openBlock(), vue.createElementBlock("button", {
4967
5449
  key: 0,
4968
5450
  type: "button",
4969
5451
  class: "tao-date__link",
4970
5452
  onClick: clear
4971
- }, "Очистить")) : vue.createCommentVNode("", true)
5453
+ }, [
5454
+ vue.renderSlot(_ctx.$slots, "clear", {}, () => [
5455
+ vue.createTextVNode(vue.toDisplayString(__props.clearText), 1)
5456
+ ], true)
5457
+ ])) : vue.createCommentVNode("", true)
4972
5458
  ])
4973
- ], 44, _hoisted_3$e)) : vue.createCommentVNode("", true)
5459
+ ], 44, _hoisted_4$e)) : vue.createCommentVNode("", true)
4974
5460
  ]))
4975
5461
  ], 2);
4976
5462
  };
4977
5463
  }
4978
5464
  });
4979
- 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"]]);
4980
5466
  const _hoisted_1$i = ["for"];
4981
5467
  const _hoisted_2$g = ["id", "checked", "disabled", "aria-checked"];
4982
5468
  const _hoisted_3$d = {
@@ -5295,15 +5781,15 @@
5295
5781
  class: "tao-segmented-option__icon",
5296
5782
  "aria-hidden": "true"
5297
5783
  };
5298
- const _hoisted_5$a = {
5784
+ const _hoisted_5$b = {
5299
5785
  key: 1,
5300
5786
  class: "tao-segmented-option__label"
5301
5787
  };
5302
- const _hoisted_6$7 = {
5788
+ const _hoisted_6$8 = {
5303
5789
  key: 2,
5304
5790
  class: "tao-segmented-option__sr"
5305
5791
  };
5306
- const _hoisted_7$5 = {
5792
+ const _hoisted_7$7 = {
5307
5793
  key: 3,
5308
5794
  class: "tao-segmented-option__count"
5309
5795
  };
@@ -5388,12 +5874,12 @@
5388
5874
  vue.createTextVNode(vue.toDisplayString(__props.icon), 1)
5389
5875
  ], true)
5390
5876
  ])) : vue.createCommentVNode("", true),
5391
- hasLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$a, [
5877
+ hasLabel.value ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_5$b, [
5392
5878
  vue.renderSlot(_ctx.$slots, "default", {}, () => [
5393
5879
  vue.createTextVNode(vue.toDisplayString(__props.label), 1)
5394
5880
  ], true)
5395
- ])) : __props.ariaLabel ? (vue.openBlock(), vue.createElementBlock("span", _hoisted_6$7, vue.toDisplayString(__props.ariaLabel), 1)) : vue.createCommentVNode("", true),
5396
- 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)
5397
5883
  ])
5398
5884
  ], 10, _hoisted_1$e);
5399
5885
  };
@@ -5410,13 +5896,16 @@
5410
5896
  key: 1,
5411
5897
  class: "tao-alert__message"
5412
5898
  };
5899
+ const _hoisted_5$a = ["aria-label"];
5900
+ const _hoisted_6$7 = { "aria-hidden": "true" };
5413
5901
  const _sfc_main$d = /* @__PURE__ */ vue.defineComponent({
5414
5902
  ...{ name: "TaoAlert" },
5415
5903
  __name: "TaoAlert",
5416
5904
  props: {
5417
5905
  type: { default: "info" },
5418
5906
  title: { default: "" },
5419
- closable: { type: Boolean, default: false }
5907
+ closable: { type: Boolean, default: false },
5908
+ closeLabel: { default: "Закрыть" }
5420
5909
  },
5421
5910
  emits: ["close"],
5422
5911
  setup(__props, { emit: __emit }) {
@@ -5440,22 +5929,28 @@
5440
5929
  key: 0,
5441
5930
  type: "button",
5442
5931
  class: "tao-alert__close",
5443
- "aria-label": "Закрыть",
5932
+ "aria-label": __props.closeLabel,
5444
5933
  onClick: _cache[0] || (_cache[0] = ($event) => emit("close"))
5445
- }, " × ")) : 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)
5446
5941
  ], 10, _hoisted_1$d);
5447
5942
  };
5448
5943
  }
5449
5944
  });
5450
- 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"]]);
5451
5946
  const _hoisted_1$c = { key: 0 };
5452
5947
  const _hoisted_2$a = ["aria-sort"];
5453
5948
  const _hoisted_3$9 = ["onClick"];
5454
5949
  const _hoisted_4$9 = { key: 1 };
5455
5950
  const _hoisted_5$9 = { key: 0 };
5456
5951
  const _hoisted_6$6 = ["colspan"];
5457
- const _hoisted_7$4 = ["onClick"];
5458
- const _hoisted_8$4 = {
5952
+ const _hoisted_7$6 = ["onClick"];
5953
+ const _hoisted_8$6 = {
5459
5954
  key: 0,
5460
5955
  class: "tao-table__loading",
5461
5956
  "aria-busy": "true"
@@ -5608,11 +6103,11 @@
5608
6103
  ], true)
5609
6104
  ], 4);
5610
6105
  }), 128))
5611
- ], 8, _hoisted_7$4);
6106
+ ], 8, _hoisted_7$6);
5612
6107
  }), 128))
5613
6108
  ])
5614
6109
  ], 2),
5615
- __props.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$4, [
6110
+ __props.loading ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$6, [
5616
6111
  vue.renderSlot(_ctx.$slots, "loading", {}, () => [
5617
6112
  vue.createVNode(TaoLoader, { size: 36 })
5618
6113
  ], true)
@@ -5652,15 +6147,17 @@
5652
6147
  class: "tao-pagination__total"
5653
6148
  };
5654
6149
  const _hoisted_3$8 = { class: "tao-pagination__pages" };
5655
- const _hoisted_4$8 = ["disabled"];
5656
- const _hoisted_5$8 = ["aria-label", "disabled", "onClick"];
5657
- 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 = {
5658
6154
  key: 1,
5659
6155
  class: "tao-pagination__ellipsis",
5660
6156
  "aria-hidden": "true"
5661
6157
  };
5662
- const _hoisted_7$3 = ["aria-current", "aria-label", "disabled", "onClick"];
5663
- 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" };
5664
6161
  const _sfc_main$b = /* @__PURE__ */ vue.defineComponent({
5665
6162
  ...{ name: "TaoPagination" },
5666
6163
  __name: "TaoPagination",
@@ -5673,7 +6170,12 @@
5673
6170
  showTotal: { type: Boolean, default: true },
5674
6171
  size: { default: "medium" },
5675
6172
  jump: { default: 5 },
5676
- ariaLabel: { default: "Пагинация" }
6173
+ ariaLabel: { default: "Пагинация" },
6174
+ prevLabel: { default: "Назад" },
6175
+ nextLabel: { default: "Вперёд" },
6176
+ pageLabel: { default: "Страница {page}" },
6177
+ jumpPrevLabel: { default: "Назад на {n} страниц" },
6178
+ jumpNextLabel: { default: "Вперёд на {n} страниц" }
5677
6179
  },
5678
6180
  emits: ["update:page", "change"],
5679
6181
  setup(__props, { emit: __emit }) {
@@ -5706,20 +6208,32 @@
5706
6208
  "aria-label": __props.ariaLabel
5707
6209
  }, [
5708
6210
  __props.showTotal ? (vue.openBlock(), vue.createElementBlock("p", _hoisted_2$9, [
5709
- __props.total === 0 ? (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 0 }, [
5710
- vue.createTextVNode("0 из 0")
5711
- ], 64)) : (vue.openBlock(), vue.createElementBlock(vue.Fragment, { key: 1 }, [
5712
- vue.createTextVNode(vue.toDisplayString(from.value) + "–" + vue.toDisplayString(to.value) + " из " + vue.toDisplayString(__props.total), 1)
5713
- ], 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)
5714
6222
  ])) : vue.createCommentVNode("", true),
5715
6223
  vue.createElementVNode("div", _hoisted_3$8, [
5716
6224
  vue.createElementVNode("button", {
5717
6225
  type: "button",
5718
6226
  class: "tao-pagination__btn",
5719
- "aria-label": "Назад",
6227
+ "aria-label": __props.prevLabel,
5720
6228
  disabled: __props.disabled || current.value <= 1,
5721
6229
  onClick: _cache[0] || (_cache[0] = ($event) => goTo(current.value - 1))
5722
- }, " ‹ ", 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),
5723
6237
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(items.value, (item) => {
5724
6238
  return vue.openBlock(), vue.createElementBlock(vue.Fragment, {
5725
6239
  key: item.type === "page" ? item.page : item.id
@@ -5728,33 +6242,39 @@
5728
6242
  key: 0,
5729
6243
  type: "button",
5730
6244
  class: "tao-pagination__btn tao-pagination__btn--jump",
5731
- "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)),
5732
6246
  disabled: __props.disabled,
5733
6247
  onClick: ($event) => goTo(item.id === "left" ? current.value - __props.jump : current.value + __props.jump)
5734
- }, " … ", 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", {
5735
6249
  key: 2,
5736
6250
  type: "button",
5737
6251
  class: vue.normalizeClass(["tao-pagination__btn", { "tao-pagination__btn--current": item.page === current.value }]),
5738
6252
  "aria-current": item.page === current.value ? "page" : void 0,
5739
- "aria-label": `Страница ${item.page}`,
6253
+ "aria-label": __props.pageLabel.replace("{page}", String(item.page)),
5740
6254
  disabled: __props.disabled,
5741
6255
  onClick: ($event) => goTo(item.page)
5742
- }, vue.toDisplayString(item.page), 11, _hoisted_7$3))
6256
+ }, vue.toDisplayString(item.page), 11, _hoisted_8$5))
5743
6257
  ], 64);
5744
6258
  }), 128)),
5745
6259
  vue.createElementVNode("button", {
5746
6260
  type: "button",
5747
6261
  class: "tao-pagination__btn",
5748
- "aria-label": "Вперёд",
6262
+ "aria-label": __props.nextLabel,
5749
6263
  disabled: __props.disabled || current.value >= pageCount.value,
5750
6264
  onClick: _cache[1] || (_cache[1] = ($event) => goTo(current.value + 1))
5751
- }, " › ", 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)
5752
6272
  ])
5753
6273
  ], 10, _hoisted_1$b);
5754
6274
  };
5755
6275
  }
5756
6276
  });
5757
- 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"]]);
5758
6278
  const _hoisted_1$a = { class: "tao-empty" };
5759
6279
  const _hoisted_2$8 = {
5760
6280
  key: 0,
@@ -5833,8 +6353,10 @@
5833
6353
  };
5834
6354
  const _hoisted_3$6 = ["id"];
5835
6355
  const _hoisted_4$6 = { key: 1 };
5836
- const _hoisted_5$6 = { class: "tao-drawer__content" };
5837
- 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 = {
5838
6360
  key: 1,
5839
6361
  class: "tao-drawer__footer"
5840
6362
  };
@@ -5845,7 +6367,8 @@
5845
6367
  modelValue: { type: Boolean },
5846
6368
  title: { default: "" },
5847
6369
  side: { default: "right" },
5848
- closable: { type: Boolean, default: true }
6370
+ closable: { type: Boolean, default: true },
6371
+ closeLabel: { default: "Закрыть" }
5849
6372
  },
5850
6373
  emits: ["update:modelValue", "close"],
5851
6374
  setup(__props, { emit: __emit }) {
@@ -5954,14 +6477,20 @@
5954
6477
  key: 2,
5955
6478
  type: "button",
5956
6479
  class: "tao-drawer__close",
5957
- "aria-label": "Закрыть",
6480
+ "aria-label": __props.closeLabel,
5958
6481
  onClick: close
5959
- }, " × ")) : 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)
5960
6489
  ])) : vue.createCommentVNode("", true),
5961
- vue.createElementVNode("div", _hoisted_5$6, [
6490
+ vue.createElementVNode("div", _hoisted_7$4, [
5962
6491
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
5963
6492
  ]),
5964
- _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_6$4, [
6493
+ _ctx.$slots.footer ? (vue.openBlock(), vue.createElementBlock("div", _hoisted_8$4, [
5965
6494
  vue.renderSlot(_ctx.$slots, "footer", {}, void 0, true)
5966
6495
  ])) : vue.createCommentVNode("", true)
5967
6496
  ], 8, _hoisted_1$8)
@@ -5973,7 +6502,7 @@
5973
6502
  };
5974
6503
  }
5975
6504
  });
5976
- 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"]]);
5977
6506
  const _hoisted_1$7 = ["title"];
5978
6507
  const _hoisted_2$6 = { class: "tao-avatar__face" };
5979
6508
  const _hoisted_3$5 = ["src", "alt"];
@@ -5992,7 +6521,10 @@
5992
6521
  alt: { default: "" },
5993
6522
  size: { default: "medium" },
5994
6523
  dot: { type: [Boolean, String], default: false },
5995
- count: { default: void 0 }
6524
+ count: { default: void 0 },
6525
+ fallbackLabel: { default: "Аватар" },
6526
+ notificationsLabel: { default: "{count} уведомлений" },
6527
+ dotLabels: { default: () => ({}) }
5996
6528
  },
5997
6529
  setup(__props) {
5998
6530
  const props = __props;
@@ -6037,7 +6569,7 @@
6037
6569
  }
6038
6570
  return String(props.count);
6039
6571
  });
6040
- const dotLabel = {
6572
+ const defaultDotLabel = {
6041
6573
  success: "в сети",
6042
6574
  danger: "занят",
6043
6575
  warning: "отошёл",
@@ -6045,13 +6577,13 @@
6045
6577
  neutral: "не в сети"
6046
6578
  };
6047
6579
  const label = vue.computed(() => {
6048
- const base = props.alt || props.name || "Аватар";
6580
+ const base = props.alt || props.name || props.fallbackLabel;
6049
6581
  const extra = [];
6050
6582
  if (dotTone.value) {
6051
- extra.push(dotLabel[dotTone.value]);
6583
+ extra.push(props.dotLabels[dotTone.value] ?? defaultDotLabel[dotTone.value]);
6052
6584
  }
6053
6585
  if (badge.value) {
6054
- extra.push(`${badge.value} уведомлений`);
6586
+ extra.push(props.notificationsLabel.replace("{count}", badge.value));
6055
6587
  }
6056
6588
  return extra.length ? `${base}, ${extra.join(", ")}` : base;
6057
6589
  });
@@ -6082,11 +6614,8 @@
6082
6614
  };
6083
6615
  }
6084
6616
  });
6085
- const TaoAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-cb4ec893"]]);
6086
- const _hoisted_1$6 = {
6087
- class: "tao-breadcrumb",
6088
- "aria-label": "Хлебные крошки"
6089
- };
6617
+ const TaoAvatar = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-03b60017"]]);
6618
+ const _hoisted_1$6 = ["aria-label"];
6090
6619
  const _hoisted_2$5 = { class: "tao-breadcrumb__list" };
6091
6620
  const _hoisted_3$4 = {
6092
6621
  key: 0,
@@ -6106,11 +6635,15 @@
6106
6635
  ...{ name: "TaoBreadcrumb" },
6107
6636
  __name: "TaoBreadcrumb",
6108
6637
  props: {
6109
- items: {}
6638
+ items: {},
6639
+ ariaLabel: { default: "Хлебные крошки" }
6110
6640
  },
6111
6641
  setup(__props) {
6112
6642
  return (_ctx, _cache) => {
6113
- 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
+ }, [
6114
6647
  vue.createElementVNode("ol", _hoisted_2$5, [
6115
6648
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(__props.items, (item, index) => {
6116
6649
  return vue.openBlock(), vue.createElementBlock("li", {
@@ -6131,11 +6664,11 @@
6131
6664
  ]);
6132
6665
  }), 128))
6133
6666
  ])
6134
- ]);
6667
+ ], 8, _hoisted_1$6);
6135
6668
  };
6136
6669
  }
6137
6670
  });
6138
- 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"]]);
6139
6672
  const _hoisted_1$5 = ["aria-label"];
6140
6673
  const _hoisted_2$4 = {
6141
6674
  class: "tao-counter__row",
@@ -6219,16 +6752,13 @@
6219
6752
  });
6220
6753
  const TaoCounter = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-6b746f2f"]]);
6221
6754
  const _hoisted_1$4 = { class: "tao-carousel__row" };
6222
- const _hoisted_2$3 = ["disabled"];
6223
- const _hoisted_3$3 = ["aria-label"];
6224
- const _hoisted_4$3 = ["disabled"];
6225
- const _hoisted_5$3 = {
6226
- key: 0,
6227
- class: "tao-carousel__dots",
6228
- role: "group",
6229
- "aria-label": "Слайды"
6230
- };
6231
- 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"];
6232
6762
  const _sfc_main$4 = /* @__PURE__ */ vue.defineComponent({
6233
6763
  ...{ name: "TaoCarousel" },
6234
6764
  __name: "TaoCarousel",
@@ -6240,7 +6770,11 @@
6240
6770
  autoplay: { default: 0 },
6241
6771
  loop: { type: Boolean, default: false },
6242
6772
  dots: { type: Boolean, default: false },
6243
- ariaLabel: { default: "Лента" }
6773
+ ariaLabel: { default: "Лента" },
6774
+ prevLabel: { default: "Назад" },
6775
+ nextLabel: { default: "Вперёд" },
6776
+ dotsLabel: { default: "Слайды" },
6777
+ slideLabel: { default: "Слайд {n} из {count}" }
6244
6778
  },
6245
6779
  emits: ["update:modelValue", "change"],
6246
6780
  setup(__props, { emit: __emit }) {
@@ -6531,27 +7065,30 @@
6531
7065
  key: 0,
6532
7066
  type: "button",
6533
7067
  class: "tao-carousel__nav",
6534
- "aria-label": "Назад",
7068
+ "aria-label": __props.prevLabel,
6535
7069
  disabled: atStart.value,
6536
7070
  onClick: goPrev
6537
- }, [..._cache[0] || (_cache[0] = [
6538
- vue.createElementVNode("svg", {
6539
- viewBox: "0 0 24 24",
6540
- width: "16",
6541
- height: "16",
6542
- "aria-hidden": "true",
6543
- focusable: "false"
6544
- }, [
6545
- vue.createElementVNode("path", {
6546
- fill: "none",
6547
- stroke: "currentColor",
6548
- "stroke-width": "2.2",
6549
- "stroke-linecap": "round",
6550
- "stroke-linejoin": "round",
6551
- d: "M14.5 5 8 12l6.5 7"
6552
- })
6553
- ], -1)
6554
- ])], 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)
6555
7092
  ], true),
6556
7093
  vue.createElementVNode("div", {
6557
7094
  ref_key: "track",
@@ -6570,7 +7107,7 @@
6570
7107
  onClickCapture
6571
7108
  }, [
6572
7109
  vue.renderSlot(_ctx.$slots, "default", {}, void 0, true)
6573
- ], 42, _hoisted_3$3),
7110
+ ], 42, _hoisted_4$3),
6574
7111
  vue.renderSlot(_ctx.$slots, "next", {
6575
7112
  disabled: atEnd.value,
6576
7113
  go: goNext
@@ -6579,27 +7116,30 @@
6579
7116
  key: 0,
6580
7117
  type: "button",
6581
7118
  class: "tao-carousel__nav",
6582
- "aria-label": "Вперёд",
7119
+ "aria-label": __props.nextLabel,
6583
7120
  disabled: atEnd.value,
6584
7121
  onClick: goNext
6585
- }, [..._cache[1] || (_cache[1] = [
6586
- vue.createElementVNode("svg", {
6587
- viewBox: "0 0 24 24",
6588
- width: "16",
6589
- height: "16",
6590
- "aria-hidden": "true",
6591
- focusable: "false"
6592
- }, [
6593
- vue.createElementVNode("path", {
6594
- fill: "none",
6595
- stroke: "currentColor",
6596
- "stroke-width": "2.2",
6597
- "stroke-linecap": "round",
6598
- "stroke-linejoin": "round",
6599
- d: "M9.5 5 16 12l-6.5 7"
6600
- })
6601
- ], -1)
6602
- ])], 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)
6603
7143
  ], true)
6604
7144
  ]),
6605
7145
  vue.renderSlot(_ctx.$slots, "dots", {
@@ -6607,13 +7147,18 @@
6607
7147
  count: snapCount.value,
6608
7148
  go: goTo
6609
7149
  }, () => [
6610
- 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
+ }, [
6611
7156
  (vue.openBlock(true), vue.createElementBlock(vue.Fragment, null, vue.renderList(snapCount.value, (n) => {
6612
7157
  return vue.openBlock(), vue.createElementBlock("button", {
6613
7158
  key: n,
6614
7159
  type: "button",
6615
7160
  class: vue.normalizeClass(["tao-carousel__dot", { "tao-carousel__dot--active": n - 1 === index.value }]),
6616
- "aria-label": `Слайд ${n} из ${snapCount.value}`,
7161
+ "aria-label": __props.slideLabel.replace("{n}", String(n)).replace("{count}", String(snapCount.value)),
6617
7162
  "aria-current": n - 1 === index.value ? "true" : void 0,
6618
7163
  onClick: ($event) => goTo(n - 1)
6619
7164
  }, [
@@ -6624,15 +7169,15 @@
6624
7169
  }, () => [
6625
7170
  _cache[2] || (_cache[2] = vue.createElementVNode("span", { class: "tao-carousel__pip" }, null, -1))
6626
7171
  ], true)
6627
- ], 10, _hoisted_6$3);
7172
+ ], 10, _hoisted_8$3);
6628
7173
  }), 128))
6629
- ])) : vue.createCommentVNode("", true)
7174
+ ], 8, _hoisted_7$3)) : vue.createCommentVNode("", true)
6630
7175
  ], true)
6631
7176
  ], 36);
6632
7177
  };
6633
7178
  }
6634
7179
  });
6635
- 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"]]);
6636
7181
  const _hoisted_1$3 = ["aria-label"];
6637
7182
  const _hoisted_2$2 = ["aria-label"];
6638
7183
  const _hoisted_3$2 = {
@@ -6674,11 +7219,12 @@
6674
7219
  props: {
6675
7220
  items: { default: () => [] },
6676
7221
  vertical: { type: Boolean, default: true },
6677
- ariaLabel: { default: "Стадии" }
7222
+ ariaLabel: { default: "Стадии" },
7223
+ statusLabels: { default: () => ({}) }
6678
7224
  },
6679
7225
  setup(__props) {
6680
7226
  const props = __props;
6681
- const statusText = {
7227
+ const fallbackStatusText = {
6682
7228
  wait: "ожидание",
6683
7229
  work: "в работе",
6684
7230
  ok: "готово",
@@ -6691,7 +7237,8 @@
6691
7237
  return item.status ?? "wait";
6692
7238
  }
6693
7239
  function itemLabel(item) {
6694
- return `${item.label ?? item.key}, ${statusText[statusOf(item)]}`;
7240
+ const status = statusOf(item);
7241
+ return `${item.label ?? item.key}, ${props.statusLabels[status] ?? fallbackStatusText[status]}`;
6695
7242
  }
6696
7243
  return (_ctx, _cache) => {
6697
7244
  return vue.openBlock(), vue.createElementBlock("ul", {
@@ -6765,7 +7312,7 @@
6765
7312
  };
6766
7313
  }
6767
7314
  });
6768
- 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"]]);
6769
7316
  const TOAST_POSITIONS = [
6770
7317
  "topRight",
6771
7318
  "topLeft",
@@ -6779,7 +7326,8 @@
6779
7326
  position: "topCenter",
6780
7327
  timeout: 3e3,
6781
7328
  closable: true,
6782
- progress: true
7329
+ progress: true,
7330
+ closeLabel: "Закрыть уведомление"
6783
7331
  };
6784
7332
  const toasts = vue.ref([]);
6785
7333
  const toastsByPosition = vue.computed(() => {
@@ -6890,6 +7438,7 @@
6890
7438
  key: 2,
6891
7439
  class: "tao-toast__actions"
6892
7440
  };
7441
+ const _hoisted_11 = ["aria-label"];
6893
7442
  const _sfc_main$2 = /* @__PURE__ */ vue.defineComponent({
6894
7443
  ...{ name: "TaoToastItem" },
6895
7444
  __name: "TaoToastItem",
@@ -7058,9 +7607,9 @@
7058
7607
  key: 0,
7059
7608
  type: "button",
7060
7609
  class: "tao-toast__close",
7061
- "aria-label": "Закрыть уведомление",
7610
+ "aria-label": vue.unref(toastDefaults).closeLabel,
7062
7611
  onClick: close
7063
- }, " × ")) : vue.createCommentVNode("", true),
7612
+ }, " × ", 8, _hoisted_11)) : vue.createCommentVNode("", true),
7064
7613
  __props.toast.progress && __props.toast.timeout ? (vue.openBlock(), vue.createElementBlock("span", {
7065
7614
  key: 1,
7066
7615
  class: "tao-toast__progress",
@@ -7070,7 +7619,7 @@
7070
7619
  };
7071
7620
  }
7072
7621
  });
7073
- 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"]]);
7074
7623
  const _hoisted_1$1 = { class: "tao-toast-slot__inner" };
7075
7624
  const _sfc_main$1 = /* @__PURE__ */ vue.defineComponent({
7076
7625
  ...{ name: "TaoToastViewport" },
@@ -7779,8 +8328,9 @@
7779
8328
  TaoSpoilerGroup,
7780
8329
  TaoCopy,
7781
8330
  TaoContainer,
7782
- _sfc_main$F,
8331
+ _sfc_main$G,
7783
8332
  TaoSpace,
8333
+ TaoSplit,
7784
8334
  TaoIcon,
7785
8335
  TaoLoader,
7786
8336
  TaoImage,
@@ -7850,7 +8400,7 @@
7850
8400
  exports2.TaoEmpty = TaoEmpty;
7851
8401
  exports2.TaoFieldset = TaoFieldset;
7852
8402
  exports2.TaoFileDrop = TaoFileDrop;
7853
- exports2.TaoFlex = _sfc_main$F;
8403
+ exports2.TaoFlex = _sfc_main$G;
7854
8404
  exports2.TaoFormField = TaoFormField;
7855
8405
  exports2.TaoIcon = TaoIcon;
7856
8406
  exports2.TaoImage = TaoImage;
@@ -7874,6 +8424,7 @@
7874
8424
  exports2.TaoSkeleton = TaoSkeleton;
7875
8425
  exports2.TaoSlider = TaoSlider;
7876
8426
  exports2.TaoSpace = TaoSpace;
8427
+ exports2.TaoSplit = TaoSplit;
7877
8428
  exports2.TaoSpoiler = TaoSpoiler;
7878
8429
  exports2.TaoSpoilerGroup = TaoSpoilerGroup;
7879
8430
  exports2.TaoStages = TaoStages;