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,38 @@
1
+ ---
2
+ import { getEntries } from 'astro:content'
3
+ import type { BlockSchema } from 'fulldev-ui/schemas/block'
4
+
5
+ interface Props extends BlockSchema {
6
+ headings?: any
7
+ depth?: number
8
+ toc?: any
9
+ sidebar?: any
10
+ first?: boolean
11
+ }
12
+
13
+ let { _block, pages, ...rest } = Astro.props
14
+
15
+ pages = pages && (await getEntries(pages))
16
+
17
+ const blocks = {
18
+ ...import.meta.glob('/src/blocks/**/*.astro'),
19
+ ...import.meta.glob('../blocks/**/*.astro'),
20
+ }
21
+
22
+ const path = Object.keys(blocks).find(
23
+ (path) => path.split('/').pop()?.split('.')[0] === _block
24
+ )
25
+
26
+ const BlockComponent = path && (await (blocks[path] as any)()).default
27
+ ---
28
+
29
+ {
30
+ BlockComponent && (
31
+ <BlockComponent
32
+ {pages}
33
+ {...rest}
34
+ >
35
+ <slot />
36
+ </BlockComponent>
37
+ )
38
+ }
@@ -0,0 +1,26 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Block from 'fulldev-ui/components/Block.astro'
4
+ import Element from 'fulldev-ui/components/Element.astro'
5
+
6
+ interface Props extends HTMLAttributes<'div'> {
7
+ blocks?: ComponentProps<typeof Block>[] | undefined
8
+ }
9
+
10
+ const { blocks, ...rest } = Astro.props
11
+ ---
12
+
13
+ <Element
14
+ class:list="blocks"
15
+ {...rest}
16
+ >
17
+ {blocks?.map((block) => <Block {...block} />)}
18
+ </Element>
19
+
20
+ <style is:global>
21
+ @layer fulldev {
22
+ .blocks {
23
+ @apply flex flex-col;
24
+ }
25
+ }
26
+ </style>
@@ -1,62 +1,39 @@
1
1
  ---
2
- import type { ComponentProps, HTMLAttributes, HTMLTag } from 'astro/types'
3
- import type { CollectionEntry } from 'astro:content'
4
- import { getEntry } from 'astro:content'
2
+ import type { HTMLAttributes } from 'astro/types'
5
3
  import Element from 'fulldev-ui/components/Element.astro'
6
4
  import Icon from 'fulldev-ui/components/Icon.astro'
7
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
8
5
 
9
6
  interface Props
