fulldev-ui 0.4.28 → 0.5.0-beta.0

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 (313) hide show
  1. package/.astro/assets.mjs +1 -0
  2. package/.astro/astro/content.d.ts +547 -0
  3. package/.astro/collections/blocks.schema.json +851 -0
  4. package/.astro/collections/collections.json +63 -0
  5. package/.astro/collections/images.schema.json +22 -0
  6. package/.astro/collections/layouts.schema.json +826 -0
  7. package/.astro/collections/pages.schema.json +568 -0
  8. package/.astro/collections/presets.schema.json +489 -0
  9. package/.astro/collections/records.schema.json +822 -0
  10. package/.astro/collections/settings.schema.json +822 -0
  11. package/.astro/data-store.json +1 -0
  12. package/.astro/modules.mjs +1 -0
  13. package/.astro/settings.json +5 -0
  14. package/.astro/types.d.ts +2 -0
  15. package/CHANGELOG.md +2 -98
  16. package/CONTRIBUTING.md +2 -2
  17. package/astro.config.ts +20 -4
  18. package/package.json +26 -16
  19. package/public/favicon/android-chrome-192x192.png +0 -0
  20. package/public/favicon/android-chrome-512x512.png +0 -0
  21. package/public/favicon/apple-touch-icon.png +0 -0
  22. package/public/favicon/browserconfig.xml +7 -7
  23. package/public/favicon/favicon-16x16-dark.png +0 -0
  24. package/public/favicon/favicon-16x16.png +0 -0
  25. package/public/favicon/favicon-32x32-dark.png +0 -0
  26. package/public/favicon/favicon-32x32.png +0 -0
  27. package/public/favicon/favicon-48x48-dark.png +0 -0
  28. package/public/favicon/favicon-48x48.png +0 -0
  29. package/public/favicon/favicon-dark.ico +0 -0
  30. package/public/favicon/favicon.ico +0 -0
  31. package/public/favicon/favicon.svg +16 -0
  32. package/public/favicon/manifest.webmanifest +26 -0
  33. package/public/favicon/mstile-150x150.png +0 -0
  34. package/public/favicon/safari-pinned-tab.svg +14 -15
  35. package/public/favicon/yandex-browser-50x50.png +0 -0
  36. package/public/favicon/yandex-browser-manifest.json +9 -0
  37. package/src/blocks/Article.astro +21 -0
  38. package/src/blocks/Banner.astro +47 -0
  39. package/src/blocks/Colleagues.astro +2 -1
  40. package/src/blocks/Contact.astro +84 -99
  41. package/src/blocks/Cta.astro +2 -1
  42. package/src/blocks/Hero.astro +1 -2
  43. package/src/blocks/Intro.astro +1 -1
  44. package/src/blocks/Jobs.astro +1 -1
  45. package/src/blocks/Prices.astro +1 -1
  46. package/src/blocks/Product.astro +23 -10
  47. package/src/blocks/Reviews.astro +1 -1
  48. package/src/components/Avatar.astro +3 -20
  49. package/src/components/Badge.astro +17 -54
  50. package/src/components/Badges.astro +50 -0
  51. package/src/components/Button.astro +63 -45
  52. package/src/components/Buttons.astro +49 -0
  53. package/src/components/Card.astro +94 -177
  54. package/src/components/Cards.astro +135 -0
  55. package/src/components/Channel.astro +70 -0
  56. package/src/components/Channels.astro +37 -0
  57. package/src/components/Checkbox.astro +16 -19
  58. package/src/components/Dialog.astro +10 -11
  59. package/src/components/Drawer.astro +16 -22
  60. package/src/components/Element.astro +58 -0
  61. package/src/components/Footer.astro +141 -97
  62. package/src/components/Head.astro +7 -45
  63. package/src/components/Header.astro +78 -160
  64. package/src/components/Heading.astro +18 -26
  65. package/src/components/Icon.astro +9 -9
  66. package/src/components/Image.astro +43 -152
  67. package/src/components/Input.astro +10 -28
  68. package/src/components/Label.astro +14 -17
  69. package/src/components/Link.astro +22 -44
  70. package/src/components/List.astro +12 -10
  71. package/src/components/LocaleSwitcher.astro +25 -0
  72. package/src/components/Price.astro +38 -0
  73. package/src/components/Rating.astro +29 -25
  74. package/src/components/Search.astro +3 -3
  75. package/src/components/Section.astro +196 -236
  76. package/src/components/Select.astro +16 -34
  77. package/src/components/Sidebar.astro +112 -46
  78. package/src/components/Social.astro +28 -0
  79. package/src/components/Socials.astro +37 -0
  80. package/src/components/Switch.astro +14 -22
  81. package/src/components/Table.astro +23 -36
  82. package/src/components/Tagline.astro +11 -16
  83. package/src/components/Text.astro +17 -19
  84. package/src/components/Textarea.astro +8 -22
  85. package/src/components/ThemeSelect.astro +38 -0
  86. package/src/components/Toc.astro +100 -23
  87. package/src/components/Writeup.astro +90 -0
  88. package/src/components/docs/PropsTable.astro +229 -56
  89. package/src/components/experimental/Form.astro +10 -17
  90. package/src/components/experimental/Logo.astro +26 -9
  91. package/src/components/experimental/Prose.astro +9 -5
  92. package/src/components/experimental/Video.astro +1 -1
  93. package/src/components/experimental/Window.astro +3 -4
  94. package/src/components/sections.astro +28 -0
  95. package/src/content/config.ts +10 -7
  96. package/src/content/pages/base/_dialog.mdx +1 -2
  97. package/src/content/pages/base/_drawer.mdx +1 -2
  98. package/src/content/pages/base/_localeswitcher.mdx +17 -0
  99. package/src/content/pages/base/_switch.mdx +1 -2
  100. package/src/content/pages/base/badge.mdx +1 -12
  101. package/src/content/pages/base/button.mdx +1 -12
  102. package/src/content/pages/base/card.mdx +2 -29
  103. package/src/content/pages/base/checkbox.mdx +7 -8
  104. package/src/content/pages/base/icon.mdx +3 -2
  105. package/src/content/pages/base/image.mdx +42 -0
  106. package/src/content/pages/base/input.mdx +1 -12
  107. package/src/content/pages/base/rating.mdx +3 -14
  108. package/src/content/pages/base/section.mdx +17 -60
  109. package/src/content/pages/base/select.mdx +1 -12
  110. package/src/content/pages/base/table.mdx +1 -28
  111. package/src/content/pages/base/textarea.mdx +1 -11
  112. package/src/content/pages/base/theme-select.mdx +15 -0
  113. package/src/content/pages/blocks/_categories.mdx +3 -5
  114. package/src/content/pages/blocks/{footer.mdx → _footer.mdx} +10 -4
  115. package/src/content/pages/blocks/{header.mdx → _header.mdx} +2 -7
  116. package/src/content/pages/blocks/_jobs.mdx +1 -2
  117. package/src/content/pages/blocks/{prices.mdx → _prices.mdx} +5 -7
  118. package/src/content/pages/blocks/_product.mdx +1 -2
  119. package/src/content/pages/blocks/_products.mdx +1 -2
  120. package/src/content/pages/blocks/_stats.mdx +1 -1
  121. package/src/content/pages/blocks/{_banner.mdx → banner.mdx} +2 -2
  122. package/src/content/pages/blocks/colleagues.mdx +6 -8
  123. package/src/content/pages/blocks/contact.mdx +69 -0
  124. package/src/content/pages/blocks/content.mdx +1 -19
  125. package/src/content/pages/blocks/cta.mdx +2 -25
  126. package/src/content/pages/blocks/features.mdx +2 -3
  127. package/src/content/pages/blocks/hero.mdx +5 -3
  128. package/src/content/pages/blocks/intro.mdx +2 -5
  129. package/src/content/pages/blocks/posts.mdx +9 -2
  130. package/src/content/pages/blocks/reviews.mdx +23 -18
  131. package/src/content/pages/index.mdx +19 -20
  132. package/src/content/pages/layouts/docslayout.mdx +5 -0
  133. package/src/content/pages/layouts/layout.mdx +21 -0
  134. package/src/content/pages/layouts/pagelayout.mdx +21 -0
  135. package/src/content/pages/overview/components.mdx +70 -0
  136. package/src/content/pages/overview/content-layer.mdx +128 -0
  137. package/src/content/pages/overview/{theming.mdx → customization.mdx} +6 -6
  138. package/src/content/pages/overview/frameworks.mdx +4 -4
  139. package/src/content/pages/overview/installation.mdx +37 -3
  140. package/src/content/pages/overview/introduction.mdx +6 -2
  141. package/src/content/pages/schemas/page.mdx +11 -0
  142. package/src/content/pages/schemas/preset.mdx +9 -0
  143. package/src/content/pages/showcase/anti-slip-profiles.md +5 -0
  144. package/src/content/pages/showcase/fulldev-ui.md +5 -0
  145. package/src/content/pages/showcase/lavis-detailing.md +5 -0
  146. package/src/content/pages/showcase/leren-trainingsacteren.md +5 -0
  147. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +5 -0
  148. package/src/content/{records/record.yml → pages/showcase/record.md} +2 -0
  149. package/src/content/pages/showcase/sloepverhuur-bolsward.md +5 -0
  150. package/src/content/pages/showcase/stark-vulcanising-products.md +5 -0
  151. package/src/content/pages/showcase/the-gym-haren.md +5 -0
  152. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +5 -0
  153. package/src/content/pages/showcase.mdx +11 -41
  154. package/src/content/pages/typography/_tagline.mdx +1 -2
  155. package/src/content/pages/typography/heading.mdx +1 -2
  156. package/src/content/pages/typography/label.mdx +1 -2
  157. package/src/content/pages/typography/link.mdx +1 -13
  158. package/src/content/pages/typography/list.mdx +1 -2
  159. package/src/content/pages/typography/text.mdx +1 -2
  160. package/src/content/presets/base.yml +70 -0
  161. package/src/content/presets/blocks.yml +4 -0
  162. package/src/content/presets/docs.yml +65 -0
  163. package/src/css/color.css +0 -82
  164. package/src/css/custom.css +9 -56
  165. package/src/css/size.css +10 -0
  166. package/src/css/space.css +0 -8
  167. package/src/css/styles.css +0 -15
  168. package/src/images/avatar-1.yml +1 -0
  169. package/src/images/favicon.svg +16 -0
  170. package/src/integration/generate-colors.ts +2 -0
  171. package/src/integration/index.ts +49 -7
  172. package/src/layouts/BlockLayout.astro +10 -15
  173. package/src/layouts/ContactLayout.astro +21 -0
  174. package/src/layouts/ContentLayout.astro +16 -0
  175. package/src/layouts/DocsLayout.astro +85 -0
  176. package/src/layouts/Layout.astro +111 -133
  177. package/src/layouts/OverviewLayout.astro +22 -32
  178. package/src/layouts/PageLayout.astro +7 -24
  179. package/src/layouts/PostLayout.astro +8 -19
  180. package/src/layouts/ProductLayout.astro +9 -22
  181. package/src/loaders/imageLoader.ts +26 -0
  182. package/src/pages/[...page].astro +26 -23
  183. package/src/schemas/components/avatar.ts +3 -0
  184. package/src/schemas/components/avatars.ts +4 -0
  185. package/src/schemas/components/badge.ts +13 -0
  186. package/src/schemas/components/button.ts +16 -0
  187. package/src/schemas/components/buttons.ts +4 -0
  188. package/src/schemas/components/card.ts +25 -0
  189. package/src/schemas/components/cards.ts +4 -0
  190. package/src/schemas/components/channel.ts +13 -0
  191. package/src/schemas/components/channels.ts +4 -0
  192. package/src/schemas/components/footer.ts +24 -0
  193. package/src/schemas/components/header.ts +10 -0
  194. package/src/schemas/components/heading.ts +3 -0
  195. package/src/schemas/components/icon.ts +3 -0
  196. package/src/schemas/components/image.ts +18 -0
  197. package/src/schemas/components/images.ts +4 -0
  198. package/src/schemas/components/list.ts +3 -0
  199. package/src/schemas/components/logo.ts +3 -0
  200. package/src/schemas/components/price.ts +3 -0
  201. package/src/schemas/components/rating.ts +15 -0
  202. package/src/schemas/components/section.ts +15 -0
  203. package/src/schemas/components/sections.ts +3 -0
  204. package/src/schemas/components/social.ts +3 -0
  205. package/src/schemas/components/socials.ts +4 -0
  206. package/src/schemas/components/tagline.ts +3 -0
  207. package/src/schemas/components/text.ts +3 -0
  208. package/src/schemas/components/writeup.ts +20 -0
  209. package/src/schemas/imageSchema.ts +12 -0
  210. package/src/schemas/pageSchema.ts +63 -0
  211. package/src/schemas/presetSchema.ts +29 -0
  212. package/src/schemas/utils/categories.ts +3 -0
  213. package/src/schemas/utils/component.ts +17 -0
  214. package/src/schemas/utils/navigation.ts +53 -0
  215. package/src/schemas/{utils.ts → utils/pathSchema.ts} +2 -11
  216. package/src/types/global-props.d.ts +16 -0
  217. package/src/types/virtual-modules.d.ts +5 -0
  218. package/src/utils/_archive/Childmorphic.ts +1 -1
  219. package/src/utils/_archive/mergeEntries.ts +28 -0
  220. package/src/utils/getCategoryPages.ts +11 -0
  221. package/src/utils/getChildPages.ts +16 -0
  222. package/src/utils/getSiblingPages.ts +14 -0
  223. package/tsconfig.json +1 -2
  224. package/public/favicon/site.webmanifest +0 -19
  225. package/public/images/avatars/1.jpeg +0 -0
  226. package/public/images/avatars/2.jpeg +0 -0
  227. package/public/images/avatars/3.jpeg +0 -0
  228. package/public/images/avatars/300/1.jpeg +0 -0
  229. package/public/images/avatars/300/2.jpeg +0 -0
  230. package/public/images/avatars/300/3.jpeg +0 -0
  231. package/public/images/avatars/300/4.jpeg +0 -0
  232. package/public/images/avatars/4.jpeg +0 -0
  233. package/public/images/avatars/5.jpeg +0 -0
  234. package/public/images/avatars/6.jpeg +0 -0
  235. package/public/images/avatars/7.jpeg +0 -0
  236. package/public/images/avatars/8.jpeg +0 -0
  237. package/public/images/blocks/colleagues.png +0 -0
  238. package/public/images/blocks/content.png +0 -0
  239. package/public/images/blocks/cta.png +0 -0
  240. package/public/images/blocks/features.png +0 -0
  241. package/public/images/blocks/footer.png +0 -0
  242. package/public/images/blocks/header.png +0 -0
  243. package/public/images/blocks/hero.png +0 -0
  244. package/public/images/blocks/intro.png +0 -0
  245. package/public/images/blocks/posts.png +0 -0
  246. package/public/images/blocks/prices.png +0 -0
  247. package/public/images/blocks/reviews.png +0 -0
  248. package/public/images/logo-placeholder.svg +0 -1
  249. package/src/components/Bento.astro +0 -43
  250. package/src/components/Block.astro +0 -157
  251. package/src/components/Blocks.astro +0 -5
  252. package/src/components/Box.astro +0 -63
  253. package/src/components/Carousel.astro +0 -54
  254. package/src/components/Column.astro +0 -73
  255. package/src/components/Grid.astro +0 -32
  256. package/src/components/Masonry.astro +0 -42
  257. package/src/components/Root.astro +0 -94
  258. package/src/components/Row.astro +0 -49
  259. package/src/components/Split.astro +0 -59
  260. package/src/components/Spread.astro +0 -46
  261. package/src/components/Stack.astro +0 -36
  262. package/src/components/Wrap.astro +0 -42
  263. package/src/components/docs/NavigationButtons.astro +0 -59
  264. package/src/components/experimental/Channel.astro +0 -74
  265. package/src/components/experimental/Price.astro +0 -40
  266. package/src/content/pages/_changelog.mdx +0 -10
  267. package/src/content/pages/_segment/footer.mdx +0 -244
  268. package/src/content/pages/_segment/header.mdx +0 -210
  269. package/src/content/pages/base/_image.mdx +0 -14
  270. package/src/content/pages/blocks.mdx +0 -10
  271. package/src/content/pages/overview/integration.mdx +0 -37
  272. package/src/content/pages/structure/_row.mdx +0 -23
  273. package/src/content/pages/structure/_wrap.mdx +0 -25
  274. package/src/content/pages/structure/carousel.mdx +0 -31
  275. package/src/content/pages/structure/column.mdx +0 -21
  276. package/src/content/pages/structure/grid.mdx +0 -26
  277. package/src/content/pages/structure/masonry.mdx +0 -32
  278. package/src/content/pages/structure/split.mdx +0 -21
  279. package/src/content/pages/structure/spread.mdx +0 -21
  280. package/src/content/pages/structure/stack.mdx +0 -22
  281. package/src/content/settings/base.yml +0 -55
  282. package/src/content/settings/components.yml +0 -29
  283. package/src/layouts/BlockOverviewLayout.astro +0 -39
  284. package/src/layouts/ComponentLayout.astro +0 -23
  285. package/src/layouts/JobsLayout.astro +0 -40
  286. package/src/schemas/base.ts +0 -90
  287. package/src/schemas/block.ts +0 -15
  288. package/src/schemas/card.ts +0 -3
  289. package/src/schemas/page.ts +0 -43
  290. package/src/utils/mergeEntries.ts +0 -28
  291. /package/{public/showcase → src/images}/anti-slip-profiles.webp +0 -0
  292. /package/{public/images/avatars/500/1.jpeg → src/images/avatar-1.jpeg} +0 -0
  293. /package/{public/images/avatars/500/2.jpeg → src/images/avatar-2.jpeg} +0 -0
  294. /package/{public/images/avatars/500/3.jpeg → src/images/avatar-3.jpeg} +0 -0
  295. /package/{public/images/avatars/500/4.jpeg → src/images/avatar-4.jpeg} +0 -0
  296. /package/{public → src}/images/avatar-placeholder.jpg +0 -0
  297. /package/{public → src}/images/block-code.png +0 -0
  298. /package/{public → src}/images/component-code.png +0 -0
  299. /package/{public/showcase → src/images}/fulldev-ui.webp +0 -0
  300. /package/{public/showcase → src/images}/lavis-detailing.webp +0 -0
  301. /package/{public/showcase → src/images}/leren-trainingsacteren.webp +0 -0
  302. /package/{public/showcase → src/images}/miele-witgoedcenter-amsterdam.webp +0 -0
  303. /package/{public → src}/images/og-image.png +0 -0
  304. /package/{public → src}/images/placeholder-center.webp +0 -0
  305. /package/{public → src}/images/placeholder-landscape-dark.png +0 -0
  306. /package/{public → src}/images/placeholder-landscape.webp +0 -0
  307. /package/{public → src}/images/placeholder-portrait.webp +0 -0
  308. /package/{public → src}/images/placeholder-right.webp +0 -0
  309. /package/{public → src}/images/placeholder.webp +0 -0
  310. /package/{public/showcase → src/images}/sloepverhuur-bolsward.webp +0 -0
  311. /package/{public/showcase → src/images}/stark-vulcanising-products.webp +0 -0
  312. /package/{public/showcase → src/images}/the-gym-haren.webp +0 -0
  313. /package/{public/showcase → src/images}/van-dillen-antieke-bouwmaterialen.webp +0 -0
