fulldev-ui 0.5.0-beta.9 → 0.6.0-beta-5

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 (342) hide show
  1. package/.env.example +3 -0
  2. package/.prettierrc.yaml +1 -0
  3. package/astro.config.ts +10 -34
  4. package/cloudcannon.config.yml +235 -0
  5. package/package.json +25 -29
  6. package/pnpm-lock.yaml +943 -2157
  7. package/public/favicon/android-chrome-192x192.png +0 -0
  8. package/public/favicon/android-chrome-512x512.png +0 -0
  9. package/public/favicon/apple-touch-icon.png +0 -0
  10. package/public/favicon/manifest.webmanifest +7 -3
  11. package/public/favicon/mstile-150x150.png +0 -0
  12. package/src/blocks/Banner.astro +14 -29
  13. package/src/blocks/Contact1.astro +92 -0
  14. package/src/blocks/Content1.astro +77 -0
  15. package/src/blocks/Content2.astro +91 -0
  16. package/src/blocks/Content3.astro +70 -0
  17. package/src/blocks/Content4.astro +72 -0
  18. package/src/blocks/Cta1.astro +58 -0
  19. package/src/blocks/Feature1.astro +61 -0
  20. package/src/blocks/Features1.astro +66 -0
  21. package/src/blocks/Footer.astro +100 -3
  22. package/src/blocks/Header.astro +192 -3
  23. package/src/blocks/Hero1.astro +60 -0
  24. package/src/blocks/Logos1.astro +55 -0
  25. package/src/blocks/Products1.astro +90 -0
  26. package/src/blocks/Reviews1.astro +75 -0
  27. package/src/blocks/_Hero.astro +245 -0
  28. package/src/components/Avatar.astro +28 -9
  29. package/src/components/Avatars.astro +36 -0
  30. package/src/components/Badge.astro +63 -24
  31. package/src/components/Badges.astro +16 -23
  32. package/src/components/Block.astro +30 -0
  33. package/src/components/Blocks.astro +26 -0
  34. package/src/components/Breadcrumb.astro +58 -0
  35. package/src/components/Button.astro +49 -119
  36. package/src/components/Buttons.astro +23 -13
  37. package/src/components/Card.astro +9 -137
  38. package/src/components/Cards.astro +33 -35
  39. package/src/components/Carousel.astro +106 -0
  40. package/src/components/Cart.astro +18 -14
  41. package/src/components/CartAdd.svelte +76 -0
  42. package/src/components/CartCheckout.svelte +58 -0
  43. package/src/components/CartForm.svelte +130 -0
  44. package/src/components/CartList.svelte +88 -0
  45. package/src/components/CartQuantity.svelte +81 -0
  46. package/src/components/CartSummary.astro +16 -105
  47. package/src/components/CartTotal.svelte +15 -0
  48. package/src/components/Channel.astro +44 -35
  49. package/src/components/Channels.astro +20 -6
  50. package/src/components/Checkbox.astro +52 -27
  51. package/src/components/Code.astro +52 -0
  52. package/src/components/Container.astro +25 -0
  53. package/src/components/Dialog.astro +3 -2
  54. package/src/components/Drawer.astro +55 -146
  55. package/src/components/DrawerOld.astro +143 -0
  56. package/src/components/Element.astro +18 -8
  57. package/src/components/Form.astro +16 -13
  58. package/src/components/Gallery.astro +174 -0
  59. package/src/components/Group.astro +25 -0
  60. package/src/components/Head.astro +62 -25
  61. package/src/components/Header.astro +10 -115
  62. package/src/components/Heading.astro +51 -44
  63. package/src/components/Icon.astro +29 -33
  64. package/src/components/Image.astro +18 -68
  65. package/src/components/Input.astro +65 -51
  66. package/src/components/Label.astro +20 -15
  67. package/src/components/Layout.astro +35 -0
  68. package/src/components/Link.astro +51 -32
  69. package/src/components/Links.astro +42 -0
  70. package/src/components/List.astro +41 -16
  71. package/src/components/LocaleSwitcher.astro +2 -2
  72. package/src/components/Logo.astro +56 -0
  73. package/src/components/Menu.astro +21 -17
  74. package/src/components/Navigation.astro +39 -0
  75. package/src/components/Panel.astro +25 -0
  76. package/src/components/Paragraph.astro +55 -0
  77. package/src/components/Price.astro +4 -4
  78. package/src/components/Prose.astro +86 -0
  79. package/src/components/Rating.astro +23 -62
  80. package/src/components/Search.astro +107 -43
  81. package/src/components/Section.astro +13 -242
  82. package/src/components/Select.astro +45 -55
  83. package/src/components/Sidebar.astro +53 -76
  84. package/src/components/Social.astro +11 -9
  85. package/src/components/Socials.astro +9 -5
  86. package/src/components/Stack.astro +25 -0
  87. package/src/components/Subheader.astro +59 -0
  88. package/src/components/Switch.astro +72 -29
  89. package/src/components/Table.astro +1 -1
  90. package/src/components/Tagline.astro +31 -13
  91. package/src/components/Textarea.astro +40 -50
  92. package/src/components/Themer.astro +76 -0
  93. package/src/components/Toc.astro +30 -37
  94. package/src/components/Writeup.astro +34 -65
  95. package/src/components/_Author.astro +90 -0
  96. package/src/components/_Header.astro +129 -0
  97. package/src/components/_Image.astro +79 -0
  98. package/src/components/_Prose copy.astro +172 -0
  99. package/src/components/_Sidebar copy.astro +87 -0
  100. package/src/components/docs/PropsTable.astro +38 -264
  101. package/src/components/experimental/Window.astro +5 -57
  102. package/src/content/config.ts +3 -10
  103. package/src/content/{presets → layouts}/base.yml +52 -73
  104. package/src/content/pages/blocks/_categories.mdx +0 -2
  105. package/src/content/pages/blocks/_footer.mdx +0 -2
  106. package/src/content/pages/blocks/_header.mdx +0 -4
  107. package/src/content/pages/blocks/_jobs.mdx +0 -2
  108. package/src/content/pages/blocks/_prices.mdx +0 -2
  109. package/src/content/pages/blocks/_product.mdx +0 -2
  110. package/src/content/pages/blocks/_products.mdx +0 -2
  111. package/src/content/pages/blocks/_stats.mdx +0 -2
  112. package/src/content/pages/blocks/banner.mdx +0 -2
  113. package/src/content/pages/blocks/colleagues.mdx +0 -3
  114. package/src/content/pages/blocks/contact.mdx +0 -2
  115. package/src/content/pages/blocks/content.mdx +0 -6
  116. package/src/content/pages/blocks/cta.mdx +0 -10
  117. package/src/content/pages/blocks/features.mdx +0 -5
  118. package/src/content/pages/blocks/hero.mdx +0 -5
  119. package/src/content/pages/blocks/intro.mdx +0 -5
  120. package/src/content/pages/blocks/posts.mdx +0 -2
  121. package/src/content/pages/blocks/reviews.mdx +0 -3
  122. package/src/content/pages/categories/category.md +7 -0
  123. package/src/content/pages/docs/_internationalization.mdx +55 -0
  124. package/src/content/pages/docs/_using-blocks.mdx +33 -0
  125. package/src/content/pages/docs/_using-presets.mdx +49 -0
  126. package/src/content/pages/docs/blocks.mdx +33 -0
  127. package/src/content/pages/docs/collections/images.mdx +102 -0
  128. package/src/content/pages/docs/collections/pages.mdx +119 -0
  129. package/src/content/pages/docs/collections/presets.mdx +60 -0
  130. package/src/content/pages/docs/collections.mdx +42 -0
  131. package/src/content/pages/{base/card.mdx → docs/components/_card.mdx} +2 -5
  132. package/src/content/pages/{base → docs/components}/_dialog.mdx +1 -2
  133. package/src/content/pages/{base → docs/components}/_drawer.mdx +1 -2
  134. package/src/content/pages/{base → docs/components}/_localeswitcher.mdx +1 -2
  135. package/src/content/pages/{base → docs/components}/_switch.mdx +3 -4
  136. package/src/content/pages/{typography → docs/components}/_tagline.mdx +3 -4
  137. package/src/content/pages/docs/components/_toggle.mdx +30 -0
  138. package/src/content/pages/docs/components/avatar.mdx +34 -0
  139. package/src/content/pages/{base → docs/components}/badge.mdx +28 -10
  140. package/src/content/pages/docs/components/badges.mdx +46 -0
  141. package/src/content/pages/docs/components/button.mdx +78 -0
  142. package/src/content/pages/docs/components/buttons.mdx +51 -0
  143. package/src/content/pages/docs/components/channel.mdx +91 -0
  144. package/src/content/pages/docs/components/channels.mdx +89 -0
  145. package/src/content/pages/docs/components/checkbox.mdx +34 -0
  146. package/src/content/pages/docs/components/code.mdx +45 -0
  147. package/src/content/pages/docs/components/heading.mdx +59 -0
  148. package/src/content/pages/docs/components/icon.mdx +48 -0
  149. package/src/content/pages/docs/components/image.mdx +25 -0
  150. package/src/content/pages/docs/components/input.mdx +40 -0
  151. package/src/content/pages/{typography → docs/components}/label.mdx +9 -6
  152. package/src/content/pages/{typography → docs/components}/link.mdx +24 -10
  153. package/src/content/pages/docs/components/links.mdx +99 -0
  154. package/src/content/pages/docs/components/list.mdx +44 -0
  155. package/src/content/pages/docs/components/logo.mdx +36 -0
  156. package/src/content/pages/docs/components/menu.mdx +89 -0
  157. package/src/content/pages/docs/components/prose.mdx +36 -0
  158. package/src/content/pages/docs/components/rating.mdx +76 -0
  159. package/src/content/pages/{base → docs/components}/section.mdx +2 -3
  160. package/src/content/pages/{base → docs/components}/select.mdx +1 -11
  161. package/src/content/pages/docs/components/social.mdx +94 -0
  162. package/src/content/pages/docs/components/socials.mdx +102 -0
  163. package/src/content/pages/docs/components/switch.mdx +34 -0
  164. package/src/content/pages/{base → docs/components}/table.mdx +1 -4
  165. package/src/content/pages/docs/components/tagline.mdx +46 -0
  166. package/src/content/pages/docs/components/text.mdx +48 -0
  167. package/src/content/pages/docs/components/textarea.mdx +34 -0
  168. package/src/content/pages/docs/components/themer.mdx +49 -0
  169. package/src/content/pages/docs/components.mdx +37 -0
  170. package/src/content/pages/docs/customization.mdx +151 -0
  171. package/src/content/pages/docs/frameworks.mdx +29 -0
  172. package/src/content/pages/docs/generating-pages.mdx +129 -0
  173. package/src/content/pages/docs/index.mdx +20 -0
  174. package/src/content/pages/docs/installation.mdx +50 -0
  175. package/src/content/pages/docs/layouts.mdx +33 -0
  176. package/src/content/pages/index.mdx +25 -33
  177. package/src/content/pages/posts/post.md +7 -0
  178. package/src/content/pages/products/product.md +20 -0
  179. package/src/content/pages/showcase/anti-slip-profiles.md +2 -2
  180. package/src/content/pages/showcase/fulldev-ui.md +1 -1
  181. package/src/content/pages/showcase/lavis-detailing.md +1 -1
  182. package/src/content/pages/showcase/leren-trainingsacteren.md +1 -1
  183. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +1 -1
  184. package/src/content/pages/showcase/sloepverhuur-bolsward.md +1 -1
  185. package/src/content/pages/showcase/stark-vulcanising-products.md +1 -1
  186. package/src/content/pages/showcase/the-gym-haren.md +1 -1
  187. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +1 -1
  188. package/src/content/pages/showcase.mdx +4 -3
  189. package/src/css/color.css +0 -10
  190. package/src/css/custom.css +10 -12
  191. package/src/css/size.css +2 -11
  192. package/src/css/theme.css +95 -0
  193. package/src/env.d.ts +1 -0
  194. package/src/images/favicon/android-chrome-192x192.png +0 -0
  195. package/src/images/favicon/android-chrome-512x512.png +0 -0
  196. package/src/images/favicon/apple-touch-icon.png +0 -0
  197. package/src/images/favicon/browserconfig.xml +9 -0
  198. package/src/images/favicon/favicon-16x16.png +0 -0
  199. package/src/images/favicon/favicon-32x32.png +0 -0
  200. package/src/images/favicon/favicon-48x48.png +0 -0
  201. package/src/images/favicon/favicon.ico +0 -0
  202. package/src/images/favicon/favicon.svg +16 -0
  203. package/src/images/favicon/manifest.webmanifest +30 -0
  204. package/src/images/favicon/mstile-150x150.png +0 -0
  205. package/src/images/favicon/safari-pinned-tab.svg +16 -0
  206. package/src/images/favicon/yandex-browser-50x50.png +0 -0
  207. package/src/images/favicon/yandex-browser-manifest.json +9 -0
  208. package/src/images/logo-1.svg +11 -0
  209. package/src/images/logo-2.svg +13 -0
  210. package/src/images/logo-basic.svg +10 -0
  211. package/src/images/logo-simple.svg +13 -0
  212. package/src/images/logo-thin.svg +15 -0
  213. package/src/images/logo.svg +14 -0
  214. package/src/images/logofat.svg +11 -0
  215. package/src/integration/index.ts +110 -140
  216. package/src/layouts/Category.astro +136 -0
  217. package/src/layouts/Doc.astro +56 -0
  218. package/src/layouts/Job.astro +60 -0
  219. package/src/layouts/Page.astro +29 -0
  220. package/src/layouts/Post.astro +52 -0
  221. package/src/layouts/Product.astro +114 -0
  222. package/src/pages/[...page].astro +29 -24
  223. package/src/pages/test.astro +37 -0
  224. package/src/schemas/components/avatar.ts +4 -1
  225. package/src/schemas/components/badge.ts +16 -11
  226. package/src/schemas/components/block.ts +60 -0
  227. package/src/schemas/components/button.ts +17 -14
  228. package/src/schemas/components/channel.ts +15 -9
  229. package/src/schemas/components/footer.ts +15 -21
  230. package/src/schemas/components/head.ts +17 -0
  231. package/src/schemas/components/header.ts +19 -7
  232. package/src/schemas/components/heading.ts +7 -1
  233. package/src/schemas/components/icon.ts +7 -1
  234. package/src/schemas/components/image.ts +38 -16
  235. package/src/schemas/components/link.ts +17 -0
  236. package/src/schemas/components/logo.ts +12 -2
  237. package/src/schemas/components/menu.ts +11 -11
  238. package/src/schemas/components/navigation.ts +10 -0
  239. package/src/schemas/components/paragraph.ts +9 -0
  240. package/src/schemas/components/price.ts +7 -1
  241. package/src/schemas/components/rating.ts +8 -13
  242. package/src/schemas/components/sidebar.ts +14 -11
  243. package/src/schemas/components/social.ts +16 -1
  244. package/src/schemas/components/tagline.ts +7 -1
  245. package/src/schemas/imageSchema.ts +33 -4
  246. package/src/schemas/page.ts +39 -0
  247. package/src/stores/cart.svelte.ts +79 -0
  248. package/src/stores/cart.ts +59 -6
  249. package/src/types/global-props.ts +0 -9
  250. package/src/types/{virtual-modules.d.ts → virtual.d.ts} +1 -1
  251. package/src/utils/cart.ts +1 -10
  252. package/src/utils/formatEntries.ts +8 -0
  253. package/src/utils/formatEntry.ts +29 -0
  254. package/src/utils/getDeepReferenceChildren.ts +14 -0
  255. package/src/utils/getHref.ts +6 -0
  256. package/src/utils/getReferenceChildren.ts +1 -1
  257. package/src/utils/setTheme.ts +18 -0
  258. package/src/utils/slugify.ts +6 -0
  259. package/svelte.config.js +5 -0
  260. package/tailwind.config.ts +71 -0
  261. package/tsconfig.json +1 -3
  262. package/src/blocks/Article.astro +0 -40
  263. package/src/blocks/Categories.astro +0 -12
  264. package/src/blocks/Colleagues.astro +0 -13
  265. package/src/blocks/Contact.astro +0 -116
  266. package/src/blocks/Content.astro +0 -12
  267. package/src/blocks/Cta.astro +0 -15
  268. package/src/blocks/Excerpt.astro +0 -14
  269. package/src/blocks/Features.astro +0 -11
  270. package/src/blocks/Hero.astro +0 -15
  271. package/src/blocks/Intro.astro +0 -23
  272. package/src/blocks/Jobs.astro +0 -12
  273. package/src/blocks/Posts.astro +0 -11
  274. package/src/blocks/Prices.astro +0 -24
  275. package/src/blocks/Product.astro +0 -110
  276. package/src/blocks/Products.astro +0 -11
  277. package/src/blocks/Reviews.astro +0 -13
  278. package/src/components/CartForm.astro +0 -121
  279. package/src/components/CartList.astro +0 -134
  280. package/src/components/Footer.astro +0 -193
  281. package/src/components/Text.astro +0 -43
  282. package/src/components/ThemeSelect.astro +0 -41
  283. package/src/components/experimental/Form.astro +0 -53
  284. package/src/components/experimental/Gallery.astro +0 -104
  285. package/src/components/experimental/Logo.astro +0 -38
  286. package/src/components/experimental/Prose.astro +0 -192
  287. package/src/components/sections.astro +0 -28
  288. package/src/content/pages/base/button.mdx +0 -60
  289. package/src/content/pages/base/checkbox.mdx +0 -42
  290. package/src/content/pages/base/icon.mdx +0 -55
  291. package/src/content/pages/base/image.mdx +0 -42
  292. package/src/content/pages/base/input.mdx +0 -56
  293. package/src/content/pages/base/rating.mdx +0 -55
  294. package/src/content/pages/base/textarea.mdx +0 -58
  295. package/src/content/pages/base/theme-select.mdx +0 -15
  296. package/src/content/pages/layouts/_layout.mdx +0 -14
  297. package/src/content/pages/layouts/docslayout.mdx +0 -14
  298. package/src/content/pages/overview/components.mdx +0 -75
  299. package/src/content/pages/overview/content-collections.mdx +0 -139
  300. package/src/content/pages/overview/frameworks.mdx +0 -198
  301. package/src/content/pages/overview/installation.mdx +0 -53
  302. package/src/content/pages/overview/introduction.mdx +0 -30
  303. package/src/content/pages/overview/theming.mdx +0 -69
  304. package/src/content/pages/schemas/page.mdx +0 -17
  305. package/src/content/pages/schemas/preset.mdx +0 -9
  306. package/src/content/pages/showcase/record.md +0 -3
  307. package/src/content/pages/typography/heading.mdx +0 -73
  308. package/src/content/pages/typography/list.mdx +0 -51
  309. package/src/content/pages/typography/text.mdx +0 -61
  310. package/src/content/presets/blocks.yml +0 -1
  311. package/src/content/presets/docs.yml +0 -6
  312. package/src/css/space.css +0 -77
  313. package/src/css/styles.css +0 -0
  314. package/src/images/avatar-1.yml +0 -1
  315. package/src/integration/generate-colors.ts +0 -639
  316. package/src/integration/tailwind-plugin.ts +0 -80
  317. package/src/integration/unocss-preset.ts +0 -84
  318. package/src/layouts/BlockLayout.astro +0 -19
  319. package/src/layouts/ContactLayout.astro +0 -21
  320. package/src/layouts/DocsLayout.astro +0 -73
  321. package/src/layouts/Layout.astro +0 -163
  322. package/src/layouts/OverviewLayout.astro +0 -42
  323. package/src/layouts/PostLayout.astro +0 -21
  324. package/src/layouts/ProductLayout.astro +0 -21
  325. package/src/loaders/imageLoader.ts +0 -26
  326. package/src/schemas/components/avatars.ts +0 -4
  327. package/src/schemas/components/buttons.ts +0 -4
  328. package/src/schemas/components/card.ts +0 -25
  329. package/src/schemas/components/cards.ts +0 -4
  330. package/src/schemas/components/channels.ts +0 -4
  331. package/src/schemas/components/images.ts +0 -4
  332. package/src/schemas/components/list.ts +0 -3
  333. package/src/schemas/components/section.ts +0 -15
  334. package/src/schemas/components/sections.ts +0 -3
  335. package/src/schemas/components/socials.ts +0 -4
  336. package/src/schemas/components/text.ts +0 -3
  337. package/src/schemas/components/toc.ts +0 -3
  338. package/src/schemas/components/writeup.ts +0 -20
  339. package/src/schemas/pageSchema.ts +0 -101
  340. package/src/schemas/presetSchema.ts +0 -3
  341. package/src/schemas/utils/navigation.ts +0 -8
  342. package/src/schemas/utils/parents.ts +0 -3
