@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.
Files changed (196) hide show
  1. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js +70 -0
  2. package/dist/CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js.map +1 -0
  3. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js +186 -0
  4. package/dist/CheckboxInput.vue_vue_type_script_setup_true_lang-tYAo46wK.js.map +1 -0
  5. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js +304 -0
  6. package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js.map +1 -0
  7. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js +186 -0
  8. package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js.map +1 -0
  9. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js +123 -0
  10. package/dist/DayCalendar.vue_vue_type_script_setup_true_lang-xE5bCa3O.js.map +1 -0
  11. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js +85 -0
  12. package/dist/DefaultLayout.vue_vue_type_script_setup_true_lang-BZAz6aC-.js.map +1 -0
  13. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js +201 -0
  14. package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js.map +1 -0
  15. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js +153 -0
  16. package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js.map +1 -0
  17. package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +75 -0
  18. package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js.map +1 -0
  19. package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js +89 -0
  20. package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js.map +1 -0
  21. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js +49 -0
  22. package/dist/HeaderLayout.vue_vue_type_script_setup_true_lang-BY2G6hCc.js.map +1 -0
  23. package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js +66 -0
  24. package/dist/MonthCalendar.vue_vue_type_script_setup_true_lang-B9Bs0z8j.js.map +1 -0
  25. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-2WURj34G.js +29 -0
  26. package/dist/NavigationGroup.vue_vue_type_script_setup_true_lang-2WURj34G.js.map +1 -0
  27. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-DiNg3gz2.js +51 -0
  28. package/dist/NavigationItem.vue_vue_type_script_setup_true_lang-DiNg3gz2.js.map +1 -0
  29. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js +242 -0
  30. package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js.map +1 -0
  31. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js +173 -0
  32. package/dist/SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js.map +1 -0
  33. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js +197 -0
  34. package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js.map +1 -0
  35. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js +230 -0
  36. package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js.map +1 -0
  37. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js +158 -0
  38. package/dist/TextAreaInput.vue_vue_type_script_setup_true_lang-CbR651TU.js.map +1 -0
  39. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js +108 -0
  40. package/dist/UiAvatar.vue_vue_type_script_setup_true_lang-CDNjUA1L.js.map +1 -0
  41. package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js +68 -0
  42. package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js.map +1 -0
  43. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js +131 -0
  44. package/dist/UiLoading.vue_vue_type_script_setup_true_lang-DCz52-Me.js.map +1 -0
  45. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js +162 -0
  46. package/dist/UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js.map +1 -0
  47. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js +222 -0
  48. package/dist/UiNavLink.vue_vue_type_script_setup_true_lang-Bz5oiCCk.js.map +1 -0
  49. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-0zFKwh43.js +46 -0
  50. package/dist/UiProgressBar.vue_vue_type_script_setup_true_lang-0zFKwh43.js.map +1 -0
  51. package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js +72 -0
  52. package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js.map +1 -0
  53. package/dist/UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js +211 -0
  54. package/dist/UiTable.vue_vue_type_script_setup_true_lang-hI1_xamh.js.map +1 -0
  55. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js +66 -0
  56. package/dist/UiTransition.vue_vue_type_script_setup_true_lang-DwBTj18t.js.map +1 -0
  57. package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js +154 -0
  58. package/dist/WeekCalendar.vue_vue_type_script_setup_true_lang-DAFQiRI9.js.map +1 -0
  59. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js +29 -0
  60. package/dist/YearCalendar.vue_vue_type_script_setup_true_lang-BfJkvmpN.js.map +1 -0
  61. package/dist/_plugin-vue_export-helper-CHgC5LLL.js +10 -0
  62. package/dist/_plugin-vue_export-helper-CHgC5LLL.js.map +1 -0
  63. package/dist/calendar-905Ofszh.js +77 -0
  64. package/dist/calendar-905Ofszh.js.map +1 -0
  65. package/dist/calendars/CalendarDashboard.d.ts +3 -0
  66. package/dist/calendars/CalendarDashboard.js +72 -0
  67. package/dist/calendars/CalendarDashboard.js.map +1 -0
  68. package/dist/calendars/CalendarHeader.d.ts +3 -0
  69. package/dist/calendars/CalendarHeader.js +5 -0
  70. package/dist/calendars/CalendarHeader.js.map +1 -0
  71. package/dist/calendars/DayCalendar.d.ts +3 -0
  72. package/dist/calendars/DayCalendar.js +5 -0
  73. package/dist/calendars/DayCalendar.js.map +1 -0
  74. package/dist/calendars/EventCard.d.ts +3 -0
  75. package/dist/calendars/EventCard.js +5 -0
  76. package/dist/calendars/EventCard.js.map +1 -0
  77. package/dist/calendars/EventsList.d.ts +3 -0
  78. package/dist/calendars/EventsList.js +5 -0
  79. package/dist/calendars/EventsList.js.map +1 -0
  80. package/dist/calendars/MonthCalendar.d.ts +3 -0
  81. package/dist/calendars/MonthCalendar.js +5 -0
  82. package/dist/calendars/MonthCalendar.js.map +1 -0
  83. package/dist/calendars/WeekCalendar.d.ts +3 -0
  84. package/dist/calendars/WeekCalendar.js +5 -0
  85. package/dist/calendars/WeekCalendar.js.map +1 -0
  86. package/dist/calendars/YearCalendar.d.ts +3 -0
  87. package/dist/calendars/YearCalendar.js +5 -0
  88. package/dist/calendars/YearCalendar.js.map +1 -0
  89. package/dist/components/Avatar.d.ts +3 -0
  90. package/dist/components/Avatar.js +5 -0
  91. package/dist/components/Avatar.js.map +1 -0
  92. package/dist/components/Badge.d.ts +3 -0
  93. package/dist/components/Badge.js +42 -0
  94. package/dist/components/Badge.js.map +1 -0
  95. package/dist/components/Breadcrumb.d.ts +3 -0
  96. package/dist/components/Breadcrumb.js +5 -0
  97. package/dist/components/Breadcrumb.js.map +1 -0
  98. package/dist/components/Button.d.ts +3 -0
  99. package/dist/components/Button.js +197 -0
  100. package/dist/components/Button.js.map +1 -0
  101. package/dist/components/Loading.d.ts +3 -0
  102. package/dist/components/Loading.js +5 -0
  103. package/dist/components/Loading.js.map +1 -0
  104. package/dist/components/LoadingDots.d.ts +3 -0
  105. package/dist/components/LoadingDots.js +69 -0
  106. package/dist/components/LoadingDots.js.map +1 -0
  107. package/dist/components/Modal.d.ts +3 -0
  108. package/dist/components/Modal.js +5 -0
  109. package/dist/components/Modal.js.map +1 -0
  110. package/dist/components/NavLink.d.ts +3 -0
  111. package/dist/components/NavLink.js +5 -0
  112. package/dist/components/NavLink.js.map +1 -0
  113. package/dist/components/ProgressBar.d.ts +3 -0
  114. package/dist/components/ProgressBar.js +5 -0
  115. package/dist/components/ProgressBar.js.map +1 -0
  116. package/dist/components/RadialProgressBar.d.ts +3 -0
  117. package/dist/components/RadialProgressBar.js +5 -0
  118. package/dist/components/RadialProgressBar.js.map +1 -0
  119. package/dist/components/Table.d.ts +3 -0
  120. package/dist/components/Table.js +5 -0
  121. package/dist/components/Table.js.map +1 -0
  122. package/dist/components/TextInput.d.ts +3 -0
  123. package/dist/components/TextInput.js +111 -0
  124. package/dist/components/TextInput.js.map +1 -0
  125. package/dist/components/Transition.d.ts +3 -0
  126. package/dist/components/Transition.js +5 -0
  127. package/dist/components/Transition.js.map +1 -0
  128. package/dist/forms/DynamicForm.d.ts +3 -0
  129. package/dist/forms/DynamicForm.js +5 -0
  130. package/dist/forms/DynamicForm.js.map +1 -0
  131. package/dist/forms/DynamicFormField.d.ts +3 -0
  132. package/dist/forms/DynamicFormField.js +5 -0
  133. package/dist/forms/DynamicFormField.js.map +1 -0
  134. package/dist/forms/FormFieldWrapper.d.ts +3 -0
  135. package/dist/forms/FormFieldWrapper.js +158 -0
  136. package/dist/forms/FormFieldWrapper.js.map +1 -0
  137. package/dist/id-DafBB_QF.js +20 -0
  138. package/dist/id-DafBB_QF.js.map +1 -0
  139. package/dist/index.js +246 -4609
  140. package/dist/index.js.map +1 -1
  141. package/dist/inputs/CheckboxInput.d.ts +3 -0
  142. package/dist/inputs/CheckboxInput.js +5 -0
  143. package/dist/inputs/CheckboxInput.js.map +1 -0
  144. package/dist/inputs/ComboboxInput.d.ts +3 -0
  145. package/dist/inputs/ComboboxInput.js +5 -0
  146. package/dist/inputs/ComboboxInput.js.map +1 -0
  147. package/dist/inputs/SelectInput.d.ts +3 -0
  148. package/dist/inputs/SelectInput.js +5 -0
  149. package/dist/inputs/SelectInput.js.map +1 -0
  150. package/dist/inputs/SwitchInput.d.ts +3 -0
  151. package/dist/inputs/SwitchInput.js +5 -0
  152. package/dist/inputs/SwitchInput.js.map +1 -0
  153. package/dist/inputs/TagifyInput.d.ts +3 -0
  154. package/dist/inputs/TagifyInput.js +5 -0
  155. package/dist/inputs/TagifyInput.js.map +1 -0
  156. package/dist/inputs/TextAreaInput.d.ts +3 -0
  157. package/dist/inputs/TextAreaInput.js +5 -0
  158. package/dist/inputs/TextAreaInput.js.map +1 -0
  159. package/dist/layouts/DashboardLayout.d.ts +3 -0
  160. package/dist/layouts/DashboardLayout.js +5 -0
  161. package/dist/layouts/DashboardLayout.js.map +1 -0
  162. package/dist/layouts/DefaultLayout.d.ts +3 -0
  163. package/dist/layouts/DefaultLayout.js +5 -0
  164. package/dist/layouts/DefaultLayout.js.map +1 -0
  165. package/dist/layouts/HeaderLayout.d.ts +3 -0
  166. package/dist/layouts/HeaderLayout.js +5 -0
  167. package/dist/layouts/HeaderLayout.js.map +1 -0
  168. package/dist/layouts/NavigationGroup.d.ts +3 -0
  169. package/dist/layouts/NavigationGroup.js +5 -0
  170. package/dist/layouts/NavigationGroup.js.map +1 -0
  171. package/dist/layouts/NavigationItem.d.ts +3 -0
  172. package/dist/layouts/NavigationItem.js +5 -0
  173. package/dist/layouts/NavigationItem.js.map +1 -0
  174. package/dist/layouts/SidebarLayout.d.ts +3 -0
  175. package/dist/layouts/SidebarLayout.js +5 -0
  176. package/dist/layouts/SidebarLayout.js.map +1 -0
  177. package/dist/src/components/UiLoadingDots.d.ts +1 -1
  178. package/dist/src/components/UiNavLink.d.ts +1 -1
  179. package/dist/src/components/inputs/ComboboxInput.d.ts +2 -2
  180. package/dist/src/components/inputs/SelectInput.d.ts +2 -2
  181. package/dist/src/components/layouts/DefaultLayout.d.ts +1 -1
  182. package/package.json +2 -3
  183. package/dist/CheckboxInput-rWkcde69.js +0 -5
  184. package/dist/CheckboxInput-rWkcde69.js.map +0 -1
  185. package/dist/ComboboxInput-B98P_8CZ.js +0 -5
  186. package/dist/ComboboxInput-B98P_8CZ.js.map +0 -1
  187. package/dist/SelectInput-B5liNv7H.js +0 -5
  188. package/dist/SelectInput-B5liNv7H.js.map +0 -1
  189. package/dist/SwitchInput-D1k9O8gn.js +0 -5
  190. package/dist/SwitchInput-D1k9O8gn.js.map +0 -1
  191. package/dist/TextAreaInput-Di6Kstic.js +0 -5
  192. package/dist/TextAreaInput-Di6Kstic.js.map +0 -1
  193. package/dist/UiLoading-BuzCrLqO.js +0 -5
  194. package/dist/UiLoading-BuzCrLqO.js.map +0 -1
  195. package/dist/index.umd.cjs +0 -11
  196. 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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"}