@iqual/nuxt-icms 1.1.0 → 1.2.2

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 (418) hide show
  1. package/assets/css/ckeditor.css +4 -0
  2. package/assets/css/components/container.css +2 -2
  3. package/assets/css/tailwind.css +1 -1
  4. package/assets/css/typography.css +4 -0
  5. package/assets/symbols/download.svg +3 -0
  6. package/bundles.ts +4 -1
  7. package/components/Blokkli/TextMedia/index.vue +1 -2
  8. package/components/DesignSystem/Atoms/Caption.vue +15 -0
  9. package/components/DesignSystem/Atoms/LinkListItem.vue +21 -0
  10. package/components/DesignSystem/Molecules/MediaLightbox.vue +273 -0
  11. package/components/DesignSystem/Molecules/MediaSlider.vue +33 -22
  12. package/components/DesignSystem/Organisms/Map.vue +61 -0
  13. package/components/DesignSystem/README.md +489 -0
  14. package/components/Media/Image/index.vue +4 -162
  15. package/components/Media/RemoteVideo/index.vue +3 -3
  16. package/components/Node/Icms/Page/SearchResult/fragment.graphql +8 -0
  17. package/components/Node/Icms/Page/SearchResult/index.vue +12 -0
  18. package/components/Node/Icms/Page/Teaser/fragment.graphql +17 -0
  19. package/components/Node/Icms/Page/Teaser/index.vue +20 -0
  20. package/components/Node/Icms/Page/fragment.graphql +18 -0
  21. package/components/Node/Icms/Page/index.vue +5 -3
  22. package/components/Paragraph/CallToAction/index.vue +12 -8
  23. package/components/Paragraph/Card/Layout/index.vue +2 -2
  24. package/components/Paragraph/Contact/index.vue +1 -2
  25. package/components/Paragraph/Downloads/index.vue +4 -16
  26. package/components/Paragraph/FAQ/Layout/index.vue +24 -3
  27. package/components/Paragraph/FlipTeasers/index.vue +2 -2
  28. package/components/Paragraph/Gallery/index.vue +35 -172
  29. package/components/Paragraph/HeroImage/index.vue +13 -4
  30. package/components/Paragraph/IconText/Layout/index.vue +1 -2
  31. package/components/Paragraph/Media/index.vue +7 -2
  32. package/components/Paragraph/Table/index.vue +2 -2
  33. package/components/Paragraph/Team/Layout/index.vue +2 -2
  34. package/components/Paragraph/Teasers/fragment.graphql +2 -15
  35. package/components/Paragraph/Teasers/index.vue +12 -15
  36. package/components/Paragraph/TextMedia/index.vue +40 -33
  37. package/components/Paragraph/Timeline/Element/index.vue +1 -1
  38. package/components/Paragraph/Timeline/Layout/fragment.graphql +1 -0
  39. package/components/Paragraph/Timeline/Layout/index.vue +9 -6
  40. package/components/Paragraph/iFrame/index.vue +16 -2
  41. package/components/Search/Facets/FacetDropdownUI.vue +222 -0
  42. package/components/Search/Facets/FacetedSearchUI.vue +397 -0
  43. package/components/Search/Facets/fragment.graphql +40 -0
  44. package/components/Section/Footer/index.vue +15 -14
  45. package/components/Section/Header/GlobalMenu.vue +34 -34
  46. package/components/Section/Header/LanguageDropdown.vue +60 -73
  47. package/components/Section/Header/LanguageSwitcher.vue +37 -0
  48. package/components/Section/Header/MetaMenu.vue +27 -20
  49. package/components/Section/Header/index.vue +91 -79
  50. package/components/ui/accordion/Accordion.vue +2 -2
  51. package/components/ui/accordion/AccordionContent.vue +5 -5
  52. package/components/ui/accordion/AccordionItem.vue +9 -10
  53. package/components/ui/accordion/AccordionTrigger.vue +5 -5
  54. package/components/ui/alert/Alert.vue +17 -0
  55. package/components/ui/alert/AlertDescription.vue +14 -0
  56. package/components/ui/alert/AlertTitle.vue +14 -0
  57. package/components/ui/alert/index.ts +24 -0
  58. package/components/ui/alert-dialog/AlertDialog.vue +15 -0
  59. package/components/ui/alert-dialog/AlertDialogAction.vue +22 -0
  60. package/components/ui/alert-dialog/AlertDialogCancel.vue +29 -0
  61. package/components/ui/alert-dialog/AlertDialogContent.vue +43 -0
  62. package/components/ui/alert-dialog/AlertDialogDescription.vue +27 -0
  63. package/components/ui/alert-dialog/AlertDialogFooter.vue +21 -0
  64. package/components/ui/alert-dialog/AlertDialogHeader.vue +16 -0
  65. package/components/ui/alert-dialog/AlertDialogTitle.vue +24 -0
  66. package/components/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
  67. package/components/ui/alert-dialog/index.ts +9 -0
  68. package/components/ui/aspect-ratio/AspectRatio.vue +12 -0
  69. package/components/ui/aspect-ratio/index.ts +1 -0
  70. package/components/ui/auto-form/AutoForm.vue +106 -0
  71. package/components/ui/auto-form/AutoFormField.vue +45 -0
  72. package/components/ui/auto-form/AutoFormFieldArray.vue +110 -0
  73. package/components/ui/auto-form/AutoFormFieldBoolean.vue +41 -0
  74. package/components/ui/auto-form/AutoFormFieldDate.vue +57 -0
  75. package/components/ui/auto-form/AutoFormFieldEnum.vue +49 -0
  76. package/components/ui/auto-form/AutoFormFieldFile.vue +74 -0
  77. package/components/ui/auto-form/AutoFormFieldInput.vue +36 -0
  78. package/components/ui/auto-form/AutoFormFieldNumber.vue +32 -0
  79. package/components/ui/auto-form/AutoFormFieldObject.vue +78 -0
  80. package/components/ui/auto-form/AutoFormLabel.vue +14 -0
  81. package/components/ui/auto-form/constant.ts +40 -0
  82. package/components/ui/auto-form/dependencies.ts +93 -0
  83. package/components/ui/auto-form/index.ts +15 -0
  84. package/components/ui/auto-form/interface.ts +95 -0
  85. package/components/ui/auto-form/utils.ts +188 -0
  86. package/components/ui/avatar/Avatar.vue +22 -0
  87. package/components/ui/avatar/AvatarFallback.vue +12 -0
  88. package/components/ui/avatar/AvatarImage.vue +10 -0
  89. package/components/ui/avatar/index.ts +25 -0
  90. package/components/ui/badge/Badge.vue +17 -0
  91. package/components/ui/badge/index.ts +26 -0
  92. package/components/ui/breadcrumb/Breadcrumb.vue +13 -0
  93. package/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
  94. package/components/ui/breadcrumb/BreadcrumbItem.vue +16 -0
  95. package/components/ui/breadcrumb/BreadcrumbLink.vue +20 -0
  96. package/components/ui/breadcrumb/BreadcrumbList.vue +16 -0
  97. package/components/ui/breadcrumb/BreadcrumbPage.vue +19 -0
  98. package/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
  99. package/components/ui/breadcrumb/index.ts +7 -0
  100. package/components/ui/button/Button.vue +4 -2
  101. package/components/ui/button/index.ts +9 -9
  102. package/components/ui/calendar/Calendar.vue +62 -0
  103. package/components/ui/calendar/CalendarCell.vue +26 -0
  104. package/components/ui/calendar/CalendarCellTrigger.vue +40 -0
  105. package/components/ui/calendar/CalendarGrid.vue +26 -0
  106. package/components/ui/calendar/CalendarGridBody.vue +12 -0
  107. package/components/ui/calendar/CalendarGridHead.vue +12 -0
  108. package/components/ui/calendar/CalendarGridRow.vue +23 -0
  109. package/components/ui/calendar/CalendarHeadCell.vue +23 -0
  110. package/components/ui/calendar/CalendarHeader.vue +23 -0
  111. package/components/ui/calendar/CalendarHeading.vue +33 -0
  112. package/components/ui/calendar/CalendarNextButton.vue +34 -0
  113. package/components/ui/calendar/CalendarPrevButton.vue +34 -0
  114. package/components/ui/calendar/index.ts +12 -0
  115. package/components/ui/card/Card.vue +21 -0
  116. package/components/ui/card/CardContent.vue +14 -0
  117. package/components/ui/card/CardDescription.vue +14 -0
  118. package/components/ui/card/CardFooter.vue +14 -0
  119. package/components/ui/card/CardHeader.vue +14 -0
  120. package/components/ui/card/CardTitle.vue +18 -0
  121. package/components/ui/card/index.ts +6 -0
  122. package/components/ui/carousel/Carousel.vue +3 -23
  123. package/components/ui/carousel/CarouselContent.vue +1 -2
  124. package/components/ui/carousel/CarouselItem.vue +5 -7
  125. package/components/ui/carousel/CarouselNext.vue +7 -9
  126. package/components/ui/carousel/CarouselPrevious.vue +7 -9
  127. package/components/ui/carousel/index.ts +3 -1
  128. package/components/ui/carousel/interface.ts +3 -1
  129. package/components/ui/carousel/useCarousel.ts +13 -23
  130. package/components/ui/chart/ChartCrosshair.vue +45 -0
  131. package/components/ui/chart/ChartLegend.vue +50 -0
  132. package/components/ui/chart/ChartSingleTooltip.vue +64 -0
  133. package/components/ui/chart/ChartTooltip.vue +40 -0
  134. package/components/ui/chart/index.ts +18 -0
  135. package/components/ui/chart/interface.ts +64 -0
  136. package/components/ui/chart-area/AreaChart.vue +141 -0
  137. package/components/ui/chart-area/index.ts +66 -0
  138. package/components/ui/chart-bar/BarChart.vue +116 -0
  139. package/components/ui/chart-bar/index.ts +66 -0
  140. package/components/ui/chart-donut/DonutChart.vue +101 -0
  141. package/components/ui/chart-donut/index.ts +39 -0
  142. package/components/ui/chart-line/LineChart.vue +107 -0
  143. package/components/ui/chart-line/index.ts +66 -0
  144. package/components/ui/checkbox/Checkbox.vue +1 -1
  145. package/components/ui/collapsible/Collapsible.vue +15 -0
  146. package/components/ui/collapsible/CollapsibleContent.vue +12 -0
  147. package/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  148. package/components/ui/collapsible/index.ts +3 -0
  149. package/components/ui/command/Command.vue +31 -0
  150. package/components/ui/command/CommandDialog.vue +21 -0
  151. package/components/ui/command/CommandEmpty.vue +21 -0
  152. package/components/ui/command/CommandGroup.vue +30 -0
  153. package/components/ui/command/CommandInput.vue +35 -0
  154. package/components/ui/command/CommandItem.vue +27 -0
  155. package/components/ui/command/CommandList.vue +28 -0
  156. package/components/ui/command/CommandSeparator.vue +24 -0
  157. package/components/ui/command/CommandShortcut.vue +14 -0
  158. package/components/ui/command/index.ts +9 -0
  159. package/components/ui/context-menu/ContextMenu.vue +15 -0
  160. package/components/ui/context-menu/ContextMenuCheckboxItem.vue +41 -0
  161. package/components/ui/context-menu/ContextMenuContent.vue +37 -0
  162. package/components/ui/context-menu/ContextMenuGroup.vue +12 -0
  163. package/components/ui/context-menu/ContextMenuItem.vue +35 -0
  164. package/components/ui/context-menu/ContextMenuLabel.vue +27 -0
  165. package/components/ui/context-menu/ContextMenuPortal.vue +12 -0
  166. package/components/ui/context-menu/ContextMenuRadioGroup.vue +19 -0
  167. package/components/ui/context-menu/ContextMenuRadioItem.vue +41 -0
  168. package/components/ui/context-menu/ContextMenuSeparator.vue +22 -0
  169. package/components/ui/context-menu/ContextMenuShortcut.vue +14 -0
  170. package/components/ui/context-menu/ContextMenuSub.vue +19 -0
  171. package/components/ui/context-menu/ContextMenuSubContent.vue +36 -0
  172. package/components/ui/context-menu/ContextMenuSubTrigger.vue +36 -0
  173. package/components/ui/context-menu/ContextMenuTrigger.vue +14 -0
  174. package/components/ui/context-menu/index.ts +14 -0
  175. package/components/ui/dialog/Dialog.vue +2 -6
  176. package/components/ui/dialog/DialogClose.vue +2 -1
  177. package/components/ui/dialog/DialogContent.vue +10 -12
  178. package/components/ui/dialog/DialogDescription.vue +6 -10
  179. package/components/ui/dialog/DialogScrollContent.vue +15 -21
  180. package/components/ui/dialog/DialogTitle.vue +9 -6
  181. package/components/ui/dialog/DialogTrigger.vue +2 -1
  182. package/components/ui/drawer/Drawer.vue +19 -0
  183. package/components/ui/drawer/DrawerContent.vue +28 -0
  184. package/components/ui/drawer/DrawerDescription.vue +21 -0
  185. package/components/ui/drawer/DrawerFooter.vue +14 -0
  186. package/components/ui/drawer/DrawerHeader.vue +14 -0
  187. package/components/ui/drawer/DrawerOverlay.vue +19 -0
  188. package/components/ui/drawer/DrawerTitle.vue +21 -0
  189. package/components/ui/drawer/index.ts +8 -0
  190. package/components/ui/dropdown-menu/DropdownMenu.vue +15 -0
  191. package/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +41 -0
  192. package/components/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
  193. package/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  194. package/components/ui/dropdown-menu/DropdownMenuItem.vue +30 -0
  195. package/components/ui/dropdown-menu/DropdownMenuLabel.vue +26 -0
  196. package/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +19 -0
  197. package/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +42 -0
  198. package/components/ui/dropdown-menu/DropdownMenuSeparator.vue +24 -0
  199. package/components/ui/dropdown-menu/DropdownMenuShortcut.vue +14 -0
  200. package/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  201. package/components/ui/dropdown-menu/DropdownMenuSubContent.vue +31 -0
  202. package/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +35 -0
  203. package/components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  204. package/components/ui/dropdown-menu/index.ts +16 -0
  205. package/components/ui/form/FormControl.vue +16 -0
  206. package/components/ui/form/FormDescription.vue +20 -0
  207. package/components/ui/form/FormItem.vue +20 -0
  208. package/components/ui/form/FormLabel.vue +23 -0
  209. package/components/ui/form/FormMessage.vue +16 -0
  210. package/components/ui/form/index.ts +7 -0
  211. package/components/ui/form/injectionKeys.ts +4 -0
  212. package/components/ui/form/useFormField.ts +30 -0
  213. package/components/ui/hover-card/HoverCard.vue +15 -0
  214. package/components/ui/hover-card/HoverCardContent.vue +43 -0
  215. package/components/ui/hover-card/HoverCardTrigger.vue +12 -0
  216. package/components/ui/hover-card/index.ts +3 -0
  217. package/components/ui/input/Input.vue +1 -1
  218. package/components/ui/menubar/Menubar.vue +36 -0
  219. package/components/ui/menubar/MenubarCheckboxItem.vue +41 -0
  220. package/components/ui/menubar/MenubarContent.vue +45 -0
  221. package/components/ui/menubar/MenubarGroup.vue +12 -0
  222. package/components/ui/menubar/MenubarItem.vue +36 -0
  223. package/components/ui/menubar/MenubarLabel.vue +14 -0
  224. package/components/ui/menubar/MenubarMenu.vue +12 -0
  225. package/components/ui/menubar/MenubarRadioGroup.vue +20 -0
  226. package/components/ui/menubar/MenubarRadioItem.vue +41 -0
  227. package/components/ui/menubar/MenubarSeparator.vue +21 -0
  228. package/components/ui/menubar/MenubarShortcut.vue +14 -0
  229. package/components/ui/menubar/MenubarSub.vue +20 -0
  230. package/components/ui/menubar/MenubarSubContent.vue +40 -0
  231. package/components/ui/menubar/MenubarSubTrigger.vue +32 -0
  232. package/components/ui/menubar/MenubarTrigger.vue +31 -0
  233. package/components/ui/menubar/index.ts +15 -0
  234. package/components/ui/navigation-menu/NavigationMenu.vue +34 -0
  235. package/components/ui/navigation-menu/NavigationMenuContent.vue +35 -0
  236. package/components/ui/navigation-menu/NavigationMenuIndicator.vue +26 -0
  237. package/components/ui/navigation-menu/NavigationMenuItem.vue +12 -0
  238. package/components/ui/navigation-menu/NavigationMenuLink.vue +19 -0
  239. package/components/ui/navigation-menu/NavigationMenuList.vue +31 -0
  240. package/components/ui/navigation-menu/NavigationMenuTrigger.vue +36 -0
  241. package/components/ui/navigation-menu/NavigationMenuViewport.vue +35 -0
  242. package/components/ui/navigation-menu/index.ts +14 -0
  243. package/components/ui/number-field/NumberField.vue +24 -0
  244. package/components/ui/number-field/NumberFieldContent.vue +14 -0
  245. package/components/ui/number-field/NumberFieldDecrement.vue +26 -0
  246. package/components/ui/number-field/NumberFieldIncrement.vue +26 -0
  247. package/components/ui/number-field/NumberFieldInput.vue +16 -0
  248. package/components/ui/number-field/index.ts +5 -0
  249. package/components/ui/pagination/PaginationEllipsis.vue +24 -0
  250. package/components/ui/pagination/PaginationFirst.vue +31 -0
  251. package/components/ui/pagination/PaginationLast.vue +31 -0
  252. package/components/ui/pagination/PaginationNext.vue +31 -0
  253. package/components/ui/pagination/PaginationPrev.vue +31 -0
  254. package/components/ui/pagination/index.ts +10 -0
  255. package/components/ui/pin-input/PinInput.vue +25 -0
  256. package/components/ui/pin-input/PinInputGroup.vue +20 -0
  257. package/components/ui/pin-input/PinInputInput.vue +20 -0
  258. package/components/ui/pin-input/PinInputSeparator.vue +16 -0
  259. package/components/ui/pin-input/index.ts +4 -0
  260. package/components/ui/popover/Popover.vue +15 -0
  261. package/components/ui/popover/PopoverContent.vue +49 -0
  262. package/components/ui/popover/PopoverTrigger.vue +12 -0
  263. package/components/ui/popover/index.ts +3 -0
  264. package/components/ui/progress/Progress.vue +41 -0
  265. package/components/ui/progress/index.ts +1 -0
  266. package/components/ui/radio-group/RadioGroupItem.vue +1 -1
  267. package/components/ui/range-calendar/RangeCalendar.vue +62 -0
  268. package/components/ui/range-calendar/RangeCalendarCell.vue +26 -0
  269. package/components/ui/range-calendar/RangeCalendarCellTrigger.vue +42 -0
  270. package/components/ui/range-calendar/RangeCalendarGrid.vue +26 -0
  271. package/components/ui/range-calendar/RangeCalendarGridBody.vue +12 -0
  272. package/components/ui/range-calendar/RangeCalendarGridHead.vue +12 -0
  273. package/components/ui/range-calendar/RangeCalendarGridRow.vue +23 -0
  274. package/components/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
  275. package/components/ui/range-calendar/RangeCalendarHeader.vue +23 -0
  276. package/components/ui/range-calendar/RangeCalendarHeading.vue +33 -0
  277. package/components/ui/range-calendar/RangeCalendarNextButton.vue +34 -0
  278. package/components/ui/range-calendar/RangeCalendarPrevButton.vue +34 -0
  279. package/components/ui/range-calendar/index.ts +12 -0
  280. package/components/ui/resizable/ResizableHandle.vue +28 -0
  281. package/components/ui/resizable/ResizablePanelGroup.vue +23 -0
  282. package/components/ui/resizable/index.ts +3 -0
  283. package/components/ui/scroll-area/ScrollArea.vue +31 -0
  284. package/components/ui/scroll-area/ScrollBar.vue +32 -0
  285. package/components/ui/scroll-area/index.ts +2 -0
  286. package/components/ui/select/SelectContent.vue +1 -1
  287. package/components/ui/select/SelectItem.vue +1 -1
  288. package/components/ui/select/SelectSeparator.vue +1 -1
  289. package/components/ui/select/SelectTrigger.vue +1 -1
  290. package/components/ui/separator/Separator.vue +37 -0
  291. package/components/ui/separator/index.ts +1 -0
  292. package/components/ui/sheet/Sheet.vue +15 -0
  293. package/components/ui/sheet/SheetClose.vue +12 -0
  294. package/components/ui/sheet/SheetContent.vue +58 -0
  295. package/components/ui/sheet/SheetDescription.vue +24 -0
  296. package/components/ui/sheet/SheetFooter.vue +19 -0
  297. package/components/ui/sheet/SheetHeader.vue +16 -0
  298. package/components/ui/sheet/SheetTitle.vue +24 -0
  299. package/components/ui/sheet/SheetTrigger.vue +12 -0
  300. package/components/ui/sheet/index.ts +32 -0
  301. package/components/ui/sidebar/Sidebar.vue +85 -0
  302. package/components/ui/sidebar/SidebarContent.vue +17 -0
  303. package/components/ui/sidebar/SidebarFooter.vue +17 -0
  304. package/components/ui/sidebar/SidebarGroup.vue +17 -0
  305. package/components/ui/sidebar/SidebarGroupAction.vue +26 -0
  306. package/components/ui/sidebar/SidebarGroupContent.vue +17 -0
  307. package/components/ui/sidebar/SidebarGroupLabel.vue +24 -0
  308. package/components/ui/sidebar/SidebarHeader.vue +17 -0
  309. package/components/ui/sidebar/SidebarInput.vue +21 -0
  310. package/components/ui/sidebar/SidebarInset.vue +20 -0
  311. package/components/ui/sidebar/SidebarMenu.vue +17 -0
  312. package/components/ui/sidebar/SidebarMenuAction.vue +34 -0
  313. package/components/ui/sidebar/SidebarMenuBadge.vue +25 -0
  314. package/components/ui/sidebar/SidebarMenuButton.vue +51 -0
  315. package/components/ui/sidebar/SidebarMenuButtonChild.vue +35 -0
  316. package/components/ui/sidebar/SidebarMenuItem.vue +17 -0
  317. package/components/ui/sidebar/SidebarMenuSkeleton.vue +34 -0
  318. package/components/ui/sidebar/SidebarMenuSub.vue +21 -0
  319. package/components/ui/sidebar/SidebarMenuSubButton.vue +35 -0
  320. package/components/ui/sidebar/SidebarMenuSubItem.vue +8 -0
  321. package/components/ui/sidebar/SidebarProvider.vue +81 -0
  322. package/components/ui/sidebar/SidebarRail.vue +32 -0
  323. package/components/ui/sidebar/SidebarSeparator.vue +18 -0
  324. package/components/ui/sidebar/SidebarTrigger.vue +26 -0
  325. package/components/ui/sidebar/index.ts +60 -0
  326. package/components/ui/sidebar/utils.ts +19 -0
  327. package/components/ui/skeleton/Skeleton.vue +14 -0
  328. package/components/ui/skeleton/index.ts +1 -0
  329. package/components/ui/slider/Slider.vue +37 -0
  330. package/components/ui/slider/index.ts +1 -0
  331. package/components/ui/sonner/Sonner.vue +23 -0
  332. package/components/ui/sonner/index.ts +1 -0
  333. package/components/ui/stepper/Stepper.vue +32 -0
  334. package/components/ui/stepper/StepperDescription.vue +24 -0
  335. package/components/ui/stepper/StepperIndicator.vue +36 -0
  336. package/components/ui/stepper/StepperItem.vue +28 -0
  337. package/components/ui/stepper/StepperSeparator.vue +32 -0
  338. package/components/ui/stepper/StepperTitle.vue +24 -0
  339. package/components/ui/stepper/StepperTrigger.vue +27 -0
  340. package/components/ui/stepper/index.ts +7 -0
  341. package/components/ui/switch/Switch.vue +40 -0
  342. package/components/ui/switch/index.ts +1 -0
  343. package/components/ui/table/Table.vue +16 -0
  344. package/components/ui/table/TableBody.vue +14 -0
  345. package/components/ui/table/TableCaption.vue +14 -0
  346. package/components/ui/table/TableCell.vue +21 -0
  347. package/components/ui/table/TableEmpty.vue +38 -0
  348. package/components/ui/table/TableFooter.vue +14 -0
  349. package/components/ui/table/TableHead.vue +14 -0
  350. package/components/ui/table/TableHeader.vue +14 -0
  351. package/components/ui/table/TableRow.vue +14 -0
  352. package/components/ui/table/index.ts +9 -0
  353. package/components/ui/tabs/TabsContent.vue +6 -11
  354. package/components/ui/tabs/TabsList.vue +8 -8
  355. package/components/ui/tabs/TabsTrigger.vue +9 -11
  356. package/components/ui/tags-input/TagsInput.vue +24 -0
  357. package/components/ui/tags-input/TagsInputInput.vue +21 -0
  358. package/components/ui/tags-input/TagsInputItem.vue +24 -0
  359. package/components/ui/tags-input/TagsInputItemDelete.vue +26 -0
  360. package/components/ui/tags-input/TagsInputItemText.vue +21 -0
  361. package/components/ui/tags-input/index.ts +5 -0
  362. package/components/ui/textarea/Textarea.vue +1 -1
  363. package/components/ui/toast/Toast.vue +30 -0
  364. package/components/ui/toast/ToastAction.vue +21 -0
  365. package/components/ui/toast/ToastClose.vue +24 -0
  366. package/components/ui/toast/ToastDescription.vue +21 -0
  367. package/components/ui/toast/ToastProvider.vue +12 -0
  368. package/components/ui/toast/ToastTitle.vue +21 -0
  369. package/components/ui/toast/ToastViewport.vue +19 -0
  370. package/components/ui/toast/Toaster.vue +30 -0
  371. package/components/ui/toast/index.ts +39 -0
  372. package/components/ui/toast/use-toast.ts +165 -0
  373. package/components/ui/toggle/Toggle.vue +38 -0
  374. package/components/ui/toggle/index.ts +28 -0
  375. package/components/ui/toggle-group/ToggleGroup.vue +36 -0
  376. package/components/ui/toggle-group/ToggleGroupItem.vue +37 -0
  377. package/components/ui/toggle-group/index.ts +2 -0
  378. package/components/ui/tooltip/Tooltip.vue +15 -0
  379. package/components/ui/tooltip/TooltipContent.vue +33 -0
  380. package/components/ui/tooltip/TooltipProvider.vue +12 -0
  381. package/components/ui/tooltip/TooltipTrigger.vue +12 -0
  382. package/components/ui/tooltip/index.ts +4 -0
  383. package/components/ui/v-calendar/Calendar.vue +343 -0
  384. package/components/ui/v-calendar/index.ts +22 -0
  385. package/composables/useAccordionScroll.ts +1 -1
  386. package/composables/useContentSearch.ts +0 -0
  387. package/composables/useGlobalConfig.ts +57 -0
  388. package/composables/useGraphqlCacheability.ts +22 -0
  389. package/composables/useImageSources.ts +208 -0
  390. package/composables/useInitData.ts +20 -112
  391. package/composables/useMediaLightbox.ts +114 -0
  392. package/composables/useMenu.ts +66 -0
  393. package/composables/useMessageBus.ts +74 -0
  394. package/composables/useNavigationOffset.ts +1 -1
  395. package/layouts/default.vue +2 -2
  396. package/layouts/error.vue +8 -10
  397. package/modules/dynamicEntityComponentResolver.ts +162 -0
  398. package/modules/dynamicParagraphResolver.ts +1 -1
  399. package/nuxt.config.ts +11 -22
  400. package/package.json +2 -2
  401. package/pages/[...slug]/index.vue +2 -2
  402. package/pages/index.vue +2 -2
  403. package/pages/node/[nid]/index.vue +2 -2
  404. package/plugins/graphqlMiddleware.ts +27 -68
  405. package/plugins/initData.ts +105 -0
  406. package/queries/query.contentSearch.graphql +17 -0
  407. package/{composables → queries}/query.initData.graphql +2 -8
  408. package/queries/query.loadTranslations.graphql +5 -0
  409. package/tailwind.config.ts +1 -0
  410. package/types/initData.ts +1 -0
  411. package/components/Section/Header/SearchLink.vue +0 -26
  412. package/composables/languageLinks.ts +0 -31
  413. package/composables/useMainMenuLinks.ts +0 -69
  414. package/composables/useMetaMenuLinks.ts +0 -44
  415. package/modules/dynamicNodeResolver.ts +0 -95
  416. package/pages/search/index.vue +0 -69
  417. package/pages/static-page/example.vue +0 -40
  418. package/queries/fragment.routeQuery.graphql +0 -51
