@levo-so/blocks 0.1.54 → 0.1.59

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 (117) hide show
  1. package/package.json +2 -2
  2. package/src/blocks/about-us/about-us-1.schema.ts +14 -0
  3. package/src/blocks/about-us/about-us-1.tsx +4 -2
  4. package/src/blocks/about-us/about-us-2.schema.ts +48 -0
  5. package/src/blocks/about-us/about-us-2.tsx +6 -0
  6. package/src/blocks/blogs/blog-listing-1.schema.ts +10 -0
  7. package/src/blocks/blogs/blog-listing-2.schema.ts +42 -162
  8. package/src/blocks/blogs/blog-listing-2.tsx +7 -0
  9. package/src/blocks/blogs/blog-listing-3.schema.ts +9 -0
  10. package/src/blocks/blogs/blog-post-1.schema.ts +7 -1
  11. package/src/blocks/blogs/blog-post-1.tsx +1 -1
  12. package/src/blocks/blogs/blog-post-2.schema.ts +464 -28
  13. package/src/blocks/blogs/blog-post-2.tsx +6 -13
  14. package/src/blocks/blogs/blog-post-3.schema.ts +42 -0
  15. package/src/blocks/blogs/blog-post-3.tsx +4 -1
  16. package/src/blocks/calendar/calendar-1.schema.ts +537 -0
  17. package/src/blocks/calendar/calendar-1.tsx +145 -0
  18. package/src/blocks/cards/cards-10.schema.ts +52 -4
  19. package/src/blocks/cards/cards-10.tsx +13 -1
  20. package/src/blocks/cards/cards-14.schema.ts +532 -0
  21. package/src/blocks/cards/cards-14.tsx +54 -0
  22. package/src/blocks/cards/cards-15.schema.ts +277 -0
  23. package/src/blocks/cards/cards-15.tsx +40 -0
  24. package/src/blocks/cards/cards-6.schema.ts +46 -0
  25. package/src/blocks/cards/cards-6.tsx +27 -1
  26. package/src/blocks/cards/cards-7.tsx +2 -0
  27. package/src/blocks/carousel/carousel-2.schema.ts +1128 -0
  28. package/src/blocks/carousel/carousel-2.tsx +159 -0
  29. package/src/blocks/content/content-5.schema.ts +112 -6
  30. package/src/blocks/content/content-5.tsx +19 -3
  31. package/src/blocks/content/content-6.schema.ts +16 -3
  32. package/src/blocks/content/content-6.tsx +1 -0
  33. package/src/blocks/content/content-8.schema.ts +125 -0
  34. package/src/blocks/content/content-8.tsx +27 -0
  35. package/src/blocks/content/content-9.schema.ts +2729 -0
  36. package/src/blocks/content/content-9.tsx +91 -0
  37. package/src/blocks/cta/cta-2.schema.ts +46 -4
  38. package/src/blocks/cta/cta-2.tsx +9 -1
  39. package/src/blocks/embed/embed-1.schema.ts +100 -0
  40. package/src/blocks/event/ClientOnly.tsx +27 -0
  41. package/src/blocks/event/event-details.tsx +10 -3
  42. package/src/blocks/event/event-listing-3.tsx +9 -2
  43. package/src/blocks/event/event-listing-4.tsx +11 -2
  44. package/src/blocks/event/event-listing.tsx +11 -4
  45. package/src/blocks/faq/faq-1.schema.ts +58 -1
  46. package/src/blocks/faq/faq-1.tsx +18 -1
  47. package/src/blocks/faq/faq-2.tsx +2 -1
  48. package/src/blocks/faq/faq-3.schema.ts +6 -1
  49. package/src/blocks/faq/faq-3.tsx +1 -0
  50. package/src/blocks/features/features-1/features-1.schema.ts +2 -0
  51. package/src/blocks/features/features-1/variants/index.ts +2 -0
  52. package/src/blocks/features/features-1/variants/stylized-cards-v3.ts +451 -0
  53. package/src/blocks/features/features-4.schema.ts +358 -20
  54. package/src/blocks/features/features-4.tsx +3 -1
  55. package/src/blocks/features/features-6.tsx +2 -0
  56. package/src/blocks/filter-listing/filter-listing-1.schema.ts +614 -0
  57. package/src/blocks/filter-listing/filter-listing-1.tsx +128 -0
  58. package/src/blocks/footer/footer-6.schema.ts +2 -2
  59. package/src/blocks/hero/hero-11.schema.ts +849 -0
  60. package/src/blocks/hero/hero-11.tsx +59 -0
  61. package/src/blocks/hero/hero-12.schema.ts +712 -0
  62. package/src/blocks/hero/hero-12.tsx +76 -0
  63. package/src/blocks/hero/hero-13.schema.ts +238 -0
  64. package/src/blocks/hero/hero-13.tsx +31 -0
  65. package/src/blocks/hero/hero-4.tsx +2 -0
  66. package/src/blocks/hero/hero-5.tsx +2 -0
  67. package/src/blocks/hero/hero-7.tsx +2 -1
  68. package/src/blocks/hero/hero-8.tsx +2 -0
  69. package/src/blocks/hero/hero-9.schema.ts +5 -0
  70. package/src/blocks/hero/hero-9.tsx +2 -0
  71. package/src/blocks/index.ts +27 -0
  72. package/src/blocks/navbar/navbar-1.schema.ts +6 -6
  73. package/src/blocks/navbar/navbar-1.tsx +6 -7
  74. package/src/blocks/navbar/navbar-2.schema.ts +9 -9
  75. package/src/blocks/navbar/navbar-2.tsx +7 -8
  76. package/src/blocks/navbar/navbar-3.schema.ts +9 -9
  77. package/src/blocks/navbar/navbar-3.tsx +139 -114
  78. package/src/blocks/polling/polling-1.schema.ts +134 -0
  79. package/src/blocks/polling/polling-1.tsx +466 -0
  80. package/src/blocks/products/products-listing-2.schema.ts +596 -0
  81. package/src/blocks/products/products-listing-2.tsx +56 -0
  82. package/src/blocks/products/products-listing-3.schema.ts +818 -0
  83. package/src/blocks/products/products-listing-3.tsx +125 -0
  84. package/src/blocks/profile/profile-2.schema.ts +505 -0
  85. package/src/blocks/profile/profile-2.tsx +64 -0
  86. package/src/blocks/profile/profile-3.schema.ts +867 -0
  87. package/src/blocks/profile/profile-3.tsx +98 -0
  88. package/src/blocks/services/service-1.schema.ts +1743 -0
  89. package/src/blocks/services/service-1.tsx +139 -0
  90. package/src/blocks/services/service-2.schema.ts +433 -0
  91. package/src/blocks/services/service-2.tsx +98 -0
  92. package/src/blocks/services/service-3.schema.ts +631 -0
  93. package/src/blocks/services/service-3.tsx +135 -0
  94. package/src/blocks/tabs/tab-1.schema.ts +831 -0
  95. package/src/blocks/tabs/tab-1.tsx +126 -0
  96. package/src/blocks/tabs/tab-2.schema.ts +767 -0
  97. package/src/blocks/tabs/tab-2.tsx +60 -0
  98. package/src/blocks/team/team-3.schema.ts +5 -1
  99. package/src/blocks/team/team-3.tsx +7 -0
  100. package/src/blocks/team/team-4.schema.ts +17 -13
  101. package/src/blocks/team/team-4.tsx +4 -1
  102. package/src/blocks/team/team-5.schema.ts +369 -0
  103. package/src/blocks/team/team-5.tsx +38 -0
  104. package/src/blocks/testimonial/testimonial-1.tsx +0 -1
  105. package/src/blocks/testimonial/testimonial-2.tsx +2 -1
  106. package/src/blocks/testimonial/testimonial-3.tsx +2 -0
  107. package/src/blocks/testimonial/testimonial-4.tsx +2 -1
  108. package/src/blocks/testimonial/testimonial-5.tsx +2 -0
  109. package/src/blocks/testimonial/testimonial-6.tsx +2 -1
  110. package/src/blocks/testimonial/testimonial-7.schema.ts +438 -0
  111. package/src/blocks/testimonial/testimonial-7.tsx +125 -0
  112. package/src/blocks/timeline/timeline-1.schema.ts +741 -0
  113. package/src/blocks/timeline/timeline-1.tsx +52 -0
  114. package/src/blocks/users/edit-profile.schema.ts +294 -0
  115. package/src/blocks/users/edit-profile.tsx +184 -0
  116. package/src/schemas/blocks.ts +64 -12
  117. package/src/schemas/categories.ts +36 -0
