@stachelock/ui 0.1.3 → 0.1.4
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 → CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js} +2 -2
- package/dist/{CalendarHeader.vue_vue_type_script_setup_true_lang-B3KQTxfD.js.map → CalendarHeader.vue_vue_type_script_setup_true_lang-Cirr0hMB.js.map} +1 -1
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-2dJNxQUF.js +1300 -0
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-2dJNxQUF.js.map +1 -0
- package/dist/{DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js → DashboardLayout.vue_vue_type_script_setup_true_lang-VeZhdPhj.js} +38 -37
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-VeZhdPhj.js.map +1 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js +217 -0
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BpfPAZiT.js.map +1 -0
- package/dist/{DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js → DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js} +40 -24
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-DvT03FIS.js.map +1 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js +157 -0
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-YV1lfgUY.js.map +1 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js +103 -0
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cn_WOpZi.js.map +1 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js +522 -0
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BPjHLHdM.js.map +1 -0
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js → SidebarLayout.vue_vue_type_script_setup_true_lang-J1nfUTdM.js} +28 -27
- package/dist/{SidebarLayout.vue_vue_type_script_setup_true_lang-CQIW5dy_.js.map → SidebarLayout.vue_vue_type_script_setup_true_lang-J1nfUTdM.js.map} +1 -1
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js +273 -0
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BFr2SByh.js.map +1 -0
- package/dist/{TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js → TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js} +60 -50
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-DRR6jt_8.js.map +1 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js +82 -0
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-quGuN9v4.js.map +1 -0
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js → UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js} +21 -20
- package/dist/{UiModal.vue_vue_type_script_setup_true_lang-CMk62qeq.js.map → UiModal.vue_vue_type_script_setup_true_lang-SAo39zpS.js.map} +1 -1
- package/dist/XMarkIcon-C4wILUsz.js +40 -0
- package/dist/XMarkIcon-C4wILUsz.js.map +1 -0
- package/dist/calculate-active-index-CksdUwZY.js +87 -0
- package/dist/calculate-active-index-CksdUwZY.js.map +1 -0
- package/dist/calendars/CalendarDashboard.js +2 -2
- package/dist/calendars/CalendarHeader.js +1 -1
- package/dist/calendars/EventCard.js +1 -1
- package/dist/calendars/EventsList.js +1 -1
- package/dist/components/Breadcrumb.js +1 -1
- package/dist/components/Modal.js +1 -1
- package/dist/components/RadialProgressBar.d.ts +2 -2
- package/dist/components/RadialProgressBar.js +1 -1
- package/dist/description-CBd3BJ9O.js +30 -0
- package/dist/description-CBd3BJ9O.js.map +1 -0
- package/dist/dialog-U1KNiPzc.js +493 -0
- package/dist/dialog-U1KNiPzc.js.map +1 -0
- package/dist/form-DQKuKVqJ.js +51 -0
- package/dist/form-DQKuKVqJ.js.map +1 -0
- package/dist/forms/DynamicForm.js +1 -1
- package/dist/forms/DynamicFormField.js +1 -1
- package/dist/forms/FormFieldWrapper.js +71 -42
- package/dist/forms/FormFieldWrapper.js.map +1 -1
- package/dist/index.js +307 -242
- package/dist/index.js.map +1 -1
- package/dist/inputs/ComboboxInput.js +1 -1
- package/dist/inputs/SelectInput.js +1 -1
- package/dist/inputs/SwitchInput.js +1 -1
- package/dist/inputs/TagifyInput.js +1 -1
- package/dist/keyboard-DJD8TwH4.js +113 -0
- package/dist/keyboard-DJD8TwH4.js.map +1 -0
- package/dist/layouts/DashboardLayout.js +1 -1
- package/dist/layouts/SidebarLayout.js +1 -1
- package/dist/open-closed-DgcU-HDT.js +179 -0
- package/dist/open-closed-DgcU-HDT.js.map +1 -0
- package/dist/src/components/layouts/DashboardLayout.d.ts.map +1 -1
- package/dist/src/components/layouts/SidebarLayout.d.ts.map +1 -1
- package/dist/transition-CuxxW9dY.js +209 -0
- package/dist/transition-CuxxW9dY.js.map +1 -0
- package/package.json +1 -1
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js +0 -304
- package/dist/ComboboxInput.vue_vue_type_script_setup_true_lang-DoJHjJsA.js.map +0 -1
- package/dist/DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js.map +0 -1
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js +0 -201
- package/dist/DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js.map +0 -1
- package/dist/DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js.map +0 -1
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js +0 -75
- package/dist/EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js.map +0 -1
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js +0 -89
- package/dist/EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js.map +0 -1
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js +0 -242
- package/dist/SelectInput.vue_vue_type_script_setup_true_lang-BguP8xMU.js.map +0 -1
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js +0 -197
- package/dist/SwitchInput.vue_vue_type_script_setup_true_lang-BagTQ6M0.js.map +0 -1
- package/dist/TagifyInput.vue_vue_type_script_setup_true_lang-RHqhKoK5.js.map +0 -1
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js +0 -68
- package/dist/UiBreadcrumb.vue_vue_type_script_setup_true_lang-CMH47CoK.js.map +0 -1
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js +0 -72
- package/dist/UiRadialProgressBar.vue_vue_type_script_setup_true_lang-BGCBJa2S.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DashboardLayout.vue_vue_type_script_setup_true_lang-CClxYrOW.js","sources":["../src/components/layouts/DashboardLayout.vue"],"sourcesContent":["<template>\n <div class=\"sl-min-h-screen sl-bg-gray-50\">\n <!-- Mobile sidebar overlay -->\n <TransitionRoot as=\"template\" :show=\"sidebarOpen\">\n <Dialog as=\"div\" class=\"sl-relative sl-z-50 lg:sl-hidden\" @close=\"closeSidebar\">\n <TransitionChild as=\"template\" enter=\"sl-transition-opacity sl-ease-linear sl-duration-300\" enter-from=\"sl-opacity-0\"\n enter-to=\"sl-opacity-100\" leave=\"sl-transition-opacity sl-ease-linear sl-duration-300\" leave-from=\"sl-opacity-100\"\n leave-to=\"sl-opacity-0\">\n <div class=\"sl-fixed sl-inset-0 sl-bg-gray-900/80\" />\n </TransitionChild>\n\n <div class=\"sl-fixed sl-inset-0 sl-flex\">\n <TransitionChild as=\"template\" enter=\"sl-transition sl-ease-in-out sl-duration-300 sl-transform\"\n enter-from=\"-sl-translate-x-full\" enter-to=\"sl-translate-x-0\"\n leave=\"sl-transition sl-ease-in-out sl-duration-300 sl-transform\" leave-from=\"sl-translate-x-0\"\n leave-to=\"-sl-translate-x-full\">\n <DialogPanel class=\"sl-relative sl-mr-16 sl-flex sl-w-full sl-max-w-xs sl-flex-1\">\n <TransitionChild as=\"template\" enter=\"sl-ease-in-out sl-duration-300\" enter-from=\"sl-opacity-0\"\n enter-to=\"sl-opacity-100\" leave=\"sl-ease-in-out sl-duration-300\" leave-from=\"sl-opacity-100\" leave-to=\"sl-opacity-0\">\n <div class=\"sl-absolute sl-left-full sl-top-0 sl-flex sl-w-16 sl-justify-center sl-pt-5\">\n <button type=\"button\" class=\"-sl-m-2.5 sl-p-2.5\" @click=\"closeSidebar()\">\n <span class=\"sl-sr-only\">Close sidebar</span>\n <XMarkIcon class=\"sl-h-6 sl-w-6 sl-text-stachelock-050\" aria-hidden=\"true\" />\n </button>\n </div>\n </TransitionChild>\n\n <div class=\"sl-flex sl-grow sl-flex-col sl-gap-y-5 sl-bg-stachelock-600 sl-px-6 sl-pb-2 sl-ring-1 sl-ring-white/10\">\n <div class=\"sl-flex sl-h-16 sl-shrink-0 sl-items-center\">\n <slot name=\"logo\">\n <div class=\"sl-text-stachelock-050 sl-font-semibold sl-text-lg\">Logo</div>\n </slot>\n </div>\n <nav class=\"sl-flex sl-flex-1 sl-flex-col\">\n <ul role=\"list\" class=\"-sl-mx-2 sl-flex-1 sl-space-y-1\">\n <slot name=\"navigation\">\n <!-- Default navigation slot -->\n </slot>\n </ul>\n </nav>\n <div class=\"sl-mt-auto\">\n <slot name=\"sidebar-footer\">\n <!-- Sidebar footer content -->\n </slot>\n </div>\n </div>\n </DialogPanel>\n </TransitionChild>\n </div>\n </Dialog>\n </TransitionRoot>\n\n <!-- Desktop sidebar -->\n <div class=\"sl-hidden lg:sl-fixed lg:sl-inset-y-0 lg:sl-left-0 lg:sl-z-50 lg:sl-block lg:sl-pb-4 sl-pt-4 lg:sl-bg-stachelock-600\"\n :class=\"isWideSidebar ? 'lg:sl-w-72' : 'lg:sl-w-20'\">\n <div class=\"sl-flex sl-h-16 sl-shrink-0 sl-items-center sl-px-6\">\n <slot name=\"logo\">\n <div class=\"sl-text-stachelock-050 sl-font-semibold sl-text-lg\">Logo</div>\n </slot>\n </div>\n <nav class=\"sl-mt-8 sl-flex sl-flex-col sl-justify-between sl-h-full\">\n <ul role=\"list\" :class=\"isWideSidebar ? 'sl-flex sl-flex-col sl-items-start sl-mx-4 sl-space-y-1' : 'sl-flex sl-flex-col sl-items-center sl-space-y-1'\">\n <slot name=\"navigation\">\n <!-- Default navigation slot -->\n </slot>\n </ul>\n <div class=\"sl-absolute sl-bottom-4 sl-left-0 sl-right-0 sl-px-6\">\n <slot name=\"sidebar-footer\">\n <!-- Sidebar footer content -->\n </slot>\n </div>\n </nav>\n </div>\n\n <!-- Main content area -->\n <div :class=\"['lg:sl-pl-20', isWideSidebar ? 'lg:sl-pl-72' : 'lg:sl-pl-20']\">\n <!-- Header -->\n <div class=\"sl-sticky sl-top-0 sl-z-40 sl-flex sl-h-16 sl-shrink-0 sl-items-center sl-gap-x-4 sl-border-b sl-border-gray-200 sl-bg-white sl-px-4 sl-shadow-sm sm:sl-gap-x-6 sm:sl-px-6 lg:sl-px-8\">\n <button type=\"button\" class=\"-sl-m-2.5 sl-p-2.5 sl-text-gray-700 lg:sl-hidden\" @click=\"openSidebar()\">\n <span class=\"sl-sr-only\">Open sidebar</span>\n <Bars3Icon class=\"sl-h-6 sl-w-6\" aria-hidden=\"true\" />\n </button>\n\n <!-- Separator -->\n <div class=\"sl-h-6 sl-w-px sl-bg-gray-900/10 lg:sl-hidden\" aria-hidden=\"true\" />\n\n <div class=\"sl-flex sl-flex-1 sl-gap-x-4 sm:sl-self-stretch lg:sl-gap-x-6\">\n <div class=\"sl-relative sl-flex sl-flex-1\">\n <slot name=\"header-content\">\n <!-- Header content -->\n </slot>\n </div>\n <div class=\"sl-flex sl-items-center sl-gap-x-4 lg:sl-gap-x-6\">\n <slot name=\"header-right\">\n <!-- Header right content (notifications, profile, etc.) -->\n </slot>\n </div>\n </div>\n </div>\n\n <!-- Page header -->\n <div v-if=\"$slots['page-header']\" class=\"sl-border-b sl-border-gray-200 sl-bg-white sl-px-4 sl-py-6 sm:sl-px-6 lg:sl-px-8\">\n <slot name=\"page-header\">\n <!-- Page header content -->\n </slot>\n </div>\n\n <!-- Main content -->\n <main class=\"sl-px-4 sm:sl-px-6 lg:sl-px-8 sl-py-6\">\n <slot name=\"main\">\n <!-- Main content slot -->\n </slot>\n </main>\n\n <!-- Footer -->\n <footer v-if=\"$slots.footer\" class=\"sl-border-t sl-border-gray-200 sl-bg-white sl-px-4 sl-py-6 sm:sl-px-6 lg:sl-px-8\">\n <slot name=\"footer\">\n <!-- Footer content -->\n </slot>\n </footer>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { ref } from 'vue';\nimport { Dialog, DialogPanel, TransitionChild, TransitionRoot } from '@headlessui/vue';\nimport { Bars3Icon, XMarkIcon } from '@heroicons/vue/24/outline';\n\nconst props = defineProps({\n isWideSidebar: {\n type: Boolean,\n default: false\n }\n});\n\nconst emit = defineEmits(['sidebar-toggle']);\n\nconst sidebarOpen = ref(false);\n\nconst closeSidebar = () => {\n sidebarOpen.value = false;\n};\n\nconst openSidebar = () => {\n sidebarOpen.value = true;\n};\n\n\n</script>\n\n<style scoped>\n</style>\n"],"names":["sidebarOpen","ref","closeSidebar","openSidebar","_openBlock","_createElementBlock","_hoisted_1","_createVNode","_unref","TransitionRoot","Dialog","TransitionChild","_cache","_createElementVNode","_hoisted_2","DialogPanel","_hoisted_3","XMarkIcon","_hoisted_4","_hoisted_5","_renderSlot","_ctx","_hoisted_6","_hoisted_7","_hoisted_8","_normalizeClass","__props","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","Bars3Icon","_hoisted_13","_hoisted_14","_hoisted_15","$slots","_hoisted_16","_hoisted_17","_hoisted_18"],"mappings":"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"}
|
|
@@ -1,201 +0,0 @@
|
|
|
1
|
-
import { defineComponent as L, ref as q, reactive as G, watch as v, computed as h, createElementBlock as o, openBlock as l, withModifiers as J, normalizeClass as d, unref as p, createCommentVNode as n, toDisplayString as r, Fragment as V, renderList as k, createElementVNode as i, createBlock as C, createVNode as B, withCtx as F, createTextVNode as _ } from "vue";
|
|
2
|
-
import { useForm as K } from "vee-validate";
|
|
3
|
-
import { ExclamationCircleIcon as P } from "@heroicons/vue/24/outline";
|
|
4
|
-
import S from "./components/Button.js";
|
|
5
|
-
import { _ as Q } from "./DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js";
|
|
6
|
-
const W = {
|
|
7
|
-
key: 0,
|
|
8
|
-
class: "sl-mb-6"
|
|
9
|
-
}, X = {
|
|
10
|
-
key: 0,
|
|
11
|
-
class: "sl-text-lg sl-font-semibold sl-text-gray-900 sl-mb-2"
|
|
12
|
-
}, Y = {
|
|
13
|
-
key: 1,
|
|
14
|
-
class: "sl-text-sm sl-text-gray-600"
|
|
15
|
-
}, Z = {
|
|
16
|
-
key: 0,
|
|
17
|
-
class: "sl-mb-4"
|
|
18
|
-
}, ee = {
|
|
19
|
-
key: 0,
|
|
20
|
-
class: "sl-text-md sl-font-medium sl-text-gray-900 sl-mb-1"
|
|
21
|
-
}, te = {
|
|
22
|
-
key: 1,
|
|
23
|
-
class: "sl-text-sm sl-text-gray-600"
|
|
24
|
-
}, se = {
|
|
25
|
-
key: 2,
|
|
26
|
-
class: "sl-mt-4"
|
|
27
|
-
}, ae = { class: "sl-bg-red-50 sl-border sl-border-red-200 sl-rounded-md sl-p-4" }, le = { class: "sl-flex" }, oe = { class: "sl-ml-3" }, ne = { class: "sl-mt-2 sl-text-sm sl-text-red-700" }, ge = /* @__PURE__ */ L({
|
|
28
|
-
__name: "DynamicForm",
|
|
29
|
-
props: {
|
|
30
|
-
schema: {},
|
|
31
|
-
modelValue: {},
|
|
32
|
-
loading: { type: Boolean },
|
|
33
|
-
showActions: { type: Boolean, default: !0 },
|
|
34
|
-
showCancelButton: { type: Boolean, default: !1 },
|
|
35
|
-
submitButtonText: {},
|
|
36
|
-
cancelButtonText: {},
|
|
37
|
-
submitButtonVariant: { default: "primary" },
|
|
38
|
-
actionsAlignment: { default: "right" },
|
|
39
|
-
formError: {}
|
|
40
|
-
},
|
|
41
|
-
emits: ["update:modelValue", "submit", "cancel", "field-change"],
|
|
42
|
-
setup(E, { expose: w, emit: N }) {
|
|
43
|
-
const c = E, u = N, f = q(), a = G({}), { handleSubmit: j, setErrors: x, meta: g } = K({
|
|
44
|
-
keepValuesOnUnmount: !0
|
|
45
|
-
}), b = () => {
|
|
46
|
-
const e = { ...c.modelValue };
|
|
47
|
-
c.schema.sections.forEach((t) => {
|
|
48
|
-
t.fields.forEach((s) => {
|
|
49
|
-
s.name in e || (e[s.name] = s.defaultValue ?? $(s.type));
|
|
50
|
-
});
|
|
51
|
-
}), Object.assign(a, e);
|
|
52
|
-
};
|
|
53
|
-
v(
|
|
54
|
-
() => c.modelValue,
|
|
55
|
-
(e) => {
|
|
56
|
-
e && Object.assign(a, e);
|
|
57
|
-
},
|
|
58
|
-
{ deep: !0 }
|
|
59
|
-
), v(
|
|
60
|
-
a,
|
|
61
|
-
(e) => {
|
|
62
|
-
u("update:modelValue", { ...e });
|
|
63
|
-
},
|
|
64
|
-
{ deep: !0 }
|
|
65
|
-
), b();
|
|
66
|
-
const D = h(() => c.schema.sections.filter(
|
|
67
|
-
(e) => e.condition ? e.condition(a) : !0
|
|
68
|
-
)), A = h(() => {
|
|
69
|
-
const e = ["sl-space-y-6"];
|
|
70
|
-
return c.schema.className && e.push(c.schema.className), e.join(" ");
|
|
71
|
-
}), T = (e) => {
|
|
72
|
-
const t = [
|
|
73
|
-
"sl-grid",
|
|
74
|
-
"sl-gap-4"
|
|
75
|
-
], s = e.columns || 1;
|
|
76
|
-
return t.push("sl-grid-cols-1"), s > 1 && t.push(`md:sl-grid-cols-${Math.min(s, 3)}`), e.className && t.push(e.className), t.join(" ");
|
|
77
|
-
}, O = (e) => {
|
|
78
|
-
const t = [];
|
|
79
|
-
return e.colSpan && e.colSpan > 1 && t.push(`sl-col-span-${Math.min(e.colSpan, 3)}`), e.className && t.push(e.className), t.join(" ");
|
|
80
|
-
}, M = (e) => e.condition ? e.condition(a, e) : !0, U = h(() => g.value.valid), $ = (e) => {
|
|
81
|
-
switch (e) {
|
|
82
|
-
case "checkbox":
|
|
83
|
-
case "switch":
|
|
84
|
-
return !1;
|
|
85
|
-
case "select":
|
|
86
|
-
return null;
|
|
87
|
-
case "number":
|
|
88
|
-
return 0;
|
|
89
|
-
default:
|
|
90
|
-
return "";
|
|
91
|
-
}
|
|
92
|
-
}, y = j((e) => {
|
|
93
|
-
u("submit", e, { setErrors: x });
|
|
94
|
-
}), z = () => {
|
|
95
|
-
u("cancel");
|
|
96
|
-
}, R = (e, t) => {
|
|
97
|
-
u("field-change", e, t, a), e.onFieldChange && e.onFieldChange(t, e, a);
|
|
98
|
-
};
|
|
99
|
-
return w({
|
|
100
|
-
validate: async () => g.value.valid,
|
|
101
|
-
reset: () => {
|
|
102
|
-
Object.keys(a).forEach((e) => {
|
|
103
|
-
delete a[e];
|
|
104
|
-
}), b();
|
|
105
|
-
},
|
|
106
|
-
setFieldValue: (e, t) => {
|
|
107
|
-
a[e] = t;
|
|
108
|
-
},
|
|
109
|
-
getFieldValue: (e) => a[e],
|
|
110
|
-
formData: a,
|
|
111
|
-
formRef: f
|
|
112
|
-
}), (e, t) => (l(), o("form", {
|
|
113
|
-
ref_key: "formRef",
|
|
114
|
-
ref: f,
|
|
115
|
-
class: d(A.value),
|
|
116
|
-
onSubmit: t[0] || (t[0] = J(
|
|
117
|
-
//@ts-ignore
|
|
118
|
-
(...s) => p(y) && p(y)(...s),
|
|
119
|
-
["prevent"]
|
|
120
|
-
))
|
|
121
|
-
}, [
|
|
122
|
-
e.schema.title || e.schema.description ? (l(), o("div", W, [
|
|
123
|
-
e.schema.title ? (l(), o("h2", X, r(e.schema.title), 1)) : n("", !0),
|
|
124
|
-
e.schema.description ? (l(), o("p", Y, r(e.schema.description), 1)) : n("", !0)
|
|
125
|
-
])) : n("", !0),
|
|
126
|
-
(l(!0), o(V, null, k(D.value, (s, H) => (l(), o("div", {
|
|
127
|
-
key: s.id || H
|
|
128
|
-
}, [
|
|
129
|
-
s.title || s.description ? (l(), o("div", Z, [
|
|
130
|
-
s.title ? (l(), o("h3", ee, r(s.title), 1)) : n("", !0),
|
|
131
|
-
s.description ? (l(), o("p", te, r(s.description), 1)) : n("", !0)
|
|
132
|
-
])) : n("", !0),
|
|
133
|
-
i("div", {
|
|
134
|
-
class: d(T(s))
|
|
135
|
-
}, [
|
|
136
|
-
(l(!0), o(V, null, k(s.fields, (m) => (l(), o("div", {
|
|
137
|
-
key: m.name,
|
|
138
|
-
class: d(O(m))
|
|
139
|
-
}, [
|
|
140
|
-
M(m) ? (l(), C(Q, {
|
|
141
|
-
key: 0,
|
|
142
|
-
field: m,
|
|
143
|
-
modelValue: a[m.name],
|
|
144
|
-
"onUpdate:modelValue": (I) => a[m.name] = I,
|
|
145
|
-
"form-data": a,
|
|
146
|
-
onFieldChange: R
|
|
147
|
-
}, null, 8, ["field", "modelValue", "onUpdate:modelValue", "form-data"])) : n("", !0)
|
|
148
|
-
], 2))), 128))
|
|
149
|
-
], 2)
|
|
150
|
-
]))), 128)),
|
|
151
|
-
e.showActions ? (l(), o("div", {
|
|
152
|
-
key: 1,
|
|
153
|
-
class: d([
|
|
154
|
-
"sl-flex sl-gap-3",
|
|
155
|
-
e.actionsAlignment === "center" ? "sl-justify-center" : e.actionsAlignment === "right" ? "sl-justify-end" : "sl-justify-start"
|
|
156
|
-
])
|
|
157
|
-
}, [
|
|
158
|
-
e.showCancelButton ? (l(), C(S, {
|
|
159
|
-
key: 0,
|
|
160
|
-
variant: "outline",
|
|
161
|
-
disabled: e.loading,
|
|
162
|
-
type: "button",
|
|
163
|
-
onClick: z
|
|
164
|
-
}, {
|
|
165
|
-
default: F(() => [
|
|
166
|
-
_(r(e.cancelButtonText || "Cancel"), 1)
|
|
167
|
-
]),
|
|
168
|
-
_: 1
|
|
169
|
-
}, 8, ["disabled"])) : n("", !0),
|
|
170
|
-
B(S, {
|
|
171
|
-
variant: e.submitButtonVariant,
|
|
172
|
-
loading: e.loading,
|
|
173
|
-
disabled: !U.value || e.loading,
|
|
174
|
-
type: "submit"
|
|
175
|
-
}, {
|
|
176
|
-
default: F(() => [
|
|
177
|
-
_(r(e.submitButtonText || "Submit"), 1)
|
|
178
|
-
]),
|
|
179
|
-
_: 1
|
|
180
|
-
}, 8, ["variant", "loading", "disabled"])
|
|
181
|
-
], 2)) : n("", !0),
|
|
182
|
-
e.formError ? (l(), o("div", se, [
|
|
183
|
-
i("div", ae, [
|
|
184
|
-
i("div", le, [
|
|
185
|
-
B(p(P), { class: "sl-h-5 sl-w-5 sl-text-red-400" }),
|
|
186
|
-
i("div", oe, [
|
|
187
|
-
t[1] || (t[1] = i("h3", { class: "sl-text-sm sl-font-medium sl-text-red-800" }, " Form Error ", -1)),
|
|
188
|
-
i("div", ne, [
|
|
189
|
-
i("p", null, r(e.formError), 1)
|
|
190
|
-
])
|
|
191
|
-
])
|
|
192
|
-
])
|
|
193
|
-
])
|
|
194
|
-
])) : n("", !0)
|
|
195
|
-
], 34));
|
|
196
|
-
}
|
|
197
|
-
});
|
|
198
|
-
export {
|
|
199
|
-
ge as _
|
|
200
|
-
};
|
|
201
|
-
//# sourceMappingURL=DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicForm.vue_vue_type_script_setup_true_lang-BKhcXkNG.js","sources":["../src/components/forms/DynamicForm.vue"],"sourcesContent":["<template>\n <form\n ref=\"formRef\"\n :class=\"formClasses\"\n @submit.prevent=\"handleSubmit\"\n >\n <!-- Form title and description -->\n <div v-if=\"schema.title || schema.description\" class=\"sl-mb-6\">\n <h2 v-if=\"schema.title\" class=\"sl-text-lg sl-font-semibold sl-text-gray-900 sl-mb-2\">\n {{ schema.title }}\n </h2>\n <p v-if=\"schema.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ schema.description }}\n </p>\n </div>\n\n <!-- Form sections -->\n <div v-for=\"(section, sectionIndex) in formSections\" :key=\"section.id || sectionIndex\">\n <!-- Section header -->\n <div v-if=\"section.title || section.description\" class=\"sl-mb-4\">\n <h3 v-if=\"section.title\" class=\"sl-text-md sl-font-medium sl-text-gray-900 sl-mb-1\">\n {{ section.title }}\n </h3>\n <p v-if=\"section.description\" class=\"sl-text-sm sl-text-gray-600\">\n {{ section.description }}\n </p>\n </div>\n\n <!-- Section fields -->\n <div :class=\"sectionClasses(section)\">\n <div\n v-for=\"field in section.fields\"\n :key=\"field.name\"\n :class=\"fieldClasses(field)\"\n >\n <!-- Conditional rendering -->\n <SlDynamicFormField\n v-if=\"shouldShowField(field)\"\n :field=\"field\"\n v-model=\"formData[field.name]\"\n :form-data=\"formData\"\n @field-change=\"handleFieldChange\"\n />\n </div>\n </div>\n </div>\n\n <!-- Form actions -->\n <div\n v-if=\"showActions\"\n :class=\"[\n 'sl-flex sl-gap-3',\n actionsAlignment === 'center' ? 'sl-justify-center' :\n actionsAlignment === 'right' ? 'sl-justify-end' :\n 'sl-justify-start'\n ]\"\n >\n <SlButton\n v-if=\"showCancelButton\"\n variant=\"outline\"\n :disabled=\"loading\"\n type=\"button\"\n @click=\"handleCancel\"\n >\n {{ cancelButtonText || 'Cancel' }}\n </SlButton>\n \n <SlButton\n :variant=\"submitButtonVariant\"\n :loading=\"loading\"\n :disabled=\"!isFormValid || loading\"\n type=\"submit\"\n >\n {{ submitButtonText || 'Submit' }}\n </SlButton>\n </div>\n \n <!-- Form-level errors -->\n <div v-if=\"formError\" class=\"sl-mt-4\">\n <div class=\"sl-bg-red-50 sl-border sl-border-red-200 sl-rounded-md sl-p-4\">\n <div class=\"sl-flex\">\n <ExclamationCircleIcon class=\"sl-h-5 sl-w-5 sl-text-red-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-red-800\">\n Form Error\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-red-700\">\n <p>{{ formError }}</p>\n </div>\n </div>\n </div>\n </div>\n </div>\n </form>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, reactive, ref, watch } from 'vue'\nimport { useForm } from 'vee-validate'\nimport { ExclamationCircleIcon } from '@heroicons/vue/24/outline'\nimport SlButton from '../UiButton.vue'\nimport SlDynamicFormField from './DynamicFormField.vue'\nimport type { \n DynamicFormSchema, \n DynamicFormSection,\n DynamicFormField,\n ButtonVariant \n} from '../../types/form'\n\ninterface Props {\n schema: DynamicFormSchema\n modelValue?: Record<string, any>\n loading?: boolean\n showActions?: boolean\n showCancelButton?: boolean\n submitButtonText?: string\n cancelButtonText?: string\n submitButtonVariant?: ButtonVariant\n actionsAlignment?: 'left' | 'center' | 'right'\n formError?: string\n}\n\nconst props = withDefaults(defineProps<Props>(), {\n showActions: true,\n showCancelButton: false,\n submitButtonVariant: 'primary',\n actionsAlignment: 'right'\n})\n\nconst emit = defineEmits<{\n (e: 'update:modelValue', value: Record<string, any>): void\n (e: 'submit', data: Record<string, any>, ctx: { setErrors: (errors: Record<string, string>) => void }): void\n (e: 'cancel'): void\n (e: 'field-change', field: DynamicFormField, value: any, formData: Record<string, any>): void\n}>()\n\nconst formRef = ref<HTMLFormElement>()\nconst formData = reactive<Record<string, any>>({})\n\n// Initialize form with vee-validate\nconst { handleSubmit: veeHandleSubmit, setErrors, meta } = useForm({\n keepValuesOnUnmount: true\n})\n\n// Initialize form data\nconst initializeFormData = () => {\n const initialData = { ...props.modelValue } || {}\n \n // Set default values from schema\n props.schema.sections.forEach(section => {\n section.fields.forEach(field => {\n if (!(field.name in initialData)) {\n initialData[field.name] = field.defaultValue ?? getDefaultValue(field.type)\n }\n })\n })\n \n Object.assign(formData, initialData)\n}\n\n// Watch for external changes to modelValue\nwatch(\n () => props.modelValue,\n (newValue) => {\n if (newValue) {\n Object.assign(formData, newValue)\n }\n },\n { deep: true }\n)\n\n// Watch form data changes and emit updates\nwatch(\n formData,\n (newData) => {\n emit('update:modelValue', { ...newData })\n },\n { deep: true }\n)\n\n// Initialize form data on mount\ninitializeFormData()\n\nconst formSections = computed(() => {\n return props.schema.sections.filter(section => \n section.condition ? section.condition(formData) : true\n )\n})\n\nconst formClasses = computed(() => {\n const baseClasses = ['sl-space-y-6']\n \n if (props.schema.className) {\n baseClasses.push(props.schema.className)\n }\n \n return baseClasses.join(' ')\n})\n\nconst sectionClasses = (section: DynamicFormSection) => {\n const baseClasses = [\n 'sl-grid',\n 'sl-gap-4'\n ]\n \n // Grid columns based on section layout\n const columns = section.columns || 1\n baseClasses.push(`sl-grid-cols-1`)\n \n if (columns > 1) {\n baseClasses.push(`md:sl-grid-cols-${Math.min(columns, 3)}`)\n }\n \n if (section.className) {\n baseClasses.push(section.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst fieldClasses = (field: DynamicFormField) => {\n const baseClasses: string[] = []\n \n // Field span\n if (field.colSpan && field.colSpan > 1) {\n baseClasses.push(`sl-col-span-${Math.min(field.colSpan, 3)}`)\n }\n \n if (field.className) {\n baseClasses.push(field.className)\n }\n \n return baseClasses.join(' ')\n}\n\nconst shouldShowField = (field: DynamicFormField): boolean => {\n if (field.condition) {\n return field.condition(formData, field)\n }\n return true\n}\n\nconst isFormValid = computed(() => {\n return meta.value.valid\n})\n\nconst getDefaultValue = (type: string) => {\n switch (type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return null\n case 'number':\n return 0\n default:\n return ''\n }\n}\n\nconst handleSubmit = veeHandleSubmit((values) => {\n emit('submit', values, { setErrors })\n})\n\nconst handleCancel = () => {\n emit('cancel')\n}\n\nconst handleFieldChange = (field: DynamicFormField, value: any) => {\n emit('field-change', field, value, formData)\n \n // Handle field dependencies\n if (field.onFieldChange) {\n field.onFieldChange(value, field, formData)\n }\n}\n\n// Expose form methods\nconst validate = async () => {\n // Trigger vee-validate validation\n return meta.value.valid\n}\n\nconst reset = () => {\n Object.keys(formData).forEach(key => {\n delete formData[key]\n })\n initializeFormData()\n}\n\nconst setFieldValue = (fieldName: string, value: any) => {\n formData[fieldName] = value\n}\n\nconst getFieldValue = (fieldName: string) => {\n return formData[fieldName]\n}\n\ndefineExpose({\n validate,\n reset,\n setFieldValue,\n getFieldValue,\n formData,\n formRef\n})\n</script>\n"],"names":["props","__props","emit","__emit","formRef","ref","formData","reactive","veeHandleSubmit","setErrors","meta","useForm","initializeFormData","initialData","section","field","getDefaultValue","watch","newValue","newData","formSections","computed","formClasses","baseClasses","sectionClasses","columns","fieldClasses","shouldShowField","isFormValid","type","handleSubmit","values","handleCancel","handleFieldChange","value","__expose","key","fieldName","_createElementBlock","_cache","_withModifiers","_unref","args","schema","_openBlock","_hoisted_1","_hoisted_2","_toDisplayString","_hoisted_3","_Fragment","_renderList","sectionIndex","_hoisted_4","_hoisted_5","_hoisted_6","_createElementVNode","_normalizeClass","_createBlock","SlDynamicFormField","$event","showActions","actionsAlignment","showCancelButton","SlButton","loading","cancelButtonText","_createVNode","submitButtonVariant","submitButtonText","formError","_hoisted_7","_hoisted_8","_hoisted_9","ExclamationCircleIcon","_hoisted_10","_hoisted_11"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"DynamicFormField.vue_vue_type_script_setup_true_lang-qAwVNm--.js","sources":["../src/components/forms/DynamicFormField.vue"],"sourcesContent":["<template>\n <component\n :is=\"fieldComponent\"\n v-if=\"fieldComponent\"\n v-bind=\"componentProps\"\n v-on=\"componentEvents\"\n :model-value=\"fieldValue\"\n @update:model-value=\"handleFieldChange\"\n />\n \n <!-- Fallback for unknown field types -->\n <div \n v-else\n class=\"sl-p-4 sl-bg-yellow-50 sl-border sl-border-yellow-200 sl-rounded-md\"\n >\n <div class=\"sl-flex\">\n <ExclamationTriangleIcon class=\"sl-h-5 sl-w-5 sl-text-yellow-400\" />\n <div class=\"sl-ml-3\">\n <h3 class=\"sl-text-sm sl-font-medium sl-text-yellow-800\">\n Unknown field type\n </h3>\n <div class=\"sl-mt-2 sl-text-sm sl-text-yellow-700\">\n <p>Field type \"{{ field.type }}\" is not supported.</p>\n </div>\n </div>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed, defineAsyncComponent } from 'vue'\nimport UiTextInput from '../UiTextInput.vue'\nimport { ExclamationTriangleIcon } from '@heroicons/vue/24/outline'\nimport type { DynamicFormField } from '../../types/form'\n\ninterface Props {\n field: DynamicFormField\n modelValue?: any\n formData?: Record<string, any>\n}\n\nconst props = defineProps<Props>()\n\nconst emit = defineEmits<{\n 'update:modelValue': [value: any]\n 'field-change': [field: DynamicFormField, value: any]\n}>()\n\n// Component mapping for dynamic loading\nconst componentMap: Record<string, () => Promise<any>> = {\n text: () => Promise.resolve(UiTextInput),\n email: () => Promise.resolve(UiTextInput), \n password: () => Promise.resolve(UiTextInput),\n number: () => Promise.resolve(UiTextInput),\n tel: () => Promise.resolve(UiTextInput),\n url: () => Promise.resolve(UiTextInput),\n textarea: () => import('../inputs/TextAreaInput.vue'),\n select: () => import('../inputs/SelectInput.vue'),\n combobox: () => import('../inputs/ComboboxInput.vue'),\n checkbox: () => import('../inputs/CheckboxInput.vue'),\n switch: () => import('../inputs/SwitchInput.vue'),\n}\n\nconst fieldComponent = computed(() => {\n const componentLoader = componentMap[props.field.type]\n if (componentLoader) {\n return defineAsyncComponent({\n loader: componentLoader,\n errorComponent: () => null,\n delay: 0\n })\n }\n return null\n})\n\nconst fieldValue = computed({\n get: () => props.modelValue ?? props.field.defaultValue ?? getDefaultValue(),\n set: (value) => {\n emit('update:modelValue', value)\n emit('field-change', props.field, value)\n }\n})\n\nconst componentProps = computed(() => {\n const baseProps: Record<string, any> = {\n name: props.field.name,\n label: props.field.label,\n placeholder: props.field.placeholder,\n disabled: props.field.disabled,\n rules: props.field.validation,\n validateOnMount: props.field.validateOnMount,\n tertiaryLabel: props.field.tertiaryLabel,\n successMessage: props.field.successMessage\n }\n\n // Type-specific props\n switch (props.field.type) {\n case 'text':\n case 'email':\n case 'password':\n case 'number':\n case 'tel':\n case 'url':\n return {\n ...baseProps,\n type: props.field.inputType || props.field.type,\n maxlength: props.field.maxLength,\n minlength: props.field.minLength,\n min: props.field.min,\n max: props.field.max,\n step: props.field.step,\n spellcheck: props.field.spellcheck,\n autocomplete: props.field.autocomplete\n }\n \n case 'textarea':\n return {\n ...baseProps,\n rows: props.field.rows,\n maxlength: props.field.maxLength,\n spellcheck: props.field.spellcheck\n }\n \n case 'select':\n return {\n ...baseProps,\n items: props.field.options || [],\n multiple: props.field.multiple,\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n showAll: props.field.showSelectAll\n }\n \n case 'combobox':\n return {\n ...baseProps,\n items: props.field.options || [],\n itemKey: props.field.optionKey || 'value',\n itemText: props.field.optionLabel || 'label',\n customQuery: props.field.customQuery,\n loading: props.field.loading\n }\n \n case 'checkbox':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n isDescriptionHtml: props.field.isDescriptionHtml\n }\n \n case 'switch':\n return {\n ...baseProps,\n description: props.field.description,\n immediate: props.field.immediate ?? true,\n boxShadow: props.field.boxShadow,\n hideMainLabel: props.field.hideMainLabel,\n textTrue: props.field.textTrue,\n textFalse: props.field.textFalse\n }\n \n default:\n return baseProps\n }\n})\n\nconst componentEvents = computed(() => {\n const baseEvents: Record<string, Function> = {}\n \n // Add event handlers based on field configuration\n if (props.field.onBlur) {\n baseEvents.blur = props.field.onBlur\n }\n \n if (props.field.onFocus) {\n baseEvents.focus = props.field.onFocus\n }\n \n if (props.field.onChange) {\n baseEvents['update:modelValue'] = (value: any) => {\n fieldValue.value = value\n props.field.onChange?.(value, props.field, props.formData ?? {})\n }\n }\n \n return baseEvents\n})\n\nconst getDefaultValue = () => {\n switch (props.field.type) {\n case 'checkbox':\n case 'switch':\n return false\n case 'select':\n return props.field.multiple ? [] : null\n case 'number':\n return props.field.min || 0\n default:\n return ''\n }\n}\n\nconst handleFieldChange = (value: any) => {\n fieldValue.value = value\n}\n</script>\n"],"names":["props","__props","emit","__emit","componentMap","UiTextInput","fieldComponent","computed","componentLoader","defineAsyncComponent","fieldValue","getDefaultValue","value","componentProps","baseProps","componentEvents","baseEvents","handleFieldChange","_createBlock","_resolveDynamicComponent","_mergeProps","_toHandlers","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_createVNode","_unref","ExclamationTriangleIcon","_hoisted_3","_cache","_hoisted_4","_toDisplayString","field"],"mappings":"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"}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { defineComponent as f, createElementBlock as o, openBlock as t, createElementVNode as e, createVNode as a, unref as s, toDisplayString as n, createBlock as y } from "vue";
|
|
2
|
-
import { CalendarIcon as v, MapPinIcon as i, NoSymbolIcon as g } from "@heroicons/vue/24/solid";
|
|
3
|
-
import { NoSymbolIcon as b, MapPinIcon as w } from "@heroicons/vue/24/outline";
|
|
4
|
-
const _ = ["src"], k = {
|
|
5
|
-
key: 1,
|
|
6
|
-
class: "sl-h-14 sl-w-14 sl-flex-none sl-rounded-md sl-bg-gray-100 sl-flex sl-items-center sl-justify-center"
|
|
7
|
-
}, p = { class: "sl-relative sl-h-8 sl-w-8" }, I = { class: "sl-flex-auto" }, S = { class: "sl-font-semibold sl-text-gray-800" }, C = { class: "sl-mt-2 sl-flex sl-flex-col xl:sl-flex-row" }, N = { class: "sl-flex sl-items-start sl-space-x-3" }, D = ["datetime"], B = { class: "sl-flex sl-items-start sl-space-x-3 sl-mt-2 xl:sl-ml-3.5 xl:sl-mt-0 xl:sl-border-l xl:sl-border-gray-400 xl:sl-border-opacity-50 xl:sl-pl-3.5" }, E = {
|
|
8
|
-
key: 1,
|
|
9
|
-
class: "sl-relative sl-h-5 sl-w-5"
|
|
10
|
-
}, U = /* @__PURE__ */ f({
|
|
11
|
-
__name: "EventCard",
|
|
12
|
-
props: {
|
|
13
|
-
event: {
|
|
14
|
-
type: Object,
|
|
15
|
-
required: !0
|
|
16
|
-
}
|
|
17
|
-
},
|
|
18
|
-
emits: ["navigate-to-event"],
|
|
19
|
-
setup(l, { emit: r }) {
|
|
20
|
-
const d = l, m = r, u = () => {
|
|
21
|
-
m("navigate-to-event", d.event.id);
|
|
22
|
-
}, x = (c) => new Date(c).toLocaleDateString("en-US", {
|
|
23
|
-
month: "short",
|
|
24
|
-
day: "2-digit",
|
|
25
|
-
year: "numeric"
|
|
26
|
-
});
|
|
27
|
-
return (c, h) => (t(), o("li", {
|
|
28
|
-
class: "sl-relative sl-flex sl-space-x-6 sl-py-6 sl-cursor-pointer",
|
|
29
|
-
onClick: u
|
|
30
|
-
}, [
|
|
31
|
-
l.event.geocodeResult?.thumbnailUrl ? (t(), o("img", {
|
|
32
|
-
key: 0,
|
|
33
|
-
src: l.event.geocodeResult.thumbnailUrl,
|
|
34
|
-
alt: "",
|
|
35
|
-
class: "sl-h-14 sl-w-14 sl-flex-none sl-rounded-md"
|
|
36
|
-
}, null, 8, _)) : (t(), o("div", k, [
|
|
37
|
-
e("div", p, [
|
|
38
|
-
a(s(b), { class: "sl-absolute sl-h-full sl-w-full sl-text-gray-400" }),
|
|
39
|
-
a(s(w), { class: "sl-absolute sl-top-1/2 sl-left-1/2 sl-h-5 sl-w-5 -sl-translate-x-1/2 -sl-translate-y-1/2 sl-text-gray-400" })
|
|
40
|
-
])
|
|
41
|
-
])),
|
|
42
|
-
e("div", I, [
|
|
43
|
-
e("h3", S, n(l.event.name), 1),
|
|
44
|
-
e("dl", C, [
|
|
45
|
-
e("div", N, [
|
|
46
|
-
a(s(v), {
|
|
47
|
-
class: "sl-h-5 sl-w-5 sl-text-gray-400",
|
|
48
|
-
"aria-hidden": "true"
|
|
49
|
-
}),
|
|
50
|
-
e("dd", null, [
|
|
51
|
-
e("time", {
|
|
52
|
-
datetime: l.event.datetime
|
|
53
|
-
}, n(x(l.event.date)) + " at " + n(l.event.time), 9, D)
|
|
54
|
-
])
|
|
55
|
-
]),
|
|
56
|
-
e("div", B, [
|
|
57
|
-
l.event.geocodeResult ? (t(), y(s(i), {
|
|
58
|
-
key: 0,
|
|
59
|
-
class: "sl-h-5 sl-w-5 sl-text-gray-400",
|
|
60
|
-
"aria-hidden": "true"
|
|
61
|
-
})) : (t(), o("div", E, [
|
|
62
|
-
a(s(g), { class: "sl-absolute sl-h-full sl-w-full sl-text-gray-400" }),
|
|
63
|
-
a(s(i), { class: "sl-absolute sl-top-1/2 sl-left-1/2 sl-h-3 sl-w-3 -sl-translate-x-1/2 -sl-translate-y-1/2 sl-text-gray-400" })
|
|
64
|
-
])),
|
|
65
|
-
e("dd", null, n(l.event.location), 1)
|
|
66
|
-
])
|
|
67
|
-
])
|
|
68
|
-
])
|
|
69
|
-
]));
|
|
70
|
-
}
|
|
71
|
-
});
|
|
72
|
-
export {
|
|
73
|
-
U as _
|
|
74
|
-
};
|
|
75
|
-
//# sourceMappingURL=EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js","sources":["../src/components/calendars/EventCard.vue"],"sourcesContent":["<template>\n <li class=\"sl-relative sl-flex sl-space-x-6 sl-py-6 sl-cursor-pointer\" @click=\"handleClick\">\n <!-- Event Thumbnail or Placeholder -->\n <img v-if=\"event.geocodeResult?.thumbnailUrl\" :src=\"event.geocodeResult.thumbnailUrl\" alt=\"\"\n class=\"sl-h-14 sl-w-14 sl-flex-none sl-rounded-md\" />\n <div v-else class=\"sl-h-14 sl-w-14 sl-flex-none sl-rounded-md sl-bg-gray-100 sl-flex sl-items-center sl-justify-center\">\n <div class=\"sl-relative sl-h-8 sl-w-8\">\n <NoSymbolOutline class=\"sl-absolute sl-h-full sl-w-full sl-text-gray-400\" />\n <MapPinOutline\n class=\"sl-absolute sl-top-1/2 sl-left-1/2 sl-h-5 sl-w-5 -sl-translate-x-1/2 -sl-translate-y-1/2 sl-text-gray-400\" />\n </div>\n </div>\n\n <div class=\"sl-flex-auto\">\n <h3 class=\"sl-font-semibold sl-text-gray-800\">{{ event.name }}</h3>\n <dl class=\"sl-mt-2 sl-flex sl-flex-col xl:sl-flex-row\">\n <div class=\"sl-flex sl-items-start sl-space-x-3\">\n <CalendarIcon class=\"sl-h-5 sl-w-5 sl-text-gray-400\" aria-hidden=\"true\" />\n <dd>\n <time :datetime=\"event.datetime\">\n {{ formatDate(event.date) }} at {{ event.time }}\n </time>\n </dd>\n </div>\n <div class=\"sl-flex sl-items-start sl-space-x-3 sl-mt-2 xl:sl-ml-3.5 xl:sl-mt-0 xl:sl-border-l xl:sl-border-gray-400 xl:sl-border-opacity-50 xl:sl-pl-3.5\">\n <template v-if=\"event.geocodeResult\">\n <MapPinSolid class=\"sl-h-5 sl-w-5 sl-text-gray-400\" aria-hidden=\"true\" />\n </template>\n <template v-else>\n <div class=\"sl-relative sl-h-5 sl-w-5\">\n <NoSymbolSolid class=\"sl-absolute sl-h-full sl-w-full sl-text-gray-400\" />\n <MapPinSolid\n class=\"sl-absolute sl-top-1/2 sl-left-1/2 sl-h-3 sl-w-3 -sl-translate-x-1/2 -sl-translate-y-1/2 sl-text-gray-400\" />\n </div>\n </template>\n <dd>{{ event.location }}</dd>\n </div>\n </dl>\n </div>\n </li>\n</template>\n\n<script setup lang=\"ts\">\nimport { CalendarIcon, MapPinIcon as MapPinSolid, NoSymbolIcon as NoSymbolSolid } from '@heroicons/vue/24/solid';\nimport { MapPinIcon as MapPinOutline, NoSymbolIcon as NoSymbolOutline } from '@heroicons/vue/24/outline';\nimport type { ListEvent } from '@/utils/calendar';\n\nconst props = defineProps({\n event: {\n type: Object as () => ListEvent,\n required: true,\n },\n});\n\nconst emit = defineEmits(['navigate-to-event']);\n\nconst handleClick = () => {\n emit('navigate-to-event', props.event.id);\n};\n\nconst formatDate = (dateStr: string) => {\n const date = new Date(dateStr);\n return date.toLocaleDateString('en-US', { \n month: 'short', \n day: '2-digit', \n year: 'numeric' \n });\n};\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","emit","__emit","handleClick","formatDate","dateStr","_createElementBlock","_openBlock","_hoisted_2","_createElementVNode","_hoisted_3","_createVNode","_unref","NoSymbolOutline","MapPinOutline","_hoisted_4","_hoisted_5","_toDisplayString","_hoisted_6","_hoisted_7","CalendarIcon","_hoisted_8","_hoisted_9","_createBlock","MapPinSolid","_hoisted_10","NoSymbolSolid"],"mappings":";;;;;;;;;;;;;;;;;;;AA+CA,UAAMA,IAAQC,GAORC,IAAOC,GAEPC,IAAc,MAAM;AACxB,MAAAF,EAAK,qBAAqBF,EAAM,MAAM,EAAE;AAAA,IAC1C,GAEMK,IAAa,CAACC,MACL,IAAI,KAAKA,CAAO,EACjB,mBAAmB,SAAS;AAAA,MACtC,OAAO;AAAA,MACP,KAAK;AAAA,MACL,MAAM;AAAA,IAAA,CACP;2BAjEDC,EAsCK,MAAA;AAAA,MAtCD,OAAM;AAAA,MAA8D,SAAOH;AAAA,IAAA;MAElEH,EAAA,MAAM,eAAe,qBAAhCM,EACuD,OAAA;AAAA;QADR,KAAKN,EAAA,MAAM,cAAc;AAAA,QAAc,KAAI;AAAA,QACxF,OAAM;AAAA,MAAA,mBACRO,EAAA,GAAAD,EAMM,OANNE,GAMM;AAAA,QALJC,EAIM,OAJNC,GAIM;AAAA,UAHJC,EAA4EC,EAAAC,CAAA,GAAA,EAA3D,OAAM,oDAAkD;AAAA,UACzEF,EACsHC,EAAAE,CAAA,GAAA,EAApH,OAAM,6GAA2G;AAAA,QAAA;;MAIvHL,EAyBM,OAzBNM,GAyBM;AAAA,QAxBJN,EAAmE,MAAnEO,GAAmEC,EAAlBjB,EAAA,MAAM,IAAI,GAAA,CAAA;AAAA,QAC3DS,EAsBK,MAtBLS,GAsBK;AAAA,UArBHT,EAOM,OAPNU,GAOM;AAAA,YANJR,EAA0EC,EAAAQ,CAAA,GAAA;AAAA,cAA5D,OAAM;AAAA,cAAiC,eAAY;AAAA,YAAA;YACjEX,EAIK,MAAA,MAAA;AAAA,cAHHA,EAEO,QAAA;AAAA,gBAFA,UAAUT,EAAA,MAAM;AAAA,cAAA,KAClBI,EAAWJ,QAAM,IAAI,KAAI,SAAIiB,EAAGjB,EAAA,MAAM,IAAI,GAAA,GAAAqB,CAAA;AAAA,YAAA;;UAInDZ,EAYM,OAZNa,GAYM;AAAA,YAXYtB,EAAA,MAAM,sBACpBuB,EAAyEX,EAAAY,CAAA,GAAA;AAAA;cAA5D,OAAM;AAAA,cAAiC,eAAY;AAAA,YAAA,OAGhEjB,EAAA,GAAAD,EAIM,OAJNmB,GAIM;AAAA,cAHJd,EAA0EC,EAAAc,CAAA,GAAA,EAA3D,OAAM,oDAAkD;AAAA,cACvEf,EACsHC,EAAAY,CAAA,GAAA,EAApH,OAAM,6GAA2G;AAAA,YAAA;YAGvHf,EAA6B,MAAA,MAAAQ,EAAtBjB,EAAA,MAAM,QAAQ,GAAA,CAAA;AAAA,UAAA;;;;;;"}
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
import { defineComponent as D, computed as v, createElementBlock as n, openBlock as l, createElementVNode as o, createCommentVNode as m, createBlock as y, Fragment as a, createTextVNode as u, withCtx as E, renderList as g, toDisplayString as B, createVNode as A, unref as N } from "vue";
|
|
2
|
-
import { CalendarIcon as C } from "@heroicons/vue/20/solid";
|
|
3
|
-
import S from "./components/Button.js";
|
|
4
|
-
import { _ } from "./EventCard.vue_vue_type_script_setup_true_lang-B3TP-mWX.js";
|
|
5
|
-
const T = { class: "sl-relative" }, V = { class: "sl-flex sl-justify-between sl-items-center sl-mb-4" }, F = { class: "sl-text-lg sl-font-bold" }, M = { key: 0 }, j = { class: "sl-divide-y sl-divide-gray-100 sl-text-sm sl-leading-6 sl-mb-8" }, L = { key: 1 }, P = { class: "sl-text-lg sl-font-bold sl-mb-2" }, Y = { class: "sl-divide-y sl-divide-gray-100 sl-text-sm sl-leading-6" }, z = {
|
|
6
|
-
key: 2,
|
|
7
|
-
class: "sl-px-6 sl-py-14 sl-text-center sl-text-sm sm:sl-px-14"
|
|
8
|
-
}, q = /* @__PURE__ */ D({
|
|
9
|
-
__name: "EventsList",
|
|
10
|
-
props: {
|
|
11
|
-
events: {},
|
|
12
|
-
showAllButton: { type: Boolean }
|
|
13
|
-
},
|
|
14
|
-
emits: ["show:all"],
|
|
15
|
-
setup(f, { emit: w }) {
|
|
16
|
-
const r = f, x = w, c = /* @__PURE__ */ new Date(), h = /* @__PURE__ */ new Date();
|
|
17
|
-
h.setMonth(c.getMonth() + 3);
|
|
18
|
-
const i = v(() => !r.events || !Array.isArray(r.events) ? [] : r.events.filter((t) => {
|
|
19
|
-
const e = new Date(t.datetime);
|
|
20
|
-
return e >= c && e <= h;
|
|
21
|
-
}).sort((t, e) => new Date(t.datetime).getTime() - new Date(e.datetime).getTime())), b = v(() => !r.events || !Array.isArray(r.events) ? [] : r.events.filter((t) => new Date(t.datetime) < c).sort((t, e) => new Date(e.datetime).getTime() - new Date(t.datetime).getTime())), d = v(() => {
|
|
22
|
-
const t = {};
|
|
23
|
-
return b.value.forEach((e) => {
|
|
24
|
-
const s = new Date(e.datetime).getFullYear().toString();
|
|
25
|
-
t[s] || (t[s] = []), t[s].push(e);
|
|
26
|
-
}), Object.entries(t).sort(([e], [s]) => Number(s) - Number(e)).map(([e, s]) => ({ year: e, events: s }));
|
|
27
|
-
}), k = () => x("show:all");
|
|
28
|
-
return (t, e) => (l(), n("div", T, [
|
|
29
|
-
o("div", V, [
|
|
30
|
-
o("h2", F, [
|
|
31
|
-
i.value.length ? (l(), n(a, { key: 0 }, [
|
|
32
|
-
u("Upcoming Events")
|
|
33
|
-
], 64)) : d.value.length ? (l(), n(a, { key: 1 }, [
|
|
34
|
-
u("Past Events")
|
|
35
|
-
], 64)) : (l(), n(a, { key: 2 }, [
|
|
36
|
-
u("Events")
|
|
37
|
-
], 64))
|
|
38
|
-
]),
|
|
39
|
-
t.showAllButton ? (l(), y(S, {
|
|
40
|
-
key: 0,
|
|
41
|
-
"center-label": "",
|
|
42
|
-
size: "xs",
|
|
43
|
-
onButtonClick: k
|
|
44
|
-
}, {
|
|
45
|
-
default: E(() => e[0] || (e[0] = [
|
|
46
|
-
u(" Show all ", -1)
|
|
47
|
-
])),
|
|
48
|
-
_: 1,
|
|
49
|
-
__: [0]
|
|
50
|
-
})) : m("", !0)
|
|
51
|
-
]),
|
|
52
|
-
i.value.length ? (l(), n("div", M, [
|
|
53
|
-
o("ol", j, [
|
|
54
|
-
(l(!0), n(a, null, g(i.value, (s) => (l(), y(_, {
|
|
55
|
-
key: s.id,
|
|
56
|
-
event: s
|
|
57
|
-
}, null, 8, ["event"]))), 128))
|
|
58
|
-
])
|
|
59
|
-
])) : m("", !0),
|
|
60
|
-
d.value.length ? (l(), n("div", L, [
|
|
61
|
-
(l(!0), n(a, null, g(d.value, (s) => (l(), n("div", {
|
|
62
|
-
key: s.year,
|
|
63
|
-
class: "sl-mb-8"
|
|
64
|
-
}, [
|
|
65
|
-
o("h2", P, B(s.year), 1),
|
|
66
|
-
e[1] || (e[1] = o("hr", { class: "sl-border-gray-200 sl-mb-4" }, null, -1)),
|
|
67
|
-
o("ol", Y, [
|
|
68
|
-
(l(!0), n(a, null, g(s.events, (p) => (l(), y(_, {
|
|
69
|
-
key: p.id,
|
|
70
|
-
event: p
|
|
71
|
-
}, null, 8, ["event"]))), 128))
|
|
72
|
-
])
|
|
73
|
-
]))), 128))
|
|
74
|
-
])) : m("", !0),
|
|
75
|
-
!i.value.length && !d.value.length ? (l(), n("div", z, [
|
|
76
|
-
A(N(C), {
|
|
77
|
-
class: "sl-mx-auto sl-h-6 sl-w-6 sl-text-gray-400",
|
|
78
|
-
"aria-hidden": "true"
|
|
79
|
-
}),
|
|
80
|
-
e[2] || (e[2] = o("p", { class: "sl-mt-4 sl-font-semibold sl-text-gray-800" }, "No events", -1)),
|
|
81
|
-
e[3] || (e[3] = o("p", { class: "sl-mt-2 sl-text-gray-500" }, "Add events to get started!", -1))
|
|
82
|
-
])) : m("", !0)
|
|
83
|
-
]));
|
|
84
|
-
}
|
|
85
|
-
});
|
|
86
|
-
export {
|
|
87
|
-
q as _
|
|
88
|
-
};
|
|
89
|
-
//# sourceMappingURL=EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"EventsList.vue_vue_type_script_setup_true_lang-Cpc9A9Ev.js","sources":["../src/components/calendars/EventsList.vue"],"sourcesContent":["<template>\n <div class=\"sl-relative\">\n <!-- Header -->\n <div class=\"sl-flex sl-justify-between sl-items-center sl-mb-4\">\n <h2 class=\"sl-text-lg sl-font-bold\">\n <template v-if=\"upcomingEvents.length\">Upcoming Events</template>\n <template v-else-if=\"groupedPastEventsByYear.length\">Past Events</template>\n <template v-else>Events</template>\n </h2>\n <UiButton v-if=\"showAllButton\" center-label size=\"xs\" @button-click=\"handleShowAll\">\n Show all\n </UiButton>\n </div>\n\n <!-- Upcoming Events -->\n <div v-if=\"upcomingEvents.length\">\n <ol class=\"sl-divide-y sl-divide-gray-100 sl-text-sm sl-leading-6 sl-mb-8\">\n <EventCard v-for=\"event in upcomingEvents\" :key=\"event.id\" :event=\"event\" />\n </ol>\n </div>\n\n <!-- Past Events -->\n <div v-if=\"groupedPastEventsByYear.length\">\n <div v-for=\"group in groupedPastEventsByYear\" :key=\"group.year\" class=\"sl-mb-8\">\n <h2 class=\"sl-text-lg sl-font-bold sl-mb-2\">{{ group.year }}</h2>\n <hr class=\"sl-border-gray-200 sl-mb-4\" />\n <ol class=\"sl-divide-y sl-divide-gray-100 sl-text-sm sl-leading-6\">\n <EventCard v-for=\"event in group.events\" :key=\"event.id\" :event=\"event\" />\n </ol>\n </div>\n </div>\n\n <!-- No Events Message -->\n <div v-if=\"!upcomingEvents.length && !groupedPastEventsByYear.length\"\n class=\"sl-px-6 sl-py-14 sl-text-center sl-text-sm sm:sl-px-14\">\n <CalendarIcon class=\"sl-mx-auto sl-h-6 sl-w-6 sl-text-gray-400\" aria-hidden=\"true\" />\n <p class=\"sl-mt-4 sl-font-semibold sl-text-gray-800\">No events</p>\n <p class=\"sl-mt-2 sl-text-gray-500\">Add events to get started!</p>\n </div>\n </div>\n</template>\n\n<script setup lang=\"ts\">\nimport { computed } from 'vue';\nimport { CalendarIcon } from '@heroicons/vue/20/solid';\nimport type { ListEvent } from '@/utils/calendar';\nimport UiButton from '@/components/UiButton.vue';\nimport EventCard from './EventCard.vue';\n\nconst props = defineProps<{ \n events: ListEvent[]; \n showAllButton?: boolean;\n}>();\nconst emit = defineEmits(['show:all']);\n\nconst now = new Date();\nconst threeMonthsFromNow = new Date();\nthreeMonthsFromNow.setMonth(now.getMonth() + 3);\n\n// Upcoming events: events occurring between now and three months from now\nconst upcomingEvents = computed(() => {\n if (!props.events || !Array.isArray(props.events)) return [];\n return props.events\n .filter((event) => {\n const eventDate = new Date(event.datetime);\n return eventDate >= now && eventDate <= threeMonthsFromNow;\n })\n .sort((a, b) => new Date(a.datetime).getTime() - new Date(b.datetime).getTime());\n});\n\n// Past events: events that occurred before now\nconst pastEvents = computed(() => {\n if (!props.events || !Array.isArray(props.events)) return [];\n return props.events\n .filter((event) => new Date(event.datetime) < now)\n .sort((a, b) => new Date(b.datetime).getTime() - new Date(a.datetime).getTime());\n});\n\n// Group past events by year in descending order\nconst groupedPastEventsByYear = computed(() => {\n const groups: Record<string, ListEvent[]> = {};\n pastEvents.value.forEach((event) => {\n const year = new Date(event.datetime).getFullYear().toString();\n if (!groups[year]) {\n groups[year] = [];\n }\n groups[year].push(event);\n });\n return Object.entries(groups)\n .sort(([yearA], [yearB]) => Number(yearB) - Number(yearA))\n .map(([year, events]) => ({ year, events }));\n});\n\nconst handleShowAll = () => emit('show:all');\n</script>\n\n<style scoped>\n</style>\n"],"names":["props","__props","emit","__emit","now","threeMonthsFromNow","upcomingEvents","computed","event","eventDate","a","b","pastEvents","groupedPastEventsByYear","groups","year","yearA","yearB","events","handleShowAll","_openBlock","_createElementBlock","_hoisted_1","_createElementVNode","_hoisted_2","_hoisted_3","_Fragment","showAllButton","_createBlock","UiButton","_cache","_hoisted_4","_hoisted_5","_renderList","EventCard","_hoisted_6","group","_hoisted_7","_toDisplayString","_hoisted_8","_hoisted_9","_createVNode","_unref","CalendarIcon"],"mappings":"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"}
|