@@ -1,169 +1,147 @@
1
1
  ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
2
3
  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 Button from 'fulldev-ui/components/Button.astro'
4
+ import Banner from 'fulldev-ui/blocks/Banner.astro'
5
+ import Footer from 'fulldev-ui/blocks/Footer.astro'
6
+ import Element from 'fulldev-ui/components/Element.astro'
6
7
  import Head from 'fulldev-ui/components/Head.astro'
7
8
  import Header from 'fulldev-ui/components/Header.astro'
9
+ import Sections from 'fulldev-ui/components/sections.astro'
8
10
  import Sidebar from 'fulldev-ui/components/Sidebar.astro'
9
11
  import Toc from 'fulldev-ui/components/Toc.astro'
10
- import NavigationButtons from '../components/docs/NavigationButtons.astro'
11
-
12
- type Props = Partial<CollectionEntry<'pages'>> & {
13
- class?: string
14
- theme?: 'light' | 'dark'
15
- }
16
-
17
- const { slug, data, theme, class: classes, render } = Astro.props
18
- const { logo, header, footer, footers, channels, sidebar, toc } = data || {}
19
-
20
- const { headings } = render ? await render() : { headings: [] }
21
-
22
- const h2Headings = headings.filter((heading: any) => heading.depth === 2)
12
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
13
+
14
+ type Props = GlobalProps &
15
+ HTMLAttributes<'html'> & {
16
+ render: CollectionEntry<'pages'>['render']
17
+ slug: CollectionEntry<'pages'>['slug']
18
+ header?: ComponentProps<typeof Header>
19
+ footer?: ComponentProps<typeof Footer>
20
+ sections?: ComponentProps<typeof Sections>['sections']
21
+ banner?: any
22
+ toc?: any
23
+ sidebar?: any
24
+ navigation?: any
25
+ themeselect?: any
26
+ code?: {
27
+ head?: string
28
+ body?: string
29
+ }
30
+ title?: string
31
+ description?: string
32
+ image?: string
33
+ seo?: {
34
+ title?: string
35
+ description?: string
36
+ image?: string
37
+ }
38
+ }
39
+
40
+ const {
41
+ render,
42
+ header,
43
+ navigation,
44
+ footer,
45
+ sidebar,
46
+ toc,
47
+ sections,
48
+ theme,
49
+ banner,
50
+ code,
51
+ themeselect,
52
+ ...rest
53
+ } = Astro.props
23
54
  ---