10
- extends GlobalProps,
11
- HTMLAttributes<'button'>,
12
- HTMLAttributes<'a'> {
13
- as?: HTMLTag
14
- href?: string | null | undefined
15
- type?: HTMLAttributes<'button'>['type'] & HTMLAttributes<'a'>['type']
16
- icon?: ComponentProps<typeof Icon>['name']
17
- slug?: CollectionEntry<'pages'>['slug'] | undefined
7
+ extends HTMLAttributes<'button'>,
8
+ Omit<HTMLAttributes<'a'>, 'type'>,
9
+ HTMLAttributes<'label'> {
18
10
  variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | undefined
11
+ size?: 'sm' | 'md' | 'lg' | undefined
19
12
  text?: string | undefined
20
- reverse?: boolean | undefined
13
+ icon?: string | undefined
21
14
  }
22
15
 
23
- const {
24
- slug,
25
- href = slug === 'index' ? '/' : slug ? `/${slug}/` : undefined,
26
- text = slug ? (await getEntry('pages', slug)).data.title : undefined,
27
- as = href ? 'a' : 'button',
28
- type = as === 'button' ? 'button' : undefined,
29
- target = href?.startsWith('http') ? '_blank' : undefined,
30
- variant = 'primary',
31
- size = 'md',
32
- icon,
33
- reverse,
34
- ...rest
35
- } = Astro.props
16
+ const { variant = 'primary', size = 'md', text, icon, ...rest } = Astro.props
36
17
  ---
37
18
 
38
19
  <Element
39
20
  class:list={['button']}
40
- {href}
41
- {as}
42
- {type}
43
- {target}
21
+ as={rest.href ? 'a' : rest.for ? 'label' : 'button'}
44
22
  {variant}
45
23
  {size}
46
- {reverse}
47
24
  {...rest}
48
25
  >
49
- <Icon name={icon} />
50
26
  <Element as="span">
51
27
  <Fragment set:html={text} />
52
28
  <slot />
53
29
  </Element>
30
+ <Icon name={icon} />
54
31
  </Element>
55
32
 
56
33
  <style is:global>
57
34
  @layer fulldev {
58
35
  .button {
59
- @apply inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium leading-none ring-offset-background transition-colors;
36
+ @apply inline-flex cursor-pointer items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium leading-none ring-offset-background transition-colors;
60
37
  @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
61
38
  @apply disabled:pointer-events-none disabled:opacity-50;
62
39
 
@@ -1,59 +1,28 @@
1
1
  ---
2
- import type { ComponentProps, HTMLAttributes } from 'astro/types'
2
+ import type { ComponentProps } from 'astro/types'
3
3
  import Button from 'fulldev-ui/components/Button.astro'
4
- import Element from 'fulldev-ui/components/Element.astro'
5
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
4
 
7
- interface Props extends GlobalProps, HTMLAttributes<'div'> {
8
- variant?: ComponentProps<typeof Button>['variant']
5
+ interface Props extends ComponentProps<typeof Button> {
9
6
  button?: ComponentProps<typeof Button> | undefined
10
7
  buttons?: ComponentProps<typeof Button>[] | undefined
11
- direction?: 'row' | 'column' | undefined
12
8
  }
13
9
 
14
- const {
15
- direction = 'row',
16
- variant = 'primary',
17
- buttons = [],
18
- button,
19
- size,
20
- ...rest
21
- } = Astro.props
10
+ const { variant = 'primary', button, buttons, ...rest } = Astro.props
22
11
 
23
12
  const buttonVariant = (i: number) => {
24
13
  if (variant === 'primary' && i === 0) return 'primary'
25
14
  else if (variant === 'primary' && i === 1) return 'secondary'
26
- else if (variant === 'primary' && i > 1) return 'ghost'
27
15
  else if (variant === 'secondary' && i === 0) return 'secondary'
28
16
  else return 'ghost'
29
17
  }
30
18
  ---
31
19
 
32
- <Element
33
- class:list="buttons"
34
- {direction}
35
- {...rest}
36
- >
37
- {
38
- [button, ...buttons].filter(Boolean).map((button, i) => (
39
- <Button
40
- variant={buttonVariant(i)}
41
- {size}
42
- {...button}
43
- />
44
- ))
45
- }
46
- <slot />
47
- </Element>
48
-
49
- <style is:global>
50
- @layer fulldev {
51
- .buttons {
52
- @apply inline-flex flex-wrap justify-stretch gap-2;
53
-
54
- &.direction-column {
55
- @apply flex-col items-start;
56
- }
57
- }
58
- }
59
- </style>
20
+ {
21
+ [button, ...(buttons || [])].filter(Boolean).map((button, i) => (
22
+ <Button
23
+ variant={buttonVariant(i)}
24
+ {...rest}
25
+ {...button}
26
+ />
27
+ ))
28
+ }
@@ -1,33 +1,37 @@
1
1
  ---
2
+ // @ts-nocheck
2
3
  import type { ComponentProps } from 'astro/types'
3
- import CartList from 'fulldev-ui/components/CartList.astro'
4
+ import CartList from 'fulldev-ui/components/CartList.svelte'
4
5
  import CartSummary from 'fulldev-ui/components/CartSummary.astro'
5
- import Drawer from 'fulldev-ui/components/Drawer.astro'
6
+ import Drawer from 'fulldev-ui/structures/Drawer.astro'
7
+ import Button from './Button.astro'
8
+ import Icon from './Icon.astro'
9
+ import Input from './Input.astro'
10
+ import Select from './Select.astro'
6
11
 
7
- interface Props extends ComponentProps<typeof Drawer> {}
12
+ interface Props extends Omit<ComponentProps<typeof Drawer>, 'id' | 'icon'> {}
8
13
 
9
- const {
10
- icon = 'shopping-cart',
11
- color = 'brand',
12
- id = 'cart',
13
- if: ifProp,
14
- ...rest
15
- } = Astro.props
14
+ const { variant = 'ghost', size = 'md', ...rest } = Astro.props
16
15
  ---
17
16
 
17
+ <Select show={false} />
18
+ <Button show={false} />
19
+ <Input show={false} />
20
+ <Icon show={false} />
21
+
18
22
  <Drawer
19
- if={ifProp}
20
23
  class:list="cart"
21
- {icon}
22
- {color}
23
- {id}
24
+ id="cart"
25
+ icon="shopping-cart"
26
+ {variant}
27
+ {size}
24
28
  {...rest}
25
29
  >
26
- <CartList />
30
+ <CartList client:load />
27
31
  <CartSummary slot="footer" />
28
32
  </Drawer>
29
33
 
30
- <style is:global>
34
+ <style is:global>
31
35
  @layer fulldev {
32
36
  form {
33
37
  display: flex;
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import { updateQuantity } from 'fulldev-ui/stores/cart.svelte.ts'
3
+ import { tick } from 'svelte'
4
+
5
+ let { uid, quantity } = $props()
6
+ let inputElement: HTMLInputElement | null = $state(null)
7
+
8
+ async function onQuantityChange(e: Event) {
9
+ const target = e.target as HTMLInputElement
10
+ const value = Number(target.value)
11
+ updateQuantity(uid, value)
12
+
13
+ if (value === 11) {
14
+ await tick()
15
+ inputElement?.focus()
16
+ }
17
+ }
18
+ </script>
19
+
20
+ <label
21
+ class="quantity input select size-md"
22
+ for="quantity"
23
+ >
24
+ {#if quantity > 10}
25
+ <input
26
+ bind:this={inputElement}
27
+ class="input-input"
28
+ name="quantity"
29
+ type="number"
30
+ value={quantity}
31
+ min={0}
32
+ onchange={onQuantityChange}
33
+ />
34
+ {:else}
35
+ <svg
36
+ xmlns="http://www.w3.org/2000/svg"
37
+ viewBox="0 0 24 24"
38
+ class="icon size-md"
39
+ >
40
+ <path
41
+ fill="none"
42
+ stroke="currentColor"
43
+ stroke-linecap="round"
44
+ stroke-linejoin="round"
45
+ stroke-width="2"
46
+ d="m6 9l6 6l6-6"
47
+ ></path>
48
+ </svg>
49
+ <select
50
+ class="select-select"
51
+ value={quantity}
52
+ onchange={onQuantityChange}
53
+ >
54
+ {#each Array(10) as _, i}
55
+ <option
56
+ value={i + 1}
57
+ selected={quantity === i + 1}
58
+ >
59
+ {i + 1}
60
+ </option>
61
+ {/each}
62
+ <option
63
+ value="11"
64
+ selected={quantity > 10}
65
+ >
66
+ Meer
67
+ </option>
68
+ </select>
69
+ {/if}
70
+ </label>
71
+
72
+ <style lang="postcss">
73
+ .quantity {
74
+ @apply w-24;
75
+ }
76
+ </style>
@@ -0,0 +1,58 @@
1
+ <script lang="ts">
2
+ import { cart } from 'fulldev-ui/stores/cart.svelte.ts'
3
+ import Stripe from 'stripe'
4
+
5
+ const { STRIPE_RESTRICTED_KEY, URL } = $props()
6
+
7
+ async function handeClick() {
8
+ if (!STRIPE_RESTRICTED_KEY) {
9
+ console.error('Stripe key is missing')
10
+ return
11
+ }
12
+ const stripe = new Stripe(STRIPE_RESTRICTED_KEY)
13
+ const checkoutConfig = {
14
+ success_url: `${URL}/checkout`,
15
+ mode: 'payment',
16
+ customer_creation: 'always',
17
+ shipping_address_collection: {
18
+ allowed_countries: ['NL'],
19
+ },
20
+ phone_number_collection: {
21
+ enabled: true,
22
+ },
23
+ }
24
+
25
+ const lineItems = $cart.map((item) => ({
26
+ quantity: item.quantity,
27
+ adjustable_quantity: {
28
+ enabled: true,
29
+ maximum: 999999,
30
+ },
31
+ price_data: {
32
+ currency: 'eur',
33
+ product_data: {
34
+ name:
35
+ item.variants && Object.values(item.variants || {}).length
36
+ ? `${item.title} - ${Object.values(item.variants).join(' / ')}`
37
+ : item.title,
38
+ // images: [item.image ? URL + item.image : ''],
39
+ },
40
+ unit_amount: Math.round(item.price || 0 * 100),
41
+ },
42
+ }))
43
+
44
+ const checkoutSession = await stripe.checkout.sessions.create({
45
+ line_items: lineItems,
46
+ ...checkoutConfig,
47
+ })
48
+
49
+ checkoutSession.url && window.location.replace(checkoutSession.url)
50
+ }
51
+ </script>
52
+
53
+ <button
54
+ class="button variant-primary size-md"
55
+ onclick={handeClick}
56
+ >
57
+ Afrekenennn
58
+ </button>
@@ -0,0 +1,130 @@
1
+ <script lang="ts">
2
+ import { cart, getUid, openCart } from 'fulldev-ui/stores/cart.svelte'
3
+
4
+ import { capitalize } from 'radash'
5
+ import CartQuantity from './CartQuantity.svelte'
6
+ import { formatPrice } from 'fulldev-ui/utils/cart'
7
+ import type { CollectionEntry } from 'astro:content'
8
+
9
+ interface Props {
10
+ product: CollectionEntry<'products'>
11
+ }
12
+
13
+ const { product }: Props = $props()
14
+ const { slug, data } = product
15
+
16
+ const form = $state({
17
+ slug: slug,
18
+ title: data.title,
19
+ price: data.price,
20
+ image: data.images?.[0]?.src || `/${data.images?.[0]?.id}`,
21
+ variants: Object.fromEntries(
22
+ Object.entries(data.variants ?? {}).map(([key, value]) => [key, value[0]])
23
+ ),
24
+ quantity: 1,
25
+ })
26
+
27
+ function handleSubmit(event: Event) {
28
+ event.preventDefault()
29
+
30
+ const variants = { ...form.variants }
31
+ const uid = getUid(slug, variants)
32
+ const item = { ...form, uid, variants }
33
+
34
+ const index = $cart.findIndex((i) => i.uid === item.uid)
35
+ if (index === -1) $cart = [...$cart, item]
36
+ else if ($cart[index]) $cart[index].quantity += form.quantity
37
+
38
+ openCart()
39
+ }
40
+ </script>
41
+
42
+ <form
43
+ class="cart-form"
44
+ onsubmit={handleSubmit}
45
+ >
46
+ <input
47
+ name="slug"
48
+ type="hidden"
49
+ bind:value={form.slug}
50
+ />
51
+ <input
52
+ name="title"
53
+ type="hidden"
54
+ bind:value={form.title}
55
+ />
56
+ <input
57
+ name="price"
58
+ type="hidden"
59
+ bind:value={form.price}
60
+ />
61
+ <input
62
+ name="image"
63
+ type="hidden"
64
+ bind:value={form.image}
65
+ />
66
+ {#if form.variants}
67
+ {#each Object.entries(data.variants ?? {}) as [key, options]}
68
+ <label
69
+ class="select size-md"
70
+ for={`variant-${key}`}
71
+ >
72
+ <p class="label">
73
+ {capitalize(key)}
74
+ </p>
75
+ <svg
76
+ xmlns="http://www.w3.org/2000/svg"
77
+ viewBox="0 0 24 24"
78
+ class="icon size-md"
79
+ >
80
+ <path
81
+ fill="none"
82
+ stroke="currentColor"
83
+ stroke-linecap="round"
84
+ stroke-linejoin="round"
85
+ stroke-width="2"
86
+ d="m6 9l6 6l6-6"
87
+ ></path>
88
+ </svg>
89
+ <select
90
+ class="select-select"
91
+ name={key}
92
+ disabled={data.soldout}
93
+ bind:value={form.variants[key]}
94
+ >
95
+ {#each options as option}
96
+ <option value={option}>{option}</option>
97
+ {/each}
98
+ </select>
99
+ </label>
100
+ {/each}
101
+ {/if}
102
+ {#if data.price}
103
+ <div class="price">
104
+ {formatPrice(data.price)}
105
+ </div>
106
+ {/if}
107
+
108
+ <div class="inputs">
109
+ <CartQuantity bind:value={form.quantity} />
110
+ <button
111
+ class="variant-primary button size-md cart-add"
112
+ type="submit"
113
+ disabled={data.soldout}
114
+ >
115
+ {data.soldout ? 'Uitverkocht' : 'Toevoegen aan winkelwagen'}
116
+ </button>
117
+ </div>
118
+ </form>
119
+
120
+ <style lang="postcss">
121
+ @layer fulldev {
122
+ .cart-form {
123
+ @apply flex flex-col gap-4;
124
+
125
+ .inputs {
126
+ @apply flex gap-2;
127
+ }
128
+ }
129
+ }
130
+ </style>
@@ -0,0 +1,88 @@
1
+ <script lang="ts">
2
+ import { cart } from 'fulldev-ui/stores/cart.svelte.ts'
3
+ import { formatPrice } from 'fulldev-ui/utils/cart'
4
+ import CartQuantity from './CartQuantity.svelte'
5
+
6
+ function removeItem(index: number) {
7
+ cart.update((currentCart) => {
8
+ currentCart.splice(index, 1)
9
+ return [...currentCart]
10
+ })
11
+ }
12
+ </script>
13
+
14
+ <div class="cart-list">
15
+ {#each $cart as item, index}
16
+ <div
17
+ class="cart-list-card"
18
+ data-slug={item.slug}
19
+ >
20
+ <img
21
+ class="image"
22
+ src={item.image}
23
+ alt={item.title}
24
+ />
25
+ <div class="cart-list-card-segment">
26
+ <div class="cart-list-card-content">
27
+ <h3 class="heading">{item.title}</h3>
28
+ {#if item.price}
29
+ <div class="price">{formatPrice(item.price)}</div>
30
+ {/if}
31
+ </div>
32
+ <div class="cart-list-card-actions">
33
+ <CartQuantity bind:value={item.quantity} />
34
+ <button
35
+ class="button variant-outline size-sm"
36
+ type="button"
37
+ aria-label="trash"
38
+ on:click={() => removeItem(index)}
39
+ >
40
+ <svg
41
+ xmlns="http://www.w3.org/2000/svg"
42
+ viewBox="0 0 24 24"
43
+ class="icon size-md"
44
+ >
45
+ <path
46
+ fill="none"
47
+ stroke="currentColor"
48
+ stroke-linecap="round"
49
+ stroke-linejoin="round"
50
+ stroke-width="2"
51
+ d="M4 7h16m-10 4v6m4-6v6M5 7l1 12a2 2 0 0 0 2 2h8a2 2 0 0 0 2-2l1-12M9 7V4a1 1 0 0 1 1-1h4a1 1 0 0 1 1 1v3"
52
+ ></path>
53
+ </svg>
54
+ </button>
55
+ </div>
56
+ </div>
57
+ </div>
58
+ {/each}
59
+ </div>
60
+
61
+ <style lang="postcss">
62
+ @layer fulldev {
63
+ .cart-list {
64
+ @apply flex flex-col text-foreground;
65
+
66
+ .cart-list-card {
67
+ @apply flex w-full gap-5;
68
+
69
+ &:not(:first-child) {
70
+ @apply mt-5 border-t pt-5;
71
+ }
72
+ }
73
+
74
+ .image {
75
+ @apply block h-auto w-24;
76
+ }
77
+
78
+ .cart-list-card-segment {
79
+ @apply flex h-full w-full flex-col justify-between gap-4;
80
+ }
81
+
82
+ .cart-list-card-content,
83
+ .cart-list-card-actions {
84
+ @apply flex justify-between gap-2;
85
+ }
86
+ }
87
+ }
88
+ </style>
@@ -0,0 +1,81 @@
1
+ <script lang="ts">
2
+ import { tick } from 'svelte'
3
+
4
+ interface Props {
5
+ value: number
6
+ size?: 'sm' | 'md' | 'lg'
7
+ change?: (quantity: number) => void
8
+ }
9
+
10
+ let { value = $bindable(), size = 'md', change }: Props = $props()
11
+ let inputElement: HTMLInputElement | null = $state(null)
12
+
13
+ let quantity = $state(value)
14
+
15
+ async function handleChange() {
16
+ value = quantity
17
+ if (change) change(value)
18
+ if (value === 11) {
19
+ await tick()
20
+ inputElement?.focus()
21
+ }
22
+ }
23
+ </script>
24
+
25
+ <label
26
+ class="quantity input select size-{size}"
27
+ for="quantity"
28
+ >
29
+ {#if value > 10}
30
+ <input
31
+ bind:this={inputElement}
32
+ bind:value={quantity}
33
+ class="input-input"
34
+ name="quantity"
35
+ type="number"
36
+ min={1}
37
+ onchange={handleChange}
38
+ />
39
+ {:else}
40
+ <svg
41
+ xmlns="http://www.w3.org/2000/svg"
42
+ viewBox="0 0 24 24"
43
+ class="icon size-{size}"
44
+ >
45
+ <path
46
+ fill="none"
47
+ stroke="currentColor"
48
+ stroke-linecap="round"
49
+ stroke-linejoin="round"
50
+ stroke-width="2"
51
+ d="m6 9l6 6l6-6"
52
+ ></path>
53
+ </svg>
54
+ <select
55
+ class="select-select"
56
+ bind:value={quantity}
57
+ onchange={handleChange}
58
+ >
59
+ {#each Array(10) as _, i}
60
+ <option
61
+ value={i + 1}
62
+ selected={value === i + 1}
63
+ >
64
+ {i + 1}
65
+ </option>
66
+ {/each}
67
+ <option
68
+ value={11}
69
+ selected={value > 10}
70
+ >
71
+ Meer
72
+ </option>
73
+ </select>
74
+ {/if}
75
+ </label>
76
+
77
+ <style lang="postcss">
78
+ .quantity {
79
+ @apply w-20;
80
+ }
81
+ </style>