fulldev-ui 0.4.32 → 0.5.0-beta-16

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 (315) hide show
  1. package/.env.example +3 -0
  2. package/CONTRIBUTING.md +10 -4
  3. package/astro.config.ts +11 -11
  4. package/package.json +31 -17
  5. package/pnpm-lock.yaml +1353 -438
  6. package/public/favicon/android-chrome-192x192.png +0 -0
  7. package/public/favicon/android-chrome-512x512.png +0 -0
  8. package/public/favicon/apple-touch-icon.png +0 -0
  9. package/public/favicon/browserconfig.xml +7 -7
  10. package/public/favicon/favicon-16x16-dark.png +0 -0
  11. package/public/favicon/favicon-16x16.png +0 -0
  12. package/public/favicon/favicon-32x32-dark.png +0 -0
  13. package/public/favicon/favicon-32x32.png +0 -0
  14. package/public/favicon/favicon-48x48-dark.png +0 -0
  15. package/public/favicon/favicon-48x48.png +0 -0
  16. package/public/favicon/favicon-dark.ico +0 -0
  17. package/public/favicon/favicon.ico +0 -0
  18. package/public/favicon/favicon.svg +16 -0
  19. package/public/favicon/manifest.webmanifest +26 -0
  20. package/public/favicon/mstile-150x150.png +0 -0
  21. package/public/favicon/safari-pinned-tab.svg +14 -15
  22. package/public/favicon/yandex-browser-50x50.png +0 -0
  23. package/public/favicon/yandex-browser-manifest.json +9 -0
  24. package/src/blocks/Article.astro +40 -0
  25. package/src/blocks/Banner.astro +48 -0
  26. package/src/blocks/Colleagues.astro +2 -1
  27. package/src/blocks/Contact.astro +61 -99
  28. package/src/blocks/Cta.astro +2 -1
  29. package/src/blocks/Excerpt.astro +14 -0
  30. package/src/blocks/Hero.astro +1 -2
  31. package/src/blocks/Intro.astro +4 -1
  32. package/src/blocks/Jobs.astro +1 -1
  33. package/src/blocks/Prices.astro +1 -1
  34. package/src/blocks/Product.astro +75 -27
  35. package/src/blocks/Reviews.astro +1 -1
  36. package/src/components/Avatar.astro +3 -20
  37. package/src/components/Badge.astro +17 -54
  38. package/src/components/Badges.astro +40 -0
  39. package/src/components/Button.astro +65 -46
  40. package/src/components/Buttons.astro +49 -0
  41. package/src/components/Card.astro +100 -178
  42. package/src/components/Cards.astro +135 -0
  43. package/src/components/Cart.astro +38 -0
  44. package/src/components/CartForm.astro +122 -0
  45. package/src/components/CartList.astro +134 -0
  46. package/src/components/CartSummary.astro +148 -0
  47. package/src/components/Channel.astro +70 -0
  48. package/src/components/Channels.astro +37 -0
  49. package/src/components/Checkbox.astro +12 -16
  50. package/src/components/Dialog.astro +10 -12
  51. package/src/components/Drawer.astro +131 -63
  52. package/src/components/Element.astro +58 -0
  53. package/src/components/Footer.astro +142 -93
  54. package/src/components/Form.astro +49 -0
  55. package/src/components/Head.astro +11 -45
  56. package/src/components/Header.astro +91 -163
  57. package/src/components/Heading.astro +18 -26
  58. package/src/components/Icon.astro +9 -9
  59. package/src/components/Image.astro +42 -152
  60. package/src/components/Input.astro +16 -28
  61. package/src/components/Label.astro +14 -17
  62. package/src/components/Link.astro +22 -44
  63. package/src/components/List.astro +12 -10
  64. package/src/components/LocaleSwitcher.astro +25 -0
  65. package/src/components/Menu.astro +57 -0
  66. package/src/components/Price.astro +34 -0
  67. package/src/components/Rating.astro +29 -25
  68. package/src/components/Search.astro +4 -7
  69. package/src/components/Section.astro +196 -234
  70. package/src/components/Select.astro +16 -34
  71. package/src/components/Sidebar.astro +85 -58
  72. package/src/components/Social.astro +36 -0
  73. package/src/components/Socials.astro +37 -0
  74. package/src/components/Switch.astro +14 -22
  75. package/src/components/Table.astro +23 -36
  76. package/src/components/Tagline.astro +11 -16
  77. package/src/components/Text.astro +17 -19
  78. package/src/components/Textarea.astro +8 -22
  79. package/src/components/ThemeSelect.astro +41 -0
  80. package/src/components/Toc.astro +59 -56
  81. package/src/components/Writeup.astro +90 -0
  82. package/src/components/docs/PropsTable.astro +229 -56
  83. package/src/components/experimental/Form.astro +36 -17
  84. package/src/components/experimental/Gallery.astro +50 -126
  85. package/src/components/experimental/Logo.astro +26 -9
  86. package/src/components/experimental/Prose.astro +41 -5
  87. package/src/components/experimental/Video.astro +1 -1
  88. package/src/components/experimental/Window.astro +3 -4
  89. package/src/components/sections.astro +28 -0
  90. package/src/content/config.ts +10 -7
  91. package/src/content/pages/base/_dialog.mdx +1 -2
  92. package/src/content/pages/base/_drawer.mdx +1 -2
  93. package/src/content/pages/base/_localeswitcher.mdx +17 -0
  94. package/src/content/pages/base/_switch.mdx +1 -2
  95. package/src/content/pages/base/badge.mdx +1 -12
  96. package/src/content/pages/base/button.mdx +1 -12
  97. package/src/content/pages/base/card.mdx +2 -29
  98. package/src/content/pages/base/checkbox.mdx +1 -2
  99. package/src/content/pages/base/icon.mdx +1 -2
  100. package/src/content/pages/base/image.mdx +42 -0
  101. package/src/content/pages/base/input.mdx +1 -12
  102. package/src/content/pages/base/rating.mdx +3 -14
  103. package/src/content/pages/base/section.mdx +2 -3
  104. package/src/content/pages/base/select.mdx +1 -20
  105. package/src/content/pages/base/table.mdx +1 -28
  106. package/src/content/pages/base/textarea.mdx +1 -16
  107. package/src/content/pages/base/theme-select.mdx +15 -0
  108. package/src/content/pages/blocks/_categories.mdx +3 -5
  109. package/src/content/pages/blocks/{footer.mdx → _footer.mdx} +2 -4
  110. package/src/content/pages/blocks/{header.mdx → _header.mdx} +2 -7
  111. package/src/content/pages/blocks/_jobs.mdx +1 -2
  112. package/src/content/pages/blocks/{prices.mdx → _prices.mdx} +5 -7
  113. package/src/content/pages/blocks/_product.mdx +74 -4
  114. package/src/content/pages/blocks/_products.mdx +1 -2
  115. package/src/content/pages/blocks/_stats.mdx +1 -1
  116. package/src/content/pages/blocks/{_banner.mdx → banner.mdx} +2 -2
  117. package/src/content/pages/blocks/colleagues.mdx +6 -8
  118. package/src/content/pages/blocks/contact.mdx +69 -0
  119. package/src/content/pages/blocks/content.mdx +1 -19
  120. package/src/content/pages/blocks/cta.mdx +2 -25
  121. package/src/content/pages/blocks/features.mdx +2 -3
  122. package/src/content/pages/blocks/hero.mdx +5 -3
  123. package/src/content/pages/blocks/intro.mdx +2 -5
  124. package/src/content/pages/blocks/posts.mdx +9 -2
  125. package/src/content/pages/blocks/reviews.mdx +23 -18
  126. package/src/content/pages/index.mdx +16 -20
  127. package/src/content/pages/layouts/_layout.mdx +14 -0
  128. package/src/content/pages/layouts/docslayout.mdx +14 -0
  129. package/src/content/pages/overview/components.mdx +75 -0
  130. package/src/content/pages/overview/content-collections.mdx +139 -0
  131. package/src/content/pages/overview/frameworks.mdx +4 -4
  132. package/src/content/pages/overview/installation.mdx +36 -3
  133. package/src/content/pages/overview/introduction.mdx +19 -9
  134. package/src/content/pages/overview/theming.mdx +53 -67
  135. package/src/content/pages/schemas/page.mdx +17 -0
  136. package/src/content/pages/schemas/preset.mdx +9 -0
  137. package/src/content/pages/showcase/anti-slip-profiles.md +5 -0
  138. package/src/content/pages/showcase/fulldev-ui.md +5 -0
  139. package/src/content/pages/showcase/lavis-detailing.md +5 -0
  140. package/src/content/pages/showcase/leren-trainingsacteren.md +5 -0
  141. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +5 -0
  142. package/src/content/{records/record.yml → pages/showcase/record.md} +2 -0
  143. package/src/content/pages/showcase/sloepverhuur-bolsward.md +5 -0
  144. package/src/content/pages/showcase/stark-vulcanising-products.md +5 -0
  145. package/src/content/pages/showcase/the-gym-haren.md +5 -0
  146. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +5 -0
  147. package/src/content/pages/showcase.mdx +11 -41
  148. package/src/content/pages/typography/_tagline.mdx +1 -2
  149. package/src/content/pages/typography/heading.mdx +1 -2
  150. package/src/content/pages/typography/label.mdx +1 -2
  151. package/src/content/pages/typography/link.mdx +1 -13
  152. package/src/content/pages/typography/list.mdx +1 -2
  153. package/src/content/pages/typography/text.mdx +1 -2
  154. package/src/content/{settings → presets}/base.yml +62 -45
  155. package/src/content/presets/blocks.yml +1 -0
  156. package/src/content/presets/docs.yml +6 -0
  157. package/src/css/color.css +0 -82
  158. package/src/css/custom.css +9 -56
  159. package/src/css/size.css +10 -0
  160. package/src/css/space.css +0 -8
  161. package/src/css/styles.css +0 -15
  162. package/src/env.d.ts +1 -1
  163. package/src/images/avatar-1.yml +1 -0
  164. package/src/images/favicon.svg +16 -0
  165. package/src/integration/generate-colors.ts +2 -0
  166. package/src/integration/index.ts +95 -7
  167. package/src/layouts/BlockLayout.astro +10 -15
  168. package/src/layouts/ContactLayout.astro +21 -0
  169. package/src/layouts/DocsLayout.astro +73 -0
  170. package/src/layouts/Layout.astro +114 -133
  171. package/src/layouts/OverviewLayout.astro +28 -31
  172. package/src/layouts/PostLayout.astro +12 -23
  173. package/src/layouts/ProductLayout.astro +10 -20
  174. package/src/loaders/imageLoader.ts +26 -0
  175. package/src/pages/[...page].astro +25 -21
  176. package/src/schemas/components/avatar.ts +3 -0
  177. package/src/schemas/components/avatars.ts +4 -0
  178. package/src/schemas/components/badge.ts +13 -0
  179. package/src/schemas/components/button.ts +16 -0
  180. package/src/schemas/components/buttons.ts +4 -0
  181. package/src/schemas/components/card.ts +25 -0
  182. package/src/schemas/components/cards.ts +4 -0
  183. package/src/schemas/components/channel.ts +13 -0
  184. package/src/schemas/components/channels.ts +4 -0
  185. package/src/schemas/components/footer.ts +25 -0
  186. package/src/schemas/components/header.ts +11 -0
  187. package/src/schemas/components/heading.ts +3 -0
  188. package/src/schemas/components/icon.ts +3 -0
  189. package/src/schemas/components/image.ts +25 -0
  190. package/src/schemas/components/images.ts +4 -0
  191. package/src/schemas/components/list.ts +3 -0
  192. package/src/schemas/components/logo.ts +3 -0
  193. package/src/schemas/components/menu.ts +13 -0
  194. package/src/schemas/components/price.ts +3 -0
  195. package/src/schemas/components/rating.ts +15 -0
  196. package/src/schemas/components/section.ts +15 -0
  197. package/src/schemas/components/sections.ts +3 -0
  198. package/src/schemas/components/sidebar.ts +15 -0
  199. package/src/schemas/components/social.ts +3 -0
  200. package/src/schemas/components/socials.ts +4 -0
  201. package/src/schemas/components/tagline.ts +3 -0
  202. package/src/schemas/components/text.ts +3 -0
  203. package/src/schemas/components/toc.ts +3 -0
  204. package/src/schemas/components/writeup.ts +20 -0
  205. package/src/schemas/imageSchema.ts +12 -0
  206. package/src/schemas/pageSchema.ts +91 -0
  207. package/src/schemas/presetSchema.ts +3 -0
  208. package/src/schemas/utils/component.ts +17 -0
  209. package/src/schemas/utils/navigation.ts +8 -0
  210. package/src/schemas/utils/parents.ts +3 -0
  211. package/src/schemas/{utils.ts → utils/pathSchema.ts} +2 -11
  212. package/src/stores/cart.ts +23 -0
  213. package/src/types/global-props.ts +16 -0
  214. package/src/types/virtual-modules.d.ts +5 -0
  215. package/src/utils/_archive/Childmorphic.ts +1 -1
  216. package/src/utils/_archive/mergeEntries.ts +28 -0
  217. package/src/utils/cart.ts +32 -0
  218. package/src/utils/getDeepReferenceChildren.ts +14 -0
  219. package/src/utils/getFolderChildren.ts +18 -0
  220. package/src/utils/getReferenceChildren.ts +14 -0
  221. package/src/utils/getSiblingPages.ts +14 -0
  222. package/tsconfig.json +2 -5
  223. package/public/favicon/site.webmanifest +0 -19
  224. package/public/images/avatars/1.jpeg +0 -0
  225. package/public/images/avatars/2.jpeg +0 -0
  226. package/public/images/avatars/3.jpeg +0 -0
  227. package/public/images/avatars/300/1.jpeg +0 -0
  228. package/public/images/avatars/300/2.jpeg +0 -0
  229. package/public/images/avatars/300/3.jpeg +0 -0
  230. package/public/images/avatars/300/4.jpeg +0 -0
  231. package/public/images/avatars/4.jpeg +0 -0
  232. package/public/images/avatars/5.jpeg +0 -0
  233. package/public/images/avatars/6.jpeg +0 -0
  234. package/public/images/avatars/7.jpeg +0 -0
  235. package/public/images/avatars/8.jpeg +0 -0
  236. package/public/images/blocks/colleagues.png +0 -0
  237. package/public/images/blocks/content.png +0 -0
  238. package/public/images/blocks/cta.png +0 -0
  239. package/public/images/blocks/features.png +0 -0
  240. package/public/images/blocks/footer.png +0 -0
  241. package/public/images/blocks/header.png +0 -0
  242. package/public/images/blocks/hero.png +0 -0
  243. package/public/images/blocks/intro.png +0 -0
  244. package/public/images/blocks/posts.png +0 -0
  245. package/public/images/blocks/prices.png +0 -0
  246. package/public/images/blocks/reviews.png +0 -0
  247. package/public/images/logo-placeholder.svg +0 -1
  248. package/src/components/Bento.astro +0 -43
  249. package/src/components/Block.astro +0 -157
  250. package/src/components/Blocks.astro +0 -5
  251. package/src/components/Box.astro +0 -63
  252. package/src/components/Carousel.astro +0 -54
  253. package/src/components/Column.astro +0 -73
  254. package/src/components/Grid.astro +0 -32
  255. package/src/components/Masonry.astro +0 -42
  256. package/src/components/Root.astro +0 -94
  257. package/src/components/Row.astro +0 -49
  258. package/src/components/Split.astro +0 -59
  259. package/src/components/Spread.astro +0 -46
  260. package/src/components/Stack.astro +0 -36
  261. package/src/components/Toggle.astro +0 -46
  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/GalleryVertical.astro +0 -161
  266. package/src/components/experimental/Price.astro +0 -40
  267. package/src/content/pages/_changelog.mdx +0 -10
  268. package/src/content/pages/_segment/footer.mdx +0 -244
  269. package/src/content/pages/_segment/header.mdx +0 -210
  270. package/src/content/pages/base/_image.mdx +0 -14
  271. package/src/content/pages/base/toggle.mdx +0 -32
  272. package/src/content/pages/blocks.mdx +0 -10
  273. package/src/content/pages/overview/integration.mdx +0 -37
  274. package/src/content/pages/structure/_row.mdx +0 -23
  275. package/src/content/pages/structure/_wrap.mdx +0 -25
  276. package/src/content/pages/structure/carousel.mdx +0 -31
  277. package/src/content/pages/structure/column.mdx +0 -21
  278. package/src/content/pages/structure/grid.mdx +0 -26
  279. package/src/content/pages/structure/masonry.mdx +0 -32
  280. package/src/content/pages/structure/split.mdx +0 -21
  281. package/src/content/pages/structure/spread.mdx +0 -21
  282. package/src/content/pages/structure/stack.mdx +0 -22
  283. package/src/content/settings/components.yml +0 -29
  284. package/src/layouts/BlockOverviewLayout.astro +0 -39
  285. package/src/layouts/ComponentLayout.astro +0 -23
  286. package/src/layouts/JobsLayout.astro +0 -40
  287. package/src/layouts/PageLayout.astro +0 -32
  288. package/src/schemas/base.ts +0 -90
  289. package/src/schemas/block.ts +0 -15
  290. package/src/schemas/card.ts +0 -3
  291. package/src/schemas/page.ts +0 -43
  292. package/src/utils/mergeEntries.ts +0 -28
  293. /package/{public/showcase → src/images}/anti-slip-profiles.webp +0 -0
  294. /package/{public/images/avatars/500/1.jpeg → src/images/avatar-1.jpeg} +0 -0
  295. /package/{public/images/avatars/500/2.jpeg → src/images/avatar-2.jpeg} +0 -0
  296. /package/{public/images/avatars/500/3.jpeg → src/images/avatar-3.jpeg} +0 -0
  297. /package/{public/images/avatars/500/4.jpeg → src/images/avatar-4.jpeg} +0 -0
  298. /package/{public → src}/images/avatar-placeholder.jpg +0 -0
  299. /package/{public → src}/images/block-code.png +0 -0
  300. /package/{public → src}/images/component-code.png +0 -0
  301. /package/{public/showcase → src/images}/fulldev-ui.webp +0 -0
  302. /package/{public/showcase → src/images}/lavis-detailing.webp +0 -0
  303. /package/{public/showcase → src/images}/leren-trainingsacteren.webp +0 -0
  304. /package/{public/showcase → src/images}/miele-witgoedcenter-amsterdam.webp +0 -0
  305. /package/{public → src}/images/og-image.png +0 -0
  306. /package/{public → src}/images/placeholder-center.webp +0 -0
  307. /package/{public → src}/images/placeholder-landscape-dark.png +0 -0
  308. /package/{public → src}/images/placeholder-landscape.webp +0 -0
  309. /package/{public → src}/images/placeholder-portrait.webp +0 -0
  310. /package/{public → src}/images/placeholder-right.webp +0 -0
  311. /package/{public → src}/images/placeholder.webp +0 -0
  312. /package/{public/showcase → src/images}/sloepverhuur-bolsward.webp +0 -0
  313. /package/{public/showcase → src/images}/stark-vulcanising-products.webp +0 -0
  314. /package/{public/showcase → src/images}/the-gym-haren.webp +0 -0
  315. /package/{public/showcase → src/images}/van-dillen-antieke-bouwmaterialen.webp +0 -0