24
55
 
25
56
  <!doctype html>
26
- <html
27
- lang="nl"
28
- class:list={[
29
- slug,
30
- {
31
- 'theme-dark': theme === 'dark',
32
- 'theme-light': theme === 'light',
33
- },
34
- ]}
35
- >
57
+ <html {...rest}>
36
58
  <Head {...Astro.props} />
37
- <body
38
- class:list={[
39
- classes,
40
- {
41
- 'has-sidebar': sidebar,
42
- 'has-toc': toc,
43
- 'theme-dark': theme === 'dark',
44
- 'theme-light': theme === 'light',
45
- },
46
- ]}
47
- >
48
- <Header {...header} />
59
+ <Element as="body">
60
+ <slot name="banner">
61
+ <Banner text={banner} />
62
+ </slot>
63
+ <slot name="header">
64
+ <Header
65
+ open={header}
66
+ {...navigation}
67
+ {themeselect}
68
+ {...header}
69
+ />
70
+ </slot>
49
71
  <div class="core">
50
- <Sidebar {sidebar} />
72
+ <slot name="sidebar">
73
+ <Sidebar
74
+ open={sidebar}
75
+ {...navigation}
76
+ {...sidebar}
77
+ />
78
+ </slot>
51
79
  <main data-pagefind-body>
