fulldev-ui 0.4.29 → 0.5.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/CONTRIBUTING.md +2 -2
  2. package/astro.config.ts +15 -4
  3. package/package.json +26 -16
  4. package/pnpm-lock.yaml +6473 -0
  5. package/public/favicon/android-chrome-192x192.png +0 -0
  6. package/public/favicon/android-chrome-512x512.png +0 -0
  7. package/public/favicon/apple-touch-icon.png +0 -0
  8. package/public/favicon/browserconfig.xml +7 -7
  9. package/public/favicon/favicon-16x16-dark.png +0 -0
  10. package/public/favicon/favicon-16x16.png +0 -0
  11. package/public/favicon/favicon-32x32-dark.png +0 -0
  12. package/public/favicon/favicon-32x32.png +0 -0
  13. package/public/favicon/favicon-48x48-dark.png +0 -0
  14. package/public/favicon/favicon-48x48.png +0 -0
  15. package/public/favicon/favicon-dark.ico +0 -0
  16. package/public/favicon/favicon.ico +0 -0
  17. package/public/favicon/favicon.svg +16 -0
  18. package/public/favicon/manifest.webmanifest +26 -0
  19. package/public/favicon/mstile-150x150.png +0 -0
  20. package/public/favicon/safari-pinned-tab.svg +14 -15
  21. package/public/favicon/yandex-browser-50x50.png +0 -0
  22. package/public/favicon/yandex-browser-manifest.json +9 -0
  23. package/src/blocks/Article.astro +21 -0
  24. package/src/blocks/Banner.astro +47 -0
  25. package/src/blocks/Colleagues.astro +2 -1
  26. package/src/blocks/Contact.astro +84 -99
  27. package/src/blocks/Cta.astro +2 -1
  28. package/src/blocks/Hero.astro +1 -2
  29. package/src/blocks/Intro.astro +1 -1
  30. package/src/blocks/Jobs.astro +1 -1
  31. package/src/blocks/Prices.astro +1 -1
  32. package/src/blocks/Product.astro +23 -10
  33. package/src/blocks/Reviews.astro +1 -1
  34. package/src/components/Avatar.astro +3 -20
  35. package/src/components/Badge.astro +17 -54
  36. package/src/components/Badges.astro +50 -0
  37. package/src/components/Button.astro +65 -45
  38. package/src/components/Buttons.astro +49 -0
  39. package/src/components/Card.astro +94 -177
  40. package/src/components/Cards.astro +135 -0
  41. package/src/components/Channel.astro +70 -0
  42. package/src/components/Channels.astro +37 -0
  43. package/src/components/Checkbox.astro +12 -16
  44. package/src/components/Dialog.astro +10 -12
  45. package/src/components/Drawer.astro +16 -22
  46. package/src/components/Element.astro +58 -0
  47. package/src/components/Footer.astro +139 -93
  48. package/src/components/Head.astro +7 -45
  49. package/src/components/Header.astro +78 -160
  50. package/src/components/Heading.astro +18 -26
  51. package/src/components/Icon.astro +9 -9
  52. package/src/components/Image.astro +43 -152
  53. package/src/components/Input.astro +10 -28
  54. package/src/components/Label.astro +14 -17
  55. package/src/components/Link.astro +22 -44
  56. package/src/components/List.astro +12 -10
  57. package/src/components/LocaleSwitcher.astro +25 -0
  58. package/src/components/Price.astro +38 -0
  59. package/src/components/Rating.astro +29 -25
  60. package/src/components/Search.astro +3 -3
  61. package/src/components/Section.astro +196 -236
  62. package/src/components/Select.astro +16 -34
  63. package/src/components/Sidebar.astro +123 -46
  64. package/src/components/Social.astro +28 -0
  65. package/src/components/Socials.astro +37 -0
  66. package/src/components/Switch.astro +14 -22
  67. package/src/components/Table.astro +23 -36
  68. package/src/components/Tagline.astro +11 -16
  69. package/src/components/Text.astro +17 -19
  70. package/src/components/Textarea.astro +8 -22
  71. package/src/components/ThemeSelect.astro +38 -0
  72. package/src/components/Toc.astro +98 -41
  73. package/src/components/Writeup.astro +90 -0
  74. package/src/components/docs/PropsTable.astro +229 -56
  75. package/src/components/experimental/Form.astro +10 -17
  76. package/src/components/experimental/Logo.astro +26 -9
  77. package/src/components/experimental/Prose.astro +9 -5
  78. package/src/components/experimental/Video.astro +1 -1
  79. package/src/components/experimental/Window.astro +3 -4
  80. package/src/components/sections.astro +28 -0
  81. package/src/content/config.ts +10 -7
  82. package/src/content/pages/base/_dialog.mdx +1 -2
  83. package/src/content/pages/base/_drawer.mdx +1 -2
  84. package/src/content/pages/base/_localeswitcher.mdx +17 -0
  85. package/src/content/pages/base/_switch.mdx +1 -2
  86. package/src/content/pages/base/badge.mdx +1 -12
  87. package/src/content/pages/base/button.mdx +1 -12
  88. package/src/content/pages/base/card.mdx +2 -29
  89. package/src/content/pages/base/checkbox.mdx +1 -2
  90. package/src/content/pages/base/icon.mdx +1 -2
  91. package/src/content/pages/base/image.mdx +42 -0
  92. package/src/content/pages/base/input.mdx +1 -12
  93. package/src/content/pages/base/rating.mdx +3 -14
  94. package/src/content/pages/base/section.mdx +2 -3
  95. package/src/content/pages/base/select.mdx +1 -12
  96. package/src/content/pages/base/table.mdx +1 -28
  97. package/src/content/pages/base/textarea.mdx +1 -11
  98. package/src/content/pages/base/theme-select.mdx +15 -0
  99. package/src/content/pages/blocks/_categories.mdx +3 -5
  100. package/src/content/pages/blocks/{footer.mdx → _footer.mdx} +2 -4
  101. package/src/content/pages/blocks/{header.mdx → _header.mdx} +2 -7
  102. package/src/content/pages/blocks/_jobs.mdx +1 -2
  103. package/src/content/pages/blocks/{prices.mdx → _prices.mdx} +5 -7
  104. package/src/content/pages/blocks/_product.mdx +1 -2
  105. package/src/content/pages/blocks/_products.mdx +1 -2
  106. package/src/content/pages/blocks/_stats.mdx +1 -1
  107. package/src/content/pages/blocks/{_banner.mdx → banner.mdx} +2 -2
  108. package/src/content/pages/blocks/colleagues.mdx +6 -8
  109. package/src/content/pages/blocks/contact.mdx +69 -0
  110. package/src/content/pages/blocks/content.mdx +1 -19
  111. package/src/content/pages/blocks/cta.mdx +2 -25
  112. package/src/content/pages/blocks/features.mdx +2 -3
  113. package/src/content/pages/blocks/hero.mdx +5 -3
  114. package/src/content/pages/blocks/intro.mdx +2 -5
  115. package/src/content/pages/blocks/posts.mdx +9 -2
  116. package/src/content/pages/blocks/reviews.mdx +23 -18
  117. package/src/content/pages/index.mdx +19 -20
  118. package/src/content/pages/layouts/docslayout.mdx +5 -0
  119. package/src/content/pages/layouts/layout.mdx +21 -0
  120. package/src/content/pages/layouts/pagelayout.mdx +21 -0
  121. package/src/content/pages/overview/components.mdx +70 -0
  122. package/src/content/pages/overview/content-layer.mdx +128 -0
  123. package/src/content/pages/overview/{theming.mdx → customization.mdx} +6 -6
  124. package/src/content/pages/overview/frameworks.mdx +4 -4
  125. package/src/content/pages/overview/installation.mdx +37 -3
  126. package/src/content/pages/overview/introduction.mdx +6 -2
  127. package/src/content/pages/schemas/page.mdx +11 -0
  128. package/src/content/pages/schemas/preset.mdx +9 -0
  129. package/src/content/pages/showcase/anti-slip-profiles.md +5 -0
  130. package/src/content/pages/showcase/fulldev-ui.md +5 -0
  131. package/src/content/pages/showcase/lavis-detailing.md +5 -0
  132. package/src/content/pages/showcase/leren-trainingsacteren.md +5 -0
  133. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +5 -0
  134. package/src/content/{records/record.yml → pages/showcase/record.md} +2 -0
  135. package/src/content/pages/showcase/sloepverhuur-bolsward.md +5 -0
  136. package/src/content/pages/showcase/stark-vulcanising-products.md +5 -0
  137. package/src/content/pages/showcase/the-gym-haren.md +5 -0
  138. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +5 -0
  139. package/src/content/pages/showcase.mdx +11 -41
  140. package/src/content/pages/typography/_tagline.mdx +1 -2
  141. package/src/content/pages/typography/heading.mdx +1 -2
  142. package/src/content/pages/typography/label.mdx +1 -2
  143. package/src/content/pages/typography/link.mdx +1 -13
  144. package/src/content/pages/typography/list.mdx +1 -2
  145. package/src/content/pages/typography/text.mdx +1 -2
  146. package/src/content/presets/base.yml +70 -0
  147. package/src/content/presets/blocks.yml +4 -0
  148. package/src/content/presets/docs.yml +65 -0
  149. package/src/css/color.css +0 -82
  150. package/src/css/custom.css +9 -56
  151. package/src/css/size.css +10 -0
  152. package/src/css/space.css +0 -8
  153. package/src/css/styles.css +0 -15
  154. package/src/images/avatar-1.yml +1 -0
  155. package/src/images/favicon.svg +16 -0
  156. package/src/integration/generate-colors.ts +2 -0
  157. package/src/integration/index.ts +67 -7
  158. package/src/layouts/BlockLayout.astro +10 -15
  159. package/src/layouts/ContactLayout.astro +21 -0
  160. package/src/layouts/ContentLayout.astro +16 -0
  161. package/src/layouts/DocsLayout.astro +85 -0
  162. package/src/layouts/Layout.astro +111 -133
  163. package/src/layouts/OverviewLayout.astro +22 -32
  164. package/src/layouts/PageLayout.astro +7 -24
  165. package/src/layouts/PostLayout.astro +8 -19
  166. package/src/layouts/ProductLayout.astro +9 -22
  167. package/src/loaders/imageLoader.ts +26 -0
  168. package/src/pages/[...page].astro +25 -21
  169. package/src/schemas/components/avatar.ts +3 -0
  170. package/src/schemas/components/avatars.ts +4 -0
  171. package/src/schemas/components/badge.ts +13 -0
  172. package/src/schemas/components/button.ts +16 -0
  173. package/src/schemas/components/buttons.ts +4 -0
  174. package/src/schemas/components/card.ts +25 -0
  175. package/src/schemas/components/cards.ts +4 -0
  176. package/src/schemas/components/channel.ts +13 -0
  177. package/src/schemas/components/channels.ts +4 -0
  178. package/src/schemas/components/footer.ts +24 -0
  179. package/src/schemas/components/header.ts +10 -0
  180. package/src/schemas/components/heading.ts +3 -0
  181. package/src/schemas/components/icon.ts +3 -0
  182. package/src/schemas/components/image.ts +18 -0
  183. package/src/schemas/components/images.ts +4 -0
  184. package/src/schemas/components/list.ts +3 -0
  185. package/src/schemas/components/logo.ts +3 -0
  186. package/src/schemas/components/price.ts +3 -0
  187. package/src/schemas/components/rating.ts +15 -0
  188. package/src/schemas/components/section.ts +15 -0
  189. package/src/schemas/components/sections.ts +3 -0
  190. package/src/schemas/components/social.ts +3 -0
  191. package/src/schemas/components/socials.ts +4 -0
  192. package/src/schemas/components/tagline.ts +3 -0
  193. package/src/schemas/components/text.ts +3 -0
  194. package/src/schemas/components/writeup.ts +20 -0
  195. package/src/schemas/imageSchema.ts +12 -0
  196. package/src/schemas/pageSchema.ts +63 -0
  197. package/src/schemas/presetSchema.ts +29 -0
  198. package/src/schemas/utils/categories.ts +3 -0
  199. package/src/schemas/utils/component.ts +17 -0
  200. package/src/schemas/utils/navigation.ts +53 -0
  201. package/src/schemas/{utils.ts → utils/pathSchema.ts} +2 -11
  202. package/src/types/global-props.d.ts +16 -0
  203. package/src/types/virtual-modules.d.ts +5 -0
  204. package/src/utils/_archive/Childmorphic.ts +1 -1
  205. package/src/utils/_archive/mergeEntries.ts +28 -0
  206. package/src/utils/getCategoryPages.ts +11 -0
  207. package/src/utils/getChildPages.ts +16 -0
  208. package/src/utils/getSiblingPages.ts +14 -0
  209. package/tsconfig.json +1 -2
  210. package/public/favicon/site.webmanifest +0 -19
  211. package/public/images/avatars/1.jpeg +0 -0
  212. package/public/images/avatars/2.jpeg +0 -0
  213. package/public/images/avatars/3.jpeg +0 -0
  214. package/public/images/avatars/300/1.jpeg +0 -0
  215. package/public/images/avatars/300/2.jpeg +0 -0
  216. package/public/images/avatars/300/3.jpeg +0 -0
  217. package/public/images/avatars/300/4.jpeg +0 -0
  218. package/public/images/avatars/4.jpeg +0 -0
  219. package/public/images/avatars/5.jpeg +0 -0
  220. package/public/images/avatars/6.jpeg +0 -0
  221. package/public/images/avatars/7.jpeg +0 -0
  222. package/public/images/avatars/8.jpeg +0 -0
  223. package/public/images/blocks/colleagues.png +0 -0
  224. package/public/images/blocks/content.png +0 -0
  225. package/public/images/blocks/cta.png +0 -0
  226. package/public/images/blocks/features.png +0 -0
  227. package/public/images/blocks/footer.png +0 -0
  228. package/public/images/blocks/header.png +0 -0
  229. package/public/images/blocks/hero.png +0 -0
  230. package/public/images/blocks/intro.png +0 -0
  231. package/public/images/blocks/posts.png +0 -0
  232. package/public/images/blocks/prices.png +0 -0
  233. package/public/images/blocks/reviews.png +0 -0
  234. package/public/images/logo-placeholder.svg +0 -1
  235. package/src/components/Bento.astro +0 -43
  236. package/src/components/Block.astro +0 -157
  237. package/src/components/Blocks.astro +0 -5
  238. package/src/components/Box.astro +0 -63
  239. package/src/components/Carousel.astro +0 -54
  240. package/src/components/Column.astro +0 -73
  241. package/src/components/Grid.astro +0 -32
  242. package/src/components/Masonry.astro +0 -42
  243. package/src/components/Root.astro +0 -94
  244. package/src/components/Row.astro +0 -49
  245. package/src/components/Split.astro +0 -59
  246. package/src/components/Spread.astro +0 -46
  247. package/src/components/Stack.astro +0 -36
  248. package/src/components/Toggle.astro +0 -46
  249. package/src/components/Wrap.astro +0 -42
  250. package/src/components/docs/NavigationButtons.astro +0 -59
  251. package/src/components/experimental/Channel.astro +0 -74
  252. package/src/components/experimental/Price.astro +0 -40
  253. package/src/content/pages/_changelog.mdx +0 -10
  254. package/src/content/pages/_segment/footer.mdx +0 -244
  255. package/src/content/pages/_segment/header.mdx +0 -210
  256. package/src/content/pages/base/_image.mdx +0 -14
  257. package/src/content/pages/base/toggle.mdx +0 -32
  258. package/src/content/pages/blocks.mdx +0 -10
  259. package/src/content/pages/overview/integration.mdx +0 -37
  260. package/src/content/pages/structure/_row.mdx +0 -23
  261. package/src/content/pages/structure/_wrap.mdx +0 -25
  262. package/src/content/pages/structure/carousel.mdx +0 -31
  263. package/src/content/pages/structure/column.mdx +0 -21
  264. package/src/content/pages/structure/grid.mdx +0 -26
  265. package/src/content/pages/structure/masonry.mdx +0 -32
  266. package/src/content/pages/structure/split.mdx +0 -21
  267. package/src/content/pages/structure/spread.mdx +0 -21
  268. package/src/content/pages/structure/stack.mdx +0 -22
  269. package/src/content/settings/base.yml +0 -55
  270. package/src/content/settings/components.yml +0 -29
  271. package/src/layouts/BlockOverviewLayout.astro +0 -39
  272. package/src/layouts/ComponentLayout.astro +0 -23
  273. package/src/layouts/JobsLayout.astro +0 -40
  274. package/src/schemas/base.ts +0 -90
  275. package/src/schemas/block.ts +0 -15
  276. package/src/schemas/card.ts +0 -3
  277. package/src/schemas/page.ts +0 -43
  278. package/src/utils/mergeEntries.ts +0 -28
  279. /package/{public/showcase → src/images}/anti-slip-profiles.webp +0 -0
  280. /package/{public/images/avatars/500/1.jpeg → src/images/avatar-1.jpeg} +0 -0
  281. /package/{public/images/avatars/500/2.jpeg → src/images/avatar-2.jpeg} +0 -0
  282. /package/{public/images/avatars/500/3.jpeg → src/images/avatar-3.jpeg} +0 -0
  283. /package/{public/images/avatars/500/4.jpeg → src/images/avatar-4.jpeg} +0 -0
  284. /package/{public → src}/images/avatar-placeholder.jpg +0 -0
  285. /package/{public → src}/images/block-code.png +0 -0
  286. /package/{public → src}/images/component-code.png +0 -0
  287. /package/{public/showcase → src/images}/fulldev-ui.webp +0 -0
  288. /package/{public/showcase → src/images}/lavis-detailing.webp +0 -0
  289. /package/{public/showcase → src/images}/leren-trainingsacteren.webp +0 -0
  290. /package/{public/showcase → src/images}/miele-witgoedcenter-amsterdam.webp +0 -0
  291. /package/{public → src}/images/og-image.png +0 -0
  292. /package/{public → src}/images/placeholder-center.webp +0 -0
  293. /package/{public → src}/images/placeholder-landscape-dark.png +0 -0
  294. /package/{public → src}/images/placeholder-landscape.webp +0 -0
  295. /package/{public → src}/images/placeholder-portrait.webp +0 -0
  296. /package/{public → src}/images/placeholder-right.webp +0 -0
  297. /package/{public → src}/images/placeholder.webp +0 -0
  298. /package/{public/showcase → src/images}/sloepverhuur-bolsward.webp +0 -0
  299. /package/{public/showcase → src/images}/stark-vulcanising-products.webp +0 -0
  300. /package/{public/showcase → src/images}/the-gym-haren.webp +0 -0
  301. /package/{public/showcase → src/images}/van-dillen-antieke-bouwmaterialen.webp +0 -0
