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

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 (347) hide show
  1. package/.env.example +3 -0
  2. package/.prettierrc.yaml +1 -0
  3. package/astro.config.ts +10 -34
  4. package/cloudcannon.config.yml +217 -0
  5. package/package.json +25 -29
  6. package/pnpm-lock.yaml +943 -2157
  7. package/public/favicon/android-chrome-192x192.png +0 -0
  8. package/public/favicon/android-chrome-512x512.png +0 -0
  9. package/public/favicon/apple-touch-icon.png +0 -0
  10. package/public/favicon/manifest.webmanifest +7 -3
  11. package/public/favicon/mstile-150x150.png +0 -0
  12. package/src/blocks/Banner.astro +14 -29
  13. package/src/blocks/Contact1.astro +92 -0
  14. package/src/blocks/Cta1.astro +72 -0
  15. package/src/blocks/Feature1.astro +67 -0
  16. package/src/blocks/Features1.astro +75 -0
  17. package/src/blocks/Footer.astro +100 -3
  18. package/src/blocks/Header.astro +192 -3
  19. package/src/blocks/Hero1.astro +74 -0
  20. package/src/blocks/Job1.astro +97 -0
  21. package/src/blocks/Products1.astro +90 -0
  22. package/src/blocks/Reviews1.astro +75 -0
  23. package/src/blocks/_Hero.astro +245 -0
  24. package/src/components/Avatar.astro +28 -9
  25. package/src/components/Avatars.astro +36 -0
  26. package/src/components/Badge.astro +63 -24
  27. package/src/components/Badges.astro +16 -23
  28. package/src/components/Banner.astro +26 -0
  29. package/src/components/Block.astro +49 -0
  30. package/src/components/Blocks.astro +26 -0
  31. package/src/components/Breadcrumb.astro +58 -0
  32. package/src/components/Button.astro +49 -119
  33. package/src/components/Buttons.astro +23 -13
  34. package/src/components/Card.astro +9 -137
  35. package/src/components/Cards.astro +33 -35
  36. package/src/components/Carousel.astro +106 -0
  37. package/src/components/Cart.astro +18 -14
  38. package/src/components/CartAdd.svelte +76 -0
  39. package/src/components/CartCheckout.svelte +58 -0
  40. package/src/components/CartForm.svelte +130 -0
  41. package/src/components/CartList.svelte +88 -0
  42. package/src/components/CartQuantity.svelte +81 -0
  43. package/src/components/CartSummary.astro +16 -105
  44. package/src/components/CartTotal.svelte +15 -0
  45. package/src/components/Channel.astro +44 -35
  46. package/src/components/Channels.astro +20 -6
  47. package/src/components/Checkbox.astro +52 -27
  48. package/src/components/Code.astro +52 -0
  49. package/src/components/Container.astro +25 -0
  50. package/src/components/Dialog.astro +3 -2
  51. package/src/components/Drawer.astro +55 -146
  52. package/src/components/DrawerOld.astro +143 -0
  53. package/src/components/Element.astro +18 -8
  54. package/src/components/Form.astro +16 -13
  55. package/src/components/Gallery.astro +174 -0
  56. package/src/components/Head.astro +62 -25
  57. package/src/components/Header.astro +10 -115
  58. package/src/components/Heading.astro +51 -44
  59. package/src/components/Icon.astro +29 -33
  60. package/src/components/Image.astro +18 -68
  61. package/src/components/Input.astro +65 -51
  62. package/src/components/Label.astro +20 -15
  63. package/src/components/Layout.astro +35 -0
  64. package/src/components/Link.astro +51 -32
  65. package/src/components/Links.astro +42 -0
  66. package/src/components/List.astro +41 -16
  67. package/src/components/LocaleSwitcher.astro +2 -2
  68. package/src/components/Logo.astro +56 -0
  69. package/src/components/Menu.astro +21 -17
  70. package/src/components/Navigation.astro +39 -0
  71. package/src/components/Panel.astro +25 -0
  72. package/src/components/Paragraph.astro +55 -0
  73. package/src/components/Price.astro +4 -4
  74. package/src/components/Prose.astro +78 -0
  75. package/src/components/Rating.astro +23 -62
  76. package/src/components/Search.astro +107 -43
  77. package/src/components/Section.astro +13 -242
  78. package/src/components/Select.astro +45 -55
  79. package/src/components/Sidebar.astro +53 -76
  80. package/src/components/Social.astro +11 -9
  81. package/src/components/Socials.astro +9 -5
  82. package/src/components/Subheader.astro +59 -0
  83. package/src/components/Switch.astro +72 -29
  84. package/src/components/Table.astro +1 -1
  85. package/src/components/Tagline.astro +32 -14
  86. package/src/components/Textarea.astro +40 -50
  87. package/src/components/Themer.astro +76 -0
  88. package/src/components/Toc.astro +32 -31
  89. package/src/components/_Author.astro +90 -0
  90. package/src/components/_Header.astro +129 -0
  91. package/src/components/_Image.astro +79 -0
  92. package/src/components/_Prose copy.astro +172 -0
  93. package/src/components/_Sidebar copy.astro +87 -0
  94. package/src/components/docs/PropsTable.astro +38 -264
  95. package/src/components/experimental/Window.astro +5 -57
  96. package/src/content/config.ts +4 -10
  97. package/src/content/{presets → layouts}/base.yml +52 -73
  98. package/src/content/pages/blocks/_categories.mdx +0 -2
  99. package/src/content/pages/blocks/_footer.mdx +0 -2
  100. package/src/content/pages/blocks/_header.mdx +0 -4
  101. package/src/content/pages/blocks/_jobs.mdx +0 -2
  102. package/src/content/pages/blocks/_prices.mdx +0 -2
  103. package/src/content/pages/blocks/_product.mdx +0 -2
  104. package/src/content/pages/blocks/_products.mdx +0 -2
  105. package/src/content/pages/blocks/_stats.mdx +0 -2
  106. package/src/content/pages/blocks/banner.mdx +0 -2
  107. package/src/content/pages/blocks/colleagues.mdx +0 -3
  108. package/src/content/pages/blocks/contact.mdx +0 -2
  109. package/src/content/pages/blocks/content.mdx +0 -6
  110. package/src/content/pages/blocks/cta.mdx +0 -10
  111. package/src/content/pages/blocks/features.mdx +0 -5
  112. package/src/content/pages/blocks/hero.mdx +0 -5
  113. package/src/content/pages/blocks/intro.mdx +0 -5
  114. package/src/content/pages/blocks/posts.mdx +0 -2
  115. package/src/content/pages/blocks/reviews.mdx +0 -3
  116. package/src/content/pages/categories/category.md +7 -0
  117. package/src/content/pages/docs/_internationalization.mdx +55 -0
  118. package/src/content/pages/docs/_using-blocks.mdx +33 -0
  119. package/src/content/pages/docs/_using-presets.mdx +49 -0
  120. package/src/content/pages/docs/blocks.mdx +33 -0
  121. package/src/content/pages/docs/collections/images.mdx +102 -0
  122. package/src/content/pages/docs/collections/pages.mdx +119 -0
  123. package/src/content/pages/docs/collections/presets.mdx +60 -0
  124. package/src/content/pages/docs/collections.mdx +42 -0
  125. package/src/content/pages/{base/card.mdx → docs/components/_card.mdx} +2 -5
  126. package/src/content/pages/{base → docs/components}/_dialog.mdx +1 -2
  127. package/src/content/pages/{base → docs/components}/_drawer.mdx +1 -2
  128. package/src/content/pages/{base → docs/components}/_localeswitcher.mdx +1 -2
  129. package/src/content/pages/{base → docs/components}/_switch.mdx +3 -4
  130. package/src/content/pages/{typography → docs/components}/_tagline.mdx +3 -4
  131. package/src/content/pages/docs/components/_toggle.mdx +30 -0
  132. package/src/content/pages/docs/components/avatar.mdx +34 -0
  133. package/src/content/pages/{base → docs/components}/badge.mdx +28 -10
  134. package/src/content/pages/docs/components/badges.mdx +46 -0
  135. package/src/content/pages/docs/components/button.mdx +78 -0
  136. package/src/content/pages/docs/components/buttons.mdx +51 -0
  137. package/src/content/pages/docs/components/channel.mdx +91 -0
  138. package/src/content/pages/docs/components/channels.mdx +89 -0
  139. package/src/content/pages/docs/components/checkbox.mdx +34 -0
  140. package/src/content/pages/docs/components/code.mdx +45 -0
  141. package/src/content/pages/docs/components/heading.mdx +59 -0
  142. package/src/content/pages/docs/components/icon.mdx +48 -0
  143. package/src/content/pages/docs/components/image.mdx +25 -0
  144. package/src/content/pages/docs/components/input.mdx +40 -0
  145. package/src/content/pages/{typography → docs/components}/label.mdx +9 -6
  146. package/src/content/pages/{typography → docs/components}/link.mdx +24 -10
  147. package/src/content/pages/docs/components/links.mdx +99 -0
  148. package/src/content/pages/docs/components/list.mdx +44 -0
  149. package/src/content/pages/docs/components/logo.mdx +36 -0
  150. package/src/content/pages/docs/components/menu.mdx +89 -0
  151. package/src/content/pages/docs/components/prose.mdx +36 -0
  152. package/src/content/pages/docs/components/rating.mdx +76 -0
  153. package/src/content/pages/{base → docs/components}/section.mdx +2 -3
  154. package/src/content/pages/{base → docs/components}/select.mdx +1 -11
  155. package/src/content/pages/docs/components/social.mdx +94 -0
  156. package/src/content/pages/docs/components/socials.mdx +102 -0
  157. package/src/content/pages/docs/components/switch.mdx +34 -0
  158. package/src/content/pages/{base → docs/components}/table.mdx +1 -4
  159. package/src/content/pages/docs/components/tagline.mdx +46 -0
  160. package/src/content/pages/docs/components/text.mdx +48 -0
  161. package/src/content/pages/docs/components/textarea.mdx +34 -0
  162. package/src/content/pages/docs/components/themer.mdx +49 -0
  163. package/src/content/pages/docs/components.mdx +37 -0
  164. package/src/content/pages/docs/customization.mdx +151 -0
  165. package/src/content/pages/docs/frameworks.mdx +29 -0
  166. package/src/content/pages/docs/generating-pages.mdx +129 -0
  167. package/src/content/pages/docs/index.mdx +20 -0
  168. package/src/content/pages/docs/installation.mdx +50 -0
  169. package/src/content/pages/docs/layouts.mdx +33 -0
  170. package/src/content/pages/index.mdx +25 -33
  171. package/src/content/pages/posts/post.md +7 -0
  172. package/src/content/pages/products/product.md +20 -0
  173. package/src/content/pages/showcase/anti-slip-profiles.md +2 -2
  174. package/src/content/pages/showcase/fulldev-ui.md +1 -1
  175. package/src/content/pages/showcase/lavis-detailing.md +1 -1
  176. package/src/content/pages/showcase/leren-trainingsacteren.md +1 -1
  177. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +1 -1
  178. package/src/content/pages/showcase/sloepverhuur-bolsward.md +1 -1
  179. package/src/content/pages/showcase/stark-vulcanising-products.md +1 -1
  180. package/src/content/pages/showcase/the-gym-haren.md +1 -1
  181. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +1 -1
  182. package/src/content/pages/showcase.mdx +4 -3
  183. package/src/css/color.css +0 -10
  184. package/src/css/custom.css +10 -12
  185. package/src/css/size.css +2 -11
  186. package/src/css/theme.css +95 -0
  187. package/src/env.d.ts +1 -0
  188. package/src/images/favicon/android-chrome-192x192.png +0 -0
  189. package/src/images/favicon/android-chrome-512x512.png +0 -0
  190. package/src/images/favicon/apple-touch-icon.png +0 -0
  191. package/src/images/favicon/browserconfig.xml +9 -0
  192. package/src/images/favicon/favicon-16x16.png +0 -0
  193. package/src/images/favicon/favicon-32x32.png +0 -0
  194. package/src/images/favicon/favicon-48x48.png +0 -0
  195. package/src/images/favicon/favicon.ico +0 -0
  196. package/src/images/favicon/favicon.svg +16 -0
  197. package/src/images/favicon/manifest.webmanifest +30 -0
  198. package/src/images/favicon/mstile-150x150.png +0 -0
  199. package/src/images/favicon/safari-pinned-tab.svg +16 -0
  200. package/src/images/favicon/yandex-browser-50x50.png +0 -0
  201. package/src/images/favicon/yandex-browser-manifest.json +9 -0
  202. package/src/images/logo-1.svg +11 -0
  203. package/src/images/logo-2.svg +13 -0
  204. package/src/images/logo-basic.svg +10 -0
  205. package/src/images/logo-simple.svg +13 -0
  206. package/src/images/logo-thin.svg +15 -0
  207. package/src/images/logo.svg +14 -0
  208. package/src/images/logofat.svg +11 -0
  209. package/src/integration/index.ts +110 -140
  210. package/src/layouts/Category.astro +131 -0
  211. package/src/layouts/Doc.astro +72 -0
  212. package/src/layouts/Job.astro +64 -0
  213. package/src/layouts/Page.astro +30 -0
  214. package/src/layouts/Post.astro +20 -0
  215. package/src/layouts/Product.astro +110 -0
  216. package/src/pages/[...page].astro +29 -24
  217. package/src/pages/test.astro +37 -0
  218. package/src/schemas/blocks/banner.ts +10 -0
  219. package/src/schemas/blocks/categories.ts +14 -0
  220. package/src/schemas/blocks/contact.ts +18 -0
  221. package/src/schemas/blocks/cta.ts +19 -0
  222. package/src/schemas/blocks/feature.ts +18 -0
  223. package/src/schemas/blocks/features.ts +24 -0
  224. package/src/schemas/blocks/hero.ts +20 -0
  225. package/src/schemas/blocks/intro.ts +16 -0
  226. package/src/schemas/blocks/products.ts +14 -0
  227. package/src/schemas/blocks/reviews.ts +24 -0
  228. package/src/schemas/components/avatar.ts +4 -1
  229. package/src/schemas/components/badge.ts +16 -11
  230. package/src/schemas/components/block.ts +22 -0
  231. package/src/schemas/components/button.ts +17 -14
  232. package/src/schemas/components/channel.ts +15 -9
  233. package/src/schemas/components/footer.ts +15 -21
  234. package/src/schemas/components/head.ts +17 -0
  235. package/src/schemas/components/header.ts +19 -7
  236. package/src/schemas/components/heading.ts +7 -1
  237. package/src/schemas/components/icon.ts +7 -1
  238. package/src/schemas/components/image.ts +38 -16
  239. package/src/schemas/components/link.ts +17 -0
  240. package/src/schemas/components/logo.ts +12 -2
  241. package/src/schemas/components/menu.ts +11 -11
  242. package/src/schemas/components/navigation.ts +10 -0
  243. package/src/schemas/components/paragraph.ts +9 -0
  244. package/src/schemas/components/price.ts +7 -1
  245. package/src/schemas/components/rating.ts +8 -13
  246. package/src/schemas/components/sidebar.ts +14 -11
  247. package/src/schemas/components/social.ts +16 -1
  248. package/src/schemas/components/tagline.ts +7 -1
  249. package/src/schemas/imageSchema.ts +30 -1
  250. package/src/schemas/layoutSchema.ts +22 -0
  251. package/src/schemas/pageSchema.ts +26 -96
  252. package/src/stores/cart.svelte.ts +79 -0
  253. package/src/stores/cart.ts +59 -6
  254. package/src/types/global-props.ts +0 -9
  255. package/src/types/{virtual-modules.d.ts → virtual.d.ts} +1 -1
  256. package/src/utils/cart.ts +1 -10
  257. package/src/utils/formatEntries.ts +8 -0
  258. package/src/utils/formatEntry.ts +29 -0
  259. package/src/utils/getDeepReferenceChildren.ts +14 -0
  260. package/src/utils/getHref.ts +6 -0
  261. package/src/utils/getReferenceChildren.ts +1 -1
  262. package/src/utils/setTheme.ts +18 -0
  263. package/src/utils/slugify.ts +6 -0
  264. package/svelte.config.js +5 -0
  265. package/tailwind.config.ts +67 -0
  266. package/tsconfig.json +1 -3
  267. package/src/blocks/Article.astro +0 -40
  268. package/src/blocks/Categories.astro +0 -12
  269. package/src/blocks/Colleagues.astro +0 -13
  270. package/src/blocks/Contact.astro +0 -116
  271. package/src/blocks/Content.astro +0 -12
  272. package/src/blocks/Cta.astro +0 -15
  273. package/src/blocks/Excerpt.astro +0 -14
  274. package/src/blocks/Features.astro +0 -11
  275. package/src/blocks/Hero.astro +0 -15
  276. package/src/blocks/Intro.astro +0 -23
  277. package/src/blocks/Jobs.astro +0 -12
  278. package/src/blocks/Posts.astro +0 -11
  279. package/src/blocks/Prices.astro +0 -24
  280. package/src/blocks/Product.astro +0 -110
  281. package/src/blocks/Products.astro +0 -11
  282. package/src/blocks/Reviews.astro +0 -13
  283. package/src/components/CartForm.astro +0 -121
  284. package/src/components/CartList.astro +0 -134
  285. package/src/components/Footer.astro +0 -193
  286. package/src/components/Text.astro +0 -43
  287. package/src/components/ThemeSelect.astro +0 -41
  288. package/src/components/Writeup.astro +0 -90
  289. package/src/components/experimental/Form.astro +0 -53
  290. package/src/components/experimental/Gallery.astro +0 -104
  291. package/src/components/experimental/Logo.astro +0 -38
  292. package/src/components/experimental/Prose.astro +0 -192
  293. package/src/components/sections.astro +0 -28
  294. package/src/content/pages/base/button.mdx +0 -60
  295. package/src/content/pages/base/checkbox.mdx +0 -42
  296. package/src/content/pages/base/icon.mdx +0 -55
  297. package/src/content/pages/base/image.mdx +0 -42
  298. package/src/content/pages/base/input.mdx +0 -56
  299. package/src/content/pages/base/rating.mdx +0 -55
  300. package/src/content/pages/base/textarea.mdx +0 -58
  301. package/src/content/pages/base/theme-select.mdx +0 -15
  302. package/src/content/pages/layouts/_layout.mdx +0 -14
  303. package/src/content/pages/layouts/docslayout.mdx +0 -14
  304. package/src/content/pages/overview/components.mdx +0 -75
  305. package/src/content/pages/overview/content-collections.mdx +0 -139
  306. package/src/content/pages/overview/frameworks.mdx +0 -198
  307. package/src/content/pages/overview/installation.mdx +0 -53
  308. package/src/content/pages/overview/introduction.mdx +0 -30
  309. package/src/content/pages/overview/theming.mdx +0 -69
  310. package/src/content/pages/schemas/page.mdx +0 -17
  311. package/src/content/pages/schemas/preset.mdx +0 -9
  312. package/src/content/pages/showcase/record.md +0 -3
  313. package/src/content/pages/typography/heading.mdx +0 -73
  314. package/src/content/pages/typography/list.mdx +0 -51
  315. package/src/content/pages/typography/text.mdx +0 -61
  316. package/src/content/presets/blocks.yml +0 -1
  317. package/src/content/presets/docs.yml +0 -6
  318. package/src/css/space.css +0 -77
  319. package/src/css/styles.css +0 -0
  320. package/src/images/avatar-1.yml +0 -1
  321. package/src/integration/generate-colors.ts +0 -639
  322. package/src/integration/tailwind-plugin.ts +0 -80
  323. package/src/integration/unocss-preset.ts +0 -84
  324. package/src/layouts/BlockLayout.astro +0 -19
  325. package/src/layouts/ContactLayout.astro +0 -21
  326. package/src/layouts/DocsLayout.astro +0 -73
  327. package/src/layouts/Layout.astro +0 -163
  328. package/src/layouts/OverviewLayout.astro +0 -42
  329. package/src/layouts/PostLayout.astro +0 -21
  330. package/src/layouts/ProductLayout.astro +0 -21
  331. package/src/loaders/imageLoader.ts +0 -26
  332. package/src/schemas/components/avatars.ts +0 -4
  333. package/src/schemas/components/buttons.ts +0 -4
  334. package/src/schemas/components/card.ts +0 -25
  335. package/src/schemas/components/cards.ts +0 -4
  336. package/src/schemas/components/channels.ts +0 -4
  337. package/src/schemas/components/images.ts +0 -4
  338. package/src/schemas/components/list.ts +0 -3
  339. package/src/schemas/components/section.ts +0 -15
  340. package/src/schemas/components/sections.ts +0 -3
  341. package/src/schemas/components/socials.ts +0 -4
  342. package/src/schemas/components/text.ts +0 -3
  343. package/src/schemas/components/toc.ts +0 -3
  344. package/src/schemas/components/writeup.ts +0 -20
  345. package/src/schemas/presetSchema.ts +0 -3
  346. package/src/schemas/utils/navigation.ts +0 -8
  347. package/src/schemas/utils/parents.ts +0 -3
