fulldev-ui 0.6.0-beta.0 → 0.6.0-beta.10

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 (385) hide show
  1. package/.vscode/settings.json +2 -0
  2. package/astro.config.ts +4 -4
  3. package/cloudcannon.config.yml +233 -0
  4. package/package.json +13 -7
  5. package/pnpm-lock.yaml +370 -35
  6. package/src/blocks/Banner.astro +13 -15
  7. package/src/blocks/Colleagues1.astro +73 -0
  8. package/src/blocks/Contact1.astro +95 -0
  9. package/src/blocks/Content1.astro +56 -0
  10. package/src/blocks/Content2.astro +63 -0
  11. package/src/blocks/Content3.astro +66 -0
  12. package/src/blocks/Content4.astro +61 -0
  13. package/src/blocks/Content5.astro +58 -0
  14. package/src/blocks/Content6.astro +66 -0
  15. package/src/blocks/Content7.astro +75 -0
  16. package/src/blocks/Content8.astro +67 -0
  17. package/src/blocks/Cta1.astro +73 -0
  18. package/src/blocks/Features1.astro +70 -0
  19. package/src/blocks/Features2.astro +70 -0
  20. package/src/blocks/Footer.astro +42 -66
  21. package/src/blocks/Header.astro +153 -3
  22. package/src/blocks/Hero1.astro +77 -0
  23. package/src/blocks/Industries1.astro +86 -0
  24. package/src/blocks/Intro1.astro +68 -0
  25. package/src/blocks/Jobs1.astro +77 -0
  26. package/src/blocks/Logos1.astro +55 -0
  27. package/src/blocks/Products1.astro +90 -0
  28. package/src/blocks/Projects1.astro +80 -0
  29. package/src/blocks/Reviews1.astro +81 -0
  30. package/src/{components → blocks}/Subheader.astro +1 -2
  31. package/src/blocks/{Hero.astro → _Hero.astro} +7 -6
  32. package/src/components/Badge.astro +7 -27
  33. package/src/components/Badges.astro +13 -36
  34. package/src/components/Block.astro +38 -0
  35. package/src/components/Blocks.astro +26 -0
  36. package/src/components/Button.astro +10 -33
  37. package/src/components/Buttons.astro +12 -43
  38. package/src/components/Cart.astro +20 -16
  39. package/src/components/CartAdd.svelte +76 -0
  40. package/src/components/CartCheckout.svelte +58 -0
  41. package/src/components/CartForm.svelte +130 -0
  42. package/src/components/CartList.svelte +88 -0
  43. package/src/components/CartQuantity.svelte +81 -0
  44. package/src/components/CartSummary.astro +12 -97
  45. package/src/components/CartTotal.svelte +15 -0
  46. package/src/components/Channel.astro +10 -13
  47. package/src/components/Channels.astro +11 -42
  48. package/src/components/Checkbox.astro +8 -14
  49. package/src/components/Element.astro +5 -1
  50. package/src/components/Form.astro +4 -3
  51. package/src/components/Gallery.astro +9 -6
  52. package/src/components/Head.astro +29 -33
  53. package/src/components/Heading.astro +48 -80
  54. package/src/components/Icon.astro +4 -4
  55. package/src/components/Image.astro +18 -49
  56. package/src/components/Input.astro +21 -16
  57. package/src/components/Label.astro +6 -6
  58. package/src/components/Link.astro +18 -27
  59. package/src/components/Links.astro +13 -35
  60. package/src/components/List.astro +3 -5
  61. package/src/components/Logo.astro +18 -14
  62. package/src/components/Menu.astro +22 -35
  63. package/src/components/Menus.astro +20 -0
  64. package/src/components/Paragraph.astro +26 -10
  65. package/src/components/Price.astro +5 -8
  66. package/src/components/Rating.astro +25 -74
  67. package/src/components/Search.astro +102 -43
  68. package/src/components/Select.astro +3 -3
  69. package/src/components/Sidebar.astro +20 -71
  70. package/src/components/Social.astro +11 -2
  71. package/src/components/Socials.astro +18 -34
  72. package/src/components/Switch.astro +4 -69
  73. package/src/components/Table.astro +2 -3
  74. package/src/components/Tagline.astro +22 -33
  75. package/src/components/Textarea.astro +5 -5
  76. package/src/components/Themer.astro +3 -3
  77. package/src/components/Toc.astro +22 -25
  78. package/src/components/Toggle.astro +45 -0
  79. package/src/components/{Breadcrumb.astro → _Breadcrumb.astro} +3 -3
  80. package/src/components/_Image.astro +79 -0
  81. package/src/components/docs/Props.astro +21 -0
  82. package/src/content/config.ts +3 -10
  83. package/src/content/layouts/base.yml +159 -0
  84. package/src/content/pages/_showcase/anti-slip-profiles.md +5 -0
  85. package/src/content/pages/{showcase → _showcase}/fulldev-ui.md +1 -1
  86. package/src/content/pages/{showcase → _showcase}/lavis-detailing.md +1 -1
  87. package/src/content/pages/{showcase → _showcase}/leren-trainingsacteren.md +1 -1
  88. package/src/content/pages/{showcase → _showcase}/miele-witgoedcenter-amsterdam.md +1 -1
  89. package/src/content/pages/{showcase → _showcase}/sloepverhuur-bolsward.md +1 -1
  90. package/src/content/pages/_showcase/stark-vulcanising-products.md +4 -0
  91. package/src/content/pages/{showcase → _showcase}/the-gym-haren.md +1 -1
  92. package/src/content/pages/{showcase → _showcase}/van-dillen-antieke-bouwmaterialen.md +1 -1
  93. package/src/content/pages/base/toggle.mdx +28 -0
  94. package/src/content/pages/{blocks → docs/blocks}/_categories.mdx +1 -19
  95. package/src/content/pages/{blocks/contact.mdx → docs/blocks/_contact.mdx} +0 -2
  96. package/src/content/pages/{blocks → docs/blocks}/_jobs.mdx +0 -2
  97. package/src/content/pages/{blocks/posts.mdx → docs/blocks/_posts.mdx} +0 -2
  98. package/src/content/pages/{blocks → docs/blocks}/_stats.mdx +0 -2
  99. package/src/content/pages/{blocks → docs/blocks}/banner.mdx +1 -2
  100. package/src/content/pages/docs/blocks/colleagues.mdx +49 -0
  101. package/src/content/pages/docs/blocks/content.mdx +290 -0
  102. package/src/content/pages/docs/blocks/cta.mdx +16 -0
  103. package/src/content/pages/docs/blocks/feature.mdx +17 -0
  104. package/src/content/pages/docs/blocks/features.mdx +35 -0
  105. package/src/content/pages/docs/blocks/footer.mdx +46 -0
  106. package/src/content/pages/docs/blocks/header.mdx +60 -0
  107. package/src/content/pages/docs/blocks/hero.mdx +18 -0
  108. package/src/content/pages/docs/blocks/intro.mdx +16 -0
  109. package/src/content/pages/docs/blocks/logos.mdx +37 -0
  110. package/src/content/pages/docs/blocks/projects.mdx +36 -0
  111. package/src/content/pages/docs/blocks/reviews.mdx +65 -0
  112. package/src/content/pages/docs/blocks.mdx +42 -21
  113. package/src/content/pages/docs/collections/images.mdx +4 -2
  114. package/src/content/pages/docs/collections/pages.mdx +3 -3
  115. package/src/content/pages/docs/collections/presets.mdx +1 -1
  116. package/src/content/pages/docs/components/_localeswitcher.mdx +1 -2
  117. package/src/content/pages/docs/components/{table.mdx → _table.mdx} +3 -6
  118. package/src/content/pages/docs/components/_tagline.mdx +1 -2
  119. package/src/content/pages/docs/components/{themer.mdx → _themer.mdx} +3 -6
  120. package/src/content/pages/docs/components/_toggle.mdx +3 -4
  121. package/src/content/pages/docs/components/badge.mdx +3 -6
  122. package/src/content/pages/docs/components/badges.mdx +4 -6
  123. package/src/content/pages/docs/components/button.mdx +3 -6
  124. package/src/content/pages/docs/components/buttons.mdx +4 -6
  125. package/src/content/pages/docs/components/channel.mdx +3 -6
  126. package/src/content/pages/docs/components/channels.mdx +4 -4
  127. package/src/content/pages/docs/components/checkbox.mdx +3 -6
  128. package/src/content/pages/docs/components/heading.mdx +12 -23
  129. package/src/content/pages/docs/components/icon.mdx +3 -6
  130. package/src/content/pages/docs/components/image.mdx +4 -11
  131. package/src/content/pages/docs/components/input.mdx +3 -6
  132. package/src/content/pages/docs/components/label.mdx +3 -6
  133. package/src/content/pages/docs/components/link.mdx +3 -6
  134. package/src/content/pages/docs/components/links.mdx +14 -57
  135. package/src/content/pages/docs/components/list.mdx +3 -6
  136. package/src/content/pages/docs/components/logo.mdx +10 -23
  137. package/src/content/pages/docs/components/menu.mdx +12 -54
  138. package/src/content/pages/docs/components/paragraph.mdx +10 -17
  139. package/src/content/pages/docs/components/rating.mdx +10 -44
  140. package/src/content/pages/docs/components/select.mdx +3 -6
  141. package/src/content/pages/docs/components/social.mdx +3 -6
  142. package/src/content/pages/docs/components/socials.mdx +4 -4
  143. package/src/content/pages/docs/components/switch.mdx +3 -6
  144. package/src/content/pages/docs/components/tagline.mdx +3 -8
  145. package/src/content/pages/docs/components/textarea.mdx +3 -6
  146. package/src/content/pages/docs/components.mdx +4 -8
  147. package/src/content/pages/docs/customization.mdx +53 -21
  148. package/src/content/pages/docs/frameworks.mdx +13 -12
  149. package/src/content/pages/docs/index.mdx +5 -7
  150. package/src/content/pages/docs/installation.mdx +10 -7
  151. package/src/content/pages/docs/layouts/doc.mdx +15 -0
  152. package/src/content/pages/docs/layouts/page.mdx +15 -0
  153. package/src/content/pages/docs/{generating-pages.mdx → pages.mdx} +2 -1
  154. package/src/content/pages/docs/{components → structures}/_card.mdx +7 -8
  155. package/src/content/pages/docs/{components → structures}/_dialog.mdx +1 -2
  156. package/src/content/pages/docs/{components → structures}/_drawer.mdx +2 -3
  157. package/src/content/pages/docs/structures/card.mdx +15 -0
  158. package/src/content/pages/docs/{components → structures}/code.mdx +5 -9
  159. package/src/content/pages/docs/structures/container.mdx +15 -0
  160. package/src/content/pages/docs/structures/drawer.mdx +15 -0
  161. package/src/content/pages/docs/structures/group.mdx +15 -0
  162. package/src/content/pages/docs/structures/layout.mdx +15 -0
  163. package/src/content/pages/docs/structures/masonry.mdx +15 -0
  164. package/src/content/pages/docs/structures/matrix.mdx +15 -0
  165. package/src/content/pages/docs/structures/panel.mdx +15 -0
  166. package/src/content/pages/docs/{components → structures}/prose.mdx +4 -8
  167. package/src/content/pages/docs/structures/section.mdx +15 -0
  168. package/src/content/pages/docs/structures/stack.mdx +15 -0
  169. package/src/content/pages/docs/structures/writeup.mdx +15 -0
  170. package/src/content/pages/docs/structures.mdx +7 -0
  171. package/src/content/pages/index.mdx +22 -29
  172. package/src/content/pages/posts/post.md +7 -0
  173. package/src/content/pages/showcase.mdx +1 -5
  174. package/src/css/theme.css +11 -42
  175. package/src/env.d.ts +1 -0
  176. package/src/integration/index.ts +51 -10
  177. package/src/layouts/Block.astro +81 -0
  178. package/src/layouts/{CategoryLayout.astro → Category.astro} +27 -26
  179. package/src/layouts/Doc.astro +96 -0
  180. package/src/layouts/Job.astro +60 -0
  181. package/src/layouts/Jobs.astro +72 -0
  182. package/src/layouts/Page.astro +84 -0
  183. package/src/layouts/Post.astro +53 -0
  184. package/src/layouts/{ProductLayout.astro → Product.astro} +42 -32
  185. package/src/pages/[...page].astro +33 -20
  186. package/src/schemas/badge.ts +14 -0
  187. package/src/schemas/block.ts +59 -0
  188. package/src/schemas/button.ts +15 -0
  189. package/src/schemas/channel.ts +14 -0
  190. package/src/schemas/checkbox.ts +13 -0
  191. package/src/schemas/footer.ts +17 -0
  192. package/src/schemas/head.ts +17 -0
  193. package/src/schemas/header.ts +21 -0
  194. package/src/schemas/image.ts +53 -0
  195. package/src/schemas/input.ts +13 -0
  196. package/src/schemas/link.ts +14 -0
  197. package/src/schemas/logo.ts +13 -0
  198. package/src/schemas/menu.ts +11 -0
  199. package/src/schemas/page.ts +39 -0
  200. package/src/schemas/{utils/pathSchema.ts → path.ts} +1 -1
  201. package/src/schemas/textarea.ts +11 -0
  202. package/src/stores/cart.svelte.ts +78 -0
  203. package/src/stores/cart.ts +59 -6
  204. package/src/structures/Card.astro +35 -0
  205. package/src/{components → structures}/Code.astro +7 -6
  206. package/src/structures/Container.astro +25 -0
  207. package/src/structures/Drawer.astro +81 -0
  208. package/src/structures/Group.astro +25 -0
  209. package/src/structures/Layout.astro +34 -0
  210. package/src/structures/Masonry.astro +42 -0
  211. package/src/structures/Matrix.astro +39 -0
  212. package/src/structures/Panel.astro +25 -0
  213. package/src/structures/Prose.astro +97 -0
  214. package/src/structures/Section.astro +26 -0
  215. package/src/structures/Sidebar.astro +36 -0
  216. package/src/structures/Split.astro +25 -0
  217. package/src/structures/Stack.astro +25 -0
  218. package/src/structures/Writeup.astro +67 -0
  219. package/src/structures/_Bento.astro +34 -0
  220. package/src/utils/cart.ts +1 -1
  221. package/src/utils/getHref.ts +6 -0
  222. package/svelte.config.js +5 -0
  223. package/tailwind.config.ts +9 -4
  224. package/tsconfig.json +4 -4
  225. package/{src/types/virtual-modules.d.ts → virtual.d.ts} +1 -1
  226. package/public/favicon/favicon-16x16-dark.png +0 -0
  227. package/public/favicon/favicon-32x32-dark.png +0 -0
  228. package/public/favicon/favicon-48x48-dark.png +0 -0
  229. package/public/favicon/favicon-dark.ico +0 -0
  230. package/src/blocks/Categories.astro +0 -12
  231. package/src/blocks/Colleagues.astro +0 -12
  232. package/src/blocks/Contact.astro +0 -117
  233. package/src/blocks/Content.astro +0 -130
  234. package/src/blocks/Cta.astro +0 -13
  235. package/src/blocks/Excerpt.astro +0 -12
  236. package/src/blocks/Features.astro +0 -11
  237. package/src/blocks/Intro.astro +0 -101
  238. package/src/blocks/Jobs.astro +0 -12
  239. package/src/blocks/Posts.astro +0 -11
  240. package/src/blocks/Prices.astro +0 -24
  241. package/src/blocks/Product.astro +0 -89
  242. package/src/blocks/Products.astro +0 -120
  243. package/src/blocks/Reviews.astro +0 -12
  244. package/src/blocks/_Contact.astro +0 -112
  245. package/src/components/Avatar.astro +0 -45
  246. package/src/components/Avatars.astro +0 -36
  247. package/src/components/Card.astro +0 -173
  248. package/src/components/Cards.astro +0 -133
  249. package/src/components/CartForm.astro +0 -121
  250. package/src/components/CartList.astro +0 -117
  251. package/src/components/Dialog.astro +0 -66
  252. package/src/components/Drawer.astro +0 -142
  253. package/src/components/Header.astro +0 -127
  254. package/src/components/Lead.astro +0 -46
  255. package/src/components/Prose.astro +0 -169
  256. package/src/components/Section.astro +0 -293
  257. package/src/components/Text.astro +0 -43
  258. package/src/components/Writeup.astro +0 -108
  259. package/src/components/docs/DecorativeBox.astro +0 -15
  260. package/src/components/docs/PropsTable.astro +0 -49
  261. package/src/components/experimental/Video.astro +0 -32
  262. package/src/components/experimental/Window.astro +0 -122
  263. package/src/components/sections.astro +0 -28
  264. package/src/content/pages/blocks/_footer.mdx +0 -77
  265. package/src/content/pages/blocks/_header.mdx +0 -185
  266. package/src/content/pages/blocks/_prices.mdx +0 -124
  267. package/src/content/pages/blocks/_product.mdx +0 -99
  268. package/src/content/pages/blocks/_products.mdx +0 -54
  269. package/src/content/pages/blocks/colleagues.mdx +0 -39
  270. package/src/content/pages/blocks/content.mdx +0 -79
  271. package/src/content/pages/blocks/cta.mdx +0 -161
  272. package/src/content/pages/blocks/features.mdx +0 -130
  273. package/src/content/pages/blocks/hero.mdx +0 -96
  274. package/src/content/pages/blocks/intro.mdx +0 -126
  275. package/src/content/pages/blocks/reviews.mdx +0 -253
  276. package/src/content/pages/docs/_internationalization.mdx +0 -55
  277. package/src/content/pages/docs/_using-blocks.mdx +0 -33
  278. package/src/content/pages/docs/_using-presets.mdx +0 -49
  279. package/src/content/pages/docs/collections.mdx +0 -42
  280. package/src/content/pages/docs/components/_switch.mdx +0 -32
  281. package/src/content/pages/docs/components/avatar.mdx +0 -35
  282. package/src/content/pages/docs/components/lead.mdx +0 -51
  283. package/src/content/pages/docs/components/section.mdx +0 -36
  284. package/src/content/pages/docs/layouts.mdx +0 -33
  285. package/src/content/pages/showcase/anti-slip-profiles.md +0 -5
  286. package/src/content/pages/showcase/stark-vulcanising-products.md +0 -5
  287. package/src/content/presets/base.yml +0 -100
  288. package/src/content/presets/docs.yml +0 -6
  289. package/src/css/color.css +0 -76
  290. package/src/css/size.css +0 -131
  291. package/src/layouts/Layout.astro +0 -108
  292. package/src/layouts/PageLayout.astro +0 -26
  293. package/src/layouts/PostLayout.astro +0 -26
  294. package/src/loaders/imageLoader.ts +0 -26
  295. package/src/pages/test.astro +0 -20
  296. package/src/schemas/components/avatar.ts +0 -3
  297. package/src/schemas/components/avatars.ts +0 -4
  298. package/src/schemas/components/badge.ts +0 -13
  299. package/src/schemas/components/button.ts +0 -24
  300. package/src/schemas/components/buttons.ts +0 -4
  301. package/src/schemas/components/card.ts +0 -43
  302. package/src/schemas/components/cards.ts +0 -4
  303. package/src/schemas/components/channel.ts +0 -13
  304. package/src/schemas/components/channels.ts +0 -4
  305. package/src/schemas/components/footer.ts +0 -17
  306. package/src/schemas/components/global.ts +0 -16
  307. package/src/schemas/components/header.ts +0 -19
  308. package/src/schemas/components/heading.ts +0 -3
  309. package/src/schemas/components/icon.ts +0 -3
  310. package/src/schemas/components/image.ts +0 -23
  311. package/src/schemas/components/images.ts +0 -4
  312. package/src/schemas/components/link.ts +0 -16
  313. package/src/schemas/components/links.ts +0 -4
  314. package/src/schemas/components/list.ts +0 -3
  315. package/src/schemas/components/logo.ts +0 -3
  316. package/src/schemas/components/menu.ts +0 -15
  317. package/src/schemas/components/price.ts +0 -3
  318. package/src/schemas/components/rating.ts +0 -15
  319. package/src/schemas/components/section.ts +0 -15
  320. package/src/schemas/components/sections.ts +0 -3
  321. package/src/schemas/components/sidebar.ts +0 -15
  322. package/src/schemas/components/social.ts +0 -3
  323. package/src/schemas/components/socials.ts +0 -4
  324. package/src/schemas/components/subheader.ts +0 -9
  325. package/src/schemas/components/tagline.ts +0 -3
  326. package/src/schemas/components/text.ts +0 -3
  327. package/src/schemas/components/themer.ts +0 -3
  328. package/src/schemas/components/toc.ts +0 -3
  329. package/src/schemas/components/writeup.ts +0 -20
  330. package/src/schemas/imageSchema.ts +0 -12
  331. package/src/schemas/pageSchema.ts +0 -94
  332. package/src/schemas/presetSchema.ts +0 -3
  333. package/src/schemas/utils/categories.ts +0 -3
  334. package/src/schemas/utils/component.ts +0 -17
  335. package/src/schemas/utils/navigation.ts +0 -8
  336. package/src/types/global-props.ts +0 -16
  337. package/src/utils/_archive/Childmorphic.ts +0 -8
  338. package/src/utils/_archive/getAllCollections.ts +0 -10
  339. package/src/utils/_archive/getCollectionCascade.ts +0 -33
  340. package/src/utils/_archive/getPathname.ts +0 -18
  341. package/src/utils/_archive/mergeEntries.ts +0 -28
  342. package/src/utils/_archive/staticPageSchema.ts +0 -124
  343. package/src/utils/_archive/transform/transform.ts +0 -25
  344. package/src/utils/_archive/transform/transformCasing.ts +0 -24
  345. package/src/utils/_archive/transform/transformReferences.ts +0 -54
  346. package/src/utils/_archive/transform/transformSelfs.ts +0 -20
  347. package/src/utils/_archive/transform/transformUnderscores.ts +0 -19
  348. package/src/utils/getDeepReferenceChildren.ts +0 -14
  349. package/src/utils/getFolderChildren.ts +0 -18
  350. package/src/utils/getReferenceChildren.ts +0 -14
  351. package/src/utils/getSiblingPages.ts +0 -14
  352. package/src/utils/setTheme.ts +0 -18
  353. /package/{src → public}/images/anti-slip-profiles.webp +0 -0
  354. /package/{src → public}/images/avatar-1.jpeg +0 -0
  355. /package/{src → public}/images/avatar-2.jpeg +0 -0
  356. /package/{src → public}/images/avatar-3.jpeg +0 -0
  357. /package/{src → public}/images/avatar-4.jpeg +0 -0
  358. /package/{src → public}/images/avatar-placeholder.jpg +0 -0
  359. /package/{src → public}/images/block-code.png +0 -0
  360. /package/{src → public}/images/component-code.png +0 -0
  361. /package/{src → public}/images/favicon.svg +0 -0
  362. /package/{src → public}/images/fulldev-ui.webp +0 -0
  363. /package/{src → public}/images/lavis-detailing.webp +0 -0
  364. /package/{src → public}/images/leren-trainingsacteren.webp +0 -0
  365. /package/{src → public}/images/logo-1.svg +0 -0
  366. /package/{src → public}/images/logo-2.svg +0 -0
  367. /package/{src → public}/images/logo-basic.svg +0 -0
  368. /package/{src → public}/images/logo-simple.svg +0 -0
  369. /package/{src → public}/images/logo-thin.svg +0 -0
  370. /package/{src → public}/images/logo.svg +0 -0
  371. /package/{src → public}/images/logofat.svg +0 -0
  372. /package/{src → public}/images/miele-witgoedcenter-amsterdam.webp +0 -0
  373. /package/{src → public}/images/og-image.png +0 -0
  374. /package/{src → public}/images/placeholder-center.webp +0 -0
  375. /package/{src → public}/images/placeholder-landscape-dark.png +0 -0
  376. /package/{src → public}/images/placeholder-landscape.webp +0 -0
  377. /package/{src → public}/images/placeholder-portrait.webp +0 -0
  378. /package/{src → public}/images/placeholder-right.webp +0 -0
  379. /package/{src → public}/images/placeholder.webp +0 -0
  380. /package/{src → public}/images/sloepverhuur-bolsward.webp +0 -0
  381. /package/{src → public}/images/stark-vulcanising-products.webp +0 -0
  382. /package/{src → public}/images/the-gym-haren.webp +0 -0
  383. /package/{src → public}/images/van-dillen-antieke-bouwmaterialen.webp +0 -0
  384. /package/src/components/{LocaleSwitcher.astro → _LocaleSwitcher.astro} +0 -0
  385. /package/src/{components → structures}/Carousel.astro +0 -0
