@stachelock/ui 0.1.1 → 0.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js +70 -0
- package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js.map +1 -0
- package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js +186 -0
- package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js.map +1 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js +304 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js.map +1 -0
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js +186 -0
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js.map +1 -0
- package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js +123 -0
- package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js.map +1 -0
- package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js +85 -0
- package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js.map +1 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js +201 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js.map +1 -0
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js +153 -0
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js.map +1 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +75 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js.map +1 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js +89 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js.map +1 -0
- package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js +49 -0
- package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js.map +1 -0
- package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js +66 -0
- package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js.map +1 -0
- package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-2WURj34G.js +29 -0
- package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-2WURj34G.js.map +1 -0
- package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-DiNg3gz2.js +51 -0
- package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-DiNg3gz2.js.map +1 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js +242 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js.map +1 -0
- package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js +173 -0
- package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js.map +1 -0
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js +197 -0
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js.map +1 -0
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js +230 -0
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js.map +1 -0
- package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js +158 -0
- package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js.map +1 -0
- package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js +108 -0
- package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js.map +1 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js +68 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js.map +1 -0
- package/dist/UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js +131 -0
- package/dist/UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js.map +1 -0
- package/dist/UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js +162 -0
- package/dist/UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js.map +1 -0
- package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js +222 -0
- package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js.map +1 -0
- package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-0zFKwh43.js +46 -0
- package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-0zFKwh43.js.map +1 -0
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js +72 -0
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js.map +1 -0
- package/dist/UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js +211 -0
- package/dist/UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js.map +1 -0
- package/dist/UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js +66 -0
- package/dist/UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js.map +1 -0
- package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js +154 -0
- package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js.map +1 -0
- package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js +29 -0
- package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js.map +1 -0
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +10 -0
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js.map +1 -0
- package/dist/calendar-905Ofszh.js +77 -0
- package/dist/calendar-905Ofszh.js.map +1 -0
- package/dist/calendars/CalendarDashboard.d.ts +3 -0
- package/dist/calendars/CalendarDashboard.js +72 -0
- package/dist/calendars/CalendarDashboard.js.map +1 -0
- package/dist/calendars/CalendarHeader.d.ts +3 -0
- package/dist/calendars/CalendarHeader.js +5 -0
- package/dist/calendars/CalendarHeader.js.map +1 -0
- package/dist/calendars/DayCalendar.d.ts +3 -0
- package/dist/calendars/DayCalendar.js +5 -0
- package/dist/calendars/DayCalendar.js.map +1 -0
- package/dist/calendars/EventCard.d.ts +3 -0
- package/dist/calendars/EventCard.js +5 -0
- package/dist/calendars/EventCard.js.map +1 -0
- package/dist/calendars/EventsList.d.ts +3 -0
- package/dist/calendars/EventsList.js +5 -0
- package/dist/calendars/EventsList.js.map +1 -0
- package/dist/calendars/MonthCalendar.d.ts +3 -0
- package/dist/calendars/MonthCalendar.js +5 -0
- package/dist/calendars/MonthCalendar.js.map +1 -0
- package/dist/calendars/WeekCalendar.d.ts +3 -0
- package/dist/calendars/WeekCalendar.js +5 -0
- package/dist/calendars/WeekCalendar.js.map +1 -0
- package/dist/calendars/YearCalendar.d.ts +3 -0
- package/dist/calendars/YearCalendar.js +5 -0
- package/dist/calendars/YearCalendar.js.map +1 -0
- package/dist/components/Avatar.d.ts +3 -0
- package/dist/components/Avatar.js +5 -0
- package/dist/components/Avatar.js.map +1 -0
- package/dist/components/Badge.d.ts +3 -0
- package/dist/components/Badge.js +42 -0
- package/dist/components/Badge.js.map +1 -0
- package/dist/components/Breadcrumb.d.ts +3 -0
- package/dist/components/Breadcrumb.js +5 -0
- package/dist/components/Breadcrumb.js.map +1 -0
- package/dist/components/Button.d.ts +3 -0
- package/dist/components/Button.js +197 -0
- package/dist/components/Button.js.map +1 -0
- package/dist/components/Loading.d.ts +3 -0
- package/dist/components/Loading.js +5 -0
- package/dist/components/Loading.js.map +1 -0
- package/dist/components/LoadingDots.d.ts +3 -0
- package/dist/components/LoadingDots.js +69 -0
- package/dist/components/LoadingDots.js.map +1 -0
- package/dist/components/Modal.d.ts +3 -0
- package/dist/components/Modal.js +5 -0
- package/dist/components/Modal.js.map +1 -0
- package/dist/components/NavLink.d.ts +3 -0
- package/dist/components/NavLink.js +5 -0
- package/dist/components/NavLink.js.map +1 -0
- package/dist/components/ProgressBar.d.ts +3 -0
- package/dist/components/ProgressBar.js +5 -0
- package/dist/components/ProgressBar.js.map +1 -0
- package/dist/components/RadialProgressBar.d.ts +3 -0
- package/dist/components/RadialProgressBar.js +5 -0
- package/dist/components/RadialProgressBar.js.map +1 -0
- package/dist/components/Table.d.ts +3 -0
- package/dist/components/Table.js +5 -0
- package/dist/components/Table.js.map +1 -0
- package/dist/components/TextInput.d.ts +3 -0
- package/dist/components/TextInput.js +111 -0
- package/dist/components/TextInput.js.map +1 -0
- package/dist/components/Transition.d.ts +3 -0
- package/dist/components/Transition.js +5 -0
- package/dist/components/Transition.js.map +1 -0
- package/dist/forms/DynamicForm.d.ts +3 -0
- package/dist/forms/DynamicForm.js +5 -0
- package/dist/forms/DynamicForm.js.map +1 -0
- package/dist/forms/DynamicFormField.d.ts +3 -0
- package/dist/forms/DynamicFormField.js +5 -0
- package/dist/forms/DynamicFormField.js.map +1 -0
- package/dist/forms/FormFieldWrapper.d.ts +3 -0
- package/dist/forms/FormFieldWrapper.js +158 -0
- package/dist/forms/FormFieldWrapper.js.map +1 -0
- package/dist/id-DafBB_QF.js +20 -0
- package/dist/id-DafBB_QF.js.map +1 -0
- package/dist/index.js +246 -4609
- package/dist/index.js.map +1 -1
- package/dist/inputs/CheckboxInput.d.ts +3 -0
- package/dist/inputs/CheckboxInput.js +5 -0
- package/dist/inputs/CheckboxInput.js.map +1 -0
- package/dist/inputs/ComboboxInput.d.ts +3 -0
- package/dist/inputs/ComboboxInput.js +5 -0
- package/dist/inputs/ComboboxInput.js.map +1 -0
- package/dist/inputs/SelectInput.d.ts +3 -0
- package/dist/inputs/SelectInput.js +5 -0
- package/dist/inputs/SelectInput.js.map +1 -0
- package/dist/inputs/SwitchInput.d.ts +3 -0
- package/dist/inputs/SwitchInput.js +5 -0
- package/dist/inputs/SwitchInput.js.map +1 -0
- package/dist/inputs/TagifyInput.d.ts +3 -0
- package/dist/inputs/TagifyInput.js +5 -0
- package/dist/inputs/TagifyInput.js.map +1 -0
- package/dist/inputs/TextAreaInput.d.ts +3 -0
- package/dist/inputs/TextAreaInput.js +5 -0
- package/dist/inputs/TextAreaInput.js.map +1 -0
- package/dist/layouts/DashboardLayout.d.ts +3 -0
- package/dist/layouts/DashboardLayout.js +5 -0
- package/dist/layouts/DashboardLayout.js.map +1 -0
- package/dist/layouts/DefaultLayout.d.ts +3 -0
- package/dist/layouts/DefaultLayout.js +5 -0
- package/dist/layouts/DefaultLayout.js.map +1 -0
- package/dist/layouts/HeaderLayout.d.ts +3 -0
- package/dist/layouts/HeaderLayout.js +5 -0
- package/dist/layouts/HeaderLayout.js.map +1 -0
- package/dist/layouts/NavigationGroup.d.ts +3 -0
- package/dist/layouts/NavigationGroup.js +5 -0
- package/dist/layouts/NavigationGroup.js.map +1 -0
- package/dist/layouts/NavigationItem.d.ts +3 -0
- package/dist/layouts/NavigationItem.js +5 -0
- package/dist/layouts/NavigationItem.js.map +1 -0
- package/dist/layouts/SidebarLayout.d.ts +3 -0
- package/dist/layouts/SidebarLayout.js +5 -0
- package/dist/layouts/SidebarLayout.js.map +1 -0
- package/dist/src/components/UiLoadingDots.d.ts +1 -1
- package/dist/src/components/UiNavLink.d.ts +1 -1
- package/dist/src/components/inputs/ComboboxInput.d.ts +2 -2
- package/dist/src/components/inputs/SelectInput.d.ts +2 -2
- package/dist/src/components/layouts/DefaultLayout.d.ts +1 -1
- package/package.json +2 -3
- package/dist/CheckboxInput-rWkcde69.js +0 -5
- package/dist/CheckboxInput-rWkcde69.js.map +0 -1
- package/dist/ComboboxInput-B98P_8CZ.js +0 -5
- package/dist/ComboboxInput-B98P_8CZ.js.map +0 -1
- package/dist/SelectInput-B5liNv7H.js +0 -5
- package/dist/SelectInput-B5liNv7H.js.map +0 -1
- package/dist/SwitchInput-D1k9O8gn.js +0 -5
- package/dist/SwitchInput-D1k9O8gn.js.map +0 -1
- package/dist/TextAreaInput-Di6Kstic.js +0 -5
- package/dist/TextAreaInput-Di6Kstic.js.map +0 -1
- package/dist/UiLoading-BuzCrLqO.js +0 -5
- package/dist/UiLoading-BuzCrLqO.js.map +0 -1
- package/dist/index.umd.cjs +0 -11
- package/dist/index.umd.cjs.map +0 -1
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { defineComponent as b, ref as _, computed as r, createElementBlock as i, openBlock as u, normalizeClass as c, createCommentVNode as p, createElementVNode as z, toDisplayString as P } from "vue";
|
|
2
|
+
const C = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "sl-h-full sl-w-full"
|
|
5
|
+
}, U = ["src", "alt"], E = /* @__PURE__ */ b({
|
|
6
|
+
__name: "UiAvatar",
|
|
7
|
+
props: {
|
|
8
|
+
data: {},
|
|
9
|
+
name: {},
|
|
10
|
+
imageUrl: {},
|
|
11
|
+
size: { default: "md" },
|
|
12
|
+
color: { default: "sl-bg-stachelock-600" },
|
|
13
|
+
ring: { default: "sl-ring-white" },
|
|
14
|
+
rounded: { default: "sl-rounded-full" },
|
|
15
|
+
fallbackInitials: { default: "?" },
|
|
16
|
+
fallbackIcon: {},
|
|
17
|
+
imagePath: { default: "image.url" },
|
|
18
|
+
namePath: { default: "name" }
|
|
19
|
+
},
|
|
20
|
+
setup(v) {
|
|
21
|
+
const e = v, o = _(!1), k = () => {
|
|
22
|
+
o.value = !0;
|
|
23
|
+
}, f = {
|
|
24
|
+
xs: "sl-h-6 sl-w-6",
|
|
25
|
+
sm: "sl-h-8 sl-w-8",
|
|
26
|
+
md: "sl-h-12 sl-w-12",
|
|
27
|
+
lg: "sl-h-16 sl-w-16",
|
|
28
|
+
xl: "sl-h-20 sl-w-20",
|
|
29
|
+
"2xl": "sl-h-24 sl-w-24"
|
|
30
|
+
}, w = r(() => typeof e.size == "number" ? `sl-h-${e.size} sl-w-${e.size}` : f[e.size] || f.md), n = (l, t) => {
|
|
31
|
+
if (!l) return;
|
|
32
|
+
const a = Array.isArray(t) ? t : t.split(".");
|
|
33
|
+
let s = l;
|
|
34
|
+
for (const g of a)
|
|
35
|
+
if (s && typeof s == "object" && g in s)
|
|
36
|
+
s = s[g];
|
|
37
|
+
else
|
|
38
|
+
return;
|
|
39
|
+
return s;
|
|
40
|
+
}, m = r(() => {
|
|
41
|
+
if (e.imageUrl) return e.imageUrl;
|
|
42
|
+
if (e.data && e.imagePath) {
|
|
43
|
+
const l = n(e.data, e.imagePath);
|
|
44
|
+
if (l) return l;
|
|
45
|
+
}
|
|
46
|
+
if (e.data) {
|
|
47
|
+
const l = [
|
|
48
|
+
"profile_image.url",
|
|
49
|
+
"image.url",
|
|
50
|
+
"avatar.url",
|
|
51
|
+
"photo.url",
|
|
52
|
+
"picture.url"
|
|
53
|
+
];
|
|
54
|
+
for (const t of l) {
|
|
55
|
+
const a = n(e.data, t);
|
|
56
|
+
if (a) return a;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return null;
|
|
60
|
+
}), d = r(() => {
|
|
61
|
+
if (e.name) return e.name;
|
|
62
|
+
if (e.data && e.namePath) {
|
|
63
|
+
const l = n(e.data, e.namePath);
|
|
64
|
+
if (l) return l;
|
|
65
|
+
}
|
|
66
|
+
if (e.data) {
|
|
67
|
+
const l = [
|
|
68
|
+
"name",
|
|
69
|
+
"display_name",
|
|
70
|
+
"full_name",
|
|
71
|
+
"username",
|
|
72
|
+
"title"
|
|
73
|
+
];
|
|
74
|
+
for (const t of l) {
|
|
75
|
+
const a = n(e.data, t);
|
|
76
|
+
if (a) return a;
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return "";
|
|
80
|
+
}), h = r(() => !!m.value), y = r(() => {
|
|
81
|
+
const l = d.value;
|
|
82
|
+
if (!l || l.trim() === "")
|
|
83
|
+
return e.fallbackInitials;
|
|
84
|
+
const t = l.split(" ").filter(Boolean);
|
|
85
|
+
return t.length === 0 ? e.fallbackInitials : t.length === 1 ? t[0][0].toUpperCase() : (t[0][0] + t[t.length - 1][0]).toUpperCase();
|
|
86
|
+
});
|
|
87
|
+
return (l, t) => (u(), i("div", {
|
|
88
|
+
class: c(["sl-relative sl-inline-block", [w.value, l.ring, l.rounded]])
|
|
89
|
+
}, [
|
|
90
|
+
h.value && !o.value ? (u(), i("div", C, [
|
|
91
|
+
z("img", {
|
|
92
|
+
src: m.value,
|
|
93
|
+
alt: d.value,
|
|
94
|
+
class: c(["sl-h-full sl-w-full sl-object-cover", l.rounded]),
|
|
95
|
+
onError: k
|
|
96
|
+
}, null, 42, U)
|
|
97
|
+
])) : p("", !0),
|
|
98
|
+
!h.value || o.value ? (u(), i("div", {
|
|
99
|
+
key: 1,
|
|
100
|
+
class: c(["sl-h-full sl-w-full sl-flex sl-items-center sl-justify-center sl-font-semibold sl-text-white", [l.color, l.rounded]])
|
|
101
|
+
}, P(y.value), 3)) : p("", !0)
|
|
102
|
+
], 2));
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
export {
|
|
106
|
+
E as _
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js","sources":["../src/components/UiAvatar.vue"],"sourcesContent":["<template>\n <div class=\"sl-relative sl-inline-block\" :class=\"[sizeClass, ring, rounded]\">\n <div v-if=\"hasImage && !imageError\" class=\"sl-h-full sl-w-full\">\n <img\n :src=\"imageUrl\"\n :alt=\"displayName\"\n class=\"sl-h-full sl-w-full sl-object-cover\"\n :class=\"rounded\"\n @error=\"handleImageError\"\n />\n </div>\n <div v-if=\"!hasImage || imageError\" class=\"sl-h-full sl-w-full sl-flex sl-items-center sl-justify-center sl-font-semibold sl-text-white\"\n :class=\"[color, rounded]\">\n {{ initials }}\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, ref } from 'vue';\n\ninterface AvatarProps {\n // Flexible data object - can be any object with optional name and image properties\n data?: Record<string, any>;\n \n // Direct properties for simple use cases\n name?: string;\n imageUrl?: string;\n \n // Size options\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl' | number;\n \n // Styling options\n color?: string;\n ring?: string;\n rounded?: string;\n \n // Image fallback options\n fallbackInitials?: string;\n fallbackIcon?: string;\n \n // Custom image path keys for different data structures\n imagePath?: string | string[]; // e.g., 'profile_image.url' or ['profile_image', 'url']\n namePath?: string | string[]; // e.g., 'display_name' or ['user', 'profile', 'name']\n}\n\nconst props = withDefaults(defineProps<AvatarProps>(), {\n size: 'md',\n color: 'sl-bg-stachelock-600',\n ring: 'sl-ring-white',\n rounded: 'sl-rounded-full',\n fallbackInitials: '?',\n imagePath: 'image.url',\n namePath: 'name'\n});\n\nconst imageError = ref(false);\n\nconst handleImageError = () => {\n imageError.value = true;\n};\n\n// Size classes mapping\nconst sizeClasses: Record<string, string> = {\n xs: 'sl-h-6 sl-w-6',\n sm: 'sl-h-8 sl-w-8',\n md: 'sl-h-12 sl-w-12',\n lg: 'sl-h-16 sl-w-16',\n xl: 'sl-h-20 sl-w-20',\n '2xl': 'sl-h-24 sl-w-24',\n};\n\nconst sizeClass = computed(() => {\n if (typeof props.size === 'number') {\n return `sl-h-${props.size} sl-w-${props.size}`;\n }\n return sizeClasses[props.size] || sizeClasses.md;\n});\n\n// Helper function to get nested object values\nconst getNestedValue = (obj: any, path: string | string[]): any => {\n if (!obj) return undefined;\n \n const keys = Array.isArray(path) ? path : path.split('.');\n let current = obj;\n \n for (const key of keys) {\n if (current && typeof current === 'object' && key in current) {\n current = current[key];\n } else {\n return undefined;\n }\n }\n \n return current;\n};\n\n// Get image URL from various sources\nconst imageUrl = computed(() => {\n // Direct imageUrl prop takes precedence\n if (props.imageUrl) return props.imageUrl;\n \n // Try to get from data object using imagePath\n if (props.data && props.imagePath) {\n const url = getNestedValue(props.data, props.imagePath);\n if (url) return url;\n }\n \n // Fallback to common image paths if no specific path provided\n if (props.data) {\n const commonPaths = [\n 'profile_image.url',\n 'image.url',\n 'avatar.url',\n 'photo.url',\n 'picture.url'\n ];\n \n for (const path of commonPaths) {\n const url = getNestedValue(props.data, path);\n if (url) return url;\n }\n }\n \n return null;\n});\n\n// Get display name from various sources\nconst displayName = computed(() => {\n // Direct name prop takes precedence\n if (props.name) return props.name;\n \n // Try to get from data object using namePath\n if (props.data && props.namePath) {\n const name = getNestedValue(props.data, props.namePath);\n if (name) return name;\n }\n \n // Fallback to common name paths if no specific path provided\n if (props.data) {\n const commonPaths = [\n 'name',\n 'display_name',\n 'full_name',\n 'username',\n 'title'\n ];\n \n for (const path of commonPaths) {\n const name = getNestedValue(props.data, path);\n if (name) return name;\n }\n }\n \n return '';\n});\n\nconst hasImage = computed(() => {\n return !!imageUrl.value;\n});\n\nconst initials = computed(() => {\n const name = displayName.value;\n \n if (!name || name.trim() === '') {\n return props.fallbackInitials;\n }\n\n const names = name.split(' ').filter(Boolean);\n if (names.length === 0) {\n return props.fallbackInitials;\n }\n\n if (names.length === 1) {\n return names[0][0].toUpperCase();\n } else {\n return (names[0][0] + names[names.length - 1][0]).toUpperCase();\n }\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","imageError","ref","handleImageError","sizeClasses","sizeClass","computed","getNestedValue","obj","path","keys","current","key","imageUrl","url","commonPaths","displayName","name","hasImage","initials","names","_createElementBlock","ring","rounded","_openBlock","_hoisted_1","_createElementVNode","_normalizeClass","color"],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { defineComponent as g, ref as m, computed as x, watchEffect as v, createElementBlock as l, openBlock as a, createElementVNode as u, Fragment as B, renderList as P, createBlock as k, createCommentVNode as C, createVNode as y, unref as w, withCtx as N, createTextVNode as E, toDisplayString as V } from "vue";
|
|
2
|
+
import { u as R, a as S, _ as D } from "./UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js";
|
|
3
|
+
import { ChevronRightIcon as L } from "@heroicons/vue/20/solid";
|
|
4
|
+
const U = {
|
|
5
|
+
class: "sl-hidden sm:sl-flex",
|
|
6
|
+
"aria-label": "Breadcrumb"
|
|
7
|
+
}, j = {
|
|
8
|
+
role: "list",
|
|
9
|
+
class: "sl-flex sl-items-center sl-space-x-4"
|
|
10
|
+
}, A = { class: "sl-flex sl-items-center" }, q = /* @__PURE__ */ g({
|
|
11
|
+
__name: "UiBreadcrumb",
|
|
12
|
+
setup(F) {
|
|
13
|
+
const n = m([]), h = R(), f = S(), c = m(""), p = x(() => n.value.map((s) => {
|
|
14
|
+
const t = s.name.trim();
|
|
15
|
+
return {
|
|
16
|
+
...s,
|
|
17
|
+
name: t.length > 12 ? t.slice(0, 12) + "..." : t
|
|
18
|
+
};
|
|
19
|
+
})), d = async () => {
|
|
20
|
+
const s = h.path;
|
|
21
|
+
c.value = s;
|
|
22
|
+
const t = s.split("/").filter(Boolean), e = [];
|
|
23
|
+
for (const [o, r] of t.entries()) {
|
|
24
|
+
let i;
|
|
25
|
+
i = r.charAt(0).toUpperCase() + r.slice(1).toLowerCase(), e.push({
|
|
26
|
+
name: i,
|
|
27
|
+
fullPath: "/" + t.slice(0, o + 1).join("/")
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
n.value = e;
|
|
31
|
+
}, _ = (s, t) => {
|
|
32
|
+
const e = f.resolve(s.fullPath), o = e.matched.some((r) => r.meta?.isErrorPage);
|
|
33
|
+
(!e || e.matched.length === 0 || o) && (t.preventDefault(), t.stopPropagation(), console.warn("Breadcrumb route not found or is an error page:", s.fullPath));
|
|
34
|
+
};
|
|
35
|
+
return v(() => {
|
|
36
|
+
d();
|
|
37
|
+
}), (s, t) => (a(), l("nav", U, [
|
|
38
|
+
u("ol", j, [
|
|
39
|
+
(a(!0), l(B, null, P(p.value, (e, o) => (a(), l("li", {
|
|
40
|
+
key: e.fullPath
|
|
41
|
+
}, [
|
|
42
|
+
u("div", A, [
|
|
43
|
+
o !== 0 ? (a(), k(w(L), {
|
|
44
|
+
key: 0,
|
|
45
|
+
class: "sl-h-5 sl-w-5 sl-flex-shrink-0 sl-text-gray-400 sl-mr-3",
|
|
46
|
+
"aria-hidden": "true"
|
|
47
|
+
})) : C("", !0),
|
|
48
|
+
y(D, {
|
|
49
|
+
to: e.fullPath,
|
|
50
|
+
onClick: (r) => _(e, r),
|
|
51
|
+
"aria-current": e.fullPath === c.value ? "page" : void 0,
|
|
52
|
+
class: "sl-text-sm sl-font-medium sl-text-gray-500 hover:sl-text-gray-700 sl-truncate sl-overflow-ellipsis"
|
|
53
|
+
}, {
|
|
54
|
+
default: N(() => [
|
|
55
|
+
E(V(e.name), 1)
|
|
56
|
+
]),
|
|
57
|
+
_: 2
|
|
58
|
+
}, 1032, ["to", "onClick", "aria-current"])
|
|
59
|
+
])
|
|
60
|
+
]))), 128))
|
|
61
|
+
])
|
|
62
|
+
]));
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
export {
|
|
66
|
+
q as _
|
|
67
|
+
};
|
|
68
|
+
//# sourceMappingURL=UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js","sources":["../src/components/UiBreadcrumb.vue"],"sourcesContent":["<template>\n <nav class=\"sl-hidden sm:sl-flex\" aria-label=\"Breadcrumb\">\n <ol role=\"list\" class=\"sl-flex sl-items-center sl-space-x-4\">\n <li v-for=\"(breadcrumb, index) in processedBreadcrumbs\" :key=\"breadcrumb.fullPath\">\n <div class=\"sl-flex sl-items-center\">\n <ChevronRightIcon v-if=\"index !== 0\" class=\"sl-h-5 sl-w-5 sl-flex-shrink-0 sl-text-gray-400 sl-mr-3\" aria-hidden=\"true\" />\n <!-- Make sure UiNavLink forwards the native click event -->\n <UiNavLink :to=\"breadcrumb.fullPath\" @click=\"(event) => handleBreadcrumbClick(breadcrumb, event)\"\n :aria-current=\"breadcrumb.fullPath === currentPath ? 'page' : undefined\"\n class=\"sl-text-sm sl-font-medium sl-text-gray-500 hover:sl-text-gray-700 sl-truncate sl-overflow-ellipsis\">\n {{ breadcrumb.name }}\n </UiNavLink>\n </div>\n </li>\n </ol>\n </nav>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref, watchEffect, computed } from 'vue';\nimport { useRoute, useRouter } from 'vue-router';\nimport UiNavLink from './UiNavLink.vue';\nimport { ChevronRightIcon } from '@heroicons/vue/20/solid';\n\ninterface BreadcrumbItem {\n name: string;\n fullPath: string;\n}\n\ninterface RouteMeta {\n isErrorPage?: boolean;\n}\n\nconst breadcrumbs = ref<BreadcrumbItem[]>([]);\n\nconst route = useRoute();\nconst router = useRouter();\nconst currentPath = ref<string>('');\n\nconst processedBreadcrumbs = computed(() => {\n return breadcrumbs.value.map(breadcrumb => {\n // Optionally trim very long names (only if needed)\n const trimmedName = breadcrumb.name.trim();\n return {\n ...breadcrumb,\n name: trimmedName.length > 12 ? trimmedName.slice(0, 12) + '...' : trimmedName\n };\n });\n});\n\nconst processSegments = async () => {\n const path = route.path;\n currentPath.value = path;\n const pathSegments = path.split('/').filter(Boolean);\n const tempBreadcrumbs: BreadcrumbItem[] = [];\n\n // Loop through each segment in the URL.\n for (const [index, segment] of pathSegments.entries()) {\n let segmentName: string;\n \n // Simple processing - can be extended as needed\n segmentName = segment.charAt(0).toUpperCase() + segment.slice(1).toLowerCase();\n\n tempBreadcrumbs.push({\n name: segmentName,\n fullPath: '/' + pathSegments.slice(0, index + 1).join('/')\n });\n }\n\n breadcrumbs.value = tempBreadcrumbs;\n};\n\n/**\n * Prevent navigation if the resolved route is an error page.\n */\nconst handleBreadcrumbClick = (breadcrumb: BreadcrumbItem, event: MouseEvent) => {\n const resolved = router.resolve(breadcrumb.fullPath);\n // Check if any matched record is an error page.\n const isErrorPage = resolved.matched.some((route: { meta?: RouteMeta }) => route.meta?.isErrorPage);\n if (!resolved || resolved.matched.length === 0 || isErrorPage) {\n event.preventDefault();\n event.stopPropagation();\n console.warn('Breadcrumb route not found or is an error page:', breadcrumb.fullPath);\n }\n};\n\nwatchEffect(() => {\n processSegments();\n});\n</script>\n\n<style scoped>\n</style>\n"],"names":["breadcrumbs","ref","route","useRoute","router","useRouter","currentPath","processedBreadcrumbs","computed","breadcrumb","trimmedName","processSegments","path","pathSegments","tempBreadcrumbs","index","segment","segmentName","handleBreadcrumbClick","event","resolved","isErrorPage","watchEffect","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_Fragment","_renderList","_hoisted_3","_createBlock","_unref","ChevronRightIcon","_createVNode","UiNavLink","_createTextVNode","_toDisplayString"],"mappings":";;;;;;;;;;;;AAiCA,UAAMA,IAAcC,EAAsB,EAAE,GAEtCC,IAAQC,EAAA,GACRC,IAASC,EAAA,GACTC,IAAcL,EAAY,EAAE,GAE5BM,IAAuBC,EAAS,MAC7BR,EAAY,MAAM,IAAI,CAAAS,MAAc;AAEzC,YAAMC,IAAcD,EAAW,KAAK,KAAA;AACpC,aAAO;AAAA,QACL,GAAGA;AAAA,QACH,MAAMC,EAAY,SAAS,KAAKA,EAAY,MAAM,GAAG,EAAE,IAAI,QAAQA;AAAA,MAAA;AAAA,IAEvE,CAAC,CACF,GAEKC,IAAkB,YAAY;AAClC,YAAMC,IAAOV,EAAM;AACnB,MAAAI,EAAY,QAAQM;AACpB,YAAMC,IAAeD,EAAK,MAAM,GAAG,EAAE,OAAO,OAAO,GAC7CE,IAAoC,CAAA;AAG1C,iBAAW,CAACC,GAAOC,CAAO,KAAKH,EAAa,WAAW;AACrD,YAAII;AAGJ,QAAAA,IAAcD,EAAQ,OAAO,CAAC,EAAE,gBAAgBA,EAAQ,MAAM,CAAC,EAAE,YAAA,GAEjEF,EAAgB,KAAK;AAAA,UACnB,MAAMG;AAAA,UACN,UAAU,MAAMJ,EAAa,MAAM,GAAGE,IAAQ,CAAC,EAAE,KAAK,GAAG;AAAA,QAAA,CAC1D;AAAA,MACH;AAEA,MAAAf,EAAY,QAAQc;AAAA,IACtB,GAKMI,IAAwB,CAACT,GAA4BU,MAAsB;AAC/E,YAAMC,IAAWhB,EAAO,QAAQK,EAAW,QAAQ,GAE7CY,IAAcD,EAAS,QAAQ,KAAK,CAAClB,MAAgCA,EAAM,MAAM,WAAW;AAClG,OAAI,CAACkB,KAAYA,EAAS,QAAQ,WAAW,KAAKC,OAChDF,EAAM,eAAA,GACNA,EAAM,gBAAA,GACN,QAAQ,KAAK,mDAAmDV,EAAW,QAAQ;AAAA,IAEvF;AAEA,WAAAa,EAAY,MAAM;AAChB,MAAAX,EAAA;AAAA,IACF,CAAC,cAvFCY,EAAA,GAAAC,EAcM,OAdNC,GAcM;AAAA,MAbJC,EAYK,MAZLC,GAYK;AAAA,SAXHJ,EAAA,EAAA,GAAAC,EAUKI,GAAA,MAAAC,EAV6BtB,EAAA,OAAoB,CAA1CE,GAAYM,YAAxBS,EAUK,MAAA;AAAA,UAVoD,KAAKf,EAAW;AAAA,QAAA;UACvEiB,EAQM,OARNI,GAQM;AAAA,YAPoBf,MAAK,UAA7BgB,EAA0HC,EAAAC,CAAA,GAAA;AAAA;cAArF,OAAM;AAAA,cAA0D,eAAY;AAAA,YAAA;YAEjHC,EAIYC,GAAA;AAAA,cAJA,IAAI1B,EAAW;AAAA,cAAW,UAAQU,MAAUD,EAAsBT,GAAYU,CAAK;AAAA,cAC5F,gBAAcV,EAAW,aAAaH,EAAA,iBAAuB;AAAA,cAC9D,OAAM;AAAA,YAAA;yBACN,MAAqB;AAAA,gBAAlB8B,EAAAC,EAAA5B,EAAW,IAAI,GAAA,CAAA;AAAA,cAAA;;;;;;;;;"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { defineComponent as d, computed as n, createElementBlock as a, openBlock as r, normalizeClass as o, createCommentVNode as p, createElementVNode as l, toDisplayString as x } from "vue";
|
|
2
|
+
const g = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "sl-absolute sl-inset-0 sl-bg-white sl-bg-opacity-75 dark:sl-bg-gray-900 dark:sl-bg-opacity-75 sl-flex sl-items-center sl-justify-center sl-z-50"
|
|
5
|
+
}, u = { class: "sl-flex sl-flex-col sl-items-center" }, f = /* @__PURE__ */ d({
|
|
6
|
+
__name: "UiLoading",
|
|
7
|
+
props: {
|
|
8
|
+
theme: { default: "primary" },
|
|
9
|
+
size: { default: "md" },
|
|
10
|
+
text: {},
|
|
11
|
+
overlay: { type: Boolean, default: !1 },
|
|
12
|
+
className: {}
|
|
13
|
+
},
|
|
14
|
+
setup(m) {
|
|
15
|
+
const t = m, y = n(() => {
|
|
16
|
+
const s = ["sl-flex sl-items-center sl-justify-center"];
|
|
17
|
+
return t.overlay ? s.push("sl-relative") : s.push("sl-flex-col sl-space-y-2"), t.className && s.push(t.className), s;
|
|
18
|
+
}), c = n(() => {
|
|
19
|
+
const e = {
|
|
20
|
+
xs: "sl-h-3 sl-w-3",
|
|
21
|
+
sm: "sl-h-4 sl-w-4",
|
|
22
|
+
md: "sl-h-6 sl-w-6",
|
|
23
|
+
lg: "sl-h-8 sl-w-8",
|
|
24
|
+
xl: "sl-h-10 sl-w-10",
|
|
25
|
+
"2xl": "sl-h-12 sl-w-12"
|
|
26
|
+
}, s = {
|
|
27
|
+
primary: "sl-text-stachelock-600",
|
|
28
|
+
secondary: "sl-text-gray-600",
|
|
29
|
+
dark: "sl-text-gray-700",
|
|
30
|
+
light: "sl-text-gray-400",
|
|
31
|
+
success: "sl-text-green-600",
|
|
32
|
+
warning: "sl-text-yellow-600",
|
|
33
|
+
danger: "sl-text-red-600",
|
|
34
|
+
ghost: "sl-text-gray-600"
|
|
35
|
+
};
|
|
36
|
+
return [
|
|
37
|
+
e[t.size || "md"],
|
|
38
|
+
s[t.theme || "primary"]
|
|
39
|
+
];
|
|
40
|
+
}), i = n(() => {
|
|
41
|
+
const e = {
|
|
42
|
+
xs: "sl-text-xs",
|
|
43
|
+
sm: "sl-text-sm",
|
|
44
|
+
md: "sl-text-base",
|
|
45
|
+
lg: "sl-text-lg",
|
|
46
|
+
xl: "sl-text-xl",
|
|
47
|
+
"2xl": "sl-text-2xl"
|
|
48
|
+
}, s = {
|
|
49
|
+
primary: "sl-text-stachelock-700",
|
|
50
|
+
secondary: "sl-text-gray-700",
|
|
51
|
+
dark: "sl-text-gray-800",
|
|
52
|
+
light: "sl-text-gray-500",
|
|
53
|
+
success: "sl-text-green-700",
|
|
54
|
+
warning: "sl-text-yellow-700",
|
|
55
|
+
danger: "sl-text-red-700",
|
|
56
|
+
ghost: "sl-text-gray-700"
|
|
57
|
+
};
|
|
58
|
+
return [
|
|
59
|
+
e[t.size || "md"],
|
|
60
|
+
s[t.theme || "primary"],
|
|
61
|
+
"sl-font-medium"
|
|
62
|
+
];
|
|
63
|
+
});
|
|
64
|
+
return (e, s) => (r(), a("div", {
|
|
65
|
+
class: o(y.value)
|
|
66
|
+
}, [
|
|
67
|
+
e.overlay ? (r(), a("div", g, [
|
|
68
|
+
l("div", u, [
|
|
69
|
+
l("div", {
|
|
70
|
+
class: o(c.value)
|
|
71
|
+
}, s[0] || (s[0] = [
|
|
72
|
+
l("svg", {
|
|
73
|
+
class: "sl-animate-spin",
|
|
74
|
+
fill: "none",
|
|
75
|
+
viewBox: "0 0 24 24"
|
|
76
|
+
}, [
|
|
77
|
+
l("circle", {
|
|
78
|
+
class: "sl-opacity-25",
|
|
79
|
+
cx: "12",
|
|
80
|
+
cy: "12",
|
|
81
|
+
r: "10",
|
|
82
|
+
stroke: "currentColor",
|
|
83
|
+
"stroke-width": "4"
|
|
84
|
+
}),
|
|
85
|
+
l("path", {
|
|
86
|
+
class: "sl-opacity-75",
|
|
87
|
+
fill: "currentColor",
|
|
88
|
+
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"
|
|
89
|
+
})
|
|
90
|
+
], -1)
|
|
91
|
+
]), 2),
|
|
92
|
+
e.text ? (r(), a("p", {
|
|
93
|
+
key: 0,
|
|
94
|
+
class: o(i.value)
|
|
95
|
+
}, x(e.text), 3)) : p("", !0)
|
|
96
|
+
])
|
|
97
|
+
])) : (r(), a("div", {
|
|
98
|
+
key: 1,
|
|
99
|
+
class: o(c.value)
|
|
100
|
+
}, s[1] || (s[1] = [
|
|
101
|
+
l("svg", {
|
|
102
|
+
class: "sl-animate-spin",
|
|
103
|
+
fill: "none",
|
|
104
|
+
viewBox: "0 0 24 24"
|
|
105
|
+
}, [
|
|
106
|
+
l("circle", {
|
|
107
|
+
class: "sl-opacity-25",
|
|
108
|
+
cx: "12",
|
|
109
|
+
cy: "12",
|
|
110
|
+
r: "10",
|
|
111
|
+
stroke: "currentColor",
|
|
112
|
+
"stroke-width": "4"
|
|
113
|
+
}),
|
|
114
|
+
l("path", {
|
|
115
|
+
class: "sl-opacity-75",
|
|
116
|
+
fill: "currentColor",
|
|
117
|
+
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"
|
|
118
|
+
})
|
|
119
|
+
], -1)
|
|
120
|
+
]), 2)),
|
|
121
|
+
e.text && !e.overlay ? (r(), a("p", {
|
|
122
|
+
key: 2,
|
|
123
|
+
class: o(i.value)
|
|
124
|
+
}, x(e.text), 3)) : p("", !0)
|
|
125
|
+
], 2));
|
|
126
|
+
}
|
|
127
|
+
});
|
|
128
|
+
export {
|
|
129
|
+
f as _
|
|
130
|
+
};
|
|
131
|
+
//# sourceMappingURL=UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js","sources":["../src/components/UiLoading.vue"],"sourcesContent":["<template>\n <div :class=\"containerClasses\">\n <div v-if=\"overlay\" class=\"sl-absolute sl-inset-0 sl-bg-white sl-bg-opacity-75 dark:sl-bg-gray-900 dark:sl-bg-opacity-75 sl-flex sl-items-center sl-justify-center sl-z-50\">\n <div class=\"sl-flex sl-flex-col sl-items-center\">\n <div :class=\"spinnerClasses\">\n <svg class=\"sl-animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"sl-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n />\n <path\n class=\"sl-opacity-75\"\n fill=\"currentColor\"\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 />\n </svg>\n </div>\n <p v-if=\"text\" :class=\"textClasses\">{{ text }}</p>\n </div>\n </div>\n <div v-else :class=\"spinnerClasses\">\n <svg class=\"sl-animate-spin\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle\n class=\"sl-opacity-25\"\n cx=\"12\"\n cy=\"12\"\n r=\"10\"\n stroke=\"currentColor\"\n stroke-width=\"4\"\n />\n <path\n class=\"sl-opacity-75\"\n fill=\"currentColor\"\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 />\n </svg>\n </div>\n <p v-if=\"text && !overlay\" :class=\"textClasses\">{{ text }}</p>\n </div>\n</template>\n\n<script lang=\"ts\" setup>\nimport { computed } from 'vue';\nimport type { LoadingType } from '../types/ui';\n\ninterface LoadingProps extends LoadingType {}\n\nconst props = withDefaults(defineProps<LoadingProps>(), {\n theme: 'primary',\n size: 'md',\n overlay: false,\n});\n\nconst containerClasses = computed(() => {\n const base = 'sl-flex sl-items-center sl-justify-center';\n const classes = [base];\n\n if (props.overlay) {\n classes.push('sl-relative');\n } else {\n classes.push('sl-flex-col sl-space-y-2');\n }\n\n if (props.className) {\n classes.push(props.className);\n }\n\n return classes;\n});\n\nconst spinnerClasses = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-h-3 sl-w-3',\n sm: 'sl-h-4 sl-w-4',\n md: 'sl-h-6 sl-w-6',\n lg: 'sl-h-8 sl-w-8',\n xl: 'sl-h-10 sl-w-10',\n '2xl': 'sl-h-12 sl-w-12',\n };\n\n const colorMapping: Record<string, string> = {\n primary: 'sl-text-stachelock-600',\n secondary: 'sl-text-gray-600',\n dark: 'sl-text-gray-700',\n light: 'sl-text-gray-400',\n success: 'sl-text-green-600',\n warning: 'sl-text-yellow-600',\n danger: 'sl-text-red-600',\n ghost: 'sl-text-gray-600',\n };\n\n return [\n sizeMapping[props.size || 'md'],\n colorMapping[props.theme || 'primary']\n ];\n});\n\nconst textClasses = computed(() => {\n const sizeMapping: Record<string, string> = {\n xs: 'sl-text-xs',\n sm: 'sl-text-sm',\n md: 'sl-text-base',\n lg: 'sl-text-lg',\n xl: 'sl-text-xl',\n '2xl': 'sl-text-2xl',\n };\n\n const colorMapping: Record<string, string> = {\n primary: 'sl-text-stachelock-700',\n secondary: 'sl-text-gray-700',\n dark: 'sl-text-gray-800',\n light: 'sl-text-gray-500',\n success: 'sl-text-green-700',\n warning: 'sl-text-yellow-700',\n danger: 'sl-text-red-700',\n ghost: 'sl-text-gray-700',\n };\n\n return [\n sizeMapping[props.size || 'md'],\n colorMapping[props.theme || 'primary'],\n 'sl-font-medium'\n ];\n});\n</script>\n\n\n"],"names":["props","__props","containerClasses","computed","classes","spinnerClasses","sizeMapping","colorMapping","textClasses","_createElementBlock","overlay","_openBlock","_hoisted_1","_createElementVNode","_hoisted_2","text"],"mappings":";;;;;;;;;;;;;;AAmDA,UAAMA,IAAQC,GAMRC,IAAmBC,EAAS,MAAM;AAEtC,YAAMC,IAAU,CADH,2CACQ;AAErB,aAAIJ,EAAM,UACRI,EAAQ,KAAK,aAAa,IAE1BA,EAAQ,KAAK,0BAA0B,GAGrCJ,EAAM,aACRI,EAAQ,KAAKJ,EAAM,SAAS,GAGvBI;AAAA,IACT,CAAC,GAEKC,IAAiBF,EAAS,MAAM;AACpC,YAAMG,IAAsC;AAAA,QAC1C,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA,GAGHC,IAAuC;AAAA,QAC3C,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA;AAGT,aAAO;AAAA,QACLD,EAAYN,EAAM,QAAQ,IAAI;AAAA,QAC9BO,EAAaP,EAAM,SAAS,SAAS;AAAA,MAAA;AAAA,IAEzC,CAAC,GAEKQ,IAAcL,EAAS,MAAM;AACjC,YAAMG,IAAsC;AAAA,QAC1C,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,IAAI;AAAA,QACJ,OAAO;AAAA,MAAA,GAGHC,IAAuC;AAAA,QAC3C,SAAS;AAAA,QACT,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,QACT,SAAS;AAAA,QACT,QAAQ;AAAA,QACR,OAAO;AAAA,MAAA;AAGT,aAAO;AAAA,QACLD,EAAYN,EAAM,QAAQ,IAAI;AAAA,QAC9BO,EAAaP,EAAM,SAAS,SAAS;AAAA,QACrC;AAAA,MAAA;AAAA,IAEJ,CAAC;2BA9HCS,EAyCM,OAAA;AAAA,MAzCA,SAAOP,EAAA,KAAgB;AAAA,IAAA;MAChBQ,EAAAA,WAAXC,EAAA,GAAAF,EAqBM,OArBNG,GAqBM;AAAA,QApBJC,EAmBM,OAnBNC,GAmBM;AAAA,UAlBJD,EAgBM,OAAA;AAAA,YAhBA,SAAOR,EAAA,KAAc;AAAA,UAAA;YACzBQ,EAcM,OAAA;AAAA,cAdD,OAAM;AAAA,cAAkB,MAAK;AAAA,cAAO,SAAQ;AAAA,YAAA;cAC/CA,EAOE,UAAA;AAAA,gBANA,OAAM;AAAA,gBACN,IAAG;AAAA,gBACH,IAAG;AAAA,gBACH,GAAE;AAAA,gBACF,QAAO;AAAA,gBACP,gBAAa;AAAA,cAAA;cAEfA,EAIE,QAAA;AAAA,gBAHA,OAAM;AAAA,gBACN,MAAK;AAAA,gBACL,GAAE;AAAA,cAAA;;;UAICE,EAAAA,aAATN,EAAkD,KAAA;AAAA;YAAlC,SAAOD,EAAA,KAAW;AAAA,UAAA,KAAKO,EAAAA,IAAI,GAAA,CAAA;;kBAG/CN,EAgBM,OAAA;AAAA;QAhBO,SAAOJ,EAAA,KAAc;AAAA,MAAA;QAChCQ,EAcM,OAAA;AAAA,UAdD,OAAM;AAAA,UAAkB,MAAK;AAAA,UAAO,SAAQ;AAAA,QAAA;UAC/CA,EAOE,UAAA;AAAA,YANA,OAAM;AAAA,YACN,IAAG;AAAA,YACH,IAAG;AAAA,YACH,GAAE;AAAA,YACF,QAAO;AAAA,YACP,gBAAa;AAAA,UAAA;UAEfA,EAIE,QAAA;AAAA,YAHA,OAAM;AAAA,YACN,MAAK;AAAA,YACL,GAAE;AAAA,UAAA;;;MAICE,EAAAA,SAASL,EAAAA,gBAAlBD,EAA8D,KAAA;AAAA;QAAlC,SAAOD,EAAA,KAAW;AAAA,MAAA,KAAKO,EAAAA,IAAI,GAAA,CAAA;;;;"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
import { defineComponent as _, ref as b, computed as k, createBlock as m, openBlock as r, unref as t, withCtx as l, createVNode as o, createElementVNode as s, normalizeClass as u, renderSlot as n, createCommentVNode as x, createTextVNode as y, toDisplayString as p } from "vue";
|
|
2
|
+
import { TransitionRoot as T, Dialog as V, TransitionChild as h, DialogPanel as B, DialogTitle as S } from "@headlessui/vue";
|
|
3
|
+
import w from "./components/Button.js";
|
|
4
|
+
const z = { class: "sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto" }, $ = { class: "sl-bg-white" }, D = { class: "sl-px-4 sl-pt-5 sl-pb-4 sm:sl-p-6 sm:sl-pb-4" }, N = { class: "sm:sl-flex sm:sl-items-start" }, j = { class: "sl-mx-auto sl-flex sl-h-12 sl-w-12 sl-flex-shrink-0 sl-items-center sl-justify-center sl-rounded-full sl-bg-gray-100 sm:sl-mx-0 sm:sl-h-10 sm:sl-w-10" }, F = { class: "sl-mt-3 sl-text-center sm:sl-ml-4 sm:sl-mt-0 sm:sl-text-left sl-w-full" }, R = { class: "sl-mt-2" }, E = { class: "sl-px-4 sl-py-3 sm:sl-flex sm:sl-flex-row-reverse sm:sl-px-6" }, q = { class: "sl-flex sl-w-full sl-justify-end sl-gap-3" }, A = /* @__PURE__ */ _({
|
|
5
|
+
__name: "UiModal",
|
|
6
|
+
props: {
|
|
7
|
+
modelValue: { type: Boolean, required: !0 },
|
|
8
|
+
size: {
|
|
9
|
+
type: String,
|
|
10
|
+
default: "sm:max-w-lg",
|
|
11
|
+
validator: (e) => [
|
|
12
|
+
"sm:max-w-sm",
|
|
13
|
+
"sm:max-w-md",
|
|
14
|
+
"sm:max-w-lg",
|
|
15
|
+
"sm:max-w-xl",
|
|
16
|
+
"sm:max-w-2xl",
|
|
17
|
+
"sm:max-w-3xl",
|
|
18
|
+
"sm:max-w-4xl",
|
|
19
|
+
"sm:max-w-5xl",
|
|
20
|
+
"sm:max-w-6xl",
|
|
21
|
+
"sm:max-w-7xl"
|
|
22
|
+
].includes(e)
|
|
23
|
+
},
|
|
24
|
+
position: { type: String, default: "center", validator: (e) => ["center", "top"].includes(e) },
|
|
25
|
+
showCancel: { type: Boolean, default: !0 },
|
|
26
|
+
showConfirm: { type: Boolean, default: !0 },
|
|
27
|
+
cancelText: { type: String, default: "Cancel" },
|
|
28
|
+
confirmText: { type: String, default: "Confirm" },
|
|
29
|
+
confirmTheme: { type: String, default: "primary" }
|
|
30
|
+
},
|
|
31
|
+
emits: ["update:modelValue", "cancel", "confirm"],
|
|
32
|
+
setup(e, { emit: v }) {
|
|
33
|
+
const i = v, c = b(null), g = k(() => c.value), d = () => {
|
|
34
|
+
i("update:modelValue", !1), i("cancel");
|
|
35
|
+
}, C = () => {
|
|
36
|
+
i("confirm"), i("update:modelValue", !1);
|
|
37
|
+
};
|
|
38
|
+
return (a, f) => (r(), m(t(T), {
|
|
39
|
+
as: "template",
|
|
40
|
+
show: e.modelValue
|
|
41
|
+
}, {
|
|
42
|
+
default: l(() => [
|
|
43
|
+
o(t(V), {
|
|
44
|
+
as: "div",
|
|
45
|
+
class: "sl-relative sl-z-50",
|
|
46
|
+
onClose: d,
|
|
47
|
+
"initial-focus": g.value
|
|
48
|
+
}, {
|
|
49
|
+
default: l(() => [
|
|
50
|
+
o(t(h), {
|
|
51
|
+
as: "template",
|
|
52
|
+
enter: "ease-out duration-300",
|
|
53
|
+
"enter-from": "opacity-0",
|
|
54
|
+
"enter-to": "opacity-100",
|
|
55
|
+
leave: "ease-in duration-200",
|
|
56
|
+
"leave-from": "opacity-100",
|
|
57
|
+
"leave-to": "opacity-0"
|
|
58
|
+
}, {
|
|
59
|
+
default: l(() => f[0] || (f[0] = [
|
|
60
|
+
s("div", { class: "sl-fixed sl-inset-0 sl-bg-gray-500/75 sl-transition-opacity" }, null, -1)
|
|
61
|
+
])),
|
|
62
|
+
_: 1,
|
|
63
|
+
__: [0]
|
|
64
|
+
}),
|
|
65
|
+
s("div", z, [
|
|
66
|
+
s("div", {
|
|
67
|
+
class: u(["sl-flex sl-min-h-full sl-items-center sl-justify-center sl-p-4 sl-text-center", [e.position === "top" ? "sm:sl-items-start sm:sl-pt-16" : "sm:sl-items-center"]])
|
|
68
|
+
}, [
|
|
69
|
+
o(t(h), {
|
|
70
|
+
as: "template",
|
|
71
|
+
enter: "ease-out duration-300",
|
|
72
|
+
"enter-from": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95",
|
|
73
|
+
"enter-to": "opacity-100 translate-y-0 sm:scale-100",
|
|
74
|
+
leave: "ease-in duration-200",
|
|
75
|
+
"leave-from": "opacity-100 translate-y-0 sm:scale-100",
|
|
76
|
+
"leave-to": "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"
|
|
77
|
+
}, {
|
|
78
|
+
default: l(() => [
|
|
79
|
+
o(t(B), {
|
|
80
|
+
class: u(["sl-relative sl-transform sl-overflow-hidden sl-rounded-lg sl-bg-white sl-text-left sl-shadow-xl sl-transition-all sl-w-full", e.size])
|
|
81
|
+
}, {
|
|
82
|
+
default: l(() => [
|
|
83
|
+
s("div", $, [
|
|
84
|
+
s("div", D, [
|
|
85
|
+
s("div", N, [
|
|
86
|
+
s("div", j, [
|
|
87
|
+
n(a.$slots, "icon")
|
|
88
|
+
]),
|
|
89
|
+
s("div", F, [
|
|
90
|
+
o(t(S), {
|
|
91
|
+
as: "h3",
|
|
92
|
+
class: "sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-900"
|
|
93
|
+
}, {
|
|
94
|
+
default: l(() => [
|
|
95
|
+
n(a.$slots, "header")
|
|
96
|
+
]),
|
|
97
|
+
_: 3
|
|
98
|
+
}),
|
|
99
|
+
s("div", R, [
|
|
100
|
+
n(a.$slots, "body", {}, () => [
|
|
101
|
+
n(a.$slots, "default")
|
|
102
|
+
])
|
|
103
|
+
])
|
|
104
|
+
])
|
|
105
|
+
])
|
|
106
|
+
]),
|
|
107
|
+
s("div", E, [
|
|
108
|
+
n(a.$slots, "footer", {}, () => [
|
|
109
|
+
s("div", q, [
|
|
110
|
+
e.showCancel ? (r(), m(w, {
|
|
111
|
+
key: 0,
|
|
112
|
+
"center-label": "",
|
|
113
|
+
theme: "light",
|
|
114
|
+
outlined: !0,
|
|
115
|
+
onButtonClick: d
|
|
116
|
+
}, {
|
|
117
|
+
default: l(() => [
|
|
118
|
+
y(p(e.cancelText), 1)
|
|
119
|
+
]),
|
|
120
|
+
_: 1
|
|
121
|
+
})) : x("", !0),
|
|
122
|
+
e.showConfirm ? (r(), m(w, {
|
|
123
|
+
key: 1,
|
|
124
|
+
"center-label": "",
|
|
125
|
+
theme: e.confirmTheme,
|
|
126
|
+
outlined: !1,
|
|
127
|
+
onButtonClick: C
|
|
128
|
+
}, {
|
|
129
|
+
default: l(() => [
|
|
130
|
+
y(p(e.confirmText), 1)
|
|
131
|
+
]),
|
|
132
|
+
_: 1
|
|
133
|
+
}, 8, ["theme"])) : x("", !0)
|
|
134
|
+
])
|
|
135
|
+
])
|
|
136
|
+
])
|
|
137
|
+
]),
|
|
138
|
+
s("button", {
|
|
139
|
+
ref_key: "fallbackFocusRef",
|
|
140
|
+
ref: c,
|
|
141
|
+
class: "sl-sr-only"
|
|
142
|
+
}, "Close", 512)
|
|
143
|
+
]),
|
|
144
|
+
_: 3
|
|
145
|
+
}, 8, ["class"])
|
|
146
|
+
]),
|
|
147
|
+
_: 3
|
|
148
|
+
})
|
|
149
|
+
], 2)
|
|
150
|
+
])
|
|
151
|
+
]),
|
|
152
|
+
_: 3
|
|
153
|
+
}, 8, ["initial-focus"])
|
|
154
|
+
]),
|
|
155
|
+
_: 3
|
|
156
|
+
}, 8, ["show"]));
|
|
157
|
+
}
|
|
158
|
+
});
|
|
159
|
+
export {
|
|
160
|
+
A as _
|
|
161
|
+
};
|
|
162
|
+
//# sourceMappingURL=UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js","sources":["../src/components/UiModal.vue"],"sourcesContent":["<template>\n <TransitionRoot as=\"template\" :show=\"modelValue\">\n <Dialog as=\"div\" class=\"sl-relative sl-z-50\" @close=\"onClose\" :initial-focus=\"initialFocusElement\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\" enter-from=\"opacity-0\" enter-to=\"opacity-100\"\n leave=\"ease-in duration-200\" leave-from=\"opacity-100\" leave-to=\"opacity-0\">\n <div class=\"sl-fixed sl-inset-0 sl-bg-gray-500/75 sl-transition-opacity\" />\n </TransitionChild>\n\n <div class=\"sl-fixed sl-inset-0 sl-z-10 sl-w-screen sl-overflow-y-auto\">\n <div class=\"sl-flex sl-min-h-full sl-items-center sl-justify-center sl-p-4 sl-text-center\"\n :class=\"[position === 'top' ? 'sm:sl-items-start sm:sl-pt-16' : 'sm:sl-items-center']\">\n <TransitionChild as=\"template\" enter=\"ease-out duration-300\"\n enter-from=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\"\n enter-to=\"opacity-100 translate-y-0 sm:scale-100\" leave=\"ease-in duration-200\"\n leave-from=\"opacity-100 translate-y-0 sm:scale-100\" leave-to=\"opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95\">\n <DialogPanel\n :class=\"['sl-relative sl-transform sl-overflow-hidden sl-rounded-lg sl-bg-white sl-text-left sl-shadow-xl sl-transition-all sl-w-full', size]\">\n <div class=\"sl-bg-white\">\n <div class=\"sl-px-4 sl-pt-5 sl-pb-4 sm:sl-p-6 sm:sl-pb-4\">\n <div class=\"sm:sl-flex sm:sl-items-start\">\n <div class=\"sl-mx-auto sl-flex sl-h-12 sl-w-12 sl-flex-shrink-0 sl-items-center sl-justify-center sl-rounded-full sl-bg-gray-100 sm:sl-mx-0 sm:sl-h-10 sm:sl-w-10\">\n <slot name=\"icon\" />\n </div>\n <div class=\"sl-mt-3 sl-text-center sm:sl-ml-4 sm:sl-mt-0 sm:sl-text-left sl-w-full\">\n <DialogTitle as=\"h3\" class=\"sl-text-base sl-font-semibold sl-leading-6 sl-text-gray-900\">\n <slot name=\"header\" />\n </DialogTitle>\n <div class=\"sl-mt-2\">\n <slot name=\"body\">\n <slot />\n </slot>\n </div>\n </div>\n </div>\n </div>\n <div class=\"sl-px-4 sl-py-3 sm:sl-flex sm:sl-flex-row-reverse sm:sl-px-6\">\n <slot name=\"footer\">\n <div class=\"sl-flex sl-w-full sl-justify-end sl-gap-3\">\n <UiButton v-if=\"showCancel\" center-label theme=\"light\" :outlined=\"true\" @button-click=\"onClose\">\n {{ cancelText }}\n </UiButton>\n <UiButton v-if=\"showConfirm\" center-label :theme=\"confirmTheme\" :outlined=\"false\" @button-click=\"onConfirm\">\n {{ confirmText }}\n </UiButton>\n </div>\n </slot>\n </div>\n </div>\n <button ref=\"fallbackFocusRef\" class=\"sl-sr-only\">Close</button>\n </DialogPanel>\n </TransitionChild>\n </div>\n </div>\n </Dialog>\n </TransitionRoot>\n</template>\n\n<script setup lang=\"ts\">\nimport { Dialog, DialogPanel, DialogTitle, TransitionChild, TransitionRoot } from '@headlessui/vue';\nimport { ref, computed } from 'vue';\nimport type { Theme } from '@/types/ui';\nimport UiButton from '@/components/UiButton.vue';\n\ndefineProps({\n modelValue: { type: Boolean, required: true },\n size: {\n type: String,\n default: 'sm:max-w-lg',\n validator: (value: string) => [\n 'sm:max-w-sm','sm:max-w-md','sm:max-w-lg','sm:max-w-xl','sm:max-w-2xl','sm:max-w-3xl','sm:max-w-4xl','sm:max-w-5xl','sm:max-w-6xl','sm:max-w-7xl'\n ].includes(value)\n },\n position: { type: String, default: 'center', validator: (value: string) => ['center', 'top'].includes(value) },\n showCancel: { type: Boolean, default: true },\n showConfirm: { type: Boolean, default: true },\n cancelText: { type: String, default: 'Cancel' },\n confirmText: { type: String, default: 'Confirm' },\n confirmTheme: { type: String as () => Theme, default: 'primary' }\n});\n\nconst emit = defineEmits(['update:modelValue', 'cancel', 'confirm']);\nconst fallbackFocusRef = ref(null);\nconst initialFocusElement = computed(() => fallbackFocusRef.value);\n\nconst onClose = () => {\n emit('update:modelValue', false);\n emit('cancel');\n};\n\nconst onConfirm = () => {\n emit('confirm');\n emit('update:modelValue', false);\n};\n</script>\n\n<style scoped>\n</style>\n\n\n"],"names":["emit","__emit","fallbackFocusRef","ref","initialFocusElement","computed","onClose","onConfirm","_createBlock","_unref","TransitionRoot","__props","_createVNode","Dialog","TransitionChild","_cache","_createElementVNode","_hoisted_1","_normalizeClass","DialogPanel","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","_renderSlot","_ctx","_hoisted_6","DialogTitle","_hoisted_7","_hoisted_8","_hoisted_9","UiButton"],"mappings":"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"}
|