@@ -0,0 +1,245 @@
1
+ <!-- ---
2
+ import type { ComponentProps,HTMLAttributes,HTMLTag } from 'astro/types'
3
+ import Badge from 'fulldev-ui/components/Badge.astro'
4
+ import Buttons from 'fulldev-ui/components/Buttons.astro'
5
+ import Element from 'fulldev-ui/components/Element.astro'
6
+ import Heading from 'fulldev-ui/components/Heading.astro'
7
+ import Image from 'fulldev-ui/components/Image.astro'
8
+ import Paragraph,{
9
+ default as Lead,
10
+ } from 'fulldev-ui/components/Paragraph.astro'
11
+ import Rating from 'fulldev-ui/components/Rating.astro'
12
+ import Tagline from 'fulldev-ui/components/Tagline.astro'
13
+
14
+ interface Props extends HTMLAttributes<'section'> {
15
+ rating?: ComponentProps<typeof Rating> | undefined
16
+ badge?: ComponentProps<typeof Badge> | undefined
17
+ tagline?: ComponentProps<typeof Tagline>['text']
18
+ heading?: ComponentProps<typeof Heading>['text']
19
+ lead?: ComponentProps<typeof Lead>['text']
20
+ paragraph?: ComponentProps<typeof Paragraph>['text']
21
+ buttons?: ComponentProps<typeof Buttons>['buttons']
22
+ image?: ComponentProps<typeof Image>['id']
23
+ level?: ComponentProps<typeof Heading>['level']
24
+ as?: HTMLTag
25
+ size?: 'sm' | 'md' | 'lg' | undefined
26
+ variant?: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | undefined
27
+ }
28
+
29
+ const {
30
+ as = 'section',
31
+ size = 'lg',
32
+ variant = 1,
33
+ level = 1,
34
+ rating,
35
+ tagline,
36
+ badge,
37
+ heading,
38
+ lead,
39
+ paragraph,
40
+ buttons,
41
+ image,
42
+ ...rest
43
+ } = Astro.props
44
+ ---
45
+
46
+ <Element
47
+ class:list="hero"
48
+ {as}
49
+ {size}
50
+ {variant}
51
+ {...rest}
52
+ >
53
+ <Element class:list="hero-container">
54
+ <Element class:list="hero-segment">
55
+ <Element class:list="hero-content">
56
+ <Rating
57
+ {size}
58
+ {...rating}
59
+ />
60
+ <Tagline
61
+ text={tagline}
62
+ {size}
63
+ />
64
+ <Badge
65
+ {size}
66
+ {...badge}
67
+ />
68
+ <Heading
69
+ text={heading}
70
+ {level}
71
+ {size}
72
+ />
73
+ <Paragraph
74
+ text={lead}
75
+ {size}
76
+ />
77
+ <Paragraph
78
+ text={paragraph}
79
+ {size}
80
+ />
81
+ <slot name="content" />
82
+ </Element>
83
+ <Buttons
84
+ variant="primary"
85
+ {size}
86
+ {buttons}
87
+ />
88
+ <slot name="segment" />
89
+ </Element>
90
+ <Image
91
+ class:list="hero-image"
92
+ {...image}
93
+ />
94
+ <slot />
95
+ </Element>
96
+ </Element>
97
+
98
+ <style is:global>
99
+ @layer fulldev {
100
+ .hero {
101
+ @apply relative w-full;
102
+
103
+ .hero-container {
104
+ @apply flex h-full w-full flex-col;
105
+ }
106
+
107
+ .hero-segment {
108
+ @apply z-10 flex flex-col items-start gap-8;
109
+ }
110
+
111
+ .hero-content {
112
+ @apply flex max-w-screen-md flex-col gap-6;
113
+ }
114
+
115
+ &.dark {
116
+ @apply bg-background;
117
+ }
118
+
119
+ /* Column left aligned */
120
+ &.variant-1 {
121
+ .hero-container {
122
+ @apply container py-8;
123
+ }
124
+
125
+ .hero-segment {
126
+ @apply gap-8 py-16;
127
+ }
128
+
129
+ .content-image {
130
+ @apply rounded-lg;
131
+ }
132
+ }
133
+
134
+ /* Column centered */
135
+ &.variant-2 {
136
+ .hero-container {
137
+ @apply container items-center py-8;
138
+ }
139
+
140
+ .hero-segment {
141
+ @apply items-center py-16;
142
+ }
143
+
144
+ .hero-content {
145
+ @apply items-center text-center;
146
+ }
147
+
148
+ .content-image {
149
+ @apply rounded-lg;
150
+ }
151
+ }
152
+
153
+ /* Spread */
154
+ &.variant-3 {
155
+ .hero-container {
156
+ @apply container items-center py-8;
157
+ }
158
+
159
+ .hero-segment {
160
+ @apply w-full flex-row flex-wrap items-end justify-between py-16;
161
+ }
162
+
163
+ .content-image {
164
+ @apply rounded-lg;
165
+ }
166
+ }
167
+
168
+ /* Split */
169
+ &.variant-4 {
170
+ .hero-container {
171
+ @apply container py-8 lg:grid lg:grid-cols-2 lg:items-center;
172
+ }
173
+
174
+ .content-image {
175
+ @apply rounded-lg;
176
+ }
177
+ }
178
+
179
+ /* Split fill */
180
+ &.variant-5 {
181
+ @apply min-h-hero;
182
+
183
+ .hero-container {
184
+ @apply container px-0 lg:grid lg:grid-cols-2 lg:items-center;
185
+ }
186
+
187
+ .hero-segment {
188
+ @apply w-auto max-w-screen-md px-gutter pb-16 pt-24 lg:pb-24;
189
+ }
190
+
191
+ .hero-image {
192
+ @apply right-0 top-0 h-full object-cover lg:absolute lg:w-1/2;
193
+ }
194
+ }
195
+
196
+ /* Background left */
197
+ &.variant-6 {
198
+ @apply min-h-hero;
199
+
200
+ .hero-container {
201
+ @apply container justify-center py-16;
202
+ }
203
+
204
+ .hero-image {
205
+ @apply absolute inset-0 h-full w-full object-cover opacity-30;
206
+ }
207
+ }
208
+
209
+ /* Background center */
210
+ &.variant-7 {
211
+ @apply min-h-hero;
212
+
213
+ .hero-container {
214
+ @apply container items-center justify-center py-16;
215
+ }
216
+
217
+ .hero-image {
218
+ @apply absolute inset-0 h-full w-full object-cover opacity-30;
219
+ }
220
+
221
+ .hero-segment,
222
+ .hero-content {
223
+ @apply items-center text-center;
224
+ }
225
+ }
226
+
227
+ /* Background spread */
228
+ &.variant-8 {
229
+ @apply min-h-hero;
230
+
231
+ .hero-container {
232
+ @apply container items-center justify-end py-16;
233
+ }
234
+
235
+ .hero-image {
236
+ @apply absolute inset-0 h-full w-full object-cover opacity-30;
237
+ }
238
+
239
+ .hero-segment {
240
+ @apply w-full flex-row flex-wrap items-end justify-between;
241
+ }
242
+ }
243
+ }
244
+ }
245
+ </style> -->
@@ -1,26 +1,45 @@
1
1
  ---
