@levo-so/blocks 0.1.54 → 0.1.58

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
@@ -211,7 +211,7 @@ export const Navbar2: IBlock = {
211
211
  {
212
212
  key: "nav-item-title",
213
213
  label: "Nav Item Title",
214
- field_interface: "HeadingWidget",
214
+ field_interface: "TypographyWidget",
215
215
  },
216
216
  {
217
217
  key: "nav-item-dropdown-trigger",
@@ -221,7 +221,7 @@ export const Navbar2: IBlock = {
221
221
  {
222
222
  key: "nav-item-dropdown-trigger-title",
223
223
  label: "Nav Item Dropdown Trigger Title",
224
- field_interface: "HeadingWidget",
224
+ field_interface: "TypographyWidget",
225
225
  },
226
226
  {
227
227
  key: "sub-items",
@@ -252,7 +252,7 @@ export const Navbar2: IBlock = {
252
252
  {
253
253
  key: "sub-item-title",
254
254
  label: "Sub Item Title",
255
- field_interface: "HeadingWidget",
255
+ field_interface: "TypographyWidget",
256
256
  },
257
257
  {
258
258
  key: "sub-item-description",
@@ -272,7 +272,7 @@ export const Navbar2: IBlock = {
272
272
  {
273
273
  key: "nav-item-title",
274
274
  label: "Nav Item Title",
275
- field_interface: "HeadingWidget",
275
+ field_interface: "TypographyWidget",
276
276
  },
277
277
  {
278
278
  key: "nav-item-dropdown-trigger",
@@ -282,7 +282,7 @@ export const Navbar2: IBlock = {
282
282
  {
283
283
  key: "nav-item-dropdown-trigger-title",
284
284
  label: "Nav Item Dropdown Trigger Title",
285
- field_interface: "HeadingWidget",
285
+ field_interface: "TypographyWidget",
286
286
  },
287
287
  {
288
288
  key: "sub-items",
@@ -313,7 +313,7 @@ export const Navbar2: IBlock = {
313
313
  {
314
314
  key: "sub-item-title",
315
315
  label: "Sub Item Title",
316
- field_interface: "HeadingWidget",
316
+ field_interface: "TypographyWidget",
317
317
  },
318
318
  {
319
319
  key: "sub-item-description",
@@ -366,7 +366,7 @@ export const Navbar2: IBlock = {
366
366
  {
367
367
  key: "nav-item-title",
368
368
  label: "Nav Item Title",
369
- field_interface: "HeadingWidget",
369
+ field_interface: "TypographyWidget",
370
370
  },
371
371
  {
372
372
  key: "nav-item-dropdown-container",
@@ -381,7 +381,7 @@ export const Navbar2: IBlock = {
381
381
  {
382
382
  key: "nav-item-dropdown-trigger-title",
383
383
  label: "Nav Item Dropdown Trigger Title",
384
- field_interface: "HeadingWidget",
384
+ field_interface: "TypographyWidget",
385
385
  },
386
386
  {
387
387
  key: "sub-items",
@@ -417,7 +417,7 @@ export const Navbar2: IBlock = {
417
417
  {
418
418
  key: "sub-item-title",
419
419
  label: "Sub Item Title",
420
- field_interface: "HeadingWidget",
420
+ field_interface: "TypographyWidget",
421
421
  },
422
422
  {
423
423
  key: "sub-item-description",
@@ -6,12 +6,11 @@ import type { ILevoBlockBaseProps } from "@levo-so/studio";
6
6
  import {
7
7
  Box,
8
8
  Button,
9
- Heading,
9
+ Typography,
10
10
  Image,
11
11
  PopoverRoot,
12
12
  PopoverContent,
13
13
  PopoverTrigger,
14
- Typography,
15
14
  Container,
16
15
  Section,
17
16
  Icon,
@@ -40,7 +39,7 @@ const DropdownNavigationItem: React.FC<{
40
39
  onMouseEnter={() => setIsDropdownPopoverOpen(true)}
41
40
  data-levo_group_item
42
41
  >
43
- <Heading
42
+ <Typography
44
43
  elementKey={`${prefixKey}.${index}.nav-item-dropdown-trigger-title`}
45
44
  />
46
45
  <ChevronDown
@@ -86,7 +85,7 @@ const DropdownNavigationItem: React.FC<{
86
85
  <Box
87
86
  elementKey={`left-desktop-nav-menu.${index}.sub-items.${idx}.sub-item-text-container`}
88
87
  >
89
- <Heading
88
+ <Typography
90
89
  elementKey={`left-desktop-nav-menu.${index}.sub-items.${idx}.sub-item-title`}
91
90
  />
92
91
  <Typography
@@ -120,7 +119,7 @@ const DesktopNavItem: React.FC<{
120
119
  />
121
120
  )}
122
121
  {!isNavItemDropdown && (
123
- <Heading
122
+ <Typography
124
123
  data-levo_group_item
125
124
  elementKey={`${prefixKey}.${index}.nav-item-title`}
126
125
  />
@@ -164,7 +163,7 @@ const DropdownNavigationItemMobile: React.FC<{
164
163
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger`}
165
164
  onClick={() => setIsDropdownOpen((prev) => !prev)}
166
165
  >
167
- <Heading
166
+ <Typography
168
167
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger-title`}
169
168
  />
170
169
  <ChevronDown
@@ -217,7 +216,7 @@ const DropdownNavigationItemMobile: React.FC<{
217
216
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-title-container`}
218
217
  onClick={() => setIsOpen(false)}
219
218
  >
220
- <Heading
219
+ <Typography
221
220
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-title`}
222
221
  />
223
222
  </Box>
@@ -260,7 +259,7 @@ const MobileNavItem: React.FC<{
260
259
  elementKey={`mobile-nav-menu.${index}.nav-item-title-container`}
261
260
  onClick={() => setIsOpen(false)}
262
261
  >
263
- <Heading elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
262
+ <Typography elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
264
263
  </Box>
265
264
  )}
266
265
  </React.Fragment>
@@ -569,7 +569,7 @@ export const Navbar3: IBlock = {
569
569
  {
570
570
  key: "nav-item-title",
571
571
  label: "Nav Item Title",
572
- field_interface: "HeadingWidget",
572
+ field_interface: "TypographyWidget",
573
573
  },
574
574
  {
575
575
  key: "nav-item-dropdown-trigger",
@@ -579,7 +579,7 @@ export const Navbar3: IBlock = {
579
579
  {
580
580
  key: "nav-item-dropdown-trigger-title",
581
581
  label: "Nav Item Dropdown Trigger Title",
582
- field_interface: "HeadingWidget",
582
+ field_interface: "TypographyWidget",
583
583
  },
584
584
  {
585
585
  key: "sub-items",
@@ -610,7 +610,7 @@ export const Navbar3: IBlock = {
610
610
  {
611
611
  key: "sub-item-title",
612
612
  label: "Sub Item Title",
613
- field_interface: "HeadingWidget",
613
+ field_interface: "TypographyWidget",
614
614
  },
615
615
  {
616
616
  key: "sub-item-description",
@@ -631,7 +631,7 @@ export const Navbar3: IBlock = {
631
631
  {
632
632
  key: "nested-sub-item-title",
633
633
  label: "Nested Sub Item Title",
634
- field_interface: "HeadingWidget",
634
+ field_interface: "TypographyWidget",
635
635
  },
636
636
  {
637
637
  key: "nested-sub-item-description",
@@ -675,7 +675,7 @@ export const Navbar3: IBlock = {
675
675
  {
676
676
  key: "mobile-nav-title",
677
677
  label: "Mobile Nav Title",
678
- field_interface: "HeadingWidget",
678
+ field_interface: "TypographyWidget",
679
679
  },
680
680
  {
681
681
  key: "mobile-nav-menu-wrapper",
@@ -697,7 +697,7 @@ export const Navbar3: IBlock = {
697
697
  {
698
698
  key: "nav-item-title",
699
699
  label: "Nav Item Title",
700
- field_interface: "HeadingWidget",
700
+ field_interface: "TypographyWidget",
701
701
  },
702
702
  {
703
703
  key: "nav-item-dropdown-container",
@@ -712,7 +712,7 @@ export const Navbar3: IBlock = {
712
712
  {
713
713
  key: "nav-item-dropdown-trigger-title",
714
714
  label: "Nav Item Dropdown Trigger Title",
715
- field_interface: "HeadingWidget",
715
+ field_interface: "TypographyWidget",
716
716
  },
717
717
  {
718
718
  key: "sub-items",
@@ -743,7 +743,7 @@ export const Navbar3: IBlock = {
743
743
  {
744
744
  key: "sub-item-title",
745
745
  label: "Sub Item Title",
746
- field_interface: "HeadingWidget",
746
+ field_interface: "TypographyWidget",
747
747
  },
748
748
  {
749
749
  key: "sub-item-description",
@@ -764,7 +764,7 @@ export const Navbar3: IBlock = {
764
764
  {
765
765
  key: "nested-sub-item-title",
766
766
  label: "Nested Sub Item Title",
767
- field_interface: "HeadingWidget",
767
+ field_interface: "TypographyWidget",
768
768
  },
769
769
  {
770
770
  key: "nested-sub-item-description",
@@ -1,24 +1,20 @@
1
- "use client";
2
- // Test libraries-only change
3
-
4
- import React, { useEffect, useState } from "react";
5
1
  import { cn } from "@levo-so/react";
6
2
  import type { ILevoBlockBaseProps } from "@levo-so/studio";
7
3
  import {
8
4
  Box,
9
5
  Button,
10
- Heading,
6
+ Container,
7
+ Icon,
11
8
  Image,
12
- PopoverRoot,
13
9
  PopoverContent,
10
+ PopoverRoot,
14
11
  PopoverTrigger,
15
- Typography,
16
12
  Section,
17
- Container,
18
- Icon,
13
+ Typography,
19
14
  UserMenu,
20
15
  } from "@levo-so/studio";
21
- import { ChevronDown, Menu, X, ChevronRight } from "lucide-react";
16
+ import { ChevronDown, ChevronRight, Menu, X } from "lucide-react";
17
+ import React, { useEffect, useState } from "react";
22
18
 
23
19
  import type { INavbar3Content } from "./navbar-3.schema";
24
20
 
@@ -30,89 +26,126 @@ const NestedDropdownItem: React.FC<{
30
26
  const [isNestedDropdownOpen, setIsNestedDropdownOpen] =
31
27
  useState<boolean>(false);
32
28
  const nestedSubItems = subItem?.["sub-sub-items"] as Array<any>;
29
+ const hasNestedItems =
30
+ nestedSubItems &&
31
+ Array.isArray(nestedSubItems) &&
32
+ nestedSubItems.length > 0;
33
33
 
34
- return (
35
- <Box
36
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.nested-dropdown-container`}
37
- >
34
+ if (!hasNestedItems) {
35
+ return (
38
36
  <Box
39
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.nested-dropdown-trigger`}
40
- onMouseEnter={() => setIsNestedDropdownOpen(true)}
41
- onMouseLeave={() => setIsNestedDropdownOpen(false)}
37
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-link`}
42
38
  data-levo_group_item
43
- className="group relative"
39
+ className="flex items-center gap-3"
44
40
  >
41
+ {subItem?.["sub-item-icon"] && (
42
+ <Box
43
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon-container`}
44
+ className=""
45
+ >
46
+ <Icon
47
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon`}
48
+ />
49
+ </Box>
50
+ )}
45
51
  <Box
46
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-link`}
47
- data-levo_group_item
48
- className="flex items-center justify-between"
52
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-text-container`}
53
+ className=""
49
54
  >
50
- <div className="flex items-center gap-3">
51
- {subItem?.["sub-item-icon"] && (
52
- <Box
53
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon-container`}
54
- className=""
55
- >
56
- <Icon
57
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon`}
58
- />
59
- </Box>
60
- )}
61
- <Box
62
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-text-container`}
63
- className=""
64
- >
65
- <Heading
66
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-title`}
67
- />
68
- <Typography
69
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-description`}
70
- />
71
- </Box>
72
- </div>
73
- {nestedSubItems &&
74
- Array.isArray(nestedSubItems) &&
75
- nestedSubItems.length > 0 && (
76
- <div className="group-hover:text-text-1 text-white">
77
- <ChevronRight
78
- aria-hidden="true"
79
- className="h-[14px] w-[14px] transition-colors"
80
- />
81
- </div>
82
- )}
55
+ <Typography
56
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-title`}
57
+ />
58
+ <Typography
59
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-description`}
60
+ />
83
61
  </Box>
62
+ </Box>
63
+ );
64
+ }
84
65
 
85
- {/* Nested dropdown content inside same container */}
86
- {isNestedDropdownOpen &&
87
- nestedSubItems &&
88
- Array.isArray(nestedSubItems) &&
89
- nestedSubItems.length > 0 && (
66
+ return (
67
+ <PopoverRoot
68
+ open={isNestedDropdownOpen}
69
+ onOpenChange={setIsNestedDropdownOpen}
70
+ >
71
+ <PopoverTrigger
72
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-link`}
73
+ onMouseEnter={() => setIsNestedDropdownOpen(true)}
74
+ data-levo_group_item
75
+ className="group flex items-center justify-between px-4 py-2 focus:outline-none"
76
+ >
77
+ <div className="flex items-center gap-3">
78
+ {subItem?.["sub-item-icon"] && (
90
79
  <Box
91
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items_levoGroup`}
92
- data-levo_group
93
- className="absolute top-0 left-full z-50 ml-1 w-48 rounded-md border border-gray-200 bg-white shadow-lg"
94
- onMouseEnter={() => setIsNestedDropdownOpen(true)}
95
- onMouseLeave={() => setIsNestedDropdownOpen(false)}
80
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon-container`}
81
+ className=""
96
82
  >
97
- {nestedSubItems?.map((_: any, nestedIdx: number) => (
98
- <Box
99
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-container`}
100
- key={`nestedSubItem_${parentIndex}_${subIndex}_${nestedIdx}`}
101
- data-levo_group_item
102
- className="px-5 py-3"
103
- >
104
- <Heading
105
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-title`}
106
- />
107
- <Typography
108
- elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-description`}
109
- />
110
- </Box>
111
- ))}
83
+ <Icon
84
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-icon`}
85
+ />
112
86
  </Box>
113
87
  )}
114
- </Box>
115
- </Box>
88
+ <Box
89
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-text-container`}
90
+ className=""
91
+ >
92
+ <Typography
93
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-title`}
94
+ />
95
+ <Typography
96
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-description`}
97
+ />
98
+ </Box>
99
+ </div>
100
+ <div className="group-hover:text-text-1 ml-auto">
101
+ <ChevronRight
102
+ aria-hidden="true"
103
+ style={{
104
+ position: "relative",
105
+ top: "1px",
106
+ height: "14px",
107
+ width: "14px",
108
+ transitionProperty:
109
+ "color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter",
110
+ transitionTimingFunction: "cubic-bezier(0.4, 0, 0.2, 1)",
111
+ transitionDuration: "300ms",
112
+ color: "var(--color-text-1)",
113
+ }}
114
+ />
115
+ </div>
116
+ </PopoverTrigger>
117
+ <PopoverContent
118
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items`}
119
+ onMouseLeave={() => setIsNestedDropdownOpen(false)}
120
+ inPortal={true}
121
+ className="z-[60] min-w-48 rounded-md border border-gray-200 !bg-white shadow-lg focus:outline-none"
122
+ style={{
123
+ backgroundColor: "white !important",
124
+ background: "white",
125
+ outline: "none",
126
+ boxShadow:
127
+ "0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)",
128
+ }}
129
+ side="right"
130
+ align="start"
131
+ >
132
+ {nestedSubItems?.map((_: any, nestedIdx: number) => (
133
+ <Box
134
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-container`}
135
+ key={`nestedSubItem_${parentIndex}_${subIndex}_${nestedIdx}`}
136
+ data-levo_group_item
137
+ className="-mx-2 cursor-pointer rounded px-2 py-2 whitespace-nowrap hover:bg-gray-50 focus:outline-none"
138
+ >
139
+ <Typography
140
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-title`}
141
+ />
142
+ <Typography
143
+ elementKey={`desktop-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-description`}
144
+ />
145
+ </Box>
146
+ ))}
147
+ </PopoverContent>
148
+ </PopoverRoot>
116
149
  );
117
150
  };
118
151
 
@@ -135,8 +168,9 @@ const DropdownNavigationItem: React.FC<{
135
168
  elementKey={`desktop-nav-menu.${index}.nav-item-dropdown-trigger`}
136
169
  onMouseEnter={() => setIsDropdownPopoverOpen(true)}
137
170
  data-levo_group_item
171
+ className="focus:outline-none"
138
172
  >
139
- <Heading
173
+ <Typography
140
174
  elementKey={`desktop-nav-menu.${index}.nav-item-dropdown-trigger-title`}
141
175
  />
142
176
  <ChevronDown
@@ -160,6 +194,7 @@ const DropdownNavigationItem: React.FC<{
160
194
  data-levo_group
161
195
  onMouseLeave={() => setIsDropdownPopoverOpen(false)}
162
196
  inPortal={false}
197
+ className="focus:outline-none"
163
198
  >
164
199
  {subItems && Array?.isArray(subItems)
165
200
  ? subItems?.map((subItem: any, idx: number) => (
@@ -190,7 +225,7 @@ const DesktopNavItem: React.FC<{
190
225
  <DropdownNavigationItem navItem={navItem} index={index} />
191
226
  )}
192
227
  {!isNavItemDropdown && (
193
- <Heading
228
+ <Typography
194
229
  data-levo_group_item
195
230
  elementKey={`desktop-nav-menu.${index}.nav-item-title`}
196
231
  />
@@ -232,21 +267,19 @@ const NestedDropdownItemMobile: React.FC<any> = ({
232
267
  <Box
233
268
  elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.nested-dropdown-trigger`}
234
269
  onClick={() => setIsNestedDropdownOpen((prev) => !prev)}
235
- className="flex w-full items-center"
270
+ data-levo_group_item
271
+ className="flex w-full items-center focus:outline-none"
236
272
  >
237
273
  <Box
238
274
  elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-text-container`}
239
275
  >
240
- <Heading
276
+ <Typography
241
277
  elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-title`}
242
- >
243
- {subItem?.title}
244
- </Heading>
278
+ />
279
+
245
280
  <Typography
246
281
  elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-item-description`}
247
- >
248
- {subItem?.description}
249
- </Typography>
282
+ />
250
283
  </Box>
251
284
 
252
285
  <ChevronDown
@@ -264,31 +297,23 @@ const NestedDropdownItemMobile: React.FC<any> = ({
264
297
 
265
298
  {isNestedDropdownOpen && Array.isArray(nestedSubItems) && (
266
299
  <Box
267
- elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items_levoGroup`}
268
- data-levo_group
269
- className="ml-4"
300
+ elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.nested-dropdown-trigger`}
301
+ className="ml-4 focus:outline-none"
270
302
  >
271
303
  {nestedSubItems.map((nestedSubItem, nestedIdx) => (
272
304
  <Box
273
305
  key={`nestedSubItem_${parentIndex}_${subIndex}_${nestedIdx}`}
274
- elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-link`}
275
- className={cn("")}
306
+ elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-container`}
307
+ className={cn("focus:outline-none")}
276
308
  data-levo_group_item
277
309
  >
278
- <Box
279
- elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-text-container`}
280
- >
281
- <Heading
282
- elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-title`}
283
- >
284
- {nestedSubItem?.title}
285
- </Heading>
286
- <Typography
287
- elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-description`}
288
- >
289
- {nestedSubItem?.description}
290
- </Typography>
291
- </Box>
310
+ <Typography
311
+ elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-title`}
312
+ />
313
+
314
+ <Typography
315
+ elementKey={`mobile-nav-menu.${parentIndex}.sub-items.${subIndex}.sub-sub-items.${nestedIdx}.nested-sub-item-description`}
316
+ />
292
317
  </Box>
293
318
  ))}
294
319
  </Box>
@@ -314,9 +339,9 @@ const DropdownNavigationItemMobile: React.FC<{
314
339
  <Box
315
340
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger`}
316
341
  onClick={() => setIsDropdownOpen((prev) => !prev)}
317
- className="flex items-center justify-between"
342
+ className="flex items-center justify-between focus:outline-none"
318
343
  >
319
- <Heading
344
+ <Typography
320
345
  elementKey={`mobile-nav-menu.${index}.nav-item-dropdown-trigger-title`}
321
346
  />
322
347
  {hasSubSubItems && (
@@ -367,7 +392,7 @@ const DropdownNavigationItemMobile: React.FC<{
367
392
  <Box
368
393
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-text-container`}
369
394
  >
370
- <Heading
395
+ <Typography
371
396
  elementKey={`mobile-nav-menu.${index}.sub-items.${idx}.sub-item-title`}
372
397
  />
373
398
  <Typography
@@ -408,7 +433,7 @@ const MobileNavItem: React.FC<{
408
433
  elementKey={`mobile-nav-menu.${index}.nav-item-title-container`}
409
434
  onClick={() => setIsOpen(false)}
410
435
  >
411
- <Heading elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
436
+ <Typography elementKey={`mobile-nav-menu.${index}.nav-item-title`} />
412
437
  </Box>
413
438
  )}
414
439
  </React.Fragment>