@@ -1,32 +1,15 @@
1
1
  ---
2
- import type { CollectionEntry } from 'astro:content'
3
- import Block from 'fulldev-ui/components/Block.astro'
4
- import Blocks from 'fulldev-ui/components/Blocks.astro'
5
- import Prose from 'fulldev-ui/components/experimental/Prose.astro'
6
- import Section from 'fulldev-ui/components/Section.astro'
2
+ import type { ComponentProps } from 'astro/types'
7
3
  import Layout from 'fulldev-ui/layouts/Layout.astro'
8
4
 
9
- type Props = CollectionEntry<'pages'>
5
+ type Props = ComponentProps<typeof Layout>
10
6
 
11
- const { data, render } = Astro.props
12
- const { hero, section, sections, block, blocks } = data
13
- const { Content } = await render()
7
+ const { ...rest } = Astro.props
14
8
  ---
15
9
 
16
- <Layout {...Astro.props}>
17
- <Block
18
- _bookshop_name="Hero"
19
- {...data}
20
- {...hero}
21
- />
22
- <Block {...section} />
23
- <Block {...block} />
24
- <Section style={{ '--screen': '768px' }}>
25
- <Prose id="prose">
26
- <Content />
27
- </Prose>
28
- </Section>
29
- <Blocks {...sections} />
30
- <Blocks {...blocks} />
10
+ <Layout
11
+ class:list="page-layout"
12
+ {...rest}
13
+ >
31
14
  <slot />