@@ -1,62 +1,102 @@
1
- import viteYaml from '@rollup/plugin-yaml'
1
+ import mdx from '@astrojs/mdx'
2
+ import sitemap from '@astrojs/sitemap'
2
3
  import type { AstroIntegration } from 'astro'
3
4
  import favicons from 'astro-favicons'
4
- import type { CollectionEntry } from 'astro:content'
5
- import merge from 'deepmerge'
5
+ import liveCode from 'astro-live-code'
6
+ import robotsTxt from 'astro-robots-txt'
7
+ import { envField } from 'astro/config'
8
+ import fs from 'fs'
9
+ import yaml from 'js-yaml'
10
+ import path from 'path'
11
+ import { assign } from 'radash'
12
+ import tailwindcss from 'tailwindcss'
13
+ import tailwindcssNesting from 'tailwindcss/nesting'
14
+ import { loadEnv } from 'vite'
6
15
  import virtual from 'vite-plugin-virtual'
7
- import { generateRadixColors } from './generate-colors'
8
-
9
- type Color = {
10
- background: Parameters<typeof generateRadixColors>[0]['background']
11
- base: Parameters<typeof generateRadixColors>[0]['gray']
12
- brand: Parameters<typeof generateRadixColors>[0]['accent']
13
- }
16
+ import tailwindConfig from '../../tailwind.config.ts'
14
17
 
