vlite3 1.2.2 → 1.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -7
- package/components/AppShell/AppShellLayoutDashboard.vue.js +1 -1
- package/components/AppShell/AppShellLayoutHeaderShell.vue.js +1 -1
- package/components/AsyncSelect/createAsyncSelect.d.ts +88 -0
- package/components/AsyncSelect/createAsyncSelect.js +156 -0
- package/components/AsyncSelect/index.d.ts +1 -0
- package/components/AvatarGroup/AvatarGroup.vue.js +10 -9
- package/components/Beacon.vue.d.ts +13 -0
- package/components/CategoryManager/CategoryManager.vue.js +1 -1
- package/components/ChoiceBox/ChoiceBox.vue.js +4 -2
- package/components/{CopyButton.vue.d.ts → Clipboard.vue.d.ts} +4 -3
- package/components/{CopyButton.vue.js → Clipboard.vue.js} +19 -19
- package/components/Clipboard.vue2.js +4 -0
- package/components/ColorPicker/ColorIro.vue3.js +2 -2
- package/components/ColorPicker/ColorPicker.vue.js +2 -2
- package/components/CommandPalette/CommandPaletteContent.vue2.js +1 -1
- package/components/CommandPalette/{CommandPaletteItem.vue.js → CommandPaletteItem.vue2.js} +1 -1
- package/components/DataTable/types.d.ts +1 -1
- package/components/Form/Form.vue.js +1 -1
- package/components/Form/Form.vue2.js +1 -1
- package/components/List/ListFieldRow.vue.js +221 -144
- package/components/Modal.vue.js +1 -1
- package/components/Modal.vue2.js +92 -86
- package/components/NavbarCommandPalette.vue.js +1 -1
- package/components/Persona.vue.d.ts +25 -0
- package/components/Price/Price.vue.d.ts +1 -1
- package/components/Price/Price.vue.js +35 -13
- package/components/Rating/Rating.vue.d.ts +43 -0
- package/components/Rating/Rating.vue.js +7 -0
- package/components/Rating/Rating.vue2.js +92 -0
- package/components/Rating/ReviewSummary.vue.d.ts +5 -0
- package/components/Rating/ReviewSummary.vue.js +67 -0
- package/components/Rating/ReviewSummary.vue2.js +4 -0
- package/components/Rating/index.d.ts +3 -0
- package/components/Rating/types.d.ts +28 -0
- package/components/Screen/Screen.vue.d.ts +2 -2
- package/components/Screen/Screen.vue.js +3 -1
- package/components/Screen/ScreenFilter.vue.js +1 -1
- package/components/SidePanel.vue.js +3 -3
- package/components/SidePanel.vue2.js +44 -56
- package/components/SidebarMenu/SidebarMenu.vue.js +1 -1
- package/components/SidebarMenu/SidebarMenuItem.vue.d.ts +3 -1
- package/components/SidebarMenu/SidebarMenuItem.vue.js +197 -178
- package/components/Stats/StatItem.vue.js +222 -164
- package/components/Stats/components/StatIconBox.vue.js +42 -42
- package/components/Stats/components/StatTrend.vue.js +20 -20
- package/components/ThemeToggle.vue.js +10 -10
- package/components/Timeline/Timeline.vue.js +21 -11
- package/components/Timeline/TimelineItem.vue.js +1 -1
- package/components/index.d.ts +2 -0
- package/index.d.ts +3 -1
- package/index.js +113 -107
- package/package.json +2 -1
- package/style.css +47 -32
- package/utils/status.js +16 -16
- package/components/CopyButton.vue2.js +0 -4
- /package/components/ColorPicker/{ColorIro.vue.js → ColorIro.vue2.js} +0 -0
package/README.md
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Vlite3: The Foundation for Enterprise SaaS
|
|
2
2
|
|
|
3
|
-
A
|
|
3
|
+
A clean, modular, and highly customizable component library for Vue 3. Build large, complex applications with confidence. Vlite3 gives you the solid, Vlite3 delivers 80+ production-ready components designed for real-world enterprise applications. Each component has been thoroughly tested in demanding enterprise production environments, ensuring stability, scalability, and performance.
|
|
4
|
+
|
|
5
|
+
Created for personal projects and available for anyone to use.
|
|
6
|
+
|
|
7
|
+
## Demo
|
|
8
|
+
|
|
9
|
+
[Live Demo](https://vlite3.vercel.app/)
|
|
4
10
|
|
|
5
11
|
## Installation
|
|
6
12
|
|
|
@@ -14,10 +20,6 @@ yarn add vlite3
|
|
|
14
20
|
|
|
15
21
|
```
|
|
16
22
|
|
|
17
|
-
## Demo
|
|
18
|
-
|
|
19
|
-
[Live Demo](https://vlite3.vercel.app/)
|
|
20
|
-
|
|
21
23
|
## 2. Tailwind CSS Setup (Tailwind v4)
|
|
22
24
|
|
|
23
25
|
`vite.config.ts`
|
|
@@ -407,6 +409,8 @@ Follow these rules strictly to ensure visual consistency and predictable styling
|
|
|
407
409
|
- [x] **Screen**
|
|
408
410
|
- [x] **ChatInterface**
|
|
409
411
|
- [x] **CommentThread**
|
|
412
|
+
- [x] **Clipboard**
|
|
413
|
+
- [x] **AppShell**
|
|
410
414
|
|
|
411
415
|
### Inputs & Forms
|
|
412
416
|
|
|
@@ -431,11 +435,13 @@ Follow these rules strictly to ensure visual consistency and predictable styling
|
|
|
431
435
|
- [x] **CustomFields**
|
|
432
436
|
- [x] **GoogleLogin**
|
|
433
437
|
- [x] **PermissionEditor**
|
|
438
|
+
- [x] **Rating**
|
|
434
439
|
- [x] **RichTextEditor**
|
|
435
440
|
|
|
436
441
|
### Data Display
|
|
437
442
|
|
|
438
443
|
- [x] **Avatar**
|
|
444
|
+
- [x] **Persona**
|
|
439
445
|
- [x] **Accordion**
|
|
440
446
|
- [x] **Carousel**
|
|
441
447
|
- [x] **DataTable**
|
|
@@ -459,6 +465,7 @@ Follow these rules strictly to ensure visual consistency and predictable styling
|
|
|
459
465
|
### Feedback & Overlays
|
|
460
466
|
|
|
461
467
|
- [x] **Alert**
|
|
468
|
+
- [x] **Beacon**
|
|
462
469
|
- [x] **Modal**
|
|
463
470
|
- [x] **Empty**
|
|
464
471
|
- [x] **ConfirmationModal**
|
|
@@ -484,7 +491,11 @@ Follow these rules strictly to ensure visual consistency and predictable styling
|
|
|
484
491
|
- [0-setup.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/0-vlite3-setup.md)
|
|
485
492
|
- [1-theming.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/1-theming.md)
|
|
486
493
|
- [2-components.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/2-all-components.md)
|
|
487
|
-
- [3-forms.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/
|
|
494
|
+
- [3-forms.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/1-Components/Forms.md)
|
|
488
495
|
- [3-utility.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/3-utility.md)
|
|
489
496
|
- [4-i18n.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/4-i18n.md)
|
|
490
497
|
- [5-search-util.md](https://github.com/safdar-azeem/vlite3/blob/main/docs/5-search-util.md)
|
|
498
|
+
|
|
499
|
+
## Author
|
|
500
|
+
|
|
501
|
+
[safdar-azeem](https://github.com/safdar-azeem)
|
|
@@ -119,7 +119,7 @@ const D = { class: "vlite-app-layout flex flex-row w-full h-full bg-muted/20 p-0
|
|
|
119
119
|
ref_key: "mainScrollRef",
|
|
120
120
|
ref: S,
|
|
121
121
|
style: { "will-change": "transform", contain: "layout style" },
|
|
122
|
-
class: "flex-1 overflow-y-auto
|
|
122
|
+
class: "flex-1 overflow-y-auto w-full relative h-full scrollbar-thin scrollbar-stable"
|
|
123
123
|
}, [
|
|
124
124
|
l(s.$slots, "main")
|
|
125
125
|
], 512)
|
|
@@ -121,7 +121,7 @@ const H = { class: "vlite-app-layout flex flex-row w-full h-full bg-background o
|
|
|
121
121
|
ref_key: "mainScrollRef",
|
|
122
122
|
ref: S,
|
|
123
123
|
style: { "will-change": "transform", contain: "layout style" },
|
|
124
|
-
class: "flex-1 overflow-y-auto w-full relative h-full scrollbar-thin scrollbar-stable
|
|
124
|
+
class: "flex-1 overflow-y-auto w-full relative h-full scrollbar-thin scrollbar-stable"
|
|
125
125
|
}, [
|
|
126
126
|
l(s.$slots, "main")
|
|
127
127
|
], 512)
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { PropType } from 'vue';
|
|
2
|
+
export interface SelectOption<T = unknown> {
|
|
3
|
+
label: string;
|
|
4
|
+
value: string | number;
|
|
5
|
+
subtitle?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
icon?: string;
|
|
8
|
+
data?: T;
|
|
9
|
+
}
|
|
10
|
+
export type OptionsMapper<T> = (item: T) => SelectOption<T> | null | undefined;
|
|
11
|
+
export interface CreateSelectConfig<T = any> {
|
|
12
|
+
name: string;
|
|
13
|
+
useQuery: any;
|
|
14
|
+
queryName: string;
|
|
15
|
+
labelKey?: keyof T | ((item: T) => string);
|
|
16
|
+
subtitleKey?: keyof T | ((item: T) => string);
|
|
17
|
+
descriptionKey?: keyof T | ((item: T) => string);
|
|
18
|
+
valueKey?: keyof T;
|
|
19
|
+
iconKey?: keyof T | ((item: T) => string);
|
|
20
|
+
searchable?: boolean;
|
|
21
|
+
remote?: boolean;
|
|
22
|
+
multiple?: boolean;
|
|
23
|
+
optionsMapper?: OptionsMapper<T>;
|
|
24
|
+
}
|
|
25
|
+
export declare const createAsyncSelect: <T extends {
|
|
26
|
+
id?: string | number;
|
|
27
|
+
}>(config: CreateSelectConfig<T>) => import('vue').DefineComponent<import('vue').ExtractPropTypes<{
|
|
28
|
+
value: {
|
|
29
|
+
type: (ObjectConstructor | ArrayConstructor | BooleanConstructor | NumberConstructor | StringConstructor)[];
|
|
30
|
+
};
|
|
31
|
+
modelValue: {
|
|
32
|
+
type: (ObjectConstructor | ArrayConstructor | BooleanConstructor | NumberConstructor | StringConstructor)[];
|
|
33
|
+
};
|
|
34
|
+
multiple: {
|
|
35
|
+
type: BooleanConstructor;
|
|
36
|
+
default: boolean;
|
|
37
|
+
};
|
|
38
|
+
placeholder: {
|
|
39
|
+
type: StringConstructor;
|
|
40
|
+
default: string;
|
|
41
|
+
};
|
|
42
|
+
filter: {
|
|
43
|
+
type: ObjectConstructor;
|
|
44
|
+
default: () => {};
|
|
45
|
+
};
|
|
46
|
+
disabled: {
|
|
47
|
+
type: BooleanConstructor;
|
|
48
|
+
default: boolean;
|
|
49
|
+
};
|
|
50
|
+
optionsMapper: {
|
|
51
|
+
type: PropType<OptionsMapper<T>>;
|
|
52
|
+
};
|
|
53
|
+
}>, () => import("vue/jsx-runtime").JSX.Element, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, ("onChange" | "change" | "update:modelValue")[], "onChange" | "change" | "update:modelValue", import('vue').PublicProps, Readonly<import('vue').ExtractPropTypes<{
|
|
54
|
+
value: {
|
|
55
|
+
type: (ObjectConstructor | ArrayConstructor | BooleanConstructor | NumberConstructor | StringConstructor)[];
|
|
56
|
+
};
|
|
57
|
+
modelValue: {
|
|
58
|
+
type: (ObjectConstructor | ArrayConstructor | BooleanConstructor | NumberConstructor | StringConstructor)[];
|
|
59
|
+
};
|
|
60
|
+
multiple: {
|
|
61
|
+
type: BooleanConstructor;
|
|
62
|
+
default: boolean;
|
|
63
|
+
};
|
|
64
|
+
placeholder: {
|
|
65
|
+
type: StringConstructor;
|
|
66
|
+
default: string;
|
|
67
|
+
};
|
|
68
|
+
filter: {
|
|
69
|
+
type: ObjectConstructor;
|
|
70
|
+
default: () => {};
|
|
71
|
+
};
|
|
72
|
+
disabled: {
|
|
73
|
+
type: BooleanConstructor;
|
|
74
|
+
default: boolean;
|
|
75
|
+
};
|
|
76
|
+
optionsMapper: {
|
|
77
|
+
type: PropType<OptionsMapper<T>>;
|
|
78
|
+
};
|
|
79
|
+
}>> & Readonly<{
|
|
80
|
+
onChange?: (...args: any[]) => any;
|
|
81
|
+
"onUpdate:modelValue"?: (...args: any[]) => any;
|
|
82
|
+
onOnChange?: (...args: any[]) => any;
|
|
83
|
+
}>, {
|
|
84
|
+
filter: Record<string, any>;
|
|
85
|
+
placeholder: string;
|
|
86
|
+
disabled: boolean;
|
|
87
|
+
multiple: boolean;
|
|
88
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
import { defineComponent as q, ref as m, computed as s, watch as _, createVNode as w, mergeProps as I, nextTick as j } from "vue";
|
|
2
|
+
import k from "../Dropdown/Dropdown.vue.js";
|
|
3
|
+
import "@iconify/vue";
|
|
4
|
+
import "../../core/config.js";
|
|
5
|
+
/* empty css */
|
|
6
|
+
/* empty css */
|
|
7
|
+
import x from "../MultiSelect/MultiSelect.vue.js";
|
|
8
|
+
const z = (t) => /* @__PURE__ */ q({
|
|
9
|
+
name: t.name,
|
|
10
|
+
inheritAttrs: !1,
|
|
11
|
+
props: {
|
|
12
|
+
value: {
|
|
13
|
+
type: [String, Array, Number, Object, Boolean]
|
|
14
|
+
},
|
|
15
|
+
modelValue: {
|
|
16
|
+
type: [String, Array, Number, Object, Boolean]
|
|
17
|
+
},
|
|
18
|
+
multiple: {
|
|
19
|
+
type: Boolean,
|
|
20
|
+
default: t.multiple || !1
|
|
21
|
+
},
|
|
22
|
+
placeholder: {
|
|
23
|
+
type: String,
|
|
24
|
+
default: "Select..."
|
|
25
|
+
},
|
|
26
|
+
filter: {
|
|
27
|
+
type: Object,
|
|
28
|
+
default: () => ({})
|
|
29
|
+
},
|
|
30
|
+
disabled: {
|
|
31
|
+
type: Boolean,
|
|
32
|
+
default: !1
|
|
33
|
+
},
|
|
34
|
+
optionsMapper: {
|
|
35
|
+
type: Function
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
emits: ["onChange", "update:modelValue", "change"],
|
|
39
|
+
setup(l, {
|
|
40
|
+
attrs: M,
|
|
41
|
+
emit: c
|
|
42
|
+
}) {
|
|
43
|
+
const i = m([]), d = m(1), f = m(""), N = 20, h = s(() => l.value !== void 0 ? l.value : l.modelValue), v = s(() => l.optionsMapper || t.optionsMapper), B = s(() => ({
|
|
44
|
+
pagination: {
|
|
45
|
+
page: d.value,
|
|
46
|
+
limit: N
|
|
47
|
+
},
|
|
48
|
+
search: f.value || void 0,
|
|
49
|
+
filter: {
|
|
50
|
+
...l.filter
|
|
51
|
+
}
|
|
52
|
+
})), {
|
|
53
|
+
result: b,
|
|
54
|
+
loading: K,
|
|
55
|
+
refetch: g
|
|
56
|
+
} = t.useQuery(B, {
|
|
57
|
+
notifyOnNetworkStatusChange: !0,
|
|
58
|
+
fetchPolicy: "cache-and-network"
|
|
59
|
+
}), A = s(() => {
|
|
60
|
+
const e = b.value?.[t.queryName]?.pageInfo;
|
|
61
|
+
return e ? e.currentPage < e.totalPages : !1;
|
|
62
|
+
});
|
|
63
|
+
_(() => b.value?.[t.queryName], (e) => {
|
|
64
|
+
if (!e) return;
|
|
65
|
+
const n = Array.isArray(e) ? e : e.items;
|
|
66
|
+
if (n)
|
|
67
|
+
if (d.value === 1)
|
|
68
|
+
i.value = [...n];
|
|
69
|
+
else {
|
|
70
|
+
const u = new Set(i.value.map((a) => a.id)), r = n.filter((a) => !u.has(a.id));
|
|
71
|
+
i.value.push(...r);
|
|
72
|
+
}
|
|
73
|
+
}, {
|
|
74
|
+
immediate: !0
|
|
75
|
+
});
|
|
76
|
+
const S = (e) => {
|
|
77
|
+
if (v.value)
|
|
78
|
+
return v.value(e);
|
|
79
|
+
const n = typeof t.labelKey == "function" ? t.labelKey(e) : e[t.labelKey || "name"], u = typeof t.subtitleKey == "function" ? t.subtitleKey(e) : e[t.subtitleKey || ""], r = typeof t.descriptionKey == "function" ? t.descriptionKey(e) : e[t.descriptionKey || ""], a = t.iconKey ? typeof t.iconKey == "function" ? t.iconKey(e) : e[t.iconKey] : void 0;
|
|
80
|
+
return {
|
|
81
|
+
label: n,
|
|
82
|
+
subtitle: u || void 0,
|
|
83
|
+
description: r || void 0,
|
|
84
|
+
value: e[t.valueKey || "id"],
|
|
85
|
+
icon: a || void 0,
|
|
86
|
+
data: e
|
|
87
|
+
};
|
|
88
|
+
}, p = s(() => i.value.map(S).filter(Boolean)), y = (e, n) => {
|
|
89
|
+
let u = n;
|
|
90
|
+
l.multiple && Array.isArray(e) && (u = e.map((a) => {
|
|
91
|
+
const o = p.value.find((V) => V.value === a);
|
|
92
|
+
return o ? o.data : null;
|
|
93
|
+
}).filter(Boolean));
|
|
94
|
+
const r = {
|
|
95
|
+
value: e,
|
|
96
|
+
data: u
|
|
97
|
+
};
|
|
98
|
+
c("update:modelValue", e), c("change", r), c("onChange", r);
|
|
99
|
+
}, C = (e) => {
|
|
100
|
+
f.value = e, d.value = 1;
|
|
101
|
+
}, O = () => {
|
|
102
|
+
!A.value || K.value || d.value++;
|
|
103
|
+
}, P = async (e) => {
|
|
104
|
+
const n = (Array.isArray(e) ? e : [e]).filter((a) => (typeof a == "string" || typeof a == "number") && a !== "");
|
|
105
|
+
if (n.length === 0) return [];
|
|
106
|
+
await j();
|
|
107
|
+
const u = new Set(p.value.map((a) => a.value)), r = n.filter((a) => !u.has(a));
|
|
108
|
+
if (r.length === 0) return [];
|
|
109
|
+
try {
|
|
110
|
+
const {
|
|
111
|
+
data: a
|
|
112
|
+
} = await g({
|
|
113
|
+
pagination: {
|
|
114
|
+
page: 1,
|
|
115
|
+
limit: r.length
|
|
116
|
+
},
|
|
117
|
+
filter: {
|
|
118
|
+
...l.filter,
|
|
119
|
+
ids: r
|
|
120
|
+
}
|
|
121
|
+
}), o = a?.[t.queryName];
|
|
122
|
+
return (Array.isArray(o) ? o : o?.items || []).map(S).filter(Boolean);
|
|
123
|
+
} catch (a) {
|
|
124
|
+
return console.error(`[${t.name}] Hydration failed`, a), [];
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
return () => {
|
|
128
|
+
const e = {
|
|
129
|
+
options: p.value,
|
|
130
|
+
loading: K.value,
|
|
131
|
+
searchable: t.searchable ?? !0,
|
|
132
|
+
remote: t.remote ?? !0,
|
|
133
|
+
hasMore: A.value,
|
|
134
|
+
placeholder: l.placeholder,
|
|
135
|
+
disabled: l.disabled,
|
|
136
|
+
fetchSelected: P,
|
|
137
|
+
onSearch: C,
|
|
138
|
+
onLoadMore: O,
|
|
139
|
+
...M
|
|
140
|
+
};
|
|
141
|
+
return l.multiple ? w(x, I(e, {
|
|
142
|
+
modelValue: h.value,
|
|
143
|
+
"onUpdate:modelValue": (n) => y(n),
|
|
144
|
+
onChange: (n) => y(n)
|
|
145
|
+
}), null) : w(k, I(e, {
|
|
146
|
+
showSelectedIcon: !0,
|
|
147
|
+
emptyMessage: "Data not found",
|
|
148
|
+
modelValue: h.value,
|
|
149
|
+
onOnSelect: (n) => y(n.value, n.data)
|
|
150
|
+
}), null);
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
export {
|
|
155
|
+
z as createAsyncSelect
|
|
156
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './createAsyncSelect';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { defineComponent as k, computed as u, openBlock as l, createElementBlock as s, normalizeClass as a, Fragment as z, renderList as b, createVNode as f, withCtx as x, createElementVNode as
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
const
|
|
1
|
+
import { defineComponent as k, computed as u, openBlock as l, createElementBlock as s, normalizeClass as a, Fragment as z, renderList as b, createVNode as f, withCtx as x, createElementVNode as p, toDisplayString as r, createCommentVNode as o, normalizeStyle as y } from "vue";
|
|
2
|
+
import C from "../Avatar.vue.js";
|
|
3
|
+
import w from "../Tooltip.vue.js";
|
|
4
|
+
const S = { class: "flex flex-col gap-0.5 text-left" }, N = {
|
|
5
5
|
key: 0,
|
|
6
6
|
class: "font-semibold text-sm text-tooltip-foreground"
|
|
7
7
|
}, V = {
|
|
@@ -44,18 +44,19 @@ const w = { class: "flex flex-col gap-0.5 text-left" }, N = {
|
|
|
44
44
|
key: c,
|
|
45
45
|
class: a([c !== 0 ? m[e.overlap] : "", "relative shrink-0"])
|
|
46
46
|
}, [
|
|
47
|
-
f(
|
|
47
|
+
f(w, {
|
|
48
48
|
disabled: !t.heading && !t.text,
|
|
49
|
-
placement: "top"
|
|
49
|
+
placement: "top",
|
|
50
|
+
contentClass: "min-w-[100px] px-10!"
|
|
50
51
|
}, {
|
|
51
52
|
content: x(() => [
|
|
52
|
-
|
|
53
|
+
p("div", S, [
|
|
53
54
|
t.heading ? (l(), s("span", N, r(t.heading), 1)) : o("", !0),
|
|
54
55
|
t.text ? (l(), s("span", V, r(t.text), 1)) : o("", !0)
|
|
55
56
|
])
|
|
56
57
|
]),
|
|
57
58
|
default: x(() => [
|
|
58
|
-
f(
|
|
59
|
+
f(C, {
|
|
59
60
|
src: t.src,
|
|
60
61
|
alt: t.alt,
|
|
61
62
|
fallback: t.fallback,
|
|
@@ -76,7 +77,7 @@ const w = { class: "flex flex-col gap-0.5 text-left" }, N = {
|
|
|
76
77
|
g,
|
|
77
78
|
e.rounded === "full" ? "rounded-full" : e.rounded === "none" ? "rounded-none" : `rounded-${e.rounded}`
|
|
78
79
|
]),
|
|
79
|
-
style:
|
|
80
|
+
style: y({
|
|
80
81
|
// Match the same size as Avatar sizeClasses
|
|
81
82
|
width: i[e.size],
|
|
82
83
|
height: i[e.size],
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type BeaconVariant = 'primary' | 'danger' | 'warning' | 'success' | 'info';
|
|
2
|
+
export type BeaconSize = 'sm' | 'md' | 'lg';
|
|
3
|
+
interface Props {
|
|
4
|
+
variant?: BeaconVariant | string;
|
|
5
|
+
size?: BeaconSize | string;
|
|
6
|
+
class?: any;
|
|
7
|
+
}
|
|
8
|
+
declare const _default: import('vue').DefineComponent<Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<Props> & Readonly<{}>, {
|
|
9
|
+
class: any;
|
|
10
|
+
variant: BeaconVariant | string;
|
|
11
|
+
size: BeaconSize | string;
|
|
12
|
+
}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, HTMLSpanElement>;
|
|
13
|
+
export default _default;
|
|
@@ -15,7 +15,7 @@ const E = { class: "w-full" }, S = {
|
|
|
15
15
|
class: "shrink-0 pt-0.5"
|
|
16
16
|
}, L = { class: "flex flex-col" }, M = { class: "flex items-center gap-2" }, G = {
|
|
17
17
|
key: 0,
|
|
18
|
-
class: "mt-
|
|
18
|
+
class: "mt-0.5 -text-fs-3 text-muted leading-relaxed"
|
|
19
19
|
}, H = {
|
|
20
20
|
key: 0,
|
|
21
21
|
class: "absolute top-4 right-4 text-primary"
|
|
@@ -35,7 +35,9 @@ const E = { class: "w-full" }, S = {
|
|
|
35
35
|
},
|
|
36
36
|
emits: ["update:modelValue", "change"],
|
|
37
37
|
setup(g, { emit: _ }) {
|
|
38
|
-
const s = g, x = _, f = m(() => s.titleI18n ? u(s.titleI18n) : s.title), p = m(
|
|
38
|
+
const s = g, x = _, f = m(() => s.titleI18n ? u(s.titleI18n) : s.title), p = m(
|
|
39
|
+
() => s.descriptionI18n ? u(s.descriptionI18n) : s.description
|
|
40
|
+
), k = (t) => t.titleI18n ? u(t.titleI18n) : t.title, I = (t) => t.descriptionI18n ? u(t.descriptionI18n) : t.description, w = (t) => t.badgeI18n ? u(t.badgeI18n) : t.badge, d = (t) => Array.isArray(s.modelValue) ? s.modelValue.includes(t) : s.modelValue === t, b = (t) => {
|
|
39
41
|
if (s.disabled || s.options.find((l) => l.id === t)?.disabled) return;
|
|
40
42
|
let e;
|
|
41
43
|
if (s.multiple) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ButtonVariant, ButtonSize, ButtonRounded } from '../types';
|
|
2
|
-
export interface
|
|
2
|
+
export interface ClipboardProps {
|
|
3
3
|
/** The content to be copied to the clipboard */
|
|
4
4
|
textToCopy: string;
|
|
5
5
|
variant?: ButtonVariant;
|
|
@@ -26,15 +26,16 @@ declare function __VLS_template(): {
|
|
|
26
26
|
rootEl: HTMLButtonElement;
|
|
27
27
|
};
|
|
28
28
|
type __VLS_TemplateResult = ReturnType<typeof __VLS_template>;
|
|
29
|
-
declare const __VLS_component: import('vue').DefineComponent<
|
|
29
|
+
declare const __VLS_component: import('vue').DefineComponent<ClipboardProps, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {} & {
|
|
30
30
|
copy: (text: string) => any;
|
|
31
31
|
error: (err: Error) => any;
|
|
32
|
-
}, string, import('vue').PublicProps, Readonly<
|
|
32
|
+
}, string, import('vue').PublicProps, Readonly<ClipboardProps> & Readonly<{
|
|
33
33
|
onCopy?: (text: string) => any;
|
|
34
34
|
onError?: (err: Error) => any;
|
|
35
35
|
}>, {
|
|
36
36
|
variant: ButtonVariant;
|
|
37
37
|
size: ButtonSize;
|
|
38
|
+
rounded: ButtonRounded;
|
|
38
39
|
asIcon: boolean;
|
|
39
40
|
defaultIcon: string;
|
|
40
41
|
copiedIcon: string;
|
|
@@ -1,61 +1,61 @@
|
|
|
1
|
-
import { defineComponent as f, ref as p, computed as
|
|
1
|
+
import { defineComponent as f, ref as p, computed as i, openBlock as m, createBlock as x, normalizeClass as T, withCtx as v, renderSlot as y, createCommentVNode as I } from "vue";
|
|
2
2
|
import C from "./Button.vue.js";
|
|
3
|
-
import { $t as
|
|
4
|
-
const
|
|
5
|
-
__name: "
|
|
3
|
+
import { $t as d } from "../utils/i18n.js";
|
|
4
|
+
const w = /* @__PURE__ */ f({
|
|
5
|
+
__name: "Clipboard",
|
|
6
6
|
props: {
|
|
7
7
|
textToCopy: {},
|
|
8
8
|
variant: { default: "outline" },
|
|
9
9
|
size: { default: "md" },
|
|
10
|
-
rounded: {},
|
|
10
|
+
rounded: { default: "full" },
|
|
11
11
|
class: {},
|
|
12
12
|
disabled: { type: Boolean },
|
|
13
13
|
defaultIcon: { default: "lucide:copy" },
|
|
14
14
|
copiedIcon: { default: "lucide:check" },
|
|
15
15
|
defaultText: {},
|
|
16
16
|
copiedText: {},
|
|
17
|
-
defaultTextI18n: { default: "vlite.
|
|
18
|
-
copiedTextI18n: { default: "vlite.
|
|
17
|
+
defaultTextI18n: { default: "vlite.clipboard.copy" },
|
|
18
|
+
copiedTextI18n: { default: "vlite.clipboard.copied" },
|
|
19
19
|
asIcon: { type: Boolean, default: !1 }
|
|
20
20
|
},
|
|
21
21
|
emits: ["copy", "error"],
|
|
22
|
-
setup(o, { emit:
|
|
23
|
-
const e = o,
|
|
22
|
+
setup(o, { emit: r }) {
|
|
23
|
+
const e = o, l = r, a = p(!1);
|
|
24
24
|
let n = null;
|
|
25
|
-
const u =
|
|
25
|
+
const u = i(() => a.value ? e.copiedIcon : e.defaultIcon), c = i(() => {
|
|
26
26
|
if (!e.asIcon)
|
|
27
27
|
if (a.value) {
|
|
28
28
|
if (e.copiedText) return e.copiedText;
|
|
29
|
-
const t =
|
|
29
|
+
const t = d(e.copiedTextI18n);
|
|
30
30
|
return t !== e.copiedTextI18n ? t : "Copied";
|
|
31
31
|
} else {
|
|
32
32
|
if (e.defaultText) return e.defaultText;
|
|
33
|
-
const t =
|
|
33
|
+
const t = d(e.defaultTextI18n);
|
|
34
34
|
return t !== e.defaultTextI18n ? t : "Copy";
|
|
35
35
|
}
|
|
36
36
|
}), s = async () => {
|
|
37
37
|
if (!e.disabled)
|
|
38
38
|
try {
|
|
39
|
-
await navigator.clipboard.writeText(e.textToCopy), a.value = !0,
|
|
39
|
+
await navigator.clipboard.writeText(e.textToCopy), a.value = !0, l("copy", e.textToCopy), n && clearTimeout(n), n = setTimeout(() => {
|
|
40
40
|
a.value = !1;
|
|
41
41
|
}, 500);
|
|
42
42
|
} catch (t) {
|
|
43
|
-
|
|
43
|
+
l("error", t instanceof Error ? t : new Error("Copy failed"));
|
|
44
44
|
}
|
|
45
45
|
};
|
|
46
|
-
return (t,
|
|
46
|
+
return (t, b) => (m(), x(C, {
|
|
47
47
|
variant: o.variant,
|
|
48
48
|
size: o.size,
|
|
49
49
|
rounded: o.rounded,
|
|
50
50
|
class: T(e.class),
|
|
51
51
|
disabled: o.disabled,
|
|
52
52
|
icon: u.value,
|
|
53
|
-
text:
|
|
53
|
+
text: c.value,
|
|
54
54
|
"as-icon": o.asIcon,
|
|
55
55
|
onClick: s
|
|
56
56
|
}, {
|
|
57
|
-
default:
|
|
58
|
-
!o.asIcon && !
|
|
57
|
+
default: v(() => [
|
|
58
|
+
!o.asIcon && !c.value ? y(t.$slots, "default", {
|
|
59
59
|
key: 0,
|
|
60
60
|
copied: a.value
|
|
61
61
|
}) : I("", !0)
|
|
@@ -65,5 +65,5 @@ const z = /* @__PURE__ */ f({
|
|
|
65
65
|
}
|
|
66
66
|
});
|
|
67
67
|
export {
|
|
68
|
-
|
|
68
|
+
w as default
|
|
69
69
|
};
|
|
@@ -6,8 +6,8 @@ import O from "../Input.vue.js";
|
|
|
6
6
|
import "../../core/config.js";
|
|
7
7
|
/* empty css */
|
|
8
8
|
import y from "../Button.vue.js";
|
|
9
|
-
import E from "./ColorIro.
|
|
10
|
-
/* empty css
|
|
9
|
+
import E from "./ColorIro.vue2.js";
|
|
10
|
+
/* empty css */
|
|
11
11
|
import { useEyeDropper as P } from "@vueuse/core";
|
|
12
12
|
const I = {
|
|
13
13
|
key: 0,
|
|
@@ -4,7 +4,7 @@ import k from "../Icon.vue.js";
|
|
|
4
4
|
import { $t as E } from "../../utils/i18n.js";
|
|
5
5
|
import { useCommandPaletteItems as Y } from "./useCommandPaletteItems.js";
|
|
6
6
|
import { useCommandPaletteNav as Z } from "./useCommandPaletteNav.js";
|
|
7
|
-
import ee from "./CommandPaletteItem.
|
|
7
|
+
import ee from "./CommandPaletteItem.vue2.js";
|
|
8
8
|
const te = { class: "command-palette-content flex flex-col w-full h-full max-h-[70vh]" }, oe = { class: "flex items-center gap-3 px-4 py-3 border-b border-border/80 shrink-0" }, se = ["placeholder"], ne = ["aria-label"], re = {
|
|
9
9
|
key: 0,
|
|
10
10
|
class: "flex flex-col items-center justify-center py-14 px-6 text-center select-none",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import o from "./Form.vue2.js";
|
|
2
2
|
/* empty css */
|
|
3
3
|
import r from "../../_virtual/_plugin-vue_export-helper.js";
|
|
4
|
-
const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-
|
|
4
|
+
const p = /* @__PURE__ */ r(o, [["__scopeId", "data-v-45c18c7b"]]);
|
|
5
5
|
export {
|
|
6
6
|
p as default
|
|
7
7
|
};
|
|
@@ -220,7 +220,7 @@ const Be = ["onKeydown"], Le = { class: "flex items-center gap-3" }, Ne = { clas
|
|
|
220
220
|
], 2)) : c("", !0),
|
|
221
221
|
!e.schemaLoading && u.value && X.value.length > 0 ? (s(), d("div", {
|
|
222
222
|
key: 1,
|
|
223
|
-
class: m(["form-timeline", e.timelineTextPosition == "right" ? "mb-
|
|
223
|
+
class: m(["form-timeline", e.timelineTextPosition == "right" ? "mb-2" : "mb-8"])
|
|
224
224
|
}, [
|
|
225
225
|
T(t(Pe), {
|
|
226
226
|
steps: X.value,
|