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,11 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import Menu from 'fulldev-ui/components/Menu.astro'
4
+ import { linkSchema } from 'fulldev-ui/schemas/link.ts'
5
+
6
+ export const menuSchema = z
7
+ .object({
8
+ heading: z.string().optional(),
9
+ links: linkSchema.array().optional(),
10
+ })
11
+ .strict() satisfies z.ZodType<ComponentProps<typeof Menu>>
@@ -0,0 +1,39 @@
1
+ import { z } from 'astro:content'
2
+ import { blockSchema } from 'fulldev-ui/schemas/block.ts'
3
+ import { buttonSchema } from 'fulldev-ui/schemas/button.ts'
4
+ import { headSchema } from 'fulldev-ui/schemas/head.ts'
5
+ import { imageSchema } from 'fulldev-ui/schemas/image.ts'
6
+ import { menuSchema } from 'fulldev-ui/schemas/menu.ts'
7
+ import { pathSchema } from 'fulldev-ui/schemas/path.ts'
8
+
9
+ export const pageSchema = z
10
+ .object({
11
+ _layout: z.string().optional(),
12
+ _schema: z.string().optional(),
13
+ _block: z.string().optional(),
14
+ href: z.string().optional(),
15
+ draft: z.boolean().optional(),
16
+ title: z.string().optional(),
17
+ description: z.string().optional(),
18
+ list: z.string().array().optional(),
19
+ price: z.number().optional(),
20
+ soldout: z.boolean().optional(),
21
+ order: z.number().optional(),
22
+ variants: z.record(z.string(), z.string().array()).optional(),
23
+ image: imageSchema.optional(),
24
+ images: imageSchema.array().optional(),
25
+ head: headSchema.optional(),
26
+ button: buttonSchema.optional(),
27
+ buttons: buttonSchema.array().optional(),
28
+ banner: blockSchema.optional(),
29
+ navigation: blockSchema.optional(),
30
+ header: blockSchema.optional(),
31
+ sections: blockSchema.array().optional(),
32
+ subheader: blockSchema.array().optional(),
33
+ sidebar: menuSchema.array().optional(),
34
+ footer: blockSchema.optional(),
35
+ parents: pathSchema('pages').array().optional(),
36
+ })
37
+ .strict()
38
+
39
+ export type PageSchema = z.infer<typeof pageSchema>
@@ -1,7 +1,7 @@
1
1
  import { reference, z, type AnyEntryMap } from 'astro:content'
2
2
 
3
3
  // TODO: preprocess instead
4
- export default <C extends keyof AnyEntryMap>(collection: C) =>
4
+ export const pathSchema = <C extends keyof AnyEntryMap>(collection: C) =>
5
5
  z
6
6
  .string()