80
+ <slot />
81
+ <Sections {sections} />
82
+ </main>
83
+ <slot name="toc">
52
84
  <Toc
53
- toc={toc}
54
- headings={h2Headings}
85
+ {render}
86
+ {...toc}
55
87
  />
56
- <div class="blocks">
57
- <slot />
58
- <NavigationButtons {sidebar} />
59
- </div>
60
- </main>
88
+ </slot>
61
89
  </div>
90
+ <slot name="footer">
91
+ <Footer {...footer} />
92
+ </slot>
93
+ <Fragment set:html={code?.body} />
62
94
 
63
- {
64
- channels?.whatsapp && (
65
- <Button
66
- variant="primary"
67
- color="brand"
68
- icon="brand-whatsapp"
69
- size="lg"
70
- href={`https://wa.me/${channels.whatsapp}`}
71
- style={{
72
- position: 'fixed',
73
- right: 'var(--space-4)',
74
- bottom: 'var(--space-4)',
75
- backgroundColor: '#46A758',
76
- }}
77
- />
78
- )
79
- }
80
- <Block
81
- _bookshop_name="Footer"
82
- {logo}
83
- {...footer}
84
- />
85
- <Blocks {...footers} />
86
-
87
- <Fragment set:html={data?.code?.body} />
88
95
  <style lang="scss" is:global>