32
15
  </Layout>
@@ -1,32 +1,21 @@
1
1
  ---
2
- import type { CollectionEntry } from 'astro:content'
2
+ import type { ComponentProps } from 'astro/types'
3
+ import Article from 'fulldev-ui/blocks/Article.astro'
3
4
  import Intro from 'fulldev-ui/blocks/Intro.astro'
4
- import Blocks from 'fulldev-ui/components/Blocks.astro'
5
- import Prose from 'fulldev-ui/components/experimental/Prose.astro'
6
- import Section from 'fulldev-ui/components/Section.astro'
5
+ import Sections from 'fulldev-ui/components/sections.astro'
7
6
  import Layout from 'fulldev-ui/layouts/Layout.astro'
8
7
 
9
- type Props = CollectionEntry<'pages'>
8
+ type Props = ComponentProps<typeof Layout>
10
9
 
11
- const { data, render } = Astro.props
12
- const { section, sections, blocks } = data
13
- const { Content } = await render()
10
+ const { render, sections, ...rest } = Astro.props
14
11
  ---
15
12
 
16
13
  <Layout {...Astro.props}>
17
14
  <Intro
18
- _bookshop_name="Intro"
19
- style={{ '--screen': '768px' }}
20
15
  align="start"
21
- {...section}
22
- {...data}
16
+ {...rest}
23
17
  />