7
7
  .transform((value) => {
@@ -0,0 +1,11 @@
1
+ import type { ComponentProps } from 'astro/types'
2
+ import { z } from 'astro:content'
3
+ import type Textarea from 'fulldev-ui/components/Textarea.astro'
4
+
5
+ export const textareaSchema = z
6
+ .object({
7
+ label: z.string().optional(),
8
+ placeholder: z.string().optional(),
9
+ value: z.string().optional(),
10
+ })
11
+ .strict() satisfies z.ZodType<ComponentProps<typeof Textarea>>
@@ -0,0 +1,78 @@
1
+ import { derived, writable } from 'svelte/store'
2
+
3
+ export type CartItem = {
4
+ uid: string
5
+ quantity: number
6
+ slug: string
7
+ title: string
8
+ price?: number | undefined
9
+ image?: string | undefined
10
+ variants?:
11
+ | {
12
+ [k: string]: string | undefined
13
+ }
14
+ | undefined
15
+ }
16
+
17
+ export type Cart = CartItem[]
18
+
19
+ const isServer = import.meta.env.SSR
20
+ const storageJson = !isServer && localStorage.getItem('cart')
21
+ const storageData = storageJson ? JSON.parse(storageJson) : []
22
+
23
+ export const cart = writable<Cart>(storageData)
24
+
25
+ cart.subscribe((newCart) => {
26
+ if (isServer) return
27
+ const json = JSON.stringify(newCart)
28
+ localStorage.setItem('cart', json)
29
+ })
30
+
31
+ export const getUid = (
32
+ slug: CartItem['slug'],
33
+ variants?: CartItem['variants']
34
+ ) => (variants ? `${slug}-${Object.values(variants)?.join('-')}` : slug)
35
+
36
+ export const getItemIndex = (currentCart: Cart, uid: CartItem['uid']) => {
37
+ const index = currentCart.findIndex((i) => i.uid === uid)
38
+ if (index === -1) throw new Error(`Item with uid ${uid} not found`)
39
+ return index
40
+ }
41
+
42
+ export const addItem = (item: CartItem) =>
43
+ cart.update((currentCart) => [...currentCart, item])
44
+
45
+ export const removeItem = (uid: CartItem['uid']) =>
46
+ cart.update((currentCart) => {
47
+ const index = getItemIndex(currentCart, uid)
48
+ currentCart.splice(index, 1)
49
+ return [...currentCart]
50
+ })
51
+
52
+ export const updateQuantity = (
53
+ uid: CartItem['uid'],
54
+ quantity: CartItem['quantity']
55
+ ) =>
56
+ cart.update((currentCart) => {
57
+ const index = getItemIndex(currentCart, uid)
58
+ if (currentCart[index]) currentCart[index].quantity = quantity
59
+ return [...currentCart]
60
+ })
61
+
62
+ export const openCart = () => {
63
+ const cartDialog = document.querySelector('dialog#cart')
64
+ if (cartDialog instanceof HTMLDialogElement) cartDialog.showModal()
65
+ }
66
+
67
+ export const closeCart = () => {
68
+ const cartDialog = document.querySelector('dialog#cart')
69
+ if (cartDialog instanceof HTMLDialogElement) cartDialog.close()
70
+ }
71
+
72
+ export const totalPrice = derived(cart, ($cart) => {
73
+ return $cart.length
74
+ // return $cart.reduce(
75
+ // (acc, item) => acc + (item.price || 0) * (item.quantity || 0),
76
+ // 0
77
+ // )
78
+ })
@@ -1,23 +1,76 @@
1
1
  import { persistentAtom } from '@nanostores/persistent'
2
2
  import { computed } from 'nanostores'
3
3
 
4
- // type Item = CollectionEntry<'products'>['data'] & {
5
- // quantity: number
6
- // }
4
+ type Item = {
5
+ slug: string
6
+ title: string
7
+ price: number
8
+ image: string
9
+ quantity: number
10
+ variants: string[]
11
+ }
7
12
 
8
- type Item = any
13
+ type Cart = Item[] | []
9
14
 
10
- export const $cart = persistentAtom<Item[] | []>('cart', [], {
15
+ export const $cart = persistentAtom<Cart>('cart', [], {
11
16
  encode: JSON.stringify,
12
17
  decode: JSON.parse,
13
18
  })
14
19
 
15
- // export const cartIsOpen = atom(false)
20
+ // for svelte files
21
+ export const cart = $cart
22
+
23
+ export const getCart = () => $cart.get()
24
+
25
+ export const setCart = (cart: Cart) => $cart.set(cart)
26
+
27
+ export const removeItem = (slug: string) => {
28
+ const currentCart = getCart()
29
+ const newCart = [...currentCart]
30
+ const index = currentCart.findIndex((item) => item.slug === slug)
31
+ newCart.splice(index, 1)
32
+ $cart.set(newCart)
33
+ }
34
+
35
+ export const addItem = (item: Item) => {
36
+ const currentCart = getCart()
37
+ const newCart = [...currentCart]
38
+ const index = currentCart.findIndex(
39
+ (i) => i.slug === item.slug && i.variants.join() === item.variants.join()
40
+ )
41
+ if (index === -1) newCart.push(item)
42
+ else {
43
+ let newItem = { ...newCart[index] } as Item
44
+ newItem.quantity += item.quantity
45
+ newCart[index] = newItem
46
+ }
47
+ setCart(newCart)
48
+ }
49
+
50
+ export const updateQuantity = (slug: string, quantity: number) => {
51
+ const currentCart = getCart()
52
+ const newCart = [...currentCart]
53
+ const index = currentCart.findIndex((item) => item.slug === slug)
54
+ let newItem = { ...newCart[index] } as Item
55
+ newItem.quantity = quantity
56
+ newCart[index] = newItem
57
+ setCart(newCart)
58
+ }
16
59
 
17
60
  export const $totalPrice = computed($cart, ($cart) =>
18
61
  $cart.reduce((a, b) => +a + b.price * b.quantity, 0)
19
62
  )
20
63
 
64
+ export const openCart = () => {
65
+ const cartDialog = document.querySelector('dialog#cart')
66
+ if (cartDialog instanceof HTMLDialogElement) cartDialog.showModal()
67
+ }
68
+
69
+ export const closeCart = () => {
70
+ const cartDialog = document.querySelector('dialog#cart')
71
+ if (cartDialog instanceof HTMLDialogElement) cartDialog.close()
72
+ }
73
+
21
74
  // export const totalQuantity = computed(cart, ($cart) =>
22
75
  // $cart.reduce((a, b) => +a + b.quantity, 0)
23
76
  // )
@@ -0,0 +1,35 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'a'>, HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { href, as = href ? 'a' : 'div', ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="card"
14
+ {as}
15
+ {href}
16
+ {...rest}
17
+ >
18
+ <slot />
19
+ </Element>
20
+
21
+ <style is:global>
22
+ @layer fulldev {
23
+ .card {
24
+ @apply w-full overflow-hidden rounded-lg border bg-card p-4 text-card-foreground;
25
+
26
+ &:is(a[href]) {
27
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
28
+
29
+ &:hover .image {
30
+ @apply opacity-75 transition-opacity;
31
+ }
32
+ }
33
+ }
34
+ }
35
+ </style>
@@ -28,12 +28,8 @@ const { lang = 'astro', code, ...rest } = Astro.props
28
28
 
29
29
  <style is:global>
30
30
  @layer fulldev {
31
- .astro-code {
32
- @apply mt-4 rounded-md p-4 text-sm first:mt-0;
33
- }
34
-
35
31
  .code {
36
- @apply mt-8 overflow-hidden rounded-md border first:mt-0;
32
+ @apply mt-8 rounded-md border first:mt-0;
37
33
 
38
34
  .example {
39
35
  @apply flex flex-wrap items-center gap-8 p-8;
@@ -42,10 +38,15 @@ const { lang = 'astro', code, ...rest } = Astro.props
42
38
  > slot > * {
43
39
  @apply mt-0;
44
40
  }
41
+
42
+ .heading,
43
+ .paragraph {
44
+ @apply w-full;
45
+ }
45
46
  }
46
47
 
47
48
  .astro-code {
48
- @apply mt-0 rounded-none border-none p-4;
49
+ @apply mt-0 overflow-x-auto rounded-none border-none p-4 text-sm first:mt-0;
49
50
  }
50
51
  }
51
52
  }
@@ -0,0 +1,25 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="container"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .container {
22
+ @apply mx-auto w-full max-w-screen-2xl px-4 sm:px-8;
23
+ }
24
+ }
25
+ </style>
@@ -0,0 +1,81 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Button from 'fulldev-ui/components/Button.astro'
4
+ import Element from 'fulldev-ui/components/Element.astro'
5
+
6
+ interface Props
7
+ extends HTMLAttributes<'aside'>,
8
+ Pick<ComponentProps<typeof Button>, 'variant' | 'size' | 'text' | 'icon'> {
9
+ id: string
10
+ icon: string
11
+ }
12
+
13
+ const { id, variant = 'ghost', size = 'md', icon, text, ...rest } = Astro.props
14
+
15
+ const slot = await Astro.slots.render('default')
16
+ const render = slot?.trim().length > 0
17
+ ---
18
+
19
+ {
20
+ render && (
21
+ <Element class:list="drawer">
22
+ <Button
23
+ class="drawer-button"
24
+ for={id}
25
+ {variant}
26
+ {size}
27
+ {text}
28
+ {icon}
29
+ />
30
+
31
+ <input
32
+ type="checkbox"
33
+ class="drawer-checkbox"
34
+ name={id}
35
+ {id}
36
+ />
37
+
38
+ <Element
39
+ class:list="drawer-body"
40
+ as="aside"
41
+ {...rest}
42
+ >
43
+ <Fragment set:html={slot} />
44
+ </Element>
45
+
46
+ <label
47
+ for={id}
48
+ class="drawer-backdrop"
49
+ />
50
+ </Element>
51
+ )
52
+ }
53
+
54
+ <style is:global>
55
+ @layer fulldev {
56
+ .drawer {
57
+ @apply contents h-screen;
58
+ }
59
+
60
+ .drawer-checkbox {
61
+ @apply invisible hidden;
62
+ }
63
+
64
+ .drawer-backdrop {
65
+ @apply pointer-events-none invisible fixed left-0 top-0 z-30 h-full w-full bg-black opacity-0 transition-opacity;
66
+
67
+ &:is(.drawer-checkbox:checked ~ &) {
68
+ @apply pointer-events-auto visible opacity-50;
69
+ }
70
+ }
71
+
72
+ .drawer-body {
73
+ @apply fixed bottom-0 left-0 top-0 z-40 h-full w-80 max-w-[75vw] -translate-x-full overflow-y-auto rounded-r-lg border border-l-0 bg-background shadow-2xl transition-transform;
74
+ @apply scrollbar scrollbar-track-transparent scrollbar-thumb-accent scrollbar-thumb-rounded-full scrollbar-w-2 hover:scrollbar-thumb-accent-hover;
75
+
76
+ &:is(.drawer-checkbox:checked ~ &) {
77
+ @apply translate-x-0;
78
+ }
79
+ }
80
+ }
81
+ </style>
@@ -0,0 +1,25 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="group"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .group {
22
+ @apply flex flex-wrap justify-stretch gap-2;
23
+ }
24
+ }
25
+ </style>
@@ -0,0 +1,34 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Head from 'fulldev-ui/components/Head.astro'
4
+
5
+ type Props = Omit<HTMLAttributes<'body'>, 'title'> & {
6
+ head?: ComponentProps<typeof Head>
7
+ }
8
+
9
+ const { head, ...rest } = Astro.props
10
+ ---
11
+
12
+ <!doctype html>
13
+ <html>
14
+ <Head {...head} />
15
+ <body {...rest}>
16
+ <slot />
17
+ <style is:global>
18
+ @layer fulldev {
19
+ html {
20
+ @apply w-full font-sans text-base leading-relaxed text-foreground;
21
+ color-scheme: light;
22
+ }
23
+
24
+ .dark {
25
+ color-scheme: dark;
26
+ }
27
+
28
+ body {
29
+ @apply w-full bg-background font-sans text-foreground;
30
+ }
31
+ }
32
+ </style>
33
+ </body>
34
+ </html>
@@ -0,0 +1,42 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="masonry"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .masonry {
22
+ --column-width: 20rem;
23
+ @apply relative w-full columns-sm gap-5 space-y-5;
24
+
25
+ & > * {
26
+ @apply break-inside-avoid;
27
+ }
28
+
29
+ /* &.size-sm {
30
+ --column-width: 16rem;
31
+ }
32
+
33
+ &.size-md {
34
+ --column-width: 20rem;
35
+ }
36
+
37
+ &.size-lg {
38
+ --column-width: 26rem;
39
+ } */
40
+ }
41
+ }
42
+ </style>
@@ -0,0 +1,39 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ size?: 'sm' | 'md' | 'lg' | undefined
8
+ }
9
+
10
+ const { size = 'md', ...rest } = Astro.props
11
+ ---
12
+
13
+ <Element
14
+ class:list="matrix"
15
+ {size}
16
+ {...rest}
17
+ >
18
+ <slot />
19
+ </Element>
20
+
21
+ <style is:global>
22
+ @layer fulldev {
23
+ .matrix {
24
+ @apply relative grid w-full gap-5;
25
+
26
+ &.size-sm {
27
+ @apply grid-cols-[repeat(auto-fill,minmax(12rem,1fr))];
28
+ }
29
+
30
+ &.size-md {
31
+ @apply grid-cols-[repeat(auto-fill,minmax(16rem,1fr))];
32
+ }
33
+
34
+ &.size-lg {
35
+ @apply grid-cols-[repeat(auto-fill,minmax(20rem,1fr))];
36
+ }
37
+ }
38
+ }
39
+ </style>
@@ -0,0 +1,25 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="panel"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .panel {
22
+ @apply w-full gap-x-gutter rounded-lg border bg-card px-gutter py-20 text-card-foreground lg:px-20;
23
+ }
24
+ }
25
+ </style>
@@ -0,0 +1,97 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="prose"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .prose {
22
+ @apply relative w-full max-w-screen-md;
23
+
24
+ > * {
25
+ & + * {
26
+ @apply mt-6;
27
+ }
28
+
29
+ &.tagline + .heading,
30
+ & + p,
31
+ & > p {
32
+ @apply mt-4;
33
+ }
34
+
35
+ & + .group,
36
+ & + .button,
37
+ & + .buttons {
38
+ @apply mt-8;
39
+ }
40
+ }
41
+
42
+ code:not(.astro-code code) {
43
+ @apply rounded bg-muted px-1.5 py-0.5 font-mono text-sm font-medium;
44
+ }
45
+
46
+ h1,
47
+ h2,
48
+ h3,
49
+ h4,
50
+ h5,
51
+ h6 {
52
+ @apply scroll-m-20 font-bold;
53
+
54
+ code {
55
+ font-size: inherit !important;
56
+ }
57
+ }
58
+
59
+ > h1 {
60
+ @apply text-4xl;
61
+ }
62
+
63
+ > h2 {
64
+ @apply mt-10 text-2xl;
65
+ }
66
+
67
+ > h3 {
68
+ @apply mt-8 text-xl;
69
+ }
70
+
71
+ > h4 {
72
+ @apply text-lg;
73
+ }
74
+
75
+ > h5 {
76
+ @apply text-base;
77
+ }
78
+
79
+ > h6 {
80
+ @apply text-sm;
81
+ }
82
+
83
+ > aside {
84
+ @apply rounded-md border border-destructive p-4 text-destructive;
85
+ }
86
+
87
+ > img,
88
+ > * > img {
89
+ @apply my-12 rounded-md;
90
+ }
91
+
92
+ > *:first-child {
93
+ @apply mt-0;
94
+ }
95
+ }
96
+ }
97
+ </style>