@@ -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,25 @@
1
+ import { reference, z } from 'astro:content'
2
+
3
+ const imagePath = z.preprocess((data: unknown) => {
4
+ if (typeof data === 'string') {
5
+ return data.split('/').pop()
6
+ }
7
+ return data
8
+ }, reference('images'))
9
+
10
+ export default z.union([imagePath, z.object({}).passthrough()]).pipe(
11
+ z
12
+ .object({
13
+ id: z
14
+ .string()
15
+ .refine(async (data) => await reference('images').parseAsync(data)),
16
+ src: z.string(),
17
+ alt: z.string(),
18
+ width: z.number(),
19
+ height: z.number(),
20
+ })
21
+ .partial()
22
+ .passthrough()
23
+ )
24
+
25
+ // 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,13 @@
1
+ import { z } from 'astro:content'
2
+ import buttons from './buttons'
3
+ import heading from './heading'
4
+
5
+ export default z.array(
6
+ z
7
+ .object({
8
+ heading,
9
+ buttons,
10
+ })
11
+ .partial()
12
+ .passthrough()
13
+ )
@@ -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,15 @@
1
+ import { z } from 'astro:content'
2
+ import logo from '../components/logo'
3
+ import menu from '../components/menu'
4
+ import heading from './heading'
5
+ import toc from './toc'
6
+
7
+ export default z
8
+ .object({
9
+ logo,
10
+ heading,
11
+ menu,
12
+ toc,
13
+ })
14
+ .partial()
15
+ .passthrough()
@@ -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,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,91 @@
1
+ import { getEntries, getEntry, z } from 'astro:content'
2
+ import { assign } from 'radash'
3
+ import fulldevConfig from 'virtual:fulldev-ui/config'
4
+ import footer from './components/footer'
5
+ import header from './components/header'
6
+ import image from './components/image'
7
+ import images from './components/images'
8
+ import price from './components/price'
9
+ import section from './components/section'
10
+ import sections from './components/sections'
11
+ import sidebar from './components/sidebar'
12
+ import toc from './components/toc'
13
+ import component from './utils/component'
14
+ import navigation from './utils/navigation'
15
+ import parents from './utils/parents'
16
+ import pathSchema from './utils/pathSchema'
17
+
18
+ export const i18n = z
19
+ .object({
20
+ i18n: pathSchema('pages').optional(),
21
+ })
22
+ .passthrough()
23
+ .transform(async ({ i18n, ...rest }) => {
24
+ if (!i18n) return rest
25
+ const entry = await getEntry(i18n)
26
+ const merged = assign(entry.data, rest) as typeof rest
27
+ return merged as typeof rest
28
+ })
29
+
30
+ export const presets = z
31
+ .object({
32
+ presets: z.array(pathSchema('presets')).optional(),
33
+ })
34
+ .passthrough()
35
+ .transform(async ({ presets, ...rest }) => {
36
+ let mergedData = {}
37
+
38
+ if (fulldevConfig.basePreset) {
39
+ const baseEntry = await getEntry('presets', fulldevConfig.basePreset)
40
+ mergedData = assign(mergedData, baseEntry?.data || {})
41
+ }
42
+
43
+ if (presets) {
44
+ const entries = await getEntries(presets)
45
+ entries.forEach(
46
+ (preset: any) => (mergedData = assign(mergedData, preset.data))
47
+ )
48
+ }
49
+
50
+ mergedData = assign(mergedData, rest)
51
+ return mergedData as typeof rest
52
+ })
53
+
54
+ export const page = z
55
+ .object({
56
+ component,
57
+ parents,
58
+ theme: z.enum(['light', 'dark']),
59
+ lang: z.string(),
60
+ seo: z
61
+ .object({
62
+ title: z.string().optional(),
63
+ description: z.string().optional(),
64
+ })
65
+ .optional(),
66
+ title: z.string(),
67
+ description: z.string().optional(),
68
+ image,
69
+ images,
70
+ section,
71
+ sections,
72
+ footer,
73
+ header: header,
74
+ sidebar: sidebar,
75
+ navigation,
76
+ toc,
77
+ price,
78
+ code: z.any(),
79
+ sizes: z.any(),
80
+ banner: z.any(),
81
+ _schema: z.any(),
82
+ uitverkocht: z.any(),
83
+ rating: z.any(),
84
+ variants: z.any(),
85
+ heading: z.any(),
86
+ href: z.any(),
87
+ })
88
+ .partial()
89
+ .strict()
90
+
91
+ export default i18n.pipe(presets).pipe(page)
@@ -0,0 +1,3 @@
1
+ import { page } from './pageSchema'
2
+
3
+ export default page
@@ -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,8 @@
1
+ import { z } from 'astro:content'
2
+ import header from '../components/header'
3
+ import sidebar from '../components/sidebar'
4
+
5
+ export default sidebar.merge(header).extend({
6
+ header: z.boolean().optional(),
7
+ sidebar: z.boolean().optional(),
8
+ })
@@ -0,0 +1,3 @@
1
+ import pathSchema from './pathSchema'
2
+
3
+ export default pathSchema('pages').array().optional()
@@ -1,19 +1,10 @@
1
1
  import { reference, z, type AnyEntryMap } from 'astro:content'