@@ -0,0 +1,76 @@
1
+ import {
2
+ Box,
3
+ Carousel,
4
+ CarouselContent,
5
+ CarouselItem,
6
+ Container,
7
+ Heading,
8
+ Icon,
9
+ Image,
10
+ Section,
11
+ Typography,
12
+ type ILevoBlockBaseProps,
13
+ } from "@levo-so/studio";
14
+ import React from "react";
15
+
16
+ import type { IHero12Content } from "./hero-12.schema";
17
+
18
+ const Hero12: React.FC<ILevoBlockBaseProps<IHero12Content>> = ({ content }) => (
19
+ <Section elementKey="layout">
20
+ <Container elementKey="container">
21
+ <Box elementKey="content_wrapper">
22
+ {/* Header Container */}
23
+ <Box elementKey="header_container">
24
+ <Container elementKey="title_container">
25
+ <Box elementKey="label_container">
26
+ <Box elementKey="label_divider" />
27
+ <Typography elementKey="label" />
28
+ </Box>
29
+ <Heading elementKey="title" />
30
+ </Container>
31
+ <Typography elementKey="description" />
32
+ </Box>
33
+
34
+ {/* Bottom Container */}
35
+ <Box elementKey="bottom_container">
36
+ <Carousel
37
+ elementKey="images_levoGroup"
38
+ data-levo_group
39
+ opts={{
40
+ loop: true,
41
+ }}
42
+ >
43
+ <CarouselContent>
44
+ {(content.images ?? []).map((_, index) => (
45
+ <CarouselItem
46
+ key={`hero-12-image-${index}`}
47
+ data-levo_group_item
48
+ >
49
+ <Image elementKey={`images.${index}.image`} alt="Team" />
50
+ </CarouselItem>
51
+ ))}
52
+ </CarouselContent>
53
+ </Carousel>
54
+
55
+ <Box elementKey="stats_levoGroup" data-levo_group>
56
+ {(content.stats ?? []).map((_: any, index: number) => (
57
+ <Box
58
+ key={`hero-12-stat-${index}`}
59
+ elementKey={`stats.${index}.stat_box`}
60
+ data-levo_group_item
61
+ >
62
+ <Box elementKey={`stats.${index}.number_container`}>
63
+ <Icon elementKey={`stats.${index}.icon`} />
64
+ <Typography elementKey={`stats.${index}.number`} />
65
+ </Box>
66
+ <Typography elementKey={`stats.${index}.label`} />
67
+ </Box>
68
+ ))}
69
+ </Box>
70
+ </Box>
71
+ </Box>
72
+ </Container>
73
+ </Section>
74
+ );
75
+
76
+ export default Hero12;
@@ -0,0 +1,238 @@
1
+ import type { IBlock } from "@levo-so/studio";
2
+
3
+ const DEFAULT_CONTENT = {
4
+ layout: null,
5
+ container: null,
6
+ description:
7
+ "<p>Get expert ERP insights, success stories, and growth tips straight to your inbox. No clutter. Just clarity.</p>",
8
+ title:
9
+ "Save 100+ hours in Research. Get your Free NetSuite Implementation Guide.",
10
+ };
11
+
12
+ export type IHero13Content = typeof DEFAULT_CONTENT;
13
+
14
+ export const Hero13: IBlock = {
15
+ category_id: "hero",
16
+ title: "Hero 13",
17
+ key: "hero-13",
18
+ version: "v1",
19
+ prompt_description:
20
+ "Two-column layout with bold headline, brief supporting text on the left, paired with a call-to-action button on the right. Similar to Contact Us 1 but optimized for hero sections.",
21
+ content_schema: [
22
+ {
23
+ key: "layout",
24
+ label: "Layout",
25
+ field_interface: "LayoutWidget",
26
+ hint: {
27
+ prompt_description:
28
+ "Overall layout definition. Used to structure the block as a two-column split: left for text content, right for call-to-action. No content needed.",
29
+ },
30
+ },
31
+ {
32
+ key: "container",
33
+ label: "Container",
34
+ field_interface: "ContainerWidget",
35
+ hint: {
36
+ prompt_description:
37
+ "Main outer container for spacing and alignment. No direct content—responsible for the block's padding, background, and width.",
38
+ },
39
+ },
40
+ {
41
+ key: "textWrapper",
42
+ label: "Text Wrapper",
43
+ field_interface: "BoxWidget",
44
+ hint: {
45
+ prompt_description:
46
+ "Box to organize and group the title and description on the left side. No text content—used solely for grouping and alignment.",
47
+ },
48
+ },
49
+ {
50
+ key: "title",
51
+ label: "Title",
52
+ field_interface: "HeadingWidget",
53
+ hint: {
54
+ prompt_description:
55
+ "Main headline positioned at the top left. Aim for a direct, inspiring, action-oriented message encouraging users to take action. Tone is confident, professional, and motivating.",
56
+ min_characters: 8,
57
+ max_characters: 28,
58
+ },
59
+ },
60
+ {
61
+ key: "description",
62
+ label: "Description",
63
+ field_interface: "TypographyWidget",
64
+ hint: {
65
+ prompt_description:
66
+ "Short explanatory paragraph under the headline providing additional context or reason to get started. Tone is supportive, convincing, and concise.",
67
+ min_characters: 30,
68
+ max_characters: 90,
69
+ },
70
+ },
71
+ {
72
+ key: "formWrapper",
73
+ label: "Form Wrapper",
74
+ field_interface: "BoxWidget",
75
+ hint: {
76
+ prompt_description:
77
+ "Container for the call-to-action button on the right side. Used for positioning and alignment of the action element.",
78
+ },
79
+ },
80
+ {
81
+ key: "form_title",
82
+ label: "Form Title",
83
+ field_interface: "TypographyWidget",
84
+ hint: {
85
+ prompt_description:
86
+ "Short explanatory paragraph under the headline providing additional context or reason to get started. Tone is supportive, convincing, and concise.",
87
+ min_characters: 30,
88
+ max_characters: 90,
89
+ },
90
+ },
91
+ {
92
+ key: "contact_form",
93
+ label: "Contact Form",
94
+ field_interface: "FormWidget",
95
+ },
96
+ ],
97
+ layouts: [
98
+ {
99
+ key: "default",
100
+ title: "Default",
101
+ styles: {
102
+ layout: {
103
+ "padding-top": "5xl",
104
+ "padding-bottom": "5xl",
105
+ "padding-left": "3xl",
106
+ "padding-right": "3xl",
107
+ width: "100%",
108
+ position: "relative",
109
+ "min-height": "600px",
110
+ display: "flex",
111
+ "align-items": "center",
112
+ tablet: {
113
+ "padding-top": "4xl",
114
+ "padding-bottom": "4xl",
115
+ "padding-left": "2xl",
116
+ "padding-right": "2xl",
117
+ "min-height": "500px",
118
+ },
119
+ mobile: {
120
+ "padding-top": "3xl",
121
+ "padding-bottom": "3xl",
122
+ "padding-left": "base",
123
+ "padding-right": "base",
124
+ "min-height": "400px",
125
+ },
126
+ "background-image":
127
+ 'url("https://static.levostg.online/W6OEVMW8/Frame48097095-2EYwP5YZ0Tovp-1920w.webp")',
128
+ "background-position": "50% 50%",
129
+ "background-size": "cover",
130
+ },
131
+
132
+ container: {
133
+ "margin-left": "auto",
134
+ "margin-right": "auto",
135
+ "z-index": "1",
136
+ display: "flex",
137
+ "flex-direction": "row",
138
+ "justify-content": "space-between",
139
+ "padding-left": "none",
140
+ "padding-right": "none",
141
+ tablet: {
142
+ "flex-direction": "column",
143
+ },
144
+ },
145
+ description: {
146
+ "font-size": "lg",
147
+ color: "text-1",
148
+ "line-height": "1.6",
149
+ margin: "0",
150
+ tablet: {
151
+ "font-size": "base",
152
+ },
153
+ },
154
+
155
+ form_title: {
156
+ "font-size": "xl",
157
+ "font-weight": 600,
158
+ color: "text-1",
159
+ margin: "0",
160
+ "text-align": "center",
161
+ },
162
+ form_button: {
163
+ "background-color": "brand",
164
+ color: "text-1",
165
+ "padding-top": "base",
166
+ "padding-bottom": "base",
167
+ "padding-left": "2xl",
168
+ "padding-right": "2xl",
169
+ "border-radius": "base",
170
+ "font-weight": 600,
171
+ width: "100%",
172
+ "text-align": "center",
173
+ },
174
+ features_section: {
175
+ "padding-top": "4xl",
176
+ "padding-bottom": "4xl",
177
+ "padding-left": "3xl",
178
+ "padding-right": "3xl",
179
+ width: "100%",
180
+ tablet: {
181
+ "padding-top": "3xl",
182
+ "padding-bottom": "3xl",
183
+ "padding-left": "2xl",
184
+ "padding-right": "2xl",
185
+ },
186
+ mobile: {
187
+ "padding-top": "2xl",
188
+ "padding-bottom": "2xl",
189
+ "padding-left": "base",
190
+ "padding-right": "base",
191
+ },
192
+ },
193
+
194
+ textWrapper: {
195
+ width: "55%",
196
+ tablet: {
197
+ width: "100%",
198
+ },
199
+ },
200
+ contentWrapper: {
201
+ display: "flex",
202
+ },
203
+ formWrapper: {
204
+ "background-color": "background-3",
205
+ "padding-left": "base",
206
+ "padding-right": "base",
207
+ "padding-top": "base",
208
+ "padding-bottom": "base",
209
+ "border-radius": "2xl",
210
+ width: "500px",
211
+ position: "absolute",
212
+ right: "80px",
213
+ "z-index": "9999",
214
+ "box-shadow": {
215
+ x: 0,
216
+ y: 4,
217
+ blur: 8,
218
+ spread: 3,
219
+ color: "#000000",
220
+ opacity: 12,
221
+ },
222
+ tablet: {
223
+ "background-color": "page",
224
+ position: "static",
225
+ width: "100%",
226
+ "margin-top": "none",
227
+ },
228
+ },
229
+ contact_form: {
230
+ display: "block",
231
+ "flex-direction": "column",
232
+ },
233
+ },
234
+ content: DEFAULT_CONTENT,
235
+ config: {},
236
+ },
237
+ ],
238
+ };
@@ -0,0 +1,31 @@
1
+ import {
2
+ type ILevoBlockBaseProps,
3
+ Box,
4
+ Container,
5
+ Form,
6
+ Heading,
7
+ Section,
8
+ Typography,
9
+ } from "@levo-so/studio";
10
+
11
+ import type { IHero13Content } from "./hero-13.schema";
12
+
13
+ const Hero13: React.FC<ILevoBlockBaseProps<IHero13Content>> = () => (
14
+ <Section elementKey="layout">
15
+ <Container elementKey="container">
16
+ {/* Left Content Container */}
17
+ <Box elementKey="textWrapper">
18
+ <Heading elementKey="title" />
19
+ <Typography elementKey="description" />
20
+ </Box>
21
+
22
+ {/* Right Form Container */}
23
+ <Box elementKey="formWrapper">
24
+ <Typography elementKey="form_title" />
25
+ <Form elementKey="contact_form" />
26
+ </Box>
27
+ </Container>
28
+ </Section>
29
+ );
30
+
31
+ export default Hero13;
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { CarouselApi } from "@levo-so/studio";
2
4
  import {
3
5
  type ILevoBlockBaseProps,
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { CarouselApi } from "@levo-so/studio";
2
4
  import {
3
5
  type ILevoBlockBaseProps,
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { CarouselApi } from "@levo-so/studio";
2
4
  import {
3
5
  type ILevoBlockBaseProps,
@@ -8,7 +10,6 @@ import {
8
10
  Container,
9
11
  Heading,
10
12
  Icon,
11
- Image,
12
13
  Section,
13
14
  Typography,
14
15
  } from "@levo-so/studio";
@@ -1,3 +1,5 @@
1
+ "use client";
2
+
1
3
  import type { CarouselApi } from "@levo-so/studio";
2
4
  import {
3
5
  type ILevoBlockBaseProps,
@@ -174,6 +174,11 @@ export const Hero9: IBlock = {
174
174
  "Individual statistic container with proper vertical alignment for value and label.",
175
175
  },
176
176
  },
177
+ {
178
+ key: "icon",
179
+ label: "Icon",
180
+ field_interface: "IconWidget",
181
+ },
177
182
  {
178
183
  key: "value",
179
184
  label: "Stat Value",
@@ -7,6 +7,7 @@ import {
7
7
  type ILevoBlockBaseProps,
8
8
  Section,
9
9
  Typography,
10
+ Icon,
10
11
  } from "@levo-so/studio";
11
12
  import React from "react";
12
13
 
@@ -31,6 +32,7 @@ const Hero9: React.FC<ILevoBlockBaseProps<IHero9Content>> = ({ content }) => (
31
32
  data-levo_group_item
32
33
  elementKey={`stats.${index}.stat_wrapper`}
33
34
  >
35
+ <Icon elementKey={`stats.${index}.icon`} />
34
36
  <Heading elementKey={`stats.${index}.value`} />
35
37
  <Typography elementKey={`stats.${index}.label`} />
36
38
  </Box>
@@ -10,6 +10,7 @@ export const blocks: Record<string, BlockComponent> = {
10
10
  "blog-post-1:v1": lazy(() => import("./blogs/blog-post-1")),
11
11
  "blog-post-2:v1": lazy(() => import("./blogs/blog-post-2")),
12
12
  "blog-post-3:v1": lazy(() => import("./blogs/blog-post-3")),
13
+ "calendar-1:v1": lazy(() => import("./calendar/calendar-1")),
13
14
  "cards-2:v1": lazy(() => import("./cards/cards-2")),
14
15
  "cards-3:v1": lazy(() => import("./cards/cards-3")),
15
16
  "cards-4:v1": lazy(() => import("./cards/cards-4")),
@@ -21,6 +22,8 @@ export const blocks: Record<string, BlockComponent> = {
21
22
  "cards-11:v1": lazy(() => import("./cards/cards-11")),
22
23
  "cards-12:v1": lazy(() => import("./cards/cards-12")),
23
24
  "cards-13:v1": lazy(() => import("./cards/cards-13")),
25
+ "cards-14:v1": lazy(() => import("./cards/cards-14")),
26
+ "cards-15:v1": lazy(() => import("./cards/cards-15")),
24
27
  "contact-us-1:v1": lazy(() => import("./contact-us/contact-us-1")),
25
28
  "contact-us-2:v1": lazy(() => import("./contact-us/contact-us-2")),
26
29
  "content-1:v1": lazy(() => import("./content/content-1")),
@@ -30,6 +33,9 @@ export const blocks: Record<string, BlockComponent> = {
30
33
  "content-5:v1": lazy(() => import("./content/content-5")),
31
34
  "content-6:v1": lazy(() => import("./content/content-6")),
32
35
  "content-7:v1": lazy(() => import("./content/content-7")),
36
+ "content-8:v1": lazy(() => import("./content/content-8")),
37
+ "content-9:v1": lazy(() => import("./content/content-9")),
38
+ "timeline-1:v1": lazy(() => import("./timeline/timeline-1")),
33
39
  "cta-1:v1": lazy(() => import("./cta/cta-1")),
34
40
  "cta-2:v1": lazy(() => import("./cta/cta-2")),
35
41
  "cta-3:v1": lazy(() => import("./cta/cta-3")),
@@ -54,6 +60,9 @@ export const blocks: Record<string, BlockComponent> = {
54
60
  "footer-4:v1": lazy(() => import("./footer/footer-4")),
55
61
  "footer-5:v1": lazy(() => import("./footer/footer-5")),
56
62
  "footer-6:v1": lazy(() => import("./footer/footer-6")),
63
+ "filter-listing-1:v1": lazy(
64
+ () => import("./filter-listing/filter-listing-1"),
65
+ ),
57
66
  "hero-1:v1": lazy(() => import("./hero/hero-1")),
58
67
  "hero-2:v1": lazy(() => import("./hero/hero-2")),
59
68
  "hero-4:v1": lazy(() => import("./hero/hero-4")),
@@ -63,27 +72,45 @@ export const blocks: Record<string, BlockComponent> = {
63
72
  "hero-8:v1": lazy(() => import("./hero/hero-8")),
64
73
  "hero-9:v1": lazy(() => import("./hero/hero-9")),
65
74
  "hero-10:v1": lazy(() => import("./hero/hero-10")),
75
+ "hero-11:v1": lazy(() => import("./hero/hero-11")),
76
+ "hero-12:v1": lazy(() => import("./hero/hero-12")),
77
+ "hero-13:v1": lazy(() => import("./hero/hero-13")),
66
78
  "logos-1:v1": lazy(() => import("./logos/logos-1")),
67
79
  "navbar-1:v1": lazy(() => import("./navbar/navbar-1")),
68
80
  "navbar-2:v1": lazy(() => import("./navbar/navbar-2")),
69
81
  "navbar-3:v1": lazy(() => import("./navbar/navbar-3")),
70
82
  "pricing-1:v1": lazy(() => import("./pricing/pricing-1")),
83
+ "polling-1:v1": lazy(() => import("./polling/polling-1")),
71
84
  "products-listing-1:v1": lazy(() => import("./products/products-listing-1")),
85
+ "products-listing-2:v1": lazy(() => import("./products/products-listing-2")),
86
+ "products-listing-3:v1": lazy(() => import("./products/products-listing-3")),
72
87
  "stats-1:v1": lazy(() => import("./stats/stats-1")),
73
88
  "stats-2:v1": lazy(() => import("./stats/stats-2")),
74
89
  "team-1:v1": lazy(() => import("./team/team-1")),
75
90
  "team-2:v1": lazy(() => import("./team/team-2")),
76
91
  "team-3:v1": lazy(() => import("./team/team-3")),
77
92
  "team-4:v1": lazy(() => import("./team/team-4")),
93
+ "team-5:v1": lazy(() => import("./team/team-5")),
94
+
78
95
  "testimonial-1:v1": lazy(() => import("./testimonial/testimonial-1")),
79
96
  "testimonial-2:v1": lazy(() => import("./testimonial/testimonial-2")),
80
97
  "testimonial-3:v1": lazy(() => import("./testimonial/testimonial-3")),
81
98
  "testimonial-4:v1": lazy(() => import("./testimonial/testimonial-4")),
82
99
  "testimonial-5:v1": lazy(() => import("./testimonial/testimonial-5")),
83
100
  "testimonial-6:v1": lazy(() => import("./testimonial/testimonial-6")),
101
+ "testimonial-7:v1": lazy(() => import("./testimonial/testimonial-7")),
84
102
  "terms-and-conditions-1:v1": lazy(
85
103
  () => import("./termsAndPrivacy/terms-and-conditions-1"),
86
104
  ),
87
105
  "carousel-1:v1": lazy(() => import("./carousel/carousel-1")),
106
+ "carousel-2:v1": lazy(() => import("./carousel/carousel-2")),
88
107
  "profile-1:v1": lazy(() => import("./profile/profile-1")),
108
+ "profile-2:v1": lazy(() => import("./profile/profile-2")),
109
+ "profile-3:v1": lazy(() => import("./profile/profile-3")),
110
+ "edit-profile:v1": lazy(() => import("./users/edit-profile")),
111
+ "service-2:v1": lazy(() => import("./services/service-2")),
112
+ "service-3:v1": lazy(() => import("./services/service-3")),
113
+ "tab-1:v1": lazy(() => import("./tabs/tab-1")),
114
+ "tab-2:v1": lazy(() => import("./tabs/tab-2")),
115
+ "service-1:v1": lazy(() => import("./services/service-1")),
89
116
  };
@@ -177,7 +177,7 @@ export const Navbar1: IBlock = {
177
177
  {
178
178
  key: "nav-item-title",
179
179
  label: "Nav Item Title",
180
- field_interface: "HeadingWidget",
180
+ field_interface: "TypographyWidget",
181
181
  },
182
182
  {
183
183
  key: "nav-item-dropdown-trigger",
@@ -187,7 +187,7 @@ export const Navbar1: IBlock = {
187
187
  {
188
188
  key: "nav-item-dropdown-trigger-title",
189
189
  label: "Nav Item Dropdown Trigger Title",
190
- field_interface: "HeadingWidget",
190
+ field_interface: "TypographyWidget",
191
191
  },
192
192
  {
193
193
  key: "sub-items",
@@ -218,7 +218,7 @@ export const Navbar1: IBlock = {
218
218
  {
219
219
  key: "sub-item-title",
220
220
  label: "Sub Item Title",
221
- field_interface: "HeadingWidget",
221
+ field_interface: "TypographyWidget",
222
222
  },
223
223
  {
224
224
  key: "sub-item-description",
@@ -271,7 +271,7 @@ export const Navbar1: IBlock = {
271
271
  {
272
272
  key: "nav-item-title",
273
273
  label: "Nav Item Title",
274
- field_interface: "HeadingWidget",
274
+ field_interface: "TypographyWidget",
275
275
  },
276
276
  {
277
277
  key: "nav-item-dropdown-container",
@@ -286,7 +286,7 @@ export const Navbar1: IBlock = {
286
286
  {
287
287
  key: "nav-item-dropdown-trigger-title",
288
288
  label: "Nav Item Dropdown Trigger Title",
289
- field_interface: "HeadingWidget",
289
+ field_interface: "TypographyWidget",
290
290
  },
291
291
  {
292
292
  key: "sub-items",
@@ -322,7 +322,7 @@ export const Navbar1: IBlock = {
322
322
  {
323
323
  key: "sub-item-title",
324
324
  label: "Sub Item Title",
325
- field_interface: "HeadingWidget",
325
+ field_interface: "TypographyWidget",
326
326
  },
327
327
  {
328
328
  key: "sub-item-description",
@@ -6,7 +6,6 @@ import type { ILevoBlockBaseProps } from "@levo-so/studio";
6
6
  import {
7
7
  Box,
8
8
  Button,
9
- Heading,
10
9
  Image,
11
10
  PopoverRoot,
12
11
  PopoverContent,
@@ -41,7 +40,7 @@ const DropdownNavigationItem: React.FC<{
41
40
  onMouseEnter={() => setIsDropdownPopoverOpen(true)}
42
41
  data-levo_group_item
43
42
  >
44
- <Heading
43
+ <Typography
45
44
  elementKey={`desktop-nav-menu.${index}.nav-item-dropdown-trigger-title`}
46
45
  />
47
46
  <ChevronDown
@@ -89,7 +88,7 @@ const DropdownNavigationItem: React.FC<{
89
88
  <Box
90
89
  elementKey={`desktop-nav-menu.${index}.sub-items.${idx}.sub-item-text-container`}
91
90
  >
92
- <Heading
91
+ <Typography
93
92
  elementKey={`desktop-nav-menu.${index}.sub-items.${idx}.sub-item-title`}
94
93
  />
95
94
  <Typography
@@ -118,7 +117,7 @@ const DesktopNavItem: React.FC<{
118
117
  <DropdownNavigationItem navItem={navItem} index={index} />
119
118
  )}
120
119
  {!isNavItemDropdown && (
121
- <Heading
120
+ <Typography
122
121
  data-levo_group_item
123
122
  elementKey={`desktop-nav-menu.${index}.nav-item-title`}
124
123
  />
@@ -160,7 +159,7 @@ const DropdownNavigationItemMobile: React.FC<{
160
159
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger`}
161
160
  onClick={() => setIsDropdownOpen((prev) => !prev)}
162
161
  >
163
- <Heading
162
+ <Typography
164
163
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger-title`}
165
164
  />
166
165
  <ChevronDown
@@ -213,7 +212,7 @@ const DropdownNavigationItemMobile: React.FC<{
213
212
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-title-container`}
214
213
  onClick={() => setIsOpen(false)}
215
214
  >
216
- <Heading
215
+ <Typography
217
216
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-title`}
218
217
  />
219
218
  </Box>
@@ -256,7 +255,7 @@ const MobileNavItem: React.FC<{
256
255
  elementKey={`mobile-nav-menu.${index}.nav-item-title-container`}
257
256
  onClick={() => setIsOpen(false)}
258
257
  >
259
- <Heading elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
258
+ <Typography elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
260
259
  </Box>
261
260
  )}
262
261
  </React.Fragment>