cinqcinqdev-seo 0.1.54 → 0.1.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/module.json +1 -1
- package/dist/runtime/components/sections/BlogHero.vue +15 -2
- package/dist/runtime/components/sections/CallToAction.vue +15 -2
- package/dist/runtime/components/sections/Comparison.vue +15 -2
- package/dist/runtime/components/sections/ContactForm.vue +14 -1
- package/dist/runtime/components/sections/DataTable.vue +10 -1
- package/dist/runtime/components/sections/FAQ.vue +15 -2
- package/dist/runtime/components/sections/Features.vue +15 -2
- package/dist/runtime/components/sections/HeroSection.vue +15 -2
- package/dist/runtime/components/sections/Newsletter.vue +15 -2
- package/dist/runtime/components/sections/Pricing.vue +15 -2
- package/dist/runtime/components/sections/Process.vue +15 -2
- package/dist/runtime/components/sections/Quote.vue +15 -2
- package/dist/runtime/components/sections/RelatedPages.vue +15 -2
- package/dist/runtime/components/sections/RichText.vue +15 -2
- package/dist/runtime/components/sections/ServiceGrid.vue +15 -2
- package/dist/runtime/components/sections/Testimonials.vue +15 -2
- package/dist/runtime/components/sections/TextVisual.vue +10 -1
- package/dist/runtime/composables/useAdminSections.js +179 -34
- package/dist/runtime/pages/admin/editor/[id].vue +1 -1
- package/package.json +1 -1
package/dist/module.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- ── CENTERED ─────────────────────────────────────────────── -->
|
|
5
5
|
<div v-if="layout === 'centered'" :class="[sectionPad]">
|
|
@@ -140,7 +140,11 @@ const props = defineProps({
|
|
|
140
140
|
radius: { type: String, default: "rounded" },
|
|
141
141
|
textDirection: { type: String, default: "ltr" },
|
|
142
142
|
contentWidth: { type: String, default: "narrow" },
|
|
143
|
-
textSize: { type: String, default: "md" }
|
|
143
|
+
textSize: { type: String, default: "md" },
|
|
144
|
+
paddingTop: { type: String, default: "" },
|
|
145
|
+
paddingBottom: { type: String, default: "" },
|
|
146
|
+
marginTop: { type: String, default: "" },
|
|
147
|
+
marginBottom: { type: String, default: "" }
|
|
144
148
|
});
|
|
145
149
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
146
150
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-[24px]", pill: "rounded-[36px]" })[props.radius] || "rounded-[24px]");
|
|
@@ -150,4 +154,13 @@ const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base
|
|
|
150
154
|
const alignText = computed(() => ({ left: "text-left", center: "text-center", right: "text-right" })[props.textAlign] || "text-center");
|
|
151
155
|
const alignFlex = computed(() => ({ left: "justify-start", center: "justify-center", right: "justify-end" })[props.textAlign] || "justify-center");
|
|
152
156
|
const alignProse = computed(() => ({ left: "max-w-2xl", center: "max-w-2xl mx-auto", right: "max-w-2xl ml-auto" })[props.textAlign] || "max-w-2xl mx-auto");
|
|
157
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
158
|
+
const spacingStyle = computed(() => {
|
|
159
|
+
const s = {};
|
|
160
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
161
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
162
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
163
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
164
|
+
return s;
|
|
165
|
+
});
|
|
153
166
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- CENTERED -->
|
|
5
5
|
<div v-if="layout === 'centered'" :class="[containerClass, 'text-center']">
|
|
@@ -81,11 +81,24 @@ const props = defineProps({
|
|
|
81
81
|
radius: { type: String, default: "rounded" },
|
|
82
82
|
textDirection: { type: String, default: "ltr" },
|
|
83
83
|
contentWidth: { type: String, default: "normal" },
|
|
84
|
-
textSize: { type: String, default: "md" }
|
|
84
|
+
textSize: { type: String, default: "md" },
|
|
85
|
+
paddingTop: { type: String, default: "" },
|
|
86
|
+
paddingBottom: { type: String, default: "" },
|
|
87
|
+
marginTop: { type: String, default: "" },
|
|
88
|
+
marginBottom: { type: String, default: "" }
|
|
85
89
|
});
|
|
86
90
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
87
91
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-2xl", pill: "rounded-full" })[props.radius] || "rounded-2xl");
|
|
88
92
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
89
93
|
const titleFontSize = computed(() => ({ sm: "clamp(1rem,1.5vw,1.3rem)", md: "clamp(1.3rem,2vw,1.8rem)", lg: "clamp(2.5rem,8vw,5.5rem)" })[props.textSize] || "clamp(1.3rem,2vw,1.8rem)");
|
|
90
94
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
95
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
96
|
+
const spacingStyle = computed(() => {
|
|
97
|
+
const s = {};
|
|
98
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
99
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
100
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
101
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
102
|
+
return s;
|
|
103
|
+
});
|
|
91
104
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<!-- Header -->
|
|
@@ -238,7 +238,11 @@ const props = defineProps({
|
|
|
238
238
|
radius: { type: String, default: "rounded" },
|
|
239
239
|
textDirection: { type: String, default: "ltr" },
|
|
240
240
|
contentWidth: { type: String, default: "normal" },
|
|
241
|
-
textSize: { type: String, default: "md" }
|
|
241
|
+
textSize: { type: String, default: "md" },
|
|
242
|
+
paddingTop: { type: String, default: "" },
|
|
243
|
+
paddingBottom: { type: String, default: "" },
|
|
244
|
+
marginTop: { type: String, default: "" },
|
|
245
|
+
marginBottom: { type: String, default: "" }
|
|
242
246
|
});
|
|
243
247
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
244
248
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
@@ -261,4 +265,13 @@ const gridCols = computed(() => {
|
|
|
261
265
|
if (n === 4) return "grid-cols-1 sm:grid-cols-2 xl:grid-cols-4";
|
|
262
266
|
return "grid-cols-1 md:grid-cols-3";
|
|
263
267
|
});
|
|
268
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
269
|
+
const spacingStyle = computed(() => {
|
|
270
|
+
const s = {};
|
|
271
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
272
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
273
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
274
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
275
|
+
return s;
|
|
276
|
+
});
|
|
264
277
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<!-- SPLIT layout -->
|
|
@@ -112,6 +112,10 @@ const props = defineProps({
|
|
|
112
112
|
textDirection: { type: String, default: "ltr" },
|
|
113
113
|
contentWidth: { type: String, default: "normal" },
|
|
114
114
|
textSize: { type: String, default: "md" },
|
|
115
|
+
paddingTop: { type: String, default: "" },
|
|
116
|
+
paddingBottom: { type: String, default: "" },
|
|
117
|
+
marginTop: { type: String, default: "" },
|
|
118
|
+
marginBottom: { type: String, default: "" },
|
|
115
119
|
fields: {
|
|
116
120
|
type: Array,
|
|
117
121
|
default: () => [
|
|
@@ -145,4 +149,13 @@ const handleSubmit = async () => {
|
|
|
145
149
|
sent.value = false;
|
|
146
150
|
}, 4e3);
|
|
147
151
|
};
|
|
152
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
153
|
+
const spacingStyle = computed(() => {
|
|
154
|
+
const s = {};
|
|
155
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
156
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
157
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
158
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
159
|
+
return s;
|
|
160
|
+
});
|
|
148
161
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<!-- Header row: title + search -->
|
|
@@ -204,4 +204,13 @@ const gridCols = computed(() => {
|
|
|
204
204
|
if (n <= 3) return "grid-cols-1 md:grid-cols-2";
|
|
205
205
|
return "grid-cols-1 md:grid-cols-2 lg:grid-cols-3";
|
|
206
206
|
});
|
|
207
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
208
|
+
const spacingStyle = computed(() => {
|
|
209
|
+
const s = {};
|
|
210
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
211
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
212
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
213
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
214
|
+
return s;
|
|
215
|
+
});
|
|
207
216
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
<div class="text-center mb-16">
|
|
5
5
|
<component :is="titleTag" class="font-black uppercase tracking-tighter italic" :style="{ fontSize: titleFontSize }">{{ title }}</component>
|
|
@@ -42,7 +42,11 @@ const props = defineProps({
|
|
|
42
42
|
radius: { type: String, default: "rounded" },
|
|
43
43
|
textDirection: { type: String, default: "ltr" },
|
|
44
44
|
contentWidth: { type: String, default: "narrow" },
|
|
45
|
-
textSize: { type: String, default: "md" }
|
|
45
|
+
textSize: { type: String, default: "md" },
|
|
46
|
+
paddingTop: { type: String, default: "" },
|
|
47
|
+
paddingBottom: { type: String, default: "" },
|
|
48
|
+
marginTop: { type: String, default: "" },
|
|
49
|
+
marginBottom: { type: String, default: "" }
|
|
46
50
|
});
|
|
47
51
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
48
52
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-[24px]", pill: "rounded-[36px]" })[props.radius] || "rounded-[24px]");
|
|
@@ -53,4 +57,13 @@ const openIndex = ref(null);
|
|
|
53
57
|
const toggle = (index) => {
|
|
54
58
|
openIndex.value = openIndex.value === index ? null : index;
|
|
55
59
|
};
|
|
60
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
61
|
+
const spacingStyle = computed(() => {
|
|
62
|
+
const s = {};
|
|
63
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
64
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
65
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
66
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
67
|
+
return s;
|
|
68
|
+
});
|
|
56
69
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad, 'overflow-hidden']" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad, 'overflow-hidden']" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
<div class="mb-16 md:mb-20">
|
|
5
5
|
<component :is="titleTag" class="font-black uppercase tracking-tighter leading-none italic" :style="{ fontSize: titleFontSize }">{{ title }}</component>
|
|
@@ -41,11 +41,24 @@ const props = defineProps({
|
|
|
41
41
|
radius: { type: String, default: "rounded" },
|
|
42
42
|
textDirection: { type: String, default: "ltr" },
|
|
43
43
|
contentWidth: { type: String, default: "normal" },
|
|
44
|
-
textSize: { type: String, default: "md" }
|
|
44
|
+
textSize: { type: String, default: "md" },
|
|
45
|
+
paddingTop: { type: String, default: "" },
|
|
46
|
+
paddingBottom: { type: String, default: "" },
|
|
47
|
+
marginTop: { type: String, default: "" },
|
|
48
|
+
marginBottom: { type: String, default: "" }
|
|
45
49
|
});
|
|
46
50
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
47
51
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-[32px]", pill: "rounded-[48px]" })[props.radius] || "rounded-[32px]");
|
|
48
52
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
49
53
|
const titleFontSize = computed(() => ({ sm: "clamp(1rem,1.5vw,1.3rem)", md: "clamp(1.3rem,2vw,1.8rem)", lg: "clamp(2.5rem,7vw,6rem)" })[props.textSize] || "clamp(1.3rem,2vw,1.8rem)");
|
|
50
54
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
55
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
56
|
+
const spacingStyle = computed(() => {
|
|
57
|
+
const s = {};
|
|
58
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
59
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
60
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
61
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
62
|
+
return s;
|
|
63
|
+
});
|
|
51
64
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section class="relative overflow-hidden" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section class="relative overflow-hidden" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- CENTERED -->
|
|
5
5
|
<div v-if="layout === 'centered'" class="px-6 md:px-12 pt-20 pb-16 text-center">
|
|
@@ -134,9 +134,22 @@ const props = defineProps({
|
|
|
134
134
|
radius: { type: String, default: "rounded" },
|
|
135
135
|
textDirection: { type: String, default: "ltr" },
|
|
136
136
|
contentWidth: { type: String, default: "normal" },
|
|
137
|
-
textSize: { type: String, default: "md" }
|
|
137
|
+
textSize: { type: String, default: "md" },
|
|
138
|
+
paddingTop: { type: String, default: "" },
|
|
139
|
+
paddingBottom: { type: String, default: "" },
|
|
140
|
+
marginTop: { type: String, default: "" },
|
|
141
|
+
marginBottom: { type: String, default: "" }
|
|
138
142
|
});
|
|
139
143
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
140
144
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
141
145
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
146
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
147
|
+
const spacingStyle = computed(() => {
|
|
148
|
+
const s = {};
|
|
149
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
150
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
151
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
152
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
153
|
+
return s;
|
|
154
|
+
});
|
|
142
155
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- CENTERED -->
|
|
5
5
|
<div v-if="layout === 'centered'" :class="[containerClass, 'text-center']">
|
|
@@ -66,11 +66,24 @@ const props = defineProps({
|
|
|
66
66
|
radius: { type: String, default: "rounded" },
|
|
67
67
|
textDirection: { type: String, default: "ltr" },
|
|
68
68
|
contentWidth: { type: String, default: "normal" },
|
|
69
|
-
textSize: { type: String, default: "md" }
|
|
69
|
+
textSize: { type: String, default: "md" },
|
|
70
|
+
paddingTop: { type: String, default: "" },
|
|
71
|
+
paddingBottom: { type: String, default: "" },
|
|
72
|
+
marginTop: { type: String, default: "" },
|
|
73
|
+
marginBottom: { type: String, default: "" }
|
|
70
74
|
});
|
|
71
75
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
72
76
|
const cardRound = computed(() => ({ sharp: "rounded-lg", rounded: "rounded-xl", pill: "rounded-full" })[props.radius] || "rounded-xl");
|
|
73
77
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-5xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-5xl mx-auto");
|
|
74
78
|
const titleFontSize = computed(() => ({ sm: "clamp(0.9rem,1.2vw,1.1rem)", md: "clamp(1.1rem,1.8vw,1.6rem)", lg: "clamp(2.2rem,6vw,4.5rem)" })[props.textSize] || "clamp(1.1rem,1.8vw,1.6rem)");
|
|
75
79
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
80
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
81
|
+
const spacingStyle = computed(() => {
|
|
82
|
+
const s = {};
|
|
83
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
84
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
85
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
86
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
87
|
+
return s;
|
|
88
|
+
});
|
|
76
89
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<div v-if="title || description" class="mb-12 text-center max-w-2xl mx-auto">
|
|
@@ -102,7 +102,11 @@ const props = defineProps({
|
|
|
102
102
|
radius: { type: String, default: "rounded" },
|
|
103
103
|
textDirection: { type: String, default: "ltr" },
|
|
104
104
|
contentWidth: { type: String, default: "normal" },
|
|
105
|
-
textSize: { type: String, default: "md" }
|
|
105
|
+
textSize: { type: String, default: "md" },
|
|
106
|
+
paddingTop: { type: String, default: "" },
|
|
107
|
+
paddingBottom: { type: String, default: "" },
|
|
108
|
+
marginTop: { type: String, default: "" },
|
|
109
|
+
marginBottom: { type: String, default: "" }
|
|
106
110
|
});
|
|
107
111
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
108
112
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
@@ -115,4 +119,13 @@ const allFeatures = computed(() => {
|
|
|
115
119
|
return [...set];
|
|
116
120
|
});
|
|
117
121
|
const planHasFeature = (plan, feat) => (plan.features || []).some((f) => (typeof f === "object" ? f.fr || JSON.stringify(f) : f) === (typeof feat === "object" ? feat.fr || JSON.stringify(feat) : feat));
|
|
122
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
123
|
+
const spacingStyle = computed(() => {
|
|
124
|
+
const s = {};
|
|
125
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
126
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
127
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
128
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
129
|
+
return s;
|
|
130
|
+
});
|
|
118
131
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<div v-if="title || description" class="mb-12" :class="['horizontal','cards'].includes(layout) ? 'text-center max-w-2xl mx-auto' : 'max-w-xl'">
|
|
@@ -95,11 +95,24 @@ const props = defineProps({
|
|
|
95
95
|
radius: { type: String, default: "rounded" },
|
|
96
96
|
textDirection: { type: String, default: "ltr" },
|
|
97
97
|
contentWidth: { type: String, default: "normal" },
|
|
98
|
-
textSize: { type: String, default: "md" }
|
|
98
|
+
textSize: { type: String, default: "md" },
|
|
99
|
+
paddingTop: { type: String, default: "" },
|
|
100
|
+
paddingBottom: { type: String, default: "" },
|
|
101
|
+
marginTop: { type: String, default: "" },
|
|
102
|
+
marginBottom: { type: String, default: "" }
|
|
99
103
|
});
|
|
100
104
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
101
105
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
102
106
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
103
107
|
const titleFontSize = computed(() => ({ sm: "clamp(1rem,1.5vw,1.3rem)", md: "clamp(1.3rem,2vw,1.8rem)", lg: "clamp(2.5rem,6vw,5rem)" })[props.textSize] || "clamp(1.3rem,2vw,1.8rem)");
|
|
104
108
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
109
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
110
|
+
const spacingStyle = computed(() => {
|
|
111
|
+
const s = {};
|
|
112
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
113
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
114
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
115
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
116
|
+
return s;
|
|
117
|
+
});
|
|
105
118
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- CENTERED -->
|
|
5
5
|
<div v-if="layout === 'centered'" :class="[containerClass, 'text-center']">
|
|
@@ -75,9 +75,22 @@ const props = defineProps({
|
|
|
75
75
|
radius: { type: String, default: "rounded" },
|
|
76
76
|
textDirection: { type: String, default: "ltr" },
|
|
77
77
|
contentWidth: { type: String, default: "narrow" },
|
|
78
|
-
textSize: { type: String, default: "md" }
|
|
78
|
+
textSize: { type: String, default: "md" },
|
|
79
|
+
paddingTop: { type: String, default: "" },
|
|
80
|
+
paddingBottom: { type: String, default: "" },
|
|
81
|
+
marginTop: { type: String, default: "" },
|
|
82
|
+
marginBottom: { type: String, default: "" }
|
|
79
83
|
});
|
|
80
84
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
81
85
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-5xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-3xl mx-auto");
|
|
82
86
|
const quoteFontSize = computed(() => ({ sm: "clamp(0.95rem,1.2vw,1.1rem)", md: "clamp(1.1rem,1.8vw,1.6rem)", lg: "clamp(2rem,6vw,5rem)" })[props.textSize] || "clamp(1.1rem,1.8vw,1.6rem)");
|
|
87
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
88
|
+
const spacingStyle = computed(() => {
|
|
89
|
+
const s = {};
|
|
90
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
91
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
92
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
93
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
94
|
+
return s;
|
|
95
|
+
});
|
|
83
96
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<!-- Header -->
|
|
@@ -161,7 +161,11 @@ const props = defineProps({
|
|
|
161
161
|
radius: { type: String, default: "rounded" },
|
|
162
162
|
textDirection: { type: String, default: "ltr" },
|
|
163
163
|
contentWidth: { type: String, default: "normal" },
|
|
164
|
-
textSize: { type: String, default: "md" }
|
|
164
|
+
textSize: { type: String, default: "md" },
|
|
165
|
+
paddingTop: { type: String, default: "" },
|
|
166
|
+
paddingBottom: { type: String, default: "" },
|
|
167
|
+
marginTop: { type: String, default: "" },
|
|
168
|
+
marginBottom: { type: String, default: "" }
|
|
165
169
|
});
|
|
166
170
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
167
171
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-2xl", pill: "rounded-3xl" })[props.radius] || "rounded-2xl");
|
|
@@ -174,4 +178,13 @@ const gridCols = computed(() => {
|
|
|
174
178
|
if (n === 2) return "grid-cols-1 sm:grid-cols-2";
|
|
175
179
|
return "grid-cols-1 sm:grid-cols-2 lg:grid-cols-3";
|
|
176
180
|
});
|
|
181
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
182
|
+
const spacingStyle = computed(() => {
|
|
183
|
+
const s = {};
|
|
184
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
185
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
186
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
187
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
188
|
+
return s;
|
|
189
|
+
});
|
|
177
190
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="maxW">
|
|
4
4
|
|
|
5
5
|
<!-- Optional title -->
|
|
@@ -46,7 +46,11 @@ const props = defineProps({
|
|
|
46
46
|
radius: { type: String, default: "rounded" },
|
|
47
47
|
textDirection: { type: String, default: "ltr" },
|
|
48
48
|
contentWidth: { type: String, default: "normal" },
|
|
49
|
-
textSize: { type: String, default: "md" }
|
|
49
|
+
textSize: { type: String, default: "md" },
|
|
50
|
+
paddingTop: { type: String, default: "" },
|
|
51
|
+
paddingBottom: { type: String, default: "" },
|
|
52
|
+
marginTop: { type: String, default: "" },
|
|
53
|
+
marginBottom: { type: String, default: "" }
|
|
50
54
|
});
|
|
51
55
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
52
56
|
const cardRound = computed(() => ({ sharp: "rounded-lg", rounded: "rounded-xl", pill: "rounded-full" })[props.radius] || "rounded-xl");
|
|
@@ -60,6 +64,15 @@ const rendered = computed(() => {
|
|
|
60
64
|
if (typeof props.content === "object") return props.content.fr || "";
|
|
61
65
|
return props.content;
|
|
62
66
|
});
|
|
67
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
68
|
+
const spacingStyle = computed(() => {
|
|
69
|
+
const s = {};
|
|
70
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
71
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
72
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
73
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
74
|
+
return s;
|
|
75
|
+
});
|
|
63
76
|
</script>
|
|
64
77
|
|
|
65
78
|
<style scoped>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<div v-if="title || description" class="mb-12" :class="headerAlign === 'center' ? 'text-center max-w-2xl mx-auto' : 'max-w-xl'">
|
|
@@ -97,11 +97,24 @@ const props = defineProps({
|
|
|
97
97
|
radius: { type: String, default: "rounded" },
|
|
98
98
|
textDirection: { type: String, default: "ltr" },
|
|
99
99
|
contentWidth: { type: String, default: "normal" },
|
|
100
|
-
textSize: { type: String, default: "md" }
|
|
100
|
+
textSize: { type: String, default: "md" },
|
|
101
|
+
paddingTop: { type: String, default: "" },
|
|
102
|
+
paddingBottom: { type: String, default: "" },
|
|
103
|
+
marginTop: { type: String, default: "" },
|
|
104
|
+
marginBottom: { type: String, default: "" }
|
|
101
105
|
});
|
|
102
106
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
103
107
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
104
108
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
105
109
|
const titleFontSize = computed(() => ({ sm: "clamp(1rem,1.5vw,1.3rem)", md: "clamp(1.3rem,2vw,1.8rem)", lg: "clamp(2.5rem,6vw,5rem)" })[props.textSize] || "clamp(1.3rem,2vw,1.8rem)");
|
|
106
110
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
111
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
112
|
+
const spacingStyle = computed(() => {
|
|
113
|
+
const s = {};
|
|
114
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
115
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
116
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
117
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
118
|
+
return s;
|
|
119
|
+
});
|
|
107
120
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
<div :class="[containerClass]">
|
|
4
4
|
|
|
5
5
|
<div v-if="title || description" class="mb-12 max-w-xl">
|
|
@@ -95,11 +95,24 @@ const props = defineProps({
|
|
|
95
95
|
radius: { type: String, default: "rounded" },
|
|
96
96
|
textDirection: { type: String, default: "ltr" },
|
|
97
97
|
contentWidth: { type: String, default: "normal" },
|
|
98
|
-
textSize: { type: String, default: "md" }
|
|
98
|
+
textSize: { type: String, default: "md" },
|
|
99
|
+
paddingTop: { type: String, default: "" },
|
|
100
|
+
paddingBottom: { type: String, default: "" },
|
|
101
|
+
marginTop: { type: String, default: "" },
|
|
102
|
+
marginBottom: { type: String, default: "" }
|
|
99
103
|
});
|
|
100
104
|
const sectionPad = computed(() => ({ compact: "py-8 px-4 md:px-8", normal: "py-14 px-6 md:px-12", spacious: "py-24 px-8 md:px-16" })[props.spacing] || "py-14 px-6 md:px-12");
|
|
101
105
|
const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
|
|
102
106
|
const containerClass = computed(() => ({ narrow: "max-w-3xl mx-auto", normal: "max-w-6xl mx-auto", wide: "max-w-7xl mx-auto", full: "max-w-full" })[props.contentWidth] || "max-w-6xl mx-auto");
|
|
103
107
|
const titleFontSize = computed(() => ({ sm: "clamp(1rem,1.5vw,1.3rem)", md: "clamp(1.3rem,2vw,1.8rem)", lg: "clamp(2.5rem,6vw,5rem)" })[props.textSize] || "clamp(1.3rem,2vw,1.8rem)");
|
|
104
108
|
const bodyClass = computed(() => ({ sm: "text-xs", md: "text-sm", lg: "text-base" })[props.textSize] || "text-sm");
|
|
109
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
110
|
+
const spacingStyle = computed(() => {
|
|
111
|
+
const s = {};
|
|
112
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
113
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
114
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
115
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
116
|
+
return s;
|
|
117
|
+
});
|
|
105
118
|
</script>
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
<template>
|
|
2
|
-
<section :class="[sectionPad]" :dir="textDirection" :style="{ backgroundColor: bgColor, color: textColor }">
|
|
2
|
+
<section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
|
|
3
3
|
|
|
4
4
|
<!-- SPLIT -->
|
|
5
5
|
<div v-if="layout === 'split'" :class="[containerClass, 'flex flex-col md:flex-row gap-12 items-center', reverse ? 'md:flex-row-reverse' : '']">
|
|
@@ -101,4 +101,13 @@ const imageContainerClass = computed(() => {
|
|
|
101
101
|
const styles = { rounded: `aspect-[4/3] ${r}`, square: "aspect-square rounded-xl", circle: "aspect-square rounded-full max-w-[360px] mx-auto", portrait: `aspect-[3/4] ${r} max-w-sm mx-auto` };
|
|
102
102
|
return styles[props.imageStyle] ?? styles.rounded;
|
|
103
103
|
});
|
|
104
|
+
const SM = { none: "0", xs: "8px", sm: "24px", md: "48px", lg: "80px", xl: "128px" };
|
|
105
|
+
const spacingStyle = computed(() => {
|
|
106
|
+
const s = {};
|
|
107
|
+
if (props.paddingTop && SM[props.paddingTop]) s.paddingTop = SM[props.paddingTop];
|
|
108
|
+
if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
|
|
109
|
+
if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
|
|
110
|
+
if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
|
|
111
|
+
return s;
|
|
112
|
+
});
|
|
104
113
|
</script>
|
|
@@ -48,6 +48,15 @@ const textSizeOptions = [
|
|
|
48
48
|
{ value: "md", label: "Normal", icon: "M" },
|
|
49
49
|
{ value: "lg", label: "Large", icon: "L" }
|
|
50
50
|
];
|
|
51
|
+
const paddingOptions = [
|
|
52
|
+
{ value: "", label: "Auto" },
|
|
53
|
+
{ value: "none", label: "None (0)" },
|
|
54
|
+
{ value: "xs", label: "XS (8px)" },
|
|
55
|
+
{ value: "sm", label: "SM (24px)" },
|
|
56
|
+
{ value: "md", label: "MD (48px)" },
|
|
57
|
+
{ value: "lg", label: "LG (80px)" },
|
|
58
|
+
{ value: "xl", label: "XL (128px)" }
|
|
59
|
+
];
|
|
51
60
|
const i18n0 = (fr = "") => ({ fr, ar: "", en: "" });
|
|
52
61
|
export const DEFAULT_SECTIONS = {
|
|
53
62
|
HeroSection: {
|
|
@@ -72,7 +81,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
72
81
|
radius: "rounded",
|
|
73
82
|
textDirection: "ltr",
|
|
74
83
|
contentWidth: "normal",
|
|
75
|
-
textSize: "md"
|
|
84
|
+
textSize: "md",
|
|
85
|
+
paddingTop: "",
|
|
86
|
+
paddingBottom: "",
|
|
87
|
+
marginTop: "",
|
|
88
|
+
marginBottom: ""
|
|
76
89
|
},
|
|
77
90
|
groups: [
|
|
78
91
|
{ key: "design", label: "Design" },
|
|
@@ -105,7 +118,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
105
118
|
textDirection: { type: "cards", label: "Direction", group: "design", options: directionOptions },
|
|
106
119
|
contentWidth: { type: "cards", label: "Content Width", group: "design", options: contentWidthOptions },
|
|
107
120
|
textSize: { type: "cards", label: "Text Size", group: "design", options: textSizeOptions },
|
|
108
|
-
animation: { type: "cards", label: "Animation", group: "animation", options: animationOptions }
|
|
121
|
+
animation: { type: "cards", label: "Animation", group: "animation", options: animationOptions },
|
|
122
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
123
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
124
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
125
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
109
126
|
}
|
|
110
127
|
},
|
|
111
128
|
TextVisual: {
|
|
@@ -130,7 +147,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
130
147
|
radius: "rounded",
|
|
131
148
|
textDirection: "ltr",
|
|
132
149
|
contentWidth: "normal",
|
|
133
|
-
textSize: "md"
|
|
150
|
+
textSize: "md",
|
|
151
|
+
paddingTop: "",
|
|
152
|
+
paddingBottom: "",
|
|
153
|
+
marginTop: "",
|
|
154
|
+
marginBottom: ""
|
|
134
155
|
},
|
|
135
156
|
fields: {
|
|
136
157
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -165,7 +186,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
165
186
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
166
187
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
167
188
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
168
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
189
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
190
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
191
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
192
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
193
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
169
194
|
}
|
|
170
195
|
},
|
|
171
196
|
ServiceGrid: {
|
|
@@ -187,7 +212,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
187
212
|
radius: "rounded",
|
|
188
213
|
textDirection: "ltr",
|
|
189
214
|
contentWidth: "normal",
|
|
190
|
-
textSize: "md"
|
|
215
|
+
textSize: "md",
|
|
216
|
+
paddingTop: "",
|
|
217
|
+
paddingBottom: "",
|
|
218
|
+
marginTop: "",
|
|
219
|
+
marginBottom: ""
|
|
191
220
|
},
|
|
192
221
|
fields: {
|
|
193
222
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -215,7 +244,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
215
244
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
216
245
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
217
246
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
218
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
247
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
248
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
249
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
250
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
251
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
219
252
|
}
|
|
220
253
|
},
|
|
221
254
|
Features: {
|
|
@@ -230,7 +263,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
230
263
|
radius: "rounded",
|
|
231
264
|
textDirection: "ltr",
|
|
232
265
|
contentWidth: "normal",
|
|
233
|
-
textSize: "md"
|
|
266
|
+
textSize: "md",
|
|
267
|
+
paddingTop: "",
|
|
268
|
+
paddingBottom: "",
|
|
269
|
+
marginTop: "",
|
|
270
|
+
marginBottom: ""
|
|
234
271
|
},
|
|
235
272
|
fields: {
|
|
236
273
|
title: { type: "text", label: "Section Title", i18n: true },
|
|
@@ -244,7 +281,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
244
281
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
245
282
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
246
283
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
247
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
284
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
285
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
286
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
287
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
288
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
248
289
|
}
|
|
249
290
|
},
|
|
250
291
|
FAQ: {
|
|
@@ -259,7 +300,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
259
300
|
radius: "rounded",
|
|
260
301
|
textDirection: "ltr",
|
|
261
302
|
contentWidth: "narrow",
|
|
262
|
-
textSize: "md"
|
|
303
|
+
textSize: "md",
|
|
304
|
+
paddingTop: "",
|
|
305
|
+
paddingBottom: "",
|
|
306
|
+
marginTop: "",
|
|
307
|
+
marginBottom: ""
|
|
263
308
|
},
|
|
264
309
|
fields: {
|
|
265
310
|
title: { type: "text", label: "Title", i18n: true },
|
|
@@ -273,7 +318,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
273
318
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
274
319
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
275
320
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
276
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
321
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
322
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
323
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
324
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
325
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
277
326
|
}
|
|
278
327
|
},
|
|
279
328
|
Process: {
|
|
@@ -292,7 +341,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
292
341
|
radius: "rounded",
|
|
293
342
|
textDirection: "ltr",
|
|
294
343
|
contentWidth: "normal",
|
|
295
|
-
textSize: "md"
|
|
344
|
+
textSize: "md",
|
|
345
|
+
paddingTop: "",
|
|
346
|
+
paddingBottom: "",
|
|
347
|
+
marginTop: "",
|
|
348
|
+
marginBottom: ""
|
|
296
349
|
},
|
|
297
350
|
fields: {
|
|
298
351
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -317,7 +370,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
317
370
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
318
371
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
319
372
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
320
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
373
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
374
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
375
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
376
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
377
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
321
378
|
}
|
|
322
379
|
},
|
|
323
380
|
Testimonials: {
|
|
@@ -336,7 +393,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
336
393
|
radius: "rounded",
|
|
337
394
|
textDirection: "ltr",
|
|
338
395
|
contentWidth: "normal",
|
|
339
|
-
textSize: "md"
|
|
396
|
+
textSize: "md",
|
|
397
|
+
paddingTop: "",
|
|
398
|
+
paddingBottom: "",
|
|
399
|
+
marginTop: "",
|
|
400
|
+
marginBottom: ""
|
|
340
401
|
},
|
|
341
402
|
fields: {
|
|
342
403
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -363,7 +424,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
363
424
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
364
425
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
365
426
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
366
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
427
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
428
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
429
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
430
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
431
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
367
432
|
}
|
|
368
433
|
},
|
|
369
434
|
Pricing: {
|
|
@@ -382,7 +447,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
382
447
|
radius: "rounded",
|
|
383
448
|
textDirection: "ltr",
|
|
384
449
|
contentWidth: "normal",
|
|
385
|
-
textSize: "md"
|
|
450
|
+
textSize: "md",
|
|
451
|
+
paddingTop: "",
|
|
452
|
+
paddingBottom: "",
|
|
453
|
+
marginTop: "",
|
|
454
|
+
marginBottom: ""
|
|
386
455
|
},
|
|
387
456
|
fields: {
|
|
388
457
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -409,7 +478,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
409
478
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
410
479
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
411
480
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
412
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
481
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
482
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
483
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
484
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
485
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
413
486
|
}
|
|
414
487
|
},
|
|
415
488
|
ContactForm: {
|
|
@@ -427,7 +500,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
427
500
|
radius: "rounded",
|
|
428
501
|
textDirection: "ltr",
|
|
429
502
|
contentWidth: "normal",
|
|
430
|
-
textSize: "md"
|
|
503
|
+
textSize: "md",
|
|
504
|
+
paddingTop: "",
|
|
505
|
+
paddingBottom: "",
|
|
506
|
+
marginTop: "",
|
|
507
|
+
marginBottom: ""
|
|
431
508
|
},
|
|
432
509
|
fields: {
|
|
433
510
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -445,7 +522,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
445
522
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
446
523
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
447
524
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
448
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
525
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
526
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
527
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
528
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
529
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
449
530
|
}
|
|
450
531
|
},
|
|
451
532
|
// ── Blog sections ─────────────────────────────────────────────────────────
|
|
@@ -470,7 +551,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
470
551
|
textDirection: "ltr",
|
|
471
552
|
contentWidth: "narrow",
|
|
472
553
|
textSize: "md",
|
|
473
|
-
textAlign: "center"
|
|
554
|
+
textAlign: "center",
|
|
555
|
+
paddingTop: "",
|
|
556
|
+
paddingBottom: "",
|
|
557
|
+
marginTop: "",
|
|
558
|
+
marginBottom: ""
|
|
474
559
|
},
|
|
475
560
|
fields: {
|
|
476
561
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -498,7 +583,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
498
583
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
499
584
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
500
585
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
501
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
586
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
587
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
588
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
589
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
590
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
502
591
|
}
|
|
503
592
|
},
|
|
504
593
|
RichText: {
|
|
@@ -516,7 +605,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
516
605
|
radius: "rounded",
|
|
517
606
|
textDirection: "ltr",
|
|
518
607
|
contentWidth: "normal",
|
|
519
|
-
textSize: "md"
|
|
608
|
+
textSize: "md",
|
|
609
|
+
paddingTop: "",
|
|
610
|
+
paddingBottom: "",
|
|
611
|
+
marginTop: "",
|
|
612
|
+
marginBottom: ""
|
|
520
613
|
},
|
|
521
614
|
fields: {
|
|
522
615
|
layout: { type: "cards", label: "Width", options: [
|
|
@@ -536,7 +629,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
536
629
|
spacing: { type: "cards", label: "Espacement", options: spacingOptions },
|
|
537
630
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
538
631
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
539
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
632
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
633
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
634
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
635
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
636
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
540
637
|
}
|
|
541
638
|
},
|
|
542
639
|
CallToAction: {
|
|
@@ -557,7 +654,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
557
654
|
radius: "rounded",
|
|
558
655
|
textDirection: "ltr",
|
|
559
656
|
contentWidth: "normal",
|
|
560
|
-
textSize: "md"
|
|
657
|
+
textSize: "md",
|
|
658
|
+
paddingTop: "",
|
|
659
|
+
paddingBottom: "",
|
|
660
|
+
marginTop: "",
|
|
661
|
+
marginBottom: ""
|
|
561
662
|
},
|
|
562
663
|
fields: {
|
|
563
664
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -578,7 +679,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
578
679
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
579
680
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
580
681
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
581
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
682
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
683
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
684
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
685
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
686
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
582
687
|
}
|
|
583
688
|
},
|
|
584
689
|
Quote: {
|
|
@@ -595,7 +700,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
595
700
|
spacing: "normal",
|
|
596
701
|
textDirection: "ltr",
|
|
597
702
|
contentWidth: "narrow",
|
|
598
|
-
textSize: "md"
|
|
703
|
+
textSize: "md",
|
|
704
|
+
paddingTop: "",
|
|
705
|
+
paddingBottom: "",
|
|
706
|
+
marginTop: "",
|
|
707
|
+
marginBottom: ""
|
|
599
708
|
},
|
|
600
709
|
fields: {
|
|
601
710
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -612,7 +721,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
612
721
|
spacing: { type: "cards", label: "Espacement", options: spacingOptions },
|
|
613
722
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
614
723
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
615
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
724
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
725
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
726
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
727
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
728
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
616
729
|
}
|
|
617
730
|
},
|
|
618
731
|
DataTable: {
|
|
@@ -650,7 +763,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
650
763
|
radius: "rounded",
|
|
651
764
|
textDirection: "ltr",
|
|
652
765
|
contentWidth: "normal",
|
|
653
|
-
textSize: "md"
|
|
766
|
+
textSize: "md",
|
|
767
|
+
paddingTop: "",
|
|
768
|
+
paddingBottom: "",
|
|
769
|
+
marginTop: "",
|
|
770
|
+
marginBottom: ""
|
|
654
771
|
},
|
|
655
772
|
fields: {
|
|
656
773
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -692,7 +809,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
692
809
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
693
810
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
694
811
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
695
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
812
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
813
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
814
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
815
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
816
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
696
817
|
}
|
|
697
818
|
},
|
|
698
819
|
Comparison: {
|
|
@@ -718,7 +839,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
718
839
|
radius: "rounded",
|
|
719
840
|
textDirection: "ltr",
|
|
720
841
|
contentWidth: "normal",
|
|
721
|
-
textSize: "md"
|
|
842
|
+
textSize: "md",
|
|
843
|
+
paddingTop: "",
|
|
844
|
+
paddingBottom: "",
|
|
845
|
+
marginTop: "",
|
|
846
|
+
marginBottom: ""
|
|
722
847
|
},
|
|
723
848
|
fields: {
|
|
724
849
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -753,7 +878,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
753
878
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
754
879
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
755
880
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
756
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
881
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
882
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
883
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
884
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
885
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
757
886
|
}
|
|
758
887
|
},
|
|
759
888
|
RelatedPages: {
|
|
@@ -775,7 +904,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
775
904
|
radius: "rounded",
|
|
776
905
|
textDirection: "ltr",
|
|
777
906
|
contentWidth: "normal",
|
|
778
|
-
textSize: "md"
|
|
907
|
+
textSize: "md",
|
|
908
|
+
paddingTop: "",
|
|
909
|
+
paddingBottom: "",
|
|
910
|
+
marginTop: "",
|
|
911
|
+
marginBottom: ""
|
|
779
912
|
},
|
|
780
913
|
fields: {
|
|
781
914
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -800,7 +933,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
800
933
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
801
934
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
802
935
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
803
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
936
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
937
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
938
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
939
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
940
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
804
941
|
}
|
|
805
942
|
},
|
|
806
943
|
Newsletter: {
|
|
@@ -820,7 +957,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
820
957
|
radius: "rounded",
|
|
821
958
|
textDirection: "ltr",
|
|
822
959
|
contentWidth: "normal",
|
|
823
|
-
textSize: "md"
|
|
960
|
+
textSize: "md",
|
|
961
|
+
paddingTop: "",
|
|
962
|
+
paddingBottom: "",
|
|
963
|
+
marginTop: "",
|
|
964
|
+
marginBottom: ""
|
|
824
965
|
},
|
|
825
966
|
fields: {
|
|
826
967
|
layout: { type: "cards", label: "Layout", options: [
|
|
@@ -840,7 +981,11 @@ export const DEFAULT_SECTIONS = {
|
|
|
840
981
|
radius: { type: "cards", label: "Arrondis", options: radiusOptions },
|
|
841
982
|
textDirection: { type: "cards", label: "Direction", options: directionOptions },
|
|
842
983
|
contentWidth: { type: "cards", label: "Content Width", options: contentWidthOptions },
|
|
843
|
-
textSize: { type: "cards", label: "Text Size", options: textSizeOptions }
|
|
984
|
+
textSize: { type: "cards", label: "Text Size", options: textSizeOptions },
|
|
985
|
+
paddingTop: { type: "select", label: "Padding Top", options: paddingOptions },
|
|
986
|
+
paddingBottom: { type: "select", label: "Padding Bottom", options: paddingOptions },
|
|
987
|
+
marginTop: { type: "select", label: "Margin Top", options: paddingOptions },
|
|
988
|
+
marginBottom: { type: "select", label: "Margin Bottom", options: paddingOptions }
|
|
844
989
|
}
|
|
845
990
|
}
|
|
846
991
|
};
|
|
@@ -480,7 +480,7 @@ const savePage = async () => {
|
|
|
480
480
|
<!-- ── Top Bar ── -->
|
|
481
481
|
<header class="h-12 bg-white/80 backdrop-blur-md border-b px-6 flex items-center justify-between z-[60] shrink-0">
|
|
482
482
|
<div class="flex items-center gap-4">
|
|
483
|
-
<NuxtLink :to="basePath" class="text-gray-400 hover:text-black transition-colors">←</NuxtLink>
|
|
483
|
+
<NuxtLink :to="page?.type ? `${basePath}/pages/${page.type}` : basePath" class="text-gray-400 hover:text-black transition-colors">←</NuxtLink>
|
|
484
484
|
<div class="flex gap-1 bg-gray-100 p-1 rounded-md">
|
|
485
485
|
<button @click="isLeftSidebarOpen = !isLeftSidebarOpen" :class="['p-1.5 rounded transition-all', isLeftSidebarOpen ? 'bg-white shadow-sm text-[#3d35ff]' : 'text-gray-400']" title="Structure">
|
|
486
486
|
<svg class="w-3 h-3" fill="none" stroke="currentColor" viewBox="0 0 24 24"><path stroke-linecap="round" stroke-linejoin="round" stroke-width="2.5" d="M4 6h16M4 12h10M4 18h16"/></svg>
|