@@ -0,0 +1,72 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import Footer from 'fulldev-ui/blocks/Footer.astro'
5
+ import Header from 'fulldev-ui/blocks/Header.astro'
6
+ import Intro1 from 'fulldev-ui/blocks/Intro1.astro'
7
+ import Jobs1 from 'fulldev-ui/blocks/Jobs1.astro'
8
+ import Element from 'fulldev-ui/components/Element.astro'
9
+ import Sidebar from 'fulldev-ui/components/Sidebar.astro'
10
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
11
+ import Container from 'fulldev-ui/structures/Container.astro'
12
+ import Layout from 'fulldev-ui/structures/Layout.astro'
13
+ import Prose from 'fulldev-ui/structures/Prose.astro'
14
+
15
+ type Props = ComponentProps<typeof Layout> &
16
+ PageSchema & {
17
+ slug: CollectionEntry<'pages'>['slug']
18
+ render: CollectionEntry<'pages'>['render']
19
+ }
20
+
21
+ const { slug, header, sidebar, render, title, description, footer } =
22
+ Astro.props
23
+
24
+ const { Content } = await render()
25
+
26
+ // const children = (
27
+ // await getCollection('pages', ({ data }) =>
28
+ // data.parents?.some((p) => p.slug.includes(slug))
29
+ // )
30
+ // )?.map(({ collection, slug }) => ({ collection, slug }))
31
+ ---
32
+
33
+ <Layout
34
+ class:list="jobs"
35
+ {...Astro.props}
36
+ >
37
+ <Header
38
+ {...sidebar}
39
+ {...header}
40
+ />
41
+ <Container class:list="jobs-container">
42
+ <Sidebar {...sidebar} />
43
+ <Element
44
+ class:list="jobs-main"
45
+ as="main"
46
+ >
47
+ <Intro1
48
+ heading={title}
49
+ paragraph={description}
50
+ />
51
+ <!-- <Jobs1 pages={children} /> -->
52
+ <Prose>
53
+ <Content />
54
+ </Prose>
55
+ </Element>
56
+ </Container>
57
+ </Layout>
58
+ <Footer {...footer} />
59
+
60
+ <style is:global>
61
+ @layer fulldev {
62
+ .jobs {
63
+ .jobs-container {
64
+ @apply flex !pr-0;
65
+ }
66
+
67
+ .jobs-main {
68
+ @apply flex w-full flex-col;
69
+ }
70
+ }
71
+ }
72
+ </style>
@@ -0,0 +1,84 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import Block from 'fulldev-ui/components/Block.astro'
5
+ import Element from 'fulldev-ui/components/Element.astro'
6
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
7
+ import Layout from 'fulldev-ui/structures/Layout.astro'
8
+
9
+ type Props = ComponentProps<typeof Layout> &
10
+ PageSchema & {
11
+ render: CollectionEntry<'pages'>['render']
12
+ headings?: any
13
+ heading?: string
14
+ paragraph?: string
15
+ }
16
+
17
+ const {
18
+ heading,
19
+ title,
20
+ paragraph,
21
+ description,
22
+ banner,
23
+ sidebar,
24
+ header,
25
+ sections,
26
+ footer,
27
+ render,
28
+ navigation,
29
+ ...rest
30
+ } = Astro.props
31
+
32
+ const { Content, headings } = await render()
33
+
34
+ const h1 = headings?.find((heading) => heading.depth === 1)
35
+ const links = headings
36
+ ?.filter((heading) => heading.depth >= 2 && heading.depth <= 4)
37
+ .map(({ text, depth, slug }) => ({
38
+ text,
39
+ depth,
40
+ href: `#${slug}`,
41
+ }))
42
+ ---
43
+
44
+ <Layout
45
+ class:list="page"
46
+ {...rest}
47
+ >
48
+ <Block
49
+ _block="Banner"
50
+ {...banner}
51
+ />
52
+ <Block
53
+ _block="Header"
54
+ {sidebar}
55
+ {...header}
56
+ />
57
+ <Element as="main">
58
+ <Block
59
+ depth={1}
60
+ heading={h1 ? undefined : heading || title}
61
+ paragraph={h1 ? undefined : paragraph || description}
62
+ toc={{
63
+ heading: h1?.text || heading || title,
64
+ links,
65
+ }}
66
+ {sidebar}
67
+ {...rest}
68
+ >
69
+ <Content />
70
+ </Block>
71
+ {
72
+ sections?.map((section, i) => (
73
+ <Block
74
+ depth={i === 0 && !rest._block ? 1 : 2}
75
+ {...section}
76
+ />
77
+ ))
78
+ }
79
+ </Element>
80
+ <Block
81
+ _block="Footer"
82
+ {...footer}
83
+ />
84
+ </Layout>
@@ -0,0 +1,53 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import Content1 from 'fulldev-ui/blocks/Content1.astro'
5
+ import Footer from 'fulldev-ui/blocks/Footer.astro'
6
+ import Header from 'fulldev-ui/blocks/Header.astro'
7
+ import Block from 'fulldev-ui/components/Block.astro'
8
+ import Element from 'fulldev-ui/components/Element.astro'
9
+ import type { PageSchema } from 'fulldev-ui/schemas/page'
10
+ import Layout from 'fulldev-ui/structures/Layout.astro'
11
+
12
+ type Props = ComponentProps<typeof Layout> &
13
+ PageSchema & {
14
+ render: CollectionEntry<'pages'>['render']
15
+ }
16
+
17
+ const {
18
+ title,
19
+ description,
20
+ list,
21
+ button,
22
+ header,
23
+ sidebar,
24
+ sections,
25
+ footer,
26
+ render,
27
+ } = Astro.props
28
+
29
+ const { Content, headings } = await render()
30
+ ---
31
+
32
+ <Layout
33
+ class:list="post"
34
+ {...Astro.props}
35
+ >
36
+ <Header
37
+ {...sidebar}
38
+ {...header}
39
+ />
40
+ <Element as="main">
41
+ <Content1
42
+ heading={title}
43
+ paragraph={description}
44
+ {list}
45
+ {button}
46
+ {headings}
47
+ >
48
+ <Content />
49
+ </Content1>
50
+ {sections?.map((section) => <Block {...section} />)}
51
+ </Element>
52
+ <Footer {...footer} />
53
+ </Layout>
@@ -1,34 +1,33 @@
1
1
  ---