2
2
  import type { ComponentProps } from 'astro/types'
3
3
  import Image from 'fulldev-ui/components/Image.astro'
4
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
5
 
5
- interface Props extends ComponentProps<typeof Image> {}
6
+ interface Props extends GlobalProps, ComponentProps<typeof Image> {
7
+ size?: 'sm' | 'md' | 'lg' | undefined
8
+ }
6
9
 
7
- const { ...rest } = Astro.props
10
+ const { size = 'md', ...rest } = Astro.props
11
+
12
+ const sizeMap = {
13
+ sm: 36,
14
+ md: 40,
15
+ lg: 44,
16
+ }
8
17
  ---
9
18
 
10
19
  <Image
11
20
  class:list={'avatar'}
21
+ width={sizeMap[size]}
22
+ height={sizeMap[size]}
23
+ {size}
12
24
  {...rest}
13
25
  />
14
26
 
15
- <style is:global lang="scss">
27
+ <style is:global>
16
28
  @layer fulldev {
17
29
  .avatar {
18
- display: block;
19
- border: 1px solid var(--base-a6);
20
- border-radius: 999px;
21
- width: calc(2.8 * var(--space-4));
22
- height: calc(2.8 * var(--space-4));
23
- object-fit: cover;
30
+ @apply aspect-square shrink-0 rounded-full bg-muted object-cover;
31
+
32
+ &.size-sm {
33
+ @apply size-9;
34
+ }
35
+
36
+ &.size-md {
37
+ @apply size-10;
38
+ }
39
+
40
+ &.size-lg {
41
+ @apply size-11;
42
+ }
24
43
  }
25
44
  }
