@1337exp/taoui 1.0.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.mjs ADDED
@@ -0,0 +1,1742 @@
1
+ import { defineComponent, openBlock, createElementBlock, normalizeClass, createCommentVNode, toDisplayString, createElementVNode, renderSlot, computed, normalizeStyle, watch, onBeforeUnmount, createBlock, Teleport, createVNode, Transition, withCtx, withModifiers, Fragment, renderList, ref, createTextVNode, resolveDynamicComponent, useCssVars, nextTick, onMounted, reactive, onBeforeMount, withDirectives, vModelText, onUnmounted, resolveComponent, mergeProps } from "vue";
2
+ const _hoisted_1$h = ["type", "disabled"];
3
+ const _hoisted_2$f = {
4
+ key: 0,
5
+ class: "tao-button__loader"
6
+ };
7
+ const _hoisted_3$9 = {
8
+ key: 1,
9
+ class: "tao-button__icon"
10
+ };
11
+ const _hoisted_4$6 = { class: "tao-button__content" };
12
+ const _sfc_main$q = /* @__PURE__ */ defineComponent({
13
+ __name: "TaoButton",
14
+ props: {
15
+ type: { default: "button" },
16
+ size: { default: "medium" },
17
+ variant: { default: "primary" },
18
+ disabled: { type: Boolean, default: false },
19
+ loading: { type: Boolean, default: false },
20
+ block: { type: Boolean, default: false },
21
+ icon: { default: "" }
22
+ },
23
+ emits: ["click"],
24
+ setup(__props, { emit: __emit }) {
25
+ const props = __props;
26
+ const emit = __emit;
27
+ function handleClick(event) {
28
+ if (!props.disabled && !props.loading) {
29
+ emit("click", event);
30
+ }
31
+ }
32
+ return (_ctx, _cache) => {
33
+ return openBlock(), createElementBlock("button", {
34
+ class: normalizeClass(["tao-button", [
35
+ `tao-button--${__props.size}`,
36
+ `tao-button--${__props.variant}`,
37
+ {
38
+ "tao-button--disabled": __props.disabled,
39
+ "tao-button--loading": __props.loading,
40
+ "tao-button--block": __props.block,
41
+ "tao-button--icon": !!__props.icon
42
+ }
43
+ ]]),
44
+ type: __props.type,
45
+ disabled: __props.disabled || __props.loading,
46
+ onClick: handleClick
47
+ }, [
48
+ __props.loading ? (openBlock(), createElementBlock("span", _hoisted_2$f)) : createCommentVNode("", true),
49
+ __props.icon ? (openBlock(), createElementBlock("span", _hoisted_3$9, toDisplayString(__props.icon), 1)) : createCommentVNode("", true),
50
+ createElementVNode("span", _hoisted_4$6, [
51
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
52
+ ])
53
+ ], 10, _hoisted_1$h);
54
+ };
55
+ }
56
+ });
57
+ const _export_sfc = (sfc, props) => {
58
+ const target = sfc.__vccOpts || sfc;
59
+ for (const [key, val] of props) {
60
+ target[key] = val;
61
+ }
62
+ return target;
63
+ };
64
+ const TaoButton = /* @__PURE__ */ _export_sfc(_sfc_main$q, [["__scopeId", "data-v-0e8431c3"]]);
65
+ const _sfc_main$p = /* @__PURE__ */ defineComponent({
66
+ __name: "TaoBlock",
67
+ props: {
68
+ padding: { default: 16 },
69
+ radius: { default: 8 },
70
+ shadow: { type: Boolean, default: true },
71
+ hover: { type: Boolean, default: false }
72
+ },
73
+ setup(__props) {
74
+ const props = __props;
75
+ const paddingStyle = computed(() => {
76
+ if (Array.isArray(props.padding)) {
77
+ return {
78
+ padding: `${props.padding.map((p) => `${p}px`).join(" ")}`
79
+ };
80
+ }
81
+ return { padding: `${props.padding}px` };
82
+ });
83
+ const radiusStyle = computed(() => ({
84
+ borderRadius: `${props.radius}px`
85
+ }));
86
+ return (_ctx, _cache) => {
87
+ return openBlock(), createElementBlock("div", {
88
+ class: normalizeClass(["tao-block", { "tao-block--shadow": __props.shadow, "tao-block--hover": __props.hover }]),
89
+ style: normalizeStyle([paddingStyle.value, radiusStyle.value])
90
+ }, [
91
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
92
+ ], 6);
93
+ };
94
+ }
95
+ });
96
+ const TaoBlock = /* @__PURE__ */ _export_sfc(_sfc_main$p, [["__scopeId", "data-v-4d014dd0"]]);
97
+ const _hoisted_1$g = { class: "tao-input-wrapper" };
98
+ const _hoisted_2$e = {
99
+ key: 0,
100
+ class: "tao-input__label"
101
+ };
102
+ const _hoisted_3$8 = ["type", "value", "placeholder", "disabled"];
103
+ const _hoisted_4$5 = {
104
+ key: 1,
105
+ class: "tao-input__error"
106
+ };
107
+ const _sfc_main$o = /* @__PURE__ */ defineComponent({
108
+ __name: "TaoInput",
109
+ props: {
110
+ modelValue: {},
111
+ type: { default: "text" },
112
+ placeholder: { default: "" },
113
+ disabled: { type: Boolean, default: false },
114
+ error: { type: Boolean, default: false },
115
+ errorMessage: { default: "" },
116
+ label: { default: "" }
117
+ },
118
+ emits: ["update:modelValue", "blur", "focus"],
119
+ setup(__props, { emit: __emit }) {
120
+ const emit = __emit;
121
+ function handleInput(event) {
122
+ const target = event.target;
123
+ emit("update:modelValue", target.value);
124
+ }
125
+ function handleBlur(event) {
126
+ emit("blur", event);
127
+ }
128
+ function handleFocus(event) {
129
+ emit("focus", event);
130
+ }
131
+ return (_ctx, _cache) => {
132
+ return openBlock(), createElementBlock("div", _hoisted_1$g, [
133
+ __props.label ? (openBlock(), createElementBlock("label", _hoisted_2$e, toDisplayString(__props.label), 1)) : createCommentVNode("", true),
134
+ createElementVNode("input", {
135
+ class: normalizeClass(["tao-input", { "tao-input--error": __props.error }]),
136
+ type: __props.type,
137
+ value: __props.modelValue,
138
+ placeholder: __props.placeholder,
139
+ disabled: __props.disabled,
140
+ onInput: handleInput,
141
+ onBlur: handleBlur,
142
+ onFocus: handleFocus
143
+ }, null, 42, _hoisted_3$8),
144
+ __props.error && __props.errorMessage ? (openBlock(), createElementBlock("span", _hoisted_4$5, toDisplayString(__props.errorMessage), 1)) : createCommentVNode("", true)
145
+ ]);
146
+ };
147
+ }
148
+ });
149
+ const TaoInput = /* @__PURE__ */ _export_sfc(_sfc_main$o, [["__scopeId", "data-v-c742d574"]]);
150
+ const _hoisted_1$f = {
151
+ key: 0,
152
+ class: "tao-card__cover"
153
+ };
154
+ const _hoisted_2$d = {
155
+ key: 0,
156
+ class: "tao-card__header-title"
157
+ };
158
+ const _hoisted_3$7 = { key: 0 };
159
+ const _hoisted_4$4 = {
160
+ key: 2,
161
+ class: "tao-card__title-block"
162
+ };
163
+ const _hoisted_5$2 = {
164
+ key: 0,
165
+ class: "tao-card__title"
166
+ };
167
+ const _hoisted_6$1 = {
168
+ key: 1,
169
+ class: "tao-card__sub"
170
+ };
171
+ const _hoisted_7 = {
172
+ key: 3,
173
+ class: "tao-card__body"
174
+ };
175
+ const _hoisted_8 = {
176
+ key: 4,
177
+ class: "tao-card__footer"
178
+ };
179
+ const _sfc_main$n = /* @__PURE__ */ defineComponent({
180
+ __name: "TaoCard",
181
+ props: {
182
+ padding: { default: 20 },
183
+ radius: { default: 8 },
184
+ shadow: { type: Boolean, default: true },
185
+ shadowBottomOnly: { type: Boolean, default: false },
186
+ hover: { type: Boolean, default: false },
187
+ active: { type: Boolean, default: false },
188
+ overflow: { type: Boolean, default: false }
189
+ },
190
+ setup(__props) {
191
+ const props = __props;
192
+ const paddingStyle = computed(() => {
193
+ if (Array.isArray(props.padding)) {
194
+ return { padding: `${props.padding.map((p) => `${p}px`).join(" ")}` };
195
+ }
196
+ return { padding: `${props.padding}px` };
197
+ });
198
+ const radiusStyle = computed(() => ({ borderRadius: `${props.radius}px` }));
199
+ return (_ctx, _cache) => {
200
+ return openBlock(), createElementBlock("div", {
201
+ class: normalizeClass(["tao-card", {
202
+ "tao-card--shadow": __props.shadow && !__props.shadowBottomOnly,
203
+ "tao-card--shadow-bottom": __props.shadowBottomOnly,
204
+ "tao-card--hover": __props.hover,
205
+ "tao-card--active": __props.active,
206
+ "tao-card--overflow": __props.overflow
207
+ }]),
208
+ style: normalizeStyle(radiusStyle.value)
209
+ }, [
210
+ _ctx.$slots.cover ? (openBlock(), createElementBlock("div", _hoisted_1$f, [
211
+ renderSlot(_ctx.$slots, "cover", {}, void 0, true)
212
+ ])) : createCommentVNode("", true),
213
+ createElementVNode("div", {
214
+ class: "tao-card__content",
215
+ style: normalizeStyle(paddingStyle.value)
216
+ }, [
217
+ _ctx.$slots.headerTitle ? (openBlock(), createElementBlock("h2", _hoisted_2$d, [
218
+ renderSlot(_ctx.$slots, "headerTitle", {}, void 0, true)
219
+ ])) : createCommentVNode("", true),
220
+ _ctx.$slots.header || _ctx.$slots.headerSecondary ? (openBlock(), createElementBlock("div", {
221
+ key: 1,
222
+ class: normalizeClass(["tao-card__header", { "tao-card__header--between": _ctx.$slots.headerSecondary }])
223
+ }, [
224
+ createElementVNode("span", null, [
225
+ renderSlot(_ctx.$slots, "header", {}, void 0, true)
226
+ ]),
227
+ _ctx.$slots.headerSecondary ? (openBlock(), createElementBlock("span", _hoisted_3$7, [
228
+ renderSlot(_ctx.$slots, "headerSecondary", {}, void 0, true)
229
+ ])) : createCommentVNode("", true)
230
+ ], 2)) : createCommentVNode("", true),
231
+ _ctx.$slots.title || _ctx.$slots.sub ? (openBlock(), createElementBlock("div", _hoisted_4$4, [
232
+ _ctx.$slots.title ? (openBlock(), createElementBlock("h2", _hoisted_5$2, [
233
+ renderSlot(_ctx.$slots, "title", {}, void 0, true)
234
+ ])) : createCommentVNode("", true),
235
+ _ctx.$slots.sub ? (openBlock(), createElementBlock("div", _hoisted_6$1, [
236
+ renderSlot(_ctx.$slots, "sub", {}, void 0, true)
237
+ ])) : createCommentVNode("", true)
238
+ ])) : createCommentVNode("", true),
239
+ _ctx.$slots.default ? (openBlock(), createElementBlock("div", _hoisted_7, [
240
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
241
+ ])) : createCommentVNode("", true),
242
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_8, [
243
+ renderSlot(_ctx.$slots, "footer", {}, void 0, true)
244
+ ])) : createCommentVNode("", true)
245
+ ], 4)
246
+ ], 6);
247
+ };
248
+ }
249
+ });
250
+ const TaoCard = /* @__PURE__ */ _export_sfc(_sfc_main$n, [["__scopeId", "data-v-b752c7cb"]]);
251
+ const _hoisted_1$e = { class: "tao-modal" };
252
+ const _hoisted_2$c = {
253
+ key: 0,
254
+ class: "tao-modal__header"
255
+ };
256
+ const _hoisted_3$6 = { class: "tao-modal__title" };
257
+ const _hoisted_4$3 = { class: "tao-modal__content" };
258
+ const _hoisted_5$1 = {
259
+ key: 1,
260
+ class: "tao-modal__footer"
261
+ };
262
+ const _sfc_main$m = /* @__PURE__ */ defineComponent({
263
+ __name: "TaoModal",
264
+ props: {
265
+ modelValue: { type: Boolean },
266
+ title: { default: "" },
267
+ closable: { type: Boolean, default: true }
268
+ },
269
+ emits: ["update:modelValue", "close"],
270
+ setup(__props, { emit: __emit }) {
271
+ const props = __props;
272
+ const emit = __emit;
273
+ function close() {
274
+ emit("update:modelValue", false);
275
+ emit("close");
276
+ }
277
+ let previousOverflow = "";
278
+ function lockBodyScroll() {
279
+ previousOverflow = document.body.style.overflow;
280
+ document.body.style.overflow = "hidden";
281
+ }
282
+ function unlockBodyScroll() {
283
+ document.body.style.overflow = previousOverflow;
284
+ }
285
+ watch(
286
+ () => props.modelValue,
287
+ (isOpen) => {
288
+ if (isOpen) {
289
+ lockBodyScroll();
290
+ } else {
291
+ unlockBodyScroll();
292
+ }
293
+ },
294
+ { immediate: true }
295
+ );
296
+ onBeforeUnmount(() => {
297
+ if (props.modelValue) {
298
+ unlockBodyScroll();
299
+ }
300
+ });
301
+ return (_ctx, _cache) => {
302
+ return openBlock(), createBlock(Teleport, { to: "body" }, [
303
+ createVNode(Transition, { name: "tao-modal-fade" }, {
304
+ default: withCtx(() => [
305
+ __props.modelValue ? (openBlock(), createElementBlock("div", {
306
+ key: 0,
307
+ class: "tao-modal-overlay",
308
+ onClick: _cache[0] || (_cache[0] = withModifiers(($event) => __props.closable && close(), ["self"]))
309
+ }, [
310
+ createElementVNode("div", _hoisted_1$e, [
311
+ __props.title || _ctx.$slots.header ? (openBlock(), createElementBlock("div", _hoisted_2$c, [
312
+ renderSlot(_ctx.$slots, "header", {}, () => [
313
+ createElementVNode("h2", _hoisted_3$6, toDisplayString(__props.title), 1)
314
+ ], true),
315
+ __props.closable ? (openBlock(), createElementBlock("button", {
316
+ key: 0,
317
+ class: "tao-modal__close",
318
+ onClick: close
319
+ }, "×")) : createCommentVNode("", true)
320
+ ])) : createCommentVNode("", true),
321
+ createElementVNode("div", _hoisted_4$3, [
322
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
323
+ ]),
324
+ _ctx.$slots.footer ? (openBlock(), createElementBlock("div", _hoisted_5$1, [
325
+ renderSlot(_ctx.$slots, "footer", {}, void 0, true)
326
+ ])) : createCommentVNode("", true)
327
+ ])
328
+ ])) : createCommentVNode("", true)
329
+ ]),
330
+ _: 3
331
+ })
332
+ ]);
333
+ };
334
+ }
335
+ });
336
+ const TaoModal = /* @__PURE__ */ _export_sfc(_sfc_main$m, [["__scopeId", "data-v-4746b5a3"]]);
337
+ const _hoisted_1$d = { class: "tao-tabs" };
338
+ const _hoisted_2$b = { class: "tao-tabs__list" };
339
+ const _hoisted_3$5 = ["onClick"];
340
+ const _hoisted_4$2 = { key: 0 };
341
+ const _hoisted_5 = { key: 1 };
342
+ const _hoisted_6 = { class: "tao-tabs__content" };
343
+ const _sfc_main$l = /* @__PURE__ */ defineComponent({
344
+ __name: "TaoTabs",
345
+ props: {
346
+ tabs: {},
347
+ modelValue: {}
348
+ },
349
+ emits: ["update:modelValue"],
350
+ setup(__props, { emit: __emit }) {
351
+ const props = __props;
352
+ const emit = __emit;
353
+ function selectTab(key) {
354
+ const tab = props.tabs.find((t) => t.key === key);
355
+ if (tab && !tab.disabled) {
356
+ emit("update:modelValue", key);
357
+ }
358
+ }
359
+ return (_ctx, _cache) => {
360
+ return openBlock(), createElementBlock("div", _hoisted_1$d, [
361
+ createElementVNode("ul", _hoisted_2$b, [
362
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.tabs, (tab) => {
363
+ return openBlock(), createElementBlock("li", {
364
+ key: tab.key,
365
+ class: normalizeClass({ active: tab.key === __props.modelValue, disabled: tab.disabled }),
366
+ onClick: ($event) => selectTab(tab.key)
367
+ }, [
368
+ _ctx.$slots.label ? (openBlock(), createElementBlock("a", _hoisted_4$2, [
369
+ renderSlot(_ctx.$slots, "label", {
370
+ text: tab.label,
371
+ value: tab.key
372
+ }, void 0, true)
373
+ ])) : (openBlock(), createElementBlock("a", _hoisted_5, toDisplayString(tab.label), 1))
374
+ ], 10, _hoisted_3$5);
375
+ }), 128))
376
+ ]),
377
+ createElementVNode("div", _hoisted_6, [
378
+ renderSlot(_ctx.$slots, "default", { activeTab: __props.modelValue }, void 0, true)
379
+ ])
380
+ ]);
381
+ };
382
+ }
383
+ });
384
+ const TaoTabs = /* @__PURE__ */ _export_sfc(_sfc_main$l, [["__scopeId", "data-v-90a6a489"]]);
385
+ const _sfc_main$k = /* @__PURE__ */ defineComponent({
386
+ __name: "TaoTooltip",
387
+ props: {
388
+ content: {},
389
+ position: { default: "top" }
390
+ },
391
+ setup(__props) {
392
+ const showTooltip = ref(false);
393
+ return (_ctx, _cache) => {
394
+ return openBlock(), createElementBlock("div", {
395
+ class: "tao-tooltip-wrapper",
396
+ onMouseenter: _cache[0] || (_cache[0] = ($event) => showTooltip.value = true),
397
+ onMouseleave: _cache[1] || (_cache[1] = ($event) => showTooltip.value = false)
398
+ }, [
399
+ renderSlot(_ctx.$slots, "default", {}, void 0, true),
400
+ createVNode(Transition, { name: "tao-tooltip-fade" }, {
401
+ default: withCtx(() => [
402
+ showTooltip.value ? (openBlock(), createElementBlock("div", {
403
+ key: 0,
404
+ class: normalizeClass(["tao-tooltip", [`tao-tooltip--${__props.position}`]])
405
+ }, toDisplayString(__props.content), 3)) : createCommentVNode("", true)
406
+ ]),
407
+ _: 1
408
+ })
409
+ ], 32);
410
+ };
411
+ }
412
+ });
413
+ const TaoTooltip = /* @__PURE__ */ _export_sfc(_sfc_main$k, [["__scopeId", "data-v-a22f010b"]]);
414
+ const _hoisted_1$c = { class: "tao-spoiler" };
415
+ const _hoisted_2$a = {
416
+ key: 0,
417
+ class: "tao-spoiler__title"
418
+ };
419
+ const _hoisted_3$4 = {
420
+ key: 0,
421
+ class: "tao-spoiler__content"
422
+ };
423
+ const _hoisted_4$1 = { class: "tao-spoiler__content-inner" };
424
+ const _sfc_main$j = /* @__PURE__ */ defineComponent({
425
+ __name: "TaoSpoiler",
426
+ props: {
427
+ title: { default: "" },
428
+ defaultOpen: { type: Boolean, default: false }
429
+ },
430
+ setup(__props) {
431
+ const props = __props;
432
+ const isOpen = ref(props.defaultOpen);
433
+ function toggle() {
434
+ isOpen.value = !isOpen.value;
435
+ }
436
+ function onBeforeEnter(el) {
437
+ el.style.height = "0";
438
+ }
439
+ function onEnter(el) {
440
+ const element = el;
441
+ requestAnimationFrame(() => {
442
+ element.style.height = `${element.scrollHeight}px`;
443
+ });
444
+ }
445
+ function onAfterEnter(el) {
446
+ el.style.height = "auto";
447
+ }
448
+ function onLeave(el) {
449
+ const element = el;
450
+ element.style.height = `${element.scrollHeight}px`;
451
+ requestAnimationFrame(() => {
452
+ element.style.height = "0";
453
+ });
454
+ }
455
+ return (_ctx, _cache) => {
456
+ return openBlock(), createElementBlock("div", _hoisted_1$c, [
457
+ createElementVNode("button", {
458
+ class: "tao-spoiler__header",
459
+ onClick: toggle
460
+ }, [
461
+ createElementVNode("span", {
462
+ class: normalizeClass(["tao-spoiler__icon", { "tao-spoiler__icon--open": isOpen.value }])
463
+ }, "▶", 2),
464
+ __props.title || _ctx.$slots.title ? (openBlock(), createElementBlock("span", _hoisted_2$a, [
465
+ renderSlot(_ctx.$slots, "title", {}, () => [
466
+ createTextVNode(toDisplayString(__props.title), 1)
467
+ ], true)
468
+ ])) : createCommentVNode("", true)
469
+ ]),
470
+ createVNode(Transition, {
471
+ name: "tao-spoiler-slide",
472
+ onBeforeEnter,
473
+ onEnter,
474
+ onAfterEnter,
475
+ onLeave
476
+ }, {
477
+ default: withCtx(() => [
478
+ isOpen.value ? (openBlock(), createElementBlock("div", _hoisted_3$4, [
479
+ createElementVNode("div", _hoisted_4$1, [
480
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
481
+ ])
482
+ ])) : createCommentVNode("", true)
483
+ ]),
484
+ _: 3
485
+ })
486
+ ]);
487
+ };
488
+ }
489
+ });
490
+ const TaoSpoiler = /* @__PURE__ */ _export_sfc(_sfc_main$j, [["__scopeId", "data-v-061480fb"]]);
491
+ const _hoisted_1$b = { class: "tao-copy" };
492
+ const _sfc_main$i = /* @__PURE__ */ defineComponent({
493
+ __name: "TaoCopy",
494
+ props: {
495
+ text: {},
496
+ successMessage: { default: "Скопировано!" }
497
+ },
498
+ setup(__props) {
499
+ const props = __props;
500
+ const copied = ref(false);
501
+ let timeoutId;
502
+ async function copy() {
503
+ try {
504
+ await navigator.clipboard.writeText(props.text);
505
+ copied.value = true;
506
+ clearTimeout(timeoutId);
507
+ timeoutId = setTimeout(() => {
508
+ copied.value = false;
509
+ }, 2e3);
510
+ } catch (err) {
511
+ console.error("Failed to copy:", err);
512
+ }
513
+ }
514
+ return (_ctx, _cache) => {
515
+ return openBlock(), createElementBlock("div", _hoisted_1$b, [
516
+ renderSlot(_ctx.$slots, "default", {
517
+ copy,
518
+ copied: copied.value
519
+ }, () => [
520
+ createElementVNode("button", {
521
+ class: normalizeClass(["tao-copy__button", { "tao-copy__button--copied": copied.value }]),
522
+ onClick: copy
523
+ }, toDisplayString(copied.value ? __props.successMessage : "Копировать"), 3)
524
+ ], true)
525
+ ]);
526
+ };
527
+ }
528
+ });
529
+ const TaoCopy = /* @__PURE__ */ _export_sfc(_sfc_main$i, [["__scopeId", "data-v-810f1bc7"]]);
530
+ const _sfc_main$h = /* @__PURE__ */ defineComponent({
531
+ __name: "TaoContainer",
532
+ props: {
533
+ size: { default: "wide" },
534
+ free: { type: Boolean, default: false }
535
+ },
536
+ setup(__props) {
537
+ return (_ctx, _cache) => {
538
+ return openBlock(), createElementBlock("div", {
539
+ class: normalizeClass(["tao-container", [`tao-container--${__props.size}`, { "tao-container--center": !__props.free }]])
540
+ }, [
541
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
542
+ ], 2);
543
+ };
544
+ }
545
+ });
546
+ const TaoContainer = /* @__PURE__ */ _export_sfc(_sfc_main$h, [["__scopeId", "data-v-e2ebdf8f"]]);
547
+ const _sfc_main$g = /* @__PURE__ */ defineComponent({
548
+ __name: "TaoFlex",
549
+ props: {
550
+ tag: { default: "div" },
551
+ justify: { default: "flex-start" },
552
+ align: { default: "stretch" },
553
+ direction: { default: "row" },
554
+ wrap: { default: "nowrap" },
555
+ gap: { default: "0px" }
556
+ },
557
+ setup(__props) {
558
+ return (_ctx, _cache) => {
559
+ return openBlock(), createBlock(resolveDynamicComponent(__props.tag), {
560
+ style: normalizeStyle({
561
+ display: "flex",
562
+ justifyContent: __props.justify,
563
+ alignItems: __props.align,
564
+ flexDirection: __props.direction,
565
+ flexWrap: __props.wrap,
566
+ gap: __props.gap
567
+ })
568
+ }, {
569
+ default: withCtx(() => [
570
+ renderSlot(_ctx.$slots, "default")
571
+ ]),
572
+ _: 3
573
+ }, 8, ["style"]);
574
+ };
575
+ }
576
+ });
577
+ const _sfc_main$f = /* @__PURE__ */ defineComponent({
578
+ __name: "TaoSpace",
579
+ props: {
580
+ block: { type: Boolean, default: false },
581
+ expand: { type: Boolean, default: false },
582
+ vertical: { type: Boolean, default: false }
583
+ },
584
+ setup(__props) {
585
+ const props = __props;
586
+ return (_ctx, _cache) => {
587
+ return openBlock(), createElementBlock("div", {
588
+ class: normalizeClass(["tao-space", { "tao-space--vertical": props.vertical }]),
589
+ style: normalizeStyle([props.block ? "display: flex; flex-wrap: initial;" : "", props.expand ? "width: 100%" : ""])
590
+ }, [
591
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
592
+ ], 6);
593
+ };
594
+ }
595
+ });
596
+ const TaoSpace = /* @__PURE__ */ _export_sfc(_sfc_main$f, [["__scopeId", "data-v-4190f6ba"]]);
597
+ const _hoisted_1$a = { class: "tao-icon" };
598
+ const _sfc_main$e = /* @__PURE__ */ defineComponent({
599
+ __name: "TaoIcon",
600
+ props: {
601
+ name: {},
602
+ margin: { default: "0px" },
603
+ size: {},
604
+ invert: { type: Boolean }
605
+ },
606
+ setup(__props) {
607
+ useCssVars((_ctx) => ({
608
+ "v2b130076": props.margin
609
+ }));
610
+ const props = __props;
611
+ return (_ctx, _cache) => {
612
+ return openBlock(), createElementBlock("span", _hoisted_1$a, [
613
+ renderSlot(_ctx.$slots, "prefix", {}, void 0, true),
614
+ createElementVNode("i", {
615
+ class: normalizeClass(["tao-icon__value", [`icon-${props.name}`, { "tao-icon__value--invert": props.invert }]]),
616
+ style: normalizeStyle(props.size ? `font-size: ${props.size}px` : "")
617
+ }, null, 6),
618
+ renderSlot(_ctx.$slots, "postfix", {}, void 0, true)
619
+ ]);
620
+ };
621
+ }
622
+ });
623
+ const TaoIcon = /* @__PURE__ */ _export_sfc(_sfc_main$e, [["__scopeId", "data-v-b561364f"]]);
624
+ const _sfc_main$d = /* @__PURE__ */ defineComponent({
625
+ __name: "TaoLoader",
626
+ props: {
627
+ color: { default: "var(--tao-color-accent)" },
628
+ size: { default: 80 },
629
+ inline: { type: Boolean, default: false }
630
+ },
631
+ setup(__props) {
632
+ useCssVars((_ctx) => ({
633
+ "v052ed61b": positions.value.first,
634
+ "v05f388d2": positions.value.third,
635
+ "bdfc57e2": positions.value.fourth,
636
+ "v50ec8284": positions.value.animationDistance
637
+ }));
638
+ const props = __props;
639
+ const normalizedSize = computed(() => {
640
+ if (typeof props.size === "number") {
641
+ return `${props.size}px`;
642
+ }
643
+ return props.size;
644
+ });
645
+ const dotSizeNumber = computed(() => {
646
+ const baseSize = typeof props.size === "number" ? props.size : parseInt(props.size, 10) || 80;
647
+ return baseSize * 0.1625;
648
+ });
649
+ const dotSize = computed(() => `${dotSizeNumber.value}px`);
650
+ const positions = computed(() => {
651
+ const baseSize = typeof props.size === "number" ? props.size : parseInt(props.size, 10) || 80;
652
+ return {
653
+ first: `${baseSize * 0.1}px`,
654
+ third: `${baseSize * 0.4}px`,
655
+ fourth: `${baseSize * 0.7}px`,
656
+ animationDistance: `${baseSize * 0.3}px`
657
+ };
658
+ });
659
+ return (_ctx, _cache) => {
660
+ return openBlock(), createElementBlock("div", {
661
+ class: normalizeClass(["tao-loader", { "tao-loader--inline": props.inline }])
662
+ }, [
663
+ createElementVNode("div", {
664
+ class: "tao-loader__ellipsis",
665
+ style: normalizeStyle({ width: normalizedSize.value, height: dotSize.value, marginLeft: `-${dotSizeNumber.value / 2}px` })
666
+ }, [
667
+ createElementVNode("div", {
668
+ style: normalizeStyle({ background: props.color, width: dotSize.value, height: dotSize.value })
669
+ }, null, 4),
670
+ createElementVNode("div", {
671
+ style: normalizeStyle({ background: props.color, width: dotSize.value, height: dotSize.value })
672
+ }, null, 4),
673
+ createElementVNode("div", {
674
+ style: normalizeStyle({ background: props.color, width: dotSize.value, height: dotSize.value })
675
+ }, null, 4),
676
+ createElementVNode("div", {
677
+ style: normalizeStyle({ background: props.color, width: dotSize.value, height: dotSize.value })
678
+ }, null, 4)
679
+ ], 4)
680
+ ], 2);
681
+ };
682
+ }
683
+ });
684
+ const TaoLoader = /* @__PURE__ */ _export_sfc(_sfc_main$d, [["__scopeId", "data-v-3a29f095"]]);
685
+ const _hoisted_1$9 = { class: "tao-image" };
686
+ const _hoisted_2$9 = ["src", "alt"];
687
+ const _sfc_main$c = /* @__PURE__ */ defineComponent({
688
+ __name: "TaoImage",
689
+ props: {
690
+ src: { default: "" },
691
+ alt: { default: "" },
692
+ pixelated: { type: Boolean, default: false }
693
+ },
694
+ emits: ["load", "error"],
695
+ setup(__props, { emit: __emit }) {
696
+ const props = __props;
697
+ const emit = __emit;
698
+ const isLoaded = ref(false);
699
+ function handleLoad() {
700
+ isLoaded.value = true;
701
+ emit("load");
702
+ }
703
+ function handleError() {
704
+ isLoaded.value = false;
705
+ emit("error");
706
+ }
707
+ watch(() => props.src, () => {
708
+ isLoaded.value = false;
709
+ });
710
+ return (_ctx, _cache) => {
711
+ return openBlock(), createElementBlock("div", _hoisted_1$9, [
712
+ __props.src ? (openBlock(), createElementBlock("img", {
713
+ key: 0,
714
+ class: normalizeClass({ "tao-image__img--hidden": !isLoaded.value, "tao-image__img--pixelated": props.pixelated }),
715
+ src: __props.src,
716
+ alt: __props.alt,
717
+ draggable: "false",
718
+ onLoad: handleLoad,
719
+ onError: handleError
720
+ }, null, 42, _hoisted_2$9)) : renderSlot(_ctx.$slots, "default", {}, () => [
721
+ _cache[0] || (_cache[0] = createElementVNode("div", { class: "tao-image__placeholder" }, "No image available", -1))
722
+ ], true, 1)
723
+ ]);
724
+ };
725
+ }
726
+ });
727
+ const TaoImage = /* @__PURE__ */ _export_sfc(_sfc_main$c, [["__scopeId", "data-v-8272e203"]]);
728
+ const _hoisted_1$8 = ["checked", "disabled"];
729
+ const _hoisted_2$8 = {
730
+ key: 0,
731
+ class: "tao-checkbox__label"
732
+ };
733
+ const _hoisted_3$3 = {
734
+ key: 1,
735
+ class: "tao-checkbox__label"
736
+ };
737
+ const _sfc_main$b = /* @__PURE__ */ defineComponent({
738
+ __name: "TaoCheckbox",
739
+ props: {
740
+ value: { type: Boolean, default: void 0 },
741
+ modelValue: { type: Boolean, default: void 0 },
742
+ label: { default: "" },
743
+ disabled: { type: Boolean, default: false }
744
+ },
745
+ emits: ["update:modelValue", "change"],
746
+ setup(__props, { emit: __emit }) {
747
+ const props = __props;
748
+ const emit = __emit;
749
+ const isChecked = computed({
750
+ get: () => {
751
+ if (props.modelValue !== void 0) {
752
+ return props.modelValue;
753
+ }
754
+ return props.value;
755
+ },
756
+ set: (value) => {
757
+ if (props.modelValue !== void 0) {
758
+ emit("update:modelValue", value);
759
+ }
760
+ emit("change", value);
761
+ }
762
+ });
763
+ function onInputChange(event) {
764
+ if (props.disabled) {
765
+ return;
766
+ }
767
+ const target = event.target;
768
+ isChecked.value = target.checked;
769
+ }
770
+ return (_ctx, _cache) => {
771
+ return openBlock(), createElementBlock("label", {
772
+ class: normalizeClass(["tao-checkbox", { "tao-checkbox--disabled": props.disabled }])
773
+ }, [
774
+ renderSlot(_ctx.$slots, "pre", {
775
+ text: props.label
776
+ }, void 0, true),
777
+ createElementVNode("input", {
778
+ class: "tao-checkbox__input",
779
+ type: "checkbox",
780
+ checked: isChecked.value,
781
+ disabled: props.disabled,
782
+ onChange: onInputChange
783
+ }, null, 40, _hoisted_1$8),
784
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "tao-checkbox__box" }, null, -1)),
785
+ props.label ? (openBlock(), createElementBlock("span", _hoisted_2$8, toDisplayString(props.label), 1)) : (openBlock(), createElementBlock("span", _hoisted_3$3, [
786
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
787
+ ])),
788
+ renderSlot(_ctx.$slots, "post", {
789
+ text: props.label
790
+ }, void 0, true)
791
+ ], 2);
792
+ };
793
+ }
794
+ });
795
+ const TaoCheckbox = /* @__PURE__ */ _export_sfc(_sfc_main$b, [["__scopeId", "data-v-0ece6da0"]]);
796
+ const _sfc_main$a = /* @__PURE__ */ defineComponent({
797
+ __name: "TaoTag",
798
+ props: {
799
+ type: { default: "" },
800
+ color: {},
801
+ background: {},
802
+ borderColor: {},
803
+ pointer: { type: Boolean, default: false }
804
+ },
805
+ setup(__props) {
806
+ const props = __props;
807
+ const style = computed(() => ({
808
+ color: props.color || "",
809
+ background: props.background || "",
810
+ "border-color": props.borderColor || ""
811
+ }));
812
+ return (_ctx, _cache) => {
813
+ return openBlock(), createElementBlock("div", {
814
+ class: normalizeClass(["tao-tag", [props.pointer && "tao-tag--pointer", props.type ? `tao-tag--${props.type}` : ""]]),
815
+ style: normalizeStyle(style.value)
816
+ }, [
817
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
818
+ ], 6);
819
+ };
820
+ }
821
+ });
822
+ const TaoTag = /* @__PURE__ */ _export_sfc(_sfc_main$a, [["__scopeId", "data-v-f615cf3c"]]);
823
+ const _hoisted_1$7 = {
824
+ key: 1,
825
+ class: "tao-divider-text"
826
+ };
827
+ const _hoisted_2$7 = { class: "tao-divider-text__value" };
828
+ const _hoisted_3$2 = {
829
+ key: 2,
830
+ class: "tao-divider-line"
831
+ };
832
+ const _sfc_main$9 = /* @__PURE__ */ defineComponent({
833
+ __name: "TaoDivider",
834
+ props: {
835
+ variant: { default: "line" },
836
+ size: { default: "medium" }
837
+ },
838
+ setup(__props) {
839
+ return (_ctx, _cache) => {
840
+ return __props.variant === "gap" ? (openBlock(), createElementBlock("div", {
841
+ key: 0,
842
+ class: normalizeClass(["tao-divider-gap", `tao-divider-gap--${__props.size}`])
843
+ }, null, 2)) : __props.variant === "text" ? (openBlock(), createElementBlock("div", _hoisted_1$7, [
844
+ _cache[0] || (_cache[0] = createElementVNode("span", { class: "tao-divider-text__line tao-divider-text__line--left" }, null, -1)),
845
+ createElementVNode("span", _hoisted_2$7, [
846
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
847
+ ]),
848
+ _cache[1] || (_cache[1] = createElementVNode("span", { class: "tao-divider-text__line tao-divider-text__line--right" }, null, -1))
849
+ ])) : (openBlock(), createElementBlock("div", _hoisted_3$2));
850
+ };
851
+ }
852
+ });
853
+ const TaoDivider = /* @__PURE__ */ _export_sfc(_sfc_main$9, [["__scopeId", "data-v-9db02640"]]);
854
+ const _sfc_main$8 = /* @__PURE__ */ defineComponent({
855
+ __name: "TaoAnimatedBorder",
856
+ props: {
857
+ borderWidth: { default: 3 },
858
+ speed: { default: 6 },
859
+ glow: { default: 16 },
860
+ light: { type: Boolean, default: false }
861
+ },
862
+ setup(__props) {
863
+ return (_ctx, _cache) => {
864
+ return openBlock(), createElementBlock("div", {
865
+ class: normalizeClass(["tao-animated-border", { "tao-animated-border--light": __props.light }]),
866
+ style: normalizeStyle({
867
+ "--tao-animated-border-width": `${__props.borderWidth}px`,
868
+ "--tao-animated-border-speed": `${__props.speed}s`,
869
+ "--tao-animated-border-glow": `${__props.glow}px`
870
+ })
871
+ }, [
872
+ renderSlot(_ctx.$slots, "default", {}, void 0, true)
873
+ ], 6);
874
+ };
875
+ }
876
+ });
877
+ const TaoAnimatedBorder = /* @__PURE__ */ _export_sfc(_sfc_main$8, [["__scopeId", "data-v-4ca22c09"]]);
878
+ const _hoisted_1$6 = {
879
+ key: 0,
880
+ class: "tao-textarea tao-textarea--dummy"
881
+ };
882
+ const _hoisted_2$6 = ["placeholder", "spellcheck", "autocomplete", "minlength", "maxlength", "disabled", "rows", "value"];
883
+ const _sfc_main$7 = /* @__PURE__ */ defineComponent({
884
+ __name: "TaoTextarea",
885
+ props: {
886
+ placeholder: { default: "" },
887
+ spellcheck: { type: Boolean, default: true },
888
+ autocomplete: { default: "" },
889
+ minlength: { default: 0 },
890
+ maxlength: { default: void 0 },
891
+ disabled: { type: Boolean, default: false },
892
+ noSpace: { type: Boolean, default: false },
893
+ dummy: { type: Boolean, default: false },
894
+ rows: { default: 3 },
895
+ resize: { type: Boolean, default: true },
896
+ modelValue: { default: "" },
897
+ noBorder: { type: Boolean, default: false },
898
+ noBackground: { type: Boolean, default: false },
899
+ autoFocus: { type: Boolean, default: false },
900
+ borderInverse: { type: Boolean, default: false },
901
+ textCenter: { type: Boolean, default: false },
902
+ submitOnEnter: { type: Boolean, default: false }
903
+ },
904
+ emits: ["update:modelValue", "change", "focus", "blur", "keydown"],
905
+ setup(__props, { emit: __emit }) {
906
+ const props = __props;
907
+ const emit = __emit;
908
+ const textareaRef = ref(null);
909
+ function onInput(e) {
910
+ const target = e.target;
911
+ emit("update:modelValue", target.value);
912
+ autoResize();
913
+ }
914
+ function onChange(e) {
915
+ emit("change", e.target.value);
916
+ }
917
+ function onFocus(e) {
918
+ emit("focus", e);
919
+ }
920
+ function onBlur(e) {
921
+ emit("blur", e);
922
+ }
923
+ function onKeydown(event) {
924
+ var _a;
925
+ emit("keydown", event);
926
+ if (props.submitOnEnter && event.key === "Enter" && !event.shiftKey) {
927
+ (_a = textareaRef.value) == null ? void 0 : _a.blur();
928
+ event.preventDefault();
929
+ return;
930
+ }
931
+ if (props.noSpace && event.key === " ") {
932
+ event.preventDefault();
933
+ }
934
+ }
935
+ function autoResize() {
936
+ const textarea = textareaRef.value;
937
+ if (!textarea) {
938
+ return;
939
+ }
940
+ textarea.style.height = "auto";
941
+ textarea.style.height = `${Math.min(textarea.scrollHeight, 500)}px`;
942
+ }
943
+ watch(() => props.modelValue, () => {
944
+ nextTick(autoResize);
945
+ });
946
+ onMounted(() => {
947
+ var _a;
948
+ if (props.autoFocus) {
949
+ (_a = textareaRef.value) == null ? void 0 : _a.focus();
950
+ }
951
+ nextTick(autoResize);
952
+ });
953
+ return (_ctx, _cache) => {
954
+ return props.dummy ? (openBlock(), createElementBlock("span", _hoisted_1$6, toDisplayString(props.modelValue), 1)) : (openBlock(), createElementBlock("textarea", {
955
+ key: 1,
956
+ ref_key: "textareaRef",
957
+ ref: textareaRef,
958
+ class: normalizeClass(["tao-textarea", {
959
+ "tao-textarea--inverse": props.borderInverse,
960
+ "tao-textarea--center": props.textCenter,
961
+ "tao-textarea--no-border": props.noBorder,
962
+ "tao-textarea--no-background": props.noBackground,
963
+ "tao-textarea--no-resize": !props.resize
964
+ }]),
965
+ placeholder: props.placeholder,
966
+ spellcheck: props.spellcheck,
967
+ autocomplete: props.autocomplete,
968
+ minlength: props.minlength,
969
+ maxlength: props.maxlength,
970
+ disabled: props.disabled,
971
+ rows: props.rows,
972
+ value: props.modelValue,
973
+ draggable: "false",
974
+ onInput,
975
+ onChange,
976
+ onFocus,
977
+ onBlur,
978
+ onKeydown
979
+ }, null, 42, _hoisted_2$6));
980
+ };
981
+ }
982
+ });
983
+ const TaoTextarea = /* @__PURE__ */ _export_sfc(_sfc_main$7, [["__scopeId", "data-v-a56ad167"]]);
984
+ const _hoisted_1$5 = ["tabindex"];
985
+ const _hoisted_2$5 = { class: "tao-scroll-top__content" };
986
+ const RIPPLE_DURATION = 750;
987
+ const _sfc_main$6 = /* @__PURE__ */ defineComponent({
988
+ __name: "TaoScrollTop",
989
+ props: {
990
+ size: { default: 40 },
991
+ right: { default: 24 },
992
+ bottom: { default: 24 },
993
+ zIndex: { default: 1e3 },
994
+ boundary: { default: 300 },
995
+ hasOutline: { type: Boolean, default: true },
996
+ tabindex: { default: 0 }
997
+ },
998
+ setup(__props) {
999
+ const props = __props;
1000
+ const fmtProp = (value, unit = "px") => typeof value === "number" ? value + unit : value;
1001
+ let prevPos = 0;
1002
+ let activeBack = false;
1003
+ const mainStyle = reactive({
1004
+ width: fmtProp(props.size),
1005
+ height: fmtProp(props.size),
1006
+ right: fmtProp(props.right),
1007
+ bottom: fmtProp(props.bottom),
1008
+ zIndex: props.zIndex
1009
+ });
1010
+ const rippleStyle = reactive({
1011
+ top: fmtProp(-1 * props.size),
1012
+ left: fmtProp(-1 * props.size),
1013
+ width: "200%",
1014
+ height: "200%"
1015
+ });
1016
+ const isActive = ref(false);
1017
+ const isRippleActive = ref(false);
1018
+ function getScrollValue() {
1019
+ if (typeof window.pageYOffset !== "undefined") {
1020
+ return window.pageYOffset;
1021
+ }
1022
+ if (typeof document.compatMode !== "undefined" && document.compatMode !== "BackCompat") {
1023
+ return document.documentElement.scrollTop;
1024
+ }
1025
+ return document.body.scrollTop;
1026
+ }
1027
+ function goToTop() {
1028
+ const c = getScrollValue();
1029
+ if (c > 0) {
1030
+ window.requestAnimationFrame(goToTop);
1031
+ window.scrollTo(0, c - Math.max(10, c / 8));
1032
+ }
1033
+ }
1034
+ function onScroll() {
1035
+ const pY = getScrollValue();
1036
+ const tooFar = pY > props.boundary;
1037
+ const goBack = prevPos > pY;
1038
+ if (activeBack) {
1039
+ if (!goBack && pY - prevPos > 15) {
1040
+ activeBack = false;
1041
+ }
1042
+ } else {
1043
+ activeBack = prevPos - pY >= 20;
1044
+ if (activeBack && pY - props.boundary < 150) {
1045
+ activeBack = false;
1046
+ }
1047
+ }
1048
+ prevPos = pY;
1049
+ isActive.value = tooFar && activeBack;
1050
+ }
1051
+ function onClick(e) {
1052
+ if (!isRippleActive.value) {
1053
+ const elTarget = e.currentTarget;
1054
+ if (elTarget) {
1055
+ const rect = elTarget.getBoundingClientRect();
1056
+ const top = e.clientY - rect.top;
1057
+ const left = e.clientX - rect.left;
1058
+ rippleStyle.top = fmtProp(top - props.size);
1059
+ rippleStyle.left = fmtProp(left - props.size);
1060
+ }
1061
+ isRippleActive.value = true;
1062
+ setTimeout(() => {
1063
+ isRippleActive.value = false;
1064
+ }, RIPPLE_DURATION);
1065
+ }
1066
+ goToTop();
1067
+ }
1068
+ onBeforeMount(() => {
1069
+ window.addEventListener("scroll", onScroll);
1070
+ });
1071
+ onBeforeUnmount(() => {
1072
+ window.removeEventListener("scroll", onScroll);
1073
+ });
1074
+ return (_ctx, _cache) => {
1075
+ return openBlock(), createBlock(Transition, { name: "tao-scroll-top-fade" }, {
1076
+ default: withCtx(() => [
1077
+ isActive.value ? (openBlock(), createElementBlock("button", {
1078
+ key: 0,
1079
+ style: normalizeStyle(mainStyle),
1080
+ tabindex: props.tabindex,
1081
+ class: normalizeClass(["tao-scroll-top", { "tao-scroll-top--no-outline": !props.hasOutline }]),
1082
+ "aria-label": "Scroll to top",
1083
+ onClick: withModifiers(onClick, ["prevent"])
1084
+ }, [
1085
+ createElementVNode("div", _hoisted_2$5, [
1086
+ createElementVNode("div", {
1087
+ class: normalizeClass([{ "tao-scroll-top__ripple--active": isRippleActive.value }, "tao-scroll-top__ripple"]),
1088
+ style: normalizeStyle(rippleStyle)
1089
+ }, null, 6),
1090
+ renderSlot(_ctx.$slots, "default", {}, () => [
1091
+ _cache[0] || (_cache[0] = createElementVNode("svg", {
1092
+ class: "tao-scroll-top__icon",
1093
+ viewBox: "0 0 24 24",
1094
+ width: "16",
1095
+ height: "16",
1096
+ fill: "currentColor"
1097
+ }, [
1098
+ createElementVNode("path", { d: "M12 6l-7 7 1.4 1.4L12 8.8l5.6 5.6L19 13z" })
1099
+ ], -1))
1100
+ ], true)
1101
+ ])
1102
+ ], 14, _hoisted_1$5)) : createCommentVNode("", true)
1103
+ ]),
1104
+ _: 3
1105
+ });
1106
+ };
1107
+ }
1108
+ });
1109
+ const TaoScrollTop = /* @__PURE__ */ _export_sfc(_sfc_main$6, [["__scopeId", "data-v-a6b96e61"]]);
1110
+ const _hoisted_1$4 = { class: "tao-progress" };
1111
+ const _hoisted_2$4 = {
1112
+ key: 0,
1113
+ class: "tao-progress__side"
1114
+ };
1115
+ const _hoisted_3$1 = { class: "tao-progress__side" };
1116
+ const _hoisted_4 = {
1117
+ key: 0,
1118
+ class: "tao-progress__percentage"
1119
+ };
1120
+ const _sfc_main$5 = /* @__PURE__ */ defineComponent({
1121
+ __name: "TaoProgress",
1122
+ props: {
1123
+ min: { default: 200 },
1124
+ max: { default: 400 },
1125
+ progress: { default: 0 },
1126
+ height: { default: 8 },
1127
+ showPercentage: { type: Boolean, default: false },
1128
+ animated: { type: Boolean, default: true }
1129
+ },
1130
+ setup(__props) {
1131
+ return (_ctx, _cache) => {
1132
+ return openBlock(), createElementBlock("div", _hoisted_1$4, [
1133
+ createElementVNode("div", {
1134
+ class: "tao-progress__container",
1135
+ style: normalizeStyle({ minWidth: `${__props.min}px`, maxWidth: `${__props.max}px` })
1136
+ }, [
1137
+ _ctx.$slots.left ? (openBlock(), createElementBlock("div", _hoisted_2$4, [
1138
+ renderSlot(_ctx.$slots, "left", {}, void 0, true)
1139
+ ])) : createCommentVNode("", true),
1140
+ createElementVNode("div", {
1141
+ class: "tao-progress__track",
1142
+ style: normalizeStyle({ height: `${__props.height}px` })
1143
+ }, [
1144
+ createElementVNode("div", {
1145
+ class: normalizeClass(["tao-progress__fill", { "tao-progress__fill--animated": __props.animated }]),
1146
+ style: normalizeStyle({ width: `${__props.progress}%` })
1147
+ }, null, 6)
1148
+ ], 4),
1149
+ createElementVNode("div", _hoisted_3$1, [
1150
+ __props.showPercentage ? (openBlock(), createElementBlock("span", _hoisted_4, toDisplayString(__props.progress) + "%", 1)) : createCommentVNode("", true),
1151
+ renderSlot(_ctx.$slots, "right", {}, void 0, true)
1152
+ ])
1153
+ ], 4)
1154
+ ]);
1155
+ };
1156
+ }
1157
+ });
1158
+ const TaoProgress = /* @__PURE__ */ _export_sfc(_sfc_main$5, [["__scopeId", "data-v-3780642d"]]);
1159
+ const _hoisted_1$3 = ["placeholder"];
1160
+ const _hoisted_2$3 = {
1161
+ key: 1,
1162
+ class: "tao-slider__value"
1163
+ };
1164
+ const _sfc_main$4 = /* @__PURE__ */ defineComponent({
1165
+ __name: "TaoSlider",
1166
+ props: {
1167
+ min: { default: 0 },
1168
+ max: { default: 100 },
1169
+ step: { default: 1 },
1170
+ showValue: { type: Boolean, default: false },
1171
+ placeholder: { default: "" },
1172
+ modelValue: {}
1173
+ },
1174
+ emits: ["update:modelValue"],
1175
+ setup(__props, { emit: __emit }) {
1176
+ const props = __props;
1177
+ const emit = __emit;
1178
+ function packModelValue(value) {
1179
+ return typeof props.modelValue === "string" ? `${value}` : value;
1180
+ }
1181
+ function unpackModelValue() {
1182
+ return typeof props.modelValue === "string" ? parseFloat(props.modelValue) : props.modelValue;
1183
+ }
1184
+ const trackRef = ref(null);
1185
+ const isDragging = ref(false);
1186
+ const shadowInputRef = ref(null);
1187
+ const shadowModel = ref("0");
1188
+ const showShadowModel = ref(false);
1189
+ const progressPercent = computed(() => {
1190
+ const range = props.max - props.min;
1191
+ return (unpackModelValue() - props.min) / range * 100;
1192
+ });
1193
+ function clampValue(v) {
1194
+ return Math.min(Math.max(v, props.min), props.max);
1195
+ }
1196
+ function calculateValue(event) {
1197
+ if (!trackRef.value) {
1198
+ return props.min;
1199
+ }
1200
+ const rect = trackRef.value.getBoundingClientRect();
1201
+ const clientX = "touches" in event ? event.touches[0].clientX : event.clientX;
1202
+ const x = Math.min(Math.max(clientX - rect.left, 0), rect.width);
1203
+ const ratio = x / rect.width;
1204
+ const v = Math.round(props.min + ratio * (props.max - props.min));
1205
+ return clampValue(Math.round((v - props.min) / props.step) * props.step + props.min);
1206
+ }
1207
+ function handleMove(event) {
1208
+ emit("update:modelValue", packModelValue(calculateValue(event)));
1209
+ }
1210
+ function onMouseUp(event) {
1211
+ const evBtn = "touches" in event ? void 0 : event.button;
1212
+ if (typeof evBtn !== "undefined" && evBtn !== 0 || showShadowModel.value) {
1213
+ return;
1214
+ }
1215
+ isDragging.value = false;
1216
+ }
1217
+ function onMouseDown(event) {
1218
+ const evBtn = "touches" in event ? void 0 : event.button;
1219
+ if (typeof evBtn !== "undefined" && evBtn !== 0 || showShadowModel.value) {
1220
+ return;
1221
+ }
1222
+ isDragging.value = true;
1223
+ handleMove(event);
1224
+ event.preventDefault();
1225
+ }
1226
+ function onMouseMove(event) {
1227
+ if (!isDragging.value) {
1228
+ return;
1229
+ }
1230
+ handleMove(event);
1231
+ }
1232
+ function onBlurShadowModel() {
1233
+ if (shadowModel.value) {
1234
+ const newValue = packModelValue(clampValue(parseFloat(shadowModel.value) || 0));
1235
+ shadowModel.value = `${newValue}`;
1236
+ emit("update:modelValue", newValue);
1237
+ }
1238
+ showShadowModel.value = false;
1239
+ }
1240
+ function onShadowKeydown(event) {
1241
+ var _a;
1242
+ if (event.key === "Enter") {
1243
+ (_a = shadowInputRef.value) == null ? void 0 : _a.blur();
1244
+ }
1245
+ }
1246
+ function onContextMenu() {
1247
+ if (props.showValue) {
1248
+ shadowModel.value = `${props.modelValue}`;
1249
+ showShadowModel.value = true;
1250
+ requestAnimationFrame(() => {
1251
+ var _a;
1252
+ return (_a = shadowInputRef.value) == null ? void 0 : _a.focus();
1253
+ });
1254
+ }
1255
+ }
1256
+ onMounted(() => {
1257
+ window.addEventListener("mouseleave", onMouseUp);
1258
+ window.addEventListener("mouseup", onMouseUp);
1259
+ window.addEventListener("mousemove", onMouseMove);
1260
+ window.addEventListener("touchend", onMouseUp);
1261
+ window.addEventListener("touchmove", onMouseMove);
1262
+ });
1263
+ onBeforeUnmount(() => {
1264
+ window.removeEventListener("mouseleave", onMouseUp);
1265
+ window.removeEventListener("mouseup", onMouseUp);
1266
+ window.removeEventListener("mousemove", onMouseMove);
1267
+ window.removeEventListener("touchend", onMouseUp);
1268
+ window.removeEventListener("touchmove", onMouseMove);
1269
+ });
1270
+ return (_ctx, _cache) => {
1271
+ return openBlock(), createElementBlock("div", {
1272
+ ref_key: "trackRef",
1273
+ ref: trackRef,
1274
+ class: normalizeClass(["tao-slider", { "tao-slider--show-value": __props.showValue }]),
1275
+ onContextmenu: withModifiers(onContextMenu, ["prevent"]),
1276
+ onMousedown: onMouseDown,
1277
+ onTouchstart: onMouseDown
1278
+ }, [
1279
+ _cache[2] || (_cache[2] = createElementVNode("div", { class: "tao-slider__track" }, null, -1)),
1280
+ createElementVNode("div", {
1281
+ class: "tao-slider__fill",
1282
+ style: normalizeStyle({ width: `${progressPercent.value}%` })
1283
+ }, null, 4),
1284
+ createElementVNode("div", {
1285
+ class: "tao-slider__thumb",
1286
+ style: normalizeStyle({ left: `${progressPercent.value}%` })
1287
+ }, null, 4),
1288
+ showShadowModel.value ? withDirectives((openBlock(), createElementBlock("input", {
1289
+ key: 0,
1290
+ ref_key: "shadowInputRef",
1291
+ ref: shadowInputRef,
1292
+ "onUpdate:modelValue": _cache[0] || (_cache[0] = ($event) => shadowModel.value = $event),
1293
+ type: "number",
1294
+ inputmode: "numeric",
1295
+ placeholder: __props.placeholder,
1296
+ class: "tao-slider__shadow-input",
1297
+ onBlur: onBlurShadowModel,
1298
+ onKeydown: onShadowKeydown,
1299
+ onMousedown: _cache[1] || (_cache[1] = withModifiers(() => {
1300
+ }, ["stop"]))
1301
+ }, null, 40, _hoisted_1$3)), [
1302
+ [vModelText, shadowModel.value]
1303
+ ]) : __props.showValue ? (openBlock(), createElementBlock("div", _hoisted_2$3, [
1304
+ renderSlot(_ctx.$slots, "pre-value", {}, void 0, true),
1305
+ createTextVNode(toDisplayString(__props.modelValue), 1),
1306
+ renderSlot(_ctx.$slots, "post-value", {}, void 0, true)
1307
+ ])) : createCommentVNode("", true)
1308
+ ], 34);
1309
+ };
1310
+ }
1311
+ });
1312
+ const TaoSlider = /* @__PURE__ */ _export_sfc(_sfc_main$4, [["__scopeId", "data-v-9f531a81"]]);
1313
+ const _hoisted_1$2 = { class: "tao-file-drop" };
1314
+ const _hoisted_2$2 = ["accept", "multiple"];
1315
+ const _sfc_main$3 = /* @__PURE__ */ defineComponent({
1316
+ __name: "TaoFileDrop",
1317
+ props: {
1318
+ modelValue: { default: () => [] },
1319
+ size: { default: "medium" },
1320
+ accept: { default: "*" },
1321
+ multiple: { type: Boolean, default: false },
1322
+ showClear: { type: Boolean, default: false }
1323
+ },
1324
+ emits: ["update:modelValue", "files", "clear-request"],
1325
+ setup(__props, { emit: __emit }) {
1326
+ const props = __props;
1327
+ const emit = __emit;
1328
+ const isDragging = ref(false);
1329
+ const fileInput = ref(null);
1330
+ function handleDragOver(event) {
1331
+ event.preventDefault();
1332
+ isDragging.value = true;
1333
+ }
1334
+ function handleDragLeave() {
1335
+ isDragging.value = false;
1336
+ }
1337
+ function handleDrop(event) {
1338
+ var _a;
1339
+ event.preventDefault();
1340
+ isDragging.value = false;
1341
+ const files = (_a = event.dataTransfer) == null ? void 0 : _a.files;
1342
+ if (files && files.length > 0) {
1343
+ processFiles(files);
1344
+ }
1345
+ }
1346
+ function handleFileSelect(event) {
1347
+ const input = event.target;
1348
+ if (input.files && input.files.length > 0) {
1349
+ processFiles(input.files);
1350
+ }
1351
+ }
1352
+ function requestClear() {
1353
+ emit("clear-request");
1354
+ }
1355
+ function triggerFileInput() {
1356
+ var _a;
1357
+ (_a = fileInput.value) == null ? void 0 : _a.click();
1358
+ }
1359
+ function processFiles(fileList) {
1360
+ const files = Array.from(fileList);
1361
+ const result = !props.multiple && files.length > 1 ? [files[0]] : files;
1362
+ emit("update:modelValue", result);
1363
+ emit("files", result);
1364
+ const el = fileInput.value;
1365
+ if (el) {
1366
+ el.type = "text";
1367
+ el.type = "file";
1368
+ }
1369
+ }
1370
+ return (_ctx, _cache) => {
1371
+ return openBlock(), createElementBlock("div", _hoisted_1$2, [
1372
+ __props.showClear && __props.modelValue.length ? (openBlock(), createElementBlock("button", {
1373
+ key: 0,
1374
+ type: "button",
1375
+ class: "tao-file-drop__clear",
1376
+ onClick: requestClear
1377
+ }, " ✕ ")) : createCommentVNode("", true),
1378
+ createElementVNode("div", {
1379
+ class: normalizeClass(["tao-file-drop__zone", [`tao-file-drop__zone--${__props.size}`, { "tao-file-drop__zone--dragging": isDragging.value }]]),
1380
+ onDragover: handleDragOver,
1381
+ onDragleave: handleDragLeave,
1382
+ onDrop: handleDrop,
1383
+ onClick: triggerFileInput
1384
+ }, [
1385
+ renderSlot(_ctx.$slots, "default", {}, () => [
1386
+ _cache[0] || (_cache[0] = createTextVNode("Drag & drop your file(s) here or click to select", -1))
1387
+ ], true),
1388
+ createElementVNode("input", {
1389
+ ref_key: "fileInput",
1390
+ ref: fileInput,
1391
+ type: "file",
1392
+ hidden: "",
1393
+ accept: __props.accept,
1394
+ multiple: __props.multiple,
1395
+ onChange: handleFileSelect
1396
+ }, null, 40, _hoisted_2$2)
1397
+ ], 34)
1398
+ ]);
1399
+ };
1400
+ }
1401
+ });
1402
+ const TaoFileDrop = /* @__PURE__ */ _export_sfc(_sfc_main$3, [["__scopeId", "data-v-db5ffca4"]]);
1403
+ const _hoisted_1$1 = { key: 1 };
1404
+ const _hoisted_2$1 = ["onClick"];
1405
+ const _hoisted_3 = { key: 1 };
1406
+ const _sfc_main$2 = /* @__PURE__ */ defineComponent({
1407
+ __name: "TaoDropdownMenu",
1408
+ props: {
1409
+ actions: { default: () => [] }
1410
+ },
1411
+ emits: ["selected"],
1412
+ setup(__props, { emit: __emit }) {
1413
+ const emit = __emit;
1414
+ let animationFrameId = 0;
1415
+ const menuRef = ref(null);
1416
+ const listRef = ref(null);
1417
+ const isOpen = ref(false);
1418
+ const listPosition = reactive({ top: "0", left: "0" });
1419
+ function updatePosition() {
1420
+ const elMenu = menuRef.value;
1421
+ const elList = listRef.value;
1422
+ if (elMenu && elList && isOpen.value) {
1423
+ const rect = elMenu.getBoundingClientRect();
1424
+ const rectList = elList.getBoundingClientRect();
1425
+ let px = rect.right;
1426
+ let py = rect.top;
1427
+ if (px + rectList.width > window.innerWidth) {
1428
+ px = rect.left - rectList.width;
1429
+ }
1430
+ if (py + rectList.height > window.innerHeight) {
1431
+ py = rect.bottom - rectList.height;
1432
+ }
1433
+ listPosition.top = `${py + window.scrollY}px`;
1434
+ listPosition.left = `${px}px`;
1435
+ }
1436
+ }
1437
+ function toggleMenu() {
1438
+ isOpen.value = !isOpen.value;
1439
+ if (isOpen.value) {
1440
+ animationFrameId = requestAnimationFrame(function render() {
1441
+ updatePosition();
1442
+ animationFrameId = requestAnimationFrame(render);
1443
+ });
1444
+ } else {
1445
+ cancelAnimationFrame(animationFrameId);
1446
+ }
1447
+ }
1448
+ function closeMenu(event) {
1449
+ if (menuRef.value && !menuRef.value.contains(event.target)) {
1450
+ isOpen.value = false;
1451
+ }
1452
+ }
1453
+ function emitAction(id) {
1454
+ isOpen.value = false;
1455
+ emit("selected", id);
1456
+ }
1457
+ function onWinScroll() {
1458
+ isOpen.value = false;
1459
+ }
1460
+ onMounted(() => {
1461
+ document.addEventListener("click", closeMenu);
1462
+ window.addEventListener("scroll", onWinScroll);
1463
+ });
1464
+ onUnmounted(() => {
1465
+ document.removeEventListener("click", closeMenu);
1466
+ window.removeEventListener("scroll", onWinScroll);
1467
+ cancelAnimationFrame(animationFrameId);
1468
+ });
1469
+ return (_ctx, _cache) => {
1470
+ return openBlock(), createElementBlock("div", {
1471
+ ref_key: "menuRef",
1472
+ ref: menuRef,
1473
+ class: "tao-dropdown-menu"
1474
+ }, [
1475
+ createElementVNode("div", {
1476
+ class: "tao-dropdown-menu__button",
1477
+ onClick: toggleMenu
1478
+ }, [
1479
+ _ctx.$slots.button ? renderSlot(_ctx.$slots, "button", {}, void 0, true, 0) : (openBlock(), createElementBlock("span", _hoisted_1$1, "⋮"))
1480
+ ]),
1481
+ (openBlock(), createBlock(Teleport, { to: "body" }, [
1482
+ isOpen.value ? (openBlock(), createElementBlock("div", {
1483
+ key: 0,
1484
+ ref_key: "listRef",
1485
+ ref: listRef,
1486
+ class: "tao-dropdown-menu__list",
1487
+ style: normalizeStyle(listPosition)
1488
+ }, [
1489
+ (openBlock(true), createElementBlock(Fragment, null, renderList(__props.actions, (action) => {
1490
+ return openBlock(), createElementBlock("div", {
1491
+ key: action.id,
1492
+ class: "tao-dropdown-menu__item",
1493
+ onClick: ($event) => emitAction(action.id)
1494
+ }, [
1495
+ _ctx.$slots.item ? renderSlot(_ctx.$slots, "item", {
1496
+ id: action.id,
1497
+ ico: action.ico,
1498
+ text: action.name
1499
+ }, void 0, true, 0) : (openBlock(), createElementBlock("span", _hoisted_3, toDisplayString(action.name), 1))
1500
+ ], 8, _hoisted_2$1);
1501
+ }), 128))
1502
+ ], 4)) : createCommentVNode("", true)
1503
+ ]))
1504
+ ], 512);
1505
+ };
1506
+ }
1507
+ });
1508
+ const TaoDropdownMenu = /* @__PURE__ */ _export_sfc(_sfc_main$2, [["__scopeId", "data-v-d54be7aa"]]);
1509
+ const _hoisted_1 = { class: "tao-pin-code" };
1510
+ const _hoisted_2 = ["value", "placeholder", "type", "inputmode", "pattern", "onInput", "onKeydown", "onFocus"];
1511
+ const _sfc_main$1 = /* @__PURE__ */ defineComponent({
1512
+ __name: "TaoPinCode",
1513
+ props: {
1514
+ length: {},
1515
+ hidden: { type: Boolean, default: false },
1516
+ placeholder: { default: "" },
1517
+ modelValue: {},
1518
+ numbersOnly: { type: Boolean, default: false }
1519
+ },
1520
+ emits: ["update:modelValue", "change", "active", "blur"],
1521
+ setup(__props, { emit: __emit }) {
1522
+ const props = __props;
1523
+ const emit = __emit;
1524
+ let lastPinCode = NaN;
1525
+ const numbers = ref([]);
1526
+ const inputRefs = ref([]);
1527
+ const activeNumber = ref(-1);
1528
+ function emitChange() {
1529
+ const s = numbers.value.map((e) => e ? e : "0").join("");
1530
+ const curPinCode = parseFloat(s);
1531
+ if (lastPinCode !== curPinCode) {
1532
+ lastPinCode = curPinCode;
1533
+ emit("change", curPinCode);
1534
+ }
1535
+ emit("update:modelValue", s);
1536
+ }
1537
+ function emitBlur() {
1538
+ activeNumber.value = -1;
1539
+ emit("blur");
1540
+ }
1541
+ function init() {
1542
+ numbers.value = [...Array(props.length)].map(() => "");
1543
+ inputRefs.value = [];
1544
+ activeNumber.value = -1;
1545
+ }
1546
+ function mutation(v, index) {
1547
+ var _a, _b;
1548
+ numbers.value = [...numbers.value];
1549
+ if (v.length > 1) {
1550
+ v = v[v.length - 1] ?? "";
1551
+ }
1552
+ if (props.numbersOnly && v && !/^[0-9]$/.test(v)) {
1553
+ numbers.value[index] = numbers.value[index] ?? "";
1554
+ return;
1555
+ }
1556
+ numbers.value[index] = v;
1557
+ const getNextIdx = () => {
1558
+ if (numbers.value.length >= index + 1) {
1559
+ return numbers.value.findIndex((e) => e === "");
1560
+ }
1561
+ return index + 1;
1562
+ };
1563
+ const nextIndex = getNextIdx();
1564
+ if (nextIndex !== -1 && !numbers.value[nextIndex]) {
1565
+ const el = inputRefs.value[nextIndex];
1566
+ if (el) {
1567
+ el.focus();
1568
+ } else {
1569
+ (_a = inputRefs.value[index]) == null ? void 0 : _a.blur();
1570
+ emitBlur();
1571
+ }
1572
+ } else {
1573
+ (_b = inputRefs.value[index]) == null ? void 0 : _b.blur();
1574
+ emitBlur();
1575
+ }
1576
+ emitChange();
1577
+ }
1578
+ function onFocus(index) {
1579
+ numbers.value = [...numbers.value];
1580
+ numbers.value[index] = "";
1581
+ activeNumber.value = index;
1582
+ emitChange();
1583
+ emit("active", inputRefs.value[index], index);
1584
+ }
1585
+ function onChange(e, index) {
1586
+ const v = e.target.value;
1587
+ mutation(v, index);
1588
+ }
1589
+ function onKeydown(event, index) {
1590
+ if (event.key !== "Backspace") {
1591
+ return;
1592
+ }
1593
+ if (!numbers.value[index] && index > 0) {
1594
+ event.preventDefault();
1595
+ numbers.value = [...numbers.value];
1596
+ numbers.value[index - 1] = "";
1597
+ const prevEl = inputRefs.value[index - 1];
1598
+ prevEl == null ? void 0 : prevEl.focus();
1599
+ activeNumber.value = index - 1;
1600
+ emitChange();
1601
+ }
1602
+ }
1603
+ watch(() => props.modelValue, (v) => {
1604
+ if (!v.length) {
1605
+ init();
1606
+ emitChange();
1607
+ }
1608
+ });
1609
+ init();
1610
+ return (_ctx, _cache) => {
1611
+ return openBlock(), createElementBlock("div", _hoisted_1, [
1612
+ (openBlock(true), createElementBlock(Fragment, null, renderList(numbers.value, (num, index) => {
1613
+ return openBlock(), createElementBlock("input", {
1614
+ key: index,
1615
+ ref_for: true,
1616
+ ref: (el) => inputRefs.value[index] = el,
1617
+ class: normalizeClass(["tao-pin-code__value", { "tao-pin-code__value--active": activeNumber.value === index }]),
1618
+ value: num,
1619
+ placeholder: __props.placeholder,
1620
+ type: __props.hidden ? "password" : "text",
1621
+ inputmode: __props.numbersOnly ? "numeric" : "text",
1622
+ pattern: __props.numbersOnly ? "[0-9]" : void 0,
1623
+ maxlength: "1",
1624
+ onInput: ($event) => onChange($event, index),
1625
+ onKeydown: ($event) => onKeydown($event, index),
1626
+ onFocus: ($event) => onFocus(index)
1627
+ }, null, 42, _hoisted_2);
1628
+ }), 128))
1629
+ ]);
1630
+ };
1631
+ }
1632
+ });
1633
+ const TaoPinCode = /* @__PURE__ */ _export_sfc(_sfc_main$1, [["__scopeId", "data-v-b8c7bf2c"]]);
1634
+ const _sfc_main = /* @__PURE__ */ defineComponent({
1635
+ __name: "TaoLink",
1636
+ props: {
1637
+ to: { default: void 0 },
1638
+ asNewTab: { type: Boolean, default: false },
1639
+ private: { type: Boolean, default: false },
1640
+ exactPath: { type: Boolean, default: false }
1641
+ },
1642
+ setup(__props) {
1643
+ const props = __props;
1644
+ const linkComponent = computed(() => {
1645
+ const resolved = resolveComponent("NuxtLink");
1646
+ return typeof resolved === "string" ? "a" : resolved;
1647
+ });
1648
+ const linkProps = computed(() => {
1649
+ const target = props.asNewTab ? "_blank" : void 0;
1650
+ const rel = props.private && "noopener noreferrer" || props.asNewTab && "noopener" || void 0;
1651
+ if (linkComponent.value === "a") {
1652
+ return {
1653
+ href: typeof props.to === "string" ? props.to : void 0,
1654
+ target,
1655
+ rel
1656
+ };
1657
+ }
1658
+ return {
1659
+ to: props.to,
1660
+ target,
1661
+ rel,
1662
+ exactPath: props.exactPath
1663
+ };
1664
+ });
1665
+ return (_ctx, _cache) => {
1666
+ return openBlock(), createBlock(resolveDynamicComponent(linkComponent.value), mergeProps(linkProps.value, { draggable: "false" }), {
1667
+ default: withCtx(() => [
1668
+ renderSlot(_ctx.$slots, "default")
1669
+ ]),
1670
+ _: 3
1671
+ }, 16);
1672
+ };
1673
+ }
1674
+ });
1675
+ const components = [
1676
+ TaoButton,
1677
+ TaoBlock,
1678
+ TaoInput,
1679
+ TaoCard,
1680
+ TaoModal,
1681
+ TaoTabs,
1682
+ TaoTooltip,
1683
+ TaoSpoiler,
1684
+ TaoCopy,
1685
+ TaoContainer,
1686
+ _sfc_main$g,
1687
+ TaoSpace,
1688
+ TaoIcon,
1689
+ TaoLoader,
1690
+ TaoImage,
1691
+ TaoCheckbox,
1692
+ TaoTag,
1693
+ TaoDivider,
1694
+ TaoAnimatedBorder,
1695
+ TaoTextarea,
1696
+ TaoScrollTop,
1697
+ TaoProgress,
1698
+ TaoSlider,
1699
+ TaoFileDrop,
1700
+ TaoDropdownMenu,
1701
+ TaoPinCode,
1702
+ _sfc_main
1703
+ ];
1704
+ const TaoUI = {
1705
+ install(app) {
1706
+ components.forEach((component) => {
1707
+ app.component(component.name, component);
1708
+ });
1709
+ }
1710
+ };
1711
+ export {
1712
+ TaoAnimatedBorder,
1713
+ TaoBlock,
1714
+ TaoButton,
1715
+ TaoCard,
1716
+ TaoCheckbox,
1717
+ TaoContainer,
1718
+ TaoCopy,
1719
+ TaoDivider,
1720
+ TaoDropdownMenu,
1721
+ TaoFileDrop,
1722
+ _sfc_main$g as TaoFlex,
1723
+ TaoIcon,
1724
+ TaoImage,
1725
+ TaoInput,
1726
+ _sfc_main as TaoLink,
1727
+ TaoLoader,
1728
+ TaoModal,
1729
+ TaoPinCode,
1730
+ TaoProgress,
1731
+ TaoScrollTop,
1732
+ TaoSlider,
1733
+ TaoSpace,
1734
+ TaoSpoiler,
1735
+ TaoTabs,
1736
+ TaoTag,
1737
+ TaoTextarea,
1738
+ TaoTooltip,
1739
+ TaoUI,
1740
+ TaoUI as default
1741
+ };
1742
+ //# sourceMappingURL=index.mjs.map