@halo-dev/components 0.0.0-alpha.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.
Files changed (44) hide show
  1. package/dist/components/alert/index.d.ts +1 -0
  2. package/dist/components/alert/interface.d.ts +1 -0
  3. package/dist/components/button/index.d.ts +1 -0
  4. package/dist/components/button/interface.d.ts +2 -0
  5. package/dist/components/card/Card.vue.d.ts +17 -0
  6. package/dist/components/card/index.d.ts +1 -0
  7. package/dist/components/checkbox/index.d.ts +2 -0
  8. package/dist/components/dialog/index.d.ts +3 -0
  9. package/dist/components/dialog/interface.d.ts +13 -0
  10. package/dist/components/dialog/use-dialog.d.ts +9 -0
  11. package/dist/components/header/PageHeader.vue.d.ts +10 -0
  12. package/dist/components/header/index.d.ts +1 -0
  13. package/dist/components/input/index.d.ts +1 -0
  14. package/dist/components/input/interface.d.ts +1 -0
  15. package/dist/components/menu/RoutesMenu.d.ts +14 -0
  16. package/dist/components/menu/index.d.ts +4 -0
  17. package/dist/components/menu/interface.d.ts +12 -0
  18. package/dist/components/modal/index.d.ts +1 -0
  19. package/dist/components/radio/index.d.ts +2 -0
  20. package/dist/components/select/Option.vue.d.ts +10 -0
  21. package/dist/components/select/index.d.ts +2 -0
  22. package/dist/components/select/interface.d.ts +1 -0
  23. package/dist/components/space/index.d.ts +1 -0
  24. package/dist/components/space/interface.d.ts +4 -0
  25. package/dist/components/switch/index.d.ts +1 -0
  26. package/dist/components/tabs/index.d.ts +3 -0
  27. package/dist/components/tabs/interface.d.ts +2 -0
  28. package/dist/components/tag/index.d.ts +1 -0
  29. package/dist/components/tag/interface.d.ts +1 -0
  30. package/dist/components/textarea/Textarea.vue.d.ts +40 -0
  31. package/dist/components/textarea/index.d.ts +1 -0
  32. package/dist/components.d.ts +16 -0
  33. package/dist/halo-components.cjs.js +3 -0
  34. package/dist/halo-components.cjs.js.map +1 -0
  35. package/dist/halo-components.es.js +2121 -0
  36. package/dist/halo-components.es.js.map +1 -0
  37. package/dist/halo-components.iife.js +20 -0
  38. package/dist/halo-components.iife.js.map +1 -0
  39. package/dist/halo-components.umd.js +20 -0
  40. package/dist/halo-components.umd.js.map +1 -0
  41. package/dist/icons/icons.d.ts +42 -0
  42. package/dist/index.d.ts +2 -0
  43. package/dist/style.css +1 -0
  44. package/package.json +66 -0
