cinqcinqdev-seo 0.1.71 → 0.1.73

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/README.md +39 -2
  2. package/dist/module.json +1 -1
  3. package/dist/runtime/assets/admin-tw.css +1 -1
  4. package/dist/runtime/components/admin-cms/DynamicRenderer.vue +16 -2
  5. package/dist/runtime/components/sections/{BlogHero.vue → cinqcinq/BlogHero.vue} +35 -3
  6. package/dist/runtime/components/sections/{CallToAction.vue → cinqcinq/CallToAction.vue} +35 -3
  7. package/dist/runtime/components/sections/{ContactForm.vue → cinqcinq/ContactForm.vue} +34 -2
  8. package/dist/runtime/components/sections/{FAQ.vue → cinqcinq/FAQ.vue} +35 -3
  9. package/dist/runtime/components/sections/{Features.vue → cinqcinq/Features.vue} +35 -3
  10. package/dist/runtime/components/sections/{HeroSection.vue → cinqcinq/HeroSection.vue} +11 -0
  11. package/dist/runtime/components/sections/{Newsletter.vue → cinqcinq/Newsletter.vue} +35 -3
  12. package/dist/runtime/components/sections/{Pricing.vue → cinqcinq/Pricing.vue} +35 -3
  13. package/dist/runtime/components/sections/{Process.vue → cinqcinq/Process.vue} +35 -3
  14. package/dist/runtime/components/sections/{Quote.vue → cinqcinq/Quote.vue} +35 -3
  15. package/dist/runtime/components/sections/{RichText.vue → cinqcinq/RichText.vue} +32 -4
  16. package/dist/runtime/components/sections/{ServiceGrid.vue → cinqcinq/ServiceGrid.vue} +35 -3
  17. package/dist/runtime/components/sections/{Testimonials.vue → cinqcinq/Testimonials.vue} +35 -3
  18. package/dist/runtime/components/sections/{TextVisual.vue → cinqcinq/TextVisual.vue} +39 -3
  19. package/dist/runtime/components/sections/swiss-style/BlogHero.d.vue.ts +3 -0
  20. package/dist/runtime/components/sections/swiss-style/BlogHero.vue +146 -0
  21. package/dist/runtime/components/sections/swiss-style/BlogHero.vue.d.ts +3 -0
  22. package/dist/runtime/components/sections/swiss-style/CallToAction.d.vue.ts +3 -0
  23. package/dist/runtime/components/sections/swiss-style/CallToAction.vue +138 -0
  24. package/dist/runtime/components/sections/swiss-style/CallToAction.vue.d.ts +3 -0
  25. package/dist/runtime/components/sections/swiss-style/Comparison.d.vue.ts +3 -0
  26. package/dist/runtime/components/sections/swiss-style/Comparison.vue +280 -0
  27. package/dist/runtime/components/sections/swiss-style/Comparison.vue.d.ts +3 -0
  28. package/dist/runtime/components/sections/swiss-style/ContactForm.d.vue.ts +3 -0
  29. package/dist/runtime/components/sections/swiss-style/ContactForm.vue +173 -0
  30. package/dist/runtime/components/sections/swiss-style/ContactForm.vue.d.ts +3 -0
  31. package/dist/runtime/components/sections/swiss-style/DataTable.d.vue.ts +3 -0
  32. package/dist/runtime/components/sections/swiss-style/DataTable.vue +245 -0
  33. package/dist/runtime/components/sections/swiss-style/DataTable.vue.d.ts +3 -0
  34. package/dist/runtime/components/sections/swiss-style/FAQ.d.vue.ts +3 -0
  35. package/dist/runtime/components/sections/swiss-style/FAQ.vue +107 -0
  36. package/dist/runtime/components/sections/swiss-style/FAQ.vue.d.ts +3 -0
  37. package/dist/runtime/components/sections/swiss-style/Features.d.vue.ts +3 -0
  38. package/dist/runtime/components/sections/swiss-style/Features.vue +103 -0
  39. package/dist/runtime/components/sections/swiss-style/Features.vue.d.ts +3 -0
  40. package/dist/runtime/components/sections/swiss-style/HeroFan.d.vue.ts +3 -0
  41. package/dist/runtime/components/sections/swiss-style/HeroFan.vue +108 -0
  42. package/dist/runtime/components/sections/swiss-style/HeroFan.vue.d.ts +3 -0
  43. package/dist/runtime/components/sections/swiss-style/HeroSection.d.vue.ts +3 -0
  44. package/dist/runtime/components/sections/swiss-style/HeroSection.vue +190 -0
  45. package/dist/runtime/components/sections/swiss-style/HeroSection.vue.d.ts +3 -0
  46. package/dist/runtime/components/sections/swiss-style/HeroSlider.d.vue.ts +3 -0
  47. package/dist/runtime/components/sections/swiss-style/HeroSlider.vue +138 -0
  48. package/dist/runtime/components/sections/swiss-style/HeroSlider.vue.d.ts +3 -0
  49. package/dist/runtime/components/sections/swiss-style/Newsletter.d.vue.ts +3 -0
  50. package/dist/runtime/components/sections/swiss-style/Newsletter.vue +125 -0
  51. package/dist/runtime/components/sections/swiss-style/Newsletter.vue.d.ts +3 -0
  52. package/dist/runtime/components/sections/swiss-style/Pricing.d.vue.ts +3 -0
  53. package/dist/runtime/components/sections/swiss-style/Pricing.vue +148 -0
  54. package/dist/runtime/components/sections/swiss-style/Pricing.vue.d.ts +3 -0
  55. package/dist/runtime/components/sections/swiss-style/Process.d.vue.ts +3 -0
  56. package/dist/runtime/components/sections/swiss-style/Process.vue +124 -0
  57. package/dist/runtime/components/sections/swiss-style/Process.vue.d.ts +3 -0
  58. package/dist/runtime/components/sections/swiss-style/Quote.d.vue.ts +3 -0
  59. package/dist/runtime/components/sections/swiss-style/Quote.vue +130 -0
  60. package/dist/runtime/components/sections/swiss-style/Quote.vue.d.ts +3 -0
  61. package/dist/runtime/components/sections/swiss-style/RelatedPages.d.vue.ts +3 -0
  62. package/dist/runtime/components/sections/swiss-style/RelatedPages.vue +212 -0
  63. package/dist/runtime/components/sections/swiss-style/RelatedPages.vue.d.ts +3 -0
  64. package/dist/runtime/components/sections/swiss-style/RichText.d.vue.ts +3 -0
  65. package/dist/runtime/components/sections/swiss-style/RichText.vue +100 -0
  66. package/dist/runtime/components/sections/swiss-style/RichText.vue.d.ts +3 -0
  67. package/dist/runtime/components/sections/swiss-style/ServiceGrid.d.vue.ts +3 -0
  68. package/dist/runtime/components/sections/swiss-style/ServiceGrid.vue +121 -0
  69. package/dist/runtime/components/sections/swiss-style/ServiceGrid.vue.d.ts +3 -0
  70. package/dist/runtime/components/sections/swiss-style/Testimonials.d.vue.ts +3 -0
  71. package/dist/runtime/components/sections/swiss-style/Testimonials.vue +126 -0
  72. package/dist/runtime/components/sections/swiss-style/Testimonials.vue.d.ts +3 -0
  73. package/dist/runtime/components/sections/swiss-style/TextVisual.d.vue.ts +3 -0
  74. package/dist/runtime/components/sections/swiss-style/TextVisual.vue +146 -0
  75. package/dist/runtime/components/sections/swiss-style/TextVisual.vue.d.ts +3 -0
  76. package/dist/runtime/composables/useAdminSections.js +75 -37
  77. package/dist/runtime/composables/useAdminSettings.d.ts +1 -0
  78. package/dist/runtime/pages/admin/editor/[id].vue +15 -1
  79. package/dist/runtime/pages/admin/setup.vue +77 -2
  80. package/package.json +1 -1
  81. /package/dist/runtime/components/sections/{BlogHero.d.vue.ts → cinqcinq/BlogHero.d.vue.ts} +0 -0
  82. /package/dist/runtime/components/sections/{BlogHero.vue.d.ts → cinqcinq/BlogHero.vue.d.ts} +0 -0
  83. /package/dist/runtime/components/sections/{CallToAction.d.vue.ts → cinqcinq/CallToAction.d.vue.ts} +0 -0
  84. /package/dist/runtime/components/sections/{CallToAction.vue.d.ts → cinqcinq/CallToAction.vue.d.ts} +0 -0
  85. /package/dist/runtime/components/sections/{Comparison.d.vue.ts → cinqcinq/Comparison.d.vue.ts} +0 -0
  86. /package/dist/runtime/components/sections/{Comparison.vue → cinqcinq/Comparison.vue} +0 -0
  87. /package/dist/runtime/components/sections/{Comparison.vue.d.ts → cinqcinq/Comparison.vue.d.ts} +0 -0
  88. /package/dist/runtime/components/sections/{ContactForm.d.vue.ts → cinqcinq/ContactForm.d.vue.ts} +0 -0
  89. /package/dist/runtime/components/sections/{ContactForm.vue.d.ts → cinqcinq/ContactForm.vue.d.ts} +0 -0
  90. /package/dist/runtime/components/sections/{DataTable.d.vue.ts → cinqcinq/DataTable.d.vue.ts} +0 -0
  91. /package/dist/runtime/components/sections/{DataTable.vue → cinqcinq/DataTable.vue} +0 -0
  92. /package/dist/runtime/components/sections/{DataTable.vue.d.ts → cinqcinq/DataTable.vue.d.ts} +0 -0
  93. /package/dist/runtime/components/sections/{FAQ.d.vue.ts → cinqcinq/FAQ.d.vue.ts} +0 -0
  94. /package/dist/runtime/components/sections/{FAQ.vue.d.ts → cinqcinq/FAQ.vue.d.ts} +0 -0
  95. /package/dist/runtime/components/sections/{Features.d.vue.ts → cinqcinq/Features.d.vue.ts} +0 -0
  96. /package/dist/runtime/components/sections/{Features.vue.d.ts → cinqcinq/Features.vue.d.ts} +0 -0
  97. /package/dist/runtime/components/sections/{HeroFan.d.vue.ts → cinqcinq/HeroFan.d.vue.ts} +0 -0
  98. /package/dist/runtime/components/sections/{HeroFan.vue → cinqcinq/HeroFan.vue} +0 -0
  99. /package/dist/runtime/components/sections/{HeroFan.vue.d.ts → cinqcinq/HeroFan.vue.d.ts} +0 -0
  100. /package/dist/runtime/components/sections/{HeroSection.d.vue.ts → cinqcinq/HeroSection.d.vue.ts} +0 -0
  101. /package/dist/runtime/components/sections/{HeroSection.vue.d.ts → cinqcinq/HeroSection.vue.d.ts} +0 -0
  102. /package/dist/runtime/components/sections/{HeroSlider.d.vue.ts → cinqcinq/HeroSlider.d.vue.ts} +0 -0
  103. /package/dist/runtime/components/sections/{HeroSlider.vue → cinqcinq/HeroSlider.vue} +0 -0
  104. /package/dist/runtime/components/sections/{HeroSlider.vue.d.ts → cinqcinq/HeroSlider.vue.d.ts} +0 -0
  105. /package/dist/runtime/components/sections/{Newsletter.d.vue.ts → cinqcinq/Newsletter.d.vue.ts} +0 -0
  106. /package/dist/runtime/components/sections/{Newsletter.vue.d.ts → cinqcinq/Newsletter.vue.d.ts} +0 -0
  107. /package/dist/runtime/components/sections/{Pricing.d.vue.ts → cinqcinq/Pricing.d.vue.ts} +0 -0
  108. /package/dist/runtime/components/sections/{Pricing.vue.d.ts → cinqcinq/Pricing.vue.d.ts} +0 -0
  109. /package/dist/runtime/components/sections/{Process.d.vue.ts → cinqcinq/Process.d.vue.ts} +0 -0
  110. /package/dist/runtime/components/sections/{Process.vue.d.ts → cinqcinq/Process.vue.d.ts} +0 -0
  111. /package/dist/runtime/components/sections/{Quote.d.vue.ts → cinqcinq/Quote.d.vue.ts} +0 -0
  112. /package/dist/runtime/components/sections/{Quote.vue.d.ts → cinqcinq/Quote.vue.d.ts} +0 -0
  113. /package/dist/runtime/components/sections/{RelatedPages.d.vue.ts → cinqcinq/RelatedPages.d.vue.ts} +0 -0
  114. /package/dist/runtime/components/sections/{RelatedPages.vue → cinqcinq/RelatedPages.vue} +0 -0
  115. /package/dist/runtime/components/sections/{RelatedPages.vue.d.ts → cinqcinq/RelatedPages.vue.d.ts} +0 -0
  116. /package/dist/runtime/components/sections/{RichText.d.vue.ts → cinqcinq/RichText.d.vue.ts} +0 -0
  117. /package/dist/runtime/components/sections/{RichText.vue.d.ts → cinqcinq/RichText.vue.d.ts} +0 -0
  118. /package/dist/runtime/components/sections/{ServiceGrid.d.vue.ts → cinqcinq/ServiceGrid.d.vue.ts} +0 -0
  119. /package/dist/runtime/components/sections/{ServiceGrid.vue.d.ts → cinqcinq/ServiceGrid.vue.d.ts} +0 -0
  120. /package/dist/runtime/components/sections/{Testimonials.d.vue.ts → cinqcinq/Testimonials.d.vue.ts} +0 -0
  121. /package/dist/runtime/components/sections/{Testimonials.vue.d.ts → cinqcinq/Testimonials.vue.d.ts} +0 -0
  122. /package/dist/runtime/components/sections/{TextVisual.d.vue.ts → cinqcinq/TextVisual.d.vue.ts} +0 -0
  123. /package/dist/runtime/components/sections/{TextVisual.vue.d.ts → cinqcinq/TextVisual.vue.d.ts} +0 -0
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad, 'overflow-hidden']" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, 'overflow-hidden', isVisible ? 'sec-in' : 'sec-out']" :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>
@@ -29,7 +29,7 @@ const ca = (c, h) => {
29
29
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
30
30
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
31
31
  };
