fulldev-ui 0.3.36 → 0.4.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 (287) hide show
  1. package/.github/ISSUE_TEMPLATE/bug_report.yml +57 -0
  2. package/.github/ISSUE_TEMPLATE/config.yml +5 -0
  3. package/.github/ISSUE_TEMPLATE/feature_request.yml +39 -0
  4. package/.github/pull_request_template.md +23 -0
  5. package/.github/workflows/github-releases-to-discord.yml +21 -0
  6. package/.prettierignore +15 -0
  7. package/.prettierrc.yaml +34 -0
  8. package/.vscode/extensions.json +4 -0
  9. package/.vscode/launch.json +11 -0
  10. package/.vscode/settings.json +23 -0
  11. package/CHANGELOG.md +100 -0
  12. package/CONTRIBUTING.md +102 -0
  13. package/LICENCE +21 -0
  14. package/README.md +9 -7
  15. package/astro.config.ts +44 -0
  16. package/package.json +42 -27
  17. package/pnpm-lock.yaml +5515 -0
  18. package/public/favicon/android-chrome-192x192.png +0 -0
  19. package/public/favicon/android-chrome-512x512.png +0 -0
  20. package/public/favicon/apple-touch-icon.png +0 -0
  21. package/public/favicon/browserconfig.xml +9 -0
  22. package/public/favicon/favicon-16x16.png +0 -0
  23. package/public/favicon/favicon-32x32.png +0 -0
  24. package/public/favicon/favicon.ico +0 -0
  25. package/public/favicon/mstile-150x150.png +0 -0
  26. package/public/favicon/safari-pinned-tab.svg +17 -0
  27. package/public/favicon/site.webmanifest +19 -0
  28. package/public/images/avatar-placeholder.jpg +0 -0
  29. package/public/images/avatars/1.jpeg +0 -0
  30. package/public/images/avatars/2.jpeg +0 -0
  31. package/public/images/avatars/3.jpeg +0 -0
  32. package/public/images/avatars/300/1.jpeg +0 -0
  33. package/public/images/avatars/300/2.jpeg +0 -0
  34. package/public/images/avatars/300/3.jpeg +0 -0
  35. package/public/images/avatars/300/4.jpeg +0 -0
  36. package/public/images/avatars/4.jpeg +0 -0
  37. package/public/images/avatars/5.jpeg +0 -0
  38. package/public/images/avatars/500/1.jpeg +0 -0
  39. package/public/images/avatars/500/2.jpeg +0 -0
  40. package/public/images/avatars/500/3.jpeg +0 -0
  41. package/public/images/avatars/500/4.jpeg +0 -0
  42. package/public/images/avatars/6.jpeg +0 -0
  43. package/public/images/avatars/7.jpeg +0 -0
  44. package/public/images/avatars/8.jpeg +0 -0
  45. package/public/images/block-code.png +0 -0
  46. package/public/images/blocks/colleagues.png +0 -0
  47. package/public/images/blocks/content.png +0 -0
  48. package/public/images/blocks/cta.png +0 -0
  49. package/public/images/blocks/features.png +0 -0
  50. package/public/images/blocks/footer.png +0 -0
  51. package/public/images/blocks/header.png +0 -0
  52. package/public/images/blocks/hero.png +0 -0
  53. package/public/images/blocks/intro.png +0 -0
  54. package/public/images/blocks/posts.png +0 -0
  55. package/public/images/blocks/prices.png +0 -0
  56. package/public/images/blocks/reviews.png +0 -0
  57. package/public/images/component-code.png +0 -0
  58. package/public/images/logo-placeholder.svg +1 -0
  59. package/public/images/placeholder-center.webp +0 -0
  60. package/public/images/placeholder-landscape-dark.png +0 -0
  61. package/public/images/placeholder-landscape.webp +0 -0
  62. package/public/images/placeholder-portrait.webp +0 -0
  63. package/public/images/placeholder-right.webp +0 -0
  64. package/public/images/placeholder.webp +0 -0
  65. package/siteicon.png +0 -0
  66. package/src/blocks/Categories.astro +12 -0
  67. package/src/blocks/Colleagues.astro +12 -0
  68. package/src/blocks/Contact.astro +152 -0
  69. package/src/blocks/Content.astro +12 -0
  70. package/src/blocks/Cta.astro +14 -0
  71. package/src/blocks/Features.astro +11 -0
  72. package/src/blocks/Footer.astro +7 -0
  73. package/src/blocks/Header.astro +7 -0
  74. package/src/blocks/Hero.astro +16 -0
  75. package/src/blocks/Intro.astro +19 -0
  76. package/src/blocks/Jobs.astro +12 -0
  77. package/src/blocks/Posts.astro +11 -0
  78. package/src/blocks/Prices.astro +22 -0
  79. package/src/blocks/Product.astro +64 -0
  80. package/src/blocks/Products.astro +11 -0
  81. package/src/blocks/Reviews.astro +13 -0
  82. package/src/components/{base/Avatar.astro → Avatar.astro} +7 -11
  83. package/src/components/{base/Badge.astro → Badge.astro} +36 -22
  84. package/src/components/{structure/Bento.astro → Bento.astro} +6 -9
  85. package/src/components/Block.astro +157 -0
  86. package/src/components/Blocks.astro +5 -0
  87. package/src/components/Box.astro +60 -0
  88. package/src/components/Button.astro +140 -0
  89. package/src/components/Card.astro +212 -0
  90. package/src/components/{structure/Carousel.astro → Carousel.astro} +13 -16
  91. package/src/components/Checkbox.astro +63 -0
  92. package/src/components/{structure/Column.astro → Column.astro} +14 -9
  93. package/src/components/Dialog.astro +65 -0
  94. package/src/components/Drawer.astro +99 -0
  95. package/src/components/Footer.astro +144 -0
  96. package/src/components/{structure/Grid.astro → Grid.astro} +7 -10
  97. package/src/components/Head.astro +85 -0
  98. package/src/components/Header.astro +204 -0
  99. package/src/components/Heading.astro +79 -0
  100. package/src/components/{base/Icon.astro → Icon.astro} +7 -9
  101. package/src/components/{base/Image.astro → Image.astro} +32 -30
  102. package/src/components/Input.astro +119 -0
  103. package/src/components/{typography/Label.astro → Label.astro} +12 -12
  104. package/src/components/{typography/Link.astro → Link.astro} +15 -13
  105. package/src/components/List.astro +41 -0
  106. package/src/components/{structure/Masonry.astro → Masonry.astro} +9 -11
  107. package/src/components/Rating.astro +82 -0
  108. package/src/components/{_Component.astro → Root.astro} +7 -11
  109. package/src/components/{structure/Row.astro → Row.astro} +6 -9
  110. package/src/components/Search.astro +62 -0
  111. package/src/components/Section.astro +274 -0
  112. package/src/components/Select.astro +144 -0
  113. package/src/components/Sidebar.astro +71 -0
  114. package/src/components/{structure/Split.astro → Split.astro} +6 -9
  115. package/src/components/{structure/Spread.astro → Spread.astro} +6 -9
  116. package/src/components/Switch.astro +114 -0
  117. package/src/components/Table.astro +121 -0
  118. package/src/components/Tagline.astro +35 -0
  119. package/src/components/Text.astro +43 -0
  120. package/src/components/Textarea.astro +105 -0
  121. package/src/components/Toc.astro +52 -0
  122. package/src/components/{structure/Wrap.astro → Wrap.astro} +5 -10
  123. package/src/components/docs/DecorativeBox.astro +15 -0
  124. package/src/components/docs/PropsTable.astro +95 -0
  125. package/src/components/experimental/Channel.astro +15 -10
  126. package/src/components/experimental/Form.astro +34 -0
  127. package/src/components/experimental/Gallery.astro +180 -0
  128. package/src/components/experimental/GalleryVertical.astro +161 -0
  129. package/src/components/{base → experimental}/Logo.astro +3 -5
  130. package/src/components/experimental/Price.astro +17 -17
  131. package/src/components/experimental/Prose.astro +154 -0
  132. package/src/components/{base → experimental}/Video.astro +1 -1
  133. package/src/components/experimental/Window.astro +173 -0
  134. package/src/content/config.ts +16 -13
  135. package/src/content/pages/_changelog.mdx +10 -0
  136. package/src/content/pages/_segment/footer.mdx +244 -0
  137. package/src/content/pages/_segment/header.mdx +210 -0
  138. package/src/content/pages/base/_dialog.mdx +17 -0
  139. package/src/content/pages/base/_drawer.mdx +17 -0
  140. package/src/content/pages/base/_image.mdx +14 -0
  141. package/src/content/pages/base/_switch.mdx +33 -0
  142. package/src/content/pages/base/badge.mdx +70 -0
  143. package/src/content/pages/base/button.mdx +71 -0
  144. package/src/content/pages/base/card.mdx +114 -0
  145. package/src/content/pages/base/checkbox.mdx +43 -0
  146. package/src/content/pages/base/icon.mdx +54 -0
  147. package/src/content/pages/base/input.mdx +67 -0
  148. package/src/content/pages/base/rating.mdx +66 -0
  149. package/src/content/pages/base/section.mdx +79 -0
  150. package/src/content/pages/base/select.mdx +77 -0
  151. package/src/content/pages/base/table.mdx +133 -0
  152. package/src/content/pages/base/textarea.mdx +73 -0
  153. package/src/content/pages/blocks/_banner.mdx +13 -0
  154. package/src/content/pages/blocks/_categories.mdx +149 -0
  155. package/src/content/pages/blocks/_jobs.mdx +37 -0
  156. package/src/content/pages/blocks/_product.mdx +29 -0
  157. package/src/content/pages/blocks/_products.mdx +55 -0
  158. package/src/content/pages/blocks/_stats.mdx +34 -0
  159. package/src/content/pages/blocks/colleagues.mdx +42 -0
  160. package/src/content/pages/blocks/content.mdx +101 -0
  161. package/src/content/pages/blocks/cta.mdx +192 -0
  162. package/src/content/pages/blocks/features.mdx +134 -0
  163. package/src/content/pages/blocks/footer.mdx +71 -0
  164. package/src/content/pages/blocks/header.mdx +192 -0
  165. package/src/content/pages/blocks/hero.mdx +97 -0
  166. package/src/content/pages/blocks/intro.mdx +132 -0
  167. package/src/content/pages/blocks/posts.mdx +40 -0
  168. package/src/content/pages/blocks/prices.mdx +126 -0
  169. package/src/content/pages/blocks/reviews.mdx +249 -0
  170. package/src/content/pages/blocks.mdx +10 -0
  171. package/src/content/pages/index.mdx +65 -0
  172. package/src/content/pages/overview/frameworks.mdx +180 -0
  173. package/src/content/pages/overview/installation.mdx +20 -0
  174. package/src/content/pages/overview/integration.mdx +37 -0
  175. package/src/content/pages/overview/introduction.mdx +20 -0
  176. package/src/content/pages/overview/theming.mdx +83 -0
  177. package/src/content/pages/structure/_row.mdx +23 -0
  178. package/src/content/pages/structure/_wrap.mdx +25 -0
  179. package/src/content/pages/structure/carousel.mdx +31 -0
  180. package/src/content/pages/structure/column.mdx +21 -0
  181. package/src/content/pages/structure/grid.mdx +26 -0
  182. package/src/content/pages/structure/masonry.mdx +32 -0
  183. package/src/content/pages/structure/split.mdx +21 -0
  184. package/src/content/pages/structure/spread.mdx +21 -0
  185. package/src/content/pages/typography/_tagline.mdx +36 -0
  186. package/src/content/pages/typography/heading.mdx +74 -0
  187. package/src/content/pages/typography/label.mdx +42 -0
  188. package/src/content/pages/typography/link.mdx +63 -0
  189. package/src/content/pages/typography/list.mdx +52 -0
  190. package/src/content/pages/typography/text.mdx +62 -0
  191. package/src/content/records/record.yml +1 -0
  192. package/src/content/settings/base.yml +48 -0
  193. package/src/content/settings/components.yml +27 -0
  194. package/src/css/color.css +6 -67
  195. package/src/css/custom.css +59 -0
  196. package/src/css/size.css +130 -0
  197. package/src/css/space.css +47 -26
  198. package/src/css/styles.css +4 -2
  199. package/src/env.d.ts +1 -1
  200. package/src/integration/generate-colors.ts +637 -0
  201. package/src/integration/index.ts +158 -0
  202. package/src/integration/tailwind-plugin.ts +80 -0
  203. package/src/integration/unocss-preset.ts +84 -0
  204. package/src/layouts/BlockLayout.astro +24 -0
  205. package/src/layouts/BlockOverviewLayout.astro +39 -0
  206. package/src/layouts/ComponentLayout.astro +23 -0
  207. package/src/layouts/JobsLayout.astro +40 -0
  208. package/src/layouts/Layout.astro +168 -0
  209. package/src/layouts/OverviewLayout.astro +45 -0
  210. package/src/layouts/PageLayout.astro +32 -0
  211. package/src/layouts/PostLayout.astro +32 -0
  212. package/src/layouts/ProductLayout.astro +31 -0
  213. package/src/pages/[...page].astro +41 -0
  214. package/src/schemas/base.ts +81 -0
  215. package/src/schemas/block.ts +15 -0
  216. package/src/schemas/card.ts +3 -0
  217. package/src/schemas/page.ts +43 -0
  218. package/src/schemas/utils.ts +22 -0
  219. package/src/utils/mergeEntries.ts +28 -0
  220. package/tsconfig.json +10 -1
  221. package/.astro/settings.json +0 -5
  222. package/.astro/types.d.ts +0 -147
  223. package/.env +0 -1
  224. package/astro.config.mjs +0 -6
  225. package/src/components/_Block.astro +0 -20
  226. package/src/components/_Blocks.astro +0 -11
  227. package/src/components/_Children.astro +0 -31
  228. package/src/components/_archive/Body.astro +0 -37
  229. package/src/components/_archive/Main.astro +0 -28
  230. package/src/components/_archive/Nav.astro +0 -50
  231. package/src/components/_todo/Form.astro +0 -36
  232. package/src/components/_todo/Prose.astro +0 -139
  233. package/src/components/_todo/Writeup.astro +0 -24
  234. package/src/components/base/Button.astro +0 -123
  235. package/src/components/base/Rating.astro +0 -47
  236. package/src/components/base/checkbox/Checkbox.astro +0 -52
  237. package/src/components/base/checkbox/CheckboxElement.astro +0 -31
  238. package/src/components/base/input/Input.astro +0 -79
  239. package/src/components/base/input/InputElement.astro +0 -69
  240. package/src/components/base/radio/Radio.astro +0 -66
  241. package/src/components/base/radio/RadioElement.astro +0 -34
  242. package/src/components/base/select/Select.astro +0 -90
  243. package/src/components/base/select/SelectElement.astro +0 -56
  244. package/src/components/base/select/SelectOption.astro +0 -32
  245. package/src/components/base/switch/Switch.astro +0 -55
  246. package/src/components/base/switch/SwitchElement.astro +0 -84
  247. package/src/components/base/table/Table.astro +0 -57
  248. package/src/components/base/table/TableBody.astro +0 -38
  249. package/src/components/base/table/TableCell.astro +0 -30
  250. package/src/components/base/table/TableFooter.astro +0 -48
  251. package/src/components/base/table/TableHead.astro +0 -31
  252. package/src/components/base/table/TableHeader.astro +0 -44
  253. package/src/components/base/table/TableRow.astro +0 -46
  254. package/src/components/base/textarea/Textarea.astro +0 -79
  255. package/src/components/base/textarea/TextareaElement.astro +0 -68
  256. package/src/components/segment/Box.astro +0 -46
  257. package/src/components/segment/Card.astro +0 -114
  258. package/src/components/segment/Footer.astro +0 -94
  259. package/src/components/segment/Header.astro +0 -100
  260. package/src/components/segment/Section.astro +0 -103
  261. package/src/components/segment/_regels.md +0 -32
  262. package/src/components/typography/Heading.astro +0 -66
  263. package/src/components/typography/List.astro +0 -47
  264. package/src/components/typography/ListItem.astro +0 -36
  265. package/src/components/typography/Paragraph.astro +0 -36
  266. package/src/components/typography/Tagline.astro +0 -36
  267. package/src/components/typography/Text.astro +0 -37
  268. package/src/components/utility/Head.astro +0 -83
  269. package/src/components/utility/Layout.astro +0 -46
  270. package/src/content/pages/index.md +0 -2
  271. package/src/css/color.scss +0 -289
  272. package/src/css/size.scss +0 -296
  273. package/src/css/utils.scss +0 -16
  274. package/src/index.ts +0 -71
  275. package/src/integration/integration.ts +0 -88
  276. package/src/integration/tailwind.ts +0 -34
  277. package/src/integration/unocss.ts +0 -38
  278. /package/src/{_archive → utils/_archive}/Childmorphic.ts +0 -0
  279. /package/src/{_archive → utils/_archive}/getAllCollections.ts +0 -0
  280. /package/src/{_archive → utils/_archive}/getCollectionCascade.ts +0 -0
  281. /package/src/{_archive → utils/_archive}/getPathname.ts +0 -0
  282. /package/src/{_archive → utils/_archive}/staticPageSchema.ts +0 -0
  283. /package/src/{_archive → utils/_archive}/transform/transform.ts +0 -0
  284. /package/src/{_archive → utils/_archive}/transform/transformCasing.ts +0 -0
  285. /package/src/{_archive → utils/_archive}/transform/transformReferences.ts +0 -0
  286. /package/src/{_archive → utils/_archive}/transform/transformSelfs.ts +0 -0
  287. /package/src/{_archive → utils/_archive}/transform/transformUnderscores.ts +0 -0