2
+ // @ts-nocheck
3
+ import type { ComponentProps } from 'astro/types'
2
4
  import { getImage } from 'astro:assets'
3
- import CartForm from 'fulldev-ui/components/CartForm.astro'
5
+ import type { CollectionEntry } from 'astro:content'
6
+ import { getCollection, getEntry } from 'astro:content'
7
+ import Products1 from 'fulldev-ui/blocks/Products1.astro'
8
+ import CartForm from 'fulldev-ui/components/CartForm.svelte'
4
9
  import Element from 'fulldev-ui/components/Element.astro'
5
10
  import Gallery from 'fulldev-ui/components/Gallery.astro'
6
11
  import Heading from 'fulldev-ui/components/Heading.astro'
7
12
  import List from 'fulldev-ui/components/List.astro'
8
13
  import Paragraph from 'fulldev-ui/components/Paragraph.astro'
9
- import Prose from 'fulldev-ui/components/Prose.astro'
10
- import Sections from 'fulldev-ui/components/sections.astro'
11
- import Layout from 'fulldev-ui/layouts/Layout.astro'
14
+ import type { PageSchema } from 'fulldev-ui/schemas/page'
15
+ import Layout from 'fulldev-ui/structures/Layout.astro'
16
+ import Prose from 'fulldev-ui/structures/Prose.astro'
17
+
18
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {
19
+ render: CollectionEntry<'pages'>['render']
20
+ }
12
21
 
