@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,438 @@
1
+ import type { IBlock } from "@levo-so/studio";
2
+
3
+ const DUMMY_ICON = {
4
+ kind: "icon",
5
+ data: {
6
+ id: "star",
7
+ label: "Star",
8
+ tags: ["custom", "directional", "star", "support-like-question"],
9
+ svgCode:
10
+ '<svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">\n<path d="M17.6601 22.6701C17.1301 22.6701 16.4501 22.5001 15.6001 22.0001L12.6101 20.2301C12.3001 20.0501 11.7001 20.0501 11.4001 20.2301L8.40012 22.0001C6.63012 23.0501 5.59012 22.6301 5.12012 22.2901C4.66012 21.9501 3.94012 21.0801 4.41012 19.0801L5.12012 16.0101C5.20012 15.6901 5.04012 15.1401 4.80012 14.9001L2.32012 12.4201C1.08012 11.1801 1.18012 10.1201 1.35012 9.60007C1.52012 9.08007 2.06012 8.16007 3.78012 7.87007L6.97012 7.34007C7.27012 7.29007 7.70012 6.97007 7.83012 6.70007L9.60012 3.17007C10.4001 1.56007 11.4501 1.32007 12.0001 1.32007C12.5501 1.32007 13.6001 1.56007 14.4001 3.17007L16.1601 6.69007C16.3001 6.96007 16.7301 7.28007 17.0301 7.33007L20.2201 7.86007C21.9501 8.15007 22.4901 9.07007 22.6501 9.59007C22.8101 10.1101 22.9101 11.1701 21.6801 12.4101L19.2001 14.9001C18.9601 15.1401 18.8101 15.6801 18.8801 16.0101L19.5901 19.0801C20.0501 21.0801 19.3401 21.9501 18.8801 22.2901C18.6301 22.4701 18.2301 22.6701 17.6601 22.6701ZM12.0001 18.5901C12.4901 18.5901 12.9801 18.7101 13.3701 18.9401L16.3601 20.7101C17.2301 21.2301 17.7801 21.2301 17.9901 21.0801C18.2001 20.9301 18.3501 20.4001 18.1301 19.4201L17.4201 16.3501C17.2301 15.5201 17.5401 14.4501 18.1401 13.8401L20.6201 11.3601C21.1101 10.8701 21.3301 10.3901 21.2301 10.0601C21.1201 9.73007 20.6601 9.46007 19.9801 9.35007L16.7901 8.82007C16.0201 8.69007 15.1801 8.07007 14.8301 7.37007L13.0701 3.85007C12.7501 3.21007 12.3501 2.83007 12.0001 2.83007C11.6501 2.83007 11.2501 3.21007 10.9401 3.85007L9.17012 7.37007C8.82012 8.07007 7.98012 8.69007 7.21012 8.82007L4.03012 9.35007C3.35012 9.46007 2.89012 9.73007 2.78012 10.0601C2.67012 10.3901 2.90012 10.8801 3.39012 11.3601L5.87012 13.8401C6.47012 14.4401 6.78012 15.5201 6.59012 16.3501L5.88012 19.4201C5.65012 20.4101 5.81012 20.9301 6.02012 21.0801C6.23012 21.2301 6.77012 21.2201 7.65012 20.7101L10.6401 18.9401C11.0201 18.7101 11.5101 18.5901 12.0001 18.5901Z" fill="var(--color-icon-primary)"/>\n</svg>',
11
+ },
12
+ };
13
+
14
+ const DEFAULT_CONTENT = {
15
+ layout: null,
16
+ container: null,
17
+ header_container: null,
18
+ title: "Client Testimonials",
19
+ description:
20
+ "Hear what our valued customers have to say about their experience with our services",
21
+ testimonials_levoGroup: null,
22
+ testimonials: [
23
+ {
24
+ card: null,
25
+ content_container: null,
26
+ title_desc_box: null,
27
+ title: "Exceptional Service Quality",
28
+ description:
29
+ "The team delivered outstanding results that exceeded our expectations. Their attention to detail and professional approach made the entire process smooth and efficient.",
30
+ persona_container: null,
31
+ persona_name: "Sarah Johnson",
32
+ stars: [
33
+ {
34
+ star: DUMMY_ICON,
35
+ },
36
+ {
37
+ star: DUMMY_ICON,
38
+ },
39
+ {
40
+ star: DUMMY_ICON,
41
+ },
42
+ {
43
+ star: DUMMY_ICON,
44
+ },
45
+ {
46
+ star: DUMMY_ICON,
47
+ },
48
+ ],
49
+ },
50
+ {
51
+ card: null,
52
+ content_container: null,
53
+ title_desc_box: null,
54
+ title: "Professional Expertise",
55
+ description:
56
+ "Working with this team has been a game-changer for our business. Their expertise and innovative solutions helped us achieve remarkable results.",
57
+ persona_container: null,
58
+ persona_name: "Michael Chen",
59
+ stars: [
60
+ {
61
+ star: DUMMY_ICON,
62
+ },
63
+ {
64
+ star: DUMMY_ICON,
65
+ },
66
+ {
67
+ star: DUMMY_ICON,
68
+ },
69
+ {
70
+ star: DUMMY_ICON,
71
+ },
72
+ {
73
+ star: DUMMY_ICON,
74
+ },
75
+ ],
76
+ },
77
+ {
78
+ card: null,
79
+ content_container: null,
80
+ title_desc_box: null,
81
+ title: "Outstanding Results",
82
+ description:
83
+ "The transformation we experienced was remarkable. The team delivered exactly what they promised and went above and beyond our expectations.",
84
+ persona_container: null,
85
+ persona_name: "Emily Rodriguez",
86
+ stars: [
87
+ {
88
+ star: DUMMY_ICON,
89
+ },
90
+ {
91
+ star: DUMMY_ICON,
92
+ },
93
+ {
94
+ star: DUMMY_ICON,
95
+ },
96
+ {
97
+ star: DUMMY_ICON,
98
+ },
99
+ {
100
+ star: DUMMY_ICON,
101
+ },
102
+ ],
103
+ },
104
+ ],
105
+ "carousel-navigation-container": null,
106
+ "carousel-navigation": null,
107
+ "carousel-navigation-pill": null,
108
+ };
109
+
110
+ export type ITestimonial7Content = typeof DEFAULT_CONTENT;
111
+
112
+ export const Testimonial7: IBlock = {
113
+ category_id: "testimonial",
114
+ title: "Testimonial 7",
115
+ key: "testimonial-7",
116
+ version: "v1",
117
+ prompt_description:
118
+ "A testimonial block with header container and repeatable cards, each containing title, description, persona name and star ratings",
119
+ content_schema: [
120
+ {
121
+ key: "layout",
122
+ label: "Layout",
123
+ field_interface: "LayoutWidget",
124
+ },
125
+ {
126
+ key: "container",
127
+ label: "Container",
128
+ field_interface: "ContainerWidget",
129
+ },
130
+ {
131
+ key: "header_container",
132
+ label: "Header Container",
133
+ field_interface: "BoxWidget",
134
+ },
135
+ {
136
+ key: "title",
137
+ label: "Title",
138
+ field_interface: "HeadingWidget",
139
+ },
140
+ {
141
+ key: "description",
142
+ label: "Description",
143
+ field_interface: "TypographyWidget",
144
+ },
145
+ {
146
+ key: "testimonials",
147
+ label: "Testimonials",
148
+ field_interface: "CarouselWidget",
149
+ kind: "group",
150
+ fields: [
151
+ {
152
+ key: "card",
153
+ label: "Card",
154
+ field_interface: "BoxWidget",
155
+ },
156
+ {
157
+ key: "content_container",
158
+ label: "Content Container",
159
+ field_interface: "BoxWidget",
160
+ },
161
+ {
162
+ key: "title_desc_box",
163
+ label: "Title Description Box",
164
+ field_interface: "BoxWidget",
165
+ },
166
+ {
167
+ key: "title",
168
+ label: "Title",
169
+ field_interface: "TypographyWidget",
170
+ },
171
+ {
172
+ key: "description",
173
+ label: "Description",
174
+ field_interface: "TypographyWidget",
175
+ },
176
+ {
177
+ key: "persona_container",
178
+ label: "Persona Container",
179
+ field_interface: "BoxWidget",
180
+ },
181
+ {
182
+ key: "persona_name",
183
+ label: "Persona Name",
184
+ field_interface: "TypographyWidget",
185
+ },
186
+ {
187
+ key: "designation",
188
+ label: "Persona designation",
189
+ field_interface: "TypographyWidget",
190
+ },
191
+ {
192
+ key: "stars",
193
+ label: "Stars",
194
+ kind: "group",
195
+ field_interface: "BoxWidget",
196
+ fields: [
197
+ {
198
+ key: "star",
199
+ label: "Star",
200
+ field_interface: "IconWidget",
201
+ },
202
+ ],
203
+ },
204
+ ],
205
+ },
206
+ {
207
+ key: "carousel-navigation-container",
208
+ label: "Carousel Navigation Container",
209
+ field_interface: "BoxWidget",
210
+ },
211
+ {
212
+ key: "carousel-navigation",
213
+ label: "Carousel Navigation",
214
+ field_interface: "BoxWidget",
215
+ },
216
+ {
217
+ key: "carousel-navigation-pill",
218
+ label: "Carousel Navigation Pill",
219
+ field_interface: "BoxWidget",
220
+ },
221
+ ],
222
+ layouts: [
223
+ {
224
+ key: "default",
225
+ title: "Default",
226
+ styles: {
227
+ layout: {
228
+ "padding-top": "3xl",
229
+ "padding-bottom": "3xl",
230
+ },
231
+ container: {
232
+ "max-width": "1280px",
233
+ "margin-left": "auto",
234
+ "margin-right": "auto",
235
+ "padding-left": "lg",
236
+ "padding-right": "lg",
237
+ },
238
+ header_container: {
239
+ "text-align": "center",
240
+ "margin-bottom": "2xl",
241
+ },
242
+ title: {
243
+ color: "text-1",
244
+ "margin-bottom": "base",
245
+ },
246
+ description: {
247
+ color: "text-2",
248
+ "max-width": "600px",
249
+ "margin-left": "auto",
250
+ "margin-right": "auto",
251
+ },
252
+ testimonials_levoGroup: {
253
+ number_of_slides: 1,
254
+ },
255
+ testimonials: [
256
+ {
257
+ card: {
258
+ "border-radius": "base",
259
+ "box-shadow": "default",
260
+ "padding-top": "lg",
261
+ "padding-bottom": "lg",
262
+ "padding-left": "lg",
263
+ "padding-right": "lg",
264
+ "border-color": "border",
265
+ "border-width": "1px",
266
+ },
267
+ content_container: {
268
+ display: "flex",
269
+ "flex-direction": "column",
270
+ gap: "lg",
271
+ },
272
+ title_desc_box: {
273
+ "text-align": "center",
274
+ },
275
+ title: {
276
+ color: "text-1",
277
+ "font-size": "lg",
278
+ "font-weight": "600",
279
+ "margin-bottom": "sm",
280
+ },
281
+ description: {
282
+ color: "text-2",
283
+ "line-height": "1.6",
284
+ },
285
+ persona_container: {
286
+ display: "flex",
287
+ "flex-direction": "column",
288
+ "align-items": "center",
289
+ gap: "sm",
290
+ },
291
+ persona_name: {
292
+ color: "text-1",
293
+ "font-weight": "600",
294
+ "text-align": "center",
295
+ },
296
+ stars: {
297
+ display: "flex",
298
+ gap: "2xs",
299
+ },
300
+ star: {
301
+ color: "warning",
302
+ width: "16px",
303
+ height: "16px",
304
+ },
305
+ },
306
+ {
307
+ card: {
308
+ "border-radius": "base",
309
+ "box-shadow": "default",
310
+ "padding-top": "lg",
311
+ "padding-bottom": "lg",
312
+ "padding-left": "lg",
313
+ "padding-right": "lg",
314
+ "border-color": "border",
315
+ "border-width": "1px",
316
+ },
317
+ content_container: {
318
+ display: "flex",
319
+ "flex-direction": "column",
320
+ gap: "lg",
321
+ },
322
+ title_desc_box: {
323
+ "text-align": "center",
324
+ },
325
+ title: {
326
+ color: "text-1",
327
+ "font-size": "lg",
328
+ "font-weight": "600",
329
+ "margin-bottom": "sm",
330
+ },
331
+ description: {
332
+ color: "text-2",
333
+ "line-height": "1.6",
334
+ },
335
+ persona_container: {
336
+ display: "flex",
337
+ "flex-direction": "column",
338
+ "align-items": "center",
339
+ gap: "sm",
340
+ },
341
+ persona_name: {
342
+ color: "text-1",
343
+ "font-weight": "600",
344
+ "text-align": "center",
345
+ },
346
+ stars: {
347
+ display: "flex",
348
+ gap: "2xs",
349
+ },
350
+ star: {
351
+ color: "warning",
352
+ width: "16px",
353
+ height: "16px",
354
+ },
355
+ },
356
+ {
357
+ card: {
358
+ "border-radius": "base",
359
+ "box-shadow": "default",
360
+ "padding-top": "lg",
361
+ "padding-bottom": "lg",
362
+ "padding-left": "lg",
363
+ "padding-right": "lg",
364
+ "border-color": "border",
365
+ "border-width": "1px",
366
+ },
367
+ content_container: {
368
+ display: "flex",
369
+ "flex-direction": "column",
370
+ gap: "lg",
371
+ },
372
+ title_desc_box: {
373
+ "text-align": "center",
374
+ },
375
+ title: {
376
+ color: "text-1",
377
+ "font-size": "lg",
378
+ "font-weight": "600",
379
+ "margin-bottom": "sm",
380
+ },
381
+ description: {
382
+ color: "text-2",
383
+ "line-height": "1.6",
384
+ },
385
+ persona_container: {
386
+ display: "flex",
387
+ "flex-direction": "column",
388
+ "align-items": "center",
389
+ gap: "sm",
390
+ },
391
+ persona_name: {
392
+ color: "text-1",
393
+ "font-weight": "600",
394
+ "text-align": "center",
395
+ },
396
+ stars: {
397
+ display: "flex",
398
+ gap: "2xs",
399
+ },
400
+ star: {
401
+ color: "warning",
402
+ width: "16px",
403
+ height: "16px",
404
+ },
405
+ },
406
+ ],
407
+ "carousel-navigation-container": {
408
+ display: "flex",
409
+ "justify-content": "center",
410
+ "align-items": "center",
411
+ "padding-top": "lg",
412
+ },
413
+ "carousel-navigation": {
414
+ display: "flex",
415
+ "column-gap": "xs",
416
+ },
417
+ "carousel-navigation-pill": {
418
+ width: "8px",
419
+ height: "8px",
420
+ "border-radius": "50%",
421
+ "border-color": "border",
422
+ "border-width": "1px",
423
+ cursor: "pointer",
424
+ "background-color": "transparent",
425
+ transition: "all 0.2s ease",
426
+ },
427
+ },
428
+ content: DEFAULT_CONTENT,
429
+ config: {
430
+ testimonials_levoGroup: {
431
+ carousel: {
432
+ loop: true,
433
+ },
434
+ },
435
+ },
436
+ },
437
+ ],
438
+ };
@@ -0,0 +1,125 @@
1
+ "use client";
2
+
3
+ import type { CarouselApi } from "@levo-so/studio";
4
+ import {
5
+ type ILevoBlockBaseProps,
6
+ Box,
7
+ Carousel,
8
+ CarouselContent,
9
+ CarouselItem,
10
+ Container,
11
+ Heading,
12
+ Icon,
13
+ Section,
14
+ Typography,
15
+ } from "@levo-so/studio";
16
+ import { useEffect, useState } from "react";
17
+
18
+ import type { ITestimonial7Content } from "./testimonial-7.schema";
19
+
20
+ const Testimonial7: React.FC<ILevoBlockBaseProps<ITestimonial7Content>> = ({
21
+ content,
22
+ }) => {
23
+ const [api, setApi] = useState<CarouselApi>();
24
+ const [current, setCurrent] = useState(0);
25
+ const [count, setCount] = useState(0);
26
+
27
+ useEffect(() => {
28
+ if (!api) {
29
+ return;
30
+ }
31
+
32
+ setCount(api.scrollSnapList().length);
33
+ setCurrent(api.selectedScrollSnap() + 1);
34
+
35
+ api.on("select", () => {
36
+ setCurrent(api.selectedScrollSnap() + 1);
37
+ });
38
+ }, [api]);
39
+
40
+ return (
41
+ <Section elementKey="layout">
42
+ <Container elementKey="container">
43
+ <Box elementKey="header_container">
44
+ <Heading elementKey="title" />
45
+ <Typography elementKey="description" />
46
+ </Box>
47
+ <Carousel
48
+ elementKey="testimonials_levoGroup"
49
+ className="w-full"
50
+ setApi={setApi}
51
+ data-levo_group
52
+ >
53
+ <CarouselContent>
54
+ {(content?.testimonials ?? [])?.map((_: any, index: number) => (
55
+ <CarouselItem key={index} data-levo_group_item>
56
+ <Box elementKey={`testimonials.${index}.card`}>
57
+ <Box elementKey={`testimonials.${index}.content_container`}>
58
+ <Box elementKey={`testimonials.${index}.title_desc_box`}>
59
+ <Typography elementKey={`testimonials.${index}.title`} />
60
+ <Typography
61
+ elementKey={`testimonials.${index}.description`}
62
+ />
63
+ </Box>
64
+ <Box elementKey={`testimonials.${index}.persona_container`}>
65
+ <Typography
66
+ elementKey={`testimonials.${index}.persona_name`}
67
+ />
68
+ <Typography
69
+ elementKey={`testimonials.${index}.designation`}
70
+ />
71
+ <Box
72
+ elementKey={`testimonials.${index}.stars_levoGroup`}
73
+ data-levo_group
74
+ >
75
+ {(
76
+ (content?.testimonials?.[index] as any)?.stars ?? []
77
+ ).map((_: any, starIndex: number) => (
78
+ <Icon
79
+ key={`star-${starIndex}`}
80
+ data-levo_group_item
81
+ elementKey={`testimonials.${index}.stars.${starIndex}.star`}
82
+ />
83
+ ))}
84
+ </Box>
85
+ </Box>
86
+ </Box>
87
+ </Box>
88
+ </CarouselItem>
89
+ ))}
90
+ </CarouselContent>
91
+ </Carousel>
92
+ {count > 0 && (
93
+ <Box elementKey="carousel-navigation-container">
94
+ <Box elementKey="carousel-navigation" className="flex gap-x-2">
95
+ {Array(count)
96
+ ?.fill(0)
97
+ ?.map((_, index) => (
98
+ <Box
99
+ key={index}
100
+ elementKey="carousel-navigation-pill"
101
+ style={
102
+ index + 1 === current
103
+ ? {
104
+ backgroundColor: "var(--color-brand)",
105
+ width: "10px",
106
+ height: "10px",
107
+ }
108
+ : {}
109
+ }
110
+ onClick={() => {
111
+ if (api) {
112
+ api?.scrollTo(index);
113
+ }
114
+ }}
115
+ />
116
+ ))}
117
+ </Box>
118
+ </Box>
119
+ )}
120
+ </Container>
121
+ </Section>
122
+ );
123
+ };
124
+
125
+ export default Testimonial7;