@a-drowned-fish/rox-v 1.0.27 → 1.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -644,6 +644,263 @@ interface RoxVMenuOptionProps {
644
644
  }
645
645
  ```
646
646
 
647
+ ### Toast - 消息提示组件
648
+
649
+ 一个轻量级的消息提示组件,支持多种类型的提示消息,可自定义显示时长和样式。
650
+
651
+ #### 基础用法
652
+
653
+ ```vue
654
+ <template>
655
+ <Button @click="showToast">显示提示</Button>
656
+ <Toaster />
657
+ </template>
658
+
659
+ <script setup lang="ts">
660
+ import { useToast } from "@a-drowned-fish/rox-v";
661
+ import { Toaster } from "@a-drowned-fish/rox-v";
662
+
663
+ const { toast } = useToast();
664
+
665
+ const showToast = () => {
666
+ toast({
667
+ message: "这是一条提示消息",
668
+ type: "info",
669
+ duration: 3000,
670
+ });
671
+ };
672
+ </script>
673
+ ```
674
+
675
+ #### 不同类型的提示
676
+
677
+ ```vue
678
+ <template>
679
+ <Button @click="showSuccess">成功</Button>
680
+ <Button @click="showError">错误</Button>
681
+ <Button @click="showInfo">信息</Button>
682
+ <Button @click="showWarning">警告</Button>
683
+ <Toaster />
684
+ </template>
685
+
686
+ <script setup lang="ts">
687
+ import { useToast } from "@a-drowned-fish/rox-v";
688
+ import { Toaster } from "@a-drowned-fish/rox-v";
689
+
690
+ const { success, error, info, warning } = useToast();
691
+
692
+ const showSuccess = () => success("操作成功");
693
+ const showError = () => error("操作失败");
694
+ const showInfo = () => info("这是一条信息");
695
+ const showWarning = () => warning("这是一条警告");
696
+ </script>
697
+ ```
698
+
699
+ #### 自定义显示时长
700
+
701
+ ```vue
702
+ <template>
703
+ <Button @click="showToast">显示5秒</Button>
704
+ <Toaster />
705
+ </template>
706
+
707
+ <script setup lang="ts">
708
+ import { useToast } from "@a-drowned-fish/rox-v";
709
+ import { Toaster } from "@a-drowned-fish/rox-v";
710
+
711
+ const { success } = useToast();
712
+
713
+ const showToast = () => {
714
+ success("这条消息将显示5秒", 5000);
715
+ };
716
+ </script>
717
+ ```
718
+
719
+ #### 手动关闭提示
720
+
721
+ ```vue
722
+ <template>
723
+ <Button @click="showToast">显示提示</Button>
724
+ <Button @click="dismissAll">关闭所有</Button>
725
+ <Toaster />
726
+ </template>
727
+
728
+ <script setup lang="ts">
729
+ import { useToast } from "@a-drowned-fish/rox-v";
730
+ import { Toaster } from "@a-drowned-fish/rox-v";
731
+
732
+ const { toast, dismiss } = useToast();
733
+ let toastId: string;
734
+
735
+ const showToast = () => {
736
+ toastId = toast({
737
+ message: "这条消息需要手动关闭",
738
+ type: "info",
739
+ duration: 10000, // 设置较长的显示时间
740
+ });
741
+ };
742
+
743
+ const dismissAll = () => {
744
+ dismiss(); // 关闭所有提示
745
+ // 或 dismiss(toastId) 关闭指定提示
746
+ };
747
+ </script>
748
+ ```
749
+
750
+ #### 自定义图标
751
+
752
+ ```vue
753
+ <template>
754
+ <Button @click="showToast">显示提示</Button>
755
+ <Toaster>
756
+ <template #success-icon>
757
+ <svg class="icon" viewBox="0 0 24 24">
758
+ <path
759
+ fill="#67c23a"
760
+ d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"
761
+ />
762
+ </svg>
763
+ </template>
764
+ <template #error-icon>
765
+ <svg class="icon" viewBox="0 0 24 24">
766
+ <path
767
+ fill="#f56c6c"
768
+ d="M12 2C6.47 2 2 6.47 2 12s4.47 10 10 10 10-4.47 10-10S17.53 2 12 2zm5 13.59L15.59 17 12 13.41 8.41 17 7 15.59 10.59 12 7 8.41 8.41 7 12 10.59 15.59 7 17 8.41 13.41 12 17 15.59z"
769
+ />
770
+ </svg>
771
+ </template>
772
+ <template #info-icon>
773
+ <svg class="icon" viewBox="0 0 24 24">
774
+ <path
775
+ fill="#909399"
776
+ d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-6h2v6zm0-8h-2V7h2v2z"
777
+ />
778
+ </svg>
779
+ </template>
780
+ <template #warning-icon>
781
+ <svg class="icon" viewBox="0 0 24 24">
782
+ <path fill="#e6a23c" d="M1 21h22L12 2 1 21zm12-3h-2v-2h2v2zm0-4h-2v-4h2v4z" />
783
+ </svg>
784
+ </template>
785
+ </Toaster>
786
+ </template>
787
+
788
+ <script setup lang="ts">
789
+ import { useToast } from "@a-drowned-fish/rox-v";
790
+ import { Toaster } from "@a-drowned-fish/rox-v";
791
+
792
+ const { success, error, info, warning } = useToast();
793
+
794
+ const showToast = () => {
795
+ success("成功提示");
796
+ error("错误提示");
797
+ info("信息提示");
798
+ warning("警告提示");
799
+ };
800
+ </script>
801
+
802
+ <style scoped>
803
+ .icon {
804
+ width: 20px;
805
+ height: 20px;
806
+ margin-right: 8px;
807
+ }
808
+ </style>
809
+ ```
810
+
811
+ #### 自定义样式
812
+
813
+ ```vue
814
+ <template>
815
+ <Button @click="showToast">显示提示</Button>
816
+ <Toaster title-class="custom-title" message-class="custom-message" />
817
+ </template>
818
+
819
+ <script setup lang="ts">
820
+ import { useToast } from "@a-drowned-fish/rox-v";
821
+ import { Toaster } from "@a-drowned-fish/rox-v";
822
+
823
+ const { success } = useToast();
824
+
825
+ const showToast = () => {
826
+ success("自定义样式的提示消息");
827
+ };
828
+ </script>
829
+
830
+ <style scoped>
831
+ :deep(.custom-title) {
832
+ justify-content: flex-start;
833
+ padding: 12px 16px;
834
+ }
835
+
836
+ :deep(.custom-message) {
837
+ font-size: 14px;
838
+ line-height: 1.5;
839
+ }
840
+ </style>
841
+ ```
842
+
843
+ #### 自定义挂载节点
844
+
845
+ ```vue
846
+ <template>
847
+ <div id="toast-container">
848
+ <Button @click="showToast">显示提示</Button>
849
+ <Toaster to="#toast-container" />
850
+ </div>
851
+ </template>
852
+
853
+ <script setup lang="ts">
854
+ import { useToast } from "@a-drowned-fish/rox-v";
855
+ import { Toaster } from "@a-drowned-fish/rox-v";
856
+
857
+ const { success } = useToast();
858
+
859
+ const showToast = () => {
860
+ success("提示消息将显示在指定容器中");
861
+ };
862
+ </script>
863
+ ```
864
+
865
+ #### Toaster Props
866
+
867
+ | 属性 | 说明 | 类型 | 默认值 |
868
+ | ------------ | -------------------- | -------- | -------- |
869
+ | to | teleport 的目标节点 | `string` | `'body'` |
870
+ | titleClass | 标题容器的自定义类名 | `string` | `''` |
871
+ | messageClass | 消息内容的自定义类名 | `string` | `''` |
872
+ | toastClass | 提示容器的自定义类名 | `string` | `''` |
873
+
874
+ #### useToast 方法
875
+
876
+ | 方法名 | 说明 | 参数类型 | 返回值 |
877
+ | ------- | -------------------- | --------------- | -------- |
878
+ | toast | 创建一个自定义提示 | `ToastOptions` | `string` |
879
+ | success | 创建成功类型提示 | `(msg, dur?)` | `string` |
880
+ | error | 创建错误类型提示 | `(msg, dur?)` | `string` |
881
+ | info | 创建信息类型提示 | `(msg, dur?)` | `string` |
882
+ | warning | 创建警告类型提示 | `(msg, dur?)` | `string` |
883
+ | dismiss | 关闭提示(可指定ID) | `(id?: string)` | `void` |
884
+
885
+ #### ToastOptions 类型定义
886
+
887
+ ```ts
888
+ interface ToastOptions {
889
+ message?: string; // 提示消息内容
890
+ duration?: number; // 显示时长(毫秒),默认 3000
891
+ type?: ToastType; // 提示类型:'success' | 'error' | 'info' | 'warning'
892
+ }
893
+ ```
894
+
895
+ #### Toaster Slots
896
+
897
+ | 插槽名 | 说明 |
898
+ | ------------ | -------------------- |
899
+ | success-icon | 成功提示的自定义图标 |
900
+ | error-icon | 错误提示的自定义图标 |
901
+ | info-icon | 信息提示的自定义图标 |
902
+ | warning-icon | 警告提示的自定义图标 |
903
+
647
904
  ## License
648
905
 
649
906
  MIT
@@ -6,15 +6,19 @@ import i from "./collapse/index.js";
6
6
  import a from "./input/index.js";
7
7
  import o from "./menu/index.js";
8
8
  import s from "./tab/index.js";
9
+ import { useToast as c } from "./toast/toast.js";
10
+ import l from "./toast/index.js";
9
11
  //#region components/components.ts
10
- var c = /* @__PURE__ */ e({
12
+ var u = /* @__PURE__ */ e({
11
13
  Button: () => r,
12
14
  Collapse: () => i,
13
15
  Input: () => a,
14
16
  InputOtp: () => t,
15
17
  Menu: () => o,
16
18
  Popup: () => n,
17
- Tab: () => s
19
+ Tab: () => s,
20
+ Toaster: () => l,
21
+ useToast: () => c
18
22
  });
19
23
  //#endregion
20
- export { c as components_exports };
24
+ export { u as components_exports };
package/dist/es/index.js CHANGED
@@ -5,12 +5,14 @@ import r from "./collapse/index.js";
5
5
  import i from "./input/index.js";
6
6
  import a from "./menu/index.js";
7
7
  import o from "./tab/index.js";
8
- import { components_exports as s } from "./components.js";
8
+ import { useToast as s } from "./toast/toast.js";
9
+ import c from "./toast/index.js";
10
+ import { components_exports as l } from "./components.js";
9
11
  /* empty css */
10
12
  //#region components/index.ts
11
- var c = (e) => (Object.keys(s).forEach((t) => {
12
- let n = s[t];
13
+ var u = (e) => (Object.keys(l).forEach((t) => {
14
+ let n = l[t];
13
15
  n.install && e.use(n);
14
- }), e), l = { install: c };
16
+ }), e), d = { install: u };
15
17
  //#endregion
16
- export { n as Button, r as Collapse, i as Input, e as InputOtp, a as Menu, t as Popup, o as Tab, l as default, c as install };
18
+ export { n as Button, r as Collapse, i as Input, e as InputOtp, a as Menu, t as Popup, o as Tab, c as Toaster, d as default, u as install, s as useToast };
@@ -0,0 +1,10 @@
1
+ import "./toast.js";
2
+ import e from "./toaster.js";
3
+ import "./style.css";
4
+ //#region components/toast/index.ts
5
+ e.install = function(t) {
6
+ return e.name && t.component(e.name, e), t;
7
+ };
8
+ var t = e;
9
+ //#endregion
10
+ export { t as default };
@@ -0,0 +1 @@
1
+ .toaster-box[data-v-f97905ec]{z-index:9999;flex-direction:column;gap:12px;display:flex;position:fixed;top:20px;left:50%;transform:translate(-50%)}[data-v-f97905ec] .toast-item{box-sizing:border-box;background-color:#0009;min-width:220px;padding:10px}[data-v-f97905ec] .title-box{justify-content:center;align-items:center;gap:10px;display:flex}[data-v-f97905ec] .message{color:#fff}
File without changes
@@ -0,0 +1,5 @@
1
+ import e from "./toast-item.vue_vue_type_script_setup_true_lang.js";
2
+ //#region components/toast/toast-item.vue
3
+ var t = e;
4
+ //#endregion
5
+ export { t as default };
@@ -0,0 +1,26 @@
1
+ import { createCommentVNode as e, createElementBlock as t, createElementVNode as n, defineComponent as r, normalizeClass as i, openBlock as a, renderSlot as o, toDisplayString as s } from "vue";
2
+ //#region components/toast/toast-item.vue?vue&type=script&setup=true&lang.ts
3
+ var c = { class: "toast-item" }, l = /* @__PURE__ */ r({
4
+ name: "ToastItem",
5
+ __name: "toast-item",
6
+ props: {
7
+ toast: {},
8
+ toasterClass: {},
9
+ titleClass: {},
10
+ messageClass: {}
11
+ },
12
+ setup(r) {
13
+ return (l, u) => (a(), t("div", c, [r.toast.message ? (a(), t("div", {
14
+ key: 0,
15
+ class: i(["title-box", r.titleClass])
16
+ }, [
17
+ l.$slots["success-icon"] && r.toast.type === "success" ? o(l.$slots, "success-icon", { key: 0 }) : e("", !0),
18
+ l.$slots["error-icon"] && r.toast.type === "error" ? o(l.$slots, "error-icon", { key: 1 }) : e("", !0),
19
+ l.$slots["info-icon"] && r.toast.type === "info" ? o(l.$slots, "info-icon", { key: 2 }) : e("", !0),
20
+ l.$slots["warning-icon"] && r.toast.type === "warning" ? o(l.$slots, "warning-icon", { key: 3 }) : e("", !0),
21
+ n("span", { class: i(["message", r.messageClass]) }, s(r.toast.message), 3)
22
+ ], 2)) : e("", !0)]));
23
+ }
24
+ });
25
+ //#endregion
26
+ export { l as default };
@@ -0,0 +1,58 @@
1
+ import { reactive as e, readonly as t } from "vue";
2
+ //#region components/toast/toast.ts
3
+ var n = e({ toasts: [] }), r = 3e3;
4
+ function i() {
5
+ return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, function(e) {
6
+ var t = Math.random() * 16 | 0;
7
+ return (e == "x" ? t : t & 3 | 8).toString(16);
8
+ });
9
+ }
10
+ function a(e) {
11
+ if (e === void 0) n.toasts = [];
12
+ else {
13
+ let t = n.toasts.findIndex((t) => t.id === e);
14
+ t !== -1 && n.toasts.splice(t, 1);
15
+ }
16
+ }
17
+ function o(e) {
18
+ let t = {
19
+ id: i(),
20
+ message: e?.message || "",
21
+ duration: e?.duration || r,
22
+ type: e?.type || "info"
23
+ };
24
+ return setTimeout(() => {
25
+ n.toasts.push(t);
26
+ }, 0), setTimeout(() => {
27
+ a(t.id);
28
+ }, t.duration), t.id;
29
+ }
30
+ function s() {
31
+ return {
32
+ toast: o,
33
+ success: (e, t = r) => o({
34
+ message: e,
35
+ duration: t,
36
+ type: "success"
37
+ }),
38
+ error: (e, t = r) => o({
39
+ message: e,
40
+ duration: t,
41
+ type: "error"
42
+ }),
43
+ info: (e, t = r) => o({
44
+ message: e,
45
+ duration: t,
46
+ type: "info"
47
+ }),
48
+ warning: (e, t = r) => o({
49
+ message: e,
50
+ duration: t,
51
+ type: "warning"
52
+ }),
53
+ dismiss: a
54
+ };
55
+ }
56
+ var c = t(n);
57
+ //#endregion
58
+ export { c as toastStore, s as useToast };
@@ -0,0 +1,7 @@
1
+ import e from "../_virtual/_plugin-vue_export-helper.js";
2
+ import t from "./toaster.vue_vue_type_script_setup_true_lang.js";
3
+ /* empty css */
4
+ //#region components/toast/toaster.vue
5
+ var n = /* @__PURE__ */ e(t, [["__scopeId", "data-v-f97905ec"]]);
6
+ //#endregion
7
+ export { n as default };
@@ -0,0 +1,38 @@
1
+ import { toastStore as e } from "./toast.js";
2
+ import t from "./toast-item.js";
3
+ import { Fragment as n, Teleport as r, TransitionGroup as i, createBlock as a, createElementBlock as o, createElementVNode as s, createVNode as c, defineComponent as l, normalizeClass as u, openBlock as d, renderList as f, renderSlot as p, unref as m, withCtx as h } from "vue";
4
+ //#region components/toast/toaster.vue?vue&type=script&setup=true&lang.ts
5
+ var g = /* @__PURE__ */ l({
6
+ name: "Toaster",
7
+ __name: "toaster",
8
+ props: {
9
+ to: { default: "body" },
10
+ toasterClass: { default: "" },
11
+ titleClass: { default: "" },
12
+ messageClass: { default: "" }
13
+ },
14
+ setup(l) {
15
+ let g = l;
16
+ return (_, v) => (d(), a(r, { to: l.to }, [s("div", { class: u(["toaster-box", g.toasterClass]) }, [c(i, { name: "toast-fade" }, {
17
+ default: h(() => [(d(!0), o(n, null, f(m(e).toasts, (e) => (d(), a(t, {
18
+ key: e.id,
19
+ toast: e,
20
+ "title-class": g.titleClass,
21
+ "message-class": g.messageClass
22
+ }, {
23
+ "success-icon": h(() => [p(_.$slots, "success-icon", {}, void 0, !0)]),
24
+ "error-icon": h(() => [p(_.$slots, "error-icon", {}, void 0, !0)]),
25
+ "info-icon": h(() => [p(_.$slots, "info-icon", {}, void 0, !0)]),
26
+ "warning-icon": h(() => [p(_.$slots, "warning-icon", {}, void 0, !0)]),
27
+ _: 3
28
+ }, 8, [
29
+ "toast",
30
+ "title-class",
31
+ "message-class"
32
+ ]))), 128))]),
33
+ _: 3
34
+ })], 2)], 8, ["to"]));
35
+ }
36
+ });
37
+ //#endregion
38
+ export { g as default };
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`)):typeof define==`function`&&define.amd?define([`exports`,`vue`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`rox-v`]={},e.Vue))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=Object.defineProperty,r=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},i=[`inputmode`,`maxlength`],a=(0,t.defineComponent)({name:`InputOtp`,__name:`input-otp`,props:{modelValue:{default:``},length:{default:6},itemClass:{default:``},activeItemClass:{default:``},gap:{default:`10px`},hasFilledItemClass:{default:`active`},type:{default:`number`}},emits:[`update:modelValue`,`complete`,`enter`],setup(e,{emit:n}){let r=[`ArrowLeft`,`ArrowRight`,`Home`,`End`],a=e,o=n,s=(0,t.ref)(null),c=(0,t.ref)(a.modelValue);(0,t.watch)(()=>a.modelValue,e=>{e!==c.value&&(c.value=e)});function l(e){let t=e.target.value;t=a.type===`text`?t.replace(/[^\dA-Za-z]/g,``):t.replace(/\D/g,``),t=t.slice(0,a.length),c.value=t,o(`update:modelValue`,t),t.length===a.length&&o(`complete`,t)}function u(){(0,t.nextTick)(()=>{if(s.value){let e=c.value.length;s.value.setSelectionRange?.(e,e)}})}function d(e){let t=c.value,n=e.key;if(n===`Backspace`||n===`Delete`){if(e.preventDefault(),t.length>0){let e=t.slice(0,-1);c.value=e,o(`update:modelValue`,e),u()}}else r.includes(n)&&e.preventDefault()}function f(){a.modelValue.length>=a.length&&o(`enter`)}function p(){s.value?.focus()}function m(e){return e===c.value.length}function h(e){return e<c.value.length}return(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`otp-wrapper`,onClick:p},[(0,t.withDirectives)((0,t.createElementVNode)(`input`,{inputmode:a.type===`text`?`text`:`numeric`,autocomplete:`one-time-code`,ref_key:`inputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>c.value=e,maxlength:e.length,onInput:l,onKeydown:d,onKeyup:(0,t.withKeys)(f,[`enter`]),onFocus:u,style:{position:`absolute`,opacity:`0`,"pointer-events":`none`,width:`1px`,height:`1px`}},null,40,i),[[t.vModelText,c.value]]),(0,t.createElementVNode)(`div`,{class:`otp-box`,style:(0,t.normalizeStyle)({gap:a.gap})},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.length,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:(0,t.normalizeClass)([`otp-item`,[{[a.activeItemClass]:m(n)},{[a.hasFilledItemClass]:h(n)},a.itemClass]])},(0,t.toDisplayString)(c.value[n]||``),3))),128))],4)]))}}),o=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},s=o(a,[[`__scopeId`,`data-v-e8da3c38`]]);s.install=e=>(s.name&&e.component(s.name,s),e);var c=s,l=o((0,t.defineComponent)({name:`Popup`,__name:`popup`,props:(0,t.mergeModels)({to:{default:`body`},bg:{default:`rgba(0, 0, 0, .5)`},duration:{default:300},position:{default:`bottom`},maskClosable:{type:Boolean,default:!0},top:{default:`0px`},left:{default:`0px`},right:{default:`0px`},bottom:{default:`0px`},zIndex:{default:50}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=[`bottom`,`left`,`right`,`top`,`center`],r=(0,t.useModel)(e,`modelValue`),i=e;function a(){i.maskClosable&&(r.value=!1)}return(e,o)=>((0,t.openBlock)(),(0,t.createBlock)(t.Teleport,{to:i.to},[(0,t.createVNode)(t.Transition,{name:`fade`},{default:(0,t.withCtx)(()=>[r.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,style:(0,t.normalizeStyle)({"--duration":`${i.duration}ms`,backgroundColor:i.bg,top:i.top,left:i.left,right:i.right,bottom:i.bottom,zIndex:i.zIndex}),class:(0,t.normalizeClass)([`popup-container`,[`popup-container-${i.position}`,{"popup-container-bottom":!n.includes(i.position)}]]),onClick:a},[(0,t.createElementVNode)(`div`,{class:`popup-content`,onClick:o[0]||=(0,t.withModifiers)(()=>{},[`stop`])},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)])],6)):(0,t.createCommentVNode)(``,!0)]),_:3})],8,[`to`]))}}),[[`__scopeId`,`data-v-f6d3cf05`]]);l.install=e=>(l.name&&e.component(l.name,l),e);var u=l,d=[`type`],f=o((0,t.defineComponent)({name:`Button`,__name:`button`,props:{padding:{default:`8px 16px`},block:{type:Boolean,default:!1},bg:{default:`transparent`},border:{default:`1px solid #1A171B`},radius:{default:`0`},disabled:{type:Boolean,default:!1},type:{default:`button`},disabledBg:{default:`rgba(26,23,27,0.16)`},enableDisabledClick:{type:Boolean,default:!1}},emits:[`click`],setup(e,{emit:n}){let r=n,i=e,a=e=>{(!i.disabled||i.enableDisabledClick)&&r(`click`,e)};return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`button`,{onClick:a,class:(0,t.normalizeClass)([`button-container`,{block:i.block,disabled:i.disabled}]),type:i.type,style:(0,t.normalizeStyle)({padding:i.padding,border:i.border,borderRadius:i.radius,"--bg":i.bg,"--disabled-bg":i.disabledBg})},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],14,d))}}),[[`__scopeId`,`data-v-f38282d0`]]);f.install=e=>(f.name&&e.component(f.name,f),e);var p=f,m=o((0,t.defineComponent)({name:`Collapse`,__name:`collapse`,props:{open:{type:Boolean,default:!1},maxHeight:{default:`100dvh`},duration:{default:300}},setup(e){let n=e;return(e,r)=>((0,t.openBlock)(),(0,t.createBlock)(t.Transition,{name:`collapse`},{default:(0,t.withCtx)(()=>[n.open?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:`collapse-content`,style:(0,t.normalizeStyle)({"--max-height":n.maxHeight,"--duration":n.duration+`ms`})},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],4)):(0,t.createCommentVNode)(``,!0)]),_:3}))}}),[[`__scopeId`,`data-v-cc071022`]]);m.install=e=>(m.name&&e.component(m.name,m),e);var h=m,g={class:`input-box`},_=[`type`,`placeholder`],v=[`src`],y=o((0,t.defineComponent)({name:`Input`,__name:`input`,props:(0,t.mergeModels)({placeholder:{default:``},type:{default:`text`},iconVisible:{type:Boolean,default:!1},icon:{default:``}},{modelValue:{type:String,default:``},modelModifiers:{}}),emits:(0,t.mergeModels)([`click`,`enter`],[`update:modelValue`]),setup(e,{emit:n}){let r=n,i=(0,t.useTemplateRef)(`input`),a=(0,t.useModel)(e,`modelValue`),o=e,s=()=>{r(`click`),i.value?.focus?.(),setTimeout(()=>{let e=a.value.length;i.value?.setSelectionRange?.(e,e)},0)};return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,g,[(0,t.withDirectives)((0,t.createElementVNode)(`input`,{type:o.type,"onUpdate:modelValue":n[0]||=e=>a.value=e,ref:`input`,placeholder:o.placeholder,onKeyup:n[1]||=(0,t.withKeys)(t=>e.$emit(`enter`),[`enter`])},null,40,_),[[t.vModelDynamic,a.value]]),o.icon?(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:0,src:o.icon,alt:`icon`,onClick:s},null,8,v)),[[t.vShow,o.iconVisible]]):(0,t.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-56cf72b9`]]);y.install=e=>(y.name&&e.component(y.name,y),e);var b=y,x={class:`menu-label`},S=[`src`],C=[`src`],w=(0,t.defineComponent)({name:`MenuItem`,__name:`menu-item`,props:(0,t.mergeModels)({checkedIcon:{},checkedIconClass:{},suffixIcon:{},suffixIconClass:{},itemContainerClass:{},itemGap:{},activeItemClass:{},subMenuContainerClass:{},deep:{},item:{},parentValue:{}},{modelValue:{type:Array,default:()=>[]},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=(0,t.useModel)(e,`modelValue`),r=e,i=(0,t.ref)(!1),a=()=>i.value=!0,o=()=>i.value=!1,s=()=>{r.item.children?.length||(n.value=[...r.parentValue,r.item.value])};return(c,l)=>{let u=(0,t.resolveComponent)(`MenuItem`,!0);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,{onMouseenter:a,onMouseleave:o,style:{padding:`0 8px`}},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`menu-item-inner`,[r.itemContainerClass,{active:n.value?.[r.deep]===e.item.value},{[r.activeItemClass]:n.value?.[r.deep]===e.item.value}]]),onClick:s},[(0,t.createElementVNode)(`div`,x,(0,t.toDisplayString)(e.item.label),1),e.suffixIcon&&e.item.children?.length?((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:0,src:r.suffixIcon,class:(0,t.normalizeClass)([`suffix-icon`,r.suffixIconClass]),alt:`suffix-icon`},null,10,S)):(0,t.createCommentVNode)(``,!0),e.checkedIcon&&!e.item.children?.length&&n.value?.[r.deep]===e.item.value?((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:1,src:r.checkedIcon,class:(0,t.normalizeClass)([`checked-icon`,r.checkedIconClass]),alt:`checked-icon`},null,10,C)):(0,t.createCommentVNode)(``,!0)],2),e.item.children?.length?((0,t.openBlock)(),(0,t.createBlock)(t.Transition,{key:0,name:`fade`},{default:(0,t.withCtx)(()=>[i.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:(0,t.normalizeClass)([`sub-menu-box list-box`,e.subMenuContainerClass])},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.item.children,(i,a)=>((0,t.openBlock)(),(0,t.createBlock)(u,{key:a,modelValue:n.value,"onUpdate:modelValue":l[0]||=e=>n.value=e,item:i,"suffix-icon":e.suffixIcon,"suffix-icon-class":e.suffixIconClass,"checked-icon":e.checkedIcon,"checked-icon-class":e.checkedIconClass,"item-container-class":e.itemContainerClass,"item-gap":e.itemGap,deep:r.deep+1,"active-item-class":r.activeItemClass,"parent-value":r.parentValue.concat(e.item.value)},null,8,[`modelValue`,`item`,`suffix-icon`,`suffix-icon-class`,`checked-icon`,`checked-icon-class`,`item-container-class`,`item-gap`,`deep`,`active-item-class`,`parent-value`]))),128))],2)):(0,t.createCommentVNode)(``,!0)]),_:1})):(0,t.createCommentVNode)(``,!0)],32)}}}),T={key:0,class:`menu-list-box`},E=o((0,t.defineComponent)({name:`Menu`,__name:`menu`,props:(0,t.mergeModels)({duration:{default:100},items:{default:()=>[]},suffixIcon:{},suffixIconClass:{},checkedIcon:{},checkedIconClass:{},listContainerClass:{default:``},subMenuContainerClass:{default:``},defaultContainerClass:{default:``},itemContainerClass:{},itemGap:{default:`4px`},activeItemClass:{default:``}},{modelValue:{type:Array,default:()=>[]},modelModifiers:{}}),emits:(0,t.mergeModels)([`open`,`close`],[`update:modelValue`]),setup(e,{emit:n}){let r=n,i=(0,t.useModel)(e,`modelValue`),a=e,o=(0,t.ref)(!1),s=()=>o.value=!0,c=()=>o.value=!1;return(0,t.watch)(i,()=>{o.value=!1}),(0,t.watch)(o,e=>{r(e?`open`:`close`)}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`menu-box`,style:(0,t.normalizeStyle)({"--duration":a.duration+`ms`})},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`default-box`,a.defaultContainerClass]),onMouseenter:s,onMouseleave:c},[(0,t.renderSlot)(n.$slots,`default`,{},void 0,!0),(0,t.createVNode)(t.Transition,{name:`fade`},{default:(0,t.withCtx)(()=>[o.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`menu-item-box`,a.listContainerClass]),style:(0,t.normalizeStyle)({"--gap":a.itemGap})},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,o)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:o,class:`menu-item`},[(0,t.createVNode)(w,{modelValue:i.value,"onUpdate:modelValue":r[0]||=e=>i.value=e,item:n,"suffix-icon":e.suffixIcon,"suffix-icon-class":e.suffixIconClass,"checked-icon":e.checkedIcon,"checked-icon-class":e.checkedIconClass,"item-container-class":e.itemContainerClass,"item-gap":a.itemGap,deep:0,"active-item-class":a.activeItemClass,"sub-menu-container-class":a.subMenuContainerClass,"parent-value":[]},null,8,[`modelValue`,`item`,`suffix-icon`,`suffix-icon-class`,`checked-icon`,`checked-icon-class`,`item-container-class`,`item-gap`,`active-item-class`,`sub-menu-container-class`])]))),128))],6)])):(0,t.createCommentVNode)(``,!0)]),_:1})],34)],4))}}),[[`__scopeId`,`data-v-b7084c6e`]]);E.install=e=>(E.name&&e.component(E.name,E),e);var D=E,O={class:`tab-list-container-inner`},k=[`onClick`],A=o((0,t.defineComponent)({name:`Tab`,__name:`tab`,props:(0,t.mergeModels)({items:{default:()=>[]},gap:{default:`10px`},tabContainerClass:{default:``},tabItemClass:{default:``},panelContainerClass:{default:``},panelItemClass:{default:``},activeLineClass:{default:``}},{modelValue:{type:Number,default:0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=(0,t.useTemplateRef)(`item`),r=(0,t.ref)(!0),i=(0,t.useModel)(e,`modelValue`),a=e,o=(0,t.reactive)({left:0,width:0}),s=()=>{if(!n.value)return;let e=n.value[i.value];if(!e)return;let{offsetWidth:t,offsetLeft:r}=e;o.left=r||0,o.width=t||0};return(0,t.watch)(i,()=>{r.value&&=!1,s()}),(0,t.onMounted)(async()=>{s()}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`tab-box-container`,style:(0,t.normalizeStyle)({"--gap":a.gap})},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`tab-list-container`,a.tabContainerClass])},[(0,t.createElementVNode)(`div`,O,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:r,class:(0,t.normalizeClass)([`tab-item-box`,a.tabItemClass]),onClick:e=>i.value=r,ref_for:!0,ref:`item`},[(0,t.renderSlot)(e.$slots,`default`,{item:n,index:r,active:i.value===r},void 0,!0)],10,k))),128)),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`active-tab-item-box`,[{initial:r.value},a.activeLineClass]]),style:(0,t.normalizeStyle)({left:o.left+`px`,width:o.width+`px`})},null,6)])],2),(0,t.renderSlot)(e.$slots,`middle`,{},void 0,!0),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`panel-list-container`,a.panelContainerClass])},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,r)=>(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:r,class:(0,t.normalizeClass)([`panel-item-box`,a.panelItemClass])},[(0,t.renderSlot)(e.$slots,`panel`,{item:n,index:r,active:i.value===r},void 0,!0)],2)),[[t.vShow,i.value===r]])),128))],2)],4))}}),[[`__scopeId`,`data-v-fd2c8809`]]);A.install=e=>(A.name&&e.component(A.name,A),e);var j=r({Button:()=>p,Collapse:()=>h,Input:()=>b,InputOtp:()=>c,Menu:()=>D,Popup:()=>u,Tab:()=>A}),M=e=>(Object.keys(j).forEach(t=>{let n=j[t];n.install&&e.use(n)}),e),N={install:M};e.Button=p,e.Collapse=h,e.Input=b,e.InputOtp=c,e.Menu=D,e.Popup=u,e.Tab=A,e.default=N,e.install=M});
1
+ (function(e,t){typeof exports==`object`&&typeof module<`u`?t(exports,require(`vue`)):typeof define==`function`&&define.amd?define([`exports`,`vue`],t):(e=typeof globalThis<`u`?globalThis:e||self,t(e[`rox-v`]={},e.Vue))})(this,function(e,t){Object.defineProperties(e,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});var n=Object.defineProperty,r=(e,t)=>{let r={};for(var i in e)n(r,i,{get:e[i],enumerable:!0});return t||n(r,Symbol.toStringTag,{value:`Module`}),r},i=[`inputmode`,`maxlength`],a=(0,t.defineComponent)({name:`InputOtp`,__name:`input-otp`,props:{modelValue:{default:``},length:{default:6},itemClass:{default:``},activeItemClass:{default:``},gap:{default:`10px`},hasFilledItemClass:{default:`active`},type:{default:`number`}},emits:[`update:modelValue`,`complete`,`enter`],setup(e,{emit:n}){let r=[`ArrowLeft`,`ArrowRight`,`Home`,`End`],a=e,o=n,s=(0,t.ref)(null),c=(0,t.ref)(a.modelValue);(0,t.watch)(()=>a.modelValue,e=>{e!==c.value&&(c.value=e)});function l(e){let t=e.target.value;t=a.type===`text`?t.replace(/[^\dA-Za-z]/g,``):t.replace(/\D/g,``),t=t.slice(0,a.length),c.value=t,o(`update:modelValue`,t),t.length===a.length&&o(`complete`,t)}function u(){(0,t.nextTick)(()=>{if(s.value){let e=c.value.length;s.value.setSelectionRange?.(e,e)}})}function d(e){let t=c.value,n=e.key;if(n===`Backspace`||n===`Delete`){if(e.preventDefault(),t.length>0){let e=t.slice(0,-1);c.value=e,o(`update:modelValue`,e),u()}}else r.includes(n)&&e.preventDefault()}function f(){a.modelValue.length>=a.length&&o(`enter`)}function p(){s.value?.focus()}function m(e){return e===c.value.length}function h(e){return e<c.value.length}return(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`otp-wrapper`,onClick:p},[(0,t.withDirectives)((0,t.createElementVNode)(`input`,{inputmode:a.type===`text`?`text`:`numeric`,autocomplete:`one-time-code`,ref_key:`inputRef`,ref:s,"onUpdate:modelValue":r[0]||=e=>c.value=e,maxlength:e.length,onInput:l,onKeydown:d,onKeyup:(0,t.withKeys)(f,[`enter`]),onFocus:u,style:{position:`absolute`,opacity:`0`,"pointer-events":`none`,width:`1px`,height:`1px`}},null,40,i),[[t.vModelText,c.value]]),(0,t.createElementVNode)(`div`,{class:`otp-box`,style:(0,t.normalizeStyle)({gap:a.gap})},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.length,(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:n,class:(0,t.normalizeClass)([`otp-item`,[{[a.activeItemClass]:m(n)},{[a.hasFilledItemClass]:h(n)},a.itemClass]])},(0,t.toDisplayString)(c.value[n]||``),3))),128))],4)]))}}),o=(e,t)=>{let n=e.__vccOpts||e;for(let[e,r]of t)n[e]=r;return n},s=o(a,[[`__scopeId`,`data-v-e8da3c38`]]);s.install=e=>(s.name&&e.component(s.name,s),e);var c=s,l=o((0,t.defineComponent)({name:`Popup`,__name:`popup`,props:(0,t.mergeModels)({to:{default:`body`},bg:{default:`rgba(0, 0, 0, .5)`},duration:{default:300},position:{default:`bottom`},maskClosable:{type:Boolean,default:!0},top:{default:`0px`},left:{default:`0px`},right:{default:`0px`},bottom:{default:`0px`},zIndex:{default:50}},{modelValue:{type:Boolean,default:!1},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=[`bottom`,`left`,`right`,`top`,`center`],r=(0,t.useModel)(e,`modelValue`),i=e;function a(){i.maskClosable&&(r.value=!1)}return(e,o)=>((0,t.openBlock)(),(0,t.createBlock)(t.Teleport,{to:i.to},[(0,t.createVNode)(t.Transition,{name:`fade`},{default:(0,t.withCtx)(()=>[r.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,style:(0,t.normalizeStyle)({"--duration":`${i.duration}ms`,backgroundColor:i.bg,top:i.top,left:i.left,right:i.right,bottom:i.bottom,zIndex:i.zIndex}),class:(0,t.normalizeClass)([`popup-container`,[`popup-container-${i.position}`,{"popup-container-bottom":!n.includes(i.position)}]]),onClick:a},[(0,t.createElementVNode)(`div`,{class:`popup-content`,onClick:o[0]||=(0,t.withModifiers)(()=>{},[`stop`])},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)])],6)):(0,t.createCommentVNode)(``,!0)]),_:3})],8,[`to`]))}}),[[`__scopeId`,`data-v-f6d3cf05`]]);l.install=e=>(l.name&&e.component(l.name,l),e);var u=l,d=[`type`],f=o((0,t.defineComponent)({name:`Button`,__name:`button`,props:{padding:{default:`8px 16px`},block:{type:Boolean,default:!1},bg:{default:`transparent`},border:{default:`1px solid #1A171B`},radius:{default:`0`},disabled:{type:Boolean,default:!1},type:{default:`button`},disabledBg:{default:`rgba(26,23,27,0.16)`},enableDisabledClick:{type:Boolean,default:!1}},emits:[`click`],setup(e,{emit:n}){let r=n,i=e,a=e=>{(!i.disabled||i.enableDisabledClick)&&r(`click`,e)};return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`button`,{onClick:a,class:(0,t.normalizeClass)([`button-container`,{block:i.block,disabled:i.disabled}]),type:i.type,style:(0,t.normalizeStyle)({padding:i.padding,border:i.border,borderRadius:i.radius,"--bg":i.bg,"--disabled-bg":i.disabledBg})},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],14,d))}}),[[`__scopeId`,`data-v-f38282d0`]]);f.install=e=>(f.name&&e.component(f.name,f),e);var p=f,m=o((0,t.defineComponent)({name:`Collapse`,__name:`collapse`,props:{open:{type:Boolean,default:!1},maxHeight:{default:`100dvh`},duration:{default:300}},setup(e){let n=e;return(e,r)=>((0,t.openBlock)(),(0,t.createBlock)(t.Transition,{name:`collapse`},{default:(0,t.withCtx)(()=>[n.open?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:`collapse-content`,style:(0,t.normalizeStyle)({"--max-height":n.maxHeight,"--duration":n.duration+`ms`})},[(0,t.renderSlot)(e.$slots,`default`,{},void 0,!0)],4)):(0,t.createCommentVNode)(``,!0)]),_:3}))}}),[[`__scopeId`,`data-v-cc071022`]]);m.install=e=>(m.name&&e.component(m.name,m),e);var h=m,g={class:`input-box`},_=[`type`,`placeholder`],v=[`src`],y=o((0,t.defineComponent)({name:`Input`,__name:`input`,props:(0,t.mergeModels)({placeholder:{default:``},type:{default:`text`},iconVisible:{type:Boolean,default:!1},icon:{default:``}},{modelValue:{type:String,default:``},modelModifiers:{}}),emits:(0,t.mergeModels)([`click`,`enter`],[`update:modelValue`]),setup(e,{emit:n}){let r=n,i=(0,t.useTemplateRef)(`input`),a=(0,t.useModel)(e,`modelValue`),o=e,s=()=>{r(`click`),i.value?.focus?.(),setTimeout(()=>{let e=a.value.length;i.value?.setSelectionRange?.(e,e)},0)};return(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,g,[(0,t.withDirectives)((0,t.createElementVNode)(`input`,{type:o.type,"onUpdate:modelValue":n[0]||=e=>a.value=e,ref:`input`,placeholder:o.placeholder,onKeyup:n[1]||=(0,t.withKeys)(t=>e.$emit(`enter`),[`enter`])},null,40,_),[[t.vModelDynamic,a.value]]),o.icon?(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:0,src:o.icon,alt:`icon`,onClick:s},null,8,v)),[[t.vShow,o.iconVisible]]):(0,t.createCommentVNode)(``,!0)]))}}),[[`__scopeId`,`data-v-56cf72b9`]]);y.install=e=>(y.name&&e.component(y.name,y),e);var b=y,x={class:`menu-label`},S=[`src`],C=[`src`],w=(0,t.defineComponent)({name:`MenuItem`,__name:`menu-item`,props:(0,t.mergeModels)({checkedIcon:{},checkedIconClass:{},suffixIcon:{},suffixIconClass:{},itemContainerClass:{},itemGap:{},activeItemClass:{},subMenuContainerClass:{},deep:{},item:{},parentValue:{}},{modelValue:{type:Array,default:()=>[]},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=(0,t.useModel)(e,`modelValue`),r=e,i=(0,t.ref)(!1),a=()=>i.value=!0,o=()=>i.value=!1,s=()=>{r.item.children?.length||(n.value=[...r.parentValue,r.item.value])};return(c,l)=>{let u=(0,t.resolveComponent)(`MenuItem`,!0);return(0,t.openBlock)(),(0,t.createElementBlock)(`div`,{onMouseenter:a,onMouseleave:o,style:{padding:`0 8px`}},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`menu-item-inner`,[r.itemContainerClass,{active:n.value?.[r.deep]===e.item.value},{[r.activeItemClass]:n.value?.[r.deep]===e.item.value}]]),onClick:s},[(0,t.createElementVNode)(`div`,x,(0,t.toDisplayString)(e.item.label),1),e.suffixIcon&&e.item.children?.length?((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:0,src:r.suffixIcon,class:(0,t.normalizeClass)([`suffix-icon`,r.suffixIconClass]),alt:`suffix-icon`},null,10,S)):(0,t.createCommentVNode)(``,!0),e.checkedIcon&&!e.item.children?.length&&n.value?.[r.deep]===e.item.value?((0,t.openBlock)(),(0,t.createElementBlock)(`img`,{key:1,src:r.checkedIcon,class:(0,t.normalizeClass)([`checked-icon`,r.checkedIconClass]),alt:`checked-icon`},null,10,C)):(0,t.createCommentVNode)(``,!0)],2),e.item.children?.length?((0,t.openBlock)(),(0,t.createBlock)(t.Transition,{key:0,name:`fade`},{default:(0,t.withCtx)(()=>[i.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:(0,t.normalizeClass)([`sub-menu-box list-box`,e.subMenuContainerClass])},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(e.item.children,(i,a)=>((0,t.openBlock)(),(0,t.createBlock)(u,{key:a,modelValue:n.value,"onUpdate:modelValue":l[0]||=e=>n.value=e,item:i,"suffix-icon":e.suffixIcon,"suffix-icon-class":e.suffixIconClass,"checked-icon":e.checkedIcon,"checked-icon-class":e.checkedIconClass,"item-container-class":e.itemContainerClass,"item-gap":e.itemGap,deep:r.deep+1,"active-item-class":r.activeItemClass,"parent-value":r.parentValue.concat(e.item.value)},null,8,[`modelValue`,`item`,`suffix-icon`,`suffix-icon-class`,`checked-icon`,`checked-icon-class`,`item-container-class`,`item-gap`,`deep`,`active-item-class`,`parent-value`]))),128))],2)):(0,t.createCommentVNode)(``,!0)]),_:1})):(0,t.createCommentVNode)(``,!0)],32)}}}),T={key:0,class:`menu-list-box`},E=o((0,t.defineComponent)({name:`Menu`,__name:`menu`,props:(0,t.mergeModels)({duration:{default:100},items:{default:()=>[]},suffixIcon:{},suffixIconClass:{},checkedIcon:{},checkedIconClass:{},listContainerClass:{default:``},subMenuContainerClass:{default:``},defaultContainerClass:{default:``},itemContainerClass:{},itemGap:{default:`4px`},activeItemClass:{default:``}},{modelValue:{type:Array,default:()=>[]},modelModifiers:{}}),emits:(0,t.mergeModels)([`open`,`close`],[`update:modelValue`]),setup(e,{emit:n}){let r=n,i=(0,t.useModel)(e,`modelValue`),a=e,o=(0,t.ref)(!1),s=()=>o.value=!0,c=()=>o.value=!1;return(0,t.watch)(i,()=>{o.value=!1}),(0,t.watch)(o,e=>{r(e?`open`:`close`)}),(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`menu-box`,style:(0,t.normalizeStyle)({"--duration":a.duration+`ms`})},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`default-box`,a.defaultContainerClass]),onMouseenter:s,onMouseleave:c},[(0,t.renderSlot)(n.$slots,`default`,{},void 0,!0),(0,t.createVNode)(t.Transition,{name:`fade`},{default:(0,t.withCtx)(()=>[o.value?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,T,[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`menu-item-box`,a.listContainerClass]),style:(0,t.normalizeStyle)({"--gap":a.itemGap})},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,o)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:o,class:`menu-item`},[(0,t.createVNode)(w,{modelValue:i.value,"onUpdate:modelValue":r[0]||=e=>i.value=e,item:n,"suffix-icon":e.suffixIcon,"suffix-icon-class":e.suffixIconClass,"checked-icon":e.checkedIcon,"checked-icon-class":e.checkedIconClass,"item-container-class":e.itemContainerClass,"item-gap":a.itemGap,deep:0,"active-item-class":a.activeItemClass,"sub-menu-container-class":a.subMenuContainerClass,"parent-value":[]},null,8,[`modelValue`,`item`,`suffix-icon`,`suffix-icon-class`,`checked-icon`,`checked-icon-class`,`item-container-class`,`item-gap`,`active-item-class`,`sub-menu-container-class`])]))),128))],6)])):(0,t.createCommentVNode)(``,!0)]),_:1})],34)],4))}}),[[`__scopeId`,`data-v-b7084c6e`]]);E.install=e=>(E.name&&e.component(E.name,E),e);var D=E,O={class:`tab-list-container-inner`},k=[`onClick`],A=o((0,t.defineComponent)({name:`Tab`,__name:`tab`,props:(0,t.mergeModels)({items:{default:()=>[]},gap:{default:`10px`},tabContainerClass:{default:``},tabItemClass:{default:``},panelContainerClass:{default:``},panelItemClass:{default:``},activeLineClass:{default:``}},{modelValue:{type:Number,default:0},modelModifiers:{}}),emits:[`update:modelValue`],setup(e){let n=(0,t.useTemplateRef)(`item`),r=(0,t.ref)(!0),i=(0,t.useModel)(e,`modelValue`),a=e,o=(0,t.reactive)({left:0,width:0}),s=()=>{if(!n.value)return;let e=n.value[i.value];if(!e)return;let{offsetWidth:t,offsetLeft:r}=e;o.left=r||0,o.width=t||0};return(0,t.watch)(i,()=>{r.value&&=!1,s()}),(0,t.onMounted)(async()=>{s()}),(e,n)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{class:`tab-box-container`,style:(0,t.normalizeStyle)({"--gap":a.gap})},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`tab-list-container`,a.tabContainerClass])},[(0,t.createElementVNode)(`div`,O,[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:r,class:(0,t.normalizeClass)([`tab-item-box`,a.tabItemClass]),onClick:e=>i.value=r,ref_for:!0,ref:`item`},[(0,t.renderSlot)(e.$slots,`default`,{item:n,index:r,active:i.value===r},void 0,!0)],10,k))),128)),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`active-tab-item-box`,[{initial:r.value},a.activeLineClass]]),style:(0,t.normalizeStyle)({left:o.left+`px`,width:o.width+`px`})},null,6)])],2),(0,t.renderSlot)(e.$slots,`middle`,{},void 0,!0),(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`panel-list-container`,a.panelContainerClass])},[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)(a.items,(n,r)=>(0,t.withDirectives)(((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:r,class:(0,t.normalizeClass)([`panel-item-box`,a.panelItemClass])},[(0,t.renderSlot)(e.$slots,`panel`,{item:n,index:r,active:i.value===r},void 0,!0)],2)),[[t.vShow,i.value===r]])),128))],2)],4))}}),[[`__scopeId`,`data-v-fd2c8809`]]);A.install=e=>(A.name&&e.component(A.name,A),e);var j=(0,t.reactive)({toasts:[]}),M=3e3;function N(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,function(e){var t=Math.random()*16|0;return(e==`x`?t:t&3|8).toString(16)})}function P(e){if(e===void 0)j.toasts=[];else{let t=j.toasts.findIndex(t=>t.id===e);t!==-1&&j.toasts.splice(t,1)}}function F(e){let t={id:N(),message:e?.message||``,duration:e?.duration||M,type:e?.type||`info`};return setTimeout(()=>{j.toasts.push(t)},0),setTimeout(()=>{P(t.id)},t.duration),t.id}function I(){return{toast:F,success:(e,t=M)=>F({message:e,duration:t,type:`success`}),error:(e,t=M)=>F({message:e,duration:t,type:`error`}),info:(e,t=M)=>F({message:e,duration:t,type:`info`}),warning:(e,t=M)=>F({message:e,duration:t,type:`warning`}),dismiss:P}}var L=(0,t.readonly)(j),R={class:`toast-item`},z=(0,t.defineComponent)({name:`ToastItem`,__name:`toast-item`,props:{toast:{},toasterClass:{},titleClass:{},messageClass:{}},setup(e){return(n,r)=>((0,t.openBlock)(),(0,t.createElementBlock)(`div`,R,[e.toast.message?((0,t.openBlock)(),(0,t.createElementBlock)(`div`,{key:0,class:(0,t.normalizeClass)([`title-box`,e.titleClass])},[n.$slots[`success-icon`]&&e.toast.type===`success`?(0,t.renderSlot)(n.$slots,`success-icon`,{key:0}):(0,t.createCommentVNode)(``,!0),n.$slots[`error-icon`]&&e.toast.type===`error`?(0,t.renderSlot)(n.$slots,`error-icon`,{key:1}):(0,t.createCommentVNode)(``,!0),n.$slots[`info-icon`]&&e.toast.type===`info`?(0,t.renderSlot)(n.$slots,`info-icon`,{key:2}):(0,t.createCommentVNode)(``,!0),n.$slots[`warning-icon`]&&e.toast.type===`warning`?(0,t.renderSlot)(n.$slots,`warning-icon`,{key:3}):(0,t.createCommentVNode)(``,!0),(0,t.createElementVNode)(`span`,{class:(0,t.normalizeClass)([`message`,e.messageClass])},(0,t.toDisplayString)(e.toast.message),3)],2)):(0,t.createCommentVNode)(``,!0)]))}}),B=o((0,t.defineComponent)({name:`Toaster`,__name:`toaster`,props:{to:{default:`body`},toasterClass:{default:``},titleClass:{default:``},messageClass:{default:``}},setup(e){let n=e;return(r,i)=>((0,t.openBlock)(),(0,t.createBlock)(t.Teleport,{to:e.to},[(0,t.createElementVNode)(`div`,{class:(0,t.normalizeClass)([`toaster-box`,n.toasterClass])},[(0,t.createVNode)(t.TransitionGroup,{name:`toast-fade`},{default:(0,t.withCtx)(()=>[((0,t.openBlock)(!0),(0,t.createElementBlock)(t.Fragment,null,(0,t.renderList)((0,t.unref)(L).toasts,e=>((0,t.openBlock)(),(0,t.createBlock)(z,{key:e.id,toast:e,"title-class":n.titleClass,"message-class":n.messageClass},{"success-icon":(0,t.withCtx)(()=>[(0,t.renderSlot)(r.$slots,`success-icon`,{},void 0,!0)]),"error-icon":(0,t.withCtx)(()=>[(0,t.renderSlot)(r.$slots,`error-icon`,{},void 0,!0)]),"info-icon":(0,t.withCtx)(()=>[(0,t.renderSlot)(r.$slots,`info-icon`,{},void 0,!0)]),"warning-icon":(0,t.withCtx)(()=>[(0,t.renderSlot)(r.$slots,`warning-icon`,{},void 0,!0)]),_:3},8,[`toast`,`title-class`,`message-class`]))),128))]),_:3})],2)],8,[`to`]))}}),[[`__scopeId`,`data-v-f97905ec`]]);B.install=function(e){return B.name&&e.component(B.name,B),e};var V=B,H=r({Button:()=>p,Collapse:()=>h,Input:()=>b,InputOtp:()=>c,Menu:()=>D,Popup:()=>u,Tab:()=>A,Toaster:()=>V,useToast:()=>I}),U=e=>(Object.keys(H).forEach(t=>{let n=H[t];n.install&&e.use(n)}),e),W={install:U};e.Button=p,e.Collapse=h,e.Input=b,e.InputOtp=c,e.Menu=D,e.Popup=u,e.Tab=A,e.Toaster=V,e.default=W,e.install=U,e.useToast=I});
@@ -1 +1 @@
1
- const e=require(`./_virtual/_rolldown/runtime.js`),t=require(`./input-otp/index.js`),n=require(`./popup/index.js`),r=require(`./button/index.js`),i=require(`./collapse/index.js`),a=require(`./input/index.js`),o=require(`./menu/index.js`),s=require(`./tab/index.js`);var c=e.__exportAll({Button:()=>r.default,Collapse:()=>i.default,Input:()=>a.default,InputOtp:()=>t.default,Menu:()=>o.default,Popup:()=>n.default,Tab:()=>s.default});Object.defineProperty(exports,`components_exports`,{enumerable:!0,get:function(){return c}});
1
+ const e=require(`./_virtual/_rolldown/runtime.js`),t=require(`./input-otp/index.js`),n=require(`./popup/index.js`),r=require(`./button/index.js`),i=require(`./collapse/index.js`),a=require(`./input/index.js`),o=require(`./menu/index.js`),s=require(`./tab/index.js`),c=require(`./toast/toast.js`),l=require(`./toast/index.js`);var u=e.__exportAll({Button:()=>r.default,Collapse:()=>i.default,Input:()=>a.default,InputOtp:()=>t.default,Menu:()=>o.default,Popup:()=>n.default,Tab:()=>s.default,Toaster:()=>l.default,useToast:()=>c.useToast});Object.defineProperty(exports,`components_exports`,{enumerable:!0,get:function(){return u}});
package/dist/lib/index.js CHANGED
@@ -1 +1 @@
1
- Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./input-otp/index.js`),t=require(`./popup/index.js`),n=require(`./button/index.js`),r=require(`./collapse/index.js`),i=require(`./input/index.js`),a=require(`./menu/index.js`),o=require(`./tab/index.js`),s=require(`./components.js`);;/* empty css */var c=e=>(Object.keys(s.components_exports).forEach(t=>{let n=s.components_exports[t];n.install&&e.use(n)}),e),l={install:c};exports.Button=n.default,exports.Collapse=r.default,exports.Input=i.default,exports.InputOtp=e.default,exports.Menu=a.default,exports.Popup=t.default,exports.Tab=o.default,exports.default=l,exports.install=c;
1
+ Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:`Module`}});const e=require(`./input-otp/index.js`),t=require(`./popup/index.js`),n=require(`./button/index.js`),r=require(`./collapse/index.js`),i=require(`./input/index.js`),a=require(`./menu/index.js`),o=require(`./tab/index.js`),s=require(`./toast/toast.js`),c=require(`./toast/index.js`),l=require(`./components.js`);;/* empty css */var u=e=>(Object.keys(l.components_exports).forEach(t=>{let n=l.components_exports[t];n.install&&e.use(n)}),e),d={install:u};exports.Button=n.default,exports.Collapse=r.default,exports.Input=i.default,exports.InputOtp=e.default,exports.Menu=a.default,exports.Popup=t.default,exports.Tab=o.default,exports.Toaster=c.default,exports.default=d,exports.install=u,exports.useToast=s.useToast;
@@ -0,0 +1 @@
1
+ require(`./toast.js`);const e=require(`./toaster.js`);require(`./style.css`),e.default.install=function(t){return e.default.name&&t.component(e.default.name,e.default),t};var t=e.default;exports.default=t;
@@ -0,0 +1 @@
1
+ .toaster-box[data-v-f97905ec]{z-index:9999;flex-direction:column;gap:12px;display:flex;position:fixed;top:20px;left:50%;transform:translate(-50%)}[data-v-f97905ec] .toast-item{box-sizing:border-box;background-color:#0009;min-width:220px;padding:10px}[data-v-f97905ec] .title-box{justify-content:center;align-items:center;gap:10px;display:flex}[data-v-f97905ec] .message{color:#fff}
File without changes
@@ -0,0 +1 @@
1
+ var e=require(`./toast-item.vue_vue_type_script_setup_true_lang.js`).default;exports.default=e;
@@ -0,0 +1 @@
1
+ let e=require(`vue`);var t={class:`toast-item`},n=(0,e.defineComponent)({name:`ToastItem`,__name:`toast-item`,props:{toast:{},toasterClass:{},titleClass:{},messageClass:{}},setup(n){return(r,i)=>((0,e.openBlock)(),(0,e.createElementBlock)(`div`,t,[n.toast.message?((0,e.openBlock)(),(0,e.createElementBlock)(`div`,{key:0,class:(0,e.normalizeClass)([`title-box`,n.titleClass])},[r.$slots[`success-icon`]&&n.toast.type===`success`?(0,e.renderSlot)(r.$slots,`success-icon`,{key:0}):(0,e.createCommentVNode)(``,!0),r.$slots[`error-icon`]&&n.toast.type===`error`?(0,e.renderSlot)(r.$slots,`error-icon`,{key:1}):(0,e.createCommentVNode)(``,!0),r.$slots[`info-icon`]&&n.toast.type===`info`?(0,e.renderSlot)(r.$slots,`info-icon`,{key:2}):(0,e.createCommentVNode)(``,!0),r.$slots[`warning-icon`]&&n.toast.type===`warning`?(0,e.renderSlot)(r.$slots,`warning-icon`,{key:3}):(0,e.createCommentVNode)(``,!0),(0,e.createElementVNode)(`span`,{class:(0,e.normalizeClass)([`message`,n.messageClass])},(0,e.toDisplayString)(n.toast.message),3)],2)):(0,e.createCommentVNode)(``,!0)]))}});exports.default=n;
@@ -0,0 +1 @@
1
+ let e=require(`vue`);var t=(0,e.reactive)({toasts:[]}),n=3e3;function r(){return`xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx`.replace(/[xy]/g,function(e){var t=Math.random()*16|0;return(e==`x`?t:t&3|8).toString(16)})}function i(e){if(e===void 0)t.toasts=[];else{let n=t.toasts.findIndex(t=>t.id===e);n!==-1&&t.toasts.splice(n,1)}}function a(e){let a={id:r(),message:e?.message||``,duration:e?.duration||n,type:e?.type||`info`};return setTimeout(()=>{t.toasts.push(a)},0),setTimeout(()=>{i(a.id)},a.duration),a.id}function o(){return{toast:a,success:(e,t=n)=>a({message:e,duration:t,type:`success`}),error:(e,t=n)=>a({message:e,duration:t,type:`error`}),info:(e,t=n)=>a({message:e,duration:t,type:`info`}),warning:(e,t=n)=>a({message:e,duration:t,type:`warning`}),dismiss:i}}var s=(0,e.readonly)(t);exports.toastStore=s,exports.useToast=o;
@@ -0,0 +1 @@
1
+ const e=require(`../_virtual/_plugin-vue_export-helper.js`),t=require(`./toaster.vue_vue_type_script_setup_true_lang.js`);;/* empty css */var n=e.default(t.default,[[`__scopeId`,`data-v-f97905ec`]]);exports.default=n;
@@ -0,0 +1 @@
1
+ const e=require(`./toast.js`),t=require(`./toast-item.js`);let n=require(`vue`);var r=(0,n.defineComponent)({name:`Toaster`,__name:`toaster`,props:{to:{default:`body`},toasterClass:{default:``},titleClass:{default:``},messageClass:{default:``}},setup(r){let i=r;return(a,o)=>((0,n.openBlock)(),(0,n.createBlock)(n.Teleport,{to:r.to},[(0,n.createElementVNode)(`div`,{class:(0,n.normalizeClass)([`toaster-box`,i.toasterClass])},[(0,n.createVNode)(n.TransitionGroup,{name:`toast-fade`},{default:(0,n.withCtx)(()=>[((0,n.openBlock)(!0),(0,n.createElementBlock)(n.Fragment,null,(0,n.renderList)((0,n.unref)(e.toastStore).toasts,e=>((0,n.openBlock)(),(0,n.createBlock)(t.default,{key:e.id,toast:e,"title-class":i.titleClass,"message-class":i.messageClass},{"success-icon":(0,n.withCtx)(()=>[(0,n.renderSlot)(a.$slots,`success-icon`,{},void 0,!0)]),"error-icon":(0,n.withCtx)(()=>[(0,n.renderSlot)(a.$slots,`error-icon`,{},void 0,!0)]),"info-icon":(0,n.withCtx)(()=>[(0,n.renderSlot)(a.$slots,`info-icon`,{},void 0,!0)]),"warning-icon":(0,n.withCtx)(()=>[(0,n.renderSlot)(a.$slots,`warning-icon`,{},void 0,!0)]),_:3},8,[`toast`,`title-class`,`message-class`]))),128))]),_:3})],2)],8,[`to`]))}});exports.default=r;
package/dist/style.css CHANGED
@@ -1,2 +1,2 @@
1
- .otp-wrapper[data-v-e8da3c38]{cursor:pointer;width:400px;max-width:100%;position:relative}.otp-box[data-v-e8da3c38]{width:100%;display:flex}.otp-item[data-v-e8da3c38]{border-bottom:1px solid #00000029;flex:1;justify-content:center;align-items:center;height:60px;transition:all .2s;display:flex}.otp-item.active[data-v-e8da3c38]{border-bottom:1px solid #000}.fade-enter-from[data-v-f6d3cf05],.fade-leave-to[data-v-f6d3cf05]{opacity:0}.popup-container[data-v-f6d3cf05]{transition:opacity var(--duration) ease-in-out;will-change:opacity;position:fixed}.popup-content[data-v-f6d3cf05]{transition:transform var(--duration) ease-in-out;will-change:transform;position:absolute}.popup-container-top .popup-content[data-v-f6d3cf05]{top:0;left:0;right:0}.fade-enter-from.popup-container-top .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-top .popup-content[data-v-f6d3cf05]{transform:translateY(-100%)}.popup-container-bottom .popup-content[data-v-f6d3cf05]{bottom:0;left:0;right:0}.fade-enter-from.popup-container-bottom .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-bottom .popup-content[data-v-f6d3cf05]{transform:translateY(100%)}.popup-container-left .popup-content[data-v-f6d3cf05]{top:0;bottom:0;left:0}.fade-enter-from.popup-container-left .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-left .popup-content[data-v-f6d3cf05]{transform:translate(-100%)}.popup-container-right .popup-content[data-v-f6d3cf05]{top:0;bottom:0;right:0}.fade-enter-from.popup-container-right .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-right .popup-content[data-v-f6d3cf05]{transform:translate(100%)}.popup-container-center .popup-content[data-v-f6d3cf05]{will-change:auto;transform-origin:50%;transition:none;top:50%;left:50%;transform:translate(-50%,-50%)}.button-container[data-v-f38282d0]{background-color:var(--bg);cursor:pointer;-webkit-user-select:none;user-select:none;transition-property:background-color,border-color;transition-duration:.3s;transition-timing-function:ease-in-out}.button-container[data-v-f38282d0]:focus{outline:none}.button-container.block[data-v-f38282d0]{width:100%;display:block}.button-container.disabled[data-v-f38282d0]{background-color:var(--disabled-bg);border-color:#0000!important}.collapse-content[data-v-cc071022]{width:max-content}.collapse-enter-from[data-v-cc071022],.collapse-leave-to[data-v-cc071022]{max-height:0!important}.collapse-enter-active[data-v-cc071022],.collapse-leave-active[data-v-cc071022]{max-height:var(--max-height);transition:max-height var(--duration) ease-in-out;overflow:hidden}.input-box[data-v-56cf72b9]{will-change:border-color;box-sizing:border-box;border-bottom:1px solid #00000029;align-items:center;gap:16px;height:60px;padding:16px 0;transition:border-color .2s ease-in-out;display:flex}.input-box[data-v-56cf72b9]:focus-within{border-color:#000}.input-box input[data-v-56cf72b9]{width:100%;height:100%;font-size:inherit;border:none;outline:none}input[data-v-56cf72b9]::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}input[data-v-56cf72b9]::-moz-placeholder{color:var(--input-placeholder-color,#999)}input[data-v-56cf72b9]:-ms-placeholder-shown{color:var(--input-placeholder-color,#999)}.input-box img[data-v-56cf72b9]{-o-object-fit:contain;object-fit:contain;cursor:pointer;width:24px;height:24px}.menu-box[data-v-b7084c6e]{display:inline-flex;position:relative}.default-box[data-v-b7084c6e]{box-sizing:border-box;border:1px solid #0003;align-items:center;min-width:240px;min-height:30px;padding:8px 16px;display:flex}.fade-enter-from[data-v-b7084c6e],[data-v-b7084c6e] .fade-enter-from,.fade-leave-to[data-v-b7084c6e],[data-v-b7084c6e] .fade-leave-to{opacity:0}.fade-enter-active[data-v-b7084c6e],[data-v-b7084c6e] .fade-enter-active,.fade-leave-active[data-v-b7084c6e],[data-v-b7084c6e] .fade-leave-active{transition:opacity var(--duration) ease-in-out}.menu-list-box[data-v-b7084c6e]{z-index:99;box-sizing:border-box;width:100%;padding-top:8px;position:absolute;top:100%;left:0}.menu-item-box[data-v-b7084c6e]{gap:var(--gap);box-sizing:border-box;background-color:#fff;flex-direction:column;width:100%;padding:16px 0;display:flex;position:relative;box-shadow:0 0 16px #0000000f}[data-v-b7084c6e] .menu-item-inner{box-sizing:border-box;cursor:pointer;will-change:background-color;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;width:100%;height:40px;padding:0 16px;transition:background-color .1s linear;display:flex}[data-v-b7084c6e] .menu-item-inner.active,[data-v-b7084c6e] .menu-item-inner:hover{background-color:#f8f9f9}[data-v-b7084c6e] .menu-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}[data-v-b7084c6e] .sub-menu-box{z-index:99;gap:var(--gap);box-sizing:border-box;background-color:#fff;border-left:1px solid #0000000f;flex-direction:column;padding:16px 8px;display:flex;position:absolute;top:0;left:100%;box-shadow:0 -16px 16px -16px #0000000f,16px 0 16px -16px #0000000f,0 16px 16px -16px #0000000f}[data-v-b7084c6e] .suffix-icon,[data-v-b7084c6e] .checked-icon{-o-object-fit:contain;object-fit:contain;width:18px;height:18px}.tab-box-container[data-v-fd2c8809]{width:100%}.tab-list-container[data-v-fd2c8809]{width:100%;overflow-x:scroll}.tab-list-container[data-v-fd2c8809]::-webkit-scrollbar{display:none}.tab-list-container-inner[data-v-fd2c8809]{flex-wrap:nowrap;display:inline-flex;position:relative}.tab-item-box[data-v-fd2c8809]{cursor:pointer;white-space:nowrap;flex-shrink:0;align-items:center}.tab-item-box~.tab-item-box[data-v-fd2c8809]{margin-left:var(--gap)}.active-tab-item-box[data-v-fd2c8809]{width:100px;height:1px;transition:left var(--transition-duration,.15s) ease-in-out, width var(--transition-duration,.15s) ease-in-out;background-color:#000;position:absolute;bottom:0;left:0}.active-tab-item-box.initial[data-v-fd2c8809]{transition:none}.panel-list-container[data-v-fd2c8809]{width:100%;min-height:200px;position:relative}.panel-item-box[data-v-fd2c8809]{width:100%;height:100%;position:absolute;top:0;left:0}:-webkit-any(input:-webkit-autofill,textarea:-webkit-autofill){-webkit-box-shadow:0 0 0 1000px var(--input-bg,#fff) inset;-webkit-text-fill-color:inherit}:is(input:autofill,textarea:autofill){-webkit-box-shadow:0 0 0 1000px var(--input-bg,#fff) inset;-webkit-text-fill-color:inherit}input:focus,textarea:focus,button:focus{outline:none}input::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}textarea::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}input::-moz-placeholder{color:var(--input-placeholder-color,#999)}textarea::-moz-placeholder{color:var(--input-placeholder-color,#999)}input:-ms-placeholder-shown{color:var(--input-placeholder-color,#999)}
1
+ .otp-wrapper[data-v-e8da3c38]{cursor:pointer;width:400px;max-width:100%;position:relative}.otp-box[data-v-e8da3c38]{width:100%;display:flex}.otp-item[data-v-e8da3c38]{border-bottom:1px solid #00000029;flex:1;justify-content:center;align-items:center;height:60px;transition:all .2s;display:flex}.otp-item.active[data-v-e8da3c38]{border-bottom:1px solid #000}.fade-enter-from[data-v-f6d3cf05],.fade-leave-to[data-v-f6d3cf05]{opacity:0}.popup-container[data-v-f6d3cf05]{transition:opacity var(--duration) ease-in-out;will-change:opacity;position:fixed}.popup-content[data-v-f6d3cf05]{transition:transform var(--duration) ease-in-out;will-change:transform;position:absolute}.popup-container-top .popup-content[data-v-f6d3cf05]{top:0;left:0;right:0}.fade-enter-from.popup-container-top .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-top .popup-content[data-v-f6d3cf05]{transform:translateY(-100%)}.popup-container-bottom .popup-content[data-v-f6d3cf05]{bottom:0;left:0;right:0}.fade-enter-from.popup-container-bottom .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-bottom .popup-content[data-v-f6d3cf05]{transform:translateY(100%)}.popup-container-left .popup-content[data-v-f6d3cf05]{top:0;bottom:0;left:0}.fade-enter-from.popup-container-left .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-left .popup-content[data-v-f6d3cf05]{transform:translate(-100%)}.popup-container-right .popup-content[data-v-f6d3cf05]{top:0;bottom:0;right:0}.fade-enter-from.popup-container-right .popup-content[data-v-f6d3cf05],.fade-leave-to.popup-container-right .popup-content[data-v-f6d3cf05]{transform:translate(100%)}.popup-container-center .popup-content[data-v-f6d3cf05]{will-change:auto;transform-origin:50%;transition:none;top:50%;left:50%;transform:translate(-50%,-50%)}.button-container[data-v-f38282d0]{background-color:var(--bg);cursor:pointer;-webkit-user-select:none;user-select:none;transition-property:background-color,border-color;transition-duration:.3s;transition-timing-function:ease-in-out}.button-container[data-v-f38282d0]:focus{outline:none}.button-container.block[data-v-f38282d0]{width:100%;display:block}.button-container.disabled[data-v-f38282d0]{background-color:var(--disabled-bg);border-color:#0000!important}.collapse-content[data-v-cc071022]{width:max-content}.collapse-enter-from[data-v-cc071022],.collapse-leave-to[data-v-cc071022]{max-height:0!important}.collapse-enter-active[data-v-cc071022],.collapse-leave-active[data-v-cc071022]{max-height:var(--max-height);transition:max-height var(--duration) ease-in-out;overflow:hidden}.input-box[data-v-56cf72b9]{will-change:border-color;box-sizing:border-box;border-bottom:1px solid #00000029;align-items:center;gap:16px;height:60px;padding:16px 0;transition:border-color .2s ease-in-out;display:flex}.input-box[data-v-56cf72b9]:focus-within{border-color:#000}.input-box input[data-v-56cf72b9]{width:100%;height:100%;font-size:inherit;border:none;outline:none}input[data-v-56cf72b9]::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}input[data-v-56cf72b9]::-moz-placeholder{color:var(--input-placeholder-color,#999)}input[data-v-56cf72b9]:-ms-placeholder-shown{color:var(--input-placeholder-color,#999)}.input-box img[data-v-56cf72b9]{-o-object-fit:contain;object-fit:contain;cursor:pointer;width:24px;height:24px}.menu-box[data-v-b7084c6e]{display:inline-flex;position:relative}.default-box[data-v-b7084c6e]{box-sizing:border-box;border:1px solid #0003;align-items:center;min-width:240px;min-height:30px;padding:8px 16px;display:flex}.fade-enter-from[data-v-b7084c6e],[data-v-b7084c6e] .fade-enter-from,.fade-leave-to[data-v-b7084c6e],[data-v-b7084c6e] .fade-leave-to{opacity:0}.fade-enter-active[data-v-b7084c6e],[data-v-b7084c6e] .fade-enter-active,.fade-leave-active[data-v-b7084c6e],[data-v-b7084c6e] .fade-leave-active{transition:opacity var(--duration) ease-in-out}.menu-list-box[data-v-b7084c6e]{z-index:99;box-sizing:border-box;width:100%;padding-top:8px;position:absolute;top:100%;left:0}.menu-item-box[data-v-b7084c6e]{gap:var(--gap);box-sizing:border-box;background-color:#fff;flex-direction:column;width:100%;padding:16px 0;display:flex;position:relative;box-shadow:0 0 16px #0000000f}[data-v-b7084c6e] .menu-item-inner{box-sizing:border-box;cursor:pointer;will-change:background-color;-webkit-user-select:none;user-select:none;justify-content:space-between;align-items:center;width:100%;height:40px;padding:0 16px;transition:background-color .1s linear;display:flex}[data-v-b7084c6e] .menu-item-inner.active,[data-v-b7084c6e] .menu-item-inner:hover{background-color:#f8f9f9}[data-v-b7084c6e] .menu-label{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}[data-v-b7084c6e] .sub-menu-box{z-index:99;gap:var(--gap);box-sizing:border-box;background-color:#fff;border-left:1px solid #0000000f;flex-direction:column;padding:16px 8px;display:flex;position:absolute;top:0;left:100%;box-shadow:0 -16px 16px -16px #0000000f,16px 0 16px -16px #0000000f,0 16px 16px -16px #0000000f}[data-v-b7084c6e] .suffix-icon,[data-v-b7084c6e] .checked-icon{-o-object-fit:contain;object-fit:contain;width:18px;height:18px}.tab-box-container[data-v-fd2c8809]{width:100%}.tab-list-container[data-v-fd2c8809]{width:100%;overflow-x:scroll}.tab-list-container[data-v-fd2c8809]::-webkit-scrollbar{display:none}.tab-list-container-inner[data-v-fd2c8809]{flex-wrap:nowrap;display:inline-flex;position:relative}.tab-item-box[data-v-fd2c8809]{cursor:pointer;white-space:nowrap;flex-shrink:0;align-items:center}.tab-item-box~.tab-item-box[data-v-fd2c8809]{margin-left:var(--gap)}.active-tab-item-box[data-v-fd2c8809]{width:100px;height:1px;transition:left var(--transition-duration,.15s) ease-in-out, width var(--transition-duration,.15s) ease-in-out;background-color:#000;position:absolute;bottom:0;left:0}.active-tab-item-box.initial[data-v-fd2c8809]{transition:none}.panel-list-container[data-v-fd2c8809]{width:100%;min-height:200px;position:relative}.panel-item-box[data-v-fd2c8809]{width:100%;height:100%;position:absolute;top:0;left:0}.toaster-box[data-v-f97905ec]{z-index:9999;flex-direction:column;gap:12px;display:flex;position:fixed;top:20px;left:50%;transform:translate(-50%)}[data-v-f97905ec] .toast-item{box-sizing:border-box;background-color:#0009;min-width:220px;padding:10px}[data-v-f97905ec] .title-box{justify-content:center;align-items:center;gap:10px;display:flex}[data-v-f97905ec] .message{color:#fff}:-webkit-any(input:-webkit-autofill,textarea:-webkit-autofill){-webkit-box-shadow:0 0 0 1000px var(--input-bg,#fff) inset;-webkit-text-fill-color:inherit}:is(input:autofill,textarea:autofill){-webkit-box-shadow:0 0 0 1000px var(--input-bg,#fff) inset;-webkit-text-fill-color:inherit}input:focus,textarea:focus,button:focus{outline:none}input::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}textarea::-webkit-input-placeholder{color:var(--input-placeholder-color,#999)}input::-moz-placeholder{color:var(--input-placeholder-color,#999)}textarea::-moz-placeholder{color:var(--input-placeholder-color,#999)}input:-ms-placeholder-shown{color:var(--input-placeholder-color,#999)}
2
2
  /*$vite$:1*/
@@ -12,3 +12,5 @@ export { default as Menu } from './menu';
12
12
  export type { RoxVMenuProps, RoxVMenuOptionProps } from './menu';
13
13
  export { default as Tab } from './tab';
14
14
  export type { RoxVTabProps } from './tab';
15
+ export { default as Toaster, useToast } from './toast';
16
+ export type { RoxVToasterProps } from './toast';
@@ -0,0 +1,7 @@
1
+ import { Plugin } from 'vue';
2
+ import { default as Toaster } from './toaster.vue';
3
+ import { useToast } from './toast';
4
+ export * from './types';
5
+ export { useToast };
6
+ declare const _default: typeof Toaster & Plugin;
7
+ export default _default;
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,25 @@
1
+ import { RoxVToasterProps, ToastItem } from './types';
2
+ type ToastItemProps = Omit<RoxVToasterProps, "to">;
3
+ type __VLS_Props = {
4
+ toast: ToastItem;
5
+ } & ToastItemProps;
6
+ declare function __VLS_template(): {
7
+ attrs: Partial<{}>;
8
+ slots: {
9
+ 'success-icon'?(_: {}): any;
10
+ 'error-icon'?(_: {}): any;
11
+ 'info-icon'?(_: {}): any;
12
+ 'warning-icon'?(_: {}): any;
13
+ };
14
+ refs: {};
15
+ rootEl: HTMLDivElement;
16
+ };
17
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
18
+ declare const __VLS_component: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
19
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
20
+ export default _default;
21
+ type __VLS_WithTemplateSlots<T, S> = T & {
22
+ new (): {
23
+ $slots: S;
24
+ };
25
+ };
@@ -0,0 +1,20 @@
1
+ import { ToastOptions } from './types';
2
+ declare function dismiss(id?: string): void;
3
+ declare function createToast(options: ToastOptions): string;
4
+ export declare function useToast(): {
5
+ toast: typeof createToast;
6
+ success: (message: string, duration?: number) => string;
7
+ error: (message: string, duration?: number) => string;
8
+ info: (message: string, duration?: number) => string;
9
+ warning: (message: string, duration?: number) => string;
10
+ dismiss: typeof dismiss;
11
+ };
12
+ export declare const toastStore: {
13
+ readonly toasts: readonly {
14
+ readonly id: string;
15
+ readonly message: string;
16
+ readonly duration: number;
17
+ readonly type: import('./types').ToastType;
18
+ }[];
19
+ };
20
+ export {};
@@ -0,0 +1,26 @@
1
+ import { RoxVToasterProps } from './types';
2
+ declare function __VLS_template(): {
3
+ attrs: Partial<{}>;
4
+ slots: {
5
+ 'success-icon'?(_: {}): any;
6
+ 'error-icon'?(_: {}): any;
7
+ 'info-icon'?(_: {}): any;
8
+ 'warning-icon'?(_: {}): any;
9
+ };
10
+ refs: {};
11
+ rootEl: any;
12
+ };
13
+ type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
14
+ declare const __VLS_component: import('vue').DefineComponent<RoxVToasterProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<RoxVToasterProps> & Readonly<{}>, {
15
+ to: string;
16
+ toasterClass: string;
17
+ titleClass: string;
18
+ messageClass: string;
19
+ }, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, any>;
20
+ declare const _default: __VLS_WithTemplateSlots<typeof __VLS_component, __VLS_TemplateResult["slots"]>;
21
+ export default _default;
22
+ type __VLS_WithTemplateSlots<T, S> = T & {
23
+ new (): {
24
+ $slots: S;
25
+ };
26
+ };
@@ -0,0 +1,15 @@
1
+ export type ToastType = "success" | "error" | "info" | "warning";
2
+ export interface ToastOptions {
3
+ message?: string;
4
+ duration?: number;
5
+ type?: ToastType;
6
+ }
7
+ export interface ToastItem extends Required<ToastOptions> {
8
+ id: string;
9
+ }
10
+ export interface RoxVToasterProps {
11
+ to?: string;
12
+ toasterClass?: string;
13
+ titleClass?: string;
14
+ messageClass?: string;
15
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@a-drowned-fish/rox-v",
3
- "version": "1.0.27",
3
+ "version": "1.0.29",
4
4
  "description": "vue3 组件库,提供常用的 ui 组件,如按钮、输入框、下拉选择框、选项卡等",
5
5
  "main": "dist/lib/index.js",
6
6
  "module": "dist/es/index.js",