13
22
  const {
14
- variant = 1,
15
- level = 1,
16
- heading,
17
- paragraph,
23
+ render,
18
24
  title,
19
- list,
20
25
  price,
21
26
  images,
22
- text,
23
- subheading,
24
- variants,
25
- button,
26
27
  description,
27
- form,
28
- uitverkocht,
29
- render,
30
- sections,
31
- banner,
28
+ soldout,
29
+ categories,
30
+ variants,
32
31
  } = Astro.props
33
32
 
34
33
  const slug = Astro.url.pathname.replace(/^\/|\/$/g, '') || 'index'
@@ -38,9 +37,20 @@ const allImages = import.meta.glob<{ default: ImageMetadata }>('/src/images/*')
38
37
  const foundImage = allImages[src]
39
38
  const gotImage =
40
39
  imageId && (await getImage({ src: foundImage ? foundImage() : src }))
40
+
41
+ const relatedProducts = await getCollection('products', (product) =>
42
+ product.data.categories?.some((category) =>
43
+ categories?.map((c) => c.slug).includes(category.slug)
44
+ )
45
+ )
46
+
47
+ const baseLayout = await getEntry('layouts', 'base')
41
48
  ---
42
49
 
43
- <Layout {...Astro.props}>
50
+ <Layout
51
+ class:list="product"
52
+ {...Astro.props}
53
+ >
44
54
  <Element