32
- import { computed } from "vue";
32
+ import { ref, computed, onMounted } from "vue";
33
33
  const props = defineProps({
34
34
  title: { type: String, default: "Why choose us?" },
35
35
  titleTag: { type: String, default: "h2" },
@@ -45,7 +45,25 @@ const props = defineProps({
45
45
  paddingTop: { type: String, default: "" },
46
46
  paddingBottom: { type: String, default: "" },
47
47
  marginTop: { type: String, default: "" },
48
- marginBottom: { type: String, default: "" }
48
+ marginBottom: { type: String, default: "" },
49
+ paddingX: { type: String, default: "" }
50
+ });
51
+ const sectionEl = ref(null);
52
+ const isVisible = ref(false);
53
+ onMounted(() => {
54
+ const obs = new IntersectionObserver(
55
+ ([e]) => {
56
+ if (e.isIntersecting) {
57
+ isVisible.value = true;
58
+ obs.disconnect();
59
+ }
60
+ },
61
+ { threshold: 0.06 }
62
+ );
63
+ if (sectionEl.value) obs.observe(sectionEl.value);
64
+ setTimeout(() => {
65
+ if (!isVisible.value) isVisible.value = true;
66
+ }, 300);
49
67
  });
50
68
  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");
51
69
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-[32px]", pill: "rounded-[48px]" })[props.radius] || "rounded-[32px]");
@@ -59,6 +77,20 @@ const spacingStyle = computed(() => {
59
77
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
60
78
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
61
79
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
80
+ if (props.paddingX && SM[props.paddingX]) {
81
+ const v = SM[props.paddingX];
82
+ if (v.startsWith("-")) {
83
+ s.marginLeft = v;
84
+ s.marginRight = v;
85
+ } else {
86
+ s.paddingLeft = v;
87
+ s.paddingRight = v;
88
+ }
89
+ }
62
90
  return s;
63
91
  });
64
92
  </script>
93
+
94
+ <style scoped>
95
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
96
+ </style>
@@ -193,6 +193,7 @@ const props = defineProps({
193
193
  paddingBottom: { type: String, default: "" },
194
194
  marginTop: { type: String, default: "" },
195
195
  marginBottom: { type: String, default: "" },
196
+ paddingX: { type: String, default: "" },
196
197
  overlay: { type: String, default: "auto" },
197
198
  overlayDirection: { type: String, default: "to top" },
198
199
  overlayStrength: { type: String, default: "medium" },
@@ -250,6 +251,16 @@ const spacingStyle = computed(() => {
250
251
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
251
252
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
252
253
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
254
+ if (props.paddingX && SM[props.paddingX]) {
255
+ const v = SM[props.paddingX];
256
+ if (v.startsWith("-")) {
257
+ s.marginLeft = v;
258
+ s.marginRight = v;
259
+ } else {
260
+ s.paddingLeft = v;
261
+ s.paddingRight = v;
262
+ }
263
+ }
253
264
  return s;
254
265
  });
255
266
  </script>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
3
3
 
4
4
  <!-- CENTERED -->
5
5
  <div v-if="layout === 'centered'" :class="[containerClass, 'text-center']">
@@ -51,7 +51,7 @@ const ca = (c, h) => {
51
51
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
52
52
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
53
53
  };
54
- import { computed } from "vue";
54
+ import { ref, computed, onMounted } from "vue";
55
55
  const props = defineProps({
56
56
  layout: { type: String, default: "centered" },
57
57
  badge: { type: String, default: "" },
@@ -70,7 +70,25 @@ const props = defineProps({
70
70
  paddingTop: { type: String, default: "" },
71
71
  paddingBottom: { type: String, default: "" },
72
72
  marginTop: { type: String, default: "" },
73
- marginBottom: { type: String, default: "" }
73
+ marginBottom: { type: String, default: "" },
74
+ paddingX: { type: String, default: "" }
75
+ });
76
+ const sectionEl = ref(null);
77
+ const isVisible = ref(false);
78
+ onMounted(() => {
79
+ const obs = new IntersectionObserver(
80
+ ([e]) => {
81
+ if (e.isIntersecting) {
82
+ isVisible.value = true;
83
+ obs.disconnect();
84
+ }
85
+ },
86
+ { threshold: 0.06 }
87
+ );
88
+ if (sectionEl.value) obs.observe(sectionEl.value);
89
+ setTimeout(() => {
90
+ if (!isVisible.value) isVisible.value = true;
91
+ }, 300);
74
92
  });
75
93
  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");
76
94
  const cardRound = computed(() => ({ sharp: "rounded-lg", rounded: "rounded-xl", pill: "rounded-full" })[props.radius] || "rounded-xl");
@@ -84,6 +102,20 @@ const spacingStyle = computed(() => {
84
102
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
85
103
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
86
104
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
105
+ if (props.paddingX && SM[props.paddingX]) {
106
+ const v = SM[props.paddingX];
107
+ if (v.startsWith("-")) {
108
+ s.marginLeft = v;
109
+ s.marginRight = v;
110
+ } else {
111
+ s.paddingLeft = v;
112
+ s.paddingRight = v;
113
+ }
114
+ }
87
115
  return s;
88
116
  });
89
117
  </script>
118
+
119
+ <style scoped>
120
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
121
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :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">
@@ -88,7 +88,7 @@ const ca = (c, h) => {
88
88
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
89
89
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
90
90
  };
91
- import { computed } from "vue";
91
+ import { ref, computed, onMounted } from "vue";
92
92
  const props = defineProps({
93
93
  layout: { type: String, default: "cards" },
94
94
  title: { type: String, default: "Our Pricing" },
@@ -106,7 +106,25 @@ const props = defineProps({
106
106
  paddingTop: { type: String, default: "" },
107
107
  paddingBottom: { type: String, default: "" },
108
108
  marginTop: { type: String, default: "" },
109
- marginBottom: { type: String, default: "" }
109
+ marginBottom: { type: String, default: "" },
110
+ paddingX: { type: String, default: "" }
111
+ });
112
+ const sectionEl = ref(null);
113
+ const isVisible = ref(false);
114
+ onMounted(() => {
115
+ const obs = new IntersectionObserver(
116
+ ([e]) => {
117
+ if (e.isIntersecting) {
118
+ isVisible.value = true;
119
+ obs.disconnect();
120
+ }
121
+ },
122
+ { threshold: 0.06 }
123
+ );
124
+ if (sectionEl.value) obs.observe(sectionEl.value);
125
+ setTimeout(() => {
126
+ if (!isVisible.value) isVisible.value = true;
127
+ }, 300);
110
128
  });
111
129
  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");
112
130
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
@@ -126,6 +144,20 @@ const spacingStyle = computed(() => {
126
144
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
127
145
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
128
146
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
147
+ if (props.paddingX && SM[props.paddingX]) {
148
+ const v = SM[props.paddingX];
149
+ if (v.startsWith("-")) {
150
+ s.marginLeft = v;
151
+ s.marginRight = v;
152
+ } else {
153
+ s.paddingLeft = v;
154
+ s.paddingRight = v;
155
+ }
156
+ }
129
157
  return s;
130
158
  });
131
159
  </script>
160
+
161
+ <style scoped>
162
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
163
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :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'">
@@ -80,7 +80,7 @@ const ca = (c, h) => {
80
80
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
81
81
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
82
82
  };
83
- import { computed } from "vue";
83
+ import { ref, computed, onMounted } from "vue";
84
84
  const props = defineProps({
85
85
  layout: { type: String, default: "steps" },
86
86
  title: { type: String, default: "How it works" },
@@ -99,7 +99,25 @@ const props = defineProps({
99
99
  paddingTop: { type: String, default: "" },
100
100
  paddingBottom: { type: String, default: "" },
101
101
  marginTop: { type: String, default: "" },
102
- marginBottom: { type: String, default: "" }
102
+ marginBottom: { type: String, default: "" },
103
+ paddingX: { type: String, default: "" }
104
+ });
105
+ const sectionEl = ref(null);
106
+ const isVisible = ref(false);
107
+ onMounted(() => {
108
+ const obs = new IntersectionObserver(
109
+ ([e]) => {
110
+ if (e.isIntersecting) {
111
+ isVisible.value = true;
112
+ obs.disconnect();
113
+ }
114
+ },
115
+ { threshold: 0.06 }
116
+ );
117
+ if (sectionEl.value) obs.observe(sectionEl.value);
118
+ setTimeout(() => {
119
+ if (!isVisible.value) isVisible.value = true;
120
+ }, 300);
103
121
  });
104
122
  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");
105
123
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
@@ -113,6 +131,20 @@ const spacingStyle = computed(() => {
113
131
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
114
132
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
115
133
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
134
+ if (props.paddingX && SM[props.paddingX]) {
135
+ const v = SM[props.paddingX];
136
+ if (v.startsWith("-")) {
137
+ s.marginLeft = v;
138
+ s.marginRight = v;
139
+ } else {
140
+ s.paddingLeft = v;
141
+ s.paddingRight = v;
142
+ }
143
+ }
116
144
  return s;
117
145
  });
118
146
  </script>
147
+
148
+ <style scoped>
149
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
150
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
3
3
 
4
4
  <!-- CENTERED -->
5
5
  <div v-if="layout === 'centered'" :class="[containerClass, 'text-center']">
@@ -62,7 +62,7 @@ const ca = (c, h) => {
62
62
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
63
63
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
64
64
  };
65
- import { computed } from "vue";
65
+ import { ref, computed, onMounted } from "vue";
66
66
  const props = defineProps({
67
67
  layout: { type: String, default: "centered" },
68
68
  quote: { type: String, default: "" },
@@ -79,7 +79,25 @@ const props = defineProps({
79
79
  paddingTop: { type: String, default: "" },
80
80
  paddingBottom: { type: String, default: "" },
81
81
  marginTop: { type: String, default: "" },
82
- marginBottom: { type: String, default: "" }
82
+ marginBottom: { type: String, default: "" },
83
+ paddingX: { type: String, default: "" }
84
+ });
85
+ const sectionEl = ref(null);
86
+ const isVisible = ref(false);
87
+ onMounted(() => {
88
+ const obs = new IntersectionObserver(
89
+ ([e]) => {
90
+ if (e.isIntersecting) {
91
+ isVisible.value = true;
92
+ obs.disconnect();
93
+ }
94
+ },
95
+ { threshold: 0.06 }
96
+ );
97
+ if (sectionEl.value) obs.observe(sectionEl.value);
98
+ setTimeout(() => {
99
+ if (!isVisible.value) isVisible.value = true;
100
+ }, 300);
83
101
  });
84
102
  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");
85
103
  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");
@@ -91,6 +109,20 @@ const spacingStyle = computed(() => {
91
109
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
92
110
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
93
111
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
112
+ if (props.paddingX && SM[props.paddingX]) {
113
+ const v = SM[props.paddingX];
114
+ if (v.startsWith("-")) {
115
+ s.marginLeft = v;
116
+ s.marginRight = v;
117
+ } else {
118
+ s.paddingLeft = v;
119
+ s.paddingRight = v;
120
+ }
121
+ }
94
122
  return s;
95
123
  });
96
124
  </script>
125
+
126
+ <style scoped>
127
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
128
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
3
3
  <div :class="maxW">
4
4
 
5
5
  <!-- Optional title -->
@@ -32,7 +32,7 @@ const ca = (c, h) => {
32
32
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
33
33
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
34
34
  };
35
- import { computed } from "vue";
35
+ import { ref, computed, onMounted } from "vue";
36
36
  const props = defineProps({
37
37
  layout: { type: String, default: "article" },
38
38
  titleTag: { type: String, default: "h2" },
@@ -50,7 +50,25 @@ const props = defineProps({
50
50
  paddingTop: { type: String, default: "" },
51
51
  paddingBottom: { type: String, default: "" },
52
52
  marginTop: { type: String, default: "" },
53
- marginBottom: { type: String, default: "" }
53
+ marginBottom: { type: String, default: "" },
54
+ paddingX: { type: String, default: "" }
55
+ });
56
+ const sectionEl = ref(null);
57
+ const isVisible = ref(false);
58
+ onMounted(() => {
59
+ const obs = new IntersectionObserver(
60
+ ([e]) => {
61
+ if (e.isIntersecting) {
62
+ isVisible.value = true;
63
+ obs.disconnect();
64
+ }
65
+ },
66
+ { threshold: 0.06 }
67
+ );
68
+ if (sectionEl.value) obs.observe(sectionEl.value);
69
+ setTimeout(() => {
70
+ if (!isVisible.value) isVisible.value = true;
71
+ }, 300);
54
72
  });
55
73
  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");
56
74
  const cardRound = computed(() => ({ sharp: "rounded-lg", rounded: "rounded-xl", pill: "rounded-full" })[props.radius] || "rounded-xl");
@@ -81,10 +99,20 @@ const spacingStyle = computed(() => {
81
99
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
82
100
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
83
101
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
102
+ if (props.paddingX && SM[props.paddingX]) {
103
+ const v = SM[props.paddingX];
104
+ if (v.startsWith("-")) {
105
+ s.marginLeft = v;
106
+ s.marginRight = v;
107
+ } else {
108
+ s.paddingLeft = v;
109
+ s.paddingRight = v;
110
+ }
111
+ }
84
112
  return s;
85
113
  });
86
114
  </script>
87
115
 
88
116
  <style scoped>
89
- .prose-content :deep(h1){font-size:1.9em;font-weight:900;letter-spacing:-.03em;margin:1.6em 0 .5em}.prose-content :deep(h2){font-size:1.4em;font-weight:900;letter-spacing:-.02em;margin:1.5em 0 .5em}.prose-content :deep(h3){font-size:1.15em;font-weight:800;margin:1.2em 0 .4em}.prose-content :deep(h4){font-size:1em;font-weight:700;margin:1em 0 .3em}.prose-content :deep(p){margin-bottom:1em}.prose-content :deep(ul){list-style:disc;margin-bottom:1em;padding-left:1.6em}.prose-content :deep(ol){list-style:decimal;margin-bottom:1em;padding-left:1.6em}.prose-content :deep(li){margin-bottom:.35em}.prose-content :deep(strong){font-weight:700}.prose-content :deep(em){font-style:italic}.prose-content :deep(u){text-decoration:underline}.prose-content :deep(a){opacity:.75;text-decoration:underline}.prose-content :deep(blockquote){border-left:3px solid;font-style:italic;margin:1.2em 0;opacity:.65;padding-left:1em}
117
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}.prose-content :deep(h1){font-size:1.9em;font-weight:900;letter-spacing:-.03em;margin:1.6em 0 .5em}.prose-content :deep(h2){font-size:1.4em;font-weight:900;letter-spacing:-.02em;margin:1.5em 0 .5em}.prose-content :deep(h3){font-size:1.15em;font-weight:800;margin:1.2em 0 .4em}.prose-content :deep(h4){font-size:1em;font-weight:700;margin:1em 0 .3em}.prose-content :deep(p){margin-bottom:1em}.prose-content :deep(ul){list-style:disc;margin-bottom:1em;padding-left:1.6em}.prose-content :deep(ol){list-style:decimal;margin-bottom:1em;padding-left:1.6em}.prose-content :deep(li){margin-bottom:.35em}.prose-content :deep(strong){font-weight:700}.prose-content :deep(em){font-style:italic}.prose-content :deep(u){text-decoration:underline}.prose-content :deep(a){opacity:.75;text-decoration:underline}.prose-content :deep(blockquote){border-left:3px solid;font-style:italic;margin:1.2em 0;opacity:.65;padding-left:1em}
90
118
  </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :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'">
@@ -80,7 +80,7 @@ const ca = (c, h) => {
80
80
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
81
81
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
82
82
  };
83
- import { computed } from "vue";
83
+ import { ref, computed, onMounted } from "vue";
84
84
  const props = defineProps({
85
85
  layout: { type: String, default: "grid" },
86
86
  title: { type: String, default: "Our Services" },
@@ -101,7 +101,25 @@ const props = defineProps({
101
101
  paddingTop: { type: String, default: "" },
102
102
  paddingBottom: { type: String, default: "" },
103
103
  marginTop: { type: String, default: "" },
104
- marginBottom: { type: String, default: "" }
104
+ marginBottom: { type: String, default: "" },
105
+ paddingX: { type: String, default: "" }
106
+ });
107
+ const sectionEl = ref(null);
108
+ const isVisible = ref(false);
109
+ onMounted(() => {
110
+ const obs = new IntersectionObserver(
111
+ ([e]) => {
112
+ if (e.isIntersecting) {
113
+ isVisible.value = true;
114
+ obs.disconnect();
115
+ }
116
+ },
117
+ { threshold: 0.06 }
118
+ );
119
+ if (sectionEl.value) obs.observe(sectionEl.value);
120
+ setTimeout(() => {
121
+ if (!isVisible.value) isVisible.value = true;
122
+ }, 300);
105
123
  });
106
124
  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");
107
125
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
@@ -115,6 +133,20 @@ const spacingStyle = computed(() => {
115
133
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
116
134
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
117
135
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
136
+ if (props.paddingX && SM[props.paddingX]) {
137
+ const v = SM[props.paddingX];
138
+ if (v.startsWith("-")) {
139
+ s.marginLeft = v;
140
+ s.marginRight = v;
141
+ } else {
142
+ s.paddingLeft = v;
143
+ s.paddingRight = v;
144
+ }
145
+ }
118
146
  return s;
119
147
  });
120
148
  </script>
149
+
150
+ <style scoped>
151
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
152
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :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">
@@ -81,7 +81,7 @@ const ca = (c, h) => {
81
81
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
82
82
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
83
83
  };
84
- import { computed } from "vue";
84
+ import { ref, computed, onMounted } from "vue";
85
85
  const props = defineProps({
86
86
  layout: { type: String, default: "grid" },
87
87
  title: { type: String, default: "What our clients say" },
@@ -99,7 +99,25 @@ const props = defineProps({
99
99
  paddingTop: { type: String, default: "" },
100
100
  paddingBottom: { type: String, default: "" },
101
101
  marginTop: { type: String, default: "" },
102
- marginBottom: { type: String, default: "" }
102
+ marginBottom: { type: String, default: "" },
103
+ paddingX: { type: String, default: "" }
104
+ });
105
+ const sectionEl = ref(null);
106
+ const isVisible = ref(false);
107
+ onMounted(() => {
108
+ const obs = new IntersectionObserver(
109
+ ([e]) => {
110
+ if (e.isIntersecting) {
111
+ isVisible.value = true;
112
+ obs.disconnect();
113
+ }
114
+ },
115
+ { threshold: 0.06 }
116
+ );
117
+ if (sectionEl.value) obs.observe(sectionEl.value);
118
+ setTimeout(() => {
119
+ if (!isVisible.value) isVisible.value = true;
120
+ }, 300);
103
121
  });
104
122
  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");
105
123
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
@@ -113,6 +131,20 @@ const spacingStyle = computed(() => {
113
131
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
114
132
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
115
133
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
134
+ if (props.paddingX && SM[props.paddingX]) {
135
+ const v = SM[props.paddingX];
136
+ if (v.startsWith("-")) {
137
+ s.marginLeft = v;
138
+ s.marginRight = v;
139
+ } else {
140
+ s.paddingLeft = v;
141
+ s.paddingRight = v;
142
+ }
143
+ }
116
144
  return s;
117
145
  });
118
146
  </script>
147
+
148
+ <style scoped>
149
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
150
+ </style>
@@ -1,5 +1,5 @@
1
1
  <template>
2
- <section :class="[sectionPad]" :dir="textDirection" :style="[{ backgroundColor: bgColor, color: textColor }, spacingStyle]">
2
+ <section ref="sectionEl" :class="[sectionPad, isVisible ? 'sec-in' : 'sec-out']" :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' : '']">
@@ -69,7 +69,7 @@ const ca = (c, h) => {
69
69
  const m = c.match(/rgba\((var\([^)]+\)),\s*[\d.]+\)/);
70
70
  return m ? `rgba(${m[1]}, ${Math.round(parseInt(h, 16) / 255 * 1e3) / 1e3})` : c + h;
71
71
  };
72
- import { computed } from "vue";
72
+ import { ref, computed, onMounted } from "vue";
73
73
  const props = defineProps({
74
74
  layout: { type: String, default: "split" },
75
75
  title: { type: String, default: "Our Vision" },
@@ -89,7 +89,29 @@ const props = defineProps({
89
89
  radius: { type: String, default: "rounded" },
90
90
  textDirection: { type: String, default: "ltr" },
91
91
  contentWidth: { type: String, default: "normal" },
92
- textSize: { type: String, default: "md" }
92
+ textSize: { type: String, default: "md" },
93
+ paddingTop: { type: String, default: "" },
94
+ paddingBottom: { type: String, default: "" },
95
+ marginTop: { type: String, default: "" },
96
+ marginBottom: { type: String, default: "" },
97
+ paddingX: { type: String, default: "" }
98
+ });
99
+ const sectionEl = ref(null);
100
+ const isVisible = ref(false);
101
+ onMounted(() => {
102
+ const obs = new IntersectionObserver(
103
+ ([e]) => {
104
+ if (e.isIntersecting) {
105
+ isVisible.value = true;
106
+ obs.disconnect();
107
+ }
108
+ },
109
+ { threshold: 0.06 }
110
+ );
111
+ if (sectionEl.value) obs.observe(sectionEl.value);
112
+ setTimeout(() => {
113
+ if (!isVisible.value) isVisible.value = true;
114
+ }, 300);
93
115
  });
94
116
  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");
95
117
  const cardRound = computed(() => ({ sharp: "rounded-xl", rounded: "rounded-3xl", pill: "rounded-[40px]" })[props.radius] || "rounded-3xl");
@@ -108,6 +130,20 @@ const spacingStyle = computed(() => {
108
130
  if (props.paddingBottom && SM[props.paddingBottom]) s.paddingBottom = SM[props.paddingBottom];
109
131
  if (props.marginTop && SM[props.marginTop]) s.marginTop = SM[props.marginTop];
110
132
  if (props.marginBottom && SM[props.marginBottom]) s.marginBottom = SM[props.marginBottom];
133
+ if (props.paddingX && SM[props.paddingX]) {
134
+ const v = SM[props.paddingX];
135
+ if (v.startsWith("-")) {
136
+ s.marginLeft = v;
137
+ s.marginRight = v;
138
+ } else {
139
+ s.paddingLeft = v;
140
+ s.paddingRight = v;
141
+ }
142
+ }
111
143
  return s;
112
144
  });
113
145
  </script>
146
+
147
+ <style scoped>
148
+ .sec-out{opacity:0;transform:translateY(20px)}.sec-in{opacity:1;transform:none;transition:opacity .7s cubic-bezier(.16,1,.3,1),transform .7s cubic-bezier(.16,1,.3,1)}
149
+ </style>
@@ -0,0 +1,3 @@
1
+ declare const _default: typeof __VLS_export;
2
+ export default _default;
3
+ declare const __VLS_export: any;