26
45
  </style>
@@ -0,0 +1,36 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import Avatar from './Avatar.astro'
5
+
6
+ interface Props extends HTMLAttributes<'div'> {
7
+ size?: any
8
+ avatars?: ComponentProps<typeof Avatar>[] | undefined
9
+ avatar?: ComponentProps<typeof Avatar>['id'] | undefined
10
+ }
11
+
12
+ const { size = 'md', avatars = [], avatar, ...rest } = Astro.props
13
+ ---
14
+
15
+ <Element
16
+ class:list="avatars"
17
+ {size}
18
+ {...rest}
19
+ >
20
+ {
21
+ [avatar, ...avatars].filter(Boolean).map((id) => (
22
+ <Avatar
23
+ {size}
24
+ {id}
25
+ />
26
+ ))
27
+ }
28
+ </Element>
29
+
30
+ <style is:global>
31
+ @layer fulldev {
32
+ .avatars {
33
+ @apply inline-flex -space-x-3;
34
+ }
35
+ }
36
+ </style>
@@ -1,45 +1,84 @@
1
1
  ---
2
- import type { ComponentProps } from 'astro/types'
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
3
4
  import Icon from 'fulldev-ui/components/Icon.astro'
4
- import Button from './Button.astro'
5
+ import type { BadgeSchema } from 'fulldev-ui/schemas/components/badge'
5
6
 