24
- <Section>
25
- <Prose id="prose">
26
- <Content />
27
- </Prose>
28
- </Section>
29
- <Blocks {...sections} />
30
- <Blocks {...blocks} />
18
+ <Article />
19
+ <Sections {sections} />
31
20
  <slot />
32
21
  </Layout>
@@ -1,31 +1,18 @@
1
1
  ---
2
- import type { CollectionEntry } from 'astro:content'
3
- import Block from 'fulldev-ui/components/Block.astro'
4
- import Blocks from 'fulldev-ui/components/Blocks.astro'
5
- import Prose from 'fulldev-ui/components/experimental/Prose.astro'
6
- import Section from 'fulldev-ui/components/Section.astro'
2
+ import type { ComponentProps } from 'astro/types'
3
+ import Article from 'fulldev-ui/blocks/Article.astro'
4
+ import Product from 'fulldev-ui/blocks/Product.astro'
5
+ import Sections from 'fulldev-ui/components/sections.astro'
7
6
  import Layout from 'fulldev-ui/layouts/Layout.astro'
8
7
 
9
- type Props = CollectionEntry<'pages'>
8
+ type Props = ComponentProps<typeof Layout>
10
9
 
11
- const { data, render } = Astro.props
12
- const { section, sections, block, blocks } = data
13
- const { Content } = await render()
10
+ const { render, sections, ...rest } = Astro.props
14
11
  ---