15
18
  interface Config {
16
19
  favicon?: string
17
20
  company?: string
18
21
  css?: string
19
- basePreset?: CollectionEntry<'presets'>['id']
20
22
  injectRoutes?: boolean
21
- // generateImageEntries?: boolean
22
- colors: {
23
- theme: 'light' | 'dark'
24
- light?: Color | undefined
25
- dark?: Color | undefined
23
+ cloudcannon?: boolean
24
+ cart?: boolean
25
+ overrides?: {
26
+ [k: string]: string
26
27
  }
27
28
  }
28
29
 
29
- const defaultConfig: Config = {
30
- colors: {
31
- theme: 'light',
32
- light: {
33
- background: '#fff',
34
- base: '#000',
35
- brand: '#000',
36
- },
37
- },
38
- // generateImageEntries: false,
39
- }
40
-
41
30
  export default function fulldevIntegration(
42
- userConfig?: Partial<Config> | undefined
31
+ config: Partial<Config> | undefined
43
32
  ): AstroIntegration {
44
- const config = merge(defaultConfig, userConfig ?? {})
45
-
46
33
  return {
47
34
  name: '/integration',
48
35
  hooks: {
49
36
  'astro:config:setup': async ({
50
- config: astroConfig,
51
37
  updateConfig,
52
- injectScript,
53
38
  injectRoute,
39
+ injectScript,
54
40
  }) => {
55
41
  // ----------------------
56
- // Inject favicon integration
42
+ // Update config
57
43
  // ----------------------
58
- config.favicon &&
59
- config.company &&
44
+ updateConfig({
45
+ site: loadEnv(process.env.NODE_ENV as any, process.cwd(), '').URL,
46
+ experimental: {
47
+ contentLayer: true,
48
+ env: {
49
+ schema: {
50
+ URL: envField.string({
51
+ context: 'client',
52
+ access: 'public',
53
+ }),
54
+ STRIPE_RESTRICTED_KEY: envField.string({
55
+ context: 'client',
56
+ access: 'public',
57
+ optional: true,
58
+ }),
59
+ STRIPE_SECRET_KEY: envField.string({
60
+ context: 'server',
61
+ access: 'secret',
62
+ optional: true,
63
+ }),
64
+ },
65
+ validateSecrets: true,
66
+ },
67
+ },
68
+ integrations: [
69
+ mdx(),
70
+ sitemap(),
71
+ robotsTxt(),
72
+ liveCode({
73
+ layout: '/src/components/Code.astro',
74
+ }),
75
+ ],
76
+ vite: {
77
+ resolve: {
78
+ alias: {
79
+ ...config?.overrides,
80
+ },
81
+ },
82
+ plugins: [
83
+ virtual({
84
+ 'virtual:fulldev-ui/config': config ?? {},
85
+ }),
86
+ ],
87
+ css: {
88
+ postcss: {
89
+ plugins: [tailwindcss(tailwindConfig), tailwindcssNesting],
90
+ },
91
+ },
92
+ },
93
+ })
94
+
95
+ // ----------------------
96
+ // Inject Favicon
97
+ // ----------------------
98
+ config?.favicon &&
99
+ config?.company &&
60
100
  updateConfig({
61
101
  integrations: [
62
102
  favicons({
@@ -64,109 +104,29 @@ export default function fulldevIntegration(
64
104
  masterPicture: config.favicon,
65
105
  appName: config.company,
66
106
  appShortName: config.company,
107
+ appDescription: config.company,
67
108
  }),
68
109
  ],
69
110
  })
111
+
70
112
  // ----------------------
71
- // Inject css
113
+ // Inject routes
72
114
  // ----------------------
73
- config?.css && injectScript('page-ssr', `import "${config?.css}";`)
74
-
75
- const generateCss = (
76
- defaultTheme: 'light' | 'dark',
77
- theme: 'light' | 'dark',
78
- color: Color
79
- ) => {
80
- const { background, base, brand } = color
81
- const generated = generateRadixColors({
82
- background,
83
- appearance: theme,
84
- gray: base,
85
- accent: brand,
115
+ if (config?.injectRoutes) {
116
+ injectRoute({
117
+ pattern: '/[...page]',
118
+ entrypoint: 'fulldev-ui/pages/[...page].astro',
86
119
  })
87
-
88
- const scaleToString = (
89
- scale: any,
90
- palette: 'base' | 'brand',
91
- alpha?: boolean | undefined
92
- ) =>
93
- scale
94
- .map(
95
- (color: any, i: any) =>
96
- `--${palette}-${alpha ? 'a' : ''}${i + 1}: ${color};`
97
- )
98
- .join('\n')
99
-
100
- const baseString = scaleToString(generated.grayScale, 'base', false)
101
- const baseAlphaString = scaleToString(
102
- generated.grayScaleAlpha,
103
- 'base',
104
- true
105
- )
106
- const brandString = scaleToString(
107
- generated.accentScale,
108
- 'brand',
109
- false
110
- )
111
- const brandAlphaString = scaleToString(
112
- generated.accentScaleAlpha,
113
- 'brand',
114
- true
115
- )
116
- const brandContrastString = `--brand-contrast: ${generated.accentContrast};`
117
- const baseContrastString = `--base-contrast: ${generated.accentContrast};`
118
- const baseBackgroundString = `--base-background: ${generated.background};`
119
- const brandBackgroundString = `--brand-background: ${generated.background};`
120
- const colorSchemeString = `--color-scheme: ${theme};`
121
-
122
- const css = `${defaultTheme == theme ? ':root, ' : ''} .theme-${theme} {
123
- ${baseString}
124
- ${baseAlphaString}
125
- ${baseContrastString}
126
- ${baseBackgroundString}
127
- ${brandString}
128
- ${brandAlphaString}
129
- ${brandContrastString}
130
- ${brandBackgroundString}
131
- ${colorSchemeString}
132
- }`
133
- return css
134
120
  }
135
121
 
136
- const lightCss =
137
- (config.colors.light &&
138
- generateCss(config.colors.theme, 'light', config.colors.light)) ||
139
- ''
140
- const darkCss =
141
- (config.colors.dark &&
142
- generateCss(config.colors.theme, 'dark', config.colors.dark)) ||
143
- ''
144
-
145
- const css = lightCss + '\n' + darkCss
146
-
147
- updateConfig({
148
- vite: {
149
- plugins: [
150
- viteYaml(),
151
- virtual({
152
- 'virtual:astro/config': `export default ${JSON.stringify(astroConfig)}`,
153
- 'virtual:fulldev-ui/config': `export default ${JSON.stringify({
154
- ...config,
155
- })}`,
156
- 'virtual:colors.css': css,
157
- }) as any,
158
- ],
159
- css: {
160
- preprocessorOptions: {
161
- scss: {
162
- api: 'modern',
163
- },
164
- },
165
- },
166
- },
167
- })
122
+ // ----------------------
123
+ // Inject css
124
+ // ----------------------
125
+ config?.css && injectScript('page-ssr', `import "${config?.css}";`)
168
126
 
169
- injectScript('page-ssr', `import "virtual:colors.css";`)
127
+ // ----------------------
128
+ // merge Cloudcannon configs
129
+ // ----------------------
170
130
 
171
131
  // ----------------------
172
132
  // Generate image YAML files
@@ -198,17 +158,27 @@ export default function fulldevIntegration(
198
158
  // console.error('Error generating image YAML files:', error)
199
159
  // }
200
160
  // }
161
+ },
162
+ 'astro:build:done': async () => {
163
+ if (config?.cloudcannon) {
164
+ const __dirname = path.dirname(new URL(import.meta.url).pathname)
165
+ const libDir = path.join(__dirname, '../../cloudcannon.config.yml')
166
+ const userDir = path.join(process.cwd(), 'cloudcannon.config.yml')
201
167
 
202
- // ----------------------
203
- // Inject routes
204
- // ----------------------
205
- if (config.injectRoutes) {
206
- const pages = import.meta.glob('/src/pages/**/*.astro')
207
- !pages['/src/pages/[...page].astro'] &&
208
- injectRoute({
209
- pattern: '/[...page]',
210
- entrypoint: 'fulldev-ui/[...page].astro',
211
- })
168
+ console.log({ libDir, userDir })
169
+
170
+ const libConfig = yaml.load(
171
+ fs.readFileSync(path.resolve(libDir), 'utf8')
172
+ )
173
+
174
+ const userConfig = yaml.load(
175
+ fs.readFileSync(path.resolve(userDir), 'utf8')
176
+ )
177
+
178
+ const mergedConfig = assign(libConfig || {}, userConfig || {})
179
+ const yamlContent = yaml.dump(mergedConfig)
180
+
181
+ await fs.promises.writeFile(userDir, yamlContent, 'utf8')
212
182
  }
213
183
  },
214
184
  },
@@ -0,0 +1,136 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import { getCollection } from 'astro:content'
5
+ import Products1 from 'fulldev-ui/blocks/Products1.astro'
6
+ import Carousel from 'fulldev-ui/components/Carousel.astro'
7
+ import Element from 'fulldev-ui/components/Element.astro'
8
+ import Layout from 'fulldev-ui/components/Layout.astro'
9
+ import Prose from 'fulldev-ui/components/Prose.astro'
10
+ import Select from 'fulldev-ui/components/Select.astro'
11
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
12
+ import { getHref } from 'fulldev-ui/utils/getHref.ts'
13
+
14
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {
15
+ render: CollectionEntry<'pages'>['render']
16
+ slug: CollectionEntry<'pages'>['slug']
17
+ }
18
+
19
+ const { render, slug, title, description } = Astro.props
20
+
21
+ const categories = await getCollection('pages', ({ data }) =>
22
+ data.categories?.some((c) => c.slug.includes(slug))
23
+ )
24
+
25
+ const products = await getCollection('pages', ({ data }) =>
26
+ data.categories?.some((c) => c.slug.includes(slug))
27
+ )
28
+
29
+ const sorts = [
30
+ {
31
+ option: 'Aanbevolen',
32
+ products: [...products].sort(
33
+ (a, b) => (a.data.order || 0) - (b.data.order || 0)
34
+ ),
35
+ },
36
+ {
37
+ option: 'Prijs (laag - hoog)',
38
+ products: [...products].sort(
39
+ (a, b) => (a.data.price || 0) - (b.data.price || 0)
40
+ ),
41
+ },
42
+ {
43
+ option: 'Prijs (hoog - laag)',
44
+ products: [...products].sort(
45
+ (a, b) => (b.data.price || 0) - (a.data.price || 0)
46
+ ),
47
+ },
48
+ {
49
+ option: 'Alfabetisch (A-Z)',
50
+ products: [...products],
51
+ },
52
+ {
53
+ option: 'Alfabetisch (Z-A)',
54
+ products: [...products].sort((a, b) =>
55
+ (b.data.title || '').localeCompare(a.data.title || '')
56
+ ),
57
+ },
58
+ ]
59
+ ---
60
+
61
+ <script>
62
+ document.addEventListener('astro:page-load', () => {
63
+ const sort = document.querySelector('.sort')
64
+
65
+ sort?.addEventListener('change', (e) => {
66
+ const blocks = document.querySelectorAll('.products')
67
+ const value = (e.target as HTMLSelectElement).value
68
+ blocks?.forEach((block) => block.classList.add('hide'))
69
+
70
+ const block = document.querySelector(`.products[id='${value}']`)
71
+ block?.classList.remove('hide')
72
+ })
73
+ })
74
+ </script>
75
+
76
+ <Layout
77
+ class:list="category"
78
+ {...Astro.props}
79
+ >
80
+ <!-- <Intro1
81
+ heading={title}
82
+ text={description}
83
+ /> -->
84
+ <Carousel>
85
+ {
86
+ categories.map((category) => (
87
+ <Element
88
+ as="a"
89
+ class:list="item"
90
+ href={getHref(category.slug)}
91
+ >
92
+ {category.data.title}
93
+ </Element>
94
+ ))
95
+ }
96
+ </Carousel>
97
+ <Element class:list="toolbar">
98
+ <span>{products.length} resultaten</span>
99
+ <Select
100
+ class:list="sort"
101
+ size="sm"
102
+ name="Sorteren"
103
+ options={sorts.map((sort) => sort.option)}
104
+ />
105
+ </Element>
106
+ {
107
+ sorts.map((sort: any) => (
108
+ <Products1
109
+ class:list={sort.option !== 'Aanbevolen' ? 'hide' : ''}
110
+ products={sort.products}
111
+ />
112
+ ))
113
+ }
114
+ <Prose {render} />
115
+ <slot />
116
+ </Layout>
117
+
118
+ <style is:global>
119
+ .carousel {
120
+ .item {
121
+ @apply min-w-48 rounded-sm border p-4 text-sm;
122
+ }
123
+ }
124
+
125
+ .products.hide {
126
+ @apply hidden;
127
+ }
128
+
129
+ .toolbar {
130
+ @apply container flex items-center justify-between pt-8;
131
+
132
+ span {
133
+ @apply text-sm text-muted-foreground;
134
+ }
135
+ }
136
+ </style>
@@ -0,0 +1,56 @@
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 Container from 'fulldev-ui/components/Container.astro'
7
+ import Element from 'fulldev-ui/components/Element.astro'
8
+ import Heading from 'fulldev-ui/components/Heading.astro'
9
+ import Layout from 'fulldev-ui/components/Layout.astro'
10
+ import Paragraph from 'fulldev-ui/components/Paragraph.astro'
11
+ import Prose from 'fulldev-ui/components/Prose.astro'
12
+ import Sidebar from 'fulldev-ui/components/Sidebar.astro'
13
+ import Toc from 'fulldev-ui/components/Toc.astro'
14
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
15
+
16
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {
17
+ render: CollectionEntry<'pages'>['render']
18
+ }
19
+
20
+ const { header, sidebar, render, title, description, footer } = Astro.props
21
+
22
+ const { Content } = await render()
23
+ ---
24
+
25
+ <Layout
26
+ class:list="doc"
27
+ {...Astro.props}
28
+ >
29
+ <Header
30
+ {...sidebar}
31
+ {...header}
32
+ />
33
+ <Container class:list="doc-container">
34
+ <Sidebar {...sidebar} />
35
+ <Element
36
+ class:list="doc-main"
37
+ as="main"
38
+ >
39
+ <Prose>
40
+ <Heading
41
+ as="h1"
42
+ size="4xl"
43
+ text={title}
44
+ />
45
+ <Paragraph
46
+ muted
47
+ size="lg"
48
+ text={description}
49
+ />
50
+ <Content />
51
+ </Prose>
52
+ <Toc {render} />
53
+ </Element>
54
+ </Container>
55
+ <Footer {...footer} />
56
+ </Layout>
@@ -0,0 +1,60 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import { getEntries } from 'astro:content'
5
+ import Content3 from 'fulldev-ui/blocks/Content3.astro'
6
+ import Footer from 'fulldev-ui/blocks/Footer.astro'
7
+ import Header from 'fulldev-ui/blocks/Header.astro'
8
+ import Block from 'fulldev-ui/components/Block.astro'
9
+ import Element from 'fulldev-ui/components/Element.astro'
10
+ import Layout from 'fulldev-ui/components/Layout.astro'
11
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
12
+ import { getHref } from 'fulldev-ui/utils/getHref.ts'
13
+
14
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {
15
+ render: CollectionEntry<'pages'>['render']
16
+ }
17
+
18
+ const {
19
+ title,
20
+ description,
21
+ list,
22
+ button,
23
+ header,
24
+ sidebar,
25
+ render,
26
+ categories,
27
+ blocks,
28
+ footer,
29
+ } = Astro.props
30
+
31
+ const categoriesEntries = categories && (await getEntries(categories))
32
+
33
+ const { Content } = await render()
34
+ ---
35
+
36
+ <Layout
37
+ class:list="job"
38
+ {...Astro.props}
39
+ >
40
+ <Header
41
+ {...sidebar}
42
+ {...header}
43
+ />
44
+ <Element as="main">
45
+ <Content3
46
+ badges={categoriesEntries?.map((category) => ({
47
+ text: category.data.title,
48
+ href: getHref(category.slug),
49
+ }))}
50
+ heading={title}
51
+ paragraph={description}
52
+ {list}
53
+ {button}
54
+ >
55
+ <Content />
56
+ </Content3>
57
+ {blocks?.map((block) => <Block {...block} />)}
58
+ </Element>
59
+ <Footer {...footer} />
60
+ </Layout>
@@ -0,0 +1,29 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import Banner from 'fulldev-ui/blocks/Banner.astro'
4
+ import Footer from 'fulldev-ui/blocks/Footer.astro'
5
+ import Header from 'fulldev-ui/blocks/Header.astro'
6
+ import Block from 'fulldev-ui/components/Block.astro'
7
+ import Element from 'fulldev-ui/components/Element.astro'
8
+ import Layout from 'fulldev-ui/components/Layout.astro'
9
+ import type { PageSchema } from 'fulldev-ui/schemas/page.ts'
10
+
11
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {}
12
+
13
+ const { banner, sidebar, header, blocks, footer } = Astro.props
14
+ ---
15
+
16
+ <Layout
17
+ class:list="page"
18
+ {...Astro.props}
19
+ >
20
+ <Banner {...banner} />
21
+ <Header
22
+ {...sidebar}
23
+ {...header}
24
+ />
25
+ <Element as="main">
26
+ {blocks?.map((block) => <Block {...block} />)}
27
+ </Element>
28
+ <Footer {...footer} />
29
+ </Layout>
@@ -0,0 +1,52 @@
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 Layout from 'fulldev-ui/components/Layout.astro'
10
+ import type { PageSchema } from 'fulldev-ui/schemas/page'
11
+
12
+ interface Props extends ComponentProps<typeof Layout>, PageSchema {
13
+ render: CollectionEntry<'pages'>['render']
14
+ }
15
+
16
+ const {
17
+ title,
18
+ description,
19
+ list,
20
+ button,
21
+ header,
22
+ sidebar,
23
+ blocks,
24
+ footer,
25
+ render,
26
+ } = Astro.props
27
+
28
+ const { Content, headings } = await render()
29
+ ---
30
+
31
+ <Layout
32
+ class:list="post"
33
+ {...Astro.props}
34
+ >
35
+ <Header
36
+ {...sidebar}
37
+ {...header}
38
+ />
39
+ <Element as="main">
40
+ <Content1
41
+ heading={title}
42
+ paragraph={description}
43
+ {list}
44
+ {button}
45
+ {headings}
46
+ >
47
+ <Content />
48
+ </Content1>
49
+ {blocks?.map((block) => <Block {...block} />)}
50
+ </Element>
51
+ <Footer {...footer} />
52
+ </Layout>