@@ -0,0 +1,158 @@
1
+ import type { AstroIntegration } from 'astro'
2
+ import merge from 'deepmerge'
3
+ import virtual from 'vite-plugin-virtual'
4
+ import { generateRadixColors } from './generate-colors'
5
+
6
+ type Color = {
7
+ background: Parameters<typeof generateRadixColors>[0]['background']
8
+ base: Parameters<typeof generateRadixColors>[0]['gray']
9
+ brand: Parameters<typeof generateRadixColors>[0]['accent']
10
+ }
11
+
12
+ interface Config {
13
+ css?: string
14
+ injectRoutes?: boolean
15
+ colors: {
16
+ theme: 'light' | 'dark'
17
+ light?: Color
18
+ dark?: Color
19
+ }
20
+ }
21
+
22
+ const defaultConfig: Config = {
23
+ colors: {
24
+ theme: 'light',
25
+ light: {
26
+ background: '#fff',
27
+ base: '#000',
28
+ brand: '#000',
29
+ },
30
+ },
31
+ }
32
+ export default function fulldevIntegration(
33
+ userConfig?: Partial<Config>
34
+ ): AstroIntegration {
35
+ const config = merge(defaultConfig ?? {}, userConfig ?? {})
36
+
37
+ return {
38
+ name: '/integration',
39
+ hooks: {
40
+ 'astro:config:setup': async ({
41
+ config: astroConfig,
42
+ updateConfig,
43
+ injectScript,
44
+ injectRoute,
45
+ }) => {
46
+ // ----------------------
47
+ // Inject css
48
+ // ----------------------
49
+ config?.css && injectScript('page-ssr', `import "${config?.css}";`)
50
+
51
+ const generateCss = (
52
+ defaultTheme: 'light' | 'dark',
53
+ theme: 'light' | 'dark',
54
+ color: Color
55
+ ) => {
56
+ const { background, base, brand } = color
57
+ const generated = generateRadixColors({
58
+ background,
59
+ appearance: theme,
60
+ gray: base,
61
+ accent: brand,
62
+ })
63
+
64
+ const scaleToString = (
65
+ scale: any,
66
+ palette: 'base' | 'brand',
67
+ alpha?: boolean
68
+ ) =>
69
+ scale
70
+ .map(
71
+ (color: any, i: any) =>
72
+ `--${palette}-${alpha ? 'a' : ''}${i + 1}: ${color};`
73
+ )
74
+ .join('\n')
75
+
76
+ const baseString = scaleToString(generated.grayScale, 'base', false)
77
+ const baseAlphaString = scaleToString(
78
+ generated.grayScaleAlpha,
79
+ 'base',
80
+ true
81
+ )
82
+ const brandString = scaleToString(
83
+ generated.accentScale,
84
+ 'brand',
85
+ false
86
+ )
87
+ const brandAlphaString = scaleToString(
88
+ generated.accentScaleAlpha,
89
+ 'brand',
90
+ true
91
+ )
92
+ const brandContrastString = `--brand-contrast: ${generated.accentContrast};`
93
+ const baseContrastString = `--base-contrast: ${generated.accentContrast};`
94
+ const baseBackgroundString = `--base-background: ${generated.background};`
95
+ const brandBackgroundString = `--brand-background: ${generated.background};`
96
+ const colorSchemeString = `--color-scheme: ${theme};`
97
+
98
+ const css = `${defaultTheme == theme ? ':root, ' : ''} .theme-${theme} {
99
+ ${baseString}
100
+ ${baseAlphaString}
101
+ ${baseContrastString}
102
+ ${baseBackgroundString}
103
+ ${brandString}
104
+ ${brandAlphaString}
105
+ ${brandContrastString}
106
+ ${brandBackgroundString}
107
+ ${colorSchemeString}
108
+ }`
109
+ return css
110
+ }
111
+
112
+ const lightCss =
113
+ (config.colors.light &&
114
+ generateCss(config.colors.theme, 'light', config.colors.light)) ||
115
+ ''
116
+ const darkCss =
117
+ (config.colors.dark &&
118
+ generateCss(config.colors.theme, 'dark', config.colors.dark)) ||
119
+ ''
120
+
121
+ const css = lightCss + '\n' + darkCss
122
+
123
+ updateConfig({
124
+ vite: {
125
+ plugins: [
126
+ virtual({
127
+ 'virtual:astro/config': `export default ${JSON.stringify(astroConfig)}`,
128
+ 'virtual:fulldev-ui/config': `export default ${JSON.stringify(config)}`,
129
+ 'virtual:colors.css': css,
130
+ }),
131
+ ],
132
+ // css: {
133
+ // preprocessorOptions: {
134
+ // scss: {
135
+ // additionalData: `$layer: ${config.layer};`,
136
+ // },
137
+ // },
138
+ // },
139
+ },
140
+ })
141
+
142
+ injectScript('page-ssr', `import "virtual:colors.css";`)
143
+
144
+ // ----------------------
145
+ // Inject routes
146
+ // ----------------------
147
+ if (config.injectRoutes) {
148
+ const pages = import.meta.glob('/src/pages/**/*.astro')
149
+ !pages['/src/pages/[...page].astro'] &&
150
+ injectRoute({
151
+ pattern: '/[...page]',
152
+ entrypoint: 'fulldev-ui/[...page].astro',
153
+ })
154
+ }
155
+ },
156
+ },
157
+ }
158
+ }
@@ -0,0 +1,80 @@
1
+ import plugin from 'tailwindcss/plugin'
2
+
3
+ export default plugin(() => {}, {
4
+ theme: {
5
+ spacing: {
6
+ 'space-1': 'var(--space-1)',
7
+ 'space-2': 'var(--space-2)',
8
+ 'space-3': 'var(--space-3)',
9
+ 'space-4': 'var(--space-4)',
10
+ 'space-5': 'var(--space-5)',
11
+ 'space-6': 'var(--space-6)',
12
+ 'space-7': 'var(--space-7)',
13
+ },
14
+ borderRadius: {
15
+ 1: 'var(--radius-1)',
16
+ 2: 'var(--radius-2)',
17
+ 3: 'var(--radius-3)',
18
+ },
19
+ fontSize: {
20
+ 1: 'var(--text-1)',
21
+ 2: 'var(--text-2)',
22
+ 3: 'var(--text-3)',
23
+ 4: 'var(--text-4)',
24
+ 5: 'var(--text-5)',
25
+ 6: 'var(--text-6)',
26
+ 7: 'var(--text-7)',
27
+ 8: 'var(--text-8)',
28
+ },
29
+ colors: {
30
+ color: {
31
+ 1: 'var(--color-1)',
32
+ 2: 'var(--color-2)',
33
+ 3: 'var(--color-3)',
34
+ 4: 'var(--color-4)',
35
+ 5: 'var(--color-5)',
36
+ 6: 'var(--color-6)',
37
+ 7: 'var(--color-7)',
38
+ 8: 'var(--color-8)',
39
+ 9: 'var(--color-9)',
40
+ 10: 'var(--color-10)',
41
+ 11: 'var(--color-11)',
42
+ 12: 'var(--color-12)',
43
+ contrast: 'var(--color-contrast)',
44
+ background: 'var(--color-background)',
45
+ },
46
+ base: {
47
+ 1: 'var(--color-base-1)',
48
+ 2: 'var(--color-base-2)',
49
+ 3: 'var(--color-base-3)',
50
+ 4: 'var(--color-base-4)',
51
+ 5: 'var(--color-base-5)',
52
+ 6: 'var(--color-base-6)',
53
+ 7: 'var(--color-base-7)',
54
+ 8: 'var(--color-base-8)',
55
+ 9: 'var(--color-base-9)',
56
+ 10: 'var(--color-base-10)',
57
+ 11: 'var(--color-base-11)',
58
+ 12: 'var(--color-base-12)',
59
+ contrast: 'var(--color-base-contrast)',
60
+ background: 'var(--color-base-background)',
61
+ },
62
+ brand: {
63
+ 1: 'var(--color-brand-1)',
64
+ 2: 'var(--color-brand-2)',
65
+ 3: 'var(--color-brand-3)',
66
+ 4: 'var(--color-brand-4)',
67
+ 5: 'var(--color-brand-5)',
68
+ 6: 'var(--color-brand-6)',
69
+ 7: 'var(--color-brand-7)',
70
+ 8: 'var(--color-brand-8)',
71
+ 9: 'var(--color-brand-9)',
72
+ 10: 'var(--color-brand-10)',
73
+ 11: 'var(--color-brand-11)',
74
+ 12: 'var(--color-brand-12)',
75
+ contrast: 'var(--color-brand-contrast)',
76
+ background: 'var(--color-brand-background)',
77
+ },
78
+ },
79
+ },
80
+ })
@@ -0,0 +1,84 @@
1
+ import { definePreset, presetUno } from 'unocss'
2
+
3
+ export default definePreset(() => {
4
+ return {
5
+ name: 'fullUI',
6
+ presets: [presetUno()],
7
+ theme: {
8
+ spacing: {
9
+ 'space-1': 'var(--space-1)',
10
+ 'space-2': 'var(--space-2)',
11
+ 'space-3': 'var(--space-3)',
12
+ 'space-4': 'var(--space-4)',
13
+ 'space-5': 'var(--space-5)',
14
+ 'space-6': 'var(--space-6)',
15
+ 'space-7': 'var(--space-7)',
16
+ },
17
+ borderRadius: {
18
+ 1: 'var(--radius-1)',
19
+ 2: 'var(--radius-2)',
20
+ 3: 'var(--radius-3)',
21
+ },
22
+ fontSize: {
23
+ 1: 'var(--text-1)',
24
+ 2: 'var(--text-2)',
25
+ 3: 'var(--text-3)',
26
+ 4: 'var(--text-4)',
27
+ 5: 'var(--text-5)',
28
+ 6: 'var(--text-6)',
29
+ 7: 'var(--text-7)',
30
+ 8: 'var(--text-8)',
31
+ },
32
+ colors: {
33
+ color: {
34
+ 1: 'var(--color-1)',
35
+ 2: 'var(--color-2)',
36
+ 3: 'var(--color-3)',
37
+ 4: 'var(--color-4)',
38
+ 5: 'var(--color-5)',
39
+ 6: 'var(--color-6)',
40
+ 7: 'var(--color-7)',
41
+ 8: 'var(--color-8)',
42
+ 9: 'var(--color-9)',
43
+ 10: 'var(--color-10)',
44
+ 11: 'var(--color-11)',
45
+ 12: 'var(--color-12)',
46
+ contrast: 'var(--color-contrast)',
47
+ background: 'var(--color-background)',
48
+ },
49
+ base: {
50
+ 1: 'var(--color-base-1)',
51
+ 2: 'var(--color-base-2)',
52
+ 3: 'var(--color-base-3)',
53
+ 4: 'var(--color-base-4)',
54
+ 5: 'var(--color-base-5)',
55
+ 6: 'var(--color-base-6)',
56
+ 7: 'var(--color-base-7)',
57
+ 8: 'var(--color-base-8)',
58
+ 9: 'var(--color-base-9)',
59
+ 10: 'var(--color-base-10)',
60
+ 11: 'var(--color-base-11)',
61
+ 12: 'var(--color-base-12)',
62
+ contrast: 'var(--color-base-contrast)',
63
+ background: 'var(--color-base-background)',
64
+ },
65
+ brand: {
66
+ 1: 'var(--color-brand-1)',
67
+ 2: 'var(--color-brand-2)',
68
+ 3: 'var(--color-brand-3)',
69
+ 4: 'var(--color-brand-4)',
70
+ 5: 'var(--color-brand-5)',
71
+ 6: 'var(--color-brand-6)',
72
+ 7: 'var(--color-brand-7)',
73
+ 8: 'var(--color-brand-8)',
74
+ 9: 'var(--color-brand-9)',
75
+ 10: 'var(--color-brand-10)',
76
+ 11: 'var(--color-brand-11)',
77
+ 12: 'var(--color-brand-12)',
78
+ contrast: 'var(--color-brand-contrast)',
79
+ background: 'var(--color-brand-background)',
80
+ },
81
+ },
82
+ },
83
+ }
84
+ })
@@ -0,0 +1,24 @@
1
+ ---
2
+ import type { CollectionEntry } from 'astro:content'
3
+ import Intro from 'fulldev-ui/blocks/Intro.astro'
4
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
5
+
6
+ type Props = CollectionEntry<'pages'>
7
+
8
+ const { data, render } = Astro.props
9
+ const { Content } = await render()
10
+ ---
11
+
12
+ <Layout {...Astro.props}>
13
+ <Intro
14
+ variant="ghost"
15
+ size="md"
16
+ style={{
17
+ paddingBottom: '0px',
18
+ borderColor: 'transparent',
19
+ }}
20
+ {...data}
21
+ />
22
+ <Content />
23
+ <slot />
24
+ </Layout>
@@ -0,0 +1,39 @@
1
+ ---
2
+ import type { CollectionEntry } from 'astro:content'
3
+ import Hero from 'fulldev-ui/blocks/Hero.astro'
4
+ import Block from 'fulldev-ui/components/Block.astro'
5
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
6
+
7
+ type Props = CollectionEntry<'pages'>
8
+
9
+ const { data } = Astro.props
10
+ ---
11
+
12
+ <Layout {...Astro.props}>
13
+ <Hero
14
+ size="md"
15
+ {...data}
16
+ />
17
+ <Block
18
+ _bookshop_name="Categories"
19
+ class:list={'block-overview-cards'}
20
+ source="children"
21
+ structure="grid"
22
+ frame="panel"
23
+ variant="surface"
24
+ size="lg"
25
+ align="start"
26
+ />
27
+ </Layout>
28
+
29
+ <style is:global lang="scss">
30
+ .block-overview-cards {
31
+ padding-top: var(--space-5) !important;
32
+
33
+ .card {
34
+ .image {
35
+ height: auto !important;
36
+ }
37
+ }
38
+ }
39
+ </style>
@@ -0,0 +1,23 @@
1
+ ---
2
+ import type { CollectionEntry } from 'astro:content'
3
+ import Prose from 'fulldev-ui/components/experimental/Prose.astro'
4
+ import Section from 'fulldev-ui/components/Section.astro'
5
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
6
+
7
+ type Props = CollectionEntry<'pages'>
8
+
9
+ const { render } = Astro.props
10
+ const { Content } = await render()
11
+ ---
12
+
13
+ <Layout
14
+ {...Astro.props}
15
+ class:list="component-layout"
16
+ >
17
+ <Section>
18
+ <Prose>
19
+ <Content />
20
+ </Prose>
21
+ </Section>
22
+ <slot />
23
+ </Layout>
@@ -0,0 +1,40 @@
1
+ ---
2
+ import type { CollectionEntry } from 'astro:content'
3
+ import { getCollection } from 'astro:content'
4
+ import JobDeck from 'fulldev-ui/blocks/Jobs.astro'
5
+ import Block from 'fulldev-ui/components/Block.astro'
6
+ import Blocks from 'fulldev-ui/components/Blocks.astro'
7
+ import Prose from 'fulldev-ui/components/experimental/Prose.astro'
8
+ import Section from 'fulldev-ui/components/Section.astro'
9
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
10
+
11
+ type Props = CollectionEntry<'pages'>
12
+
13
+ const { data, slug, ...rest } = Astro.props
14
+
15
+ const childPages = (
16
+ await getCollection('pages', (page: any) => page.slug.startsWith(slug))
17
+ ).map((page: any) => ({ href: `/${page.slug}/`, ...page.data }))
18
+ ---
19
+
20
+ <Layout
21
+ class:list={'page'}
22
+ data={data}
23
+ {...rest}
24
+ >
25
+ <Block
26
+ _bookshop_name="Hero"
27
+ heading={data.title}
28
+ set:html={data.description}
29
+ {...data}
30
+ {...data.hero}
31
+ />
32
+ <JobDeck cards={childPages} />
33
+ <Section style={{ '--screen': '768px' }}>
34
+ <Prose id="prose">
35
+ <slot />
36
+ </Prose>
37
+ </Section>
38
+ <Blocks blocks={data.blocks} />
39
+ <slot />
40
+ </Layout>
@@ -0,0 +1,168 @@
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 Button from 'fulldev-ui/components/Button.astro'
6
+ import Head from 'fulldev-ui/components/Head.astro'
7
+ import Header from 'fulldev-ui/components/Header.astro'
8
+ import Sidebar from 'fulldev-ui/components/Sidebar.astro'
9
+ import Toc from 'fulldev-ui/components/Toc.astro'
10
+
11
+ type Props = Partial<CollectionEntry<'pages'>> & {
12
+ class?: string
13
+ theme?: 'light' | 'dark'
14
+ }
15
+
16
+ const { slug, data, theme, class: classes, render } = Astro.props
17
+ const { logo, header, footer, footers, channels, sidebar, toc } = data || {}
18
+
19
+ const { headings } = render ? await render() : { headings: [] }
20
+
21
+ const h2Headings = headings.filter((heading: any) => heading.depth === 2)
22
+ ---
23
+
24
+ <!doctype html>
25
+ <html
26
+ lang="nl"
27
+ class:list={[
28
+ slug,
29
+ {
30
+ 'theme-dark': theme === 'dark',
31
+ 'theme-light': theme === 'light',
32
+ },
33
+ ]}
34
+ >
35
+ <Head {...Astro.props} />
36
+ <body
37
+ class:list={[
38
+ classes,
39
+ {
40
+ 'has-sidebar': sidebar,
41
+ 'has-toc': toc,
42
+ 'theme-dark': theme === 'dark',
43
+ 'theme-light': theme === 'light',
44
+ },
45
+ ]}
46
+ >
47
+ <Header
48
+ {logo}
49
+ {...header}
50
+ />
51
+ <div class="core">
52
+ <Sidebar {sidebar} />
53
+ <main data-pagefind-body>
54
+ <Toc
55
+ toc={toc}
56
+ headings={h2Headings}
57
+ />
58
+ <div class="blocks">
59
+ <slot />
60
+ </div>
61
+ </main>
62
+ </div>
63
+
64
+ {
65
+ channels?.whatsapp && (
66
+ <Button
67
+ variant="primary"
68
+ color="brand"
69
+ icon="brand-whatsapp"
70
+ size="lg"
71
+ href={`https://wa.me/${channels.whatsapp}`}
72
+ style={{
73
+ position: 'fixed',
74
+ right: 'var(--space-4)',
75
+ bottom: 'var(--space-4)',
76
+ backgroundColor: '#46A758',
77
+ }}
78
+ />
79
+ )
80
+ }
81
+ <Block
82
+ _bookshop_name="Footer"
83
+ {logo}
84
+ {...footer}
85
+ />
86
+ <Blocks {...footers} />
87
+
88
+ <Fragment set:html={data?.code?.body} />
89
+ <style lang="scss" is:global>
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;
108
+ width: 100%;
109
+ min-height: 100vh;
110
+ color: var(--base-11);
111
+ color-scheme: var(--color-scheme);
112
+ font-size: var(--text-2);
113
+ font-family: var(--font-family);
114
+ }
115
+
116
+ body {
117
+ display: flex;
118
+ flex-direction: column;
119
+
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
+ }
142
+
143
+ .core {
144
+ .sidebar {
145
+ position: sticky;
146
+ top: 0;
147
+ padding-left: var(--gutter);
148
+ }
149
+
150
+ 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
+ }
163
+ }
164
+ }
165
+ }
166
+ </style>
167
+ </body>
168
+ </html>
@@ -0,0 +1,45 @@
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'
7
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
8
+
9
+ type Props = CollectionEntry<'pages'>
10
+
11
+ const { data, render } = Astro.props
12
+ const { sections, blocks, children, references } = data
13
+ const { Content } = await render()
14
+ ---
15
+
16
+ <Layout {...Astro.props}>
17
+ <Block
18
+ _bookshop_name="Hero"
19
+ size="lg"
20
+ {...data}
21
+ />
22
+ <Block
23
+ _bookshop_name="Categories"
24
+ source="children"
25
+ structure="grid"
26
+ {...children ?? {}}
27
+ />
28
+ <Block
29
+ _bookshop_name="ProductDeck"
30
+ heading={data.title && references
31
+ ? `Alle ${data.title.toLowerCase()}`
32
+ : undefined}
33
+ source="references"
34
+ structure="grid"
35
+ {...references ?? {}}
36
+ />
37
+ <Section style={{ '--screen': '768px' }}>
38
+ <Prose id="prose">
39
+ <Content />
40
+ </Prose>
41
+ </Section>
42
+ <Blocks {...sections} />
43
+ <Blocks {...blocks} />
44
+ <slot />
45
+ </Layout>
@@ -0,0 +1,32 @@
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'
7
+ import Layout from 'fulldev-ui/layouts/Layout.astro'
8
+
9
+ type Props = CollectionEntry<'pages'>
10
+
11
+ const { data, render } = Astro.props
12
+ const { hero, section, sections, block, blocks } = data
13
+ const { Content } = await render()
14
+ ---
15
+
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} />
31
+ <slot />
32
+ </Layout>