@iqual/nuxt-icms 1.0.14 → 1.2.1

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 (427) 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/Blokkli/Timeline/Element/icms_timeline_element.svg +7 -0
  9. package/components/Blokkli/Timeline/Element/icon.svg +7 -0
  10. package/components/Blokkli/Timeline/Element/index.vue +14 -0
  11. package/components/Blokkli/Timeline/Layout/icms_layout_timeline.svg +16 -0
  12. package/components/Blokkli/Timeline/Layout/icon.svg +16 -0
  13. package/components/Blokkli/Timeline/Layout/index.vue +14 -0
  14. package/components/Blokkli/iFrame/icon-blokkli-option-large-spacing-bottom.svg +1 -0
  15. package/components/Blokkli/iFrame/icon-blokkli-option-large-spacing-top.svg +1 -0
  16. package/components/Blokkli/iFrame/icon-blokkli-option-no-spacing.svg +1 -0
  17. package/components/Blokkli/iFrame/icon-blokkli-option-small-spacing-bottom.svg +1 -0
  18. package/components/Blokkli/iFrame/icon-blokkli-option-small-spacing-top.svg +1 -0
  19. package/components/Blokkli/iFrame/{Layout/index.vue → index.vue} +2 -6
  20. package/components/DesignSystem/Atoms/Caption.vue +15 -0
  21. package/components/DesignSystem/Atoms/LinkListItem.vue +21 -0
  22. package/components/DesignSystem/Molecules/MediaSlider.vue +25 -8
  23. package/components/DesignSystem/Organisms/Map.vue +61 -0
  24. package/components/DesignSystem/Organisms/TimelineElement.vue +92 -0
  25. package/components/Media/Image/index.vue +4 -162
  26. package/components/Node/Icms/Page/SearchResult/fragment.graphql +8 -0
  27. package/components/Node/Icms/Page/SearchResult/index.vue +12 -0
  28. package/components/Node/Icms/Page/Teaser/fragment.graphql +17 -0
  29. package/components/Node/Icms/Page/Teaser/index.vue +20 -0
  30. package/components/Node/Icms/Page/fragment.graphql +18 -0
  31. package/components/Paragraph/CallToAction/index.vue +12 -8
  32. package/components/Paragraph/Card/Layout/index.vue +2 -2
  33. package/components/Paragraph/Downloads/index.vue +3 -14
  34. package/components/Paragraph/FAQ/Layout/index.vue +23 -1
  35. package/components/Paragraph/FlipTeasers/index.vue +2 -2
  36. package/components/Paragraph/Gallery/index.vue +32 -171
  37. package/components/Paragraph/HeroImage/index.vue +13 -4
  38. package/components/Paragraph/Media/index.vue +7 -2
  39. package/components/Paragraph/Table/index.vue +2 -2
  40. package/components/Paragraph/Team/Layout/index.vue +2 -2
  41. package/components/Paragraph/Teasers/fragment.graphql +2 -15
  42. package/components/Paragraph/Teasers/index.vue +11 -14
  43. package/components/Paragraph/TextMedia/index.vue +40 -33
  44. package/components/Paragraph/Timeline/Element/fragment.graphql +16 -0
  45. package/components/Paragraph/Timeline/Element/index.vue +31 -0
  46. package/components/Paragraph/Timeline/Layout/fragment.graphql +15 -0
  47. package/components/Paragraph/Timeline/Layout/index.vue +325 -0
  48. package/components/Paragraph/iFrame/{Layout/fragment.graphql → fragment.graphql} +2 -6
  49. package/components/Paragraph/iFrame/index.vue +56 -0
  50. package/components/Search/Facets/FacetDropdownUI.vue +222 -0
  51. package/components/Search/Facets/FacetedSearchUI.vue +397 -0
  52. package/components/Search/Facets/fragment.graphql +40 -0
  53. package/components/Section/Header/LanguageDropdown.vue +60 -73
  54. package/components/Section/Header/LanguageSwitcher.vue +37 -0
  55. package/components/Section/Header/MetaMenu.vue +10 -1
  56. package/components/Section/Header/index.vue +80 -67
  57. package/components/ui/accordion/Accordion.vue +2 -2
  58. package/components/ui/accordion/AccordionContent.vue +5 -5
  59. package/components/ui/accordion/AccordionItem.vue +9 -10
  60. package/components/ui/accordion/AccordionTrigger.vue +5 -5
  61. package/components/ui/alert/Alert.vue +17 -0
  62. package/components/ui/alert/AlertDescription.vue +14 -0
  63. package/components/ui/alert/AlertTitle.vue +14 -0
  64. package/components/ui/alert/index.ts +24 -0
  65. package/components/ui/alert-dialog/AlertDialog.vue +15 -0
  66. package/components/ui/alert-dialog/AlertDialogAction.vue +22 -0
  67. package/components/ui/alert-dialog/AlertDialogCancel.vue +29 -0
  68. package/components/ui/alert-dialog/AlertDialogContent.vue +43 -0
  69. package/components/ui/alert-dialog/AlertDialogDescription.vue +27 -0
  70. package/components/ui/alert-dialog/AlertDialogFooter.vue +21 -0
  71. package/components/ui/alert-dialog/AlertDialogHeader.vue +16 -0
  72. package/components/ui/alert-dialog/AlertDialogTitle.vue +24 -0
  73. package/components/ui/alert-dialog/AlertDialogTrigger.vue +12 -0
  74. package/components/ui/alert-dialog/index.ts +9 -0
  75. package/components/ui/aspect-ratio/AspectRatio.vue +12 -0
  76. package/components/ui/aspect-ratio/index.ts +1 -0
  77. package/components/ui/auto-form/AutoForm.vue +106 -0
  78. package/components/ui/auto-form/AutoFormField.vue +45 -0
  79. package/components/ui/auto-form/AutoFormFieldArray.vue +110 -0
  80. package/components/ui/auto-form/AutoFormFieldBoolean.vue +41 -0
  81. package/components/ui/auto-form/AutoFormFieldDate.vue +57 -0
  82. package/components/ui/auto-form/AutoFormFieldEnum.vue +49 -0
  83. package/components/ui/auto-form/AutoFormFieldFile.vue +74 -0
  84. package/components/ui/auto-form/AutoFormFieldInput.vue +36 -0
  85. package/components/ui/auto-form/AutoFormFieldNumber.vue +32 -0
  86. package/components/ui/auto-form/AutoFormFieldObject.vue +78 -0
  87. package/components/ui/auto-form/AutoFormLabel.vue +14 -0
  88. package/components/ui/auto-form/constant.ts +40 -0
  89. package/components/ui/auto-form/dependencies.ts +93 -0
  90. package/components/ui/auto-form/index.ts +15 -0
  91. package/components/ui/auto-form/interface.ts +95 -0
  92. package/components/ui/auto-form/utils.ts +188 -0
  93. package/components/ui/avatar/Avatar.vue +22 -0
  94. package/components/ui/avatar/AvatarFallback.vue +12 -0
  95. package/components/ui/avatar/AvatarImage.vue +10 -0
  96. package/components/ui/avatar/index.ts +25 -0
  97. package/components/ui/badge/Badge.vue +17 -0
  98. package/components/ui/badge/index.ts +26 -0
  99. package/components/ui/breadcrumb/Breadcrumb.vue +13 -0
  100. package/components/ui/breadcrumb/BreadcrumbEllipsis.vue +22 -0
  101. package/components/ui/breadcrumb/BreadcrumbItem.vue +16 -0
  102. package/components/ui/breadcrumb/BreadcrumbLink.vue +20 -0
  103. package/components/ui/breadcrumb/BreadcrumbList.vue +16 -0
  104. package/components/ui/breadcrumb/BreadcrumbPage.vue +19 -0
  105. package/components/ui/breadcrumb/BreadcrumbSeparator.vue +21 -0
  106. package/components/ui/breadcrumb/index.ts +7 -0
  107. package/components/ui/button/Button.vue +4 -2
  108. package/components/ui/button/index.ts +9 -9
  109. package/components/ui/calendar/Calendar.vue +62 -0
  110. package/components/ui/calendar/CalendarCell.vue +26 -0
  111. package/components/ui/calendar/CalendarCellTrigger.vue +40 -0
  112. package/components/ui/calendar/CalendarGrid.vue +26 -0
  113. package/components/ui/calendar/CalendarGridBody.vue +12 -0
  114. package/components/ui/calendar/CalendarGridHead.vue +12 -0
  115. package/components/ui/calendar/CalendarGridRow.vue +23 -0
  116. package/components/ui/calendar/CalendarHeadCell.vue +23 -0
  117. package/components/ui/calendar/CalendarHeader.vue +23 -0
  118. package/components/ui/calendar/CalendarHeading.vue +33 -0
  119. package/components/ui/calendar/CalendarNextButton.vue +34 -0
  120. package/components/ui/calendar/CalendarPrevButton.vue +34 -0
  121. package/components/ui/calendar/index.ts +12 -0
  122. package/components/ui/card/Card.vue +21 -0
  123. package/components/ui/card/CardContent.vue +14 -0
  124. package/components/ui/card/CardDescription.vue +14 -0
  125. package/components/ui/card/CardFooter.vue +14 -0
  126. package/components/ui/card/CardHeader.vue +14 -0
  127. package/components/ui/card/CardTitle.vue +18 -0
  128. package/components/ui/card/index.ts +6 -0
  129. package/components/ui/carousel/Carousel.vue +3 -23
  130. package/components/ui/carousel/CarouselContent.vue +1 -2
  131. package/components/ui/carousel/CarouselItem.vue +5 -7
  132. package/components/ui/carousel/CarouselNext.vue +7 -9
  133. package/components/ui/carousel/CarouselPrevious.vue +7 -9
  134. package/components/ui/carousel/index.ts +3 -1
  135. package/components/ui/carousel/interface.ts +3 -1
  136. package/components/ui/carousel/useCarousel.ts +13 -23
  137. package/components/ui/chart/ChartCrosshair.vue +45 -0
  138. package/components/ui/chart/ChartLegend.vue +50 -0
  139. package/components/ui/chart/ChartSingleTooltip.vue +64 -0
  140. package/components/ui/chart/ChartTooltip.vue +40 -0
  141. package/components/ui/chart/index.ts +18 -0
  142. package/components/ui/chart/interface.ts +64 -0
  143. package/components/ui/chart-area/AreaChart.vue +141 -0
  144. package/components/ui/chart-area/index.ts +66 -0
  145. package/components/ui/chart-bar/BarChart.vue +116 -0
  146. package/components/ui/chart-bar/index.ts +66 -0
  147. package/components/ui/chart-donut/DonutChart.vue +101 -0
  148. package/components/ui/chart-donut/index.ts +39 -0
  149. package/components/ui/chart-line/LineChart.vue +107 -0
  150. package/components/ui/chart-line/index.ts +66 -0
  151. package/components/ui/checkbox/Checkbox.vue +1 -1
  152. package/components/ui/collapsible/Collapsible.vue +15 -0
  153. package/components/ui/collapsible/CollapsibleContent.vue +12 -0
  154. package/components/ui/collapsible/CollapsibleTrigger.vue +12 -0
  155. package/components/ui/collapsible/index.ts +3 -0
  156. package/components/ui/command/Command.vue +31 -0
  157. package/components/ui/command/CommandDialog.vue +21 -0
  158. package/components/ui/command/CommandEmpty.vue +21 -0
  159. package/components/ui/command/CommandGroup.vue +30 -0
  160. package/components/ui/command/CommandInput.vue +35 -0
  161. package/components/ui/command/CommandItem.vue +27 -0
  162. package/components/ui/command/CommandList.vue +28 -0
  163. package/components/ui/command/CommandSeparator.vue +24 -0
  164. package/components/ui/command/CommandShortcut.vue +14 -0
  165. package/components/ui/command/index.ts +9 -0
  166. package/components/ui/context-menu/ContextMenu.vue +15 -0
  167. package/components/ui/context-menu/ContextMenuCheckboxItem.vue +41 -0
  168. package/components/ui/context-menu/ContextMenuContent.vue +37 -0
  169. package/components/ui/context-menu/ContextMenuGroup.vue +12 -0
  170. package/components/ui/context-menu/ContextMenuItem.vue +35 -0
  171. package/components/ui/context-menu/ContextMenuLabel.vue +27 -0
  172. package/components/ui/context-menu/ContextMenuPortal.vue +12 -0
  173. package/components/ui/context-menu/ContextMenuRadioGroup.vue +19 -0
  174. package/components/ui/context-menu/ContextMenuRadioItem.vue +41 -0
  175. package/components/ui/context-menu/ContextMenuSeparator.vue +22 -0
  176. package/components/ui/context-menu/ContextMenuShortcut.vue +14 -0
  177. package/components/ui/context-menu/ContextMenuSub.vue +19 -0
  178. package/components/ui/context-menu/ContextMenuSubContent.vue +36 -0
  179. package/components/ui/context-menu/ContextMenuSubTrigger.vue +36 -0
  180. package/components/ui/context-menu/ContextMenuTrigger.vue +14 -0
  181. package/components/ui/context-menu/index.ts +14 -0
  182. package/components/ui/dialog/Dialog.vue +2 -6
  183. package/components/ui/dialog/DialogClose.vue +2 -1
  184. package/components/ui/dialog/DialogContent.vue +10 -12
  185. package/components/ui/dialog/DialogDescription.vue +6 -10
  186. package/components/ui/dialog/DialogScrollContent.vue +15 -21
  187. package/components/ui/dialog/DialogTitle.vue +9 -6
  188. package/components/ui/dialog/DialogTrigger.vue +2 -1
  189. package/components/ui/drawer/Drawer.vue +19 -0
  190. package/components/ui/drawer/DrawerContent.vue +28 -0
  191. package/components/ui/drawer/DrawerDescription.vue +21 -0
  192. package/components/ui/drawer/DrawerFooter.vue +14 -0
  193. package/components/ui/drawer/DrawerHeader.vue +14 -0
  194. package/components/ui/drawer/DrawerOverlay.vue +19 -0
  195. package/components/ui/drawer/DrawerTitle.vue +21 -0
  196. package/components/ui/drawer/index.ts +8 -0
  197. package/components/ui/dropdown-menu/DropdownMenu.vue +15 -0
  198. package/components/ui/dropdown-menu/DropdownMenuCheckboxItem.vue +41 -0
  199. package/components/ui/dropdown-menu/DropdownMenuContent.vue +39 -0
  200. package/components/ui/dropdown-menu/DropdownMenuGroup.vue +12 -0
  201. package/components/ui/dropdown-menu/DropdownMenuItem.vue +30 -0
  202. package/components/ui/dropdown-menu/DropdownMenuLabel.vue +26 -0
  203. package/components/ui/dropdown-menu/DropdownMenuRadioGroup.vue +19 -0
  204. package/components/ui/dropdown-menu/DropdownMenuRadioItem.vue +42 -0
  205. package/components/ui/dropdown-menu/DropdownMenuSeparator.vue +24 -0
  206. package/components/ui/dropdown-menu/DropdownMenuShortcut.vue +14 -0
  207. package/components/ui/dropdown-menu/DropdownMenuSub.vue +19 -0
  208. package/components/ui/dropdown-menu/DropdownMenuSubContent.vue +31 -0
  209. package/components/ui/dropdown-menu/DropdownMenuSubTrigger.vue +35 -0
  210. package/components/ui/dropdown-menu/DropdownMenuTrigger.vue +14 -0
  211. package/components/ui/dropdown-menu/index.ts +16 -0
  212. package/components/ui/form/FormControl.vue +16 -0
  213. package/components/ui/form/FormDescription.vue +20 -0
  214. package/components/ui/form/FormItem.vue +20 -0
  215. package/components/ui/form/FormLabel.vue +23 -0
  216. package/components/ui/form/FormMessage.vue +16 -0
  217. package/components/ui/form/index.ts +7 -0
  218. package/components/ui/form/injectionKeys.ts +4 -0
  219. package/components/ui/form/useFormField.ts +30 -0
  220. package/components/ui/hover-card/HoverCard.vue +15 -0
  221. package/components/ui/hover-card/HoverCardContent.vue +43 -0
  222. package/components/ui/hover-card/HoverCardTrigger.vue +12 -0
  223. package/components/ui/hover-card/index.ts +3 -0
  224. package/components/ui/input/Input.vue +1 -1
  225. package/components/ui/menubar/Menubar.vue +36 -0
  226. package/components/ui/menubar/MenubarCheckboxItem.vue +41 -0
  227. package/components/ui/menubar/MenubarContent.vue +45 -0
  228. package/components/ui/menubar/MenubarGroup.vue +12 -0
  229. package/components/ui/menubar/MenubarItem.vue +36 -0
  230. package/components/ui/menubar/MenubarLabel.vue +14 -0
  231. package/components/ui/menubar/MenubarMenu.vue +12 -0
  232. package/components/ui/menubar/MenubarRadioGroup.vue +20 -0
  233. package/components/ui/menubar/MenubarRadioItem.vue +41 -0
  234. package/components/ui/menubar/MenubarSeparator.vue +21 -0
  235. package/components/ui/menubar/MenubarShortcut.vue +14 -0
  236. package/components/ui/menubar/MenubarSub.vue +20 -0
  237. package/components/ui/menubar/MenubarSubContent.vue +40 -0
  238. package/components/ui/menubar/MenubarSubTrigger.vue +32 -0
  239. package/components/ui/menubar/MenubarTrigger.vue +31 -0
  240. package/components/ui/menubar/index.ts +15 -0
  241. package/components/ui/navigation-menu/NavigationMenu.vue +34 -0
  242. package/components/ui/navigation-menu/NavigationMenuContent.vue +35 -0
  243. package/components/ui/navigation-menu/NavigationMenuIndicator.vue +26 -0
  244. package/components/ui/navigation-menu/NavigationMenuItem.vue +12 -0
  245. package/components/ui/navigation-menu/NavigationMenuLink.vue +19 -0
  246. package/components/ui/navigation-menu/NavigationMenuList.vue +31 -0
  247. package/components/ui/navigation-menu/NavigationMenuTrigger.vue +36 -0
  248. package/components/ui/navigation-menu/NavigationMenuViewport.vue +35 -0
  249. package/components/ui/navigation-menu/index.ts +14 -0
  250. package/components/ui/number-field/NumberField.vue +24 -0
  251. package/components/ui/number-field/NumberFieldContent.vue +14 -0
  252. package/components/ui/number-field/NumberFieldDecrement.vue +26 -0
  253. package/components/ui/number-field/NumberFieldIncrement.vue +26 -0
  254. package/components/ui/number-field/NumberFieldInput.vue +16 -0
  255. package/components/ui/number-field/index.ts +5 -0
  256. package/components/ui/pagination/PaginationEllipsis.vue +24 -0
  257. package/components/ui/pagination/PaginationFirst.vue +31 -0
  258. package/components/ui/pagination/PaginationLast.vue +31 -0
  259. package/components/ui/pagination/PaginationNext.vue +31 -0
  260. package/components/ui/pagination/PaginationPrev.vue +31 -0
  261. package/components/ui/pagination/index.ts +10 -0
  262. package/components/ui/pin-input/PinInput.vue +25 -0
  263. package/components/ui/pin-input/PinInputGroup.vue +20 -0
  264. package/components/ui/pin-input/PinInputInput.vue +20 -0
  265. package/components/ui/pin-input/PinInputSeparator.vue +16 -0
  266. package/components/ui/pin-input/index.ts +4 -0
  267. package/components/ui/popover/Popover.vue +15 -0
  268. package/components/ui/popover/PopoverContent.vue +49 -0
  269. package/components/ui/popover/PopoverTrigger.vue +12 -0
  270. package/components/ui/popover/index.ts +3 -0
  271. package/components/ui/progress/Progress.vue +41 -0
  272. package/components/ui/progress/index.ts +1 -0
  273. package/components/ui/radio-group/RadioGroupItem.vue +1 -1
  274. package/components/ui/range-calendar/RangeCalendar.vue +62 -0
  275. package/components/ui/range-calendar/RangeCalendarCell.vue +26 -0
  276. package/components/ui/range-calendar/RangeCalendarCellTrigger.vue +42 -0
  277. package/components/ui/range-calendar/RangeCalendarGrid.vue +26 -0
  278. package/components/ui/range-calendar/RangeCalendarGridBody.vue +12 -0
  279. package/components/ui/range-calendar/RangeCalendarGridHead.vue +12 -0
  280. package/components/ui/range-calendar/RangeCalendarGridRow.vue +23 -0
  281. package/components/ui/range-calendar/RangeCalendarHeadCell.vue +23 -0
  282. package/components/ui/range-calendar/RangeCalendarHeader.vue +23 -0
  283. package/components/ui/range-calendar/RangeCalendarHeading.vue +33 -0
  284. package/components/ui/range-calendar/RangeCalendarNextButton.vue +34 -0
  285. package/components/ui/range-calendar/RangeCalendarPrevButton.vue +34 -0
  286. package/components/ui/range-calendar/index.ts +12 -0
  287. package/components/ui/resizable/ResizableHandle.vue +28 -0
  288. package/components/ui/resizable/ResizablePanelGroup.vue +23 -0
  289. package/components/ui/resizable/index.ts +3 -0
  290. package/components/ui/scroll-area/ScrollArea.vue +31 -0
  291. package/components/ui/scroll-area/ScrollBar.vue +32 -0
  292. package/components/ui/scroll-area/index.ts +2 -0
  293. package/components/ui/select/SelectContent.vue +1 -1
  294. package/components/ui/select/SelectItem.vue +1 -1
  295. package/components/ui/select/SelectSeparator.vue +1 -1
  296. package/components/ui/select/SelectTrigger.vue +1 -1
  297. package/components/ui/separator/Separator.vue +37 -0
  298. package/components/ui/separator/index.ts +1 -0
  299. package/components/ui/sheet/Sheet.vue +15 -0
  300. package/components/ui/sheet/SheetClose.vue +12 -0
  301. package/components/ui/sheet/SheetContent.vue +58 -0
  302. package/components/ui/sheet/SheetDescription.vue +24 -0
  303. package/components/ui/sheet/SheetFooter.vue +19 -0
  304. package/components/ui/sheet/SheetHeader.vue +16 -0
  305. package/components/ui/sheet/SheetTitle.vue +24 -0
  306. package/components/ui/sheet/SheetTrigger.vue +12 -0
  307. package/components/ui/sheet/index.ts +32 -0
  308. package/components/ui/sidebar/Sidebar.vue +85 -0
  309. package/components/ui/sidebar/SidebarContent.vue +17 -0
  310. package/components/ui/sidebar/SidebarFooter.vue +17 -0
  311. package/components/ui/sidebar/SidebarGroup.vue +17 -0
  312. package/components/ui/sidebar/SidebarGroupAction.vue +26 -0
  313. package/components/ui/sidebar/SidebarGroupContent.vue +17 -0
  314. package/components/ui/sidebar/SidebarGroupLabel.vue +24 -0
  315. package/components/ui/sidebar/SidebarHeader.vue +17 -0
  316. package/components/ui/sidebar/SidebarInput.vue +21 -0
  317. package/components/ui/sidebar/SidebarInset.vue +20 -0
  318. package/components/ui/sidebar/SidebarMenu.vue +17 -0
  319. package/components/ui/sidebar/SidebarMenuAction.vue +34 -0
  320. package/components/ui/sidebar/SidebarMenuBadge.vue +25 -0
  321. package/components/ui/sidebar/SidebarMenuButton.vue +51 -0
  322. package/components/ui/sidebar/SidebarMenuButtonChild.vue +35 -0
  323. package/components/ui/sidebar/SidebarMenuItem.vue +17 -0
  324. package/components/ui/sidebar/SidebarMenuSkeleton.vue +34 -0
  325. package/components/ui/sidebar/SidebarMenuSub.vue +21 -0
  326. package/components/ui/sidebar/SidebarMenuSubButton.vue +35 -0
  327. package/components/ui/sidebar/SidebarMenuSubItem.vue +8 -0
  328. package/components/ui/sidebar/SidebarProvider.vue +81 -0
  329. package/components/ui/sidebar/SidebarRail.vue +32 -0
  330. package/components/ui/sidebar/SidebarSeparator.vue +18 -0
  331. package/components/ui/sidebar/SidebarTrigger.vue +26 -0
  332. package/components/ui/sidebar/index.ts +60 -0
  333. package/components/ui/sidebar/utils.ts +19 -0
  334. package/components/ui/skeleton/Skeleton.vue +14 -0
  335. package/components/ui/skeleton/index.ts +1 -0
  336. package/components/ui/slider/Slider.vue +37 -0
  337. package/components/ui/slider/index.ts +1 -0
  338. package/components/ui/sonner/Sonner.vue +23 -0
  339. package/components/ui/sonner/index.ts +1 -0
  340. package/components/ui/stepper/Stepper.vue +32 -0
  341. package/components/ui/stepper/StepperDescription.vue +24 -0
  342. package/components/ui/stepper/StepperIndicator.vue +36 -0
  343. package/components/ui/stepper/StepperItem.vue +28 -0
  344. package/components/ui/stepper/StepperSeparator.vue +32 -0
  345. package/components/ui/stepper/StepperTitle.vue +24 -0
  346. package/components/ui/stepper/StepperTrigger.vue +27 -0
  347. package/components/ui/stepper/index.ts +7 -0
  348. package/components/ui/switch/Switch.vue +40 -0
  349. package/components/ui/switch/index.ts +1 -0
  350. package/components/ui/table/Table.vue +16 -0
  351. package/components/ui/table/TableBody.vue +14 -0
  352. package/components/ui/table/TableCaption.vue +14 -0
  353. package/components/ui/table/TableCell.vue +21 -0
  354. package/components/ui/table/TableEmpty.vue +38 -0
  355. package/components/ui/table/TableFooter.vue +14 -0
  356. package/components/ui/table/TableHead.vue +14 -0
  357. package/components/ui/table/TableHeader.vue +14 -0
  358. package/components/ui/table/TableRow.vue +14 -0
  359. package/components/ui/table/index.ts +9 -0
  360. package/components/ui/tabs/TabsContent.vue +6 -11
  361. package/components/ui/tabs/TabsList.vue +8 -8
  362. package/components/ui/tabs/TabsTrigger.vue +9 -11
  363. package/components/ui/tags-input/TagsInput.vue +24 -0
  364. package/components/ui/tags-input/TagsInputInput.vue +21 -0
  365. package/components/ui/tags-input/TagsInputItem.vue +24 -0
  366. package/components/ui/tags-input/TagsInputItemDelete.vue +26 -0
  367. package/components/ui/tags-input/TagsInputItemText.vue +21 -0
  368. package/components/ui/tags-input/index.ts +5 -0
  369. package/components/ui/textarea/Textarea.vue +1 -1
  370. package/components/ui/toast/Toast.vue +30 -0
  371. package/components/ui/toast/ToastAction.vue +21 -0
  372. package/components/ui/toast/ToastClose.vue +24 -0
  373. package/components/ui/toast/ToastDescription.vue +21 -0
  374. package/components/ui/toast/ToastProvider.vue +12 -0
  375. package/components/ui/toast/ToastTitle.vue +21 -0
  376. package/components/ui/toast/ToastViewport.vue +19 -0
  377. package/components/ui/toast/Toaster.vue +30 -0
  378. package/components/ui/toast/index.ts +39 -0
  379. package/components/ui/toast/use-toast.ts +165 -0
  380. package/components/ui/toggle/Toggle.vue +38 -0
  381. package/components/ui/toggle/index.ts +28 -0
  382. package/components/ui/toggle-group/ToggleGroup.vue +36 -0
  383. package/components/ui/toggle-group/ToggleGroupItem.vue +37 -0
  384. package/components/ui/toggle-group/index.ts +2 -0
  385. package/components/ui/tooltip/Tooltip.vue +15 -0
  386. package/components/ui/tooltip/TooltipContent.vue +33 -0
  387. package/components/ui/tooltip/TooltipProvider.vue +12 -0
  388. package/components/ui/tooltip/TooltipTrigger.vue +12 -0
  389. package/components/ui/tooltip/index.ts +4 -0
  390. package/components/ui/v-calendar/Calendar.vue +343 -0
  391. package/components/ui/v-calendar/index.ts +22 -0
  392. package/composables/useAccordionScroll.ts +1 -1
  393. package/composables/useContentSearch.ts +0 -0
  394. package/composables/useImageSources.ts +208 -0
  395. package/composables/useLightbox.ts +81 -0
  396. package/composables/useMainMenuLinks.ts +1 -1
  397. package/composables/useMessageBus.ts +74 -0
  398. package/composables/useMetaMenuLinks.ts +1 -1
  399. package/composables/useNavigationOffset.ts +1 -1
  400. package/layouts/default.vue +2 -2
  401. package/layouts/error.vue +8 -10
  402. package/modules/dynamicEntityComponentResolver.ts +182 -0
  403. package/modules/dynamicParagraphResolver.ts +1 -1
  404. package/nuxt.config.ts +28 -32
  405. package/package.json +3 -2
  406. package/pages/[...slug]/index.vue +2 -2
  407. package/pages/index.vue +2 -2
  408. package/pages/node/[nid]/index.vue +2 -2
  409. package/queries/query.contentSearch.graphql +17 -0
  410. package/tailwind.config.ts +1 -0
  411. package/types/fslightbox-vue.d.ts +1 -0
  412. package/components/Blokkli/iFrame/Element/icon.svg +0 -5
  413. package/components/Blokkli/iFrame/Element/index.vue +0 -14
  414. package/components/Paragraph/iFrame/Element/fragment.graphql +0 -9
  415. package/components/Paragraph/iFrame/Element/index.vue +0 -16
  416. package/components/Paragraph/iFrame/Layout/index.vue +0 -161
  417. package/composables/languageLinks.ts +0 -31
  418. package/modules/dynamicNodeResolver.ts +0 -95
  419. package/pages/search/index.vue +0 -69
  420. package/pages/static-page/example.vue +0 -40
  421. package/queries/fragment.routeQuery.graphql +0 -51
  422. /package/components/Blokkli/{iFrame → Timeline}/Layout/icon-blokkli-option-large-spacing-bottom.svg +0 -0
  423. /package/components/Blokkli/{iFrame → Timeline}/Layout/icon-blokkli-option-large-spacing-top.svg +0 -0
  424. /package/components/Blokkli/{iFrame → Timeline}/Layout/icon-blokkli-option-no-spacing.svg +0 -0
  425. /package/components/Blokkli/{iFrame → Timeline}/Layout/icon-blokkli-option-small-spacing-bottom.svg +0 -0
  426. /package/components/Blokkli/{iFrame → Timeline}/Layout/icon-blokkli-option-small-spacing-top.svg +0 -0
  427. /package/components/Blokkli/iFrame/{Layout/icon.svg → icon.svg} +0 -0
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,18 +145,27 @@ 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: {
171
- nodeIcmsPage: { fragments: [
172
- 'nodeIcmsPage'
173
- ] },
174
- slug: { fragments: [
175
- 'nodeIcmsPage',
176
- ]},
177
- nodeCanonical: { fragments: [
178
- 'nodeIcmsPage',
179
- ]},
154
+ nodeIcmsPage: {
155
+ fragments: [
156
+ 'nodeIcmsPage'
157
+ ]
158
+ },
159
+ slug: {
160
+ fragments: [
161
+ 'nodeIcmsPage',
162
+ ]
163
+ },
164
+ nodeCanonical: {
165
+ fragments: [
166
+ 'nodeIcmsPage',
167
+ ]
168
+ },
180
169
  },