89
96
  @layer fulldev {
90
- :root {
91
- --screen: 1536px;
92
- --gutter: max(4vw, calc(100vw - var(--screen)) / 2);
93
- --gutter-left: var(--gutter);
94
- --gutter-right: var(--gutter);
95
- --sidebar-width: 0px;
96
- --toc-width: 0px;
97
- --header-height: calc(
98
- var(--text-2) + 2 * var(--space-4) + 2 * var(--space-3)
99
- );
100
- }
101
-
102
- html,
103
- body {
104
- box-sizing: border-box;
105
- margin: 0;
106
- background-color: var(--color-background);
107
- padding: 0;
97
+ html {
108
98
  width: 100%;
109
99
  min-height: 100vh;
110
- color: var(--base-11);
100
+ scroll-behavior: smooth;
111
101
  color-scheme: var(--color-scheme);
112
102
  font-size: var(--text-2);
113
- font-family: var(--font-family);
103
+ font-family: 'Inter', sans-serif;
114
104
  }
115
105
 
116
106
  body {
117
- display: flex;
118
- flex-direction: column;
107
+ --screen: 100vw;
119
108
 
120
- @media (min-width: 1024px) {
121
- &.has-sidebar .core {
122
- --gutter-left: var(--space-6);
123
- --sidebar-width: calc(var(--gutter) + 200px);
124
-
125
- display: grid;
126
- grid-template-columns: var(--sidebar-width) minmax(0, 1fr);
127
- }
128
-
129
- &.has-toc main {
130
- --gutter-right: var(--space-6);
131
- --toc-width: calc(var(--gutter) + 200px);
132
-
133
- display: grid;
134
- grid-template-columns: minmax(0, 1fr) var(--toc-width);
135
- }
136
- }
137
-
138
- .header {
139
- width: 100%;
140
- height: var(--header-height);
141
- }
109
+ background-color: var(--base-2);
110
+ width: 100%;
111
+ color: var(--base-11);
142
112
 
143
113
  .core {
144
- .sidebar {
145
- position: sticky;
146
- top: 0;
147
- padding-left: var(--gutter);
148
- }
114
+ display: flex;
115
+ position: relative;
149
116
 
150
117
  main {
151
- .toc {
152
- position: sticky;
153
- top: 0;
154
- order: 1;
155
- padding-right: var(--gutter);
156
- }
157
-
158
- .blocks {
159
- display: flex;
160
- flex-direction: column;
161
- width: 100%;
162
- }
118
+ --screen: 1280px;
119
+
120
+ display: flex;
121
+ flex: 1;
122
+ flex-direction: column;
123
+ background-color: var(--color-background);
124
+ width: 100%;
125
+ max-width: 100vw;
126
+ min-height: 100vh;
127
+ overflow-x: hidden;
163
128
  }
164
129
  }
165
130
  }
166
131
  }
167
132
  </style>
168
- </body>
133
+ </Element>
169
134
  </html>
135
+
136
+ <script>
137
+ const setTheme = (document: Document) => {
138
+ const theme = localStorage.getItem('theme') || ''
139
+ document.body.classList.add(`theme-${theme}`)
140
+ }
141
+
142
+ setTheme(document)
143
+
144
+ document.addEventListener('astro:before-swap', (event) => {
145
+ setTheme(event.newDocument)
146
+ })
147
+ </script>
@@ -1,45 +1,35 @@
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 Categories from 'fulldev-ui/blocks/Categories.astro'
5
+ import Intro from 'fulldev-ui/blocks/Intro.astro'
6
+ import Products from 'fulldev-ui/blocks/Products.astro'
7
+ import Sections from 'fulldev-ui/components/sections.astro'
7
8
  import Layout from 'fulldev-ui/layouts/Layout.astro'
9
+ import { getCategoryPages } from 'fulldev-ui/utils/getCategoryPages'
10
+ import { getChildPages } from 'fulldev-ui/utils/getChildPages.ts'
8
11
 
9
- type Props = CollectionEntry<'pages'>
12
+ type Props = ComponentProps<typeof Layout>
10
13
 
11
- const { data, render } = Astro.props
12
- const { sections, blocks, children, references } = data
13
- const { Content } = await render()
14
+ const { slug, render, sections, children, ...rest } = Astro.props
15
+
16
+ const childPages = await getChildPages(slug)
17
+ const categoryPages = await getCategoryPages(slug)
18
+ // const siblingPages = await getSiblingPages(slug)
14
19
  ---
15
20
 
16
21
  <Layout {...Astro.props}>
17
- <Block
18
- _bookshop_name="Hero"
19
- size="lg"
20
- {...data}
21
- />
22
- <Block
23
- _bookshop_name="Categories"
24
- source="children"
22
+ <Intro {...rest} />
23
+ <Categories
24
+ pages={childPages}
25
25
  structure="grid"
26
- {...children ?? {}}
26
+ panel
27
27
  />
28
- <Block
29
- _bookshop_name="ProductDeck"
30
- heading={data.title && references
31
- ? `Alle ${data.title.toLowerCase()}`
32
- : undefined}
33
- source="references"
28
+ <Products
29
+ pages={categoryPages}
34
30
  structure="grid"
35
- {...references ?? {}}
36
31
  />
37
- <Section style={{ '--screen': '768px' }}>
38
- <Prose id="prose">
39
- <Content />
40
- </Prose>
41
- </Section>
42
- <Blocks {...sections} />
43
- <Blocks {...blocks} />
32
+ <Article style={{ '--screen': '768px' }} />
33
+ <Sections {sections} />
44
34
  <slot />
45
35
  </Layout>
@@ -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,12 +1,10 @@
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')
9
- return pages.map((page: any) => ({
7
+ return pages.map((page) => ({
10
8
  params: {
11
9
  page: page.slug === 'index' ? undefined : page.slug,
12
10
  },
@@ -14,28 +12,33 @@ export async function getStaticPaths() {
14
12
  }))
15
13
  }
16
14
 
17
- // @ts-ignore
18
- const { data, slug, ...rest } = Astro.props
15
+ const { data, ...rest } = Astro.props
19
16
 
20
- const merged = (await mergeEntries({ data, slug })) as any
17
+ const { component, ...restData } = data
21
18
 
22
- const packageLayouts = import.meta.glob('../layouts/**/*.astro')
23
- const userLayouts = import.meta.glob('/src/layouts/**/*.astro')
24
-
25
- const mapBlockKeys = (blocks: any) =>
26
- mapKeys(blocks, (key: any) => key.split('/').pop().split('.').shift())
27
-
28
- const components = {
29
- ...mapBlockKeys(packageLayouts),
30
- ...mapBlockKeys(userLayouts),
19
+ const allComponents = {
20
+ ...import.meta.glob('/src/**/*.astro'),
21
+ ...import.meta.glob('../../**/*.astro'),
31
22
  }
32
23
 
33
- const found = components[(merged.data._layout ?? 'PageLayout') as string] as any
34
- const functioncomp = found && (await found())
35
- 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
36
30
  ---
37
31
 
38
- <Layout
39
- data={merged.data}
40
- {...rest}
41
- />
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)