2
2
 
3
- // export const pagesPath = z
4
- // .string()
5
- // .transform((value) => {
6
- // const fullpath = value?.split(`pages/`).pop()
7
- // const slug = fullpath?.split('.').shift()
8
- // return slug
9
- // })
10
- // .pipe(reference('pages'))
11
-
12
- export const pathSchema = <C extends keyof AnyEntryMap>(collection: C) =>
3
+ // TODO: preprocess instead
4
+ export default <C extends keyof AnyEntryMap>(collection: C) =>
13
5
  z
14
6
  .string()
15
7
  .transform((value) => {
16
- // @ts-ignore
17
8
  const fullpath = value?.split(`${collection}/`).pop()
18
9
  const slug = fullpath?.split('.').shift()
19
10
  const noIndexEnding = slug?.replace('/index', '')
@@ -0,0 +1,23 @@
1
+ import { persistentAtom } from '@nanostores/persistent'
2
+ import { computed } from 'nanostores'
3
+
4
+ // type Item = CollectionEntry<'products'>['data'] & {
5
+ // quantity: number
6
+ // }
7
+
8
+ type Item = any
9
+
10
+ export const $cart = persistentAtom<Item[] | []>('cart', [], {
11
+ encode: JSON.stringify,
12
+ decode: JSON.parse,
13
+ })
14
+
15
+ // export const cartIsOpen = atom(false)
16
+
17
+ export const $totalPrice = computed($cart, ($cart) =>
18
+ $cart.reduce((a, b) => +a + b.price * b.quantity, 0)
19
+ )
20
+
21
+ // export const totalQuantity = computed(cart, ($cart) =>
22
+ // $cart.reduce((a, b) => +a + b.quantity, 0)
23
+ // )
@@ -0,0 +1,16 @@
1
+ export type GlobalProps = {
2
+ if?: any
3
+ theme?: 'light' | 'dark' | string | null | undefined
4
+ color?: 'base' | 'brand' | string | null | undefined
5
+ size?: 'sm' | 'md' | 'lg' | string | number | null | undefined
6
+ contrast?: boolean | undefined
7
+ }
8
+
9
+ // declare global {
10
+ // type GlobalProps = {
11
+ // theme?: 'light' | 'dark' | undefined
12
+ // color?: 'base' | 'brand' | undefined
13
+ // size?: 'sm' | 'md' | 'lg' | undefined
14
+ // contrast?: boolean | undefined
15
+ // }
16
+ // }
@@ -0,0 +1,5 @@
1
+ declare module 'virtual:*' {
2
+ import type { Config } from 'fulldev-ui/integration'
3
+ const content: Config
4
+ export default content
5
+ }
@@ -4,5 +4,5 @@
4
4
  // [Key in keyof C & string as
5
5
  // | Lowercase<Key>
6
6
  // | Capitalize<Key>
7
- // | `${string}${Capitalize<Key>}`]?: C[Key]
7
+ // | `${string}${Capitalize<Key>}`]?: undefined | C[Key]
8
8
  // }
@@ -0,0 +1,28 @@
1
+ // import { getEntry } from 'astro:content'
2
+ // import { assign } from 'radash'
3
+
4
+ // export const mergeEntries = async (entry: any) => {
5
+ // if (!entry) return entry
6
+ // const { data, slug } = entry
7
+ // const baseSettings = await getEntry('layouts', 'base')
8
+ // const enSettings = await getEntry('layouts', 'en')
9
+ // const deSettings = await getEntry('layouts', 'de')
10
+ // const frSettings = await getEntry('layouts', 'fr')
11
+ // const pageSettings = data.settings && (await getEntry(data.settings))
12
+ // const i18nSettings = data.i18n && (await getEntry(data.i18n))
13
+
14
+ // let merged = {}
15
+ // merged = assign(merged, baseSettings?.data ?? {})
16
+ // slug?.startsWith('en') && (merged = assign(merged, enSettings?.data ?? {}))
17
+ // slug?.startsWith('de') && (merged = assign(merged, deSettings?.data ?? {}))
18
+ // slug?.startsWith('fr') && (merged = assign(merged, frSettings?.data ?? {}))
19
+ // merged = assign(merged, i18nSettings?.data ?? {})
20
+ // merged = assign(merged, pageSettings?.data ?? {})
21
+ // merged = assign(merged, data)
22
+
23
+ // const newEntry = {
24
+ // ...entry,
25
+ // data: merged,
26
+ // }
27
+ // return newEntry
28
+ // }
@@ -0,0 +1,32 @@
1
+ const slugify = (input: string): string => {
2
+ return input
3
+ .toLowerCase()
4
+ .replace(/[^a-z0-9]+/g, '-')
5
+ .replace(/^-+|-+$/g, '')
6
+ }
7
+
8
+ export const generateProductId = (
9
+ slug: string,
10
+ variants?: string[] | undefined
11
+ ): string => {
12
+ const slugified = slugify(slug)
13
+
14
+ if (variants && variants.length > 0)
15
+ return `${slugified}--${variants.map((variant) => slugify(variant)).join('--')}`
16
+
17
+ return slugified
18
+ }
19
+
20
+ export const generateProductName = (
21
+ title: string,
22
+ variants?: string[] | undefined
23
+ ): string => {
24
+ if (variants && variants.length > 0)
25
+ return `${title} / ${variants.join(' / ')}`
26
+
27
+ return title
28
+ }
29
+
30
+ export const formatPrice = (price: number): string => {
31
+ return `€${price?.toFixed(2).replace('.', ',')}`
32
+ }
@@ -0,0 +1,14 @@
1
+ import { getCollection, type CollectionEntry } from 'astro:content'
2
+
3
+ // Pages that reference the current page
4
+ export const getDeepReferenceChildren = async (
5
+ slug: CollectionEntry<'pages'>['slug']
6
+ ) =>
7
+ (
8
+ await getCollection('pages', (page) =>
9
+ page.data?.parents?.some((p: any) => p.slug.includes(slug))
10
+ )
11
+ )?.map(({ slug, data }) => ({
12
+ ...data,
13
+ href: `/${slug}/`,
14
+ }))
@@ -0,0 +1,18 @@
1
+ import { getCollection, type CollectionEntry } from 'astro:content'
2
+
3
+ // Records that are in a folder with the current page's slug
4
+ export const getFolderChildren = async (
5
+ slug: CollectionEntry<'pages'>['slug']
6
+ ) =>
7
+ (
8
+ await getCollection(
9
+ 'pages',
10
+ (page) =>
11
+ page.slug.startsWith(slug) &&
12
+ page.slug !== slug &&
13
+ !page.slug.replace(`${slug}/`, '').includes('/')
14
+ )
15
+ )?.map(({ slug, data }) => ({
16
+ ...data,
17
+ href: `/${slug}/`,
18
+ }))
@@ -0,0 +1,14 @@
1
+ import { getCollection, type CollectionEntry } from 'astro:content'
2
+
3
+ // Pages that reference the current page
4
+ export const getReferenceChildren = async (
5
+ slug: CollectionEntry<'pages'>['slug']
6
+ ) =>
7
+ (
8
+ await getCollection('pages', (page) =>
9
+ page.data?.parents?.some((p: any) => p.slug === slug)
10
+ )
11
+ )?.map(({ slug, data }) => ({
12
+ ...data,
13
+ href: `/${slug}/`,
14
+ }))
@@ -0,0 +1,14 @@
1
+ import { getCollection, type CollectionEntry } from 'astro:content'
2
+
3
+ // Pages that are in the same folder as the current page
4
+ export const getSiblingPages = async (slug: CollectionEntry<'pages'>['slug']) =>
5
+ (
6
+ await getCollection('pages', (page) => {
7
+ const currentPageFolder = slug.split('/').slice(0, -1).join('/')
8
+ const pageFolder = page.slug.split('/').slice(0, -1).join('/')
9
+ return page.slug !== slug && pageFolder === currentPageFolder
10
+ })
11
+ )?.map(({ slug, data }) => ({
12
+ ...data,
13
+ href: `/${slug}/`,
14
+ }))
package/tsconfig.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
- "extends": "astro/tsconfigs/strict",
2
+ "extends": "astro/tsconfigs/strictest",
3
+ "include": ["src", "astro.config.ts"],
3
4
  "compilerOptions": {
4
- "jsx": "preserve",
5
5
  "baseUrl": ".",
6
6
  "paths": {
7
7
  "fulldev-ui/*": [
@@ -9,7 +9,4 @@
9
9
  ]
10
10
  }
11
11
  },
12
- "exclude": [
13
- "dist"
14
- ]
15
12
  }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "",
3
- "short_name": "",
4
- "icons": [
5
- {
6
- "src": "/favicon/android-chrome-192x192.png",
7
- "sizes": "192x192",
8
- "type": "image/png"
9
- },
10
- {
11
- "src": "/favicon/android-chrome-512x512.png",
12
- "sizes": "512x512",
13
- "type": "image/png"
14
- }
15
- ],
16
- "theme_color": "#ffffff",
17
- "background_color": "#ffffff",
18
- "display": "standalone"
19
- }
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -1 +0,0 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" width="220" height="40" fill="none" viewBox="0 0 220 40"><path fill="#0E1534" d="M20 40c11.046 0 20-8.954 20-20V6a6 6 0 0 0-6-6H21v8.774c0 2.002.122 4.076 1.172 5.78a9.999 9.999 0 0 0 6.904 4.627l.383.062a.8.8 0 0 1 0 1.514l-.383.062a10 10 0 0 0-8.257 8.257l-.062.383a.8.8 0 0 1-1.514 0l-.062-.383a10 10 0 0 0-4.627-6.904C12.85 21.122 10.776 21 8.774 21H.024C.547 31.581 9.29 40 20 40Z"></path><path fill="#0E1534" d="M0 19h8.774c2.002 0 4.076-.122 5.78-1.172a10.018 10.018 0 0 0 3.274-3.274C18.878 12.85 19 10.776 19 8.774V0H6a6 6 0 0 0-6 6v13ZM46.455 2a2 2 0 1 1-4 0 2 2 0 0 1 4 0ZM211.711 12.104c5.591 0 8.289 3.905 8.289 8.428v8.495h-5.851V21.54c0-2.05-.748-3.742-2.893-3.742-2.145 0-2.86 1.692-2.86 3.742v7.486h-5.851V21.54c0-2.05-.715-3.742-2.861-3.742-2.145 0-2.893 1.692-2.893 3.742v7.486h-5.85v-8.495c0-4.523 2.697-8.428 8.288-8.428 3.056 0 5.266 1.204 6.274 3.189 1.072-1.985 3.413-3.19 6.208-3.19ZM180.427 23.82c1.885 0 2.698-1.725 2.698-3.776v-7.29h5.85v8.006c0 4.784-2.795 8.755-8.548 8.755-5.754 0-8.549-3.97-8.549-8.755v-8.006h5.851v7.29c0 2.05.812 3.776 2.698 3.776ZM163.275 29.547c-3.673 0-6.046-1.269-7.444-3.742l4.226-2.376c.585 1.041 1.462 1.562 2.925 1.562 1.203 0 1.755-.423 1.755-.944 0-1.985-8.581.033-8.581-6.28 0-3.06 2.6-5.533 7.021-5.533 3.868 0 5.981 1.887 6.924 3.71l-4.226 2.408c-.357-.976-1.463-1.562-2.568-1.562-.845 0-1.3.358-1.3.846 0 2.018 8.581.163 8.581 6.281 0 3.417-3.348 5.63-7.313 5.63ZM142.833 36.512h-5.851V20.858c0-4.98 3.738-8.592 8.939-8.592 5.071 0 8.939 3.873 8.939 8.592 0 5.207-3.446 8.657-8.614 8.657-1.203 0-2.405-.358-3.413-.912v7.909Zm3.088-12.497c1.853 0 3.088-1.432 3.088-3.125 0-1.724-1.235-3.124-3.088-3.124s-3.088 1.4-3.088 3.125c0 1.692 1.235 3.124 3.088 3.124ZM131.121 11.03c-1.918 0-3.51-1.595-3.51-3.515 0-1.92 1.592-3.515 3.51-3.515 1.918 0 3.511 1.595 3.511 3.515 0 1.92-1.593 3.515-3.511 3.515Zm-2.925 1.724h5.851v16.273h-5.851V12.754ZM116.97 29.515c-5.071 0-8.939-3.905-8.939-8.657 0-4.719 3.868-8.624 8.939-8.624s8.939 3.905 8.939 8.624c0 4.752-3.868 8.657-8.939 8.657Zm0-5.5c1.853 0 3.088-1.432 3.088-3.125 0-1.724-1.235-3.156-3.088-3.156s-3.088 1.432-3.088 3.156c0 1.693 1.235 3.125 3.088 3.125ZM96.983 37c-4.03 0-6.956-1.79-8.451-4.98l4.843-2.603c.52 1.107 1.495 2.246 3.51 2.246 2.114 0 3.511-1.335 3.674-3.678-.78.684-2.016 1.204-3.868 1.204-4.519 0-8.16-3.482-8.16-8.364 0-4.718 3.869-8.559 8.94-8.559 5.201 0 8.939 3.613 8.939 8.592v6.444c0 5.858-4.064 9.698-9.427 9.698Zm.39-13.31c1.755 0 3.088-1.205 3.088-2.995 0-1.757-1.332-2.929-3.088-2.929-1.723 0-3.088 1.172-3.088 2.93 0 1.79 1.365 2.993 3.088 2.993ZM78.607 29.515c-5.071 0-8.94-3.905-8.94-8.657 0-4.719 3.869-8.624 8.94-8.624 5.07 0 8.939 3.905 8.939 8.624 0 4.752-3.869 8.657-8.94 8.657Zm0-5.5c1.853 0 3.088-1.432 3.088-3.125 0-1.724-1.235-3.156-3.088-3.156s-3.088 1.432-3.088 3.156c0 1.693 1.235 3.125 3.088 3.125ZM59.013 7.06v16.434H68.7v5.533H58.2c-3.705 0-5.2-1.953-5.2-5.045V7.06h6.013Z"></path></svg>