package/nuxt.config.ts CHANGED
@@ -78,7 +78,6 @@ export default defineNuxtConfig({
78
78
  'nuxt-easy-texts',
79
79
  'nuxt-page-dependencies',
80
80
  'nuxt-multi-cache',
81
- 'nuxt-plugin-order',
82
81
  'vuepal',
83
82
  'nuxt-language-negotiation',
84
83
  'nuxt-svg-icon-sprite',
@@ -88,7 +87,8 @@ export default defineNuxtConfig({
88
87
  '@nuxt/image',
89
88
  'shadcn-nuxt',
90
89
  '@iqual/nuxt-icms/modules/dynamicParagraphResolver',
91
- '@iqual/nuxt-icms/modules/dynamicNodeResolver'
90
+ '@iqual/nuxt-icms/modules/dynamicEntityComponentResolver',
91
+ 'nuxt-maplibre',
92
92
  ],
93
93
 
94
94
  easyTexts: {
@@ -133,26 +133,6 @@ export default defineNuxtConfig({
133
133
  checkComposableCalled: true,
134
134
  },
135
135
 
136
- pluginOrder: {
137
- order: [
138
- // Match plugins by their file path.
139
- // Note that only a single plugin may match.
140
- // The match is performed as "plugin.src.includes(v.pathMatch)".
141
- { pathMatch: 'plugins/language.ts' },
142
- { pathMatch: '@blokkli/editor/dist/runtime/plugins/blokkliEditable.js' },
143
- { pathMatch: 'staticNodes.mjs' },
144
- { pathMatch: 'formkitSSRPlugin.mjs' },
145
- { pathMatch: 'clickaway.ts' },
146
- { pathMatch: 'graphqlMiddleware.ts' },
147
- { pathMatch: 'forceHttps.js' },
148
- { pathMatch: 'nuxt-easy-texts/dist/runtime/plugins/texts.mjs' },
149
- { pathMatch: 'drupalUser.ts' },
150
- { pathMatch: 'dynamic-node-resolver.plugin.mjs' },
151
- ],
152
-
153
- logSortedPlugins: false,
154
- },
155
-
156
136
  vuepal: {
157
137
  frontendRouting: {
158
138
  enabled: IS_DEV,
@@ -165,6 +145,9 @@ export default defineNuxtConfig({
165
145
  localTasks: {
166
146
  enabled: true,
167
147
  },
148
+ languageSwitchLinks: {
149
+ enabled: true,
150
+ },
168
151
  drupalRoute: {
169
152
  enabled: true,
170
153
  routeQueries: {
@@ -197,6 +180,7 @@ export default defineNuxtConfig({
197
180
  },
198
181
 
199
182
  icms: {
183
+ pageComponentTypes: ['Node'],
200
184
  components: {
201
185
  fragments: [
202
186
  // Layout components
@@ -237,6 +221,11 @@ export default defineNuxtConfig({
237
221
  'paragraphIcmsPartnershipElement',
238
222
  'paragraphIcmsTimelineElement',
239
223
  ]
224
+ },
225
+ searchResults: {
226
+ fragments: [
227
+ 'nodeIcmsPageSearchResult',
228
+ ]
240
229
  }
241
230
  },
242
231
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iqual/nuxt-icms",
3
- "version": "1.1.0",
3
+ "version": "1.2.2",
4
4
  "description": "ICMS Base",
5
5
  "type": "module",
6
6
  "private": false,
@@ -30,9 +30,9 @@
30
30
  "nuxt-easy-texts": "^2.0.0",
31
31
  "nuxt-graphql-middleware": "^5.1.0",
32
32
  "nuxt-language-negotiation": "^2.0.0",
33
+ "nuxt-maplibre": "^1.1.1",
33
34
  "nuxt-multi-cache": "^3.4.0",
34
35
  "nuxt-page-dependencies": "^1.1.0",
35
- "nuxt-plugin-order": "^1.0.0",
36
36
  "nuxt-svg-icon-sprite": "^2.0.0",
37
37
  "patch-package": "^8.0.0",
38
38
  "radix-vue": "^1.9.17",
@@ -4,7 +4,7 @@
4
4
 
5
5
  <script lang="ts" setup>
6
6
 
7
- const { $resolveDynamicNodeComponent } = useNuxtApp()
7
+ const { $resolveDynamicEntityComponent } = useNuxtApp()
8
8
 
9
9
  defineOptions({
10
10
  name: 'PageSlug',
@@ -20,7 +20,7 @@ const { entity: node } = await useDrupalRouteQuery('slug')
20
20
  const contentType = computed(() => node.value?.__typename)
21
21
 
22
22
  const pageComponent = computed(() => {
23
- return $resolveDynamicNodeComponent(contentType.value)
23
+ return $resolveDynamicEntityComponent(contentType.value)
24
24
  })
25
25
 
26
26
  await renderPageDependencies()
package/pages/index.vue CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  <script lang="ts" setup>
6
6
 
7
- const { $resolveDynamicNodeComponent } = useNuxtApp()
7
+ const { $resolveDynamicEntityComponent } = useNuxtApp()
8
8
 
9
9
  defineOptions({
10
10
  name: 'Homepage',
@@ -20,7 +20,7 @@ const { entity: node } = await useDrupalRouteQuery('slug')
20
20
  const contentType = computed(() => node.value?.__typename)
21
21
 
22
22
  const pageComponent = computed(() => {
23
- return $resolveDynamicNodeComponent(contentType.value)
23
+ return $resolveDynamicEntityComponent(contentType.value)
24
24
  })
25
25
 
26
26
  await renderPageDependencies()
@@ -4,7 +4,7 @@
4
4
 
5
5
  <script lang="ts" setup>
6
6
 
7
- const { $resolveDynamicNodeComponent } = useNuxtApp()
7
+ const { $resolveDynamicEntityComponent } = useNuxtApp()
8
8
 
9
9
  defineOptions({
10
10
  name: 'PageNodeCanonical',
@@ -18,7 +18,7 @@ const { entity: node } = await useDrupalRouteQuery('nodeCanonical')
18
18
  const contentType = computed(() => node.value?.__typename)
19
19
 
20
20
  const pageComponent = computed(() => {
21
- return $resolveDynamicNodeComponent(contentType.value)
21
+ return $resolveDynamicEntityComponent(contentType.value)
22
22
  })
23
23
 
24
24
  await renderPageDependencies()
@@ -1,7 +1,7 @@
1
1
  import { defineNuxtPlugin } from 'nuxt/app'
2
- import type { DrupalMessage } from '~/composables/useDrupalMessages'
3
- import { useCDNHeaders } from '#nuxt-multi-cache/composables'
4
- import type { GraphqlResponseTyped } from '#graphql-middleware-server-options-build'
2
+ import type { DrupalMessage } from '../composables/useDrupalMessages'
3
+ import type { GraphqlResponseTyped } from '#nuxt-graphql-middleware/response'
4
+ import { buildProxyRequestHeaders } from '~/shared/request'
5
5
 
6
6
  type GraphqlMessengerMessage = {
7
7
  type: string
@@ -30,21 +30,24 @@ function extractMessages(data: GraphqlResponseTyped): DrupalMessage[] {
30
30
  * This is only called when performing a query or mutation from within the nuxt
31
31
  * app (e.g. not via custom server routes).
32
32
  */
33
- export default defineNuxtPlugin(() => {
34
- const state = useGraphqlState()
35
- const { messages } = useDrupalMessages()
36
- const language = useCurrentLanguage()
37
- const config = useRuntimeConfig()
33
+ export default defineNuxtPlugin({
34
+ name: 'starterkit:graphql-plugin',
35
+ dependsOn: ['nuxt-graphql-middleware-provide-state', 'nuxt:router'],
36
+ setup() {
37
+ const state = useGraphqlState()
38
+ const { messages } = useDrupalMessages()
38
39
 
39
- if (!state) {
40
- return
41
- }
40
+ const event = import.meta.server ? useRequestEvent() : undefined
41
+
42
+ if (!state) {
43
+ throw new Error('Missing nuxt-graphql-middleware state.')
44
+ }
42
45
 
43
- state.fetchOptions = {
44
- /**
45
- * Interceptor called whenever a GraphQL response arrives.
46
- */
47
- onResponse(result) {
46
+ if (import.meta.server && event) {
47
+ state.fetchOptions.headers = buildProxyRequestHeaders(event)
48
+ }
49
+
50
+ state.fetchOptions.onResponse = (result) => {
48
51
  const data = result.response?._data
49
52
  if (!data) {
50
53
  return
@@ -56,60 +59,16 @@ export default defineNuxtPlugin(() => {
56
59
  if (!exists) {
57
60
  messages.value.push(v)
58
61
 
59
- // When there are messages, we have to make the whole request uncacheable.
60
- useCDNHeaders((v) => v.private())
61
- }
62
- })
63
-
64
- if (import.meta.server) {
65
- const event = useRequestEvent()
66
-
67
- useCDNHeaders((helper) => {
68
- if (!data.__cacheability?.isCacheable) {
69
- helper.private()
70
- return
62
+ if (import.meta.server) {
63
+ // When there are messages, we have to make the whole request uncacheable.
64
+ useCDNHeaders((v) => v.private())
71
65
  }
72
-
73
- helper
74
- .public()
75
- .setNumeric('sharedMaxAge', data.__cacheability.sharedMaxAge)
76
- .addTags(data.__cacheability.tagsCdn)
77
- }, event)
78
- }
79
- },
80
-
81
- onRequest({ options, request }) {
82
- // if (import.meta.server && import.meta.dev) {
83
- // console.log('GraphQL Query: ' + request)
84
- // }
85
- try {
86
- if (!options.params) {
87
- options.params = {}
88
- }
89
-
90
- /*
91
- // Add the build hash to every GraphQL request.
92
- // We do this so that after a deployment, if the user is using the
93
- // "new" version of the app, the request URL issued is now different
94
- // than the previous one and thus will not be served from cache.
95
- options.params.__h = config.public.buildHash
96
-
97
- // Add the current language to the URL
98
- options.params.__l = language.value
99
-
100
- if (import.meta.server) {
101
- options.params.__server = 'true'
102
66
  }
103
- */
67
+ })
104
68
 
105
- const requestHeaders = useRequestHeaders()
106
- Object.keys(requestHeaders).forEach((key) => {
107
- options.headers?.append(key, requestHeaders[key])
108
- })
109
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
110
- } catch (e) {
111
- // Do nothing.
69
+ if (import.meta.server && event) {
70
+ useGraphqlCacheability(event, result.response?._data)
112
71
  }
113
- },
114
- }
72
+ }
73
+ },
115
74
  })
@@ -0,0 +1,105 @@
1
+
2
+ import type {
3
+ GlobalConfigFragment,
4
+ InitDataQuery,
5
+ MenuLinkTreeElementFirstFragment,
6
+ MenuLinkTreeFragment,
7
+ } from '#graphql-operations'
8
+ import type { GraphqlResponse } from '#nuxt-graphql-middleware/response'
9
+ type InitDataResponse = GraphqlResponse<InitDataQuery>
10
+ export type MappedMenuLink = {
11
+ id: string
12
+ label: string
13
+ href?: string
14
+ children?: MappedMenuLink[]
15
+ }
16
+ export interface InitData {
17
+ metaMenuLinks: MappedMenuLink[]
18
+ mainMenuLinks: MappedMenuLink[]
19
+ footerMenuLinks: MappedMenuLink[]
20
+ footerMetaMenuLinks: MappedMenuLink[]
21
+ globalConfig: GlobalConfigFragment
22
+ }
23
+ /**
24
+ * Maps a MenuLinkTreeElementFirstFragment array to a MappedMenuLink array.
25
+ */
26
+ export function mapMenuLinkTree(
27
+ menuLinks?: (MenuLinkTreeFragment | MenuLinkTreeElementFirstFragment)[],
28
+ context: { count: number } = { count: 0 },
29
+ ): MappedMenuLink[] {
30
+ if (!menuLinks) {
31
+ return []
32
+ }
33
+ return menuLinks.map((menuLink) => {
34
+ const id = `menu-item-${context.count++}`
35
+ // Extract the basic properties
36
+ const label = menuLink.link.label
37
+ const href = menuLink.link.url?.path
38
+ // Process children if they exist
39
+ const children =
40
+ 'subtree' in menuLink && menuLink.subtree && menuLink.subtree.length > 0
41
+ ? mapMenuLinkTree(menuLink.subtree, context)
42
+ : undefined
43
+ // Return the mapped menu link
44
+ return {
45
+ id,
46
+ label,
47
+ href,
48
+ children,
49
+ }
50
+ })
51
+ }
52
+ function mapInitData(response: InitDataResponse): InitData {
53
+ if (response.data) {
54
+ return {
55
+ metaMenuLinks: mapMenuLinkTree(response.data.metaMenu?.links),
56
+ mainMenuLinks: mapMenuLinkTree(response.data.mainMenu?.links),
57
+ footerMenuLinks: mapMenuLinkTree(response.data.footerMenu?.links),
58
+ footerMetaMenuLinks: mapMenuLinkTree(response.data.footerMetaMenu?.links),
59
+ globalConfig: response.data.globalConfig || {},
60
+ }
61
+ }
62
+ throw new Error('Failed to load init data.')
63
+ }
64
+ export default defineNuxtPlugin({
65
+ name: 'starterkit:init-data',
66
+ dependsOn: [
67
+ 'nuxt-graphql-middleware-provide-state',
68
+ 'starterkit:graphql-plugin',
69
+ 'nuxt:router',
70
+ ],
71
+ async setup() {
72
+ const data = useState<InitData | null>('initData', () => null)
73
+ if (import.meta.server) {
74
+ const event = useRequestEvent()
75
+ const language = useCurrentLanguage()
76
+ if (!event) {
77
+ throw new Error('Missing request event.')
78
+ }
79
+ const { value: cachedResponse, addToCache } =
80
+ await useDataCache<InitDataResponse>(
81
+ 'initData_' + language.value,
82
+ event,
83
+ )
84
+ const response = cachedResponse || (await useGraphqlQuery('initData'))
85
+ data.value = mapInitData(response)
86
+ if (!cachedResponse && response.extensions.cacheability?.isCacheable) {
87
+ await addToCache(response, response.extensions.cacheability?.tagsNuxt)
88
+ }
89
+ }
90
+ if (import.meta.client) {
91
+ async function loadInitData() {
92
+ data.value = await useGraphqlQuery('initData', null, {
93
+ graphqlCaching: {
94
+ client: true,
95
+ },
96
+ }).then(mapInitData)
97
+ }
98
+ if (!data.value) {
99
+ await loadInitData()
100
+ }
101
+ const language = useCurrentLanguage()
102
+ watch(language, loadInitData)
103
+ }
104
+ },
105
+ })
@@ -0,0 +1,17 @@
1
+ query contentSearch($keys: String!, $language: String, $facets: [String!], $filter: SearchApiQueryFilterInput, $limit: Int, $offset: Int) {
2
+ searchApiQuery(indexId: "content_search", keys: $keys, language: $language, facets: $facets, filter: $filter, limit: $limit, offset: $offset) {
3
+ count
4
+ facets {
5
+ field
6
+ filter {
7
+ id
8
+ label
9
+ }
10
+ count
11
+ results {
12
+ bundle: __typename
13
+ ...entitySearchResult
14
+ }
15
+ }
16
+ }
17
+ }
@@ -83,16 +83,10 @@ fragment globalConfig on TranslatableConfigPagesGlobal {
83
83
  phoneNumber: fieldIcmsPhoneNumber
84
84
  emailAddress: fieldIcmsEmailAddress
85
85
  contactButtons: fieldIcmsContactButtons {
86
- ...paragraphsFieldItem
87
- props {
88
- ...paragraphIcmsButtonElement
89
- }
86
+ ...paragraphIcmsButtonElement
90
87
  }
91
88
  metaLinks: fieldIcmsMetaLinks {
92
- ...paragraphsFieldItem
93
- props {
94
- ...paragraphIcmsButtonElement
95
- }
89
+ ...paragraphIcmsButtonElement
96
90
  }
97
91
  socialMediaLinks: fieldIcmsSocialMediaLinks {
98
92
  uri {
@@ -0,0 +1,5 @@
1
+ query loadTranslations {
2
+ translations: textsLoader {
3
+ ...easyTexts
4
+ }
5
+ }
@@ -222,6 +222,7 @@ const config: Config = {
222
222
  ],
223
223
  corePlugins: {
224
224
  textOpacity: false,
225
+ container: false,
225
226
  },
226
227
  }
227
228
 
@@ -0,0 +1 @@
1
+ export type MenuName = 'metaMenu' | 'mainMenu' | 'footerMenu' | 'footerMetaMenu'
@@ -1,26 +0,0 @@
1
- <template>
2
- <div
3
- class="pr-4 font-medium lg:pr-12"
4
- :class="{
5
- 'sticky top-0': isSticky,
6
- }"
7
- >
8
- <nuxt-link
9
- :to="{ name: 'search' }"
10
- class="flex h-10 items-center gap-1 px-3 text-primary-500 lg:h-[50px]"
11
- >
12
- <span class="sr-only lg:not-sr-only">
13
- {{ $texts('header.search', 'Suche') }}
14
- </span>
15
- <SpriteSymbol name="magnifyingglass" class="size-5" />
16
- </nuxt-link>
17
- </div>
18
- </template>
19
-
20
- <script lang="ts" setup>
21
- defineProps<{
22
- isSticky: boolean
23
- }>()
24
-
25
- const { $texts } = useNuxtApp()
26
- </script>
@@ -1,31 +0,0 @@
1
- import type {
2
- LanguageSwitchLinkFragment,
3
- RouteQuery,
4
- } from '#graphql-operations'
5
-
6
- export function setLanguageLinksFromFragment(
7
- links: LanguageSwitchLinkFragment[],
8
- ) {
9
- const route = useRoute()
10
-
11
- definePageLanguageLinks(
12
- route.path,
13
- links.reduce<Record<string, string>>((acc, v) => {
14
- if (v.language.id && v.url.path) {
15
- acc[v.language.id] = v.url.path
16
- }
17
- return acc
18
- }, {}),
19
- )
20
- }
21
-
22
- export function setLanguageLinksFromRoute(
23
- query?: RouteQuery | undefined | null,
24
- ) {
25
- if (query && query.route && 'languageSwitchLinks' in query.route) {
26
- setLanguageLinksFromFragment(query.route.languageSwitchLinks)
27
- return
28
- }
29
- const route = useRoute()
30
- definePageLanguageLinks(route.path, {})
31
- }
@@ -1,69 +0,0 @@
1
- import type { InitData } from '~/composables/useInitData'
2
- import type { MenuLinkTreeFragment } from '#graphql-operations'
3
-
4
- function isLinkTreeActive(
5
- tree: MenuLinkTreeFragment & { subtree?: Array<MenuLinkTreeFragment> },
6
- currentRoutePath: string,
7
- ): boolean {
8
- if (tree.link.url?.path === currentRoutePath) {
9
- return true
10
- }
11
-
12
- if (tree.subtree) {
13
- return tree.subtree.some((subtreeEl) =>
14
- isLinkTreeActive(subtreeEl, currentRoutePath),
15
- )
16
- }
17
-
18
- return false
19
- }
20
-
21
- export async function useMainMenuLinks() {
22
- const initData: Ref<InitData> = await useInitData()
23
- const currentRoute = useRoute()
24
-
25
- const links = computed(() => {
26
- return initData.value.mainMenuLinks
27
- })
28
-
29
- const currentActiveMainLink = computed(() => {
30
- return initData.value.mainMenuLinks.find((l) =>
31
- isLinkTreeActive(l, currentRoute.path),
32
- )
33
- })
34
-
35
- const activeFirstLevelLink = computed(() => {
36
- return currentActiveMainLink.value?.subtree.find((l) =>
37
- isLinkTreeActive(l, currentRoute.path),
38
- )
39
- })
40
-
41
- const activeSecondLevelLink = computed(() => {
42
- const activeSubtree = activeFirstLevelLink.value?.subtree
43
- if (activeSubtree) {
44
- return activeSubtree.find((l) => isLinkTreeActive(l, currentRoute.path))
45
- }
46
- return null
47
- })
48
-
49
- const activeThirdLevelLink = computed(() => {
50
- const activeSubtree = activeSecondLevelLink.value?.subtree
51
- if (activeSubtree) {
52
- return activeSubtree.find((l) => isLinkTreeActive(l, currentRoute.path))
53
- }
54
- return null
55
- })
56
-
57
- const isHotelActive = computed(() => {
58
- return isLinkTreeActive(initData.value.mainMenuLinks[2], currentRoute.path)
59
- })
60
-
61
- return {
62
- links,
63
- currentActiveMainLink,
64
- activeFirstLevelLink,
65
- activeSecondLevelLink,
66
- activeThirdLevelLink,
67
- isHotelActive,
68
- }
69
- }
@@ -1,44 +0,0 @@
1
- import type { InitData } from '~/composables/useInitData'
2
- import type { MenuLinkTreeFragment } from '#graphql-operations'
3
-
4
- function isLinkTreeActive(
5
- tree: MenuLinkTreeFragment & { subtree?: Array<MenuLinkTreeFragment> },
6
- currentRoutePath: string,
7
- ): boolean {
8
- if (tree.link.url?.path === currentRoutePath) {
9
- return true
10
- }
11
-
12
- if (tree.subtree) {
13
- return tree.subtree.some((subtreeEl) =>
14
- isLinkTreeActive(subtreeEl, currentRoutePath),
15
- )
16
- }
17
-
18
- return false
19
- }
20
-
21
- export async function useMetaMenuLinks() {
22
- const initData: Ref<InitData> = await useInitData()
23
- const currentRoute = useRoute()
24
-
25
- const links = computed(() => {
26
- return initData.value.metaMenuLinks
27
- })
28
-
29
- const currentActiveMetaLink = computed(() => {
30
- return initData.value.metaMenuLinks.find((l) =>
31
- isLinkTreeActive(l, currentRoute.path),
32
- )
33
- })
34
-
35
- const isHotelActive = computed(() => {
36
- return isLinkTreeActive(initData.value.metaMenuLinks[2], currentRoute.path)
37
- })
38
-
39
- return {
40
- links,
41
- currentActiveMetaLink,
42
- isHotelActive,
43
- }
44
- }