45
55
  class:list="product"
46
56
  as="section"
@@ -53,27 +63,27 @@ const gotImage =
53
63
  <Element class:list="product-segment">
54
64
  <Element class:list="product-content">
55
65
  <Heading
56
- {level}
57
- text={heading || title}
66
+ as="h1"
67
+ size="3xl"
68
+ text={title}
58
69
  />
59
- <Paragraph text={paragraph || description} />
70
+ <Paragraph text={description} />
60
71
  </Element>
61
- <CartForm
62
- soldout={uitverkocht}
63
- image={gotImage?.src}
64
- {title}
65
- {price}
66
- {slug}
67
- {variants}
68
- />
72
+ <!-- <CartForm
73
+ product={Astro.props}
74
+ client:load
75
+ /> -->
69
76
  <List
70
77
  size="sm"
71
- items={banner.split('|')}
78
+ items={baseLayout.data.banner?.split('|')}
72
79
  />
73
80
  </Element>
74
81
  </Element>
75
82
  </Element>
76
- <Sections {sections} />
83
+ <Products1
84
+ heading="Gerelateerde producten"
85
+ products={[...relatedProducts].sort(() => Math.random() - 0.5).slice(0, 6)}
86
+ />
77
87
  <slot />
78
88
  </Layout>
79
89
 
