vlite3 1.1.8 → 1.1.9
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/components/Chart/BarChart.vue.js +369 -0
- package/components/Chart/BarChart.vue2.js +4 -0
- package/components/Chart/CircleChart.vue.js +137 -0
- package/components/Chart/CircleChart.vue2.js +4 -0
- package/components/Chart/GaugeChart.vue.js +443 -0
- package/components/Chart/GaugeChart.vue2.js +4 -0
- package/components/Chart/LineChart.vue.js +7 -0
- package/components/Chart/LineChart.vue2.js +313 -0
- package/components/Chart/PieChart.vue.js +203 -0
- package/components/Chart/PieChart.vue2.js +4 -0
- package/components/Chart/utils.js +90 -0
- package/components/Footer/Footer.vue.js +35 -0
- package/components/Footer/Footer.vue2.js +4 -0
- package/components/Footer/Variant1.vue.js +178 -0
- package/components/Footer/Variant1.vue2.js +4 -0
- package/components/Footer/Variant2.vue.js +177 -0
- package/components/Footer/Variant2.vue2.js +4 -0
- package/components/Footer/Variant3.vue.js +82 -0
- package/components/Footer/Variant3.vue2.js +4 -0
- package/components/RichTextEditor/RichTextEditor.vue.js +332 -0
- package/components/RichTextEditor/RichTextEditor.vue3.js +5 -0
- package/components/RichTextEditor/RichTextLinkPopover.vue.js +107 -0
- package/components/RichTextEditor/RichTextLinkPopover.vue3.js +5 -0
- package/components/RichTextEditor/RichTextReader.vue.js +7 -0
- package/components/RichTextEditor/RichTextReader.vue2.js +19 -0
- package/components/RichTextEditor/RichTextToolbar.vue.js +330 -0
- package/components/RichTextEditor/RichTextToolbar.vue3.js +5 -0
- package/components/RichTextEditor/composables/useRichTextImageUpload.js +77 -0
- package/components/RichTextEditor/composables/useRichTextLinks.js +120 -0
- package/core/config.d.ts +2 -2
- package/index.d.ts +3 -0
- package/index.js +332 -315
- package/package.json +1 -1
- package/style.css +1 -1
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
import { defineComponent as M, computed as i, useModel as $, openBlock as t, createElementBlock as l, normalizeClass as v, createElementVNode as n, createCommentVNode as o, toDisplayString as s, withModifiers as T, createVNode as x, withCtx as z, createTextVNode as F, Fragment as g, renderList as m, createBlock as U, mergeModels as C } from "vue";
|
|
2
|
+
import N from "../Icon.vue.js";
|
|
3
|
+
import q from "../Input.vue.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import A from "../Button.vue.js";
|
|
6
|
+
const H = { class: "v-footer-top" }, I = { class: "flex flex-col lg:flex-row gap-10 lg:gap-16" }, J = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "flex flex-col gap-5 lg:max-w-xs w-full lg:shrink-0"
|
|
9
|
+
}, K = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "flex items-center gap-3"
|
|
12
|
+
}, O = ["src", "alt"], P = {
|
|
13
|
+
key: 1,
|
|
14
|
+
class: "text-lg font-bold text-foreground tracking-tight"
|
|
15
|
+
}, Q = {
|
|
16
|
+
key: 2,
|
|
17
|
+
class: "inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold bg-muted text-muted-foreground"
|
|
18
|
+
}, R = {
|
|
19
|
+
key: 1,
|
|
20
|
+
class: "text-sm text-muted-foreground leading-relaxed"
|
|
21
|
+
}, W = {
|
|
22
|
+
key: 2,
|
|
23
|
+
class: "space-y-3 pt-1"
|
|
24
|
+
}, X = {
|
|
25
|
+
key: 0,
|
|
26
|
+
class: "text-sm font-semibold text-foreground"
|
|
27
|
+
}, Y = {
|
|
28
|
+
key: 1,
|
|
29
|
+
class: "text-xs text-muted-foreground leading-relaxed"
|
|
30
|
+
}, Z = {
|
|
31
|
+
key: 3,
|
|
32
|
+
class: "flex items-center gap-1 pt-1"
|
|
33
|
+
}, ee = ["href", "aria-label", "onClick"], te = { class: "text-sm font-semibold text-foreground mb-4 tracking-wide" }, le = { class: "space-y-3" }, re = ["href", "target", "rel", "onClick"], oe = {
|
|
34
|
+
key: 0,
|
|
35
|
+
class: "v-footer-bottom border-t border-border/50"
|
|
36
|
+
}, ae = { class: "mx-auto w-full max-w-7xl px-6 lg:px-8 py-6 flex flex-col sm:flex-row items-center justify-between gap-3 text-center sm:text-left" }, se = {
|
|
37
|
+
key: 0,
|
|
38
|
+
class: "text-sm text-muted-foreground w-full sm:w-auto"
|
|
39
|
+
}, ne = {
|
|
40
|
+
key: 1,
|
|
41
|
+
class: "flex flex-wrap items-center justify-center sm:justify-end gap-x-5 gap-y-2 w-full sm:w-auto"
|
|
42
|
+
}, ie = ["href", "target", "rel", "onClick"], fe = /* @__PURE__ */ M({
|
|
43
|
+
__name: "Variant1",
|
|
44
|
+
props: /* @__PURE__ */ C({
|
|
45
|
+
data: {},
|
|
46
|
+
labels: {},
|
|
47
|
+
containerClass: {}
|
|
48
|
+
}, {
|
|
49
|
+
newsletterEmail: { default: "" },
|
|
50
|
+
newsletterEmailModifiers: {}
|
|
51
|
+
}),
|
|
52
|
+
emits: /* @__PURE__ */ C(["subscribe", "link-click"], ["update:newsletterEmail"]),
|
|
53
|
+
setup(f, { emit: E }) {
|
|
54
|
+
const h = f, _ = E, e = i(() => h.data), V = i(() => h.labels || {}), c = $(f, "newsletterEmail"), b = i(() => e.value.linkGroups && e.value.linkGroups.length > 0), k = i(() => e.value.socialLinks && e.value.socialLinks.length > 0), y = i(() => e.value.legalLinks && e.value.legalLinks.length > 0), w = i(() => !!e.value.newsletter), B = i(() => e.value.brandName || e.value.brandLogo || e.value.brandDescription), G = i(() => e.value.copyright || y.value);
|
|
55
|
+
function S() {
|
|
56
|
+
c.value.trim() && _("subscribe", c.value.trim());
|
|
57
|
+
}
|
|
58
|
+
function p(L, d) {
|
|
59
|
+
_("link-click", L, d);
|
|
60
|
+
}
|
|
61
|
+
return (L, d) => (t(), l("footer", {
|
|
62
|
+
class: v(["v-footer v-footer-v1 w-full bg-background text-foreground", f.containerClass])
|
|
63
|
+
}, [
|
|
64
|
+
n("div", H, [
|
|
65
|
+
n("div", {
|
|
66
|
+
class: v(["mx-auto w-full max-w-7xl px-6 lg:px-8", b.value ? "py-12 lg:py-16" : "py-8 lg:py-10"])
|
|
67
|
+
}, [
|
|
68
|
+
n("div", I, [
|
|
69
|
+
B.value || k.value || w.value ? (t(), l("div", J, [
|
|
70
|
+
e.value.brandLogo || e.value.brandName ? (t(), l("div", K, [
|
|
71
|
+
e.value.brandLogo ? (t(), l("img", {
|
|
72
|
+
key: 0,
|
|
73
|
+
src: e.value.brandLogo,
|
|
74
|
+
alt: e.value.brandName || "Brand logo",
|
|
75
|
+
class: "h-8 w-8 object-contain rounded"
|
|
76
|
+
}, null, 8, O)) : o("", !0),
|
|
77
|
+
e.value.brandName ? (t(), l("span", P, s(e.value.brandName), 1)) : o("", !0),
|
|
78
|
+
e.value.badge ? (t(), l("span", Q, s(e.value.badge), 1)) : o("", !0)
|
|
79
|
+
])) : o("", !0),
|
|
80
|
+
e.value.brandDescription ? (t(), l("p", R, s(e.value.brandDescription), 1)) : o("", !0),
|
|
81
|
+
w.value ? (t(), l("div", W, [
|
|
82
|
+
e.value.newsletter?.title ? (t(), l("p", X, s(e.value.newsletter.title), 1)) : o("", !0),
|
|
83
|
+
e.value.newsletter?.description ? (t(), l("p", Y, s(e.value.newsletter.description), 1)) : o("", !0),
|
|
84
|
+
n("form", {
|
|
85
|
+
class: "flex gap-2 w-full",
|
|
86
|
+
onSubmit: T(S, ["prevent"])
|
|
87
|
+
}, [
|
|
88
|
+
x(q, {
|
|
89
|
+
modelValue: c.value,
|
|
90
|
+
"onUpdate:modelValue": d[0] || (d[0] = (r) => c.value = r),
|
|
91
|
+
type: "email",
|
|
92
|
+
placeholder: e.value.newsletter?.placeholder || "Enter your email",
|
|
93
|
+
class: "flex-1 min-w-0",
|
|
94
|
+
"input-class": "bg-muted border-border focus:ring-2 focus:ring-primary/30 focus:border-primary/50 transition-all",
|
|
95
|
+
rounded: "lg"
|
|
96
|
+
}, null, 8, ["modelValue", "placeholder"]),
|
|
97
|
+
x(A, {
|
|
98
|
+
type: "submit",
|
|
99
|
+
variant: "primary",
|
|
100
|
+
rounded: "lg",
|
|
101
|
+
class: "whitespace-nowrap"
|
|
102
|
+
}, {
|
|
103
|
+
default: z(() => [
|
|
104
|
+
F(s(e.value.newsletter?.buttonText || V.value.subscribe || "Subscribe"), 1)
|
|
105
|
+
]),
|
|
106
|
+
_: 1
|
|
107
|
+
})
|
|
108
|
+
], 32)
|
|
109
|
+
])) : o("", !0),
|
|
110
|
+
k.value ? (t(), l("div", Z, [
|
|
111
|
+
(t(!0), l(g, null, m(e.value.socialLinks, (r, u) => (t(), l("a", {
|
|
112
|
+
key: u,
|
|
113
|
+
href: r.url,
|
|
114
|
+
"aria-label": r.label || "Social link",
|
|
115
|
+
target: "_blank",
|
|
116
|
+
rel: "noopener noreferrer",
|
|
117
|
+
class: "inline-flex items-center justify-center w-9 h-9 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-all duration-200",
|
|
118
|
+
onClick: (a) => p(r.url, a)
|
|
119
|
+
}, [
|
|
120
|
+
x(N, {
|
|
121
|
+
icon: r.icon,
|
|
122
|
+
class: "w-[18px] h-[18px]"
|
|
123
|
+
}, null, 8, ["icon"])
|
|
124
|
+
], 8, ee))), 128))
|
|
125
|
+
])) : o("", !0)
|
|
126
|
+
])) : o("", !0),
|
|
127
|
+
b.value ? (t(), l("div", {
|
|
128
|
+
key: 1,
|
|
129
|
+
class: v(["grid w-full lg:w-auto! lg:ml-auto gap-y-10 gap-x-6 sm:gap-x-10 lg:gap-x-20 lg:pr-4", [
|
|
130
|
+
e.value.linkGroups?.length === 1 ? "grid-cols-1" : e.value.linkGroups?.length === 2 ? "grid-cols-2 lg:grid-cols-[auto_auto]" : e.value.linkGroups?.length === 3 ? "grid-cols-2 md:grid-cols-3 lg:grid-cols-[auto_auto_auto]" : "grid-cols-2 md:grid-cols-4 lg:grid-cols-[auto_auto_auto_auto]"
|
|
131
|
+
]])
|
|
132
|
+
}, [
|
|
133
|
+
(t(!0), l(g, null, m(e.value.linkGroups, (r, u) => (t(), l("div", { key: u }, [
|
|
134
|
+
n("h3", te, s(r.title), 1),
|
|
135
|
+
n("ul", le, [
|
|
136
|
+
(t(!0), l(g, null, m(r.links, (a, j) => (t(), l("li", { key: j }, [
|
|
137
|
+
n("a", {
|
|
138
|
+
href: a.url,
|
|
139
|
+
target: a.external ? "_blank" : void 0,
|
|
140
|
+
rel: a.external ? "noopener noreferrer" : void 0,
|
|
141
|
+
class: "inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors duration-200",
|
|
142
|
+
onClick: (D) => p(a.url, D)
|
|
143
|
+
}, [
|
|
144
|
+
a.icon ? (t(), U(N, {
|
|
145
|
+
key: 0,
|
|
146
|
+
icon: a.icon,
|
|
147
|
+
class: "w-3.5 h-3.5 shrink-0"
|
|
148
|
+
}, null, 8, ["icon"])) : o("", !0),
|
|
149
|
+
n("span", null, s(a.label), 1)
|
|
150
|
+
], 8, re)
|
|
151
|
+
]))), 128))
|
|
152
|
+
])
|
|
153
|
+
]))), 128))
|
|
154
|
+
], 2)) : o("", !0)
|
|
155
|
+
])
|
|
156
|
+
], 2)
|
|
157
|
+
]),
|
|
158
|
+
G.value ? (t(), l("div", oe, [
|
|
159
|
+
n("div", ae, [
|
|
160
|
+
e.value.copyright ? (t(), l("p", se, s(e.value.copyright), 1)) : o("", !0),
|
|
161
|
+
y.value ? (t(), l("div", ne, [
|
|
162
|
+
(t(!0), l(g, null, m(e.value.legalLinks, (r, u) => (t(), l("a", {
|
|
163
|
+
key: u,
|
|
164
|
+
href: r.url,
|
|
165
|
+
target: r.external ? "_blank" : void 0,
|
|
166
|
+
rel: r.external ? "noopener noreferrer" : void 0,
|
|
167
|
+
class: "text-sm text-muted-foreground hover:text-foreground transition-colors duration-200",
|
|
168
|
+
onClick: (a) => p(r.url, a)
|
|
169
|
+
}, s(r.label), 9, ie))), 128))
|
|
170
|
+
])) : o("", !0)
|
|
171
|
+
])
|
|
172
|
+
])) : o("", !0)
|
|
173
|
+
], 2));
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
export {
|
|
177
|
+
fe as default
|
|
178
|
+
};
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { defineComponent as G, computed as n, useModel as M, openBlock as t, createElementBlock as l, normalizeClass as $, createElementVNode as i, createCommentVNode as r, toDisplayString as s, withModifiers as T, createVNode as v, withCtx as z, createTextVNode as F, Fragment as m, renderList as f, createBlock as U, mergeModels as k } from "vue";
|
|
2
|
+
import y from "../Icon.vue.js";
|
|
3
|
+
import q from "../Input.vue.js";
|
|
4
|
+
/* empty css */
|
|
5
|
+
import A from "../Button.vue.js";
|
|
6
|
+
const H = { class: "mx-auto w-full max-w-7xl px-6 lg:px-8 py-12 lg:py-16" }, I = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "text-center mb-10"
|
|
9
|
+
}, J = {
|
|
10
|
+
key: 0,
|
|
11
|
+
class: "flex items-center justify-center gap-3 mb-3"
|
|
12
|
+
}, K = ["src", "alt"], O = {
|
|
13
|
+
key: 1,
|
|
14
|
+
class: "text-xl font-bold text-foreground tracking-tight"
|
|
15
|
+
}, P = {
|
|
16
|
+
key: 2,
|
|
17
|
+
class: "inline-flex items-center px-2 py-0.5 rounded-full text-[10px] font-semibold bg-muted text-muted-foreground"
|
|
18
|
+
}, Q = {
|
|
19
|
+
key: 1,
|
|
20
|
+
class: "text-sm text-muted-foreground leading-relaxed max-w-md mx-auto"
|
|
21
|
+
}, R = {
|
|
22
|
+
key: 1,
|
|
23
|
+
class: "max-w-md mx-auto text-center mb-10"
|
|
24
|
+
}, W = {
|
|
25
|
+
key: 0,
|
|
26
|
+
class: "text-sm font-semibold text-foreground mb-1"
|
|
27
|
+
}, X = {
|
|
28
|
+
key: 1,
|
|
29
|
+
class: "text-xs text-muted-foreground leading-relaxed mb-3"
|
|
30
|
+
}, Y = {
|
|
31
|
+
key: 2,
|
|
32
|
+
class: "flex flex-wrap justify-center gap-10 sm:gap-16 md:gap-20 lg:gap-24 mb-12 w-full mx-auto"
|
|
33
|
+
}, Z = { class: "text-sm font-semibold text-foreground mb-4 tracking-wide" }, ee = { class: "space-y-3" }, te = ["href", "target", "rel", "onClick"], le = {
|
|
34
|
+
key: 3,
|
|
35
|
+
class: "flex items-center justify-center gap-1 mb-0"
|
|
36
|
+
}, re = ["href", "aria-label", "onClick"], ae = {
|
|
37
|
+
key: 0,
|
|
38
|
+
class: "v-footer-bottom border-t border-border/50"
|
|
39
|
+
}, oe = { class: "mx-auto w-full max-w-7xl px-6 lg:px-8 py-6 flex flex-col sm:flex-row flex-wrap items-center justify-center gap-x-6 gap-y-4 text-center" }, se = {
|
|
40
|
+
key: 0,
|
|
41
|
+
class: "text-sm text-muted-foreground"
|
|
42
|
+
}, ne = {
|
|
43
|
+
key: 1,
|
|
44
|
+
class: "hidden sm:inline text-muted/30"
|
|
45
|
+
}, ie = {
|
|
46
|
+
key: 2,
|
|
47
|
+
class: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2"
|
|
48
|
+
}, ue = ["href", "target", "rel", "onClick"], pe = /* @__PURE__ */ G({
|
|
49
|
+
__name: "Variant2",
|
|
50
|
+
props: /* @__PURE__ */ k({
|
|
51
|
+
data: {},
|
|
52
|
+
labels: {},
|
|
53
|
+
containerClass: {}
|
|
54
|
+
}, {
|
|
55
|
+
newsletterEmail: { default: "" },
|
|
56
|
+
newsletterEmailModifiers: {}
|
|
57
|
+
}),
|
|
58
|
+
emits: /* @__PURE__ */ k(["subscribe", "link-click"], ["update:newsletterEmail"]),
|
|
59
|
+
setup(x, { emit: w }) {
|
|
60
|
+
const b = x, h = w, e = n(() => b.data), L = n(() => b.labels || {}), c = M(x, "newsletterEmail"), C = n(() => e.value.linkGroups && e.value.linkGroups.length > 0), N = n(() => e.value.socialLinks && e.value.socialLinks.length > 0), p = n(() => e.value.legalLinks && e.value.legalLinks.length > 0), E = n(() => !!e.value.newsletter), V = n(() => e.value.brandName || e.value.brandLogo || e.value.brandDescription), j = n(() => e.value.copyright || p.value);
|
|
61
|
+
function B() {
|
|
62
|
+
c.value.trim() && h("subscribe", c.value.trim());
|
|
63
|
+
}
|
|
64
|
+
function g(_, d) {
|
|
65
|
+
h("link-click", _, d);
|
|
66
|
+
}
|
|
67
|
+
return (_, d) => (t(), l("footer", {
|
|
68
|
+
class: $(["v-footer v-footer-v2 w-full bg-background text-foreground", x.containerClass])
|
|
69
|
+
}, [
|
|
70
|
+
i("div", H, [
|
|
71
|
+
V.value ? (t(), l("div", I, [
|
|
72
|
+
e.value.brandLogo || e.value.brandName ? (t(), l("div", J, [
|
|
73
|
+
e.value.brandLogo ? (t(), l("img", {
|
|
74
|
+
key: 0,
|
|
75
|
+
src: e.value.brandLogo,
|
|
76
|
+
alt: e.value.brandName || "Brand logo",
|
|
77
|
+
class: "h-10 w-10 object-contain rounded"
|
|
78
|
+
}, null, 8, K)) : r("", !0),
|
|
79
|
+
e.value.brandName ? (t(), l("span", O, s(e.value.brandName), 1)) : r("", !0),
|
|
80
|
+
e.value.badge ? (t(), l("span", P, s(e.value.badge), 1)) : r("", !0)
|
|
81
|
+
])) : r("", !0),
|
|
82
|
+
e.value.brandDescription ? (t(), l("p", Q, s(e.value.brandDescription), 1)) : r("", !0)
|
|
83
|
+
])) : r("", !0),
|
|
84
|
+
E.value ? (t(), l("div", R, [
|
|
85
|
+
e.value.newsletter?.title ? (t(), l("p", W, s(e.value.newsletter.title), 1)) : r("", !0),
|
|
86
|
+
e.value.newsletter?.description ? (t(), l("p", X, s(e.value.newsletter.description), 1)) : r("", !0),
|
|
87
|
+
i("form", {
|
|
88
|
+
class: "flex gap-2 w-full",
|
|
89
|
+
onSubmit: T(B, ["prevent"])
|
|
90
|
+
}, [
|
|
91
|
+
v(q, {
|
|
92
|
+
modelValue: c.value,
|
|
93
|
+
"onUpdate:modelValue": d[0] || (d[0] = (a) => c.value = a),
|
|
94
|
+
type: "email",
|
|
95
|
+
placeholder: e.value.newsletter?.placeholder || "Enter your email",
|
|
96
|
+
class: "flex-1 min-w-0",
|
|
97
|
+
"input-class": "bg-muted border-border focus:ring-2 focus:ring-primary/30 focus:border-primary/50 transition-all",
|
|
98
|
+
rounded: "lg"
|
|
99
|
+
}, null, 8, ["modelValue", "placeholder"]),
|
|
100
|
+
v(A, {
|
|
101
|
+
type: "submit",
|
|
102
|
+
variant: "primary",
|
|
103
|
+
rounded: "lg",
|
|
104
|
+
class: "whitespace-nowrap"
|
|
105
|
+
}, {
|
|
106
|
+
default: z(() => [
|
|
107
|
+
F(s(e.value.newsletter?.buttonText || L.value.subscribe || "Subscribe"), 1)
|
|
108
|
+
]),
|
|
109
|
+
_: 1
|
|
110
|
+
})
|
|
111
|
+
], 32)
|
|
112
|
+
])) : r("", !0),
|
|
113
|
+
C.value ? (t(), l("div", Y, [
|
|
114
|
+
(t(!0), l(m, null, f(e.value.linkGroups, (a, u) => (t(), l("div", {
|
|
115
|
+
key: u,
|
|
116
|
+
class: "flex flex-col items-center sm:items-start text-center sm:text-left min-w-[100px]"
|
|
117
|
+
}, [
|
|
118
|
+
i("h3", Z, s(a.title), 1),
|
|
119
|
+
i("ul", ee, [
|
|
120
|
+
(t(!0), l(m, null, f(a.links, (o, S) => (t(), l("li", { key: S }, [
|
|
121
|
+
i("a", {
|
|
122
|
+
href: o.url,
|
|
123
|
+
target: o.external ? "_blank" : void 0,
|
|
124
|
+
rel: o.external ? "noopener noreferrer" : void 0,
|
|
125
|
+
class: "inline-flex items-center gap-2 text-sm text-muted-foreground hover:text-foreground transition-colors duration-200",
|
|
126
|
+
onClick: (D) => g(o.url, D)
|
|
127
|
+
}, [
|
|
128
|
+
o.icon ? (t(), U(y, {
|
|
129
|
+
key: 0,
|
|
130
|
+
icon: o.icon,
|
|
131
|
+
class: "w-3.5 h-3.5 shrink-0"
|
|
132
|
+
}, null, 8, ["icon"])) : r("", !0),
|
|
133
|
+
i("span", null, s(o.label), 1)
|
|
134
|
+
], 8, te)
|
|
135
|
+
]))), 128))
|
|
136
|
+
])
|
|
137
|
+
]))), 128))
|
|
138
|
+
])) : r("", !0),
|
|
139
|
+
N.value ? (t(), l("div", le, [
|
|
140
|
+
(t(!0), l(m, null, f(e.value.socialLinks, (a, u) => (t(), l("a", {
|
|
141
|
+
key: u,
|
|
142
|
+
href: a.url,
|
|
143
|
+
"aria-label": a.label || "Social link",
|
|
144
|
+
target: "_blank",
|
|
145
|
+
rel: "noopener noreferrer",
|
|
146
|
+
class: "inline-flex items-center justify-center w-9 h-9 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-all duration-200",
|
|
147
|
+
onClick: (o) => g(a.url, o)
|
|
148
|
+
}, [
|
|
149
|
+
v(y, {
|
|
150
|
+
icon: a.icon,
|
|
151
|
+
class: "w-[18px] h-[18px]"
|
|
152
|
+
}, null, 8, ["icon"])
|
|
153
|
+
], 8, re))), 128))
|
|
154
|
+
])) : r("", !0)
|
|
155
|
+
]),
|
|
156
|
+
j.value ? (t(), l("div", ae, [
|
|
157
|
+
i("div", oe, [
|
|
158
|
+
e.value.copyright ? (t(), l("p", se, s(e.value.copyright), 1)) : r("", !0),
|
|
159
|
+
e.value.copyright && p.value ? (t(), l("span", ne, "|")) : r("", !0),
|
|
160
|
+
p.value ? (t(), l("div", ie, [
|
|
161
|
+
(t(!0), l(m, null, f(e.value.legalLinks, (a, u) => (t(), l("a", {
|
|
162
|
+
key: u,
|
|
163
|
+
href: a.url,
|
|
164
|
+
target: a.external ? "_blank" : void 0,
|
|
165
|
+
rel: a.external ? "noopener noreferrer" : void 0,
|
|
166
|
+
class: "text-sm text-muted-foreground hover:text-foreground transition-colors duration-200",
|
|
167
|
+
onClick: (o) => g(a.url, o)
|
|
168
|
+
}, s(a.label), 9, ue))), 128))
|
|
169
|
+
])) : r("", !0)
|
|
170
|
+
])
|
|
171
|
+
])) : r("", !0)
|
|
172
|
+
], 2));
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
export {
|
|
176
|
+
pe as default
|
|
177
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { defineComponent as b, computed as i, openBlock as t, createElementBlock as r, normalizeClass as w, createElementVNode as a, createCommentVNode as o, toDisplayString as c, Fragment as h, renderList as g, createVNode as y } from "vue";
|
|
2
|
+
import L from "../Icon.vue.js";
|
|
3
|
+
const C = { class: "mx-auto w-full max-w-7xl px-6 lg:px-8" }, N = { class: "py-6 flex flex-col md:flex-row flex-wrap items-center justify-between gap-6 border-t border-border/50" }, j = { class: "flex flex-col sm:flex-row items-center gap-3 min-w-0 text-center sm:text-left shrink-0" }, V = { class: "flex items-center gap-3" }, B = ["src", "alt"], S = {
|
|
4
|
+
key: 1,
|
|
5
|
+
class: "text-sm font-semibold text-foreground whitespace-nowrap"
|
|
6
|
+
}, E = {
|
|
7
|
+
key: 0,
|
|
8
|
+
class: "text-muted/30 hidden sm:inline"
|
|
9
|
+
}, z = {
|
|
10
|
+
key: 1,
|
|
11
|
+
class: "text-sm text-muted-foreground whitespace-nowrap"
|
|
12
|
+
}, D = {
|
|
13
|
+
key: 0,
|
|
14
|
+
class: "flex flex-wrap items-center justify-center gap-x-6 gap-y-2"
|
|
15
|
+
}, F = ["href", "target", "rel", "onClick"], $ = {
|
|
16
|
+
key: 1,
|
|
17
|
+
class: "flex items-center gap-1 shrink-0"
|
|
18
|
+
}, q = ["href", "aria-label", "onClick"], H = /* @__PURE__ */ b({
|
|
19
|
+
__name: "Variant3",
|
|
20
|
+
props: {
|
|
21
|
+
data: {},
|
|
22
|
+
labels: {},
|
|
23
|
+
containerClass: {}
|
|
24
|
+
},
|
|
25
|
+
emits: ["link-click"],
|
|
26
|
+
setup(d, { emit: p }) {
|
|
27
|
+
const x = d, v = p, e = i(() => x.data), _ = i(() => e.value.socialLinks && e.value.socialLinks.length > 0), k = i(() => e.value.legalLinks && e.value.legalLinks.length > 0);
|
|
28
|
+
function u(m, f) {
|
|
29
|
+
v("link-click", m, f);
|
|
30
|
+
}
|
|
31
|
+
return (m, f) => (t(), r("footer", {
|
|
32
|
+
class: w(["v-footer v-footer-v3 w-full bg-background text-foreground", d.containerClass])
|
|
33
|
+
}, [
|
|
34
|
+
a("div", C, [
|
|
35
|
+
a("div", N, [
|
|
36
|
+
a("div", j, [
|
|
37
|
+
a("div", V, [
|
|
38
|
+
e.value.brandLogo ? (t(), r("img", {
|
|
39
|
+
key: 0,
|
|
40
|
+
src: e.value.brandLogo,
|
|
41
|
+
alt: e.value.brandName || "Brand logo",
|
|
42
|
+
class: "h-6 w-6 object-contain rounded shrink-0"
|
|
43
|
+
}, null, 8, B)) : o("", !0),
|
|
44
|
+
e.value.brandName ? (t(), r("span", S, c(e.value.brandName), 1)) : o("", !0)
|
|
45
|
+
]),
|
|
46
|
+
(e.value.brandLogo || e.value.brandName) && e.value.copyright ? (t(), r("span", E, "|")) : o("", !0),
|
|
47
|
+
e.value.copyright ? (t(), r("p", z, c(e.value.copyright), 1)) : o("", !0)
|
|
48
|
+
]),
|
|
49
|
+
k.value ? (t(), r("div", D, [
|
|
50
|
+
(t(!0), r(h, null, g(e.value.legalLinks, (n, l) => (t(), r("a", {
|
|
51
|
+
key: l,
|
|
52
|
+
href: n.url,
|
|
53
|
+
target: n.external ? "_blank" : void 0,
|
|
54
|
+
rel: n.external ? "noopener noreferrer" : void 0,
|
|
55
|
+
class: "text-sm text-muted-foreground hover:text-foreground transition-colors duration-200 whitespace-nowrap",
|
|
56
|
+
onClick: (s) => u(n.url, s)
|
|
57
|
+
}, c(n.label), 9, F))), 128))
|
|
58
|
+
])) : o("", !0),
|
|
59
|
+
_.value ? (t(), r("div", $, [
|
|
60
|
+
(t(!0), r(h, null, g(e.value.socialLinks, (n, l) => (t(), r("a", {
|
|
61
|
+
key: l,
|
|
62
|
+
href: n.url,
|
|
63
|
+
"aria-label": n.label || "Social link",
|
|
64
|
+
target: "_blank",
|
|
65
|
+
rel: "noopener noreferrer",
|
|
66
|
+
class: "inline-flex items-center justify-center w-8 h-8 rounded-lg text-muted-foreground hover:text-foreground hover:bg-muted transition-all duration-200",
|
|
67
|
+
onClick: (s) => u(n.url, s)
|
|
68
|
+
}, [
|
|
69
|
+
y(L, {
|
|
70
|
+
icon: n.icon,
|
|
71
|
+
class: "w-4 h-4"
|
|
72
|
+
}, null, 8, ["icon"])
|
|
73
|
+
], 8, q))), 128))
|
|
74
|
+
])) : o("", !0)
|
|
75
|
+
])
|
|
76
|
+
])
|
|
77
|
+
], 2));
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
export {
|
|
81
|
+
H as default
|
|
82
|
+
};
|