181
170
  },
182
171
  devMode: {
@@ -191,6 +180,7 @@ export default defineNuxtConfig({
191
180
  },
192
181
 
193
182
  icms: {
183
+ pageComponentTypes: ['Node'],
194
184
  components: {
195
185
  fragments: [
196
186
  // Layout components
@@ -217,6 +207,7 @@ export default defineNuxtConfig({
217
207
  'paragraphIcmsLayoutMedia',
218
208
  'paragraphIcmsLayoutDownloads',
219
209
  'paragraphIcmsLayoutIframe',
210
+ 'paragraphIcmsLayoutTimeline',
220
211
  // Element components
221
212
  'paragraphIcmsButtonElement',
222
213
  'paragraphIcmsCardElement',
@@ -228,7 +219,12 @@ export default defineNuxtConfig({
228
219
  'paragraphIcms2ColTextElement',
229
220
  'paragraphIcmsLogoElement',
230
221
  'paragraphIcmsPartnershipElement',
231
- 'paragraphIcmsIframeElement',
222
+ 'paragraphIcmsTimelineElement',
223
+ ]
224
+ },
225
+ searchResults: {
226
+ fragments: [
227
+ 'nodeIcmsPageSearchResult',
232
228
  ]
233
229
  }
234
230
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@iqual/nuxt-icms",
3
- "version": "1.0.14",
3
+ "version": "1.2.1",
4
4
  "description": "ICMS Base",
5
5
  "type": "module",
6
6
  "private": false,
@@ -26,13 +26,14 @@
26
26
  "class-variance-authority": "^0.7.1",
27
27
  "clsx": "^2.1.1",
28
28
  "embla-carousel-vue": "^8.6.0",
29
+ "fslightbox-vue": "^2.2.1",
29
30
  "lucide-vue-next": "^0.469.0",
30
31
  "nuxt-easy-texts": "^2.0.0",
31
32
  "nuxt-graphql-middleware": "^5.1.0",
32
33
  "nuxt-language-negotiation": "^2.0.0",
34
+ "nuxt-maplibre": "^1.1.1",
33
35
  "nuxt-multi-cache": "^3.4.0",
34
36
  "nuxt-page-dependencies": "^1.1.0",
35
- "nuxt-plugin-order": "^1.0.0",
36
37
  "nuxt-svg-icon-sprite": "^2.0.0",
37
38
  "patch-package": "^8.0.0",
38
39
  "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()
@@ -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
+ }
@@ -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
+ declare module 'fslightbox-vue'
@@ -1,5 +0,0 @@
1
- <svg width="18" height="14" viewBox="0 0 18 14" fill="none" xmlns="http://www.w3.org/2000/svg" style="fill:none!important;">
2
- <path d="M6 1L1.80023 6.03972C1.33667 6.59599 1.33667 7.40401 1.80023 7.96028L6 13" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
3
- <path d="M12 13L16.1998 7.96028C16.6633 7.40401 16.6633 6.59599 16.1998 6.03972L12 1" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
4
- <path d="M7.5 10.5L10.5 3.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"/>
5
- </svg>
@@ -1,14 +0,0 @@
1
- <template>
2
- <ParagraphIFrameElement v-bind="props" :blokkliData="blokkliData" />
3
- </template>
4
-
5
- <script lang="ts" setup>
6
- import type { ParagraphIcmsIframeElementFragment } from '#graphql-operations'
7
-
8
- const props = defineProps<ParagraphIcmsIframeElementFragment>()
9
-
10
- const blokkliData = defineBlokkli({
11
- bundle: 'icms_iframe_element',
12
- })
13
-
14
- </script>
@@ -1,9 +0,0 @@
1
- fragment paragraphIcmsIframeElement on ParagraphIcmsIframeElement {
2
- title: fieldIcmsTitle
3
- link: fieldIcmsLink {
4
- uri {
5
- path
6
- }
7
- }
8
- height: fieldIcmsNumber
9
- }
@@ -1,16 +0,0 @@
1
- <template>
2
- <DesignSystemMoleculesIFrame
3
- :title="title"
4
- :link="link?.uri?.path"
5
- :height="height"
6
- :is-editing="isEditing"
7
- />
8
- </template>
9
-
10
- <script lang="ts" setup>
11
- import type { ParagraphIcmsIframeElementFragment } from '#graphql-operations'
12
-
13
- defineProps<ParagraphIcmsIframeElementFragment>()
14
-
15
- const isEditing = inject<boolean>('isEditing')
16
- </script>
@@ -1,161 +0,0 @@
1
- <template>
2
- <DesignSystemAtomsContainer :colorScheme="colorScheme" :spacing="spacing">
3
- <DesignSystemAtomsGridRow class="pb-14 md:pb-0">
4
- <div class="col-span-12 md:col-span-6" v-if="title">
5
- <DesignSystemOrganismsContentBlock
6
- :pretitle="pretitle"
7
- :title="title"
8
- :titleWeight="titleWeight"
9
- :text="text"
10
- :colorScheme="colorScheme"
11
- />
12
- </div>
13
-
14
- <div v-if="isEditing" class="col-span-12">
15
- <BlokkliField
16
- name="field_icms_iframe_elements"
17
- :list="iFrameElements"
18
- :class="{ droptarget: isEditing }"
19
- />
20
- </div>
21
-
22
- <div v-else class="col-span-12">
23
- <template v-if="iFrameElements && iFrameElements.length === 1">
24
- <DesignSystemMoleculesIFrame
25
- :title="iFrameElements[0].props?.title"
26
- :link="iFrameElements[0].props?.link?.uri?.path"
27
- :height="iFrameElements[0].props?.height"
28
- />
29
- </template>
30
-
31
- <Tabs
32
- v-if="!isMobile && iFrameElements && iFrameElements.length > 1"
33
- default-value="tab-1"
34
- class="rounded-lg shadow-custom"
35
- >
36
- <TabsList
37
- class="flex flex-col items-center justify-center bg-transparent p-0 lg:flex-row dark:bg-transparent"
38
- >
39
- <TabsTrigger
40
- v-for="(iFrameElement, key) in iFrameElements"
41
- :key="key"
42
- :value="`tab-${key + 1}`"
43
- :class="tabTrigger({ colorScheme })"
44
- >
45
- {{ iFrameElement?.props?.title }}
46
- </TabsTrigger>
47
- </TabsList>
48
- <TabsContent
49
- forceMount
50
- v-for="(iFrameElement, key) in iFrameElements"
51
- :key="key"
52
- :value="`tab-${key + 1}`"
53
- :class="tabContent({ colorScheme })"
54
- >
55
- <DesignSystemMoleculesIFrame
56
- :title="iFrameElement.props?.title"
57
- :link="iFrameElement.props?.link?.uri?.path"
58
- :height="iFrameElement.props?.height"
59
- />
60
- </TabsContent>
61
- </Tabs>
62
-
63
- <Accordion
64
- v-if="isMobile && iFrameElements && iFrameElements.length > 1"
65
- type="single"
66
- class="w-full"
67
- collapsible
68
- default-value="accordion-1"
69
- >
70
- <AccordionItem
71
- v-for="(iFrameElement, key) in iFrameElements"
72
- :key="key"
73
- :value="`accordion-${key + 1}`"
74
- class="mb-1 border-none [&>h3]:mb-0"
75
- >
76
- <AccordionTrigger
77
- :ref="(el: any) => (triggerRefs[key] = el)"
78
- :class="accordionTrigger({ colorScheme })"
79
- @click="handleClick(key)"
80
- >
81
- {{ iFrameElement?.props?.title }}
82
- </AccordionTrigger>
83
- <AccordionContent class="p-4 pb-6 text-base">
84
- <DesignSystemMoleculesIFrame
85
- :title="iFrameElement.props?.title"
86
- :link="iFrameElement.props?.link?.uri?.path"
87
- :height="iFrameElement.props?.height"
88
- />
89
- </AccordionContent>
90
- </AccordionItem>
91
- </Accordion>
92
- </div>
93
- </DesignSystemAtomsGridRow>
94
- </DesignSystemAtomsContainer>
95
- </template>
96
-
97
- <script lang="ts" setup>
98
- import type { ParagraphIcmsLayoutIframeFragment } from '#graphql-operations'
99
- import { tv } from 'tailwind-variants'
100
-
101
- defineProps<ParagraphIcmsLayoutIframeFragment>()
102
-
103
- const { isMobile } = useIsMobile()
104
-
105
- const { options, isEditing } = useAttrs().blokkliData
106
-
107
- const tabTrigger = tv({
108
- base: 'inline-flex w-full flex-1 items-center justify-center whitespace-nowrap rounded-none rounded-t-lg py-4 text-base shadow-custom-inner transition-all disabled:pointer-events-none lg:w-fit data-[state=active]:shadow-none',
109
- variants: {
110
- colorScheme: {
111
- none: 'bg-white dark:bg-white text-black dark:text-black data-[state=active]:bg-white dark:data-[state=active]:bg-white dark:data-[state=active]:text-black',
112
- dark: 'bg-gray-700 dark:bg-gray-700 text-white dark:text-white data-[state=active]:bg-gray-900 dark:data-[state=active]:bg-gray-900 data-[state=active]:text-white',
113
- light:
114
- 'bg-white dark:bg-white text-black dark:text-black data-[state=active]:bg-white dark:data-[state=active]:bg-white dark:data-[state=active]:text-black',
115
- accent:
116
- 'bg-primary-600 dark:bg-primary-600 text-white dark:text-white data-[state=active]:bg-primary-700 dark:data-[state=active]:bg-primary-700 data-[state=active]:text-white',
117
- },
118
- },
119
- })
120
-
121
- const tabContent = tv({
122
- base: 'm-0 rounded-b-lg p-8 text-black md:p-16',
123
- variants: {
124
- colorScheme: {
125
- none: 'bg-white text-black',
126
- dark: 'bg-gray-900 text-white',
127
- light: 'bg-white text-black',
128
- accent: 'bg-primary-700 text-white',
129
- },
130
- },
131
- })
132
-
133
- const accordionTrigger = tv({
134
- base: 'items-center rounded-lg px-6 py-4 shadow-custom-small hover:no-underline gap-4 text-left text-base',
135
- variants: {
136
- colorScheme: {
137
- none: 'bg-white text-black',
138
- dark: 'bg-gray-900 text-white',
139
- light: 'bg-white text-black',
140
- accent: 'bg-primary-700 text-white',
141
- },
142
- },
143
- })
144
-
145
- const triggerRefs = ref<Array<ComponentPublicInstance>>([])
146
-
147
- const handleClick = (index: number): void => {
148
- const { handleAccordionOpen } = useAccordionScroll(triggerRefs.value[index])
149
- handleAccordionOpen()
150
- }
151
-
152
- const colorScheme = computed(() => {
153
- return options.value.colorScheme
154
- })
155
-
156
- const spacing = computed(() => {
157
- return { bottom: options.value.spacingBottom, top: options.value.spacingTop }
158
- })
159
-
160
- provide('isEditing', isEditing)
161
- </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,95 +0,0 @@
1
- /**
2
- * Nuxt Layer Module: dynamicNodeResolver
3
- *
4
- * Dynamically imports all Node components from every enabled Nuxt layer (including the main app),
5
- * supports both single-file and index.vue conventions, and injects a dynamic resolver with
6
- * proper override priority (main app overrides layers).
7
- */
8
-
9
- import { defineNuxtModule, addPlugin, addTemplate, createResolver } from '@nuxt/kit'
10
- import { root } from 'happy-dom/lib/PropertySymbol.js'
11
- import { join } from 'pathe'
12
- import { rootDir } from 'vitest/node'
13
-
14
- export default defineNuxtModule({
15
- meta: { name: 'dynamicNodeResolver' },
16
- setup(_options, nuxt) {
17
- const { resolve } = createResolver(import.meta.url)
18
-
19
- // Gather all layer root directories (main app is always first)
20
- const appRoot = nuxt.options.rootDir
21
- const layerDirs = nuxt.options._layers
22
- .map(layer => layer.cwd.replace(appRoot, '').length ? layer.cwd.replace(appRoot, '') : '/')
23
-
24
- // Generate import.meta.glob for each layer's Node components
25
- const imports = layerDirs.map((dir, i) => {
26
- const componentsPath = join(dir, 'components/Node/**/*.vue')
27
- return `const modules${i} = import.meta.glob(${JSON.stringify(componentsPath)});`
28
- }).join('\n')
29
-
30
- // Merge logic (reverse order so main app overrides layers)
31
- const mergeLogic = layerDirs
32
- .map((_, i) => `
33
- for (const path in modules${i}) {
34
- const name = getComponentNameFromPath(path);
35
- if (name) componentMap[name] = defineAsyncComponent(modules${i}[path]);
36
- }
37
- `)
38
- .reverse()
39
- .join('\n')
40
-
41
- // Create the plugin template
42
- addTemplate({
43
- filename: 'dynamic-node-resolver.plugin.mjs',
44
- getContents: () => `
45
- import { defineNuxtPlugin } from '#app'
46
- import { defineAsyncComponent } from 'vue'
47
-
48
- /**
49
- * Extracts a normalized component name from a file path for dynamic component mapping.
50
- *
51
- * Supports both single-file and directory-based Vue component structures:
52
- * - /components/Node/Foo.vue -> NodeFoo
53
- * - /components/Node/Foo/index.vue -> NodeFoo
54
- * - /components/Node/Bar/Baz.vue -> NodeBarBaz
55
- * - /components/Node/Bar/Baz/index.vue -> NodeBarBaz
56
- *
57
- * @param {string} path - The absolute or relative file path to the Vue component.
58
- * @returns {string|null} The normalized component name (e.g., 'NodeFoo' or 'NodeBarBaz'), or null if the path does not match.
59
- */
60
- function getComponentNameFromPath(path) {
61
- // Match everything after /Node/ up to .vue, splitting by /
62
- //const match = path.match(/\\/Node\\/([^/]+?)(?:\\/index)?\\.vue$/)
63
- const match = path.match(/\\/Node\\/(.+?)\\/?(index)?\\.vue$/)
64
-
65
- if (match) {
66
- // match[1] is the path after /Node/ up to the file (could be nested)
67
- // Split by '/', capitalize each part, and join
68
- const parts = match[1].split('/').map(
69
- part => part.charAt(0).toUpperCase() + part.slice(1)
70
- )
71
- return 'Node' + parts.join('')
72
- }
73
- return null
74
- }
75
-
76
-
77
- export default defineNuxtPlugin(() => {
78
- ${imports}
79
- const componentMap = {};
80
- ${mergeLogic}
81
- return {
82
- provide: {
83
- resolveDynamicNodeComponent: (name) => componentMap[name] || null
84
- }
85
- }
86
- })
87
- `
88
- })
89
-
90
- // Register the generated plugin
91
- addPlugin({
92
- src: resolve(nuxt.options.buildDir, 'dynamic-node-resolver.plugin.mjs')
93
- })
94
- }
95
- })
@@ -1,69 +0,0 @@
1
- <template>
2
- <main :class="{ 'cursor-wait': pending }">
3
- <section class="flex">
4
- <div class="container">
5
- <h1 v-if="node" class="pb-3 text-4xl lg:pb-6 lg:text-7xl">
6
- {{ node.title }}
7
- </h1>
8
- <form @submit.prevent>
9
- <SearchInput v-model="searchTerm" />
10
- </form>
11
- </div>
12
- </section>
13
- <template v-if="data && searchTerm">
14
- <Container>
15
- <ol class="mt-10">
16
- <SearchResult v-for="hit in data" v-bind="hit" :key="hit.id" />
17
- </ol>
18
- </Container>
19
- </template>
20
- </main>
21
- </template>
22
-
23
- <script lang="ts" setup>
24
- import type { NodeIcmsPageFragment } from '#graphql-operations'
25
-
26
- definePageMeta({
27
- name: 'search',
28
- drupalFrontendRoute: true,
29
- path: '/suche',
30
- languageMapping: {
31
- fr: '/chercher',
32
- en: '/search',
33
- },
34
- })
35
-
36
- const nuxtRoute = useRoute()
37
- const searchTerm = useQueryString('text')
38
- const language = useCurrentLanguage()
39
-
40
- const searchQuery = computed(() => {
41
- return {
42
- langcode: language.value,
43
- size: 16,
44
- text: searchTerm.value || undefined,
45
- }
46
- })
47
-
48
- const { data, pending } = await useFetch('/api/content-search', {
49
- query: searchQuery,
50
- })
51
-
52
- // Get the data.
53
- const { data: query } = await useAsyncData(nuxtRoute.path, () => {
54
- return useGraphqlQuery('route', {
55
- path: nuxtRoute.path,
56
- }).then((v) => v.data)
57
- })
58
-
59
- // Handles redirects and metatags.
60
- const { entity: node } = await useDrupalRoute<NodeIcmsPageFragment>(
61
- query.value,
62
- {
63
- noError: true,
64
- },
65
- )
66
- setBreadcrumbLinksFromRoute(query.value)
67
- setLanguageLinksFromRoute(query.value)
68
- await renderPageDependencies()
69
- </script>
@@ -1,40 +0,0 @@
1
- <template>
2
- <div class="container">
3
- <h1 class="mb-10 text-4xl">Static Page example</h1>
4
- <h2>{{ node.title }}</h2>
5
- </div>
6
- </template>
7
-
8
- <script lang="ts" setup>
9
- import type { NodePageFragment } from '#graphql-operations'
10
-
11
- defineOptions({
12
- name: 'StaticPageExample',
13
- })
14
-
15
- definePageMeta({
16
- name: 'static-page-example',
17
- drupalFrontendRoute: true,
18
- path: '/statisch',
19
- languageMapping: {
20
- fr: '/statique',
21
- en: '/static',
22
- },
23
- })
24
-
25
- const nuxtRoute = useRoute()
26
-
27
- // Get the data.
28
- const { data: query } = await useAsyncData('staticPageExample', async () => {
29
- return await useGraphqlQuery('route', {
30
- path: nuxtRoute.path,
31
- }).then((v) => v.data)
32
- })
33
-
34
- // Handles redirects and metatags.
35
- const { entity: node } = await useDrupalRoute<NodePageFragment>(query.value)
36
-
37
- setBreadcrumbLinks()
38
- setLanguageLinksFromRoute(query.value)
39
- await renderPageDependencies()
40
- </script>