15
12
 
16
13
  <Layout {...Astro.props}>
17
- <Block
18
- _bookshop_name="ProductSection"
19
- {...data}
20
- />
21
- <Block {...section} />
22
- <Block {...block} />
23
- <Section style={{ '--screen': '768px' }}>
24
- <Prose id="prose">
25
- <Content />
26
- </Prose>
27
- </Section>
28
- <Blocks {...sections} />
29
- <Blocks {...blocks} />
14
+ <Product {...rest} />
15
+ <Article />
16
+ <Sections {sections} />
30
17
  <slot />
31
18
  </Layout>
@@ -0,0 +1,26 @@
1
+ export default async () => {
2
+ const files = import.meta.glob('/src/images/**/*.{webp,png,jpg,jpeg,svg}', {
3
+ eager: true,
4
+ })
5
+ const entries = import.meta.glob('/src/images/**/*.{yml,yaml,json}', {
6
+ eager: true,
7
+ })
8
+
9
+ const allImages = Object.entries(files).map(([src, file]) => {
10
+ const id = src.split('/images/').pop()
11
+ const matchPath = Object.keys(entries).find(
12
+ (entry) => entry.split('.').shift() === src
13
+ ) as any
14
+ const matchFile = entries[matchPath]
15
+ const matchData = matchFile ? (matchFile as any).default : {}
16
+ const fileData = file ? (file as any).default : {}
17
+ return {
18
+ id,
19
+ ...fileData,
20
+ src,
21
+ ...matchData,
22
+ }
23
+ })
24
+
25
+ return allImages as any
26
+ }
@@ -1,8 +1,6 @@
1
1
  ---