6
- interface Props extends ComponentProps<typeof Button> {}
7
+ interface Props
8
+ extends HTMLAttributes<'button'>,
9
+ Omit<HTMLAttributes<'a'>, 'href' | 'target'>,
10
+ BadgeSchema {
11
+ as?: HTMLTag
12
+ type?: HTMLAttributes<'button'>['type'] & HTMLAttributes<'a'>['type']
13
+ reverse?: boolean | undefined
14
+ }
7
15
 
8
16
  const {
9
- variant = 'tertiary',
10
- color = 'base',
11
17
  href,
18
+ as = href ? 'a' : 'button',
19
+ variant = 'outline',
20
+ size = 'md',
12
21
  text,
13
22
  icon,
14
23
  ...rest
15
24
  } = Astro.props
16
25
  ---
17
26
 
18
- <Button
27
+ <Element
19
28
  class:list="badge"
20
- {variant}
29
+ {as}
21
30
  {href}
22
- {color}
31
+ {variant}
32
+ {size}
23
33
  {...rest}
24
34
  >
25
- <slot />
26
- <Fragment set:html={text} />
27
- <Icon name={icon} />
28
- </Button>
35
+ <Icon
36
+ size="sm"
37
+ name={icon}
38
+ />
39
+ <Element as="span">
40
+ <Fragment set:html={text} />
41
+ <slot />
42
+ </Element>
43
+ </Element>
29
44
 