@@ -0,0 +1 @@
1
+ export { default as VAlert } from "./Alert.vue";
@@ -0,0 +1 @@
1
+ export declare type Type = "default" | "success" | "info" | "warning" | "error";
@@ -0,0 +1 @@
1
+ export { default as VButton } from "./Button.vue";
@@ -0,0 +1,2 @@
1
+ export declare type Type = "default" | "primary" | "secondary" | "danger";
2
+ export declare type Size = "lg" | "md" | "sm" | "xs";
@@ -0,0 +1,17 @@
1
+ import type { PropType } from "vue";
2
+ declare const _sfc_main: import("vue").DefineComponent<{
3
+ title: {
4
+ type: StringConstructor;
5
+ };
6
+ bodyClass: {
7
+ type: PropType<string[]>;
8
+ };
9
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
10
+ title: {
11
+ type: StringConstructor;
12
+ };
13
+ bodyClass: {
14
+ type: PropType<string[]>;
15
+ };
16
+ }>>, {}>;
17
+ export default _sfc_main;
@@ -0,0 +1 @@
1
+ export { default as VCard } from "./Card.vue";
@@ -0,0 +1,2 @@
1
+ export { default as VCheckbox } from "./CheckBox.vue";
2
+ export { default as VCheckboxGroup } from "./CheckBoxGroup.vue";
@@ -0,0 +1,3 @@
1
+ export { default as VDialog } from "./Dialog.vue";
2
+ export { default as VDialogProvider } from "./DialogProvider.vue";
3
+ export * from "./use-dialog";
@@ -0,0 +1,13 @@
1
+ export declare type Type = "success" | "info" | "warning" | "error";
2
+ export declare const DialogProviderProvideKey = "DIALOG_PROVIDER_PROVIDE_KEY";
3
+ export interface useDialogOptions {
4
+ type?: Type;
5
+ visible: boolean;
6
+ title: string;
7
+ description?: string;
8
+ confirmText?: string;
9
+ cancelText?: string;
10
+ onConfirm?: () => void;
11
+ onCancel?: () => void;
12
+ }
13
+ export declare type useDialogUserOptions = Omit<useDialogOptions, "type" | "visible">;
@@ -0,0 +1,9 @@
1
+ import type { useDialogUserOptions } from '../../components/dialog/interface';
2
+ interface useDialogReturn {
3
+ success: (options: useDialogUserOptions) => void;
4
+ info: (options: useDialogUserOptions) => void;
5
+ warning: (options: useDialogUserOptions) => void;
6
+ error: (options: useDialogUserOptions) => void;
7
+ }
8
+ export declare function useDialog(): useDialogReturn;
9
+ export {};
@@ -0,0 +1,10 @@
1
+ declare const _sfc_main: import("vue").DefineComponent<{
2
+ title: {
3
+ type: StringConstructor;
4
+ };
5
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
6
+ title: {
7
+ type: StringConstructor;
8
+ };
9
+ }>>, {}>;
10
+ export default _sfc_main;
@@ -0,0 +1 @@
1
+ export { default as VPageHeader } from "./PageHeader.vue";
@@ -0,0 +1 @@
1
+ export { default as VInput } from "./Input.vue";
@@ -0,0 +1 @@
1
+ export declare type Size = "lg" | "md" | "sm" | "xs";
@@ -0,0 +1,14 @@
1
+ import type { PropType } from "vue";
2
+ import type { MenuGroupType } from "./interface";
3
+ declare const VRoutesMenu: import("vue").DefineComponent<{
4
+ menus: {
5
+ type: PropType<MenuGroupType[]>;
6
+ };
7
+ }, () => JSX.Element, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "select"[], "select", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
8
+ menus: {
9
+ type: PropType<MenuGroupType[]>;
10
+ };
11
+ }>> & {
12
+ onSelect?: (...args: any[]) => any;
13
+ }, {}>;
14
+ export { VRoutesMenu };
@@ -0,0 +1,4 @@
1
+ export { default as VMenu } from "./Menu.vue";
2
+ export { default as VMenuItem } from "./MenuItem.vue";
3
+ export { default as VMenuLabel } from "./MenuLabel.vue";
4
+ export { VRoutesMenu } from "./RoutesMenu.tsx";
@@ -0,0 +1,12 @@
1
+ import type { Component } from "vue";
2
+ export interface MenuGroupType {
3
+ name?: string;
4
+ items: MenuItemType[];
5
+ }
6
+ export interface MenuItemType {
7
+ name: string;
8
+ path: string;
9
+ icon?: Component;
10
+ meta?: Record<string, unknown>;
11
+ children?: MenuItemType[];
12
+ }
@@ -0,0 +1 @@
1
+ export { default as VModal } from "./Modal.vue";
@@ -0,0 +1,2 @@
1
+ export { default as VRadio } from "./Radio.vue";
2
+ export { default as VRadioGroup } from "./RadioGroup.vue";
@@ -0,0 +1,10 @@
1
+ declare const _sfc_main: import("vue").DefineComponent<{
2
+ value: {
3
+ type: (BooleanConstructor | StringConstructor | NumberConstructor)[];
4
+ };
5
+ }, {}, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, Record<string, any>, string, import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
6
+ value: {
7
+ type: (BooleanConstructor | StringConstructor | NumberConstructor)[];
8
+ };
9
+ }>>, {}>;
10
+ export default _sfc_main;
@@ -0,0 +1,2 @@
1
+ export { default as VSelect } from "./Select.vue";
2
+ export { default as VOption } from "./Option.vue";
@@ -0,0 +1 @@
1
+ export declare type Size = "lg" | "md" | "sm" | "xs";
@@ -0,0 +1 @@
1
+ export { default as VSpace } from "./Space.vue";
@@ -0,0 +1,4 @@
1
+ export declare type Spacing = "xs" | "sm" | "md" | "lg";
2
+ export declare type Direction = "row" | "column";
3
+ export declare type Align = "start" | "end" | "center" | "stretch";
4
+ export declare const SpacingSize: Record<string, number>;
@@ -0,0 +1 @@
1
+ export { default as VSwitch } from "./Switch.vue";
@@ -0,0 +1,3 @@
1
+ export { default as VTabs } from "./Tabs.vue";
2
+ export { default as VTabItem } from "./TabItem.vue";
3
+ export { default as VTabbar } from "./Tabbar.vue";
@@ -0,0 +1,2 @@
1
+ export declare type Type = "default" | "pills" | "outline";
2
+ export declare type Direction = "row" | "column";
@@ -0,0 +1 @@
1
+ export { default as VTag } from "./Tag.vue";
@@ -0,0 +1 @@
1
+ export declare type Theme = "default" | "primary" | "secondary" | "danger";
@@ -0,0 +1,40 @@
1
+ declare const _sfc_main: import("vue").DefineComponent<{
2
+ modelValue: {
3
+ type: StringConstructor;
4
+ };
5
+ disabled: {
6
+ type: BooleanConstructor;
7
+ default: boolean;
8
+ };
9
+ placeholder: {
10
+ type: StringConstructor;
11
+ };
12
+ rows: {
13
+ type: NumberConstructor;
14
+ default: number;
15
+ };
16
+ }, {
17
+ emit: (event: "update:modelValue", ...args: any[]) => void;
18
+ handleInput: (e: Event) => void;
19
+ }, unknown, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, "update:modelValue"[], "update:modelValue", import("vue").VNodeProps & import("vue").AllowedComponentProps & import("vue").ComponentCustomProps, Readonly<import("vue").ExtractPropTypes<{
20
+ modelValue: {
21
+ type: StringConstructor;
22
+ };
23
+ disabled: {
24
+ type: BooleanConstructor;
25
+ default: boolean;
26
+ };
27
+ placeholder: {
28
+ type: StringConstructor;
29
+ };
30
+ rows: {
31
+ type: NumberConstructor;
32
+ default: number;
33
+ };
34
+ }>> & {
35
+ "onUpdate:modelValue"?: (...args: any[]) => any;
36
+ }, {
37
+ disabled: boolean;
38
+ rows: number;
39
+ }>;
40
+ export default _sfc_main;
@@ -0,0 +1 @@
1
+ export { default as VTextarea } from "./Textarea.vue";
@@ -0,0 +1,16 @@
1
+ export * from "./components/alert";
2
+ export * from "./components/button";
3
+ export * from "./components/card";
4
+ export * from "./components/checkbox";
5
+ export * from "./components/header";
6
+ export * from "./components/input";
7
+ export * from "./components/menu";
8
+ export * from "./components/modal";
9
+ export * from "./components/radio";
10
+ export * from "./components/select";
11
+ export * from "./components/space";
12
+ export * from "./components/tabs";
13
+ export * from "./components/tag";
14
+ export * from "./components/textarea";
15
+ export * from "./components/switch";
16
+ export * from "./components/dialog";
@@ -0,0 +1,3 @@
1
+ "use strict";var L=Object.defineProperty;var x=Object.getOwnPropertySymbols;var R=Object.prototype.hasOwnProperty,Y=Object.prototype.propertyIsEnumerable;var y=(t,r,a)=>r in t?L(t,r,{enumerable:!0,configurable:!0,writable:!0,value:a}):t[r]=a,u=(t,r)=>{for(var a in r||(r={}))R.call(r,a)&&y(t,a,r[a]);if(x)for(var a of x(r))Y.call(r,a)&&y(t,a,r[a]);return t};Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});var e=require("vue"),w=require("vue-router");const H={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},D=e.createElementVNode("path",{fill:"currentColor",d:"M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12S6.477 2 12 2zm0 2a8 8 0 1 0 0 16a8 8 0 0 0 0-16zm3.833 3.337a.595.595 0 0 1 .763.067a.59.59 0 0 1 .063.76c-2.18 3.046-3.38 4.678-3.598 4.897a1.502 1.502 0 0 1-2.122 0a1.502 1.502 0 0 1 0-2.122c.374-.373 2.005-1.574 4.894-3.602zM17.5 11a1 1 0 1 1 0 2a1 1 0 0 1 0-2zm-11 0a1 1 0 1 1 0 2a1 1 0 0 1 0-2zm2.318-3.596a1 1 0 1 1-1.416 1.414a1 1 0 0 1 1.416-1.414zM12 5.5a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1),j=[D];function T(t,r){return e.openBlock(),e.createElementBlock("svg",H,j)}var K={name:"ri-dashboard-3-line",render:T};const F={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},O=e.createElementVNode("path",{fill:"currentColor",d:"m10.828 12l4.95 4.95l-1.414 1.414L8 12l6.364-6.364l1.414 1.414z"},null,-1),U=[O];function G(t,r){return e.openBlock(),e.createElementBlock("svg",F,U)}var X={name:"ri-arrow-left-s-line",render:G};const q={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},P=e.createElementVNode("path",{fill:"currentColor",d:"m13.172 12l-4.95-4.95l1.414-1.414L16 12l-6.364 6.364l-1.414-1.414z"},null,-1),W=[P];function J(t,r){return e.openBlock(),e.createElementBlock("svg",q,W)}var _={name:"ri-arrow-right-s-line",render:J};const Q={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Z=e.createElementVNode("path",{fill:"currentColor",d:"m12 16l-6-6h12z"},null,-1),ee=[Z];function te(t,r){return e.openBlock(),e.createElementBlock("svg",Q,ee)}var re={name:"ri-arrow-down-s-fill",render:te};const ae={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},oe=e.createElementVNode("path",{fill:"currentColor",d:"m12 10.828l-4.95 4.95l-1.414-1.414L12 8l6.364 6.364l-1.414 1.414z"},null,-1),ne=[oe];function ie(t,r){return e.openBlock(),e.createElementBlock("svg",ae,ne)}var le={name:"ri-arrow-up-s-line",render:ie};const ce={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},se=e.createElementVNode("path",{fill:"currentColor",d:"m12 13.172l4.95-4.95l1.414 1.414L12 16L5.636 9.636L7.05 8.222z"},null,-1),de=[se];function pe(t,r){return e.openBlock(),e.createElementBlock("svg",ce,de)}var me={name:"ri-arrow-down-s-line",render:pe};const he={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ue=e.createElementVNode("path",{fill:"currentColor",d:"M2 3.993A1 1 0 0 1 2.992 3h18.016c.548 0 .992.445.992.993v16.014a1 1 0 0 1-.992.993H2.992A.993.993 0 0 1 2 20.007V3.993zM11 5H4v14h7V5zm2 0v14h7V5h-7zm1 2h5v2h-5V7zm0 3h5v2h-5v-2z"},null,-1),we=[ue];function be(t,r){return e.openBlock(),e.createElementBlock("svg",he,we)}var ge={name:"ri-book-read-line",render:be};const ve={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},fe=e.createElementVNode("path",{fill:"currentColor",d:"M5 8v12h14V8H5zm0-2h14V4H5v2zm15 16H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h16a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1zM7 10h4v4H7v-4zm0 6h10v2H7v-2zm6-5h4v2h-4v-2z"},null,-1),xe=[fe];function ye(t,r){return e.openBlock(),e.createElementBlock("svg",ve,xe)}var _e={name:"ri-pages-line",render:ye};const ke={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},$e=e.createElementVNode("path",{fill:"currentColor",d:"M2 8.994A5.99 5.99 0 0 1 8 3h8c3.313 0 6 2.695 6 5.994V21H8c-3.313 0-6-2.695-6-5.994V8.994zM20 19V8.994A4.004 4.004 0 0 0 16 5H8a3.99 3.99 0 0 0-4 3.994v6.012A4.004 4.004 0 0 0 8 19h12zm-6-8h2v2h-2v-2zm-6 0h2v2H8v-2z"},null,-1),Be=[$e];function ze(t,r){return e.openBlock(),e.createElementBlock("svg",ke,Be)}var Ve={name:"ri-message-3-line",render:ze};const Ce={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ee=e.createElementVNode("path",{fill:"currentColor",d:"M12 2c5.522 0 10 3.978 10 8.889a5.558 5.558 0 0 1-5.556 5.555h-1.966c-.922 0-1.667.745-1.667 1.667c0 .422.167.811.422 1.1c.267.3.434.689.434 1.122C13.667 21.256 12.9 22 12 22C6.478 22 2 17.522 2 12S6.478 2 12 2zm-1.189 16.111a3.664 3.664 0 0 1 3.667-3.667h1.966A3.558 3.558 0 0 0 20 10.89C20 7.139 16.468 4 12 4a8 8 0 0 0-.676 15.972a3.648 3.648 0 0 1-.513-1.86zM7.5 12a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm9 0a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zM12 9a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3z"},null,-1),Me=[Ee];function Se(t,r){return e.openBlock(),e.createElementBlock("svg",Ce,Me)}var Ne={name:"ri-palette-line",render:Se};const Ie={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ae=e.createElementVNode("path",{fill:"currentColor",d:"M2 18h7v2H2v-2zm0-7h9v2H2v-2zm0-7h20v2H2V4zm18.674 9.025l1.156-.391l1 1.732l-.916.805a4.017 4.017 0 0 1 0 1.658l.916.805l-1 1.732l-1.156-.391c-.41.37-.898.655-1.435.83L19 21h-2l-.24-1.196a3.996 3.996 0 0 1-1.434-.83l-1.156.392l-1-1.732l.916-.805a4.017 4.017 0 0 1 0-1.658l-.916-.805l1-1.732l1.156.391c.41-.37.898-.655 1.435-.83L17 11h2l.24 1.196c.536.174 1.024.46 1.434.83zM18 18a2 2 0 1 0 0-4a2 2 0 0 0 0 4z"},null,-1),Le=[Ae];function Re(t,r){return e.openBlock(),e.createElementBlock("svg",Ie,Le)}var Ye={name:"ri-list-settings-line",render:Re};const He={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},De=e.createElementVNode("path",{fill:"currentColor",d:"M15.199 9.945a2.6 2.6 0 0 1-.79-1.551l-.403-3.083l-2.73 1.486a2.6 2.6 0 0 1-1.72.273L6.5 6.5l.57 3.056a2.6 2.6 0 0 1-.273 1.72l-1.486 2.73l3.083.403a2.6 2.6 0 0 1 1.55.79l2.138 2.257l1.336-2.807a2.6 2.6 0 0 1 1.23-1.231l2.808-1.336l-2.257-2.137zm.025 5.563l-2.213 4.65a.6.6 0 0 1-.977.155l-3.542-3.739a.6.6 0 0 0-.357-.182l-5.107-.668a.6.6 0 0 1-.449-.881l2.462-4.524a.6.6 0 0 0 .062-.396L4.16 4.86a.6.6 0 0 1 .7-.7l5.063.943a.6.6 0 0 0 .396-.062l4.524-2.462a.6.6 0 0 1 .881.45l.668 5.106a.6.6 0 0 0 .182.357l3.739 3.542a.6.6 0 0 1-.155.977l-4.65 2.213a.6.6 0 0 0-.284.284zm.797 1.927l1.414-1.414l4.243 4.242l-1.415 1.415l-4.242-4.243z"},null,-1),je=[De];function Te(t,r){return e.openBlock(),e.createElementBlock("svg",He,je)}var Ke={name:"ri-magic-line",render:Te};const Fe={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Oe=e.createElementVNode("path",{fill:"currentColor",d:"M12 14v2a6 6 0 0 0-6 6H4a8 8 0 0 1 8-8zm0-1c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6zm0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4zm2.595 7.812a3.51 3.51 0 0 1 0-1.623l-.992-.573l1-1.732l.992.573A3.496 3.496 0 0 1 17 14.645V13.5h2v1.145c.532.158 1.012.44 1.405.812l.992-.573l1 1.732l-.992.573a3.51 3.51 0 0 1 0 1.622l.992.573l-1 1.732l-.992-.573a3.496 3.496 0 0 1-1.405.812V22.5h-2v-1.145a3.496 3.496 0 0 1-1.405-.812l-.992.573l-1-1.732l.992-.572zM18 19.5a1.5 1.5 0 1 0 0-3a1.5 1.5 0 0 0 0 3z"},null,-1),Ue=[Oe];function Ge(t,r){return e.openBlock(),e.createElementBlock("svg",Fe,Ue)}var Xe={name:"ri-user-settings-line",render:Ge};const qe={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Pe=e.createElementVNode("path",{fill:"currentColor",d:"M2 12c0-.865.11-1.703.316-2.504A3 3 0 0 0 4.99 4.867a9.99 9.99 0 0 1 4.335-2.505a3 3 0 0 0 5.348 0a9.99 9.99 0 0 1 4.335 2.505a3 3 0 0 0 2.675 4.63a10.036 10.036 0 0 1 0 5.007a3 3 0 0 0-2.675 4.629a9.99 9.99 0 0 1-4.335 2.505a3 3 0 0 0-5.348 0a9.99 9.99 0 0 1-4.335-2.505a3 3 0 0 0-2.675-4.63A10.056 10.056 0 0 1 2 12zm4.804 3c.63 1.091.81 2.346.564 3.524c.408.29.842.541 1.297.75A4.993 4.993 0 0 1 12 18c1.26 0 2.438.471 3.335 1.274c.455-.209.889-.46 1.297-.75A4.993 4.993 0 0 1 17.196 15a4.993 4.993 0 0 1 2.77-2.25a8.126 8.126 0 0 0 0-1.5A4.993 4.993 0 0 1 17.195 9a4.993 4.993 0 0 1-.564-3.524a7.989 7.989 0 0 0-1.297-.75A4.993 4.993 0 0 1 12 6a4.993 4.993 0 0 1-3.335-1.274a7.99 7.99 0 0 0-1.297.75A4.993 4.993 0 0 1 6.804 9a4.993 4.993 0 0 1-2.77 2.25a8.126 8.126 0 0 0 0 1.5A4.993 4.993 0 0 1 6.805 15zM12 15a3 3 0 1 1 0-6a3 3 0 0 1 0 6zm0-2a1 1 0 1 0 0-2a1 1 0 0 0 0 2z"},null,-1),We=[Pe];function Je(t,r){return e.openBlock(),e.createElementBlock("svg",qe,We)}var Qe={name:"ri-settings-4-line",render:Je};const Ze={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},et=e.createElementVNode("path",{fill:"currentColor",d:"M13 18v2h6v2h-6a2 2 0 0 1-2-2v-2H8a4 4 0 0 1-4-4V7a1 1 0 0 1 1-1h2V2h2v4h6V2h2v4h2a1 1 0 0 1 1 1v7a4 4 0 0 1-4 4h-3zm-5-2h8a2 2 0 0 0 2-2v-3H6v3a2 2 0 0 0 2 2zm10-8H6v1h12V8zm-6 6.5a1 1 0 1 1 0-2a1 1 0 0 1 0 2zM11 2h2v3h-2V2z"},null,-1),tt=[et];function rt(t,r){return e.openBlock(),e.createElementBlock("svg",Ze,tt)}var at={name:"ri-plug-2-line",render:rt};const ot={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},nt=e.createElementVNode("path",{fill:"currentColor",d:"M12 3c5.392 0 9.878 3.88 10.819 9c-.94 5.12-5.427 9-10.819 9c-5.392 0-9.878-3.88-10.819-9C2.121 6.88 6.608 3 12 3zm0 16a9.005 9.005 0 0 0 8.777-7a9.005 9.005 0 0 0-17.554 0A9.005 9.005 0 0 0 12 19zm0-2.5a4.5 4.5 0 1 1 0-9a4.5 4.5 0 0 1 0 9zm0-2a2.5 2.5 0 1 0 0-5a2.5 2.5 0 0 0 0 5z"},null,-1),it=[nt];function lt(t,r){return e.openBlock(),e.createElementBlock("svg",ot,it)}var ct={name:"ri-eye-line",render:lt};const st={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},dt=e.createElementVNode("path",{fill:"currentColor",d:"M12.414 5H21a1 1 0 0 1 1 1v14a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h7.414l2 2zM20 11H4v8h16v-8zm0-2V7h-8.414l-2-2H4v4h16z"},null,-1),pt=[dt];function mt(t,r){return e.openBlock(),e.createElementBlock("svg",st,pt)}var ht={name:"ri-folder-2-line",render:mt};const ut={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},wt=e.createElementVNode("path",{fill:"currentColor",d:"M4.5 10.5c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S6 12.825 6 12s-.675-1.5-1.5-1.5zm15 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5S21 12.825 21 12s-.675-1.5-1.5-1.5zm-7.5 0c-.825 0-1.5.675-1.5 1.5s.675 1.5 1.5 1.5s1.5-.675 1.5-1.5s-.675-1.5-1.5-1.5z"},null,-1),bt=[wt];function gt(t,r){return e.openBlock(),e.createElementBlock("svg",ut,bt)}var vt={name:"ri-more-line",render:gt};const ft={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},xt=e.createElementVNode("path",{fill:"currentColor",d:"m12 10.586l4.95-4.95l1.414 1.414l-4.95 4.95l4.95 4.95l-1.414 1.414l-4.95-4.95l-4.95 4.95l-1.414-1.414l4.95-4.95l-4.95-4.95L7.05 5.636z"},null,-1),yt=[xt];function _t(t,r){return e.openBlock(),e.createElementBlock("svg",ft,yt)}var h={name:"ri-close-line",render:_t};const kt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},$t=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-1-5h2v2h-2v-2zm0-8h2v6h-2V7z"},null,-1),Bt=[$t];function zt(t,r){return e.openBlock(),e.createElementBlock("svg",kt,Bt)}var v={name:"ri-error-warning-line",render:zt};const Vt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ct=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-.997-4L6.76 11.757l1.414-1.414l2.829 2.829l5.656-5.657l1.415 1.414L11.003 16z"},null,-1),Et=[Ct];function Mt(t,r){return e.openBlock(),e.createElementBlock("svg",Vt,Et)}var f={name:"ri-checkbox-circle-line",render:Mt};const St={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Nt=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM11 7h2v2h-2V7zm0 4h2v6h-2v-6z"},null,-1),It=[Nt];function At(t,r){return e.openBlock(),e.createElementBlock("svg",St,It)}var m={name:"ri-information-line",render:At};const Lt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Rt=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm0-9.414l2.828-2.829l1.415 1.415L13.414 12l2.829 2.828l-1.415 1.415L12 13.414l-2.828 2.829l-1.415-1.415L10.586 12L7.757 9.172l1.415-1.415L12 10.586z"},null,-1),Yt=[Rt];function Ht(t,r){return e.openBlock(),e.createElementBlock("svg",Lt,Yt)}var k={name:"ri-close-circle-line",render:Ht};const Dt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},jt=e.createElementVNode("path",{fill:"currentColor",d:"M17 6h5v2h-2v13a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V8H2V6h5V3a1 1 0 0 1 1-1h8a1 1 0 0 1 1 1v3zm1 2H6v12h12V8zm-4.586 6l1.768 1.768l-1.414 1.414L12 15.414l-1.768 1.768l-1.414-1.414L10.586 14l-1.768-1.768l1.414-1.414L12 12.586l1.768-1.768l1.414 1.414L13.414 14zM9 4v2h6V4H9z"},null,-1),Tt=[jt];function Kt(t,r){return e.openBlock(),e.createElementBlock("svg",Dt,Tt)}var Ft={name:"ri-delete-bin-2-line",render:Kt};const Ot={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Ut=e.createElementVNode("path",{fill:"currentColor",d:"M11 11V7h2v4h4v2h-4v4h-2v-4H7v-2h4zm1 11C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16z"},null,-1),Gt=[Ut];function Xt(t,r){return e.openBlock(),e.createElementBlock("svg",Ot,Gt)}var qt={name:"ri-add-circle-line",render:Xt};const Pt={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Wt=e.createElementVNode("path",{fill:"currentColor",d:"M7 19v-6h10v6h2V7.828L16.172 5H5v14h2zM4 3h13l4 4v13a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm5 12v4h6v-4H9z"},null,-1),Jt=[Wt];function Qt(t,r){return e.openBlock(),e.createElementBlock("svg",Pt,Jt)}var Zt={name:"ri-save-line",render:Qt};const er={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},tr=e.createElementVNode("path",{fill:"currentColor",d:"M8 4h13v2H8V4zM4.5 6.5a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm0 7a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zm0 6.9a1.5 1.5 0 1 1 0-3a1.5 1.5 0 0 1 0 3zM8 11h13v2H8v-2zm0 7h13v2H8v-2z"},null,-1),rr=[tr];function ar(t,r){return e.openBlock(),e.createElementBlock("svg",er,rr)}var or={name:"ri-list-unordered",render:ar};const nr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ir=e.createElementVNode("path",{fill:"currentColor",d:"M14 10h-4v4h4v-4zm2 0v4h3v-4h-3zm-2 9v-3h-4v3h4zm2 0h3v-3h-3v3zM14 5h-4v3h4V5zm2 0v3h3V5h-3zm-8 5H5v4h3v-4zm0 9v-3H5v3h3zM8 5H5v3h3V5zM4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1z"},null,-1),lr=[ir];function cr(t,r){return e.openBlock(),e.createElementBlock("svg",nr,lr)}var sr={name:"ri-grid-line",render:cr};const dr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},pr=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm-.997-6l7.07-7.071l-1.414-1.414l-5.656 5.657l-2.829-2.829l-1.414 1.414L11.003 16z"},null,-1),mr=[pr];function hr(t,r){return e.openBlock(),e.createElementBlock("svg",dr,mr)}var ur={name:"ri-checkbox-circle-fill",render:hr};const wr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},br=e.createElementVNode("path",{fill:"currentColor",d:"M11 2c4.968 0 9 4.032 9 9s-4.032 9-9 9s-9-4.032-9-9s4.032-9 9-9zm0 16c3.867 0 7-3.133 7-7c0-3.868-3.133-7-7-7c-3.868 0-7 3.132-7 7c0 3.867 3.132 7 7 7zm8.485.071l2.829 2.828l-1.415 1.415l-2.828-2.829l1.414-1.414z"},null,-1),gr=[br];function vr(t,r){return e.openBlock(),e.createElementBlock("svg",wr,gr)}var fr={name:"ri-search-2-line",render:vr};const xr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},yr=e.createElementVNode("path",{fill:"currentColor",d:"M4 16h16V5H4v11zm9 2v2h4v2H7v-2h4v-2H2.992A.998.998 0 0 1 2 16.993V4.007C2 3.451 2.455 3 2.992 3h18.016c.548 0 .992.449.992 1.007v12.986c0 .556-.455 1.007-.992 1.007H13z"},null,-1),_r=[yr];function kr(t,r){return e.openBlock(),e.createElementBlock("svg",xr,_r)}var $r={name:"ri-computer-line",render:kr};const Br={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},zr=e.createElementVNode("path",{fill:"currentColor",d:"M7 4v16h10V4H7zM6 2h12a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm6 15a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1),Vr=[zr];function Cr(t,r){return e.openBlock(),e.createElementBlock("svg",Br,Vr)}var Er={name:"ri-smartphone-line",render:Cr};const Mr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Sr=e.createElementVNode("path",{fill:"currentColor",d:"M6 4v16h12V4H6zM5 2h14a1 1 0 0 1 1 1v18a1 1 0 0 1-1 1H5a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1zm7 15a1 1 0 1 1 0 2a1 1 0 0 1 0-2z"},null,-1),Nr=[Sr];function Ir(t,r){return e.openBlock(),e.createElementBlock("svg",Mr,Nr)}var Ar={name:"ri-tablet-line",render:Ir};const Lr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Rr=e.createElementVNode("path",{fill:"currentColor",d:"M14 14.252v2.09A6 6 0 0 0 6 22l-2-.001a8 8 0 0 1 10-7.748zM12 13c-3.315 0-6-2.685-6-6s2.685-6 6-6s6 2.685 6 6s-2.685 6-6 6zm0-2c2.21 0 4-1.79 4-4s-1.79-4-4-4s-4 1.79-4 4s1.79 4 4 4zm5.793 8.914l3.535-3.535l1.415 1.414l-4.95 4.95l-3.536-3.536l1.415-1.414l2.12 2.121z"},null,-1),Yr=[Rr];function Hr(t,r){return e.openBlock(),e.createElementBlock("svg",Lr,Yr)}var Dr={name:"ri-user-follow-line",render:Hr};const jr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Tr=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zm-5-7h9v2h-4v3l-5-5zm5-4V6l5 5H8V9h4z"},null,-1),Kr=[Tr];function Fr(t,r){return e.openBlock(),e.createElementBlock("svg",jr,Kr)}var Or={name:"ri-exchange-line",render:Fr};const Ur={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Gr=e.createElementVNode("path",{fill:"currentColor",d:"M12 2C6.475 2 2 6.475 2 12a9.994 9.994 0 0 0 6.838 9.488c.5.087.687-.213.687-.476c0-.237-.013-1.024-.013-1.862c-2.512.463-3.162-.612-3.362-1.175c-.113-.288-.6-1.175-1.025-1.413c-.35-.187-.85-.65-.013-.662c.788-.013 1.35.725 1.538 1.025c.9 1.512 2.338 1.087 2.912.825c.088-.65.35-1.087.638-1.337c-2.225-.25-4.55-1.113-4.55-4.938c0-1.088.387-1.987 1.025-2.688c-.1-.25-.45-1.275.1-2.65c0 0 .837-.262 2.75 1.026a9.28 9.28 0 0 1 2.5-.338c.85 0 1.7.112 2.5.337c1.912-1.3 2.75-1.024 2.75-1.024c.55 1.375.2 2.4.1 2.65c.637.7 1.025 1.587 1.025 2.687c0 3.838-2.337 4.688-4.562 4.938c.362.312.675.912.675 1.85c0 1.337-.013 2.412-.013 2.75c0 .262.188.574.688.474A10.016 10.016 0 0 0 22 12c0-5.525-4.475-10-10-10z"},null,-1),Xr=[Gr];function qr(t,r){return e.openBlock(),e.createElementBlock("svg",Ur,Xr)}var Pr={name:"ri-github-fill",render:qr};const Wr={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},Jr=e.createElementVNode("path",{fill:"currentColor",d:"m12 12.586l4.243 4.242l-1.415 1.415L13 16.415V22h-2v-5.587l-1.828 1.83l-1.415-1.415L12 12.586zM12 2a7.001 7.001 0 0 1 6.954 6.194a5.5 5.5 0 0 1-.953 10.784v-2.014a3.5 3.5 0 1 0-1.112-6.91a5 5 0 1 0-9.777 0a3.5 3.5 0 0 0-1.292 6.88l.18.03v2.014a5.5 5.5 0 0 1-.954-10.784A7 7 0 0 1 12 2z"},null,-1),Qr=[Jr];function Zr(t,r){return e.openBlock(),e.createElementBlock("svg",Wr,Qr)}var ea={name:"ri-upload-cloud-2-line",render:Zr};const ta={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ra=e.createElementVNode("path",{fill:"currentColor",d:"M3.783 2.826L12 1l8.217 1.826a1 1 0 0 1 .783.976v9.987a6 6 0 0 1-2.672 4.992L12 23l-6.328-4.219A6 6 0 0 1 3 13.79V3.802a1 1 0 0 1 .783-.976zM5 4.604v9.185a4 4 0 0 0 1.781 3.328L12 20.597l5.219-3.48A4 4 0 0 0 19 13.79V4.604L12 3.05L5 4.604zM12 11a2.5 2.5 0 1 1 0-5a2.5 2.5 0 0 1 0 5zm-4.473 5a4.5 4.5 0 0 1 8.946 0H7.527z"},null,-1),aa=[ra];function oa(t,r){return e.openBlock(),e.createElementBlock("svg",ta,aa)}var na={name:"ri-shield-user-line",render:oa};const ia={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},la=e.createElementVNode("path",{fill:"currentColor",d:"M7.105 15.21A3.001 3.001 0 1 1 5 15.17V8.83a3.001 3.001 0 1 1 2 0V12c.836-.628 1.874-1 3-1h4a3.001 3.001 0 0 0 2.895-2.21a3.001 3.001 0 1 1 2.032.064A5.001 5.001 0 0 1 14 13h-4a3.001 3.001 0 0 0-2.895 2.21zM6 17a1 1 0 1 0 0 2a1 1 0 0 0 0-2zM6 5a1 1 0 1 0 0 2a1 1 0 0 0 0-2zm12 0a1 1 0 1 0 0 2a1 1 0 0 0 0-2z"},null,-1),ca=[la];function sa(t,r){return e.openBlock(),e.createElementBlock("svg",ia,ca)}var da={name:"ri-git-branch-line",render:sa};const pa={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ma=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM9 9h6v6H9V9z"},null,-1),ha=[ma];function ua(t,r){return e.openBlock(),e.createElementBlock("svg",pa,ha)}var wa={name:"ri-stop-circle-line",render:ua};const ba={preserveAspectRatio:"xMidYMid meet",viewBox:"0 0 24 24",width:"1.2em",height:"1.2em"},ga=e.createElementVNode("path",{fill:"currentColor",d:"M12 22C6.477 22 2 17.523 2 12S6.477 2 12 2s10 4.477 10 10s-4.477 10-10 10zm0-2a8 8 0 1 0 0-16a8 8 0 0 0 0 16zM8.523 7.109l8.368 8.368a6.04 6.04 0 0 1-1.414 1.414L7.109 8.523A6.04 6.04 0 0 1 8.523 7.11z"},null,-1),va=[ga];function fa(t,r){return e.openBlock(),e.createElementBlock("svg",ba,va)}var $={name:"ri-forbid-line",render:fa};var B=(t,r)=>{const a=t.__vccOpts||t;for(const[o,n]of r)a[o]=n;return a};const xa={class:"alert-header"},ya={class:"alert-icon"},_a={class:"alert-title"},ka={key:0,class:"alert-description"},$a={key:1,class:"alert-actions"},Ba=e.defineComponent({__name:"Alert",props:{type:{type:String,default:"default"},title:{type:String},description:{type:String},closable:{type:Boolean,default:!0}},emits:["close"],setup(t,{emit:r}){const a=t,o={success:f,info:m,default:m,warning:v,error:k},n=e.computed(()=>[`alert-${a.type}`]),i=()=>{r("close")};return(l,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(n),"alert-wrapper"])},[e.createElementVNode("div",xa,[e.createElementVNode("div",ya,[e.renderSlot(l.$slots,"icon",{},()=>[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(o[t.type])))],!0)]),e.createElementVNode("div",_a,e.toDisplayString(t.title),1),t.closable?(e.openBlock(),e.createElementBlock("div",{key:0,class:"alert-close",onClick:i},[e.createVNode(e.unref(h))])):e.createCommentVNode("",!0)]),t.description||l.$slots.description?(e.openBlock(),e.createElementBlock("div",ka,[e.renderSlot(l.$slots,"description",{},()=>[e.createTextVNode(e.toDisplayString(t.description),1)],!0)])):e.createCommentVNode("",!0),l.$slots.actions?(e.openBlock(),e.createElementBlock("div",$a,[e.renderSlot(l.$slots,"actions",{},void 0,!0)])):e.createCommentVNode("",!0)],2))}});var za=B(Ba,[["__scopeId","data-v-3bf3a1a9"]]);const Va=["disabled"],Ca={key:0,class:"btn-icon"},Ea={key:0,class:"animate-spin",fill:"none",viewBox:"0 0 24 24",xmlns:"http://www.w3.org/2000/svg"},Ma=e.createElementVNode("circle",{class:"opacity-25",cx:"12",cy:"12",r:"10",stroke:"currentColor","stroke-width":"4"},null,-1),Sa=e.createElementVNode("path",{class:"opacity-75",d:"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z",fill:"currentColor"},null,-1),Na=[Ma,Sa],Ia={class:"btn-content"},b=e.defineComponent({__name:"Button",props:{type:{type:String,default:"default"},size:{type:String,default:"md"},circle:{type:Boolean,default:!1},block:{type:Boolean,default:!1},disabled:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},route:{type:Object}},emits:["click"],setup(t,{emit:r}){const a=t,o=w.useRouter(),n=e.computed(()=>[`btn-${a.size}`,`btn-${a.type}`,{"btn-circle":a.circle},{"btn-block":a.block},{"btn-loading":a.loading}]);function i(){a.disabled||a.loading||(a.route&&o.push(a.route),r("click"))}return(l,s)=>(e.openBlock(),e.createElementBlock("button",{class:e.normalizeClass([e.unref(n),"btn"]),disabled:t.disabled,onClick:i},[l.$slots.icon||t.loading?(e.openBlock(),e.createElementBlock("span",Ca,[t.loading?(e.openBlock(),e.createElementBlock("svg",Ea,Na)):e.renderSlot(l.$slots,"icon",{key:1})])):e.createCommentVNode("",!0),e.createElementVNode("span",Ia,[e.renderSlot(l.$slots,"default")])],10,Va))}});const Aa={class:"card-wrapper"},La={key:0,class:"card-header"},Ra={class:"card-header-title"},Ya={class:"card-header-actions"},Ha={key:1,class:"card-footer"},Da=e.defineComponent({__name:"Card",props:{title:{type:String},bodyClass:{type:Object}},setup(t){return(r,a)=>(e.openBlock(),e.createElementBlock("div",Aa,[t.title||r.$slots.header?(e.openBlock(),e.createElementBlock("div",La,[e.renderSlot(r.$slots,"header",{},()=>[e.createElementVNode("div",Ra,e.toDisplayString(t.title),1),e.createElementVNode("div",Ya,[e.renderSlot(r.$slots,"actions")])])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass([t.bodyClass,"card-body"])},[e.renderSlot(r.$slots,"default")],2),r.$slots.footer?(e.openBlock(),e.createElementBlock("div",Ha,[e.renderSlot(r.$slots,"footer")])):e.createCommentVNode("",!0)]))}});const ja={class:"checkbox-inner"},Ta=["id","checked","value"],Ka=["for"],z=e.defineComponent({__name:"CheckBox",props:{checked:{type:Boolean,default:!1},value:{type:[String,Number,Boolean]},label:{type:String},name:{type:String}},emits:["update:checked","change"],setup(t,{emit:r}){const a=t,o=["checkbox",a.name,a.value].filter(i=>!!i).join("-");function n(i){const{checked:l}=i.target;r("update:checked",l),r("change",i)}return(i,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([{"checkbox-wrapper-checked":t.checked},"checkbox-wrapper"])},[e.createElementVNode("div",ja,[e.createElementVNode("input",{id:e.unref(o),checked:t.checked,value:t.value,type:"checkbox",onChange:n},null,40,Ta)]),t.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:e.unref(o),class:"checkbox-label"},e.toDisplayString(t.label),9,Ka)):e.createCommentVNode("",!0)],2))}});const Fa={class:"checkbox-group-wrapper"},Oa=e.defineComponent({__name:"CheckBoxGroup",props:{modelValue:{type:Object,default:()=>[]},options:{type:Object},valueKey:{type:String,default:"value"},labelKey:{type:String,default:"label"},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){const a=t;function o(n){const{value:i,checked:l}=n.target,s=[...a.modelValue];l?s.push(i):s.splice(s.indexOf(i),1),r("update:modelValue",s),r("change",s)}return(n,i)=>(e.openBlock(),e.createElementBlock("div",Fa,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,(l,s)=>(e.openBlock(),e.createBlock(e.unref(z),{key:s,checked:t.modelValue.includes(l[t.valueKey]),label:l[t.labelKey],name:t.name,value:l[t.valueKey],onChange:o},null,8,["checked","label","name","value"]))),128))]))}}),Ua={class:"flex items-center justify-between bg-white p-4"},Ga={class:"min-w-0 flex-1 self-center"},Xa={class:"flex items-center truncate text-xl font-bold text-gray-800"},qa={class:"self-center"},Pa=e.defineComponent({__name:"PageHeader",props:{title:{type:String}},setup(t){return(r,a)=>(e.openBlock(),e.createElementBlock("div",Ua,[e.createElementVNode("div",Ga,[e.createElementVNode("h2",Xa,[e.renderSlot(r.$slots,"icon"),e.createElementVNode("span",null,e.toDisplayString(t.title),1)])]),e.createElementVNode("div",qa,[e.renderSlot(r.$slots,"actions")])]))}});const Wa={class:"input-wrapper"},Ja={key:0,class:"input-prefix"},Qa=["disabled","placeholder","value"],Za={key:1,class:"input-suffix"},eo=e.defineComponent({__name:"Input",props:{modelValue:{type:String},size:{type:String,default:"md"},disabled:{type:Boolean,default:!1},placeholder:{type:String}},emits:["update:modelValue"],setup(t,{emit:r}){const a=t,o=e.computed(()=>[`input-${a.size}`]);function n(i){const{value:l}=i.target;r("update:modelValue",l)}return(i,l)=>(e.openBlock(),e.createElementBlock("div",Wa,[i.$slots.prefix?(e.openBlock(),e.createElementBlock("div",Ja,[e.renderSlot(i.$slots,"prefix")])):e.createCommentVNode("",!0),e.createElementVNode("input",{class:e.normalizeClass(e.unref(o)),disabled:t.disabled,placeholder:t.placeholder,value:t.modelValue,type:"text",onInput:n},null,42,Qa),i.$slots.suffix?(e.openBlock(),e.createElementBlock("div",Za,[e.renderSlot(i.$slots,"suffix")])):e.createCommentVNode("",!0)]))}}),to={class:"menu-container w-full p-3"},V=e.defineComponent({__name:"Menu",props:{openIds:{type:Object,required:!1}},setup(t){const r=t;return e.provide("openIds",r.openIds),(a,o)=>(e.openBlock(),e.createElementBlock("div",to,[e.createElementVNode("ul",null,[e.renderSlot(a.$slots,"default")])]))}});const ro=["onClick"],ao={key:0,class:"menu-icon mr-3 self-center"},oo={class:"menu-title flex-1 self-center"},no={class:"sub-menu-items transition-all"},g=e.defineComponent({__name:"MenuItem",props:{id:{type:String,default:""},title:{type:String,default:""},active:{type:Boolean,default:!1}},emits:["select"],setup(t,{emit:r}){const a=t,o=e.useSlots(),n=e.ref(!1),i=e.inject("openIds");i!=null&&i.includes(a.id)&&(n.value=!0);const l=e.computed(()=>o.default&&o.default().length>0);function s(){if(l.value){n.value=!n.value;return}r("select",a.id)}return(c,d)=>(e.openBlock(),e.createElementBlock("li",{class:e.normalizeClass([{"has-submenus":e.unref(l)},"menu-item"]),onClick:e.withModifiers(s,["stop"])},[e.createElementVNode("div",{class:e.normalizeClass([{active:t.active},"menu-item-title"])},[c.$slots.icon?(e.openBlock(),e.createElementBlock("span",ao,[e.renderSlot(c.$slots,"icon")])):e.createCommentVNode("",!0),e.createElementVNode("span",oo,e.toDisplayString(t.title),1),c.$slots.default?(e.openBlock(),e.createElementBlock("span",{key:1,class:e.normalizeClass([{open:n.value},"menu-icon-collapse self-center transition-all"])},[e.createVNode(e.unref(_))],2)):e.createCommentVNode("",!0)],2),e.createVNode(e.Transition,{name:"submenus-show"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("ul",no,[e.renderSlot(c.$slots,"default")],512),[[e.vShow,c.$slots.default&&n.value]])]),_:3})],10,ro))}});const io={},lo={class:"menu-label flex flex-col"};function co(t,r){return e.openBlock(),e.createElementBlock("li",lo,[e.renderSlot(t.$slots,"default")])}var C=B(io,[["render",co]]);const so=e.defineComponent({name:"VRoutesMenu",props:{menus:{type:Object}},emits:["select"],setup(t,{emit:r}){const a=w.useRoute(),{push:o}=w.useRouter(),n=e.computed(()=>a.matched.map(c=>c.path));async function i(c){r("select",c),await o(c)}function l(c){if(!!c)return e.createVNode(c,{height:"20px",width:"20px"},null)}function s(c){return c==null?void 0:c.map(d=>{var p;return e.createVNode(e.Fragment,null,[(p=d.children)!=null&&p.length?e.createVNode(g,{key:d.path,id:d.path,title:d.name},{default:()=>[s(d.children)],icon:()=>l(d.icon)}):e.createVNode(g,{key:d.path,id:d.path,title:d.name,onSelect:i,active:n.value.includes(d.path)},{icon:()=>l(d.icon)})])})}return()=>e.createVNode(V,{openIds:n.value},{default:()=>{var c;return[(c=t.menus)==null?void 0:c.map(d=>{var p;return e.createVNode(e.Fragment,null,[d.name&&e.createVNode(C,null,{default:()=>[d.name]}),((p=d.items)==null?void 0:p.length)&&s(d.items)])})]}})}});const po={key:0,class:"modal-header"},mo={class:"modal-header-title"},ho={class:"modal-header-actions flex flex-row"},uo={key:1,class:"modal-footer"},E=e.defineComponent({__name:"Modal",props:{visible:{type:Boolean,default:!1},title:{type:String},width:{type:Number,default:500},fullscreen:{type:Boolean,default:!1},bodyClass:{type:Object}},emits:["update:visible","close"],setup(t,{emit:r}){const a=t,o=e.ref(!1),n=e.computed(()=>({"modal-wrapper-fullscreen":a.fullscreen})),i=e.computed(()=>({maxWidth:a.width+"px"}));function l(){r("update:visible",!1),r("close")}return(s,c)=>(e.openBlock(),e.createBlock(e.Teleport,{to:"body",disabled:!0},[e.withDirectives(e.createElementVNode("div",{class:e.normalizeClass([e.unref(n),"modal-wrapper"]),"aria-modal":"true",role:"dialog",tabindex:"0",onKeyup:c[4]||(c[4]=e.withKeys(d=>l(),["esc"]))},[e.createVNode(e.Transition,{"enter-active-class":"ease-out duration-200","enter-from-class":"opacity-0","enter-to-class":"opacity-100","leave-active-class":"ease-in duration-100","leave-from-class":"opacity-100","leave-to-class":"opacity-0",onBeforeEnter:c[1]||(c[1]=d=>o.value=!0),onAfterLeave:c[2]||(c[2]=d=>o.value=!1)},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{class:"modal-layer",onClick:c[0]||(c[0]=d=>l())},null,512),[[e.vShow,t.visible]])]),_:1}),e.createVNode(e.Transition,{"enter-active-class":"ease-out duration-200","enter-from-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95","enter-to-class":"opacity-100 translate-y-0 sm:scale-100","leave-active-class":"ease-in duration-100","leave-from-class":"opacity-100 translate-y-0 sm:scale-100","leave-to-class":"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"},{default:e.withCtx(()=>[e.withDirectives(e.createElementVNode("div",{style:e.normalizeStyle(e.unref(i)),class:"modal-content transform transition-all"},[s.$slots.header||t.title?(e.openBlock(),e.createElementBlock("div",po,[e.renderSlot(s.$slots,"header",{},()=>[e.createElementVNode("div",mo,e.toDisplayString(t.title),1),e.createElementVNode("div",ho,[e.renderSlot(s.$slots,"actions"),e.createElementVNode("div",{class:"modal-header-action",onClick:c[3]||(c[3]=d=>l())},[e.createVNode(e.unref(h))])])])])):e.createCommentVNode("",!0),e.createElementVNode("div",{class:e.normalizeClass([t.bodyClass,"modal-body"])},[e.renderSlot(s.$slots,"default")],2),s.$slots.footer?(e.openBlock(),e.createElementBlock("div",uo,[e.renderSlot(s.$slots,"footer")])):e.createCommentVNode("",!0)],4),[[e.vShow,t.visible]])]),_:3})],34),[[e.vShow,o.value]])]))}});const wo={class:"radio-inner"},bo=["id","checked","name","value"],go=["for"],M=e.defineComponent({__name:"Radio",props:{modelValue:{type:[String,Number,Boolean]},value:{type:[String,Number,Boolean]},label:{type:String},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){const a=t,o=["radio",a.name,a.value].filter(l=>!!l).join("-"),n=e.computed(()=>a.modelValue===a.value);function i(l){const{value:s}=l.target;r("update:modelValue",s),r("change",s)}return(l,s)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([{"radio-wrapper-checked":e.unref(n)},"radio-wrapper"])},[e.createElementVNode("div",wo,[e.createElementVNode("input",{id:e.unref(o),checked:e.unref(n),name:t.name,value:t.value,type:"radio",onChange:i},null,40,bo)]),t.label?(e.openBlock(),e.createElementBlock("label",{key:0,for:e.unref(o),class:"radio-label"},e.toDisplayString(t.label),9,go)):e.createCommentVNode("",!0)],2))}}),vo={class:"radio-group-wrapper"},fo=e.defineComponent({__name:"RadioGroup",props:{modelValue:{type:[String,Number,Boolean]},options:{type:Object},valueKey:{type:String,default:"value"},labelKey:{type:String,default:"label"},name:{type:String}},emits:["update:modelValue","change"],setup(t,{emit:r}){function a(o){r("update:modelValue",o),r("change",o)}return(o,n)=>(e.openBlock(),e.createElementBlock("div",vo,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.options,(i,l)=>(e.openBlock(),e.createBlock(e.unref(M),{key:l,label:i[t.labelKey]+"","model-value":t.modelValue,name:t.name,value:i[t.valueKey],onChange:a},null,8,["label","model-value","name","value"]))),128))]))}});const xo={class:"select-wrapper"},yo=["disabled","value"],_o={key:"placeholder",disabled:"",hidden:"",value:""},ko=e.defineComponent({__name:"Select",props:{modelValue:{type:String},size:{type:String,default:"md"},disabled:{type:Boolean,default:!1},placeholder:{type:String}},emits:["update:modelValue"],setup(t,{emit:r}){const a=t,o=e.computed(()=>[`select-${a.size}`]);function n(i){const{value:l}=i.target;r("update:modelValue",l)}return(i,l)=>(e.openBlock(),e.createElementBlock("div",xo,[e.createElementVNode("select",{class:e.normalizeClass(e.unref(o)),disabled:t.disabled,value:t.modelValue,onChange:n},[t.placeholder?(e.openBlock(),e.createElementBlock("option",_o,e.toDisplayString(t.placeholder),1)):e.createCommentVNode("",!0),e.renderSlot(i.$slots,"default")],42,yo)]))}}),$o=["value"],Bo=e.defineComponent({__name:"Option",props:{value:{type:[String,Number,Boolean]}},setup(t){return(r,a)=>(e.openBlock(),e.createElementBlock("option",{value:t.value},[e.renderSlot(r.$slots,"default")],8,$o))}}),zo={xs:10,sm:12,md:16,lg:20};const S=e.defineComponent({__name:"Space",props:{spacing:{type:String,default:"xs"},direction:{type:String,default:"row"},align:{type:String,default:"center"}},setup(t){const r=t,a=e.computed(()=>{const{direction:o,align:n}=r;return[`space-direction-${o}`,`space-align-${n}`]});return(o,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(a),"space-wrapper"]),style:e.normalizeStyle(`gap: ${e.unref(zo)[t.spacing]}px`)},[e.renderSlot(o.$slots,"default")],6))}});const Vo={class:"tabs-bar-wrapper"},Co={class:"tabs-items-wrapper"},Eo=e.defineComponent({__name:"Tabs",props:{activeId:{type:[Number,String]},type:{type:String,default:"default"},direction:{type:String,default:"row"},idKey:{type:String,default:"id"},labelKey:{type:String,default:"label"}},emits:["update:activeId","change"],setup(t,{emit:r}){const a=t;e.provide("activeId",e.computed(()=>a.activeId));const o=e.useSlots(),n=e.computed(()=>{var s;return(s=o.default)==null?void 0:s.call(o).map(({props:c})=>({id:c==null?void 0:c[a.idKey],label:c==null?void 0:c[a.labelKey]}))}),i=e.computed(()=>[`tabs-direction-${a.direction}`]),l=s=>{r("update:activeId",s),r("change",s)};return(s,c)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(i),"tabs-wrapper"])},[e.createElementVNode("div",Vo,[e.createVNode(e.unref(N),{activeId:t.activeId,direction:t.direction,items:e.unref(n),type:t.type,onChange:l},null,8,["activeId","direction","items","type"])]),e.createElementVNode("div",Co,[e.renderSlot(s.$slots,"default")])],2))}}),Mo={key:0,class:"tabs-item-wrapper"},So=e.defineComponent({__name:"TabItem",props:{id:{type:String},label:{type:String}},setup(t){const r=t,a=e.inject("activeId"),o=e.computed(()=>(a==null?void 0:a.value)===r.id);return(n,i)=>e.unref(o)?(e.openBlock(),e.createElementBlock("div",Mo,[e.renderSlot(n.$slots,"default")])):e.createCommentVNode("",!0)}});const No={class:"tabbar-items"},Io=["onClick"],Ao={key:0,class:"tabbar-item-icon"},Lo={key:1,class:"tabbar-item-label"},N=e.defineComponent({__name:"Tabbar",props:{activeId:{type:[Number,String]},items:{type:Object},type:{type:String,default:"default"},direction:{type:String,default:"row"},idKey:{type:String,default:"id"},labelKey:{type:String,default:"label"}},emits:["update:activeId","change"],setup(t,{emit:r}){const a=t,o=e.computed(()=>[`tabbar-${a.type}`,`tabbar-direction-${a.direction}`]),n=i=>{r("update:activeId",i),r("change",i)};return(i,l)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(o),"tabbar-wrapper"])},[e.createElementVNode("div",No,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(t.items,(s,c)=>(e.openBlock(),e.createElementBlock("div",{key:c,class:e.normalizeClass([{"tabbar-item-active":s[t.idKey]===t.activeId},"tabbar-item"]),onClick:d=>n(s[t.idKey])},[s.icon?(e.openBlock(),e.createElementBlock("div",Ao,[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(s.icon)))])):e.createCommentVNode("",!0),s[t.labelKey]?(e.openBlock(),e.createElementBlock("div",Lo,e.toDisplayString(s[t.labelKey]),1)):e.createCommentVNode("",!0)],10,Io))),128))])],2))}});const Ro={key:0,class:"tag-left-icon"},Yo={class:"tag-content"},Ho={key:1,class:"tag-right-icon"},Do=e.defineComponent({__name:"Tag",props:{theme:{type:String,default:"default"},rounded:{type:Boolean,default:!1}},setup(t){const r=t,a=e.computed(()=>[`tag-${r.theme}`,{"tag-rounded":r.rounded}]);return(o,n)=>(e.openBlock(),e.createElementBlock("div",{class:e.normalizeClass([e.unref(a),"tag-wrapper"])},[o.$slots.leftIcon?(e.openBlock(),e.createElementBlock("div",Ro,[e.renderSlot(o.$slots,"leftIcon")])):e.createCommentVNode("",!0),e.createElementVNode("span",Yo,[e.renderSlot(o.$slots,"default")]),o.$slots.rightIcon?(e.openBlock(),e.createElementBlock("div",Ho,[e.renderSlot(o.$slots,"rightIcon")])):e.createCommentVNode("",!0)],2))}});const jo={class:"textarea-wrapper"},To=["disabled","placeholder","rows","value"],Ko=e.defineComponent({__name:"Textarea",props:{modelValue:{type:String},disabled:{type:Boolean,default:!1},placeholder:{type:String},rows:{type:Number,default:3}},emits:["update:modelValue"],setup(t,{emit:r}){function a(o){const{value:n}=o.target;r("update:modelValue",n)}return(o,n)=>(e.openBlock(),e.createElementBlock("div",jo,[e.createElementVNode("textarea",{disabled:t.disabled,placeholder:t.placeholder,rows:t.rows,value:t.modelValue,onInput:a},`
2
+ `,40,To)]))}});const Fo={class:"switch-wrapper"},Oo=e.defineComponent({__name:"Switch",props:{modelValue:{type:Boolean,default:!1}},emits:["update:modelValue","change"],setup(t,{emit:r}){const a=t,o=()=>{r("update:modelValue",!a.modelValue),r("change",!a.modelValue)};return(n,i)=>(e.openBlock(),e.createElementBlock("div",Fo,[e.createElementVNode("button",{class:e.normalizeClass([{"bg-gray-200":!t.modelValue,"!bg-themeable-primary-600":t.modelValue},"switch-inner"]),"aria-checked":"false",role:"switch",type:"button",onClick:o},[e.createElementVNode("span",{class:e.normalizeClass([{"translate-x-0":!t.modelValue,"translate-x-5":t.modelValue},"switch-indicator"]),"aria-hidden":"true"},[e.renderSlot(n.$slots,"icon")],2)],2)]))}}),Uo={class:"flex justify-between items-start py-2 mb-2"},Go={class:"flex items-center gap-4"},Xo={class:"flex-1 flex flex-col items-stretch gap-2"},qo={class:"text-base text-gray-900 font-bold"},Po={class:"text-sm text-gray-700"},I=e.defineComponent({__name:"Dialog",props:{type:{type:String,default:"info"},title:{type:String,default:"\u63D0\u793A"},description:{type:String,default:""},confirmText:{type:String,default:"\u786E\u5B9A"},cancelText:{type:String,default:"\u53D6\u6D88"},visible:{type:Boolean,default:!1},onConfirm:{type:Function},onCancel:{type:Function}},emits:["update:visible","close"],setup(t,{emit:r}){const a=t,o={success:{icon:f,color:"green"},info:{icon:m,color:"blue"},warning:{icon:v,color:"orange"},error:{icon:$,color:"red"}},n=e.computed(()=>o[a.type]),i=e.ref(!1),l=()=>{a.onCancel&&a.onCancel(),c()},s=async()=>{a.onConfirm&&(i.value=!0,await a.onConfirm()),c()},c=()=>{i.value=!1,r("update:visible",!1),r("close")};return(d,p)=>(e.openBlock(),e.createBlock(e.unref(E),{visible:t.visible,width:450,onClose:p[0]||(p[0]=Qo=>l())},{footer:e.withCtx(()=>[e.createVNode(e.unref(S),null,{default:e.withCtx(()=>[e.createVNode(e.unref(b),{loading:i.value,type:"secondary",onClick:s},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.confirmText),1)]),_:1},8,["loading"]),e.createVNode(e.unref(b),{onClick:l},{default:e.withCtx(()=>[e.createTextVNode(e.toDisplayString(t.cancelText),1)]),_:1})]),_:1})]),default:e.withCtx(()=>[e.createElementVNode("div",Uo,[e.createElementVNode("div",null,[e.createElementVNode("div",{class:e.normalizeClass([`ring-${e.unref(n).color}-100`,"inline-flex rounded-full bg-teal-50 p-1.5 ring-4"])},[(e.openBlock(),e.createBlock(e.resolveDynamicComponent(e.unref(n).icon),{class:e.normalizeClass([`text-${e.unref(n).color}-500`,"w-5 h-5"])},null,8,["class"]))],2)]),e.createElementVNode("div",null,[e.createVNode(e.unref(h),{class:"cursor-pointer",onClick:l})])]),e.createElementVNode("div",Go,[e.createElementVNode("div",Xo,[e.createElementVNode("div",qo,e.toDisplayString(t.title),1),e.createElementVNode("div",Po,e.toDisplayString(t.description),1)])])]),_:1},8,["visible"]))}}),A="DIALOG_PROVIDER_PROVIDE_KEY",Wo=e.defineComponent({__name:"DialogProvider",setup(t){const r=e.ref({visible:!1,title:""});return e.provide(A,r),(a,o)=>(e.openBlock(),e.createElementBlock(e.Fragment,null,[e.renderSlot(a.$slots,"default"),e.createVNode(e.unref(I),{visible:r.value.visible,"onUpdate:visible":o[0]||(o[0]=n=>r.value.visible=n),"cancel-text":r.value.cancelText,"confirm-text":r.value.confirmText,description:r.value.description,onCancel:r.value.onCancel,onConfirm:r.value.onConfirm,title:r.value.title,type:r.value.type},null,8,["visible","cancel-text","confirm-text","description","onCancel","onConfirm","title","type"])],64))}});function Jo(){const t=e.inject(A);if(!t)throw new Error("DialogProvider is not mounted");const r=a=>o=>{t.value=u(u({},t.value),o),t.value.type=a,t.value.visible=!0};return{success:r("success"),info:r("info"),warning:r("warning"),error:r("error")}}exports.IconAddCircle=qt;exports.IconArrowDown=re;exports.IconArrowDownLine=me;exports.IconArrowLeft=X;exports.IconArrowRight=_;exports.IconArrowUpLine=le;exports.IconBookRead=ge;exports.IconCheckboxCircle=f;exports.IconCheckboxFill=ur;exports.IconClose=h;exports.IconCloseCircle=k;exports.IconComputer=$r;exports.IconDashboard=K;exports.IconDeleteBin=Ft;exports.IconErrorWarning=v;exports.IconExchange=Or;exports.IconEye=ct;exports.IconFolder=ht;exports.IconForbidLine=$;exports.IconGitBranch=da;exports.IconGitHub=Pr;exports.IconGrid=sr;exports.IconInformation=m;exports.IconList=or;exports.IconListSettings=Ye;exports.IconMagic=Ke;exports.IconMessage=Ve;exports.IconMore=vt;exports.IconPages=_e;exports.IconPalette=Ne;exports.IconPhone=Er;exports.IconPlug=at;exports.IconSave=Zt;exports.IconSearch=fr;exports.IconSettings=Qe;exports.IconShieldUser=na;exports.IconStopCircle=wa;exports.IconTablet=Ar;exports.IconUpload=ea;exports.IconUserFollow=Dr;exports.IconUserSettings=Xe;exports.VAlert=za;exports.VButton=b;exports.VCard=Da;exports.VCheckbox=z;exports.VCheckboxGroup=Oa;exports.VDialog=I;exports.VDialogProvider=Wo;exports.VInput=eo;exports.VMenu=V;exports.VMenuItem=g;exports.VMenuLabel=C;exports.VModal=E;exports.VOption=Bo;exports.VPageHeader=Pa;exports.VRadio=M;exports.VRadioGroup=fo;exports.VRoutesMenu=so;exports.VSelect=ko;exports.VSpace=S;exports.VSwitch=Oo;exports.VTabItem=So;exports.VTabbar=N;exports.VTabs=Eo;exports.VTag=Do;exports.VTextarea=Ko;exports.useDialog=Jo;
3
+ //# sourceMappingURL=halo-components.cjs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"halo-components.cjs.js","sources":["../plugin-vue:export-helper","../src/components/alert/Alert.vue","../src/components/button/Button.vue","../src/components/checkbox/CheckBox.vue","../src/components/checkbox/CheckBoxGroup.vue","../src/components/input/Input.vue","../src/components/menu/Menu.vue","../src/components/menu/MenuItem.vue","../src/components/menu/RoutesMenu.tsx","../src/components/modal/Modal.vue","../src/components/radio/Radio.vue","../src/components/radio/RadioGroup.vue","../src/components/select/Select.vue","../src/components/space/interface.ts","../src/components/space/Space.vue","../src/components/tabs/Tabs.vue","../src/components/tabs/TabItem.vue","../src/components/tabs/Tabbar.vue","../src/components/tag/Tag.vue","../src/components/textarea/Textarea.vue","../src/components/switch/Switch.vue","../src/components/dialog/Dialog.vue","../src/components/dialog/interface.ts","../src/components/dialog/DialogProvider.vue","../src/components/dialog/use-dialog.ts"],"sourcesContent":["\nexport default (sfc, props) => {\n const target = sfc.__vccOpts || sfc;\n for (const [key, val] of props) {\n target[key] = val;\n }\n return target;\n}\n","<script lang=\"ts\" setup>\nimport type { Component, PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Type } from \"./interface\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconCloseCircle,\n IconErrorWarning,\n IconInformation,\n} from \"../../icons/icons\";\n\nconst TypeIcons: Record<Type, Component> = {\n success: IconCheckboxCircle,\n info: IconInformation,\n default: IconInformation,\n warning: IconErrorWarning,\n error: IconCloseCircle,\n};\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n title: {\n type: String,\n },\n description: {\n type: String,\n },\n closable: {\n type: Boolean,\n default: true,\n },\n});\n\nconst emit = defineEmits([\"close\"]);\n\nconst classes = computed(() => {\n return [`alert-${props.type}`];\n});\n\nconst handleClose = () => {\n emit(\"close\");\n};\n</script>\n\n<template>\n <div :class=\"classes\" class=\"alert-wrapper\">\n <div class=\"alert-header\">\n <div class=\"alert-icon\">\n <slot name=\"icon\">\n <component :is=\"TypeIcons[type]\" />\n </slot>\n </div>\n <div class=\"alert-title\">\n {{ title }}\n </div>\n <div v-if=\"closable\" class=\"alert-close\" @click=\"handleClose\">\n <IconClose />\n </div>\n </div>\n <div v-if=\"description || $slots.description\" class=\"alert-description\">\n <slot name=\"description\">\n {{ description }}\n </slot>\n </div>\n <div v-if=\"$slots.actions\" class=\"alert-actions\">\n <slot name=\"actions\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\" scoped>\n.alert-wrapper {\n @apply flex;\n @apply flex-col;\n @apply box-border;\n @apply border;\n padding: 12px 16px;\n border-radius: 4px;\n\n .alert-header {\n @apply flex;\n\n .alert-icon {\n @apply self-center;\n @apply mr-3;\n @apply text-lg;\n }\n\n .alert-title {\n @apply self-center;\n @apply mr-3;\n @apply flex-1;\n @apply font-medium;\n @apply text-base;\n }\n\n .alert-close {\n @apply self-center;\n @apply cursor-pointer;\n @apply rounded-full;\n @apply p-0.5;\n\n &:hover {\n @apply transition-all;\n @apply bg-gray-300;\n @apply text-white;\n }\n }\n }\n\n .alert-description {\n @apply text-sm;\n @apply mt-2;\n }\n\n .alert-actions {\n @apply border-t;\n @apply mt-3 pt-2;\n }\n\n &.alert-default {\n @apply bg-gray-50;\n @apply border-gray-300;\n\n .alert-icon,\n .alert-description {\n @apply text-gray-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-gray-700;\n }\n }\n\n &.alert-success {\n @apply bg-green-50;\n @apply border-green-300;\n\n .alert-icon,\n .alert-description {\n @apply text-green-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-green-700;\n }\n }\n\n &.alert-info {\n @apply bg-sky-50;\n @apply border-sky-300;\n\n .alert-icon,\n .alert-description {\n @apply text-sky-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-sky-700;\n }\n }\n\n &.alert-warning {\n @apply bg-orange-50;\n @apply border-orange-300;\n\n .alert-icon,\n .alert-description {\n @apply text-orange-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-orange-700;\n }\n }\n\n &.alert-error {\n @apply bg-red-50;\n @apply border-red-300;\n\n .alert-icon,\n .alert-description {\n @apply text-red-600;\n }\n\n .alert-close,\n .alert-title {\n @apply text-red-700;\n }\n }\n}\n</style>\n","<template>\n <button\n :class=\"classes\"\n :disabled=\"disabled\"\n class=\"btn\"\n @click=\"handleClick\"\n >\n <span v-if=\"$slots.icon || loading\" class=\"btn-icon\">\n <svg\n v-if=\"loading\"\n class=\"animate-spin\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <circle\n class=\"opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n ></circle>\n <path\n class=\"opacity-75\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n fill=\"currentColor\"\n ></path>\n </svg>\n <slot v-else name=\"icon\" />\n </span>\n <span class=\"btn-content\">\n <slot />\n </span>\n </button>\n</template>\n<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { RouteLocationRaw } from \"vue-router\";\nimport { useRouter } from \"vue-router\";\nimport type { Size, Type } from \"./interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n circle: {\n type: Boolean,\n default: false,\n },\n block: {\n type: Boolean,\n default: false,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n loading: {\n type: Boolean,\n default: false,\n },\n route: {\n type: Object as PropType<RouteLocationRaw>,\n },\n});\n\nconst router = useRouter();\nconst emit = defineEmits([\"click\"]);\n\nconst classes = computed(() => {\n return [\n `btn-${props.size}`,\n `btn-${props.type}`,\n { \"btn-circle\": props.circle },\n { \"btn-block\": props.block },\n { \"btn-loading\": props.loading },\n ];\n});\n\nfunction handleClick() {\n if (props.disabled || props.loading) return;\n if (props.route) {\n router.push(props.route);\n }\n emit(\"click\");\n}\n</script>\n<style lang=\"scss\">\n.btn {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply cursor-pointer;\n @apply select-none;\n @apply flex-wrap;\n @apply items-center;\n @apply justify-center;\n @apply transition-all;\n @apply text-center;\n @apply text-sm;\n @apply no-underline;\n @apply h-9;\n @apply px-4;\n @apply outline-0;\n @apply border-none;\n @apply appearance-none;\n @apply align-middle;\n\n &:hover {\n @apply opacity-90;\n }\n\n &:active {\n @apply opacity-100;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n}\n\n.btn-default {\n border: 1px solid #d9d9d9;\n\n .btn-icon {\n color: #0e1731;\n }\n}\n\n.btn-primary {\n background: #4ccba0;\n @apply text-white;\n}\n\n.btn-secondary {\n background: #0e1731;\n @apply text-white;\n}\n\n.btn-danger {\n background: #d71d1d;\n @apply text-white;\n}\n\n.btn-block {\n @apply w-full;\n}\n\n.btn-icon {\n @apply h-5 w-5;\n @apply text-white;\n @apply mr-3;\n}\n\n.btn-loading {\n @apply cursor-not-allowed;\n &:hover {\n @apply opacity-100;\n }\n}\n\n.btn-lg {\n @apply h-11;\n @apply px-5;\n @apply text-lg;\n}\n\n.btn-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n\n .btn-icon {\n @apply h-3 w-3;\n @apply mr-2;\n }\n}\n\n.btn-circle {\n @apply w-9;\n @apply p-0;\n @apply rounded-full;\n}\n\n.btn-lg.btn-circle {\n @apply w-11;\n}\n\n.btn-sm.btn-circle {\n @apply w-7;\n}\n\n.btn-xs.btn-circle {\n @apply w-6;\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n checked: {\n type: Boolean,\n default: false,\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst id = [\"checkbox\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst emit = defineEmits([\"update:checked\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { checked } = e.target as HTMLInputElement;\n emit(\"update:checked\", checked);\n emit(\"change\", e);\n}\n</script>\n<template>\n <div\n :class=\"{ 'checkbox-wrapper-checked': checked }\"\n class=\"checkbox-wrapper\"\n >\n <div class=\"checkbox-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :value=\"value\"\n type=\"checkbox\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"checkbox-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VCheckbox } from \"./index\";\nimport type { PropType } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: Object as PropType<Array<string>>,\n default: () => {\n return [];\n },\n },\n options: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(e: Event) {\n const { value, checked } = e.target as HTMLInputElement;\n const checkedValues = [...props.modelValue];\n\n if (checked) {\n checkedValues.push(value);\n } else {\n checkedValues.splice(checkedValues.indexOf(value), 1);\n }\n emit(\"update:modelValue\", checkedValues);\n emit(\"change\", checkedValues);\n}\n</script>\n<template>\n <div class=\"checkbox-group-wrapper\">\n <VCheckbox\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :checked=\"modelValue.includes(option[valueKey])\"\n :label=\"option[labelKey]\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\">\n.checkbox-group-wrapper {\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`input-${props.size}`];\n});\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"input-wrapper\">\n <div v-if=\"$slots.prefix\" class=\"input-prefix\">\n <slot name=\"prefix\" />\n </div>\n <input\n :class=\"classes\"\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :value=\"modelValue\"\n type=\"text\"\n @input=\"handleInput\"\n />\n <div v-if=\"$slots.suffix\" class=\"input-suffix\">\n <slot name=\"suffix\" />\n </div>\n </div>\n</template>\n\n<style lang=\"scss\">\n.input-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n input {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply resize-none;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.input-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.input-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.input-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.input-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n\n .input-prefix {\n position: absolute;\n display: flex;\n top: 50%;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n\n .input-suffix {\n position: absolute;\n display: flex;\n top: 50%;\n right: 0;\n transform: translateY(-50%);\n align-items: center;\n justify-content: center;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { provide } from \"vue\";\n\nconst props = defineProps({\n openIds: {\n type: Object as PropType<string[]>,\n required: false,\n },\n});\n\nprovide<string[] | undefined>(\"openIds\", props.openIds);\n</script>\n\n<template>\n <div class=\"menu-container w-full p-3\">\n <ul>\n <slot />\n </ul>\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport { IconArrowRight } from \"../../icons/icons\";\nimport { computed, inject, ref, useSlots } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n default: \"\",\n },\n title: {\n type: String,\n default: \"\",\n },\n active: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"select\"]);\n\nconst slots = useSlots();\n\nconst open = ref(false);\n\nconst openIds = inject<string[] | undefined>(\"openIds\");\n\nif (openIds?.includes(props.id)) {\n open.value = true;\n}\n\nconst hasSubmenus = computed(() => {\n return slots.default && slots.default().length > 0;\n});\n\nfunction handleClick() {\n if (hasSubmenus.value) {\n open.value = !open.value;\n return;\n }\n emit(\"select\", props.id);\n}\n</script>\n\n<template>\n <li\n :class=\"{ 'has-submenus': hasSubmenus }\"\n class=\"menu-item\"\n @click.stop=\"handleClick\"\n >\n <div :class=\"{ active }\" class=\"menu-item-title\">\n <span v-if=\"$slots.icon\" class=\"menu-icon mr-3 self-center\">\n <slot name=\"icon\" />\n </span>\n <span class=\"menu-title flex-1 self-center\">\n {{ title }}\n </span>\n <span\n v-if=\"$slots.default\"\n :class=\"{ open }\"\n class=\"menu-icon-collapse self-center transition-all\"\n >\n <IconArrowRight />\n </span>\n </div>\n\n <Transition name=\"submenus-show\">\n <ul v-show=\"$slots.default && open\" class=\"sub-menu-items transition-all\">\n <slot />\n </ul>\n </Transition>\n </li>\n</template>\n\n<style lang=\"scss\">\n.menu-item {\n @apply cursor-pointer;\n}\n\n.menu-item-title {\n @apply transition-all;\n @apply text-base;\n @apply flex;\n @apply select-none;\n @apply relative;\n @apply p-2;\n @apply font-normal;\n\n border-radius: 4px;\n\n &:hover,\n &.active {\n @apply bg-gray-100;\n @apply font-medium;\n }\n\n &.active::after {\n @apply absolute;\n top: calc(50% - 13px);\n left: -8px;\n width: 3px;\n height: 26px;\n content: \"\";\n background: #242e41;\n border-radius: 6px;\n }\n}\n\n.menu-icon-collapse.open {\n transform: rotate(90deg);\n}\n\n.submenus-show-enter-active {\n transition: all 0.1s ease-out;\n}\n\n.submenus-show-leave-active {\n transition: all 0.8s cubic-bezier(1, 0.5, 0.8, 1);\n}\n\n.submenus-show-enter-from,\n.submenus-show-enter-to {\n transform: translateY(-10px);\n opacity: 0;\n}\n</style>\n","import type { Component, PropType } from \"vue\";\nimport { computed, defineComponent } from \"vue\";\nimport type { MenuGroupType, MenuItemType } from \"./interface\";\nimport { VMenu, VMenuItem, VMenuLabel } from \"./index\";\nimport type { RouteLocationMatched } from \"vue-router\";\nimport { useRoute, useRouter } from \"vue-router\";\n\nconst VRoutesMenu = defineComponent({\n name: \"VRoutesMenu\",\n props: {\n menus: {\n type: Object as PropType<MenuGroupType[]>,\n },\n },\n emits: [\"select\"],\n setup(props, { emit }) {\n const route = useRoute();\n const { push } = useRouter();\n\n const openIds = computed(() => {\n return route.matched.map((item: RouteLocationMatched) => item.path);\n });\n\n async function handleSelect(id: string) {\n emit(\"select\", id);\n await push(id);\n }\n\n function renderIcon(icon: Component | undefined) {\n if (!icon) return undefined;\n\n return <icon height=\"20px\" width=\"20px\" />;\n }\n\n function renderItems(items: MenuItemType[] | undefined) {\n return items?.map((item) => {\n return (\n <>\n {item.children?.length ? (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n >\n {renderItems(item.children)}\n </VMenuItem>\n ) : (\n <VMenuItem\n key={item.path}\n id={item.path}\n title={item.name}\n v-slots={{\n icon: () => renderIcon(item.icon),\n }}\n onSelect={handleSelect}\n active={openIds.value.includes(item.path)}\n />\n )}\n </>\n );\n });\n }\n\n return () => (\n <VMenu openIds={openIds.value}>\n {props.menus?.map((menu: MenuGroupType) => {\n return (\n <>\n {menu.name && <VMenuLabel>{menu.name}</VMenuLabel>}\n {menu.items?.length && renderItems(menu.items)}\n </>\n );\n })}\n </VMenu>\n );\n },\n});\n\nexport { VRoutesMenu };\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport { IconClose } from \"../../icons/icons\";\n\nconst props = defineProps({\n visible: {\n type: Boolean,\n default: false,\n },\n title: {\n type: String,\n },\n width: {\n type: Number,\n default: 500,\n },\n fullscreen: {\n type: Boolean,\n default: false,\n },\n bodyClass: {\n type: Object as PropType<string[]>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst rootVisible = ref(false);\n\nconst wrapperClasses = computed(() => {\n return {\n \"modal-wrapper-fullscreen\": props.fullscreen,\n };\n});\n\nconst contentStyles = computed(() => {\n return {\n maxWidth: props.width + \"px\",\n };\n});\n\nfunction handleClose() {\n emit(\"update:visible\", false);\n emit(\"close\");\n}\n</script>\n<template>\n <Teleport to=\"body\" :disabled=\"true\">\n <div\n v-show=\"rootVisible\"\n :class=\"wrapperClasses\"\n aria-modal=\"true\"\n class=\"modal-wrapper\"\n role=\"dialog\"\n tabindex=\"0\"\n @keyup.esc=\"handleClose()\"\n >\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0\"\n enter-to-class=\"opacity-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100\"\n leave-to-class=\"opacity-0\"\n @before-enter=\"rootVisible = true\"\n @after-leave=\"rootVisible = false\"\n >\n <div v-show=\"visible\" class=\"modal-layer\" @click=\"handleClose()\" />\n </transition>\n <transition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-active-class=\"ease-in duration-100\"\n leave-from-class=\"opacity-100 translate-y-0 sm:scale-100\"\n leave-to-class=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n >\n <div\n v-show=\"visible\"\n :style=\"contentStyles\"\n class=\"modal-content transform transition-all\"\n >\n <div v-if=\"$slots.header || title\" class=\"modal-header\">\n <slot name=\"header\">\n <div class=\"modal-header-title\">{{ title }}</div>\n <div class=\"modal-header-actions flex flex-row\">\n <slot name=\"actions\"></slot>\n <div class=\"modal-header-action\" @click=\"handleClose()\">\n <IconClose />\n </div>\n </div>\n </slot>\n </div>\n <div :class=\"bodyClass\" class=\"modal-body\">\n <slot />\n </div>\n <div v-if=\"$slots.footer\" class=\"modal-footer\">\n <slot name=\"footer\" />\n </div>\n </div>\n </transition>\n </div>\n </Teleport>\n</template>\n\n<style lang=\"scss\">\n.modal-wrapper {\n @apply fixed;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply flex flex-row;\n @apply items-center justify-center;\n z-index: 999;\n\n .modal-layer {\n @apply flex-none;\n @apply absolute;\n @apply top-0 left-0;\n @apply h-full w-full;\n @apply transition-opacity;\n @apply bg-gray-500;\n @apply bg-opacity-75;\n }\n\n .modal-content {\n @apply flex;\n @apply flex-col;\n @apply relative;\n @apply bg-white;\n @apply items-stretch;\n @apply shadow-xl;\n width: calc(100vw - 20px);\n max-height: calc(100vh - 20px);\n border-radius: 4px;\n\n .modal-header {\n @apply flex;\n @apply justify-between;\n @apply border-b;\n\n .modal-header-title {\n @apply self-center;\n @apply text-base;\n @apply font-bold;\n padding: 12px 16px;\n }\n\n .modal-header-actions {\n @apply self-center;\n @apply h-full;\n .modal-header-action {\n @apply cursor-pointer;\n padding: 12px 16px;\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n }\n\n .modal-body {\n @apply overflow-y-auto overflow-x-hidden;\n @apply flex-1;\n word-wrap: break-word;\n padding: 12px 16px;\n }\n\n .modal-footer {\n @apply border-t;\n padding: 12px 16px;\n }\n }\n\n &.modal-wrapper-fullscreen {\n .modal-content {\n width: 100vw !important;\n max-width: 100vw !important;\n height: 100vh !important;\n max-height: 100vh !important;\n border-radius: 0;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n value: {\n type: [String, Number, Boolean],\n },\n label: {\n type: String,\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst id = [\"radio\", props.name, props.value]\n .filter((item) => !!item)\n .join(\"-\");\n\nconst checked = computed(() => props.modelValue === props.value);\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div :class=\"{ 'radio-wrapper-checked': checked }\" class=\"radio-wrapper\">\n <div class=\"radio-inner\">\n <input\n :id=\"id\"\n :checked=\"checked\"\n :name=\"name\"\n :value=\"value\"\n type=\"radio\"\n @change=\"handleChange\"\n />\n </div>\n <label v-if=\"label\" :for=\"id\" class=\"radio-label\">\n {{ label }}\n </label>\n </div>\n</template>\n<style lang=\"scss\">\n.radio-wrapper {\n @apply flex;\n @apply items-center;\n @apply box-border;\n @apply flex-grow-0;\n\n .radio-inner {\n @apply self-center;\n @apply relative;\n }\n\n .radio-label {\n @apply flex;\n @apply self-center;\n @apply items-start;\n @apply ml-3;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VRadio } from \"./index\";\nimport type { PropType } from \"vue\";\n\ndefineProps({\n modelValue: {\n type: [String, Number, Boolean],\n },\n options: {\n type: Object as PropType<Array<Record<string, string | number | boolean>>>,\n },\n valueKey: {\n type: String,\n default: \"value\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n name: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nfunction handleChange(value: string | number | boolean) {\n emit(\"update:modelValue\", value);\n emit(\"change\", value);\n}\n</script>\n<template>\n <div class=\"radio-group-wrapper\">\n <VRadio\n v-for=\"(option, index) in options\"\n :key=\"index\"\n :label=\"option[labelKey] + ''\"\n :model-value=\"modelValue\"\n :name=\"name\"\n :value=\"option[valueKey]\"\n @change=\"handleChange\"\n />\n </div>\n</template>\n<style lang=\"scss\"></style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Size } from \"./interface\";\n\nconst props = defineProps({\n modelValue: {\n type: String,\n },\n size: {\n type: String as PropType<Size>,\n default: \"md\",\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nconst classes = computed(() => {\n return [`select-${props.size}`];\n});\n\nfunction handleChange(e: Event) {\n const { value } = e.target as HTMLSelectElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"select-wrapper\">\n <select\n :class=\"classes\"\n :disabled=\"disabled\"\n :value=\"modelValue\"\n @change=\"handleChange\"\n >\n <option v-if=\"placeholder\" key=\"placeholder\" disabled hidden value=\"\">\n {{ placeholder }}\n </option>\n <slot />\n </select>\n </div>\n</template>\n<style lang=\"scss\">\n.select-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n\n select {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n\n &.select-lg {\n @apply h-11;\n @apply px-4;\n @apply text-lg;\n }\n\n &.select-md {\n @apply h-9;\n @apply px-3;\n @apply text-sm;\n }\n\n &.select-sm {\n @apply h-7;\n @apply px-3;\n @apply text-xs;\n }\n\n &.select-xs {\n @apply h-6;\n @apply px-2;\n @apply text-xs;\n }\n }\n}\n</style>\n","export type Spacing = \"xs\" | \"sm\" | \"md\" | \"lg\";\nexport type Direction = \"row\" | \"column\";\nexport type Align = \"start\" | \"end\" | \"center\" | \"stretch\";\nexport const SpacingSize: Record<string, number> = {\n xs: 10,\n sm: 12,\n md: 16,\n lg: 20,\n};\n","<script lang=\"ts\" setup>\nimport type { Align, Direction, Spacing } from \"./interface\";\nimport { SpacingSize } from \"./interface\";\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\n\nconst props = defineProps({\n spacing: {\n type: String as PropType<Spacing>,\n default: \"xs\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n align: {\n type: String as PropType<Align>,\n default: \"center\",\n },\n});\n\nconst wrapperClasses = computed(() => {\n const { direction, align } = props;\n return [`space-direction-${direction}`, `space-align-${align}`];\n});\n</script>\n<template>\n <div\n :class=\"wrapperClasses\"\n :style=\"`gap: ${SpacingSize[spacing]}px`\"\n class=\"space-wrapper\"\n >\n <slot />\n </div>\n</template>\n<style lang=\"scss\">\n.space-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n &.space-direction-row {\n @apply flex-row;\n }\n\n &.space-direction-column {\n @apply flex-col;\n }\n\n &.space-align-center {\n @apply items-center;\n }\n\n &.space-align-start {\n @apply items-start;\n }\n\n &.space-align-end {\n @apply items-end;\n }\n\n &.space-align-stretch {\n @apply items-stretch;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef, PropType } from \"vue\";\nimport { computed, provide, useSlots } from \"vue\";\nimport { VTabbar } from \"./index\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nprovide<ComputedRef<string | number | undefined>>(\n \"activeId\",\n computed(() => props.activeId)\n);\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst slots = useSlots();\n\nconst tabItems = computed(() => {\n return slots.default?.().map(({ props: slotProps }) => {\n return {\n id: slotProps?.[props.idKey],\n label: slotProps?.[props.labelKey],\n };\n });\n});\n\nconst classes = computed(() => {\n return [`tabs-direction-${props.direction}`];\n});\n\nconst handleChange = (id: string | number) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabs-wrapper\">\n <div class=\"tabs-bar-wrapper\">\n <VTabbar\n :activeId=\"activeId\"\n :direction=\"direction\"\n :items=\"tabItems\"\n :type=\"type\"\n @change=\"handleChange\"\n />\n </div>\n <div class=\"tabs-items-wrapper\">\n <slot />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabs-wrapper {\n @apply flex;\n\n &.tabs-direction-row {\n @apply flex-col;\n\n .tabs-items-wrapper {\n @apply mt-2;\n }\n }\n\n &.tabs-direction-column {\n .tabs-items-wrapper {\n @apply ml-2;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { ComputedRef } from \"vue\";\nimport { computed, inject } from \"vue\";\n\nconst props = defineProps({\n id: {\n type: String,\n },\n label: {\n type: String,\n },\n});\n\nconst activeId = inject<ComputedRef<string | number | undefined>>(\"activeId\");\n\nconst isActive = computed(() => {\n return activeId?.value === props.id;\n});\n</script>\n<template>\n <div v-if=\"isActive\" class=\"tabs-item-wrapper\">\n <slot />\n </div>\n</template>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Direction, Type } from \"./interface\";\n\nconst props = defineProps({\n activeId: {\n type: [Number, String],\n },\n items: {\n type: Object as PropType<Array<Record<string, string>>>,\n },\n type: {\n type: String as PropType<Type>,\n default: \"default\",\n },\n direction: {\n type: String as PropType<Direction>,\n default: \"row\",\n },\n idKey: {\n type: String,\n default: \"id\",\n },\n labelKey: {\n type: String,\n default: \"label\",\n },\n});\n\nconst emit = defineEmits([\"update:activeId\", \"change\"]);\n\nconst classes = computed(() => {\n return [`tabbar-${props.type}`, `tabbar-direction-${props.direction}`];\n});\n\nconst handleChange = (id: number | string) => {\n emit(\"update:activeId\", id);\n emit(\"change\", id);\n};\n</script>\n<template>\n <div :class=\"classes\" class=\"tabbar-wrapper\">\n <div class=\"tabbar-items\">\n <div\n v-for=\"(item, index) in items\"\n :key=\"index\"\n :class=\"{ 'tabbar-item-active': item[idKey] === activeId }\"\n class=\"tabbar-item\"\n @click=\"handleChange(item[idKey])\"\n >\n <div v-if=\"item.icon\" class=\"tabbar-item-icon\">\n <component :is=\"item.icon\" />\n </div>\n <div v-if=\"item[labelKey]\" class=\"tabbar-item-label\">\n {{ item[labelKey] }}\n </div>\n </div>\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tabbar-wrapper {\n .tabbar-items {\n @apply flex;\n @apply items-center;\n @apply flex-row;\n }\n\n .tabbar-item {\n @apply flex;\n @apply cursor-pointer;\n @apply self-center;\n @apply transition-all;\n @apply text-base;\n @apply justify-center;\n @apply gap-2;\n\n .tabbar-item-label,\n .tabbar-item-icon {\n @apply self-center;\n }\n }\n\n &.tabbar-default {\n border-bottom-width: 2px;\n @apply border-b-gray-100;\n\n .tabbar-items {\n margin-bottom: -2px;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-5;\n @apply py-1;\n @apply border-b-gray-100;\n\n border-bottom-width: 2px;\n\n &.tabbar-item-active {\n color: #0e1731;\n border-bottom-color: #0e1731;\n }\n }\n }\n\n &.tabbar-pills {\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-gray-100;\n @apply opacity-100;\n }\n\n &:hover {\n @apply bg-gray-100;\n }\n }\n }\n\n &.tabbar-outline {\n @apply p-1;\n @apply bg-gray-100;\n border-radius: 4px;\n\n .tabbar-items {\n @apply gap-1;\n justify-content: flex-start;\n }\n\n .tabbar-item {\n @apply h-10;\n @apply px-9;\n @apply py-1;\n @apply opacity-70;\n border-radius: 4px;\n\n &.tabbar-item-active {\n @apply bg-white;\n @apply opacity-100;\n @apply shadow-sm;\n }\n\n &:hover {\n @apply bg-white;\n }\n }\n }\n\n &.tabbar-direction-row {\n .tabbar-items {\n @apply flex-row;\n }\n }\n\n &.tabbar-direction-column {\n .tabbar-items {\n @apply flex-col;\n }\n\n &.tabbar-default {\n border-bottom-width: 0;\n @apply border-b-0;\n border-right-width: 2px;\n @apply border-r-gray-100;\n\n .tabbar-items {\n margin-bottom: 0;\n margin-right: -2px;\n }\n\n .tabbar-item {\n border-bottom-width: 0;\n border-right-width: 2px;\n\n &.tabbar-item-active {\n border-right-color: #0e1731;\n }\n }\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport type { PropType } from \"vue\";\nimport { computed } from \"vue\";\nimport type { Theme } from \"./interface\";\n\nconst props = defineProps({\n theme: {\n type: String as PropType<Theme>,\n default: \"default\",\n },\n rounded: {\n type: Boolean,\n default: false,\n },\n});\n\nconst classes = computed(() => {\n return [`tag-${props.theme}`, { \"tag-rounded\": props.rounded }];\n});\n</script>\n<template>\n <div :class=\"classes\" class=\"tag-wrapper\">\n <div v-if=\"$slots.leftIcon\" class=\"tag-left-icon\">\n <slot name=\"leftIcon\" />\n </div>\n <span class=\"tag-content\">\n <slot />\n </span>\n <div v-if=\"$slots.rightIcon\" class=\"tag-right-icon\">\n <slot name=\"rightIcon\" />\n </div>\n </div>\n</template>\n<style lang=\"scss\">\n.tag-wrapper {\n border-radius: 4px;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply flex-wrap;\n @apply box-border;\n @apply cursor-pointer;\n @apply text-center;\n @apply items-center;\n @apply justify-center;\n @apply w-auto;\n @apply align-middle;\n @apply h-5;\n @apply text-xs;\n\n &.tag-default {\n border: 1px solid #d9d9d9;\n }\n\n &.tag-primary {\n background: #4ccba0;\n border: 1px solid #4ccba0;\n @apply text-white;\n }\n\n &.tag-secondary {\n background: #0e1731;\n border: 1px solid #0e1731;\n @apply text-white;\n }\n\n &.tag-danger {\n background: #d71d1d;\n border: 1px solid #d71d1d;\n @apply text-white;\n }\n\n &.tag-rounded {\n @apply rounded-full;\n }\n\n .tag-content {\n @apply px-1;\n }\n\n .tag-left-icon {\n @apply pl-1;\n }\n\n .tag-right-icon {\n @apply pr-1;\n }\n}\n</style>\n","<script lang=\"ts\" setup>\ndefineProps({\n modelValue: {\n type: String,\n },\n disabled: {\n type: Boolean,\n default: false,\n },\n placeholder: {\n type: String,\n },\n rows: {\n type: Number,\n default: 3,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\"]);\n\nfunction handleInput(e: Event) {\n const { value } = e.target as HTMLInputElement;\n emit(\"update:modelValue\", value);\n}\n</script>\n<template>\n <div class=\"textarea-wrapper\">\n <textarea\n :disabled=\"disabled\"\n :placeholder=\"placeholder\"\n :rows=\"rows\"\n :value=\"modelValue\"\n @input=\"handleInput\"\n >\n </textarea>\n </div>\n</template>\n<style lang=\"scss\">\n.textarea-wrapper {\n @apply box-border;\n @apply relative;\n @apply w-full;\n @apply inline-flex;\n textarea {\n @apply outline-0;\n @apply bg-white;\n @apply antialiased;\n @apply w-full;\n @apply text-black;\n @apply block;\n @apply transition-all;\n @apply appearance-none;\n\n @apply p-3;\n @apply text-sm;\n border: 1px solid #ced4da;\n border-radius: 4px;\n\n &:active {\n border-color: #4ccba0;\n }\n\n &:focus {\n border-color: #4ccba0;\n }\n\n &:disabled {\n @apply opacity-50;\n @apply cursor-not-allowed;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nconst props = defineProps({\n modelValue: {\n type: Boolean,\n default: false,\n },\n});\n\nconst emit = defineEmits([\"update:modelValue\", \"change\"]);\n\nconst handleChange = () => {\n emit(\"update:modelValue\", !props.modelValue);\n emit(\"change\", !props.modelValue);\n};\n</script>\n<template>\n <div class=\"switch-wrapper\">\n <button\n :class=\"{\n 'bg-gray-200': !modelValue,\n '!bg-themeable-primary-600': modelValue,\n }\"\n aria-checked=\"false\"\n class=\"switch-inner\"\n role=\"switch\"\n type=\"button\"\n @click=\"handleChange\"\n >\n <span\n :class=\"{\n 'translate-x-0': !modelValue,\n 'translate-x-5': modelValue,\n }\"\n aria-hidden=\"true\"\n class=\"switch-indicator\"\n >\n <slot name=\"icon\" />\n </span>\n </button>\n </div>\n</template>\n<style lang=\"scss\">\n.switch-wrapper {\n @apply inline-flex;\n @apply box-border;\n\n .switch-inner {\n @apply relative;\n @apply inline-flex;\n @apply flex-shrink-0;\n @apply h-6;\n @apply w-11;\n @apply border-2;\n @apply border-transparent;\n @apply rounded-full;\n @apply cursor-pointer;\n @apply transition-colors;\n @apply ease-in-out;\n @apply duration-200;\n\n .switch-indicator {\n @apply pointer-events-none;\n @apply inline-block;\n @apply h-5;\n @apply w-5;\n @apply rounded-full;\n @apply bg-white;\n @apply shadow;\n @apply transform;\n @apply ring-0;\n @apply transition;\n @apply ease-in-out;\n @apply duration-200;\n }\n }\n}\n</style>\n","<script lang=\"ts\" setup>\nimport { VModal } from \"@/components/modal\";\nimport { VSpace } from \"@/components/space\";\nimport { VButton } from \"@/components/button\";\nimport {\n IconCheckboxCircle,\n IconClose,\n IconErrorWarning,\n IconForbidLine,\n IconInformation,\n} from \"@/icons/icons\";\nimport type { PropType } from \"vue\";\nimport { computed, ref } from \"vue\";\nimport type { Type } from \"@/components/dialog/interface\";\n\nconst props = defineProps({\n type: {\n type: String as PropType<Type>,\n default: \"info\",\n },\n title: {\n type: String,\n default: \"提示\",\n },\n description: {\n type: String,\n default: \"\",\n },\n confirmText: {\n type: String,\n default: \"确定\",\n },\n cancelText: {\n type: String,\n default: \"取消\",\n },\n visible: {\n type: Boolean,\n default: false,\n },\n onConfirm: {\n type: Function as PropType<() => void>,\n },\n onCancel: {\n type: Function as PropType<() => void>,\n },\n});\n\nconst emit = defineEmits([\"update:visible\", \"close\"]);\n\nconst icons = {\n success: {\n icon: IconCheckboxCircle,\n color: \"green\",\n },\n info: {\n icon: IconInformation,\n color: \"blue\",\n },\n warning: {\n icon: IconErrorWarning,\n color: \"orange\",\n },\n error: {\n icon: IconForbidLine,\n color: \"red\",\n },\n};\nconst icon = computed(() => icons[props.type]);\n\nconst loading = ref(false);\n\nconst handleCancel = () => {\n if (props.onCancel) {\n props.onCancel();\n }\n handleClose();\n};\n\nconst handleConfirm = async () => {\n if (props.onConfirm) {\n loading.value = true;\n await props.onConfirm();\n }\n handleClose();\n};\n\nconst handleClose = () => {\n loading.value = false;\n emit(\"update:visible\", false);\n emit(\"close\");\n};\n</script>\n<template>\n <VModal :visible=\"visible\" :width=\"450\" @close=\"handleCancel()\">\n <div class=\"flex justify-between items-start py-2 mb-2\">\n <div>\n <div\n :class=\"`ring-${icon.color}-100`\"\n class=\"inline-flex rounded-full bg-teal-50 p-1.5 ring-4\"\n >\n <component\n :is=\"icon.icon\"\n :class=\"`text-${icon.color}-500`\"\n class=\"w-5 h-5\"\n ></component>\n </div>\n </div>\n <div>\n <IconClose class=\"cursor-pointer\" @click=\"handleCancel\" />\n </div>\n </div>\n <div class=\"flex items-center gap-4\">\n <div class=\"flex-1 flex flex-col items-stretch gap-2\">\n <div class=\"text-base text-gray-900 font-bold\">{{ title }}</div>\n <div class=\"text-sm text-gray-700\">{{ description }}</div>\n </div>\n </div>\n <template #footer>\n <VSpace>\n <VButton :loading=\"loading\" type=\"secondary\" @click=\"handleConfirm\">\n {{ confirmText }}\n </VButton>\n <VButton @click=\"handleCancel\">{{ cancelText }}</VButton>\n </VSpace>\n </template>\n </VModal>\n</template>\n","export type Type = \"success\" | \"info\" | \"warning\" | \"error\";\nexport const DialogProviderProvideKey = \"DIALOG_PROVIDER_PROVIDE_KEY\";\n\nexport interface useDialogOptions {\n type?: Type;\n visible: boolean;\n title: string;\n description?: string;\n confirmText?: string;\n cancelText?: string;\n onConfirm?: () => void;\n onCancel?: () => void;\n}\n\nexport type useDialogUserOptions = Omit<useDialogOptions, \"type\" | \"visible\">;\n","<script lang=\"ts\" setup>\nimport { VDialog } from \"./index\";\nimport { provide, ref } from \"vue\";\nimport type { useDialogOptions } from \"./interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\nconst options = ref<useDialogOptions>({\n visible: false,\n title: \"\",\n});\n\nprovide(DialogProviderProvideKey, options);\n</script>\n<template>\n <slot />\n <VDialog\n v-model:visible=\"options.visible\"\n :cancel-text=\"options.cancelText\"\n :confirm-text=\"options.confirmText\"\n :description=\"options.description\"\n :onCancel=\"options.onCancel\"\n :onConfirm=\"options.onConfirm\"\n :title=\"options.title\"\n :type=\"options.type\"\n ></VDialog>\n</template>\n","import type { Ref } from \"vue\";\nimport { inject } from \"vue\";\nimport type {\n Type,\n useDialogOptions,\n useDialogUserOptions,\n} from \"@/components/dialog/interface\";\nimport { DialogProviderProvideKey } from \"@/components/dialog/interface\";\n\ninterface useDialogReturn {\n success: (options: useDialogUserOptions) => void;\n info: (options: useDialogUserOptions) => void;\n warning: (options: useDialogUserOptions) => void;\n error: (options: useDialogUserOptions) => void;\n}\n\nexport function useDialog(): useDialogReturn {\n const dialogOptions = inject<Ref<useDialogOptions>>(DialogProviderProvideKey);\n\n if (!dialogOptions) {\n throw new Error(\"DialogProvider is not mounted\");\n }\n\n const createDialog = (type: Type) => (options: useDialogUserOptions) => {\n dialogOptions.value = { ...dialogOptions.value, ...options };\n dialogOptions.value.type = type;\n dialogOptions.value.visible = true;\n };\n\n return {\n success: createDialog(\"success\"),\n info: createDialog(\"info\"),\n warning: createDialog(\"warning\"),\n error: createDialog(\"error\"),\n };\n}\n"],"names":["computed","useRouter","provide","useSlots","ref","inject","VRoutesMenu","defineComponent","name","props","menus","type","Object","emits","setup","emit","route","useRoute","push","openIds","matched","map","item","path","handleSelect","id","renderIcon","icon","_createVNode","renderItems","items","_Fragment","children","length","VMenuItem","value","includes","VMenu","menu"],"mappings":"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"}