@nextsparkjs/theme-default 0.1.0-beta.67 → 0.1.0-beta.68
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/blocks/benefits/component.tsx +4 -4
- package/blocks/cta-section/component.tsx +4 -4
- package/blocks/faq-accordion/component.tsx +2 -2
- package/blocks/features-grid/component.tsx +5 -5
- package/blocks/hero/component.tsx +2 -2
- package/blocks/hero-with-form/component.tsx +7 -7
- package/blocks/jumbotron/component.tsx +7 -7
- package/blocks/logo-cloud/component.tsx +6 -6
- package/blocks/post-content/component.tsx +2 -2
- package/blocks/pricing-table/component.tsx +5 -5
- package/blocks/split-content/component.tsx +5 -5
- package/blocks/stats-counter/component.tsx +9 -9
- package/blocks/testimonials/component.tsx +4 -4
- package/blocks/text-content/component.tsx +2 -2
- package/blocks/timeline/component.tsx +12 -12
- package/blocks/video-hero/component.tsx +7 -7
- package/package.json +3 -3
- package/styles/globals.css +1 -0
- package/tests/cypress/e2e/_utils/selectors/block-editor.cy.ts +160 -97
- package/tests/cypress/src/core/BlockEditorBasePOM.ts +123 -24
|
@@ -23,9 +23,9 @@ export function BenefitsBlock({
|
|
|
23
23
|
const bgClasses = getBackgroundClasses(backgroundColor)
|
|
24
24
|
|
|
25
25
|
const gridCols = {
|
|
26
|
-
'2': 'md:grid-cols-2',
|
|
27
|
-
'3': 'md:grid-cols-3',
|
|
28
|
-
'4': 'md:grid-cols-2 lg:grid-cols-4',
|
|
26
|
+
'2': '@md:grid-cols-2',
|
|
27
|
+
'3': '@md:grid-cols-3',
|
|
28
|
+
'4': '@md:grid-cols-2 @lg:grid-cols-4',
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
const cardStyles = {
|
|
@@ -49,7 +49,7 @@ export function BenefitsBlock({
|
|
|
49
49
|
{(sectionTitle || sectionSubtitle) && (
|
|
50
50
|
<div className="text-center mb-12">
|
|
51
51
|
{sectionTitle && (
|
|
52
|
-
<h2 className="text-3xl md:text-4xl font-bold mb-4">
|
|
52
|
+
<h2 className="text-3xl @md:text-4xl font-bold mb-4">
|
|
53
53
|
{sectionTitle}
|
|
54
54
|
</h2>
|
|
55
55
|
)}
|
|
@@ -48,7 +48,7 @@ export function CTASectionBlock({
|
|
|
48
48
|
|
|
49
49
|
// Build section classes with background and custom className
|
|
50
50
|
const sectionClasses = buildSectionClasses(
|
|
51
|
-
'py-16 px-4 md:py-24',
|
|
51
|
+
'py-16 px-4 @md:py-24',
|
|
52
52
|
{ backgroundColor, className }
|
|
53
53
|
)
|
|
54
54
|
|
|
@@ -56,15 +56,15 @@ export function CTASectionBlock({
|
|
|
56
56
|
<section id={id} className={sectionClasses} data-cy={sel('blocks.ctaSection.container')}>
|
|
57
57
|
<div className="container mx-auto max-w-4xl text-center">
|
|
58
58
|
{title && (
|
|
59
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">{title}</h2>
|
|
59
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">{title}</h2>
|
|
60
60
|
)}
|
|
61
61
|
|
|
62
62
|
{displayContent && (
|
|
63
|
-
<p className="mb-8 text-lg md:text-xl opacity-90">{displayContent}</p>
|
|
63
|
+
<p className="mb-8 text-lg @md:text-xl opacity-90">{displayContent}</p>
|
|
64
64
|
)}
|
|
65
65
|
|
|
66
66
|
{(primaryCta || secondaryButton) && (
|
|
67
|
-
<div className="flex flex-col gap-4 sm:flex-row sm:justify-center">
|
|
67
|
+
<div className="flex flex-col gap-4 @sm:flex-row @sm:justify-center">
|
|
68
68
|
{primaryCta && (
|
|
69
69
|
<Button asChild size="lg">
|
|
70
70
|
<a
|
|
@@ -44,7 +44,7 @@ export function FaqAccordionBlock({
|
|
|
44
44
|
|
|
45
45
|
// Build section classes with background and custom className
|
|
46
46
|
const sectionClasses = buildSectionClasses(
|
|
47
|
-
'py-16 px-4 md:py-24',
|
|
47
|
+
'py-16 px-4 @md:py-24',
|
|
48
48
|
{ backgroundColor, className }
|
|
49
49
|
)
|
|
50
50
|
|
|
@@ -80,7 +80,7 @@ export function FaqAccordionBlock({
|
|
|
80
80
|
{(title || subtitle) && (
|
|
81
81
|
<div className="mb-12 text-center">
|
|
82
82
|
{title && (
|
|
83
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
83
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
84
84
|
{title}
|
|
85
85
|
</h2>
|
|
86
86
|
)}
|
|
@@ -42,14 +42,14 @@ export function FeaturesGridBlock({
|
|
|
42
42
|
|
|
43
43
|
// Build column classes based on columns prop
|
|
44
44
|
const columnClasses: Record<string, string> = {
|
|
45
|
-
'2': 'sm:grid-cols-2',
|
|
46
|
-
'3': 'sm:grid-cols-2 lg:grid-cols-3',
|
|
47
|
-
'4': 'sm:grid-cols-2 lg:grid-cols-4',
|
|
45
|
+
'2': '@sm:grid-cols-2',
|
|
46
|
+
'3': '@sm:grid-cols-2 @lg:grid-cols-3',
|
|
47
|
+
'4': '@sm:grid-cols-2 @lg:grid-cols-4',
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
// Build section classes with background and custom className
|
|
51
51
|
const sectionClasses = buildSectionClasses(
|
|
52
|
-
'py-16 px-4 md:py-24',
|
|
52
|
+
'py-16 px-4 @md:py-24',
|
|
53
53
|
{ backgroundColor, className }
|
|
54
54
|
)
|
|
55
55
|
|
|
@@ -60,7 +60,7 @@ export function FeaturesGridBlock({
|
|
|
60
60
|
{(title || displayContent) && (
|
|
61
61
|
<div className="mb-12 text-center">
|
|
62
62
|
{title && (
|
|
63
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
63
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
64
64
|
{title}
|
|
65
65
|
</h2>
|
|
66
66
|
)}
|
|
@@ -72,13 +72,13 @@ export function HeroBlock({
|
|
|
72
72
|
{/* Content */}
|
|
73
73
|
<div className="container relative z-10 mx-auto max-w-4xl text-center">
|
|
74
74
|
{title && (
|
|
75
|
-
<h1 className="mb-6 text-5xl font-bold leading-tight md:text-6xl lg:text-7xl">
|
|
75
|
+
<h1 className="mb-6 text-5xl font-bold leading-tight @md:text-6xl @lg:text-7xl">
|
|
76
76
|
{title}
|
|
77
77
|
</h1>
|
|
78
78
|
)}
|
|
79
79
|
|
|
80
80
|
{displayContent && (
|
|
81
|
-
<p className="mb-8 text-xl md:text-2xl opacity-90">
|
|
81
|
+
<p className="mb-8 text-xl @md:text-2xl opacity-90">
|
|
82
82
|
{displayContent}
|
|
83
83
|
</p>
|
|
84
84
|
)}
|
|
@@ -88,26 +88,26 @@ export function HeroWithFormBlock({
|
|
|
88
88
|
</div>
|
|
89
89
|
|
|
90
90
|
{/* Content Container */}
|
|
91
|
-
<div className="container relative z-10 mx-auto px-4 py-12 lg:py-0">
|
|
92
|
-
<div className="grid lg:grid-cols-2 gap-8 lg:gap-16 min-h-screen items-center">
|
|
91
|
+
<div className="container relative z-10 mx-auto px-4 py-12 @lg:py-0">
|
|
92
|
+
<div className="grid @lg:grid-cols-2 gap-8 @lg:gap-16 min-h-screen items-center">
|
|
93
93
|
|
|
94
94
|
{/* Left: Title/Subtitle - vertically centered, bottom aligned on mobile */}
|
|
95
|
-
<div className="text-white order-2 lg:order-1 flex flex-col justify-end lg:justify-center pb-8 lg:pb-0">
|
|
95
|
+
<div className="text-white order-2 @lg:order-1 flex flex-col justify-end @lg:justify-center pb-8 @lg:pb-0">
|
|
96
96
|
{title && (
|
|
97
|
-
<h1 className="text-4xl lg:text-5xl xl:text-6xl font-bold italic mb-4 leading-tight">
|
|
97
|
+
<h1 className="text-4xl @lg:text-5xl @xl:text-6xl font-bold italic mb-4 leading-tight">
|
|
98
98
|
{title}
|
|
99
99
|
</h1>
|
|
100
100
|
)}
|
|
101
101
|
{subtitle && (
|
|
102
|
-
<p className="text-lg lg:text-xl xl:text-2xl opacity-90 max-w-lg">
|
|
102
|
+
<p className="text-lg @lg:text-xl @xl:text-2xl opacity-90 max-w-lg">
|
|
103
103
|
{subtitle}
|
|
104
104
|
</p>
|
|
105
105
|
)}
|
|
106
106
|
</div>
|
|
107
107
|
|
|
108
108
|
{/* Right: Form Card - centered vertically */}
|
|
109
|
-
<div className="order-1 lg:order-2 flex justify-center lg:justify-end items-start lg:items-center pt-8 lg:pt-0">
|
|
110
|
-
<div className="bg-white rounded-lg shadow-2xl p-6 sm:p-8 w-full max-w-md">
|
|
109
|
+
<div className="order-1 @lg:order-2 flex justify-center @lg:justify-end items-start @lg:items-center pt-8 @lg:pt-0">
|
|
110
|
+
<div className="bg-white rounded-lg shadow-2xl p-6 @sm:p-8 w-full max-w-md">
|
|
111
111
|
{/* Form Header */}
|
|
112
112
|
{formTitle && (
|
|
113
113
|
<h2 className="text-xl font-bold text-center text-primary mb-2">
|
|
@@ -46,16 +46,16 @@ export function JumbotronBlock({
|
|
|
46
46
|
}[align]
|
|
47
47
|
|
|
48
48
|
const ctaJustifyClasses = {
|
|
49
|
-
center: 'sm:justify-center',
|
|
50
|
-
left: 'sm:justify-start',
|
|
51
|
-
right: 'sm:justify-end',
|
|
49
|
+
center: '@sm:justify-center',
|
|
50
|
+
left: '@sm:justify-start',
|
|
51
|
+
right: '@sm:justify-end',
|
|
52
52
|
}[align]
|
|
53
53
|
|
|
54
54
|
// Build section classes with fullscreen or standard padding
|
|
55
55
|
const sectionClasses = buildSectionClasses(
|
|
56
56
|
cn(
|
|
57
57
|
'relative flex overflow-hidden px-4',
|
|
58
|
-
fullscreen ? 'min-h-screen' : 'py-16 md:py-24',
|
|
58
|
+
fullscreen ? 'min-h-screen' : 'py-16 @md:py-24',
|
|
59
59
|
alignmentClasses,
|
|
60
60
|
textColor === 'light' ? 'text-white' : 'text-gray-900'
|
|
61
61
|
),
|
|
@@ -81,20 +81,20 @@ export function JumbotronBlock({
|
|
|
81
81
|
{/* Content */}
|
|
82
82
|
<div className={cn('container relative z-10 max-w-4xl', contentAlignmentClasses)}>
|
|
83
83
|
{title && (
|
|
84
|
-
<h1 className="mb-6 text-5xl font-bold leading-tight md:text-6xl lg:text-7xl">
|
|
84
|
+
<h1 className="mb-6 text-5xl font-bold leading-tight @md:text-6xl @lg:text-7xl">
|
|
85
85
|
{title}
|
|
86
86
|
</h1>
|
|
87
87
|
)}
|
|
88
88
|
|
|
89
89
|
{subtitle && (
|
|
90
|
-
<p className="mb-8 text-xl md:text-2xl opacity-90">
|
|
90
|
+
<p className="mb-8 text-xl @md:text-2xl opacity-90">
|
|
91
91
|
{subtitle}
|
|
92
92
|
</p>
|
|
93
93
|
)}
|
|
94
94
|
|
|
95
95
|
{/* CTAs - automatically center based on count */}
|
|
96
96
|
{(primaryCta || secondaryCta) && (
|
|
97
|
-
<div className={cn('flex flex-col gap-4 sm:flex-row', ctaJustifyClasses)}>
|
|
97
|
+
<div className={cn('flex flex-col gap-4 @sm:flex-row', ctaJustifyClasses)}>
|
|
98
98
|
{primaryCta && primaryCta.text && (
|
|
99
99
|
<Button
|
|
100
100
|
asChild
|
|
@@ -43,10 +43,10 @@ export function LogoCloudBlock({
|
|
|
43
43
|
|
|
44
44
|
// Build column classes for grid layout
|
|
45
45
|
const columnClasses: Record<string, string> = {
|
|
46
|
-
'3': 'grid-cols-2 sm:grid-cols-3',
|
|
47
|
-
'4': 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-4',
|
|
48
|
-
'5': 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-5',
|
|
49
|
-
'6': 'grid-cols-2 sm:grid-cols-3 lg:grid-cols-6',
|
|
46
|
+
'3': 'grid-cols-2 @sm:grid-cols-3',
|
|
47
|
+
'4': 'grid-cols-2 @sm:grid-cols-3 @lg:grid-cols-4',
|
|
48
|
+
'5': 'grid-cols-2 @sm:grid-cols-3 @lg:grid-cols-5',
|
|
49
|
+
'6': 'grid-cols-2 @sm:grid-cols-3 @lg:grid-cols-6',
|
|
50
50
|
}
|
|
51
51
|
|
|
52
52
|
// Build size classes for logo containers
|
|
@@ -66,7 +66,7 @@ export function LogoCloudBlock({
|
|
|
66
66
|
|
|
67
67
|
// Build section classes with background and custom className
|
|
68
68
|
const sectionClasses = buildSectionClasses(
|
|
69
|
-
'py-12 px-4 md:py-16',
|
|
69
|
+
'py-12 px-4 @md:py-16',
|
|
70
70
|
{ backgroundColor, className }
|
|
71
71
|
)
|
|
72
72
|
|
|
@@ -77,7 +77,7 @@ export function LogoCloudBlock({
|
|
|
77
77
|
{(title || content) && (
|
|
78
78
|
<div className="mb-10 text-center">
|
|
79
79
|
{title && (
|
|
80
|
-
<h2 className="mb-3 text-2xl font-semibold md:text-3xl">
|
|
80
|
+
<h2 className="mb-3 text-2xl font-semibold @md:text-3xl">
|
|
81
81
|
{title}
|
|
82
82
|
</h2>
|
|
83
83
|
)}
|
|
@@ -79,7 +79,7 @@ export function PostContentBlock({
|
|
|
79
79
|
|
|
80
80
|
// Build section classes with background
|
|
81
81
|
const sectionClasses = buildSectionClasses(
|
|
82
|
-
'py-16 px-4 md:py-24',
|
|
82
|
+
'py-16 px-4 @md:py-24',
|
|
83
83
|
{ backgroundColor, className }
|
|
84
84
|
)
|
|
85
85
|
|
|
@@ -119,7 +119,7 @@ export function PostContentBlock({
|
|
|
119
119
|
{/* Optional Section Title */}
|
|
120
120
|
{title && (
|
|
121
121
|
<div className={cn('mb-12 text-center', maxWidthClasses[maxWidth], 'mx-auto')}>
|
|
122
|
-
<h2 className="text-4xl font-bold md:text-5xl lg:text-6xl tracking-tight">
|
|
122
|
+
<h2 className="text-4xl font-bold @md:text-5xl @lg:text-6xl tracking-tight">
|
|
123
123
|
{title}
|
|
124
124
|
</h2>
|
|
125
125
|
</div>
|
|
@@ -38,14 +38,14 @@ export function PricingTableBlock({
|
|
|
38
38
|
|
|
39
39
|
// Build column classes based on columns prop
|
|
40
40
|
const columnClasses: Record<string, string> = {
|
|
41
|
-
'2': 'sm:grid-cols-2',
|
|
42
|
-
'3': 'sm:grid-cols-2 lg:grid-cols-3',
|
|
43
|
-
'4': 'sm:grid-cols-2 lg:grid-cols-4',
|
|
41
|
+
'2': '@sm:grid-cols-2',
|
|
42
|
+
'3': '@sm:grid-cols-2 @lg:grid-cols-3',
|
|
43
|
+
'4': '@sm:grid-cols-2 @lg:grid-cols-4',
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
// Build section classes with background and custom className
|
|
47
47
|
const sectionClasses = buildSectionClasses(
|
|
48
|
-
'py-16 px-4 md:py-24',
|
|
48
|
+
'py-16 px-4 @md:py-24',
|
|
49
49
|
{ backgroundColor, className }
|
|
50
50
|
)
|
|
51
51
|
|
|
@@ -59,7 +59,7 @@ export function PricingTableBlock({
|
|
|
59
59
|
{(title || content) && (
|
|
60
60
|
<div className="mb-12 text-center">
|
|
61
61
|
{title && (
|
|
62
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
62
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
63
63
|
{title}
|
|
64
64
|
</h2>
|
|
65
65
|
)}
|
|
@@ -38,7 +38,7 @@ export function SplitContentBlock({
|
|
|
38
38
|
|
|
39
39
|
// Build section classes with background and custom className
|
|
40
40
|
const sectionClasses = buildSectionClasses(
|
|
41
|
-
'py-16 px-4 md:py-24',
|
|
41
|
+
'py-16 px-4 @md:py-24',
|
|
42
42
|
{ backgroundColor, className }
|
|
43
43
|
)
|
|
44
44
|
|
|
@@ -57,13 +57,13 @@ export function SplitContentBlock({
|
|
|
57
57
|
}
|
|
58
58
|
|
|
59
59
|
// Grid order classes based on image position
|
|
60
|
-
const imageOrderClass = imagePosition === 'right' ? 'lg:order-2' : 'lg:order-1'
|
|
61
|
-
const contentOrderClass = imagePosition === 'right' ? 'lg:order-1' : 'lg:order-2'
|
|
60
|
+
const imageOrderClass = imagePosition === 'right' ? '@lg:order-2' : '@lg:order-1'
|
|
61
|
+
const contentOrderClass = imagePosition === 'right' ? '@lg:order-1' : '@lg:order-2'
|
|
62
62
|
|
|
63
63
|
return (
|
|
64
64
|
<section id={id} className={sectionClasses} data-cy={sel('blocks.splitContent.container')}>
|
|
65
65
|
<div className="container mx-auto max-w-7xl">
|
|
66
|
-
<div className={cn('grid gap-8 lg:grid-cols-2 lg:gap-12', alignmentClasses[verticalAlign as 'top' | 'center' | 'bottom'])}>
|
|
66
|
+
<div className={cn('grid gap-8 @lg:grid-cols-2 @lg:gap-12', alignmentClasses[verticalAlign as 'top' | 'center' | 'bottom'])}>
|
|
67
67
|
{/* Image Column */}
|
|
68
68
|
<div className={cn('relative', imageOrderClass)}>
|
|
69
69
|
<div className="relative aspect-[4/3] w-full overflow-hidden">
|
|
@@ -86,7 +86,7 @@ export function SplitContentBlock({
|
|
|
86
86
|
)}
|
|
87
87
|
|
|
88
88
|
{title && (
|
|
89
|
-
<h2 className="mb-4 text-3xl font-bold md:text-4xl lg:text-5xl">
|
|
89
|
+
<h2 className="mb-4 text-3xl font-bold @md:text-4xl @lg:text-5xl">
|
|
90
90
|
{title}
|
|
91
91
|
</h2>
|
|
92
92
|
)}
|
|
@@ -34,16 +34,16 @@ export function StatsCounterBlock({
|
|
|
34
34
|
|
|
35
35
|
// Build column classes based on columns prop
|
|
36
36
|
const columnClasses: Record<string, string> = {
|
|
37
|
-
'2': 'sm:grid-cols-2',
|
|
38
|
-
'3': 'sm:grid-cols-2 lg:grid-cols-3',
|
|
39
|
-
'4': 'sm:grid-cols-2 lg:grid-cols-4',
|
|
37
|
+
'2': '@sm:grid-cols-2',
|
|
38
|
+
'3': '@sm:grid-cols-2 @lg:grid-cols-3',
|
|
39
|
+
'4': '@sm:grid-cols-2 @lg:grid-cols-4',
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
// Size classes for numbers
|
|
43
43
|
const sizeClasses: Record<string, string> = {
|
|
44
|
-
sm: 'text-3xl md:text-4xl',
|
|
45
|
-
md: 'text-4xl md:text-5xl',
|
|
46
|
-
lg: 'text-5xl md:text-6xl lg:text-7xl',
|
|
44
|
+
sm: 'text-3xl @md:text-4xl',
|
|
45
|
+
md: 'text-4xl @md:text-5xl',
|
|
46
|
+
lg: 'text-5xl @md:text-6xl @lg:text-7xl',
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
// Variant-specific stat item classes
|
|
@@ -62,7 +62,7 @@ export function StatsCounterBlock({
|
|
|
62
62
|
|
|
63
63
|
// Build section classes with background and custom className
|
|
64
64
|
const sectionClasses = buildSectionClasses(
|
|
65
|
-
'py-16 px-4 md:py-24',
|
|
65
|
+
'py-16 px-4 @md:py-24',
|
|
66
66
|
{ backgroundColor, className }
|
|
67
67
|
)
|
|
68
68
|
|
|
@@ -73,7 +73,7 @@ export function StatsCounterBlock({
|
|
|
73
73
|
{(title || content) && (
|
|
74
74
|
<div className="mb-12 text-center">
|
|
75
75
|
{title && (
|
|
76
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
76
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
77
77
|
{title}
|
|
78
78
|
</h2>
|
|
79
79
|
)}
|
|
@@ -98,7 +98,7 @@ export function StatsCounterBlock({
|
|
|
98
98
|
<span className="text-primary">{stat.suffix}</span>
|
|
99
99
|
)}
|
|
100
100
|
</div>
|
|
101
|
-
<div className="text-sm md:text-base text-muted-foreground font-medium">
|
|
101
|
+
<div className="text-sm @md:text-base text-muted-foreground font-medium">
|
|
102
102
|
{stat.label}
|
|
103
103
|
</div>
|
|
104
104
|
</div>
|
|
@@ -31,13 +31,13 @@ export function TestimonialsBlock({
|
|
|
31
31
|
}: TestimonialsBlockProps) {
|
|
32
32
|
// Build column classes based on columns prop
|
|
33
33
|
const columnClasses: Record<string, string> = {
|
|
34
|
-
'2': 'md:grid-cols-2',
|
|
35
|
-
'3': 'md:grid-cols-2 lg:grid-cols-3',
|
|
34
|
+
'2': '@md:grid-cols-2',
|
|
35
|
+
'3': '@md:grid-cols-2 @lg:grid-cols-3',
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
// Build section classes with background and custom className
|
|
39
39
|
const sectionClasses = buildSectionClasses(
|
|
40
|
-
'py-16 px-4 md:py-24',
|
|
40
|
+
'py-16 px-4 @md:py-24',
|
|
41
41
|
{ backgroundColor, className }
|
|
42
42
|
)
|
|
43
43
|
|
|
@@ -51,7 +51,7 @@ export function TestimonialsBlock({
|
|
|
51
51
|
{(title || content) && (
|
|
52
52
|
<div className="mb-12 text-center">
|
|
53
53
|
{title && (
|
|
54
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
54
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
55
55
|
{title}
|
|
56
56
|
</h2>
|
|
57
57
|
)}
|
|
@@ -44,7 +44,7 @@ export function TextContentBlock({
|
|
|
44
44
|
|
|
45
45
|
// Build section classes with background and custom className
|
|
46
46
|
const sectionClasses = buildSectionClasses(
|
|
47
|
-
'py-16 px-4 md:py-24',
|
|
47
|
+
'py-16 px-4 @md:py-24',
|
|
48
48
|
{ backgroundColor, className }
|
|
49
49
|
)
|
|
50
50
|
|
|
@@ -58,7 +58,7 @@ export function TextContentBlock({
|
|
|
58
58
|
maxWidthClasses[maxWidth],
|
|
59
59
|
alignmentClasses[alignment]
|
|
60
60
|
)}>
|
|
61
|
-
<h2 className="text-3xl font-bold md:text-4xl">
|
|
61
|
+
<h2 className="text-3xl font-bold @md:text-4xl">
|
|
62
62
|
{title}
|
|
63
63
|
</h2>
|
|
64
64
|
</div>
|
|
@@ -32,7 +32,7 @@ export function TimelineBlock({
|
|
|
32
32
|
}: TimelineBlockProps) {
|
|
33
33
|
// Build section classes with background and custom className
|
|
34
34
|
const sectionClasses = buildSectionClasses(
|
|
35
|
-
'py-16 px-4 md:py-24',
|
|
35
|
+
'py-16 px-4 @md:py-24',
|
|
36
36
|
{ backgroundColor, className }
|
|
37
37
|
)
|
|
38
38
|
|
|
@@ -46,7 +46,7 @@ export function TimelineBlock({
|
|
|
46
46
|
{(title || subtitle) && (
|
|
47
47
|
<div className="mb-16 text-center">
|
|
48
48
|
{title && (
|
|
49
|
-
<h2 className="mb-4 text-4xl font-bold md:text-5xl">
|
|
49
|
+
<h2 className="mb-4 text-4xl font-bold @md:text-5xl">
|
|
50
50
|
{title}
|
|
51
51
|
</h2>
|
|
52
52
|
)}
|
|
@@ -96,10 +96,10 @@ function VerticalTimeline({
|
|
|
96
96
|
<div className="relative">
|
|
97
97
|
{/* Connector Line */}
|
|
98
98
|
{showConnector && (
|
|
99
|
-
<div className="absolute left-1/2 top-0 bottom-0 w-0.5 bg-border -translate-x-1/2 hidden md:block" />
|
|
99
|
+
<div className="absolute left-1/2 top-0 bottom-0 w-0.5 bg-border -translate-x-1/2 hidden @md:block" />
|
|
100
100
|
)}
|
|
101
101
|
{showConnector && (
|
|
102
|
-
<div className="absolute left-8 top-0 bottom-0 w-0.5 bg-border md:hidden" />
|
|
102
|
+
<div className="absolute left-8 top-0 bottom-0 w-0.5 bg-border @md:hidden" />
|
|
103
103
|
)}
|
|
104
104
|
|
|
105
105
|
{/* Timeline Items */}
|
|
@@ -112,27 +112,27 @@ function VerticalTimeline({
|
|
|
112
112
|
key={index}
|
|
113
113
|
className={cn(
|
|
114
114
|
'relative flex items-center gap-8',
|
|
115
|
-
alternating ? 'md:justify-center' : 'md:justify-start md:pl-[50%]',
|
|
116
|
-
'justify-start pl-16 md:pl-0'
|
|
115
|
+
alternating ? '@md:justify-center' : '@md:justify-start @md:pl-[50%]',
|
|
116
|
+
'justify-start pl-16 @md:pl-0'
|
|
117
117
|
)}
|
|
118
118
|
>
|
|
119
119
|
{/* Mobile/Left Content */}
|
|
120
120
|
<div className={cn(
|
|
121
121
|
'flex-1',
|
|
122
|
-
alternating && !isLeft && 'md:text-right md:order-1',
|
|
123
|
-
!alternating && 'md:pl-8'
|
|
122
|
+
alternating && !isLeft && '@md:text-right @md:order-1',
|
|
123
|
+
!alternating && '@md:pl-8'
|
|
124
124
|
)}>
|
|
125
125
|
<TimelineItemContent item={item} variant={variant} align={alternating && !isLeft ? 'right' : 'left'} />
|
|
126
126
|
</div>
|
|
127
127
|
|
|
128
128
|
{/* Center Dot */}
|
|
129
|
-
<div className="absolute left-8 md:left-1/2 md:-translate-x-1/2 flex-shrink-0">
|
|
129
|
+
<div className="absolute left-8 @md:left-1/2 @md:-translate-x-1/2 flex-shrink-0">
|
|
130
130
|
<TimelineIcon item={item} />
|
|
131
131
|
</div>
|
|
132
132
|
|
|
133
133
|
{/* Desktop Spacer (for alternating layout) */}
|
|
134
134
|
{alternating && (
|
|
135
|
-
<div className="hidden md:block flex-1" />
|
|
135
|
+
<div className="hidden @md:block flex-1" />
|
|
136
136
|
)}
|
|
137
137
|
</div>
|
|
138
138
|
)
|
|
@@ -158,7 +158,7 @@ function HorizontalTimeline({
|
|
|
158
158
|
return (
|
|
159
159
|
<div className="relative">
|
|
160
160
|
{/* Mobile: Vertical Layout */}
|
|
161
|
-
<div className="md:hidden">
|
|
161
|
+
<div className="@md:hidden">
|
|
162
162
|
{showConnector && (
|
|
163
163
|
<div className="absolute left-8 top-0 bottom-0 w-0.5 bg-border" />
|
|
164
164
|
)}
|
|
@@ -175,7 +175,7 @@ function HorizontalTimeline({
|
|
|
175
175
|
</div>
|
|
176
176
|
|
|
177
177
|
{/* Desktop: Horizontal Layout */}
|
|
178
|
-
<div className="hidden md:block overflow-x-auto pb-4">
|
|
178
|
+
<div className="hidden @md:block overflow-x-auto pb-4">
|
|
179
179
|
<div className="relative min-w-max">
|
|
180
180
|
{/* Connector Line */}
|
|
181
181
|
{showConnector && (
|
|
@@ -151,13 +151,13 @@ export function VideoHeroBlock({
|
|
|
151
151
|
{/* Content Overlay */}
|
|
152
152
|
<div className="container relative z-10 mx-auto max-w-4xl text-center px-4 py-20 text-white">
|
|
153
153
|
{title && (
|
|
154
|
-
<h1 className="mb-6 text-5xl font-bold leading-tight md:text-6xl lg:text-7xl">
|
|
154
|
+
<h1 className="mb-6 text-5xl font-bold leading-tight @md:text-6xl @lg:text-7xl">
|
|
155
155
|
{title}
|
|
156
156
|
</h1>
|
|
157
157
|
)}
|
|
158
158
|
|
|
159
159
|
{content && (
|
|
160
|
-
<p className="mb-8 text-xl md:text-2xl opacity-90">
|
|
160
|
+
<p className="mb-8 text-xl @md:text-2xl opacity-90">
|
|
161
161
|
{content}
|
|
162
162
|
</p>
|
|
163
163
|
)}
|
|
@@ -187,17 +187,17 @@ export function VideoHeroBlock({
|
|
|
187
187
|
data-cy={sel('blocks.videoHero.container')}
|
|
188
188
|
>
|
|
189
189
|
<div className="container mx-auto">
|
|
190
|
-
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 items-center">
|
|
190
|
+
<div className="grid grid-cols-1 @lg:grid-cols-2 gap-8 items-center">
|
|
191
191
|
{/* Text Content */}
|
|
192
192
|
<div className="space-y-6">
|
|
193
193
|
{title && (
|
|
194
|
-
<h1 className="text-4xl font-bold leading-tight md:text-5xl lg:text-6xl">
|
|
194
|
+
<h1 className="text-4xl font-bold leading-tight @md:text-5xl @lg:text-6xl">
|
|
195
195
|
{title}
|
|
196
196
|
</h1>
|
|
197
197
|
)}
|
|
198
198
|
|
|
199
199
|
{content && (
|
|
200
|
-
<p className="text-lg md:text-xl text-gray-600">
|
|
200
|
+
<p className="text-lg @md:text-xl text-gray-600">
|
|
201
201
|
{content}
|
|
202
202
|
</p>
|
|
203
203
|
)}
|
|
@@ -236,13 +236,13 @@ export function VideoHeroBlock({
|
|
|
236
236
|
{/* Text Content */}
|
|
237
237
|
<div className="text-center mb-10 space-y-6">
|
|
238
238
|
{title && (
|
|
239
|
-
<h1 className="text-4xl font-bold leading-tight md:text-5xl lg:text-6xl">
|
|
239
|
+
<h1 className="text-4xl font-bold leading-tight @md:text-5xl @lg:text-6xl">
|
|
240
240
|
{title}
|
|
241
241
|
</h1>
|
|
242
242
|
)}
|
|
243
243
|
|
|
244
244
|
{content && (
|
|
245
|
-
<p className="text-lg md:text-xl text-gray-600 max-w-3xl mx-auto">
|
|
245
|
+
<p className="text-lg @md:text-xl text-gray-600 max-w-3xl mx-auto">
|
|
246
246
|
{content}
|
|
247
247
|
</p>
|
|
248
248
|
)}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@nextsparkjs/theme-default",
|
|
3
|
-
"version": "0.1.0-beta.
|
|
3
|
+
"version": "0.1.0-beta.68",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./config/theme.config.ts",
|
|
@@ -17,8 +17,8 @@
|
|
|
17
17
|
"react-dom": "^19.0.0",
|
|
18
18
|
"react-markdown": "^10.1.0",
|
|
19
19
|
"zod": "^4.0.0",
|
|
20
|
-
"@nextsparkjs/core": "0.1.0-beta.
|
|
21
|
-
"@nextsparkjs/testing": "0.1.0-beta.
|
|
20
|
+
"@nextsparkjs/core": "0.1.0-beta.68",
|
|
21
|
+
"@nextsparkjs/testing": "0.1.0-beta.68"
|
|
22
22
|
},
|
|
23
23
|
"nextspark": {
|
|
24
24
|
"type": "theme",
|
package/styles/globals.css
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
IMPORTS
|
|
13
13
|
============================================= */
|
|
14
14
|
@import "tailwindcss";
|
|
15
|
+
@plugin "@tailwindcss/container-queries";
|
|
15
16
|
@import "@nextsparkjs/core/styles/ui.css";
|
|
16
17
|
@import "@nextsparkjs/core/styles/utilities.css";
|
|
17
18
|
@import "@nextsparkjs/core/styles/docs.css";
|