30
- <style is:global lang="scss">
45
+ <style is:global>
31
46
  @layer fulldev {
32
- .button.badge {
33
- gap: var(--space-2);
34
- transition: all 0.15s ease;
35
- border: 1px solid var(--color-a7);
36
- border-radius: 999px;
37
- padding: 0 var(--space-3);
38
- height: calc(var(--text-1) + 2 * var(--space-2));
39
- font-size: var(--text-1);
40
-
41
- &:hover {
42
- border-color: var(--color-a8);
47
+ .badge {
48
+ @apply inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-full text-sm font-medium leading-none ring-offset-background transition-colors;
49
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
50
+ @apply disabled:pointer-events-none disabled:opacity-50;
51
+
52
+ &.size-sm {
53
+ @apply h-6 min-w-6 px-2;
54
+ }
55
+
56
+ &.size-md {
57
+ @apply h-7 min-w-7 px-3;
58
+ }
59
+
60
+ &.size-lg {
61
+ @apply h-8 min-w-8 px-3.5;
62
+ }
63
+
64
+ &.variant-primary {
65
+ @apply bg-primary text-primary-foreground hover:bg-primary-hover;
66
+ }
67
+
68
+ &.variant-secondary {
69
+ @apply bg-secondary text-secondary-foreground hover:bg-secondary-hover;
70
+ }
71
+
72
+ &.variant-outline {
73
+ @apply border border-input text-accent-foreground hover:bg-accent;
74
+ }
75
+
76
+ .icon {
77
+ @apply first:last:absolute;
78
+ }
79
+
80
+ span {
81
+ @apply text-inherit;
43
82
  }
44
83
  }
45
84
  }
@@ -1,26 +1,22 @@
1
1
  ---
2
2
  import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
- import Button from 'fulldev-ui/components/Button.astro'
4
3
  import Element from 'fulldev-ui/components/Element.astro'
5
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
4
  import Badge from './Badge.astro'
7
5
 
8
- interface Props extends GlobalProps, HTMLAttributes<'div'> {
9
- variant?: ComponentProps<typeof Button>['variant']
6
+ interface Props extends HTMLAttributes<'div'> {
7
+ variant?: ComponentProps<typeof Badge>['variant']
8
+ size?: ComponentProps<typeof Badge>['size']
10
9
  badges?: ComponentProps<typeof Badge>[] | undefined
10
+ badge?: ComponentProps<typeof Badge> | undefined
11
11
  }
12
12
 
13
- const { variant = 'secondary', badges, ...rest } = Astro.props
14
-
15
- const buttonVariant = (i: number) => {
16
- if (variant === 'primary' && i === 0) return 'primary'
17
- else if (variant === 'primary' && i === 1) return 'secondary'
18
- else if (variant === 'primary' && i > 1) return 'tertiary'
19
- else if (variant === 'secondary' && i === 0) return 'secondary'
20
- else if (variant === 'secondary' && i > 0) return 'tertiary'
21
- else if (variant === 'tertiary') return 'tertiary'
22
- else return 'tertiary'
23
- }
13
+ const {
14
+ variant = 'outline',
15
+ size = 'md',
16
+ badges = [],
17
+ badge,
18
+ ...rest
19
+ } = Astro.props
24
20
  ---
25
21
 
26
22
  <Element
@@ -28,23 +24,20 @@ const buttonVariant = (i: number) => {
28
24
  {...rest}
29
25
  >
30
26
  {
31
- badges?.map((badge, i) => (
27
+ [badge, ...badges].filter(Boolean).map((badge) => (
32
28
  <Badge
33
- variant={variant === 'link' ? 'link' : buttonVariant(i)}
29
+ {variant}
30
+ {size}
34
31
  {...badge}
35
32
  />
36
33
  ))
37
34
  }
38
35
  </Element>
39
36
 
40
- <style is:global lang="scss">
37
+ <style is:global>
41
38
  @layer fulldev {
42
39
  .badges {
43
- display: inline-flex;
44
- flex-wrap: wrap;
45
- justify-content: stretch;
46
- gap: var(--space-2);
47
- width: auto;
40
+ @apply inline-flex w-auto flex-wrap justify-stretch gap-1.5;
48
41
  }
49
42
  }
50
43
  </style>
@@ -0,0 +1,26 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'header'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { as = 'header', ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="banner"
14
+ {as}
15
+ {...rest}
16
+ >
17
+ <slot />
18
+ </Element>
19
+
20
+ <style is:global>
21
+ @layer fulldev {
22
+ .banner {
23
+ @apply relative flex w-full items-center bg-primary py-3;
24
+ }
25
+ }
26
+ </style>
@@ -0,0 +1,49 @@
1
+ ---
2
+ import { getEntries } from 'astro:content'
3
+ import type { BannerSchema } from 'fulldev-ui/schemas/blocks/banner'
4
+ import type { CategoriesSchema } from 'fulldev-ui/schemas/blocks/categories'
5
+ import type { CtaSchema } from 'fulldev-ui/schemas/blocks/cta'
6
+ import type { FeatureSchema } from 'fulldev-ui/schemas/blocks/feature'
7
+ import type { HeroSchema } from 'fulldev-ui/schemas/blocks/hero'
8
+ import type { ProductsSchema } from 'fulldev-ui/schemas/blocks/products'
9
+ import type { FooterSchema } from 'fulldev-ui/schemas/components/footer'
10
+ import type { HeaderSchema } from 'fulldev-ui/schemas/components/header'
11
+
12
+ interface Props
13
+ extends HeroSchema,
14
+ CtaSchema,
15
+ FeatureSchema,
16
+ CategoriesSchema,
17
+ ProductsSchema,
18
+ HeaderSchema,
19
+ FooterSchema,
20
+ BannerSchema {
21
+ _block: string
22
+ }
23
+
24
+ let { _block, products, categories, ...rest } = Astro.props
25
+
26
+ products = products && (await getEntries(products))
27
+ categories = categories && (await getEntries(categories))
28
+
29
+ const blocks = {
30
+ ...import.meta.glob('/src/blocks/**/*.astro'),
31
+ ...import.meta.glob('../blocks/**/*.astro'),
32
+ }
33
+
34
+ const path = Object.keys(blocks).find(
35
+ (path) => path.split('/').pop()?.split('.')[0] === _block
36
+ )
37
+
38
+ const BlockComponent = path && (await (blocks[path] as any)()).default
39
+ ---
40
+
41
+ {
42
+ BlockComponent && (
43
+ <BlockComponent
44
+ {products}
45
+ {categories}
46
+ {...rest}
47
+ />
48
+ )
49
+ }
@@ -0,0 +1,26 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Block from 'fulldev-ui/components/Block.astro'
4
+ import Element from 'fulldev-ui/components/Element.astro'
5
+
6
+ interface Props extends HTMLAttributes<'div'> {
7
+ blocks?: ComponentProps<typeof Block>[] | undefined
8
+ }
9
+
10
+ const { blocks, ...rest } = Astro.props
11
+ ---
12
+
13
+ <Element
14
+ class:list="blocks"
15
+ {...rest}
16
+ >
17
+ {blocks?.map((block) => <Block {...block} />)}
18
+ </Element>
19
+
20
+ <style is:global>
21
+ @layer fulldev {
22
+ .blocks {
23
+ @apply flex flex-col;
24
+ }
25
+ }
26
+ </style>
@@ -0,0 +1,58 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import type { CollectionEntry } from 'astro:content'
4
+ import Element from 'fulldev-ui/components/Element.astro'
5
+ import Icon from 'fulldev-ui/components/Icon.astro'
6
+ import Link from 'fulldev-ui/components/Link.astro'
7
+
8
+ interface Props extends HTMLAttributes<'div'> {
9
+ as?: HTMLTag
10
+ slug?: CollectionEntry<'pages'>['slug'] | undefined
11
+ }
12
+
13
+ const { size = 'sm', slug, ...rest } = Astro.props
14
+ ---
15
+
16
+ <Element
17
+ class:list="breadcrumb"
18
+ {...rest}
19
+ >
20
+ <Link
21
+ as="a"
22
+ href="/"
23
+ icon="home"
24
+ {size}
25
+ />
26
+ {
27
+ slug?.split('/').map((part, i) => (
28
+ <>
29
+ <Icon
30
+ {size}
31
+ name="chevron-right"
32
+ />
33
+ <Link
34
+ {size}
35
+ variant="muted"
36
+ href={`/${slug
37
+ ?.split('/')
38
+ .slice(0, i + 1)
39
+ .join('/')}/`}
40
+ >
41
+ {part}
42
+ </Link>
43
+ </>
44
+ ))
45
+ }
46
+ </Element>
47
+
48
+ <style is:global>
49
+ @layer fulldev {
50
+ .breadcrumb {
51
+ @apply flex items-center gap-2;
52
+
53
+ .icon {
54
+ @apply text-muted-foreground;
55
+ }
56
+ }
57
+ }
58
+ </style>