@gspa/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/README.md +18 -0
- package/dist/_plugin-vue_export-helper-BHFhmbuH.cjs +1 -0
- package/dist/_plugin-vue_export-helper-CHgC5LLL.js +9 -0
- package/dist/components/Accordion.cjs +1 -0
- package/dist/components/Accordion.js +192 -0
- package/dist/components/AccordionItem.cjs +1 -0
- package/dist/components/AccordionItem.js +109 -0
- package/dist/components/AddReminderModal.cjs +1 -0
- package/dist/components/AddReminderModal.js +107 -0
- package/dist/components/Alert.cjs +1 -0
- package/dist/components/Alert.js +222 -0
- package/dist/components/Avatar.cjs +1 -0
- package/dist/components/Avatar.js +86 -0
- package/dist/components/Badge.cjs +1 -0
- package/dist/components/Badge.js +109 -0
- package/dist/components/Breadcrumb.cjs +1 -0
- package/dist/components/Breadcrumb.js +72 -0
- package/dist/components/Button.cjs +1 -0
- package/dist/components/Button.js +190 -0
- package/dist/components/ButtonGroup.cjs +1 -0
- package/dist/components/ButtonGroup.js +46 -0
- package/dist/components/Calendar.cjs +1 -0
- package/dist/components/Calendar.js +341 -0
- package/dist/components/Card.cjs +1 -0
- package/dist/components/Card.js +316 -0
- package/dist/components/CardBody.cjs +1 -0
- package/dist/components/CardBody.js +34 -0
- package/dist/components/CardContent.cjs +1 -0
- package/dist/components/CardContent.js +17 -0
- package/dist/components/CardFooter.cjs +1 -0
- package/dist/components/CardFooter.js +34 -0
- package/dist/components/CardHeader.cjs +1 -0
- package/dist/components/CardHeader.js +91 -0
- package/dist/components/CardTitle.cjs +1 -0
- package/dist/components/CardTitle.js +17 -0
- package/dist/components/Checkbox.cjs +1 -0
- package/dist/components/Checkbox.js +185 -0
- package/dist/components/CircularProgress.cjs +1 -0
- package/dist/components/CircularProgress.js +141 -0
- package/dist/components/DataTable.cjs +1 -0
- package/dist/components/DataTable.js +863 -0
- package/dist/components/DataTableCell.cjs +1 -0
- package/dist/components/DataTableCell.js +95 -0
- package/dist/components/DataTableFilters.cjs +1 -0
- package/dist/components/DataTableFilters.js +519 -0
- package/dist/components/DataTableHeader.cjs +1 -0
- package/dist/components/DataTableHeader.js +116 -0
- package/dist/components/DataTablePagination.cjs +1 -0
- package/dist/components/DataTablePagination.js +290 -0
- package/dist/components/DataTableRow.cjs +1 -0
- package/dist/components/DataTableRow.js +199 -0
- package/dist/components/DataTableToolBar.cjs +1 -0
- package/dist/components/DataTableToolBar.js +477 -0
- package/dist/components/DatePicker.cjs +1 -0
- package/dist/components/DatePicker.js +401 -0
- package/dist/components/Divider.cjs +1 -0
- package/dist/components/Divider.js +103 -0
- package/dist/components/Dropdown.cjs +1 -0
- package/dist/components/Dropdown.js +104 -0
- package/dist/components/DropdownItem.cjs +1 -0
- package/dist/components/DropdownItem.js +60 -0
- package/dist/components/EventsCalendar.cjs +1 -0
- package/dist/components/EventsCalendar.js +863 -0
- package/dist/components/FileUpload.cjs +1 -0
- package/dist/components/FileUpload.js +195 -0
- package/dist/components/FilterDrawer.cjs +1 -0
- package/dist/components/FilterDrawer.js +412 -0
- package/dist/components/Footer.cjs +1 -0
- package/dist/components/Footer.js +157 -0
- package/dist/components/FormField.cjs +1 -0
- package/dist/components/FormField.js +190 -0
- package/dist/components/Graph.cjs +1 -0
- package/dist/components/Graph.js +164 -0
- package/dist/components/GraphFilters.cjs +1 -0
- package/dist/components/GraphFilters.js +305 -0
- package/dist/components/Header.cjs +1 -0
- package/dist/components/Header.js +674 -0
- package/dist/components/Icon.cjs +1 -0
- package/dist/components/Icon.js +51 -0
- package/dist/components/Image.cjs +1 -0
- package/dist/components/Image.js +112 -0
- package/dist/components/Input.cjs +1 -0
- package/dist/components/Input.js +166 -0
- package/dist/components/InputGroup.cjs +1 -0
- package/dist/components/InputGroup.js +45 -0
- package/dist/components/Label.cjs +1 -0
- package/dist/components/Label.js +46 -0
- package/dist/components/Link.cjs +1 -0
- package/dist/components/Link.js +119 -0
- package/dist/components/ListItem.cjs +1 -0
- package/dist/components/ListItem.js +89 -0
- package/dist/components/Loader.cjs +1 -0
- package/dist/components/Loader.js +154 -0
- package/dist/components/Logo.cjs +1 -0
- package/dist/components/Logo.js +67 -0
- package/dist/components/MenuItem.cjs +1 -0
- package/dist/components/MenuItem.js +66 -0
- package/dist/components/Modal.cjs +1 -0
- package/dist/components/Modal.js +110 -0
- package/dist/components/ModalBody.cjs +1 -0
- package/dist/components/ModalBody.js +33 -0
- package/dist/components/ModalFooter.cjs +1 -0
- package/dist/components/ModalFooter.js +33 -0
- package/dist/components/ModalHeader.cjs +1 -0
- package/dist/components/ModalHeader.js +24 -0
- package/dist/components/MultiSelect.cjs +1 -0
- package/dist/components/MultiSelect.js +211 -0
- package/dist/components/Notification.cjs +1 -0
- package/dist/components/Notification.js +121 -0
- package/dist/components/Option.cjs +1 -0
- package/dist/components/Option.js +44 -0
- package/dist/components/Progress.cjs +1 -0
- package/dist/components/Progress.js +77 -0
- package/dist/components/ProgressBar.cjs +1 -0
- package/dist/components/ProgressBar.js +101 -0
- package/dist/components/Radio.cjs +1 -0
- package/dist/components/Radio.js +81 -0
- package/dist/components/RailNav.cjs +1 -0
- package/dist/components/RailNav.js +124 -0
- package/dist/components/ReminderConfig.cjs +1 -0
- package/dist/components/ReminderConfig.js +375 -0
- package/dist/components/ReusableForm.cjs +1 -0
- package/dist/components/ReusableForm.js +657 -0
- package/dist/components/ReusableFormModal.cjs +1 -0
- package/dist/components/ReusableFormModal.js +112 -0
- package/dist/components/RightDrawer.cjs +1 -0
- package/dist/components/RightDrawer.js +143 -0
- package/dist/components/Search.cjs +1 -0
- package/dist/components/Search.js +252 -0
- package/dist/components/Select.cjs +1 -0
- package/dist/components/Select.js +243 -0
- package/dist/components/Sidebar.cjs +1 -0
- package/dist/components/Sidebar.js +372 -0
- package/dist/components/Slider.cjs +1 -0
- package/dist/components/Slider.js +42 -0
- package/dist/components/Spinner.cjs +1 -0
- package/dist/components/Spinner.js +87 -0
- package/dist/components/Stepper.cjs +1 -0
- package/dist/components/Stepper.js +12 -0
- package/dist/components/StepperItem.cjs +1 -0
- package/dist/components/StepperItem.js +33 -0
- package/dist/components/Switch.cjs +1 -0
- package/dist/components/Switch.js +112 -0
- package/dist/components/Tab.cjs +1 -0
- package/dist/components/Tab.js +134 -0
- package/dist/components/TabPanel.cjs +1 -0
- package/dist/components/TabPanel.js +49 -0
- package/dist/components/Text.cjs +1 -0
- package/dist/components/Text.js +84 -0
- package/dist/components/Textarea.cjs +1 -0
- package/dist/components/Textarea.js +102 -0
- package/dist/components/ThemeConfigurator.cjs +1 -0
- package/dist/components/ThemeConfigurator.js +50 -0
- package/dist/components/Timeline.cjs +1 -0
- package/dist/components/Timeline.js +24 -0
- package/dist/components/TimelineItem.cjs +1 -0
- package/dist/components/TimelineItem.js +63 -0
- package/dist/components/Toast.cjs +1 -0
- package/dist/components/Toast.js +231 -0
- package/dist/components/Tooltip.cjs +1 -0
- package/dist/components/Tooltip.js +124 -0
- package/dist/components/Typography.cjs +1 -0
- package/dist/components/Typography.js +267 -0
- package/dist/components/charts/BarChart.cjs +1 -0
- package/dist/components/charts/BarChart.js +323 -0
- package/dist/components/charts/LineChart.cjs +1 -0
- package/dist/components/charts/LineChart.js +322 -0
- package/dist/components/charts/PieChart.cjs +1 -0
- package/dist/components/charts/PieChart.js +311 -0
- package/dist/components/charts/StackedBarChart.cjs +1 -0
- package/dist/components/charts/StackedBarChart.js +348 -0
- package/dist/components/widgets/DashboardWidget.cjs +1 -0
- package/dist/components/widgets/DashboardWidget.js +309 -0
- package/dist/directives/tooltip.cjs +47 -0
- package/dist/directives/tooltip.js +115 -0
- package/dist/index.cjs +1 -0
- package/dist/index.esm.js +311 -19548
- package/dist/layouts/AuthLayout.cjs +1 -0
- package/dist/layouts/AuthLayout.js +190 -0
- package/dist/layouts/DashboardLayout.cjs +1 -0
- package/dist/layouts/DashboardLayout.js +244 -0
- package/dist/layouts/DefaultLayout.cjs +1 -0
- package/dist/layouts/DefaultLayout.js +94 -0
- package/dist/layouts/ErrorLayout.cjs +1 -0
- package/dist/layouts/ErrorLayout.js +452 -0
- package/dist/lib/auth.cjs +1 -0
- package/dist/lib/auth.js +4 -0
- package/dist/lib/theme.cjs +1 -0
- package/dist/lib/theme.js +135 -0
- package/dist/lib/toast.cjs +1 -0
- package/dist/lib/toast.js +81 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/cn.cjs +1 -0
- package/dist/utils/cn.js +7 -0
- package/package.json +37 -7
- package/dist/index.js +0 -605
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),w={class:"w-full flex flex-col"},E={class:"px-4 py-3 border-b ui-border-strong"},L={class:"text-sm font-semibold uppercase tracking-wide ui-text"},N={class:"flex-1 overflow-y-auto"},C={key:0,class:"px-3 py-2 space-y-2"},I={key:1,class:"px-4 py-3 text-sm ui-text"},V={key:2,class:"py-1","aria-label":"Rail navigation"},z=["title","aria-current","onClick"],O={class:"h-8 w-8 rounded-full overflow-hidden border ui-border-strong ui-surface-muted flex items-center justify-center text-xs font-semibold ui-text"},A=["src","alt"],K={key:1},j={class:"truncate text-sm"},D={__name:"RailNav",props:{items:{type:Array,default:()=>[]},activeKey:{type:[String,Number],default:null},title:{type:String,default:"Navigation"},setupLabel:{type:String,default:"Setup"},showSetup:{type:Boolean,default:!1},loading:{type:Boolean,default:!1},heightOffset:{type:[String,Number],default:"4rem"},desktopOnly:{type:Boolean,default:!0},resolveLogo:{type:Function,default:null}},emits:["select","setup-click"],setup(r,{emit:k}){const c=new Map,u=new Map,s=r,f=k,i=e.ref({}),b=e.computed(()=>({height:`calc(100vh - ${(typeof s.heightOffset=="number"?`${s.heightOffset}px`:s.heightOffset)||"0px"})`})),d=(t,n)=>t?.code??t?.id??t?.company_id??t?.key??n,p=t=>t?.code??t?.body??t?.name??t?.label??t?.company_name??"Item",g=t=>t?.logo_id??t?.logoId??t?.company_logo_id??t?.companyLogoId??t?.logo?.id??t?.logo?.data?.id??null,v=t=>{const n=String(p(t)||"").trim();return n&&n.split(/\s+/).filter(Boolean).slice(0,2).map(l=>l.charAt(0).toUpperCase()).join("")||"C"},y=(t,n)=>String(d(t,n))===String(s.activeKey??""),S=t=>String(t?.color_code||t?.colorCode||"#94A3B8"),B=async(t,n)=>{if(typeof s.resolveLogo!="function")return;const o=g(t);if(!o)return;const l=String(o);if(c.has(l)){i.value[l]=c.get(l);return}u.has(l)||u.set(l,Promise.resolve(s.resolveLogo(o)).then(_=>{const h=_||null;return c.set(l,h),h}).catch(()=>(c.set(l,null),null)).finally(()=>{u.delete(l)}));const a=await u.get(l);i.value[l]=a;const x=String(d(t,n));a&&(i.value[x]=a)};e.watch(()=>s.items,async t=>{!Array.isArray(t)||typeof s.resolveLogo!="function"||await Promise.all(t.map((n,o)=>B(n,o)))},{immediate:!0,deep:!0});const m=(t,n)=>{const o=t?.logo_url??t?.logoUrl;if(typeof o=="string"&&o.trim())return o;const l=g(t);if(l){const a=i.value[String(l)]??c.get(String(l));if(a)return a}return i.value[String(d(t,n))]||null};return(t,n)=>(e.openBlock(),e.createElementBlock("aside",{class:e.normalizeClass(["sticky top-16 w-72 rounded-xl border ui-border-strong ui-surface shadow-sm overflow-hidden",r.desktopOnly?"hidden lg:flex":"flex"]),style:e.normalizeStyle(b.value)},[e.createElementVNode("div",w,[e.createElementVNode("div",E,[e.createElementVNode("h3",L,e.toDisplayString(r.title),1),r.showSetup?(e.openBlock(),e.createElementBlock("button",{key:0,type:"button",class:"mt-3 w-full px-3 py-2 rounded-md border ui-border-strong ui-primary hover:bg-(--ui-primary-soft) text-sm font-medium",onClick:n[0]||(n[0]=o=>f("setup-click"))},e.toDisplayString(r.setupLabel),1)):e.createCommentVNode("",!0)]),e.createElementVNode("div",N,[r.loading?(e.openBlock(),e.createElementBlock("div",C,[(e.openBlock(),e.createElementBlock(e.Fragment,null,e.renderList(6,o=>e.createElementVNode("div",{key:o,class:"h-10 rounded-md ui-surface-muted animate-pulse"})),64))])):r.items.length?(e.openBlock(),e.createElementBlock("nav",V,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(r.items,(o,l)=>(e.openBlock(),e.createElementBlock("button",{key:String(d(o,l)),type:"button",title:o?.body||o?.name||p(o),class:e.normalizeClass(["w-full px-3 py-2 flex items-center gap-3 text-left transition-colors border-l-2 border-transparent hover:bg-(--ui-surface-muted) ui-text",y(o,l)?"ui-primary-soft border-(--ui-primary) font-semibold":""]),"aria-current":y(o,l)?"page":void 0,onClick:a=>f("select",o)},[e.createElementVNode("span",O,[m(o,l)?(e.openBlock(),e.createElementBlock("img",{key:0,src:m(o,l),alt:p(o),class:"h-full w-full object-cover"},null,8,A)):(e.openBlock(),e.createElementBlock("span",K,e.toDisplayString(v(o)),1))]),e.createElementVNode("span",{class:"inline-block h-2.5 w-2.5 rounded-full shrink-0",style:e.normalizeStyle({backgroundColor:S(o)})},null,4),e.createElementVNode("span",j,e.toDisplayString(p(o)),1)],10,z))),128))])):(e.openBlock(),e.createElementBlock("div",I,"No compliance bodies"))])])],6))}};exports.default=D;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { ref as O, computed as K, watch as $, createElementBlock as l, openBlock as r, normalizeStyle as k, normalizeClass as _, createElementVNode as i, createCommentVNode as j, toDisplayString as y, Fragment as S, renderList as w } from "vue";
|
|
2
|
+
const F = { class: "w-full flex flex-col" }, E = { class: "px-4 py-3 border-b ui-border-strong" }, M = { class: "text-sm font-semibold uppercase tracking-wide ui-text" }, P = { class: "flex-1 overflow-y-auto" }, R = {
|
|
3
|
+
key: 0,
|
|
4
|
+
class: "px-3 py-2 space-y-2"
|
|
5
|
+
}, U = {
|
|
6
|
+
key: 1,
|
|
7
|
+
class: "px-4 py-3 text-sm ui-text"
|
|
8
|
+
}, V = {
|
|
9
|
+
key: 2,
|
|
10
|
+
class: "py-1",
|
|
11
|
+
"aria-label": "Rail navigation"
|
|
12
|
+
}, D = ["title", "aria-current", "onClick"], H = { class: "h-8 w-8 rounded-full overflow-hidden border ui-border-strong ui-surface-muted flex items-center justify-center text-xs font-semibold ui-text" }, q = ["src", "alt"], G = { key: 1 }, J = { class: "truncate text-sm" }, T = {
|
|
13
|
+
__name: "RailNav",
|
|
14
|
+
props: {
|
|
15
|
+
items: { type: Array, default: () => [] },
|
|
16
|
+
activeKey: { type: [String, Number], default: null },
|
|
17
|
+
title: { type: String, default: "Navigation" },
|
|
18
|
+
setupLabel: { type: String, default: "Setup" },
|
|
19
|
+
showSetup: { type: Boolean, default: !1 },
|
|
20
|
+
loading: { type: Boolean, default: !1 },
|
|
21
|
+
heightOffset: { type: [String, Number], default: "4rem" },
|
|
22
|
+
desktopOnly: { type: Boolean, default: !0 },
|
|
23
|
+
resolveLogo: { type: Function, default: null }
|
|
24
|
+
},
|
|
25
|
+
emits: ["select", "setup-click"],
|
|
26
|
+
setup(s, { emit: L }) {
|
|
27
|
+
const u = /* @__PURE__ */ new Map(), f = /* @__PURE__ */ new Map(), a = s, h = L, d = O({}), C = K(() => ({ height: `calc(100vh - ${(typeof a.heightOffset == "number" ? `${a.heightOffset}px` : a.heightOffset) || "0px"})` })), g = (e, n) => e?.code ?? e?.id ?? e?.company_id ?? e?.key ?? n, p = (e) => e?.code ?? e?.body ?? e?.name ?? e?.label ?? e?.company_name ?? "Item", m = (e) => e?.logo_id ?? e?.logoId ?? e?.company_logo_id ?? e?.companyLogoId ?? e?.logo?.id ?? e?.logo?.data?.id ?? null, I = (e) => {
|
|
28
|
+
const n = String(p(e) || "").trim();
|
|
29
|
+
return n && n.split(/\s+/).filter(Boolean).slice(0, 2).map((o) => o.charAt(0).toUpperCase()).join("") || "C";
|
|
30
|
+
}, b = (e, n) => String(g(e, n)) === String(a.activeKey ?? ""), B = (e) => String(e?.color_code || e?.colorCode || "#94A3B8"), N = async (e, n) => {
|
|
31
|
+
if (typeof a.resolveLogo != "function") return;
|
|
32
|
+
const t = m(e);
|
|
33
|
+
if (!t) return;
|
|
34
|
+
const o = String(t);
|
|
35
|
+
if (u.has(o)) {
|
|
36
|
+
d.value[o] = u.get(o);
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
f.has(o) || f.set(
|
|
40
|
+
o,
|
|
41
|
+
Promise.resolve(a.resolveLogo(t)).then((A) => {
|
|
42
|
+
const x = A || null;
|
|
43
|
+
return u.set(o, x), x;
|
|
44
|
+
}).catch(() => (u.set(o, null), null)).finally(() => {
|
|
45
|
+
f.delete(o);
|
|
46
|
+
})
|
|
47
|
+
);
|
|
48
|
+
const c = await f.get(o);
|
|
49
|
+
d.value[o] = c;
|
|
50
|
+
const z = String(g(e, n));
|
|
51
|
+
c && (d.value[z] = c);
|
|
52
|
+
};
|
|
53
|
+
$(
|
|
54
|
+
() => a.items,
|
|
55
|
+
async (e) => {
|
|
56
|
+
!Array.isArray(e) || typeof a.resolveLogo != "function" || await Promise.all(e.map((n, t) => N(n, t)));
|
|
57
|
+
},
|
|
58
|
+
{ immediate: !0, deep: !0 }
|
|
59
|
+
);
|
|
60
|
+
const v = (e, n) => {
|
|
61
|
+
const t = e?.logo_url ?? e?.logoUrl;
|
|
62
|
+
if (typeof t == "string" && t.trim()) return t;
|
|
63
|
+
const o = m(e);
|
|
64
|
+
if (o) {
|
|
65
|
+
const c = d.value[String(o)] ?? u.get(String(o));
|
|
66
|
+
if (c) return c;
|
|
67
|
+
}
|
|
68
|
+
return d.value[String(g(e, n))] || null;
|
|
69
|
+
};
|
|
70
|
+
return (e, n) => (r(), l("aside", {
|
|
71
|
+
class: _([
|
|
72
|
+
"sticky top-16 w-72 rounded-xl border ui-border-strong ui-surface shadow-sm overflow-hidden",
|
|
73
|
+
s.desktopOnly ? "hidden lg:flex" : "flex"
|
|
74
|
+
]),
|
|
75
|
+
style: k(C.value)
|
|
76
|
+
}, [
|
|
77
|
+
i("div", F, [
|
|
78
|
+
i("div", E, [
|
|
79
|
+
i("h3", M, y(s.title), 1),
|
|
80
|
+
s.showSetup ? (r(), l("button", {
|
|
81
|
+
key: 0,
|
|
82
|
+
type: "button",
|
|
83
|
+
class: "mt-3 w-full px-3 py-2 rounded-md border ui-border-strong ui-primary hover:bg-(--ui-primary-soft) text-sm font-medium",
|
|
84
|
+
onClick: n[0] || (n[0] = (t) => h("setup-click"))
|
|
85
|
+
}, y(s.setupLabel), 1)) : j("", !0)
|
|
86
|
+
]),
|
|
87
|
+
i("div", P, [
|
|
88
|
+
s.loading ? (r(), l("div", R, [
|
|
89
|
+
(r(), l(S, null, w(6, (t) => i("div", {
|
|
90
|
+
key: t,
|
|
91
|
+
class: "h-10 rounded-md ui-surface-muted animate-pulse"
|
|
92
|
+
})), 64))
|
|
93
|
+
])) : s.items.length ? (r(), l("nav", V, [
|
|
94
|
+
(r(!0), l(S, null, w(s.items, (t, o) => (r(), l("button", {
|
|
95
|
+
key: String(g(t, o)),
|
|
96
|
+
type: "button",
|
|
97
|
+
title: t?.body || t?.name || p(t),
|
|
98
|
+
class: _(["w-full px-3 py-2 flex items-center gap-3 text-left transition-colors border-l-2 border-transparent hover:bg-(--ui-surface-muted) ui-text", b(t, o) ? "ui-primary-soft border-(--ui-primary) font-semibold" : ""]),
|
|
99
|
+
"aria-current": b(t, o) ? "page" : void 0,
|
|
100
|
+
onClick: (c) => h("select", t)
|
|
101
|
+
}, [
|
|
102
|
+
i("span", H, [
|
|
103
|
+
v(t, o) ? (r(), l("img", {
|
|
104
|
+
key: 0,
|
|
105
|
+
src: v(t, o),
|
|
106
|
+
alt: p(t),
|
|
107
|
+
class: "h-full w-full object-cover"
|
|
108
|
+
}, null, 8, q)) : (r(), l("span", G, y(I(t)), 1))
|
|
109
|
+
]),
|
|
110
|
+
i("span", {
|
|
111
|
+
class: "inline-block h-2.5 w-2.5 rounded-full shrink-0",
|
|
112
|
+
style: k({ backgroundColor: B(t) })
|
|
113
|
+
}, null, 4),
|
|
114
|
+
i("span", J, y(p(t)), 1)
|
|
115
|
+
], 10, D))), 128))
|
|
116
|
+
])) : (r(), l("div", U, "No compliance bodies"))
|
|
117
|
+
])
|
|
118
|
+
])
|
|
119
|
+
], 6));
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
export {
|
|
123
|
+
T as default
|
|
124
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const e=require("vue"),l=require("./Icon.cjs"),E=require("./Modal.cjs"),_=require("../_plugin-vue_export-helper-BHFhmbuH.cjs"),w={class:"reminder-config-wrapper"},B={class:"grid grid-cols-1 lg:grid-cols-2 gap-6"},C=["onClick"],R={class:"flex items-start justify-between gap-4"},D={class:"flex items-center gap-4"},T={class:"w-12 h-12 bg-linear-to-br from-(--ui-primary) to-(--ui-accent) rounded-xl flex items-center justify-center shadow-md"},S={class:"ui-text font-bold text-lg"},$={class:"text-xl font-bold ui-text"},j={class:"flex items-center gap-2 mt-1"},M={class:"inline-flex items-center gap-1.5 px-3 py-1 ui-primary-soft ui-primary text-xs font-semibold rounded-full"},z={class:"flex items-start gap-3"},A=["onClick"],I={key:0,class:"p-6 bg-linear-to-br from-(--ui-surface) to-[color:color-mix(in oklab, var(--ui-primary-soft), transparent 70%)]"},F={key:0,class:"text-center py-16"},L={class:"w-20 h-20 bg-linear-to-br from-(--ui-surface) to-(--ui-bg) rounded-2xl flex items-center justify-center mx-auto mb-4"},O={key:1,class:"space-y-4"},q={class:"flex items-start gap-4"},H={class:"flex-1 space-y-5"},P={class:"relative"},U=["value","onInput"],G={class:"flex items-center gap-3 p-4 ui-surface-muted rounded-lg border ui-border-strong"},J=["id","checked","onChange"],K=["for"],Q={class:"grid grid-cols-2 gap-3"},W=["onClick"],X=["onClick"],Y={class:"flex items-start gap-3"},Z={class:"w-10 h-10 bg-linear-to-br from-(--ui-primary-soft) to-(--ui-accent-soft) rounded-lg flex items-center justify-center group-hover:from-(--ui-primary-soft) group-hover:to-(--ui-accent-soft) transition-all"},ee={class:"text-left"},te={class:"text-sm font-semibold ui-text block"},se={key:0,class:"mt-3 p-4 ui-surface-muted rounded-lg border ui-border-strong"},oe={class:"flex flex-wrap gap-2"},re=["onClick"],ie={class:"bg-linear-to-r from-(--ui-success) to-(--ui-success) p-6 ui-text"},ne={class:"flex items-start justify-between gap-4"},le={class:"flex items-start gap-3"},ae={class:"w-12 h-12 bg-[color:color-mix(in oklab, var(--ui-bg), transparent 80%)] rounded-lg flex items-center justify-center"},de={class:"ui-surface px-5 py-4 max-h-88 overflow-y-auto"},ce={key:0,class:"text-center py-6"},ue={key:1,class:"space-y-2"},me={class:"relative shrink-0"},pe=["checked","onChange"],fe={class:"flex-1 min-w-0"},xe={class:"px-5 py-4 ui-surface-muted border-t ui-border flex gap-2"},ge={__name:"ReminderConfig",props:{models:{type:Array,default:()=>[]},availableRecipients:{type:Array,default:()=>[]},sendTypeOptions:{type:Array,default:()=>[{value:"email",label:"Email"},{value:"in-app",label:"In-App"}]}},emits:["update:models"],setup(m,{emit:f}){const n=m,d=f,p=e.ref(null),u=e.ref(!1),a=e.ref(null),x=i=>{const t=n.models.find(s=>s.id===i);t&&(t.expanded=!t.expanded,d("update:models",[...n.models]))},g=i=>{const t=n.models.find(s=>s.id===i);if(t){const s={id:Date.now(),days:0,recipients:[],sendTypes:[],isDaily:!1};t.reminders.push(s),d("update:models",[...n.models])}},v=(i,t)=>{const s=n.models.find(o=>o.id===i);s&&(s.reminders=s.reminders.filter(o=>o.id!==t),d("update:models",[...n.models]))},b=(i,t,s)=>{const o=n.models.find(r=>r.id===i);if(o){const r=o.reminders.find(c=>c.id===t);r&&(r.days=parseInt(s)||0,d("update:models",[...n.models]))}},h=(i,t,s)=>{const o=n.models.find(r=>r.id===i);if(o){const r=o.reminders.find(c=>c.id===t);if(r){r.sendTypes||(r.sendTypes=[]);const c=r.sendTypes.indexOf(s);c>-1?r.sendTypes.splice(c,1):r.sendTypes.push(s),d("update:models",[...n.models])}}},y=(i,t)=>{const s=n.models.find(o=>o.id===i);if(s){const o=s.reminders.find(r=>r.id===t);o&&(o.isDaily=!o.isDaily,d("update:models",[...n.models]))}},k=(i,t)=>{const o=n.models.find(r=>r.id===i).reminders.find(r=>r.id===t);p.value=i,a.value={...o,recipients:[...o.recipients||[]]},u.value=!0},N=i=>{const t=a.value.recipients.indexOf(i);t>-1?a.value.recipients.splice(t,1):a.value.recipients.push(i)},V=()=>{const i=n.models.find(t=>t.id===p.value);if(i){const t=i.reminders.find(s=>s.id===a.value.id);t&&(t.recipients=[...a.value.recipients],d("update:models",[...n.models]))}u.value=!1};return(i,t)=>(e.openBlock(),e.createElementBlock("div",w,[e.createElementVNode("div",B,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.models,s=>(e.openBlock(),e.createElementBlock("div",{key:s.id,class:"ui-surface rounded-2xl shadow-lg border ui-border-strong overflow-hidden hover:shadow-xl transition-all duration-300"},[e.createElementVNode("div",{class:"p-6 cursor-pointer hover:bg-linear-to-r hover:from-(--ui-primary-soft) hover:to-(--ui-accent-soft) transition-all duration-300 border-b ui-border-strong",onClick:o=>x(s.id)},[e.createElementVNode("div",R,[e.createElementVNode("div",D,[e.createElementVNode("div",T,[e.createElementVNode("span",S,e.toDisplayString(s.name[0]),1)]),e.createElementVNode("div",null,[e.createElementVNode("h2",$,e.toDisplayString(s.name),1),e.createElementVNode("div",j,[e.createElementVNode("span",M,[t[3]||(t[3]=e.createElementVNode("div",{class:"w-1.5 h-1.5 ui-primary-bg rounded-full"},null,-1)),e.createTextVNode(" "+e.toDisplayString(s.reminders.length)+" reminder"+e.toDisplayString(s.reminders.length!==1?"s":""),1)])])])]),e.createElementVNode("div",z,[e.createElementVNode("button",{class:"px-4 py-2.5 bg-linear-to-r from-(--ui-success) to-(--ui-success) ui-text-inverse rounded-lg font-semibold text-sm hover:from-(--ui-success) hover:to-(--ui-success-strong) transition-all duration-300 shadow-md hover:shadow-lg flex items-center gap-2",onClick:e.withModifiers(o=>g(s.id),["stop"])},[e.createVNode(l.default,{icon:"plus",class:e.normalizeClass(["w-4 h-4",{"ui-text":!s.expanded,"ui-text-inverse":s.expanded}])},null,8,["class"]),t[4]||(t[4]=e.createTextVNode(" Add Reminder ",-1))],8,A),e.createVNode(l.default,{icon:s.expanded?"chevron-up":"chevron-down",class:e.normalizeClass(["w-6 h-6 ui-text transition-transform duration-300",{"rotate-180":s.expanded}])},null,8,["icon","class"])])])],8,C),e.createVNode(e.Transition,{"enter-active-class":"transition-all duration-300 ease-out","enter-from-class":"opacity-0 max-h-0","enter-to-class":"opacity-100 max-h-screen","leave-active-class":"transition-all duration-200 ease-in","leave-from-class":"opacity-100 max-h-screen","leave-to-class":"opacity-0 max-h-0"},{default:e.withCtx(()=>[s.expanded?(e.openBlock(),e.createElementBlock("div",I,[s.reminders.length===0?(e.openBlock(),e.createElementBlock("div",F,[e.createElementVNode("div",L,[e.createVNode(l.default,{icon:"bell",class:"w-10 h-10 ui-text"})]),t[5]||(t[5]=e.createElementVNode("h3",{class:"text-lg font-semibold ui-text mb-2"}," No reminders configured ",-1)),t[6]||(t[6]=e.createElementVNode("p",{class:"ui-text text-sm mb-4"},' Click "Add Reminder" to create your first reminder ',-1))])):(e.openBlock(),e.createElementBlock("div",O,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(s.reminders,o=>(e.openBlock(),e.createElementBlock("div",{key:o.id,class:"ui-surface rounded-xl border ui-border-strong p-6 hover:shadow-md transition-all duration-300"},[e.createElementVNode("div",q,[e.createElementVNode("div",H,[e.createElementVNode("div",null,[t[8]||(t[8]=e.createElementVNode("label",{class:"block text-xs font-bold ui-text mb-2 uppercase tracking-wider"}," Days Before Event ",-1)),e.createElementVNode("div",P,[e.createElementVNode("input",{type:"number",min:"0",value:o.days,class:"w-full px-4 py-3 border-2 ui-border-strong rounded-lg focus:outline-none focus:border-(--ui-primary) focus:ring-4 focus:ring-(--ui-primary) transition-all duration-300 font-semibold ui-text text-lg",placeholder:"0",onInput:r=>b(s.id,o.id,r.target.value)},null,40,U),t[7]||(t[7]=e.createElementVNode("div",{class:"absolute right-4 top-1/2 -translate-y-1/2 ui-text text-sm font-medium"}," days ",-1))])]),e.createElementVNode("div",G,[e.createElementVNode("input",{id:`daily-${o.id}`,type:"checkbox",checked:o.isDaily,class:"w-4 h-4 ui-primary rounded border ui-border-strong focus:ring-2 focus:ring-(--ui-primary) transition-all cursor-pointer",onChange:r=>y(s.id,o.id)},null,40,J),e.createElementVNode("label",{for:`daily-${o.id}`,class:"flex-1 cursor-pointer"},[...t[9]||(t[9]=[e.createElementVNode("span",{class:"text-sm font-semibold ui-text block"}," Send Daily Reminder ",-1),e.createElementVNode("span",{class:"text-xs ui-text"}," Repeat this reminder every day ",-1)])],8,K)]),e.createElementVNode("div",null,[t[10]||(t[10]=e.createElementVNode("label",{class:"block text-xs font-bold ui-text mb-3 uppercase tracking-wider"}," Notification Methods ",-1)),e.createElementVNode("div",Q,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.sendTypeOptions,r=>(e.openBlock(),e.createElementBlock("button",{key:r.value,class:e.normalizeClass(["relative px-4 py-3.5 rounded-lg font-semibold text-sm transition-all duration-300 flex items-center justify-center gap-2 border-2",(o.sendTypes||[]).includes(r.value)?"bg-linear-to-r from-(--ui-primary) to-(--ui-accent) ui-text-inverse border-transparent shadow-md":"ui-surface ui-text ui-border-strong hover:border-(--ui-primary-soft) hover:bg-(--ui-primary-soft)"]),onClick:c=>h(s.id,o.id,r.value)},[e.createVNode(l.default,{icon:r.value==="email"?"envelope":"bell",class:"w-4 h-4"},null,8,["icon"]),e.createTextVNode(" "+e.toDisplayString(r.label)+" ",1),(o.sendTypes||[]).includes(r.value)?(e.openBlock(),e.createBlock(l.default,{key:0,icon:"check-circle",class:"w-4 h-4 absolute top-2 right-2"})):e.createCommentVNode("",!0)],10,W))),128))])]),e.createElementVNode("div",null,[t[12]||(t[12]=e.createElementVNode("label",{class:"block text-xs font-bold ui-text mb-3 uppercase tracking-wider"}," Recipients ",-1)),e.createElementVNode("button",{class:"w-full px-4 py-3.5 ui-surface border-2 ui-border-strong rounded-lg hover:border-(--ui-primary-soft) hover:bg-(--ui-primary-soft) transition-all duration-300 flex items-center justify-between group",onClick:r=>k(s.id,o.id)},[e.createElementVNode("div",Y,[e.createElementVNode("div",Z,[e.createVNode(l.default,{icon:"users",class:"w-5 h-5 ui-primary"})]),e.createElementVNode("div",ee,[e.createElementVNode("span",te,e.toDisplayString((o.recipients||[]).length===0?"Select recipients":`${(o.recipients||[]).length} recipient${(o.recipients||[]).length!==1?"s":""} selected`),1),t[11]||(t[11]=e.createElementVNode("span",{class:"text-xs ui-text"}," Click to manage ",-1))])]),e.createVNode(l.default,{icon:"chevron-right",class:"w-5 h-5 ui-text group-hover:text-(--ui-primary) group-hover:translate-x-1 transition-all"})],8,X),(o.recipients||[]).length>0?(e.openBlock(),e.createElementBlock("div",se,[e.createElementVNode("div",oe,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(o.recipients,r=>(e.openBlock(),e.createElementBlock("span",{key:r,class:"inline-flex items-center gap-1.5 px-3 py-1.5 ui-surface border border-(--ui-primary-soft) ui-primary text-xs font-semibold rounded-lg shadow-sm"},[e.createVNode(l.default,{icon:"user",class:"w-3 h-3"}),e.createTextVNode(" "+e.toDisplayString(r),1)]))),128))])])):e.createCommentVNode("",!0)])]),e.createElementVNode("button",{class:"p-3 bg-linear-to-r from-(--ui-danger) to-(--ui-danger) ui-text rounded-lg hover:from-(--ui-danger) hover:to-(--ui-danger-strong) transition-all duration-300 shadow-md hover:shadow-lg self-start",title:"Delete reminder",onClick:r=>v(s.id,o.id)},[e.createVNode(l.default,{icon:"trash",class:"w-4 h-4"})],8,re)])]))),128))]))])):e.createCommentVNode("",!0)]),_:2},1024)]))),128))]),e.createVNode(E.default,{modelValue:u.value,"onUpdate:modelValue":t[2]||(t[2]=s=>u.value=s),size:"3xl","show-close":!1},{default:e.withCtx(()=>[e.createElementVNode("div",ie,[e.createElementVNode("div",ne,[e.createElementVNode("div",le,[e.createElementVNode("div",ae,[e.createVNode(l.default,{icon:"users",class:"w-4 h-4"})]),t[13]||(t[13]=e.createElementVNode("div",null,[e.createElementVNode("h3",{class:"text-lg font-semibold leading-tight"}," Select Recipients "),e.createElementVNode("p",{class:"text-(--ui-primary-soft) text-xs mt-1"}," Choose who should receive this reminder ")],-1))]),e.createElementVNode("button",{class:"p-1.5 hover:bg-[color:color-mix(in oklab, var(--ui-surface), transparent 80%)] rounded-md transition-colors","aria-label":"Close",onClick:t[0]||(t[0]=s=>u.value=!1)},[e.createVNode(l.default,{icon:"x",class:"w-4 h-4"})])])]),e.createElementVNode("div",de,[m.availableRecipients.length===0?(e.openBlock(),e.createElementBlock("div",ce,[e.createVNode(l.default,{icon:"users",class:"w-10 h-10 ui-text mx-auto mb-2"}),t[14]||(t[14]=e.createElementVNode("p",{class:"ui-text text-sm"}," No recipients available ",-1))])):(e.openBlock(),e.createElementBlock("div",ue,[(e.openBlock(!0),e.createElementBlock(e.Fragment,null,e.renderList(m.availableRecipients,s=>(e.openBlock(),e.createElementBlock("label",{key:s,class:e.normalizeClass(["flex items-center gap-3 px-3 py-2.5 rounded-md cursor-pointer transition-all border",a.value?.recipients.includes(s)?"bg-linear-to-r from-(--ui-primary-soft) to-(--ui-accent-soft) border-(--ui-primary-soft) shadow-sm":"ui-surface ui-border hover:border-(--ui-primary-soft) hover:bg-(--ui-surface-muted)"])},[e.createElementVNode("div",me,[e.createElementVNode("input",{type:"checkbox",checked:a.value?.recipients.includes(s),class:"w-4 h-4 ui-primary rounded border ui-border-strong focus:ring-2 focus:ring-(--ui-primary) transition-all cursor-pointer",onChange:o=>N(s)},null,40,pe)]),e.createElementVNode("div",fe,[e.createElementVNode("span",{class:e.normalizeClass(["text-sm font-medium block truncate",a.value?.recipients.includes(s)?"ui-primary":"ui-text"])},e.toDisplayString(s),3)]),a.value?.recipients.includes(s)?(e.openBlock(),e.createBlock(l.default,{key:0,icon:"check-circle",class:"w-4 h-4 ui-primary shrink-0"})):e.createCommentVNode("",!0)],2))),128))]))]),e.createElementVNode("div",xe,[e.createElementVNode("button",{class:"px-4 py-2 ui-surface border ui-border ui-text rounded-md text-sm font-medium hover:bg-(--ui-surface-muted) transition-colors",onClick:t[1]||(t[1]=s=>u.value=!1)}," Cancel "),e.createElementVNode("button",{class:"ml-auto px-4 py-2 ui-success-bg rounded-md text-sm font-semibold hover:bg-(--ui-success-strong) transition-colors flex items-center gap-2",onClick:V},[e.createVNode(l.default,{icon:"check",class:"w-4 h-4"}),t[15]||(t[15]=e.createTextVNode(" Save Recipients ",-1))])])]),_:1},8,["modelValue"])]))}},ve=_._export_sfc(ge,[["__scopeId","data-v-c46bf185"]]);exports.default=ve;
|
|
@@ -0,0 +1,375 @@
|
|
|
1
|
+
import { ref as k, createElementBlock as l, openBlock as n, createElementVNode as e, createVNode as d, Fragment as g, renderList as h, toDisplayString as p, createTextVNode as b, withModifiers as B, normalizeClass as y, Transition as E, withCtx as C, createCommentVNode as _, createBlock as R } from "vue";
|
|
2
|
+
import c from "./Icon.js";
|
|
3
|
+
import O from "./Modal.js";
|
|
4
|
+
import { _ as z } from "../_plugin-vue_export-helper-CHgC5LLL.js";
|
|
5
|
+
const F = { class: "reminder-config-wrapper" }, L = { class: "grid grid-cols-1 lg:grid-cols-2 gap-6" }, U = ["onClick"], q = { class: "flex items-start justify-between gap-4" }, G = { class: "flex items-center gap-4" }, H = { class: "w-12 h-12 bg-linear-to-br from-(--ui-primary) to-(--ui-accent) rounded-xl flex items-center justify-center shadow-md" }, J = { class: "ui-text font-bold text-lg" }, K = { class: "text-xl font-bold ui-text" }, P = { class: "flex items-center gap-2 mt-1" }, Q = { class: "inline-flex items-center gap-1.5 px-3 py-1 ui-primary-soft ui-primary text-xs font-semibold rounded-full" }, W = { class: "flex items-start gap-3" }, X = ["onClick"], Y = {
|
|
6
|
+
key: 0,
|
|
7
|
+
class: "p-6 bg-linear-to-br from-(--ui-surface) to-[color:color-mix(in oklab, var(--ui-primary-soft), transparent 70%)]"
|
|
8
|
+
}, Z = {
|
|
9
|
+
key: 0,
|
|
10
|
+
class: "text-center py-16"
|
|
11
|
+
}, ee = { class: "w-20 h-20 bg-linear-to-br from-(--ui-surface) to-(--ui-bg) rounded-2xl flex items-center justify-center mx-auto mb-4" }, se = {
|
|
12
|
+
key: 1,
|
|
13
|
+
class: "space-y-4"
|
|
14
|
+
}, te = { class: "flex items-start gap-4" }, ie = { class: "flex-1 space-y-5" }, oe = { class: "relative" }, re = ["value", "onInput"], ne = { class: "flex items-center gap-3 p-4 ui-surface-muted rounded-lg border ui-border-strong" }, le = ["id", "checked", "onChange"], ae = ["for"], de = { class: "grid grid-cols-2 gap-3" }, ce = ["onClick"], ue = ["onClick"], pe = { class: "flex items-start gap-3" }, me = { class: "w-10 h-10 bg-linear-to-br from-(--ui-primary-soft) to-(--ui-accent-soft) rounded-lg flex items-center justify-center group-hover:from-(--ui-primary-soft) group-hover:to-(--ui-accent-soft) transition-all" }, fe = { class: "text-left" }, xe = { class: "text-sm font-semibold ui-text block" }, ve = {
|
|
15
|
+
key: 0,
|
|
16
|
+
class: "mt-3 p-4 ui-surface-muted rounded-lg border ui-border-strong"
|
|
17
|
+
}, ge = { class: "flex flex-wrap gap-2" }, he = ["onClick"], be = { class: "bg-linear-to-r from-(--ui-success) to-(--ui-success) p-6 ui-text" }, ye = { class: "flex items-start justify-between gap-4" }, _e = { class: "flex items-start gap-3" }, ke = { class: "w-12 h-12 bg-[color:color-mix(in oklab, var(--ui-bg), transparent 80%)] rounded-lg flex items-center justify-center" }, we = { class: "ui-surface px-5 py-4 max-h-88 overflow-y-auto" }, Ce = {
|
|
18
|
+
key: 0,
|
|
19
|
+
class: "text-center py-6"
|
|
20
|
+
}, Re = {
|
|
21
|
+
key: 1,
|
|
22
|
+
class: "space-y-2"
|
|
23
|
+
}, $e = { class: "relative shrink-0" }, Te = ["checked", "onChange"], De = { class: "flex-1 min-w-0" }, je = { class: "px-5 py-4 ui-surface-muted border-t ui-border flex gap-2" }, Ne = {
|
|
24
|
+
__name: "ReminderConfig",
|
|
25
|
+
props: {
|
|
26
|
+
models: {
|
|
27
|
+
type: Array,
|
|
28
|
+
default: () => []
|
|
29
|
+
},
|
|
30
|
+
availableRecipients: {
|
|
31
|
+
type: Array,
|
|
32
|
+
default: () => []
|
|
33
|
+
},
|
|
34
|
+
sendTypeOptions: {
|
|
35
|
+
type: Array,
|
|
36
|
+
default: () => [
|
|
37
|
+
{ value: "email", label: "Email" },
|
|
38
|
+
{ value: "in-app", label: "In-App" }
|
|
39
|
+
]
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
emits: ["update:models"],
|
|
43
|
+
setup(v, { emit: $ }) {
|
|
44
|
+
const a = v, m = $, w = k(null), x = k(!1), u = k(null), T = (r) => {
|
|
45
|
+
const s = a.models.find((t) => t.id === r);
|
|
46
|
+
s && (s.expanded = !s.expanded, m("update:models", [...a.models]));
|
|
47
|
+
}, D = (r) => {
|
|
48
|
+
const s = a.models.find((t) => t.id === r);
|
|
49
|
+
if (s) {
|
|
50
|
+
const t = {
|
|
51
|
+
id: Date.now(),
|
|
52
|
+
days: 0,
|
|
53
|
+
recipients: [],
|
|
54
|
+
sendTypes: [],
|
|
55
|
+
isDaily: !1
|
|
56
|
+
};
|
|
57
|
+
s.reminders.push(t), m("update:models", [...a.models]);
|
|
58
|
+
}
|
|
59
|
+
}, j = (r, s) => {
|
|
60
|
+
const t = a.models.find((i) => i.id === r);
|
|
61
|
+
t && (t.reminders = t.reminders.filter((i) => i.id !== s), m("update:models", [...a.models]));
|
|
62
|
+
}, N = (r, s, t) => {
|
|
63
|
+
const i = a.models.find((o) => o.id === r);
|
|
64
|
+
if (i) {
|
|
65
|
+
const o = i.reminders.find((f) => f.id === s);
|
|
66
|
+
o && (o.days = parseInt(t) || 0, m("update:models", [...a.models]));
|
|
67
|
+
}
|
|
68
|
+
}, A = (r, s, t) => {
|
|
69
|
+
const i = a.models.find((o) => o.id === r);
|
|
70
|
+
if (i) {
|
|
71
|
+
const o = i.reminders.find((f) => f.id === s);
|
|
72
|
+
if (o) {
|
|
73
|
+
o.sendTypes || (o.sendTypes = []);
|
|
74
|
+
const f = o.sendTypes.indexOf(t);
|
|
75
|
+
f > -1 ? o.sendTypes.splice(f, 1) : o.sendTypes.push(t), m("update:models", [...a.models]);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}, M = (r, s) => {
|
|
79
|
+
const t = a.models.find((i) => i.id === r);
|
|
80
|
+
if (t) {
|
|
81
|
+
const i = t.reminders.find((o) => o.id === s);
|
|
82
|
+
i && (i.isDaily = !i.isDaily, m("update:models", [...a.models]));
|
|
83
|
+
}
|
|
84
|
+
}, S = (r, s) => {
|
|
85
|
+
const i = a.models.find((o) => o.id === r).reminders.find((o) => o.id === s);
|
|
86
|
+
w.value = r, u.value = { ...i, recipients: [...i.recipients || []] }, x.value = !0;
|
|
87
|
+
}, V = (r) => {
|
|
88
|
+
const s = u.value.recipients.indexOf(r);
|
|
89
|
+
s > -1 ? u.value.recipients.splice(s, 1) : u.value.recipients.push(r);
|
|
90
|
+
}, I = () => {
|
|
91
|
+
const r = a.models.find((s) => s.id === w.value);
|
|
92
|
+
if (r) {
|
|
93
|
+
const s = r.reminders.find((t) => t.id === u.value.id);
|
|
94
|
+
s && (s.recipients = [...u.value.recipients], m("update:models", [...a.models]));
|
|
95
|
+
}
|
|
96
|
+
x.value = !1;
|
|
97
|
+
};
|
|
98
|
+
return (r, s) => (n(), l("div", F, [
|
|
99
|
+
e("div", L, [
|
|
100
|
+
(n(!0), l(g, null, h(v.models, (t) => (n(), l("div", {
|
|
101
|
+
key: t.id,
|
|
102
|
+
class: "ui-surface rounded-2xl shadow-lg border ui-border-strong overflow-hidden hover:shadow-xl transition-all duration-300"
|
|
103
|
+
}, [
|
|
104
|
+
e("div", {
|
|
105
|
+
class: "p-6 cursor-pointer hover:bg-linear-to-r hover:from-(--ui-primary-soft) hover:to-(--ui-accent-soft) transition-all duration-300 border-b ui-border-strong",
|
|
106
|
+
onClick: (i) => T(t.id)
|
|
107
|
+
}, [
|
|
108
|
+
e("div", q, [
|
|
109
|
+
e("div", G, [
|
|
110
|
+
e("div", H, [
|
|
111
|
+
e("span", J, p(t.name[0]), 1)
|
|
112
|
+
]),
|
|
113
|
+
e("div", null, [
|
|
114
|
+
e("h2", K, p(t.name), 1),
|
|
115
|
+
e("div", P, [
|
|
116
|
+
e("span", Q, [
|
|
117
|
+
s[3] || (s[3] = e("div", { class: "w-1.5 h-1.5 ui-primary-bg rounded-full" }, null, -1)),
|
|
118
|
+
b(" " + p(t.reminders.length) + " reminder" + p(t.reminders.length !== 1 ? "s" : ""), 1)
|
|
119
|
+
])
|
|
120
|
+
])
|
|
121
|
+
])
|
|
122
|
+
]),
|
|
123
|
+
e("div", W, [
|
|
124
|
+
e("button", {
|
|
125
|
+
class: "px-4 py-2.5 bg-linear-to-r from-(--ui-success) to-(--ui-success) ui-text-inverse rounded-lg font-semibold text-sm hover:from-(--ui-success) hover:to-(--ui-success-strong) transition-all duration-300 shadow-md hover:shadow-lg flex items-center gap-2",
|
|
126
|
+
onClick: B((i) => D(t.id), ["stop"])
|
|
127
|
+
}, [
|
|
128
|
+
d(c, {
|
|
129
|
+
icon: "plus",
|
|
130
|
+
class: y(["w-4 h-4", { "ui-text": !t.expanded, "ui-text-inverse": t.expanded }])
|
|
131
|
+
}, null, 8, ["class"]),
|
|
132
|
+
s[4] || (s[4] = b(" Add Reminder ", -1))
|
|
133
|
+
], 8, X),
|
|
134
|
+
d(c, {
|
|
135
|
+
icon: t.expanded ? "chevron-up" : "chevron-down",
|
|
136
|
+
class: y(["w-6 h-6 ui-text transition-transform duration-300", { "rotate-180": t.expanded }])
|
|
137
|
+
}, null, 8, ["icon", "class"])
|
|
138
|
+
])
|
|
139
|
+
])
|
|
140
|
+
], 8, U),
|
|
141
|
+
d(E, {
|
|
142
|
+
"enter-active-class": "transition-all duration-300 ease-out",
|
|
143
|
+
"enter-from-class": "opacity-0 max-h-0",
|
|
144
|
+
"enter-to-class": "opacity-100 max-h-screen",
|
|
145
|
+
"leave-active-class": "transition-all duration-200 ease-in",
|
|
146
|
+
"leave-from-class": "opacity-100 max-h-screen",
|
|
147
|
+
"leave-to-class": "opacity-0 max-h-0"
|
|
148
|
+
}, {
|
|
149
|
+
default: C(() => [
|
|
150
|
+
t.expanded ? (n(), l("div", Y, [
|
|
151
|
+
t.reminders.length === 0 ? (n(), l("div", Z, [
|
|
152
|
+
e("div", ee, [
|
|
153
|
+
d(c, {
|
|
154
|
+
icon: "bell",
|
|
155
|
+
class: "w-10 h-10 ui-text"
|
|
156
|
+
})
|
|
157
|
+
]),
|
|
158
|
+
s[5] || (s[5] = e("h3", { class: "text-lg font-semibold ui-text mb-2" }, " No reminders configured ", -1)),
|
|
159
|
+
s[6] || (s[6] = e("p", { class: "ui-text text-sm mb-4" }, ' Click "Add Reminder" to create your first reminder ', -1))
|
|
160
|
+
])) : (n(), l("div", se, [
|
|
161
|
+
(n(!0), l(g, null, h(t.reminders, (i) => (n(), l("div", {
|
|
162
|
+
key: i.id,
|
|
163
|
+
class: "ui-surface rounded-xl border ui-border-strong p-6 hover:shadow-md transition-all duration-300"
|
|
164
|
+
}, [
|
|
165
|
+
e("div", te, [
|
|
166
|
+
e("div", ie, [
|
|
167
|
+
e("div", null, [
|
|
168
|
+
s[8] || (s[8] = e("label", { class: "block text-xs font-bold ui-text mb-2 uppercase tracking-wider" }, " Days Before Event ", -1)),
|
|
169
|
+
e("div", oe, [
|
|
170
|
+
e("input", {
|
|
171
|
+
type: "number",
|
|
172
|
+
min: "0",
|
|
173
|
+
value: i.days,
|
|
174
|
+
class: "w-full px-4 py-3 border-2 ui-border-strong rounded-lg focus:outline-none focus:border-(--ui-primary) focus:ring-4 focus:ring-(--ui-primary) transition-all duration-300 font-semibold ui-text text-lg",
|
|
175
|
+
placeholder: "0",
|
|
176
|
+
onInput: (o) => N(t.id, i.id, o.target.value)
|
|
177
|
+
}, null, 40, re),
|
|
178
|
+
s[7] || (s[7] = e("div", { class: "absolute right-4 top-1/2 -translate-y-1/2 ui-text text-sm font-medium" }, " days ", -1))
|
|
179
|
+
])
|
|
180
|
+
]),
|
|
181
|
+
e("div", ne, [
|
|
182
|
+
e("input", {
|
|
183
|
+
id: `daily-${i.id}`,
|
|
184
|
+
type: "checkbox",
|
|
185
|
+
checked: i.isDaily,
|
|
186
|
+
class: "w-4 h-4 ui-primary rounded border ui-border-strong focus:ring-2 focus:ring-(--ui-primary) transition-all cursor-pointer",
|
|
187
|
+
onChange: (o) => M(t.id, i.id)
|
|
188
|
+
}, null, 40, le),
|
|
189
|
+
e("label", {
|
|
190
|
+
for: `daily-${i.id}`,
|
|
191
|
+
class: "flex-1 cursor-pointer"
|
|
192
|
+
}, [...s[9] || (s[9] = [
|
|
193
|
+
e("span", { class: "text-sm font-semibold ui-text block" }, " Send Daily Reminder ", -1),
|
|
194
|
+
e("span", { class: "text-xs ui-text" }, " Repeat this reminder every day ", -1)
|
|
195
|
+
])], 8, ae)
|
|
196
|
+
]),
|
|
197
|
+
e("div", null, [
|
|
198
|
+
s[10] || (s[10] = e("label", { class: "block text-xs font-bold ui-text mb-3 uppercase tracking-wider" }, " Notification Methods ", -1)),
|
|
199
|
+
e("div", de, [
|
|
200
|
+
(n(!0), l(g, null, h(v.sendTypeOptions, (o) => (n(), l("button", {
|
|
201
|
+
key: o.value,
|
|
202
|
+
class: y([
|
|
203
|
+
"relative px-4 py-3.5 rounded-lg font-semibold text-sm transition-all duration-300 flex items-center justify-center gap-2 border-2",
|
|
204
|
+
(i.sendTypes || []).includes(o.value) ? "bg-linear-to-r from-(--ui-primary) to-(--ui-accent) ui-text-inverse border-transparent shadow-md" : "ui-surface ui-text ui-border-strong hover:border-(--ui-primary-soft) hover:bg-(--ui-primary-soft)"
|
|
205
|
+
]),
|
|
206
|
+
onClick: (f) => A(t.id, i.id, o.value)
|
|
207
|
+
}, [
|
|
208
|
+
d(c, {
|
|
209
|
+
icon: o.value === "email" ? "envelope" : "bell",
|
|
210
|
+
class: "w-4 h-4"
|
|
211
|
+
}, null, 8, ["icon"]),
|
|
212
|
+
b(" " + p(o.label) + " ", 1),
|
|
213
|
+
(i.sendTypes || []).includes(o.value) ? (n(), R(c, {
|
|
214
|
+
key: 0,
|
|
215
|
+
icon: "check-circle",
|
|
216
|
+
class: "w-4 h-4 absolute top-2 right-2"
|
|
217
|
+
})) : _("", !0)
|
|
218
|
+
], 10, ce))), 128))
|
|
219
|
+
])
|
|
220
|
+
]),
|
|
221
|
+
e("div", null, [
|
|
222
|
+
s[12] || (s[12] = e("label", { class: "block text-xs font-bold ui-text mb-3 uppercase tracking-wider" }, " Recipients ", -1)),
|
|
223
|
+
e("button", {
|
|
224
|
+
class: "w-full px-4 py-3.5 ui-surface border-2 ui-border-strong rounded-lg hover:border-(--ui-primary-soft) hover:bg-(--ui-primary-soft) transition-all duration-300 flex items-center justify-between group",
|
|
225
|
+
onClick: (o) => S(t.id, i.id)
|
|
226
|
+
}, [
|
|
227
|
+
e("div", pe, [
|
|
228
|
+
e("div", me, [
|
|
229
|
+
d(c, {
|
|
230
|
+
icon: "users",
|
|
231
|
+
class: "w-5 h-5 ui-primary"
|
|
232
|
+
})
|
|
233
|
+
]),
|
|
234
|
+
e("div", fe, [
|
|
235
|
+
e("span", xe, p((i.recipients || []).length === 0 ? "Select recipients" : `${(i.recipients || []).length} recipient${(i.recipients || []).length !== 1 ? "s" : ""} selected`), 1),
|
|
236
|
+
s[11] || (s[11] = e("span", { class: "text-xs ui-text" }, " Click to manage ", -1))
|
|
237
|
+
])
|
|
238
|
+
]),
|
|
239
|
+
d(c, {
|
|
240
|
+
icon: "chevron-right",
|
|
241
|
+
class: "w-5 h-5 ui-text group-hover:text-(--ui-primary) group-hover:translate-x-1 transition-all"
|
|
242
|
+
})
|
|
243
|
+
], 8, ue),
|
|
244
|
+
(i.recipients || []).length > 0 ? (n(), l("div", ve, [
|
|
245
|
+
e("div", ge, [
|
|
246
|
+
(n(!0), l(g, null, h(i.recipients, (o) => (n(), l("span", {
|
|
247
|
+
key: o,
|
|
248
|
+
class: "inline-flex items-center gap-1.5 px-3 py-1.5 ui-surface border border-(--ui-primary-soft) ui-primary text-xs font-semibold rounded-lg shadow-sm"
|
|
249
|
+
}, [
|
|
250
|
+
d(c, {
|
|
251
|
+
icon: "user",
|
|
252
|
+
class: "w-3 h-3"
|
|
253
|
+
}),
|
|
254
|
+
b(" " + p(o), 1)
|
|
255
|
+
]))), 128))
|
|
256
|
+
])
|
|
257
|
+
])) : _("", !0)
|
|
258
|
+
])
|
|
259
|
+
]),
|
|
260
|
+
e("button", {
|
|
261
|
+
class: "p-3 bg-linear-to-r from-(--ui-danger) to-(--ui-danger) ui-text rounded-lg hover:from-(--ui-danger) hover:to-(--ui-danger-strong) transition-all duration-300 shadow-md hover:shadow-lg self-start",
|
|
262
|
+
title: "Delete reminder",
|
|
263
|
+
onClick: (o) => j(t.id, i.id)
|
|
264
|
+
}, [
|
|
265
|
+
d(c, {
|
|
266
|
+
icon: "trash",
|
|
267
|
+
class: "w-4 h-4"
|
|
268
|
+
})
|
|
269
|
+
], 8, he)
|
|
270
|
+
])
|
|
271
|
+
]))), 128))
|
|
272
|
+
]))
|
|
273
|
+
])) : _("", !0)
|
|
274
|
+
]),
|
|
275
|
+
_: 2
|
|
276
|
+
}, 1024)
|
|
277
|
+
]))), 128))
|
|
278
|
+
]),
|
|
279
|
+
d(O, {
|
|
280
|
+
modelValue: x.value,
|
|
281
|
+
"onUpdate:modelValue": s[2] || (s[2] = (t) => x.value = t),
|
|
282
|
+
size: "3xl",
|
|
283
|
+
"show-close": !1
|
|
284
|
+
}, {
|
|
285
|
+
default: C(() => [
|
|
286
|
+
e("div", be, [
|
|
287
|
+
e("div", ye, [
|
|
288
|
+
e("div", _e, [
|
|
289
|
+
e("div", ke, [
|
|
290
|
+
d(c, {
|
|
291
|
+
icon: "users",
|
|
292
|
+
class: "w-4 h-4"
|
|
293
|
+
})
|
|
294
|
+
]),
|
|
295
|
+
s[13] || (s[13] = e("div", null, [
|
|
296
|
+
e("h3", { class: "text-lg font-semibold leading-tight" }, " Select Recipients "),
|
|
297
|
+
e("p", { class: "text-(--ui-primary-soft) text-xs mt-1" }, " Choose who should receive this reminder ")
|
|
298
|
+
], -1))
|
|
299
|
+
]),
|
|
300
|
+
e("button", {
|
|
301
|
+
class: "p-1.5 hover:bg-[color:color-mix(in oklab, var(--ui-surface), transparent 80%)] rounded-md transition-colors",
|
|
302
|
+
"aria-label": "Close",
|
|
303
|
+
onClick: s[0] || (s[0] = (t) => x.value = !1)
|
|
304
|
+
}, [
|
|
305
|
+
d(c, {
|
|
306
|
+
icon: "x",
|
|
307
|
+
class: "w-4 h-4"
|
|
308
|
+
})
|
|
309
|
+
])
|
|
310
|
+
])
|
|
311
|
+
]),
|
|
312
|
+
e("div", we, [
|
|
313
|
+
v.availableRecipients.length === 0 ? (n(), l("div", Ce, [
|
|
314
|
+
d(c, {
|
|
315
|
+
icon: "users",
|
|
316
|
+
class: "w-10 h-10 ui-text mx-auto mb-2"
|
|
317
|
+
}),
|
|
318
|
+
s[14] || (s[14] = e("p", { class: "ui-text text-sm" }, " No recipients available ", -1))
|
|
319
|
+
])) : (n(), l("div", Re, [
|
|
320
|
+
(n(!0), l(g, null, h(v.availableRecipients, (t) => (n(), l("label", {
|
|
321
|
+
key: t,
|
|
322
|
+
class: y([
|
|
323
|
+
"flex items-center gap-3 px-3 py-2.5 rounded-md cursor-pointer transition-all border",
|
|
324
|
+
u.value?.recipients.includes(t) ? "bg-linear-to-r from-(--ui-primary-soft) to-(--ui-accent-soft) border-(--ui-primary-soft) shadow-sm" : "ui-surface ui-border hover:border-(--ui-primary-soft) hover:bg-(--ui-surface-muted)"
|
|
325
|
+
])
|
|
326
|
+
}, [
|
|
327
|
+
e("div", $e, [
|
|
328
|
+
e("input", {
|
|
329
|
+
type: "checkbox",
|
|
330
|
+
checked: u.value?.recipients.includes(t),
|
|
331
|
+
class: "w-4 h-4 ui-primary rounded border ui-border-strong focus:ring-2 focus:ring-(--ui-primary) transition-all cursor-pointer",
|
|
332
|
+
onChange: (i) => V(t)
|
|
333
|
+
}, null, 40, Te)
|
|
334
|
+
]),
|
|
335
|
+
e("div", De, [
|
|
336
|
+
e("span", {
|
|
337
|
+
class: y([
|
|
338
|
+
"text-sm font-medium block truncate",
|
|
339
|
+
u.value?.recipients.includes(t) ? "ui-primary" : "ui-text"
|
|
340
|
+
])
|
|
341
|
+
}, p(t), 3)
|
|
342
|
+
]),
|
|
343
|
+
u.value?.recipients.includes(t) ? (n(), R(c, {
|
|
344
|
+
key: 0,
|
|
345
|
+
icon: "check-circle",
|
|
346
|
+
class: "w-4 h-4 ui-primary shrink-0"
|
|
347
|
+
})) : _("", !0)
|
|
348
|
+
], 2))), 128))
|
|
349
|
+
]))
|
|
350
|
+
]),
|
|
351
|
+
e("div", je, [
|
|
352
|
+
e("button", {
|
|
353
|
+
class: "px-4 py-2 ui-surface border ui-border ui-text rounded-md text-sm font-medium hover:bg-(--ui-surface-muted) transition-colors",
|
|
354
|
+
onClick: s[1] || (s[1] = (t) => x.value = !1)
|
|
355
|
+
}, " Cancel "),
|
|
356
|
+
e("button", {
|
|
357
|
+
class: "ml-auto px-4 py-2 ui-success-bg rounded-md text-sm font-semibold hover:bg-(--ui-success-strong) transition-colors flex items-center gap-2",
|
|
358
|
+
onClick: I
|
|
359
|
+
}, [
|
|
360
|
+
d(c, {
|
|
361
|
+
icon: "check",
|
|
362
|
+
class: "w-4 h-4"
|
|
363
|
+
}),
|
|
364
|
+
s[15] || (s[15] = b(" Save Recipients ", -1))
|
|
365
|
+
])
|
|
366
|
+
])
|
|
367
|
+
]),
|
|
368
|
+
_: 1
|
|
369
|
+
}, 8, ["modelValue"])
|
|
370
|
+
]));
|
|
371
|
+
}
|
|
372
|
+
}, Ie = /* @__PURE__ */ z(Ne, [["__scopeId", "data-v-c46bf185"]]);
|
|
373
|
+
export {
|
|
374
|
+
Ie as default
|
|
375
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const a=require("vue"),ge=require("./Slider.cjs"),J=require("./DatePicker.cjs"),ke=require("./FormField.cjs"),h=require("./Input.cjs"),Be=require("./Textarea.cjs"),G=require("./Select.cjs"),xe=require("./MultiSelect.cjs"),V=require("./Button.cjs"),z=require("./Label.cjs"),K=require("./FileUpload.cjs"),w=require("../lib/toast.cjs"),Ce=require("../_plugin-vue_export-helper-BHFhmbuH.cjs"),Ve={class:"w-full p-2"},we={key:0,class:"mb-6"},Se={class:"text-xl font-semibold ui-text"},_e={key:0,class:"mt-1 text-sm ui-text-muted"},Fe={key:0,class:"mb-4"},Ne={key:0,class:"text-base font-semibold ui-text"},Ee={key:1,class:"mt-1 text-sm ui-text-muted"},Te=["value"],Ue=["title","aria-label","disabled","onClick"],qe={key:2,class:"flex w-full items-center gap-2"},ze={class:"min-w-0 flex-1"},Ae={key:3,class:"flex w-full items-center gap-2"},$e={class:"min-w-0 flex-1"},De={key:5,class:"flex items-center"},Me={key:6,class:"flex items-center"},Le=["id","aria-checked","disabled","onClick"],Pe={key:7,class:"space-y-2"},Re={key:11,class:"space-y-2"},je={class:"flex items-center gap-4"},Oe={class:"min-w-12 text-right text-sm font-medium ui-text"},Ye={key:0,class:"flex justify-end gap-3 pt-6"},Ie={key:0,class:"hidden"},He={__name:"ReusableForm",props:{title:{type:String,default:""},description:{type:String,default:""},entityName:{type:String,default:"Item"},fields:{type:Array,required:!0,validator:y=>Array.isArray(y)&&y.every(B=>B?.name&&B?.label&&B?.type)},sections:{type:Array,default:()=>[]},initialData:{type:Object,default:null},loading:{type:Boolean,default:!1},customValidation:{type:Function,default:null},crossValidate:{type:Function,default:null},submitLabel:{type:String,default:"Submit"},showReset:{type:Boolean,default:!0},showCancel:{type:Boolean,default:!0},showSubmit:{type:Boolean,default:!0},formType:{type:String,default:"create",validator:y=>["create","edit"].includes(y)}},emits:["submit","reset","cancel","form-change"],setup(y,{emit:B}){const v=y,S=B,Q=a.useSlots(),i=a.computed(()=>v.loading),c=a.ref({}),m=a.ref({}),_=a.ref({}),A=a.ref({}),N=a.ref(!1),W=a.computed(()=>Array.isArray(v.sections)&&v.sections.length>0),X=a.computed(()=>!!Q.actions),$=a.computed(()=>W.value?v.sections.map((e,o)=>{const l=e?.id||`section-${o+1}`,n=Array.isArray(e?.fields)?e.fields:(v.fields||[]).filter(t=>t.sectionId===l);return{id:l,title:e?.title||"",description:e?.description||"",icon:e?.icon||"",wrapperClass:e?.wrapperClass||"",gridClass:e?.gridClass||"grid grid-cols-12 gap-4",card:e?.card!==!1,fields:n}}):[{id:"default",title:"",description:"",icon:"",wrapperClass:"",gridClass:"grid grid-cols-12 gap-4",card:!1,fields:v.fields||[]}]),x=a.computed(()=>$.value.flatMap(e=>e.fields||[])),Z=a.computed(()=>Object.keys(m.value).length===0),D=e=>{try{return JSON.stringify(e??{})}catch{return""}},E=(e,o)=>{if(!(!e||!o))return o.split(".").reduce((l,n)=>l?.[n],e)},C=(e,o,l)=>{const n=o.split("."),t=n.pop(),s=n.reduce((p,b)=>((!p[b]||typeof p[b]!="object")&&(p[b]={}),p[b]),e);s[t]=l},T=e=>e.type==="checkbox"||e.type==="switch"?!1:e.type==="number"||e.type==="slider"||e.type==="range"?e.min??0:e.type==="file"?null:e.type==="multifile"||e.type==="multiselect"?[]:e.type==="radio"&&e.options?.[0]?.value||"",M=()=>{const e={};return x.value.forEach(o=>{o.name.includes(".")?C(e,o.name,T(o)):e[o.name]=T(o)}),e},f=e=>{const o={};return x.value.forEach(l=>{const n=l.name.includes(".")?E(e,l.name):e?.[l.name],t=T(l),s=n===void 0?t:n;if(l.name.includes(".")){C(o,l.name,s);return}l.type==="file"?o[l.name]=null:l.type==="multifile"||l.type==="multiselect"?o[l.name]=Array.isArray(s)?s:[]:o[l.name]=s}),o};a.watch(()=>v.initialData,e=>{const o=e?f(e):M();D(o)!==D(c.value)&&(N.value=!0,c.value=o,queueMicrotask(()=>{N.value=!1}))},{immediate:!0}),a.watch(c,e=>{N.value||S("form-change",e)},{deep:!0});const u=e=>e.includes(".")?E(c.value,e):c.value[e],U=e=>{const o=m.value?.[e];return o||(e.includes(".")?E(m.value,e):void 0)},d=(e,o)=>{e.includes(".")?C(c.value,e,o):c.value[e]=o},g=e=>e?.type==="password",F=e=>!!_.value[e.name],ee=e=>g(e)?F(e)?"text":"password":e.type,te=e=>{e?.name&&(_.value={..._.value,[e.name]:!_.value[e.name]})},ae=()=>{if(m.value={},x.value.forEach(e=>{const o=u(e.name);if(e.required&&!e.disabled&&e.type!=="hidden"&&(e.type==="checkbox"||e.type==="switch"?o||(m.value[e.name]=e.errorMessage||`${e.label} is required`):e.type==="multiselect"||e.type==="multifile"?(!Array.isArray(o)||o.length===0)&&(m.value[e.name]=e.errorMessage||`${e.label} is required`):e.type==="number"||e.type==="slider"||e.type==="range"?o===""||o===null||o===void 0?m.value[e.name]=e.errorMessage||`${e.label} is required`:e.min!==void 0&&Number(o)<e.min?m.value[e.name]=`${e.label} must be at least ${e.min}`:e.max!==void 0&&Number(o)>e.max&&(m.value[e.name]=`${e.label} must be at most ${e.max}`):e.type==="email"?!o||!String(o).trim()?m.value[e.name]=e.errorMessage||`${e.label} is required`:/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(String(o))||(m.value[e.name]="Please enter a valid email address"):e.type==="url"?!o||!String(o).trim()?m.value[e.name]=e.errorMessage||`${e.label} is required`:/^https?:\/\/.+/.test(String(o))||(m.value[e.name]="Please enter a valid URL"):(o==null||typeof o=="string"&&!o.trim())&&(m.value[e.name]=e.errorMessage||`${e.label} is required`)),typeof e.validate=="function"){const l=e.validate(o,c.value);l&&(m.value[e.name]=l)}}),typeof v.customValidation=="function"){const e=v.customValidation(c.value);e&&typeof e=="object"&&(m.value={...m.value,...e})}if(typeof v.crossValidate=="function"){const e=v.crossValidate(c.value);e&&typeof e=="object"&&(m.value={...m.value,...e})}return Object.keys(m.value).length===0},k=(e,o,l=void 0)=>typeof e=="function"?e(c.value,o):e===void 0?l:e,L=e=>!!e?.actionButton&&e.actionButton.show!==!1,P=e=>{if(!e?.actionButton)return!0;const o=typeof e.actionButton.disabled=="function"?e.actionButton.disabled(c.value,e):e.actionButton.disabled;return!!(i.value||e.disabled||o)},R=e=>e?.actionButton?typeof e.actionButton.loading=="function"?e.actionButton.loading(c.value,e):!!e.actionButton.loading:!1,j=e=>{typeof e?.actionButton?.onClick=="function"&&e.actionButton.onClick(c.value,e)},O=e=>g(e)||!!k(e.trailingIcon,e,null),oe=e=>g(e)?F(e)?"eye-slash":"eye":k(e.trailingIcon,e,null),Y=e=>g(e)?F(e)?"Hide password":"Show password":k(e.trailingIconTitle,e,"Action"),ne=e=>g(e)?F(e)?"Hide password":"Show password":k(e.trailingIconAriaLabel,e,Y(e)),re=e=>k(e.trailingIconClass,e,"w-4 h-4"),q=e=>!!(i.value||e.disabled||k(e.trailingIconDisabled,e,!1)),le=e=>{if(!q(e)){if(g(e)){te(e);return}typeof e?.onTrailingIconClick=="function"&&e.onTrailingIconClick(c.value,e)}},I=async(e,o)=>{if(d(e.name,o),typeof e?.onChange=="function")try{await e.onChange(o,c.value)}catch{w.toast.error("An error occurred while processing the change")}},se=(e,o)=>{if(d(e.name,o),typeof e?.onChange=="function")try{e.onChange(o,c.value)}catch{w.toast.error("An error occurred while processing the change")}},ce=(e,o)=>{d(e.name,o),typeof e?.onChange=="function"&&e.onChange(o,c.value)},ie=(e,o)=>{d(e.name,o),typeof e?.onChange=="function"&&e.onChange(o,c.value)},ue=(e,o)=>{d(e.name,o),typeof e?.onChange=="function"&&e.onChange(o,c.value)},me=(e,o)=>{d(e.name,o),typeof e?.onChange=="function"&&e.onChange(o,c.value)},de=e=>{const o=new FormData;return Object.keys(e).forEach(l=>{const n=e[l];n!=null&&(n instanceof File?o.append(l,n):Array.isArray(n)?n.forEach((t,s)=>{t instanceof File?o.append(`${l}[]`,t):o.append(`${l}[${s}]`,t)}):typeof n=="object"&&!(n instanceof Date)?Object.keys(n).forEach(t=>{o.append(`${l}[${t}]`,n[t])}):o.append(l,n))}),o},pe=()=>{const e={};let o=!1;x.value.forEach(n=>{const t=u(n.name);if(n.type==="number"||n.type==="slider"||n.type==="range"){const p=t===""||t===null||t===void 0?t:Number(t);n.name.includes(".")?C(e,n.name,p):e[n.name]=p;return}if(n.type==="file"){t instanceof File?(o=!0,e[n.name]=t):v.formType==="edit"&&t&&(e[n.name]=t);return}if(n.type==="multifile"){Array.isArray(t)&&t.some(p=>p instanceof File)?(o=!0,e[n.name]=t):v.formType==="edit"&&Array.isArray(t)&&t.length>0&&(e[n.name]=t);return}const s=["text","textarea","date","email","url","tel","search","time","datetime-local","month","week"].includes(n.type)&&typeof t=="string"?t.trim():t;n.name.includes(".")?C(e,n.name,s):e[n.name]=s});let l=e;return o&&(l=de(e),v.formType==="edit"&&l.append("_method","PUT")),{formData:l,hasFiles:o}},H=async()=>{if(x.value.some(l=>l.type!=="multifile"&&(A.value[l.name]||[]).length>0))return w.toast.error("Please wait for all files to finish uploading"),!1;if(!ae())return w.toast.error("Please fix the validation errors before submitting"),!1;const o=pe();return S("submit",{formData:o.formData,formType:v.formType,originalData:v.initialData,hasFiles:o.hasFiles}),!0},be=async()=>{try{await H()}catch{w.toast.error("An error occurred during submission")}},ye=()=>{c.value=M(),m.value={},A.value={},S("reset")},ve=()=>S("cancel");return(e,o)=>{const l=a.resolveComponent("font-awesome-icon");return a.openBlock(),a.createElementBlock("div",Ve,[y.title?(a.openBlock(),a.createElementBlock("div",we,[a.createElementVNode("h2",Se,a.toDisplayString(y.title),1),y.description?(a.openBlock(),a.createElementBlock("p",_e,a.toDisplayString(y.description),1)):a.createCommentVNode("",!0)])):a.createCommentVNode("",!0),a.createElementVNode("form",{class:"space-y-6",onSubmit:a.withModifiers(be,["prevent"])},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList($.value,n=>(a.openBlock(),a.createElementBlock("div",{key:n.id,class:a.normalizeClass(n.wrapperClass||"")},[a.createElementVNode("div",{class:a.normalizeClass(n.card?"ui-surface border ui-border-strong rounded-xl p-4 sm:p-5":"")},[a.renderSlot(e.$slots,"section-header",{section:n},()=>[n.title||n.description?(a.openBlock(),a.createElementBlock("div",Fe,[n.title?(a.openBlock(),a.createElementBlock("h3",Ne,a.toDisplayString(n.title),1)):a.createCommentVNode("",!0),n.description?(a.openBlock(),a.createElementBlock("p",Ee,a.toDisplayString(n.description),1)):a.createCommentVNode("",!0)])):a.createCommentVNode("",!0)],!0),a.createElementVNode("div",{class:a.normalizeClass(n.gridClass)},[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(n.fields,t=>(a.openBlock(),a.createElementBlock("div",{key:t.name,class:a.normalizeClass(t.wrapperClass||"col-span-12")},[t.type==="hidden"?(a.openBlock(),a.createElementBlock("input",{key:0,value:u(t.name),type:"hidden"},null,8,Te)):(a.openBlock(),a.createBlock(ke.default,{key:1,id:`form-${y.entityName}-${t.name}`,label:t.label,required:!!t.required,error:U(t.name),"error-message":U(t.name),"help-text":t.helpText,class:a.normalizeClass(t.labelClass||"")},{default:a.withCtx(({fieldId:s,hasError:p,ariaDescribedBy:b})=>[a.renderSlot(e.$slots,`field-${t.name}`,{field:t,formData:c.value,error:U(t.name),update:r=>d(t.name,r)},()=>[["text","number","password","color","email","tel","url","search"].includes(t.type)?(a.openBlock(),a.createElementBlock("div",{key:0,class:a.normalizeClass(["relative",O(t)?"has-trailing-icon":""])},[a.createVNode(h.default,{id:s,"model-value":u(t.name),type:ee(t),placeholder:t.placeholder,disabled:i.value||t.disabled,readonly:t.readonly||t.disabled,class:a.normalizeClass([p?"border-(--ui-danger)":"ui-border-strong",t.inputClass||""]),"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","type","placeholder","disabled","readonly","class","aria-describedby","onUpdate:modelValue"]),O(t)?(a.openBlock(),a.createElementBlock("button",{key:0,type:"button",class:a.normalizeClass(["absolute right-3 top-1/2 -translate-y-1/2 ui-text hover:text-(--ui-text) transition-colors",q(t)?"opacity-50 cursor-not-allowed":""]),title:Y(t),"aria-label":ne(t),disabled:q(t),onClick:r=>le(t)},[a.createVNode(l,{icon:oe(t),class:a.normalizeClass(re(t))},null,8,["icon","class"])],10,Ue)):a.createCommentVNode("",!0)],2)):t.type==="textarea"?(a.openBlock(),a.createBlock(Be.default,{key:1,id:s,"model-value":u(t.name),placeholder:t.placeholder,disabled:i.value||t.disabled,readonly:t.readonly||t.disabled,rows:t.rows||3,class:a.normalizeClass(["w-full rounded-md border px-3 py-2 focus:outline-none focus:ring-2 focus:ring-(--ui-primary)",p?"border-(--ui-danger)":"ui-border-strong",t.inputClass||""]),"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","placeholder","disabled","readonly","rows","class","aria-describedby","onUpdate:modelValue"])):t.type==="select"?(a.openBlock(),a.createElementBlock("div",qe,[a.createElementVNode("div",ze,[a.createVNode(G.default,{id:s,"model-value":u(t.name),options:t.options,placeholder:t.placeholder||"Select an option",disabled:i.value||t.disabled,"has-error":p,"aria-describedby":b,"onUpdate:modelValue":r=>I(t,r)},null,8,["id","model-value","options","placeholder","disabled","has-error","aria-describedby","onUpdate:modelValue"])]),L(t)?(a.openBlock(),a.createBlock(V.default,{key:0,type:"button",variant:t.actionButton.variant||"outline",size:t.actionButton.size||"icon",class:a.normalizeClass(t.actionButton.class||""),title:t.actionButton.title||t.actionButton.label||"Action",disabled:P(t),loading:R(t),onClick:r=>j(t)},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(t.actionButton.label||"+"),1)]),_:2},1032,["variant","size","class","title","disabled","loading","onClick"])):a.createCommentVNode("",!0)])):t.type==="multiselect"?(a.openBlock(),a.createElementBlock("div",Ae,[a.createElementVNode("div",$e,[a.createVNode(xe.default,{id:s,"model-value":u(t.name),options:t.options,disabled:i.value||t.disabled,placeholder:t.placeholder||"Select options","has-error":p,"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","options","disabled","placeholder","has-error","aria-describedby","onUpdate:modelValue"])]),L(t)?(a.openBlock(),a.createBlock(V.default,{key:0,type:"button",variant:t.actionButton.variant||"outline",size:t.actionButton.size||"icon",class:a.normalizeClass(t.actionButton.class||""),title:t.actionButton.title||t.actionButton.label||"Action",disabled:P(t),loading:R(t),onClick:r=>j(t)},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(t.actionButton.label||"+"),1)]),_:2},1032,["variant","size","class","title","disabled","loading","onClick"])):a.createCommentVNode("",!0)])):t.type==="combobox"?(a.openBlock(),a.createBlock(G.default,{key:4,id:s,"model-value":u(t.name),options:t.options,placeholder:t.placeholder||"Select or type to add new",disabled:i.value||t.disabled,"has-error":p,"aria-describedby":b,"allow-create":t.allowCreate,"onUpdate:modelValue":r=>I(t,r)},null,8,["id","model-value","options","placeholder","disabled","has-error","aria-describedby","allow-create","onUpdate:modelValue"])):t.type==="checkbox"?(a.openBlock(),a.createElementBlock("div",De,[a.createVNode(h.default,{id:s,"model-value":u(t.name),type:"checkbox",disabled:i.value||t.disabled,class:"h-4 w-4 rounded ui-border-strong","aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","aria-describedby","onUpdate:modelValue"]),a.createVNode(z.default,{for:s,class:"ml-2 text-sm ui-text"},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(t.checkboxLabel||t.label),1)]),_:2},1032,["for"])])):t.type==="switch"?(a.openBlock(),a.createElementBlock("div",Me,[a.createElementVNode("button",{id:s,type:"button",role:"switch","aria-checked":u(t.name),disabled:i.value||t.disabled,class:a.normalizeClass(["relative inline-flex h-6 w-11 items-center rounded-full border-2 transition-colors focus:outline-none focus:ring-2 focus:ring-(--ui-primary) focus:ring-offset-2",u(t.name)?"ui-primary-bg border-(--ui-primary)":"ui-surface-soft border-(--ui-border-strong)",i.value||t.disabled?"cursor-not-allowed opacity-50":"cursor-pointer"]),onClick:r=>d(t.name,!u(t.name))},[a.createElementVNode("span",{class:a.normalizeClass(["inline-block h-4 w-4 transform rounded-full ui-surface border ui-border-strong transition-transform",u(t.name)?"translate-x-6":"translate-x-1"])},null,2)],10,Le),a.createVNode(z.default,{for:s,class:"ml-3 text-sm ui-text"},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(t.checkboxLabel||t.label),1)]),_:2},1032,["for"])])):t.type==="radio"?(a.openBlock(),a.createElementBlock("div",Pe,[(a.openBlock(!0),a.createElementBlock(a.Fragment,null,a.renderList(t.options,r=>(a.openBlock(),a.createElementBlock("div",{key:r.value,class:"flex items-center"},[a.createVNode(h.default,{id:`${s}-${r.value}`,"model-value":u(t.name),type:"radio",value:r.value,disabled:i.value||t.disabled,class:"h-4 w-4 ui-border-strong","aria-describedby":b,"onUpdate:modelValue":he=>d(t.name,he)},null,8,["id","model-value","value","disabled","aria-describedby","onUpdate:modelValue"]),a.createVNode(z.default,{for:`${s}-${r.value}`,class:"ml-2 text-sm ui-text"},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(r.label),1)]),_:2},1032,["for"])]))),128))])):t.type==="file"?(a.openBlock(),a.createBlock(K.default,{key:8,multiple:!1,accept:t.accept,"max-size":t.maxSize,variant:t.variant||"default",onFilesSelected:r=>ce(t,r),onFileRemoved:r=>ie(t,r)},null,8,["accept","max-size","variant","onFilesSelected","onFileRemoved"])):t.type==="multifile"?(a.openBlock(),a.createBlock(K.default,{key:9,multiple:t.multiple!==!1,accept:t.accept,"max-size":t.maxSize,"max-files":t.maxFiles,variant:t.variant||"default",onFilesSelected:r=>ue(t,r),onFileRemoved:r=>me(t,r)},null,8,["multiple","accept","max-size","max-files","variant","onFilesSelected","onFileRemoved"])):t.type==="slider"?(a.openBlock(),a.createBlock(ge.default,{key:10,"model-value":u(t.name),min:t.min,max:t.max,step:t.step,disabled:i.value||t.disabled,"onUpdate:modelValue":r=>se(t,r)},null,8,["model-value","min","max","step","disabled","onUpdate:modelValue"])):t.type==="range"?(a.openBlock(),a.createElementBlock("div",Re,[a.createElementVNode("div",je,[a.createVNode(h.default,{id:s,"model-value":u(t.name),type:"range",min:t.min,max:t.max,step:t.step||1,disabled:i.value||t.disabled,class:"flex-1","aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","min","max","step","disabled","aria-describedby","onUpdate:modelValue"]),a.createElementVNode("span",Oe,a.toDisplayString(u(t.name)),1)])])):t.type==="date"?(a.openBlock(),a.createBlock(J.default,{key:12,id:s,"model-value":u(t.name),disabled:i.value||t.disabled,required:t.required,min:t.min,max:t.max,placeholder:t.placeholder||"Select date",format:t.format||"DD/MM/YYYY","enable-time":t.enableTime===!0,"minute-interval":t.minuteInterval||1,clearable:t.clearable!==!1,"show-today":t.showToday!==!1,"calendar-position":t.calendarPosition||"left-0 bottom-full","aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","required","min","max","placeholder","format","enable-time","minute-interval","clearable","show-today","calendar-position","aria-describedby","onUpdate:modelValue"])):t.type==="time"?(a.openBlock(),a.createBlock(h.default,{key:13,id:s,"model-value":u(t.name),type:"time",disabled:i.value||t.disabled,class:a.normalizeClass([p?"border-(--ui-danger)":"ui-border-strong",t.inputClass||""]),"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","class","aria-describedby","onUpdate:modelValue"])):t.type==="datetime-local"?(a.openBlock(),a.createBlock(J.default,{key:14,id:s,"model-value":u(t.name),disabled:i.value||t.disabled,required:t.required,min:t.min,max:t.max,placeholder:t.placeholder||"Select date and time",format:t.format||"DD/MM/YYYY","enable-time":!0,"minute-interval":t.minuteInterval||1,clearable:t.clearable!==!1,"show-today":t.showToday!==!1,"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","required","min","max","placeholder","format","minute-interval","clearable","show-today","aria-describedby","onUpdate:modelValue"])):t.type==="month"?(a.openBlock(),a.createBlock(h.default,{key:15,id:s,"model-value":u(t.name),type:"month",disabled:i.value||t.disabled,class:a.normalizeClass([p?"border-(--ui-danger)":"ui-border-strong",t.inputClass||""]),"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","class","aria-describedby","onUpdate:modelValue"])):t.type==="week"?(a.openBlock(),a.createBlock(h.default,{key:16,id:s,"model-value":u(t.name),type:"week",disabled:i.value||t.disabled,class:a.normalizeClass([p?"border-(--ui-danger)":"ui-border-strong",t.inputClass||""]),"aria-describedby":b,"onUpdate:modelValue":r=>d(t.name,r)},null,8,["id","model-value","disabled","class","aria-describedby","onUpdate:modelValue"])):a.createCommentVNode("",!0)],!0)]),_:2},1032,["id","label","required","error","error-message","help-text","class"]))],2))),128))],2)],2)],2))),128)),a.renderSlot(e.$slots,"actions",{formData:c.value,isValid:Z.value,submit:H},()=>[y.showSubmit?(a.openBlock(),a.createElementBlock("div",Ye,[y.showReset?(a.openBlock(),a.createBlock(V.default,{key:0,type:"button",variant:"outline",disabled:i.value,onClick:ye},{default:a.withCtx(()=>[...o[0]||(o[0]=[a.createTextVNode(" Reset ",-1)])]),_:1},8,["disabled"])):a.createCommentVNode("",!0),y.showCancel?(a.openBlock(),a.createBlock(V.default,{key:1,type:"button",variant:"outline",disabled:i.value,onClick:ve},{default:a.withCtx(()=>[...o[1]||(o[1]=[a.createTextVNode(" Cancel ",-1)])]),_:1},8,["disabled"])):a.createCommentVNode("",!0),a.createVNode(V.default,{type:"submit",disabled:i.value,loading:i.value,variant:"default"},{default:a.withCtx(()=>[a.createTextVNode(a.toDisplayString(y.submitLabel),1)]),_:1},8,["disabled","loading"])])):a.createCommentVNode("",!0)],!0),y.showSubmit&&X.value?(a.openBlock(),a.createElementBlock("div",Ie)):a.createCommentVNode("",!0)],32)])}}},Je=Ce._export_sfc(He,[["__scopeId","data-v-08eb5933"]]);exports.default=Je;
|