2
2
  import { getCollection } from 'astro:content'
3
- import PageLayout from 'fulldev-ui/layouts/PageLayout.astro'
4
- import { mapKeys } from 'radash'
5
- import { mergeEntries } from '../utils/mergeEntries'
3
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
6
4
 
7
5
  export async function getStaticPaths() {
8
6
  const pages = await getCollection('pages')
@@ -14,27 +12,33 @@ export async function getStaticPaths() {
14
12
  }))
15
13
  }
16
14
 
17
- const { data, slug, ...rest } = Astro.props
15
+ const { data, ...rest } = Astro.props
18
16
 
19
- const merged = (await mergeEntries({ data, slug })) as any
17
+ const { component, ...restData } = data
20
18
 
21
- const packageLayouts = import.meta.glob('../layouts/**/*.astro')
22
- const userLayouts = import.meta.glob('/src/layouts/**/*.astro')
23
-
24
- const mapBlockKeys = (blocks: any) =>
25
- mapKeys(blocks, (key: any) => key.split('/').pop().split('.').shift())
26
-
27
- const components = {
28
- ...mapBlockKeys(packageLayouts),
29
- ...mapBlockKeys(userLayouts),
19
+ const allComponents = {
20
+ ...import.meta.glob('/src/**/*.astro'),
21
+ ...import.meta.glob('../../**/*.astro'),
30
22
  }
31
23
 
32
- const found = components[(merged.data._layout ?? 'PageLayout') as string] as any
33
- const functioncomp = found && (await found())
34
- const Layout = functioncomp?.default ?? PageLayout
24
+ const componentPath = Object.keys(allComponents).find(
25
+ (path) => path.split('/').pop()?.split('.')[0] === component
26
+ )
27
+
28
+ const Component =
29
+ componentPath && (await (allComponents[componentPath] as any)()).default
35
30
  ---
36
31
 
37
- <Layout
38
- data={merged.data}
39
- {...rest}
40
- />
32
+ {
33
+ Component ? (
34
+ <Component
35
+ {...restData}
36
+ {...rest}
37
+ />
38
+ ) : (
39
+ <Layout
40
+ {...(data as any)}
41
+ {...rest}
42
+ />
43
+ )
44
+ }
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import avatar from './avatar'
3
+
4
+ export default z.array(avatar)
@@ -0,0 +1,13 @@
1
+ import { z } from 'astro:content'
2
+ import pathSchema from '../utils/pathSchema'
3
+
4
+ export default pathSchema('pages').or(
5
+ z
6
+ .object({
7
+ text: z.string(),
8
+ href: z.string(),
9
+ icon: z.string(),
10
+ })
11
+ .partial()
12
+ .passthrough()
13
+ )
@@ -0,0 +1,16 @@
1
+ import { z } from 'astro:content'
2
+ import pathSchema from '../utils/pathSchema'
3
+
4
+ export default z.union([pathSchema('pages'), z.object({}).passthrough()]).pipe(
5
+ z
6
+ .object({
7
+ slug: z
8
+ .string()
9
+ .refine(async (data) => await pathSchema('pages').parseAsync(data)),
10
+ text: z.string(),
11
+ href: z.string(),
12
+ icon: z.string(),
13
+ })
14
+ .partial()
15
+ .passthrough()
16
+ )
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import button from './button'
3
+
4
+ export default z.array(button)
@@ -0,0 +1,25 @@
1
+ import button from './button'
2
+ import buttons from './buttons'
3
+ import icon from './icon'
4
+ import image from './image'
5
+ import images from './images'
6
+
7
+ import { z } from 'astro:content'
8
+ import pathSchema from '../utils/pathSchema'
9
+ import writeup from './writeup'
10
+
11
+ export default z.union([pathSchema('pages'), z.object({}).passthrough()]).pipe(
12
+ writeup
13
+ .extend({
14
+ slug: z
15
+ .string()
16
+ .refine(async (data) => await pathSchema('pages').parseAsync(data)),
17
+ image,
18
+ images,
19
+ buttons,
20
+ button,
21
+ icon,
22
+ })
23
+ .partial()
24
+ .passthrough()
25
+ )
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import card from './card'
3
+
4
+ export default z.array(card)
@@ -0,0 +1,13 @@
1
+ import { z } from 'astro:content'
2
+ import heading from './heading'
3
+ import icon from './icon'
4
+ import text from './text'
5
+
6
+ export default z
7
+ .object({
8
+ heading,
9
+ text,
10
+ icon,
11
+ href: z.string(),
12
+ })
13
+ .partial()
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import channel from './channel'
3
+
4
+ export default z.array(channel)
@@ -0,0 +1,24 @@
1
+ import { z } from 'astro:content'
2
+ import buttons from './buttons'
3
+ import channels from './channels'
4
+ import heading from './heading'
5
+ import logo from './logo'
6
+ import socials from './socials'
7
+ import text from './text'
8
+
9
+ export default z
10
+ .object({
11
+ logo,
12
+ text,
13
+ socials,
14
+ channels,
15
+ columns: z.array(
16
+ z
17
+ .object({
18
+ heading,
19
+ buttons,
20
+ })
21
+ .partial()
22
+ ),
23
+ })
24
+ .partial()
@@ -0,0 +1,10 @@
1
+ import { z } from 'astro:content'
2
+ import buttons from './buttons'
3
+ import logo from './logo'
4
+
5
+ export default z
6
+ .object({
7
+ logo,
8
+ buttons,
9
+ })
10
+ .partial()
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,18 @@
1
+ import { reference, z } from 'astro:content'
2
+
3
+ export default z.union([reference('images'), z.object({}).passthrough()]).pipe(
4
+ z
5
+ .object({
6
+ id: z
7
+ .string()
8
+ .refine(async (data) => await reference('images').parseAsync(data)),
9
+ src: z.string(),
10
+ alt: z.string(),
11
+ width: z.number(),
12
+ height: z.number(),
13
+ })
14
+ .partial()
15
+ .passthrough()
16
+ )
17
+
18
+ // export default z.any()
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import image from './image'
3
+
4
+ export default z.array(image)
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.array(z.string())
@@ -0,0 +1,3 @@
1
+ import image from './image'
2
+
3
+ export default image
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.number()
@@ -0,0 +1,15 @@
1
+ import { z } from 'astro:content'
2
+ import avatar from './avatar'
3
+ import avatars from './avatars'
4
+ import text from './text'
5
+
6
+ export default z.number().or(
7
+ z
8
+ .object({
9
+ value: z.number(),
10
+ avatar,
11
+ avatars,
12
+ text,
13
+ })
14
+ .partial()
15
+ )
@@ -0,0 +1,15 @@
1
+ import component from '../utils/component'
2
+ import buttons from './buttons'
3
+ import cards from './cards'
4
+ import image from './image'
5
+ import writeup from './writeup'
6
+
7
+ export default writeup
8
+ .extend({
9
+ component,
10
+ image,
11
+ buttons,
12
+ cards,
13
+ })
14
+ .partial()
15
+ .passthrough()
@@ -0,0 +1,3 @@
1
+ import section from './section'
2
+
3
+ export default section.array()
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,4 @@
1
+ import { z } from 'astro:content'
2
+ import social from './social'
3
+
4
+ export default z.array(social)
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,3 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z.string()
@@ -0,0 +1,20 @@
1
+ import { z } from 'astro:content'
2
+ import badge from './badge'
3
+ import heading from './heading'
4
+ import list from './list'
5
+ import price from './price'
6
+ import rating from './rating'
7
+ import tagline from './tagline'
8
+ import text from './text'
9
+
10
+ export default z
11
+ .object({
12
+ rating,
13
+ badge,
14
+ tagline,
15
+ heading,
16
+ text,
17
+ list,
18
+ price,
19
+ })
20
+ .partial()
@@ -0,0 +1,12 @@
1
+ import { z } from 'astro:content'
2
+
3
+ export default z
4
+ .object({
5
+ id: z.string(),
6
+ src: z.string(),
7
+ alt: z.string().default(''),
8
+ width: z.number(),
9
+ height: z.number(),
10
+ format: z.string(),
11
+ })
12
+ .passthrough()
@@ -0,0 +1,63 @@
1
+ import { getEntries, getEntry, z } from 'astro:content'
2
+ import { assign } from 'radash'
3
+ import image from './components/image'
4
+ import sections from './components/sections'
5
+ import categories from './utils/categories'
6
+ import component from './utils/component'
7
+ import navigation from './utils/navigation'
8
+ import pathSchema from './utils/pathSchema'
9
+
10
+ const i18n = z
11
+ .object({
12
+ i18n: pathSchema('pages').optional(),
13
+ })
14
+ .passthrough()
15
+ .transform(async ({ i18n, ...rest }) => {
16
+ if (!i18n) return rest
17
+ const entry = await getEntry(i18n)
18
+ const merged = assign(entry.data, rest) as typeof rest
19
+ return merged as typeof rest
20
+ })
21
+
22
+ const presets = z
23
+ .object({
24
+ presets: z.array(pathSchema('presets')).optional(),
25
+ })
26
+ .passthrough()
27
+ .transform(async ({ presets, ...rest }) => {
28
+ if (!presets) return rest
29
+ const entries = await getEntries(presets)
30
+ let mergedData = {}
31
+ entries.forEach(
32
+ (preset: any) => (mergedData = assign(mergedData, preset.data))
33
+ )
34
+ mergedData = assign(mergedData, rest)
35
+ return mergedData as typeof rest
36
+ })
37
+
38
+ export default i18n.pipe(presets).pipe(
39
+ z
40
+ .object({
41
+ component,
42
+ categories,
43
+ theme: z.enum(['light', 'dark']),
44
+ lang: z.string(),
45
+ seo: z
46
+ .object({
47
+ title: z.string().optional(),
48
+ description: z.string().optional(),
49
+ })
50
+ .optional(),
51
+ title: z.string(),
52
+ description: z.string().optional(),
53
+ image,
54
+ sections,
55
+ header: z.any(),
56
+ footer: z.any(),
57
+ navigation,
58
+ toc: z.any(),
59
+ sidebar: z.any(),
60
+ })
61
+ .partial()
62
+ .passthrough()
63
+ )
@@ -0,0 +1,29 @@
1
+ import { z } from 'astro:content'
2
+ import image from './components/image'
3
+ import sections from './components/sections'
4
+ import categories from './utils/categories'
5
+ import component from './utils/component'
6
+
7
+ export default z
8
+ .object({
9
+ component,
10
+ categories,
11
+ theme: z.enum(['light', 'dark']),
12
+ lang: z.string(),
13
+ seo: z
14
+ .object({
15
+ title: z.string().optional(),
16
+ description: z.string().optional(),
17
+ })
18
+ .optional(),
19
+ title: z.string(),
20
+ description: z.string().optional(),
21
+ image,
22
+ sections,
23
+ header: z.any(),
24
+ footer: z.any(),
25
+ navigation: z.any(),
26
+ toc: z.any(),
27
+ sidebar: z.any(),
28
+ })
29
+ .partial()
@@ -0,0 +1,3 @@
1
+ import pathSchema from './pathSchema'
2
+
3
+ export default pathSchema('pages').array().optional()
@@ -0,0 +1,17 @@
1
+ import { z } from 'astro:content'
2
+ import { mapKeys } from 'radash'
3
+
4
+ export default z.string().refine(
5
+ (value) => {
6
+ const packageComponents = import.meta.glob('../../**/*.astro')
7
+ const userComponents = import.meta.glob('/src/**/*.astro')
8
+ const mapBlockKeys = (blocks: any) =>
9
+ mapKeys(blocks, (key: any) => key.split('/').pop().split('.').shift())
10
+ const mergedComponents = {
11
+ ...mapBlockKeys(packageComponents),
12
+ ...mapBlockKeys(userComponents),
13
+ }
14
+ return mergedComponents[value] !== undefined
15
+ },
16
+ (value) => ({ message: `component: the component "${value}" does not exist` })
17
+ )
@@ -0,0 +1,53 @@
1
+ // import { z } from 'astro:content'
2
+ // import button from '../components/button'
3
+ // import buttons from '../components/buttons'
4
+ // import heading from '../components/heading'
5
+ // import logo from '../components/logo'
6
+
7
+ // export default z.object({
8
+ // logo,
9
+ // buttons: z.array(
10
+ // button.or(
11
+ // z.object({
12
+ // heading,
13
+ // buttons,
14
+ // })
15
+ // )
16
+ // ),
17
+ // })
18
+
19
+ import { z } from 'astro:content'
20
+ import pathSchema from '../utils/pathSchema'
21
+
22
+ const button = pathSchema('pages').or(
23
+ z
24
+ .object({
25
+ text: z.string(),
26
+ href: z.string(),
27
+ heading: z.never(),
28
+ buttons: z.never(),
29
+ })
30
+ .partial()
31
+ .passthrough()
32
+ )
33
+
34
+ const group = z
35
+ .object({
36
+ heading: z.string(),
37
+ buttons: z.array(button),
38
+ text: z.never(),
39
+ href: z.never(),
40
+ })
41
+ .partial()
42
+ .passthrough()
43
+
44
+ export default z
45
+ .object({
46
+ logo: z.string(),
47
+ search: z.boolean(),
48
+ sidebar: z.boolean(),
49
+ toc: z.boolean(),
50
+ buttons: z.array(button.or(group)),
51
+ })
52
+ .partial()
53
+ .passthrough()