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

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 (342) 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 +235 -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/Content1.astro +77 -0
  15. package/src/blocks/Content2.astro +91 -0
  16. package/src/blocks/Content3.astro +70 -0
  17. package/src/blocks/Content4.astro +72 -0
  18. package/src/blocks/Cta1.astro +58 -0
  19. package/src/blocks/Feature1.astro +61 -0
  20. package/src/blocks/Features1.astro +66 -0
  21. package/src/blocks/Footer.astro +100 -3
  22. package/src/blocks/Header.astro +192 -3
  23. package/src/blocks/Hero1.astro +60 -0
  24. package/src/blocks/Logos1.astro +55 -0
  25. package/src/blocks/Products1.astro +90 -0
  26. package/src/blocks/Reviews1.astro +75 -0
  27. package/src/blocks/_Hero.astro +245 -0
  28. package/src/components/Avatar.astro +28 -9
  29. package/src/components/Avatars.astro +36 -0
  30. package/src/components/Badge.astro +63 -24
  31. package/src/components/Badges.astro +16 -23
  32. package/src/components/Block.astro +30 -0
  33. package/src/components/Blocks.astro +26 -0
  34. package/src/components/Breadcrumb.astro +58 -0
  35. package/src/components/Button.astro +49 -119
  36. package/src/components/Buttons.astro +23 -13
  37. package/src/components/Card.astro +9 -137
  38. package/src/components/Cards.astro +33 -35
  39. package/src/components/Carousel.astro +106 -0
  40. package/src/components/Cart.astro +18 -14
  41. package/src/components/CartAdd.svelte +76 -0
  42. package/src/components/CartCheckout.svelte +58 -0
  43. package/src/components/CartForm.svelte +130 -0
  44. package/src/components/CartList.svelte +88 -0
  45. package/src/components/CartQuantity.svelte +81 -0
  46. package/src/components/CartSummary.astro +16 -105
  47. package/src/components/CartTotal.svelte +15 -0
  48. package/src/components/Channel.astro +44 -35
  49. package/src/components/Channels.astro +20 -6
  50. package/src/components/Checkbox.astro +52 -27
  51. package/src/components/Code.astro +52 -0
  52. package/src/components/Container.astro +25 -0
  53. package/src/components/Dialog.astro +3 -2
  54. package/src/components/Drawer.astro +55 -146
  55. package/src/components/DrawerOld.astro +143 -0
  56. package/src/components/Element.astro +18 -8
  57. package/src/components/Form.astro +16 -13
  58. package/src/components/Gallery.astro +174 -0
  59. package/src/components/Group.astro +25 -0
  60. package/src/components/Head.astro +62 -25
  61. package/src/components/Header.astro +10 -115
  62. package/src/components/Heading.astro +51 -44
  63. package/src/components/Icon.astro +29 -33
  64. package/src/components/Image.astro +18 -68
  65. package/src/components/Input.astro +65 -51
  66. package/src/components/Label.astro +20 -15
  67. package/src/components/Layout.astro +35 -0
  68. package/src/components/Link.astro +51 -32
  69. package/src/components/Links.astro +42 -0
  70. package/src/components/List.astro +41 -16
  71. package/src/components/LocaleSwitcher.astro +2 -2
  72. package/src/components/Logo.astro +56 -0
  73. package/src/components/Menu.astro +21 -17
  74. package/src/components/Navigation.astro +39 -0
  75. package/src/components/Panel.astro +25 -0
  76. package/src/components/Paragraph.astro +55 -0
  77. package/src/components/Price.astro +4 -4
  78. package/src/components/Prose.astro +86 -0
  79. package/src/components/Rating.astro +23 -62
  80. package/src/components/Search.astro +107 -43
  81. package/src/components/Section.astro +13 -242
  82. package/src/components/Select.astro +45 -55
  83. package/src/components/Sidebar.astro +53 -76
  84. package/src/components/Social.astro +11 -9
  85. package/src/components/Socials.astro +9 -5
  86. package/src/components/Stack.astro +25 -0
  87. package/src/components/Subheader.astro +59 -0
  88. package/src/components/Switch.astro +72 -29
  89. package/src/components/Table.astro +1 -1
  90. package/src/components/Tagline.astro +31 -13
  91. package/src/components/Textarea.astro +40 -50
  92. package/src/components/Themer.astro +76 -0
  93. package/src/components/Toc.astro +30 -37
  94. package/src/components/Writeup.astro +34 -65
  95. package/src/components/_Author.astro +90 -0
  96. package/src/components/_Header.astro +129 -0
  97. package/src/components/_Image.astro +79 -0
  98. package/src/components/_Prose copy.astro +172 -0
  99. package/src/components/_Sidebar copy.astro +87 -0
  100. package/src/components/docs/PropsTable.astro +38 -264
  101. package/src/components/experimental/Window.astro +5 -57
  102. package/src/content/config.ts +3 -10
  103. package/src/content/{presets → layouts}/base.yml +52 -73
  104. package/src/content/pages/blocks/_categories.mdx +0 -2
  105. package/src/content/pages/blocks/_footer.mdx +0 -2
  106. package/src/content/pages/blocks/_header.mdx +0 -4
  107. package/src/content/pages/blocks/_jobs.mdx +0 -2
  108. package/src/content/pages/blocks/_prices.mdx +0 -2
  109. package/src/content/pages/blocks/_product.mdx +0 -2
  110. package/src/content/pages/blocks/_products.mdx +0 -2
  111. package/src/content/pages/blocks/_stats.mdx +0 -2
  112. package/src/content/pages/blocks/banner.mdx +0 -2
  113. package/src/content/pages/blocks/colleagues.mdx +0 -3
  114. package/src/content/pages/blocks/contact.mdx +0 -2
  115. package/src/content/pages/blocks/content.mdx +0 -6
  116. package/src/content/pages/blocks/cta.mdx +0 -10
  117. package/src/content/pages/blocks/features.mdx +0 -5
  118. package/src/content/pages/blocks/hero.mdx +0 -5
  119. package/src/content/pages/blocks/intro.mdx +0 -5
  120. package/src/content/pages/blocks/posts.mdx +0 -2
  121. package/src/content/pages/blocks/reviews.mdx +0 -3
  122. package/src/content/pages/categories/category.md +7 -0
  123. package/src/content/pages/docs/_internationalization.mdx +55 -0
  124. package/src/content/pages/docs/_using-blocks.mdx +33 -0
  125. package/src/content/pages/docs/_using-presets.mdx +49 -0
  126. package/src/content/pages/docs/blocks.mdx +33 -0
  127. package/src/content/pages/docs/collections/images.mdx +102 -0
  128. package/src/content/pages/docs/collections/pages.mdx +119 -0
  129. package/src/content/pages/docs/collections/presets.mdx +60 -0
  130. package/src/content/pages/docs/collections.mdx +42 -0
  131. package/src/content/pages/{base/card.mdx → docs/components/_card.mdx} +2 -5
  132. package/src/content/pages/{base → docs/components}/_dialog.mdx +1 -2
  133. package/src/content/pages/{base → docs/components}/_drawer.mdx +1 -2
  134. package/src/content/pages/{base → docs/components}/_localeswitcher.mdx +1 -2
  135. package/src/content/pages/{base → docs/components}/_switch.mdx +3 -4
  136. package/src/content/pages/{typography → docs/components}/_tagline.mdx +3 -4
  137. package/src/content/pages/docs/components/_toggle.mdx +30 -0
  138. package/src/content/pages/docs/components/avatar.mdx +34 -0
  139. package/src/content/pages/{base → docs/components}/badge.mdx +28 -10
  140. package/src/content/pages/docs/components/badges.mdx +46 -0
  141. package/src/content/pages/docs/components/button.mdx +78 -0
  142. package/src/content/pages/docs/components/buttons.mdx +51 -0
  143. package/src/content/pages/docs/components/channel.mdx +91 -0
  144. package/src/content/pages/docs/components/channels.mdx +89 -0
  145. package/src/content/pages/docs/components/checkbox.mdx +34 -0
  146. package/src/content/pages/docs/components/code.mdx +45 -0
  147. package/src/content/pages/docs/components/heading.mdx +59 -0
  148. package/src/content/pages/docs/components/icon.mdx +48 -0
  149. package/src/content/pages/docs/components/image.mdx +25 -0
  150. package/src/content/pages/docs/components/input.mdx +40 -0
  151. package/src/content/pages/{typography → docs/components}/label.mdx +9 -6
  152. package/src/content/pages/{typography → docs/components}/link.mdx +24 -10
  153. package/src/content/pages/docs/components/links.mdx +99 -0
  154. package/src/content/pages/docs/components/list.mdx +44 -0
  155. package/src/content/pages/docs/components/logo.mdx +36 -0
  156. package/src/content/pages/docs/components/menu.mdx +89 -0
  157. package/src/content/pages/docs/components/prose.mdx +36 -0
  158. package/src/content/pages/docs/components/rating.mdx +76 -0
  159. package/src/content/pages/{base → docs/components}/section.mdx +2 -3
  160. package/src/content/pages/{base → docs/components}/select.mdx +1 -11
  161. package/src/content/pages/docs/components/social.mdx +94 -0
  162. package/src/content/pages/docs/components/socials.mdx +102 -0
  163. package/src/content/pages/docs/components/switch.mdx +34 -0
  164. package/src/content/pages/{base → docs/components}/table.mdx +1 -4
  165. package/src/content/pages/docs/components/tagline.mdx +46 -0
  166. package/src/content/pages/docs/components/text.mdx +48 -0
  167. package/src/content/pages/docs/components/textarea.mdx +34 -0
  168. package/src/content/pages/docs/components/themer.mdx +49 -0
  169. package/src/content/pages/docs/components.mdx +37 -0
  170. package/src/content/pages/docs/customization.mdx +151 -0
  171. package/src/content/pages/docs/frameworks.mdx +29 -0
  172. package/src/content/pages/docs/generating-pages.mdx +129 -0
  173. package/src/content/pages/docs/index.mdx +20 -0
  174. package/src/content/pages/docs/installation.mdx +50 -0
  175. package/src/content/pages/docs/layouts.mdx +33 -0
  176. package/src/content/pages/index.mdx +25 -33
  177. package/src/content/pages/posts/post.md +7 -0
  178. package/src/content/pages/products/product.md +20 -0
  179. package/src/content/pages/showcase/anti-slip-profiles.md +2 -2
  180. package/src/content/pages/showcase/fulldev-ui.md +1 -1
  181. package/src/content/pages/showcase/lavis-detailing.md +1 -1
  182. package/src/content/pages/showcase/leren-trainingsacteren.md +1 -1
  183. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +1 -1
  184. package/src/content/pages/showcase/sloepverhuur-bolsward.md +1 -1
  185. package/src/content/pages/showcase/stark-vulcanising-products.md +1 -1
  186. package/src/content/pages/showcase/the-gym-haren.md +1 -1
  187. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +1 -1
  188. package/src/content/pages/showcase.mdx +4 -3
  189. package/src/css/color.css +0 -10
  190. package/src/css/custom.css +10 -12
  191. package/src/css/size.css +2 -11
  192. package/src/css/theme.css +95 -0
  193. package/src/env.d.ts +1 -0
  194. package/src/images/favicon/android-chrome-192x192.png +0 -0
  195. package/src/images/favicon/android-chrome-512x512.png +0 -0
  196. package/src/images/favicon/apple-touch-icon.png +0 -0
  197. package/src/images/favicon/browserconfig.xml +9 -0
  198. package/src/images/favicon/favicon-16x16.png +0 -0
  199. package/src/images/favicon/favicon-32x32.png +0 -0
  200. package/src/images/favicon/favicon-48x48.png +0 -0
  201. package/src/images/favicon/favicon.ico +0 -0
  202. package/src/images/favicon/favicon.svg +16 -0
  203. package/src/images/favicon/manifest.webmanifest +30 -0
  204. package/src/images/favicon/mstile-150x150.png +0 -0
  205. package/src/images/favicon/safari-pinned-tab.svg +16 -0
  206. package/src/images/favicon/yandex-browser-50x50.png +0 -0
  207. package/src/images/favicon/yandex-browser-manifest.json +9 -0
  208. package/src/images/logo-1.svg +11 -0
  209. package/src/images/logo-2.svg +13 -0
  210. package/src/images/logo-basic.svg +10 -0
  211. package/src/images/logo-simple.svg +13 -0
  212. package/src/images/logo-thin.svg +15 -0
  213. package/src/images/logo.svg +14 -0
  214. package/src/images/logofat.svg +11 -0
  215. package/src/integration/index.ts +110 -140
  216. package/src/layouts/Category.astro +136 -0
  217. package/src/layouts/Doc.astro +56 -0
  218. package/src/layouts/Job.astro +60 -0
  219. package/src/layouts/Page.astro +29 -0
  220. package/src/layouts/Post.astro +52 -0
  221. package/src/layouts/Product.astro +114 -0
  222. package/src/pages/[...page].astro +29 -24
  223. package/src/pages/test.astro +37 -0
  224. package/src/schemas/components/avatar.ts +4 -1
  225. package/src/schemas/components/badge.ts +16 -11
  226. package/src/schemas/components/block.ts +60 -0
  227. package/src/schemas/components/button.ts +17 -14
  228. package/src/schemas/components/channel.ts +15 -9
  229. package/src/schemas/components/footer.ts +15 -21
  230. package/src/schemas/components/head.ts +17 -0
  231. package/src/schemas/components/header.ts +19 -7
  232. package/src/schemas/components/heading.ts +7 -1
  233. package/src/schemas/components/icon.ts +7 -1
  234. package/src/schemas/components/image.ts +38 -16
  235. package/src/schemas/components/link.ts +17 -0
  236. package/src/schemas/components/logo.ts +12 -2
  237. package/src/schemas/components/menu.ts +11 -11
  238. package/src/schemas/components/navigation.ts +10 -0
  239. package/src/schemas/components/paragraph.ts +9 -0
  240. package/src/schemas/components/price.ts +7 -1
  241. package/src/schemas/components/rating.ts +8 -13
  242. package/src/schemas/components/sidebar.ts +14 -11
  243. package/src/schemas/components/social.ts +16 -1
  244. package/src/schemas/components/tagline.ts +7 -1
  245. package/src/schemas/imageSchema.ts +33 -4
  246. package/src/schemas/page.ts +39 -0
  247. package/src/stores/cart.svelte.ts +79 -0
  248. package/src/stores/cart.ts +59 -6
  249. package/src/types/global-props.ts +0 -9
  250. package/src/types/{virtual-modules.d.ts → virtual.d.ts} +1 -1
  251. package/src/utils/cart.ts +1 -10
  252. package/src/utils/formatEntries.ts +8 -0
  253. package/src/utils/formatEntry.ts +29 -0
  254. package/src/utils/getDeepReferenceChildren.ts +14 -0
  255. package/src/utils/getHref.ts +6 -0
  256. package/src/utils/getReferenceChildren.ts +1 -1
  257. package/src/utils/setTheme.ts +18 -0
  258. package/src/utils/slugify.ts +6 -0
  259. package/svelte.config.js +5 -0
  260. package/tailwind.config.ts +71 -0
  261. package/tsconfig.json +1 -3
  262. package/src/blocks/Article.astro +0 -40
  263. package/src/blocks/Categories.astro +0 -12
  264. package/src/blocks/Colleagues.astro +0 -13
  265. package/src/blocks/Contact.astro +0 -116
  266. package/src/blocks/Content.astro +0 -12
  267. package/src/blocks/Cta.astro +0 -15
  268. package/src/blocks/Excerpt.astro +0 -14
  269. package/src/blocks/Features.astro +0 -11
  270. package/src/blocks/Hero.astro +0 -15
  271. package/src/blocks/Intro.astro +0 -23
  272. package/src/blocks/Jobs.astro +0 -12
  273. package/src/blocks/Posts.astro +0 -11
  274. package/src/blocks/Prices.astro +0 -24
  275. package/src/blocks/Product.astro +0 -110
  276. package/src/blocks/Products.astro +0 -11
  277. package/src/blocks/Reviews.astro +0 -13
  278. package/src/components/CartForm.astro +0 -121
  279. package/src/components/CartList.astro +0 -134
  280. package/src/components/Footer.astro +0 -193
  281. package/src/components/Text.astro +0 -43
  282. package/src/components/ThemeSelect.astro +0 -41
  283. package/src/components/experimental/Form.astro +0 -53
  284. package/src/components/experimental/Gallery.astro +0 -104
  285. package/src/components/experimental/Logo.astro +0 -38
  286. package/src/components/experimental/Prose.astro +0 -192
  287. package/src/components/sections.astro +0 -28
  288. package/src/content/pages/base/button.mdx +0 -60
  289. package/src/content/pages/base/checkbox.mdx +0 -42
  290. package/src/content/pages/base/icon.mdx +0 -55
  291. package/src/content/pages/base/image.mdx +0 -42
  292. package/src/content/pages/base/input.mdx +0 -56
  293. package/src/content/pages/base/rating.mdx +0 -55
  294. package/src/content/pages/base/textarea.mdx +0 -58
  295. package/src/content/pages/base/theme-select.mdx +0 -15
  296. package/src/content/pages/layouts/_layout.mdx +0 -14
  297. package/src/content/pages/layouts/docslayout.mdx +0 -14
  298. package/src/content/pages/overview/components.mdx +0 -75
  299. package/src/content/pages/overview/content-collections.mdx +0 -139
  300. package/src/content/pages/overview/frameworks.mdx +0 -198
  301. package/src/content/pages/overview/installation.mdx +0 -53
  302. package/src/content/pages/overview/introduction.mdx +0 -30
  303. package/src/content/pages/overview/theming.mdx +0 -69
  304. package/src/content/pages/schemas/page.mdx +0 -17
  305. package/src/content/pages/schemas/preset.mdx +0 -9
  306. package/src/content/pages/showcase/record.md +0 -3
  307. package/src/content/pages/typography/heading.mdx +0 -73
  308. package/src/content/pages/typography/list.mdx +0 -51
  309. package/src/content/pages/typography/text.mdx +0 -61
  310. package/src/content/presets/blocks.yml +0 -1
  311. package/src/content/presets/docs.yml +0 -6
  312. package/src/css/space.css +0 -77
  313. package/src/css/styles.css +0 -0
  314. package/src/images/avatar-1.yml +0 -1
  315. package/src/integration/generate-colors.ts +0 -639
  316. package/src/integration/tailwind-plugin.ts +0 -80
  317. package/src/integration/unocss-preset.ts +0 -84
  318. package/src/layouts/BlockLayout.astro +0 -19
  319. package/src/layouts/ContactLayout.astro +0 -21
  320. package/src/layouts/DocsLayout.astro +0 -73
  321. package/src/layouts/Layout.astro +0 -163
  322. package/src/layouts/OverviewLayout.astro +0 -42
  323. package/src/layouts/PostLayout.astro +0 -21
  324. package/src/layouts/ProductLayout.astro +0 -21
  325. package/src/loaders/imageLoader.ts +0 -26
  326. package/src/schemas/components/avatars.ts +0 -4
  327. package/src/schemas/components/buttons.ts +0 -4
  328. package/src/schemas/components/card.ts +0 -25
  329. package/src/schemas/components/cards.ts +0 -4
  330. package/src/schemas/components/channels.ts +0 -4
  331. package/src/schemas/components/images.ts +0 -4
  332. package/src/schemas/components/list.ts +0 -3
  333. package/src/schemas/components/section.ts +0 -15
  334. package/src/schemas/components/sections.ts +0 -3
  335. package/src/schemas/components/socials.ts +0 -4
  336. package/src/schemas/components/text.ts +0 -3
  337. package/src/schemas/components/toc.ts +0 -3
  338. package/src/schemas/components/writeup.ts +0 -20
  339. package/src/schemas/pageSchema.ts +0 -101
  340. package/src/schemas/presetSchema.ts +0 -3
  341. package/src/schemas/utils/navigation.ts +0 -8
  342. 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,30 @@
1
+ ---
2
+ import { getEntries } from 'astro:content'
3
+ import type { BlockSchema } from 'fulldev-ui/schemas/components/block'
4
+
5
+ interface Props extends BlockSchema {}
6
+
7
+ let { _block, pages, ...rest } = Astro.props
8
+
9
+ pages = pages && (await getEntries(pages))
10
+
11
+ const blocks = {
12
+ ...import.meta.glob('/src/blocks/**/*.astro'),
13
+ ...import.meta.glob('../blocks/**/*.astro'),
14
+ }
15
+
16
+ const path = Object.keys(blocks).find(
17
+ (path) => path.split('/').pop()?.split('.')[0] === _block
18
+ )
19
+
20
+ const BlockComponent = path && (await (blocks[path] as any)()).default
21
+ ---
22
+
23
+ {
24
+ BlockComponent && (
25
+ <BlockComponent
26
+ {pages}
27
+ {...rest}
28
+ />
29
+ )
30
+ }
@@ -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>