@@ -1,36 +1,49 @@
1
1
  ---
2
- import { getCollection } from 'astro:content'
3
- import PageLayout from 'fulldev-ui/layouts/PageLayout.astro'
2
+ import { getCollection, getEntry } from 'astro:content'
3
+ import { getHref } from 'fulldev-ui/utils/getHref.ts'
4
+ import { dash, pascal } from 'radash'
5
+ import { mergeDeep } from 'remeda'
4
6
 
5
7
  export async function getStaticPaths() {
6
- const pages = await getCollection('pages')
7
- return pages.map((page) => ({
8
+ const collection = await getCollection('pages')
9
+ return collection.map((entry) => ({
8
10
  params: {
9
- page: page.slug === 'index' ? undefined : page.slug,
11
+ page: getHref(entry.slug),
10
12
  },
11
- props: page,
13
+ props: entry,
12
14
  }))
13
15
  }
14
16
 
15
- const { data, ...rest } = Astro.props
16
- const { component, ...restData } = data
17
+ const layoutName = Astro.props.data._layout ?? 'Page'
18
+ const layoutComponentName = pascal(layoutName)
17
19
 
18
- const layouts = {
20
+ const layoutsComponents = {
19
21
  ...import.meta.glob('/src/layouts/**/*.astro'),
20
22
  ...import.meta.glob('../layouts/**/*.astro'),
21
23
  }
22
24
 
23
- const componentPath = Object.keys(layouts).find((path) => {
24
- const strip = (str?: string) => str?.split('/').pop()?.split('.')[0]
25
- return strip(path) === strip(component)
26
- })
25
+ const layoutComponentPath = Object.keys(layoutsComponents).find(
26
+ (path) => path.split('/').pop()?.split('.')[0] === layoutComponentName
27
+ )
27
28
 
28
- const Component =
29
- (componentPath && (await (layouts[componentPath] as any)()).default) ??
30
- PageLayout
29
+ const LayoutComponent =
30
+ layoutComponentPath &&
31
+ (await (layoutsComponents[layoutComponentPath] as any)()).default
32
+
33
+ const layoutEntryName = dash(layoutName)
34
+ const layoutEntry = await getEntry('layouts', layoutEntryName)
35
+ const baseLayout = await getEntry('layouts', 'base')
36
+ const mergedLayouts = mergeDeep(baseLayout || {}, layoutEntry || {})
37
+ const merged = mergeDeep(mergedLayouts, Astro.props)
38
+
39
+ const { data, ...rest } = merged
31
40
  ---
32
41
 
33
- <Component
34
- {...restData}
35
- {...rest}
36
- />
42
+ {
43
+ LayoutComponent && (
44
+ <LayoutComponent
45
+ {...data}
46
+ {...rest}
47
+ />
48
+ )
49
+ }
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import type Badge from 'fulldev-ui/components/Badge.astro'
4
+
5
+ export const badgeSchema = z
6
+ .object({
7
+ icon: z.string().optional(),
8
+ text: z.string().optional(),
9
+ href: z.string().optional(),
10
+ target: z.literal('_blank').optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ variant: z.enum(['primary', 'secondary', 'outline']).optional(),
13
+ })
14
+ .strict() satisfies z.ZodType<ComponentProps<typeof Badge>>
@@ -0,0 +1,59 @@
1
+ import { z } from 'astro:content'
2
+ import { badgeSchema } from 'fulldev-ui/schemas/badge.ts'
3
+ import { buttonSchema } from 'fulldev-ui/schemas/button.ts'
4
+ import { channelSchema } from 'fulldev-ui/schemas/channel.ts'
5
+ import { imageSchema } from 'fulldev-ui/schemas/image.ts'
6
+ import { linkSchema } from 'fulldev-ui/schemas/link.ts'
7
+ import { logoSchema } from 'fulldev-ui/schemas/logo.ts'
8
+ import { menuSchema } from 'fulldev-ui/schemas/menu.ts'
9
+ import { pathSchema } from 'fulldev-ui/schemas/path.ts'
10
+
11
+ export const blockSchema = z
12
+ .object({
13
+ _block: z.string().optional(),
14
+ dark: z.boolean().optional(),
15
+ themer: z.boolean().optional(),
16
+ search: z.boolean().optional(),
17
+ cart: z.boolean().optional(),
18
+ text: z.string().optional(),
19
+ content: z.string().optional(),
20
+ tagline: z.string().optional(),
21
+ heading: z.string().optional(),
22
+ paragraph: z.string().optional(),
23
+ list: z.string().array().optional(),
24
+ socials: z.string().array().optional(),
25
+ logo: logoSchema.optional(),
26
+ link: linkSchema.optional(),
27
+ links: linkSchema.array().optional(),
28
+ menus: menuSchema.array().optional(),
29
+ sidebar: menuSchema.array().optional(),
30
+ badge: badgeSchema.optional(),
31
+ badges: badgeSchema.array().optional(),
32
+ button: buttonSchema.optional(),
33
+ buttons: buttonSchema.array().optional(),
34
+ image: imageSchema.optional(),
35
+ images: imageSchema.array().optional(),
36
+ channels: channelSchema.array().optional(),
37
+ pages: pathSchema('pages').array().optional(),
38
+ products: pathSchema('pages').array().optional(),
39
+ cards: z
40
+ .object({
41
+ icon: z.string().optional(),
42
+ rating: z.number().optional(),
43
+ tagline: z.string().optional(),
44
+ heading: z.string().optional(),
45
+ paragraph: z.string().optional(),
46
+ list: z.string().array().optional(),
47
+ badge: badgeSchema.optional(),
48
+ badges: badgeSchema.array().optional(),
49
+ button: buttonSchema.optional(),
50
+ buttons: buttonSchema.array().optional(),
51
+ image: imageSchema.optional(),
52
+ })
53
+ .strict()
54
+ .array()
55
+ .optional(),
56
+ })
57
+ .strict()
58
+
59
+ export type BlockSchema = z.infer<typeof blockSchema>
@@ -0,0 +1,15 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export const buttonSchema = z
4
+ .object({
5
+ icon: z.string().optional(),
6
+ text: z.string().optional(),
7
+ href: z.string().optional(),
8
+ target: z.literal('_blank').optional(),
9
+ size: z.enum(['sm', 'md', 'lg']).optional(),
10
+ reverse: z.boolean().optional(),
11
+ variant: z.enum(['primary', 'secondary', 'outline', 'ghost']).optional(),
12
+ })
13
+ .strict()
14
+
15
+ export type ButtonSchema = z.infer<typeof buttonSchema>
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import Channel from 'fulldev-ui/components/Channel.astro'
4
+
5
+ export const channelSchema = z
6
+ .object({
7
+ icon: z.string().optional(),
8
+ heading: z.string().optional(),
9
+ text: z.string().optional(),
10
+ href: z.string().optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ variant: z.enum(['secondary', 'outline']).optional(),
13
+ })
14
+ .strict() satisfies z.ZodType<ComponentProps<typeof Channel>>
@@ -0,0 +1,13 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import type Checkbox from 'fulldev-ui/components/Checkbox.astro'
4
+
5
+ export const checkboxSchema = z
6
+ .object({
7
+ name: z.string().optional(),
8
+ label: z.string().optional(),
9
+ id: z.string().optional(),
10
+ value: z.string().optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ })
13
+ .strict() satisfies z.ZodType<ComponentProps<typeof Checkbox>>
@@ -0,0 +1,17 @@
1
+ import { z } from 'astro:content'
2
+ import { channelSchema } from 'fulldev-ui/schemas/channel.ts'
3
+ import { logoSchema } from 'fulldev-ui/schemas/logo.ts'
4
+ import { menuSchema } from 'fulldev-ui/schemas/menu.ts'
5
+
6
+ export const footerSchema = z
7
+ .object({
8
+ logo: logoSchema.optional(),
9
+ heading: z.string().optional(),
10
+ paragraph: z.string().optional(),
11
+ socials: z.string().url().array().optional(),
12
+ channels: channelSchema.array().optional(),
13
+ menus: menuSchema.array().optional(),
14
+ })
15
+ .strict()
16
+
17
+ export type FooterSchema = z.infer<typeof footerSchema>
@@ -0,0 +1,17 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import type Head from 'fulldev-ui/components/Head.astro'
4
+ import { imageSchema } from 'fulldev-ui/schemas/image.ts'
5
+
6
+ export const headSchema = z
7
+ .object({
8
+ title: z.string().optional(),
9
+ description: z.string().optional(),
10
+ image: imageSchema.optional(),
11
+ theme: z.enum(['light', 'dark', 'system']).optional(),
12
+ favicon: z.string().optional(),
13
+ company: z.string().optional(),
14
+ scripts: z.string().array().optional(),
15
+ code: z.string().optional(),
16
+ })
17
+ .strict() satisfies z.ZodType<ComponentProps<typeof Head>>
@@ -0,0 +1,21 @@
1
+ import { z } from 'astro:content'
2
+ import { buttonSchema } from 'fulldev-ui/schemas/button.ts'
3
+ import { linkSchema } from 'fulldev-ui/schemas/link.ts'
4
+ import { logoSchema } from 'fulldev-ui/schemas/logo.ts'
5
+ import { menuSchema } from 'fulldev-ui/schemas/menu.ts'
6
+
7
+ export const headerSchema = z
8
+ .object({
9
+ logo: logoSchema.optional(),
10
+ heading: z.string().optional(),
11
+ links: linkSchema.array().optional(),
12
+ socials: z.string().array().optional(),
13
+ buttons: buttonSchema.array().optional(),
14
+ menus: menuSchema.array().optional(),
15
+ themer: z.boolean().optional(),
16
+ cart: z.boolean().optional(),
17
+ search: z.boolean().optional(),
18
+ })
19
+ .strict()
20
+
21
+ export type HeaderSchema = z.infer<typeof headerSchema>
@@ -0,0 +1,53 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import type Image from 'fulldev-ui/components/Image.astro'
4
+
5
+ // const imagePath = z.preprocess((data: unknown) => {
6
+ // if (typeof data === 'string') {
7
+ // return data.split('/').pop()
8
+ // }
9
+ // return data
10
+ // }, reference('images'))
11
+
12
+ // export const imageSchema = z
13
+ // .union([imagePath, z.object({}).passthrough()])
14
+ // .pipe(
15
+ // z
16
+ // .object({
17
+ // id: z
18
+ // .string()
19
+ // .refine(async (data) => await reference('images').parseAsync(data)),
20
+ // src: z.string(),
21
+ // alt: z.string(),
22
+ // width: z.number(),
23
+ // height: z.number(),
24
+ // })
25
+ // .partial()
26
+ // .passthrough()
27
+ // )
28
+ // .optional()
29
+
30
+ // export const imageSchema = z
31
+ // .object({
32
+ // src: z.string().optional(),
33
+ // alt: z.string().optional(),
34
+ // width: z.number().optional(),
35
+ // height: z.number().optional(),
36
+ // })
37
+ // .strict() satisfies z.ZodType<ComponentProps<typeof Image>>
38
+
39
+ const image = z
40
+ .object({
41
+ src: z.string().optional(),
42
+ alt: z.string().optional(),
43
+ width: z.number().optional(),
44
+ height: z.number().optional(),
45
+ })
46
+ .strict() satisfies z.ZodType<ComponentProps<typeof Image>>
47
+
48
+ export const imageSchema = z
49
+ .preprocess(
50
+ (data: unknown) => (typeof data === 'string' ? { src: data } : data),
51
+ image
52
+ )
53
+ .optional() as z.ZodType<ComponentProps<typeof Image>>
@@ -0,0 +1,13 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import Input from 'fulldev-ui/components/Input.astro'
4
+
5
+ export const inputSchema = z
6
+ .object({
7
+ icon: z.string().optional(),
8
+ label: z.string().optional(),
9
+ placeholder: z.string().optional(),
10
+ value: z.string().optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ })
13
+ .strict() satisfies z.ZodType<ComponentProps<typeof Input>>
@@ -0,0 +1,14 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import Link from 'fulldev-ui/components/Link.astro'
4
+
5
+ export const linkSchema = z
6
+ .object({
7
+ text: z.string().optional(),
8
+ href: z.string().optional(),
9
+ icon: z.string().optional(),
10
+ target: z.literal('_blank').optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ variant: z.enum(['primary', 'underline', 'muted']).optional(),
13
+ })
14
+ .strict() satisfies z.ZodType<ComponentProps<typeof Link>>
@@ -0,0 +1,13 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import Logo from 'fulldev-ui/components/Logo.astro'
4
+ import { imageSchema } from 'fulldev-ui/schemas/image.ts'
5
+
6
+ export const logoSchema = z
7
+ .object({
8
+ image: imageSchema.optional(),
9
+ text: z.string().optional(),
10
+ href: z.string().optional(),
11
+ size: z.enum(['sm', 'md', 'lg']).optional(),
12
+ })
13
+ .strict() satisfies z.ZodType<ComponentProps<typeof Logo>>