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
@@ -1,73 +1,80 @@
1
1
  ---
2
- import type { HTMLAttributes } from 'astro/types'
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
3
  import Element from 'fulldev-ui/components/Element.astro'
4
4
  import type { GlobalProps } from 'fulldev-ui/types/global-props'
5
+ import { slugify } from 'fulldev-ui/utils/slugify'
5
6
 
6
- interface Props
7
- extends GlobalProps,
8
- HTMLAttributes<'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'> {
9
- level?: 1 | 2 | 3 | 4 | 5 | 6 | undefined
7
+ interface Props extends GlobalProps, HTMLAttributes<'h2'> {
8
+ as?: HTMLTag
10
9
  text?: string | undefined
10
+ muted?: boolean | undefined
11
11
  }
12
12
 
13
13
  const {
14
- contrast = true,
15
- color = 'base',
16
- level = 2,
14
+ as = 'h2',
17
15
  text,
16
+ id = text ? slugify(text) : undefined,
18
17
  ...rest
19
18
  } = Astro.props
20
19
  ---
21
20
 
22
21
  <Element
23
22
  class:list="heading"
24
- as=`h${level}`
25
- {contrast}
26
- {color}
27
- {level}
23
+ {as}
24
+ {id}
28
25
  {...rest}
29
26
  >
27
+ <Fragment set:html={text} />
30
28
  <slot />
31
- <Fragment set:text={text} />
32
29
  </Element>
33
30
 
34
- <style is:global lang="scss">
35
- @layer fulldev {
36
- .heading {
37
- margin: 0;
38
- max-width: calc(var(--space-4) * 44);
39
- scroll-margin: var(--space-5);
40
- color: var(--color-11);
41
- font-weight: 700;
42
- line-height: 1.1;
43
- letter-spacing: -0.025em;
44
- text-align: inherit;
45
- text-decoration: none;
31
+ <style is:global>
32
+ .heading {
33
+ @apply scroll-mt-20 font-bold tracking-tight text-foreground;
46
34
 
47
- &.level-1 {
48
- font-size: var(--text-8);
49
- text-wrap: balance;
50
- }
35
+ &.muted {
36
+ @apply text-muted-foreground;
37
+ }
38
+
39
+ &,
40
+ &.size-md {
41
+ @apply text-base;
42
+ }
43
+
44
+ &.size-xs {
45
+ @apply text-xs;
46
+ }
51
47
 
52
- &.level-2 {
53
- font-size: var(--text-7);
54
- }
48
+ &.size-sm {
49
+ @apply text-sm;
50
+ }
55
51
 
56
- &.level-3 {
57
- font-size: var(--text-6);
58
- }
52
+ &.size-lg {
53
+ @apply text-lg;
54
+ }
59
55
 
60
- &.level-4 {
61
- font-size: var(--text-5);
62
- }
56
+ &.size-xl {
57
+ @apply text-xl;
58
+ }
63
59
 
64
- &.level-5 {
65
- font-size: var(--text-4);
66
- }
60
+ &.size-2xl {
61
+ @apply text-2xl;
62
+ }
63
+
64
+ &.size-3xl {
65
+ @apply text-3xl;
66
+ }
67
+
68
+ &.size-4xl {
69
+ @apply text-4xl;
70
+ }
71
+
72
+ &.size-5xl {
73
+ @apply text-4xl lg:text-5xl;
74
+ }
67
75
 
68
- &.level-6 {
69
- font-size: var(--text-3);
70
- }
76
+ &.size-6xl {
77
+ @apply text-5xl lg:text-6xl;
71
78
  }
72
79
  }
73
80
  </style>
@@ -2,15 +2,16 @@
2
2
  import tablerIcons from '@iconify-json/tabler/icons.json'
3
3
  import type { HTMLAttributes } from 'astro/types'
4
4
  import Element from 'fulldev-ui/components/Element.astro'
5
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
5
+ import type { IconSchema } from 'fulldev-ui/schemas/components/icon'
6
6
 
7
- interface Props extends GlobalProps, HTMLAttributes<'i'> {
8
- name?: string | undefined
7
+ interface Props extends Omit<HTMLAttributes<'svg'>, 'name'>, IconSchema {
8
+ // name?: keyof typeof tablerIcons.icons | undefined
9
+ size?: 'sm' | 'md' | 'lg' | undefined
9
10
  }
10
11
 
11
- const { name, ...rest } = Astro.props
12
+ const { size = 'md', name, ...rest } = Astro.props
12
13
 
13
- const trimmedName = name?.trim() as string | undefined
14
+ const trimmedName = name?.trim()
14
15
  const icon = trimmedName
15
16
  ? (tablerIcons as any)?.icons[trimmedName]?.body
16
17
  : undefined
@@ -18,38 +19,33 @@ const icon = trimmedName
18
19
 
19
20
  <Element
20
21
  class:list="icon"
21
- if={icon}
22
- as="i"
22
+ xmlns="http://www.w3.org/2000/svg"
23
+ viewBox="0 0 24 24"
24
+ as="svg"
25
+ {size}
23
26
  {...rest}
24
27
  >
25
- {
26
- icon && (
27
- <svg
28
- xmlns="http://www.w3.org/2000/svg"
29
- viewBox="0 0 24 24"
30
- set:html={icon}
31
- />
32
- )
33
- }
28
+ <Fragment set:html={icon} />
34
29
  </Element>
35
30
 
36
- <style is:global lang="scss">
37
- @layer fulldev {
38
- .icon {
39
- display: inline-flex;
40
- position: relative;
41
- justify-content: center;
42
- align-items: center;
43
- width: 1em;
44
- height: 1em;
45
- color: var(--color-11);
46
- font-size: inherit;
47
-
48
- svg {
49
- position: absolute;
50
- width: 120%;
51
- height: 120%;
52
- }
31
+ <style is:global>
32
+ .icon {
33
+ @apply inline-flex h-[1em] w-[1em];
34
+
35
+ * {
36
+ stroke-width: 1.6;
37
+ }
38
+
39
+ &.size-sm {
40
+ @apply text-lg;
41
+ }
42
+
43
+ &.size-md {
44
+ @apply text-xl;
45
+ }
46
+
47
+ &.size-lg {
48
+ @apply text-2xl;
53
49
  }
54
50
  }
55
51
  </style>
@@ -1,30 +1,9 @@
1
1
  ---
2
- import type { ImageMetadata } from 'astro'
3
2
  import type { HTMLAttributes } from 'astro/types'
4
3
  import { Image as AstroImage } from 'astro:assets'
5
- import type { CollectionEntry } from 'astro:content'
6
- import { getEntry } from 'astro:content'
4
+ import type { ImageSchema } from 'fulldev-ui/schemas/imageSchema'
7
5
 
8
- interface Props extends HTMLAttributes<'img'> {
9
- src?: string | undefined
10
- position?: 'background' | 'cover' | 'inset' | undefined
11
- id?: CollectionEntry<'images'>['id'] | undefined
12
- }
13
-
14
- const { id } = Astro.props
15
- const entry = id ? (await getEntry('images', id))?.data : {}
16
-
17
- const {
18
- width = 1920,
19
- height = 1920,
20
- position,
21
- src,
22
- alt,
23
- ...rest
24
- } = {
25
- ...Astro.props,
26
- ...entry,
27
- }
6
+ interface Props extends HTMLAttributes<'img'>, ImageSchema {}
28
7
 
29
8
  function getAltBySrc() {
30
9
  if (!src) return
@@ -34,61 +13,32 @@ function getAltBySrc() {
34
13
  return unslugged || ''
35
14
  }
36
15
 
37
- const images = import.meta.glob<{ default: ImageMetadata }>('/src/images/*')
38
- const image = images[src as keyof typeof images]
16
+ const {
17
+ src,
18
+ alt = getAltBySrc(),
19
+ height = 1920,
20
+ width = 1920,
21
+ ...rest
22
+ } = Astro.props
39
23
  ---
40
24
 
41
25
  {
42
- image && (
26
+ src && (
43
27
  <AstroImage
44
- class:list={['image', position && `position-${position}`]}
45
- alt={alt || getAltBySrc()}
46
- src={image ? image() : src}
47
- width={width}
48
- height={height}
49
- {...(rest as any)}
28
+ class:list="image"
29
+ {alt}
30
+ {src}
31
+ {width}
32
+ {height}
33
+ {...rest}
50
34
  />
51
35
  )
52
36
  }
53
37
 
54
- <style is:global lang="scss">
38
+ <style is:global>
55
39
  @layer fulldev {
56
40
  .image {
57
- display: block;
58
- width: 100%;
59
- height: auto;
60
-
61
- &.position-background {
62
- position: absolute;
63
- top: 0;
64
- right: 0;
65
- bottom: 0;
66
- left: 0;
67
- margin: 0 !important;
68
- border-radius: 0;
69
- width: 100%;
70
- max-width: none;
71
- height: 100%;
72
- max-height: 100%;
73
- object-fit: cover;
74
- }
75
-
76
- &.position-cover {
77
- width: 100%;
78
- height: 100%;
79
- object-fit: cover;
80
- }
81
-
82
- &.position-inset {
83
- margin-top: calc(var(--inset-top) * -1);
84
- margin-right: calc(var(--inset-right) * -1);
85
- margin-bottom: calc(var(--inset-bottom) * -1);
86
- margin-left: calc(var(--inset-left) * -1);
87
- width: calc(100% + var(--inset-left) + var(--inset-right));
88
- max-width: none;
89
- height: calc(100% + var(--inset-top) + var(--inset-bottom));
90
- object-fit: cover;
91
- }
41
+ @apply block;
92
42
  }
93
43
  }
94
44
  </style>
@@ -12,96 +12,110 @@ interface Props extends GlobalProps, HTMLAttributes<'input'> {
12
12
 
13
13
  const {
14
14
  label,
15
- icon,
16
- value,
17
- disabled,
18
- required,
19
15
  placeholder,
20
- readonly,
21
- name = placeholder,
16
+ name = label || placeholder,
17
+ id = name,
22
18
  type = 'text',
19
+ min,
20
+ max,
21
+ value,
22
+ step,
23
+ size = 'md',
24
+ icon,
23
25
  ...rest
24
26
  } = Astro.props
25
27
  ---
26
28
 
27
29
  <Element
28
30
  class:list="input"
31
+ as="label"
32
+ for={id}
33
+ {size}
29
34
  {...rest}
30
35
  >
31
36
  <Label
32
37
  for={name}
33
38
  text={label}
39
+ {size}
34
40
  />
41
+ <Icon name={icon} />
35
42
  <Element
43
+ class:list="input-input"
36
44
  as="input"
37
45
  if={name}
38
46
  id={name}
39
47
  {name}
40
48
  {placeholder}
41
49
  {type}
50
+ {min}
51
+ {max}
42
52
  {value}
43
- {disabled}
44
- {required}
45
- {readonly}
53
+ {step}
46
54
  />
47
- <Icon name={icon} />
48
55
  </Element>
49
56
 
50
- <style is:global lang="scss">
57
+ <style is:global>
51
58
  @layer fulldev {
59
+ .input-input {
60
+ @apply flex w-full rounded-md border border-input bg-background text-sm text-foreground ring-offset-background;
61
+ @apply file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground;
62
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
63
+ @apply disabled:pointer-events-none disabled:opacity-50;
64
+ @apply [&[readonly]]:pointer-events-none;
65
+ }
66
+
52
67
  .input {
53
- display: flex;
54
- position: relative;
55
- flex-direction: column;
56
- gap: var(--space-1);
57
- width: 100%;
68
+ @apply relative flex flex-col gap-1.5;
58
69
 
59
70
  .icon {
60
- position: absolute;
61
- right: var(--space-4);
62
- bottom: var(--space-4);
63
- pointer-events: none;
71
+ @apply pointer-events-none absolute;
64
72
  }
65
73
 
66
- input {
67
- display: flex;
68
- position: relative;
69
- align-items: center;
70
- outline: none;
71
- border: 1px solid var(--color-6);
72
- border-radius: var(--radius-1);
73
- background-color: transparent;
74
- padding: var(--space-4);
75
- padding-right: calc(var(--text-2) + 2 * var(--space-4));
76
- width: 100%;
77
- min-width: var(--space-4);
78
- height: calc(var(--text-2) + 2 * var(--space-4));
79
- color: var(--text);
80
- font-size: var(--text-2);
81
- line-height: 1.25;
82
-
83
- &::placeholder {
84
- color: var(--color-11);
74
+ &.size-sm {
75
+ @apply gap-1;
76
+
77
+ .input-input {
78
+ @apply h-9 px-2.5 py-1.5 text-xs;
79
+ }
80
+
81
+ .icon {
82
+ @apply bottom-2 right-2;
85
83
  }
86
84
 
87
- &:hover {
88
- outline: none;
85
+ .icon + .input-input {
86
+ @apply pr-9;
89
87
  }
88
+ }
89
+
90
+ &.size-md {
91
+ @apply gap-1.5;
92
+
93
+ .input-input {
94
+ @apply h-10 px-3 py-2 text-sm;
95
+ }
96
+
97
+ .icon {
98
+ @apply bottom-2.5 right-2.5;
99
+ }
100
+
101
+ .icon + .input-input {
102
+ @apply pr-10;
103
+ }
104
+ }
105
+
106
+ &.size-lg {
107
+ @apply gap-2;
90
108
 
91
- &:focus {
92
- outline: none;
93
- box-shadow: inset 0 0 0 2px var(--color-7);
94
- border-color: var(--color-7);
109
+ .input-input {
110
+ @apply h-12 px-3.5 py-2.5 text-base;
95
111
  }
96
112
 
97
- &:disabled {
98
- opacity: 50%;
99
- cursor: not-allowed;
100
- pointer-events: none;
113
+ .icon {
114
+ @apply bottom-3.5 right-3.5;
101
115
  }
102
116
 
103
- &[readonly] {
104
- pointer-events: none;
117
+ .icon + .input-input {
118
+ @apply pr-11;
105
119
  }
106
120
  }
107
121
  }
@@ -1,37 +1,42 @@
1
1
  ---
2
- import type { HTMLAttributes } from 'astro/types'
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
3
  import Element from 'fulldev-ui/components/Element.astro'
4
4
  import type { GlobalProps } from 'fulldev-ui/types/global-props'
5
5
 
6
6
  interface Props extends GlobalProps, HTMLAttributes<'label'> {
7
- size?: 'sm' | 'md' | 'lg' | undefined
8
- color?: 'base' | 'brand' | undefined
9
- contrast?: boolean | undefined
7
+ as?: HTMLTag
10
8
  text?: string | undefined
11
9
  }
12
10
 
13
- const { text, ...rest } = Astro.props
11
+ const { as = 'label', size = 'md', text, ...rest } = Astro.props
14
12
  ---
15
13
 
16
14
  <Element
17
15
  class:list="label"
18
- as="label"
16
+ {as}
17
+ {size}
19
18
  {...rest}
20
19
  >
20
+ <Fragment set:html={text} />
21
21
  <slot />
22
- <Fragment set:text={text} />
23
22
  </Element>
24
23
 
25
- <style is:global lang="scss">
24
+ <style is:global>
26
25
  @layer fulldev {
27
26
  .label {
28
- display: flex;
29
- flex-direction: column;
30
- color: var(--color-11);
31
- font-size: var(--text-2);
32
- line-height: 1;
33
- text-align: left;
34
- white-space: nowrap;
27
+ @apply font-medium leading-none;
28
+
29
+ &.size-sm {
30
+ @apply text-xs;
31
+ }
32
+
33
+ &.size-md {
34
+ @apply text-sm;
35
+ }
36
+
37
+ &.size-lg {
38
+ @apply text-base;
39
+ }
35
40
  }
36
41
  }
37
42
  </style>
@@ -0,0 +1,35 @@
1
+ ---
2
+ import type { HTMLAttributes } from 'astro/types'
3
+ import Head from 'fulldev-ui/components/Head.astro'
4
+ import type { HeadSchema } from 'fulldev-ui/schemas/components/head'
5
+
6
+ type Props = HTMLAttributes<'body'> & {
7
+ head?: HeadSchema
8
+ }
9
+
10
+ const { head, ...rest } = Astro.props
11
+ ---
12
+
13
+ <!doctype html>
14
+ <html>
15
+ <Head {...head} />
16
+ <body {...rest}>
17
+ <slot />
18
+ <style is:global>
19
+ @layer fulldev {
20
+ html {
21
+ @apply w-full font-sans text-base leading-relaxed text-foreground;
22
+ color-scheme: light;
23
+ }
24
+
25
+ .dark {
26
+ color-scheme: dark;
27
+ }
28
+
29
+ body {
30
+ @apply w-full bg-background font-sans text-foreground;
31
+ }
32
+ }
33
+ </style>
34
+ </body>
35
+ </html>
@@ -1,52 +1,71 @@
1
1
  ---
2
- import type { HTMLAttributes } from 'astro/types'
3
- import type { CollectionEntry } from 'astro:content'
4
- import { getEntry } from 'astro:content'
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
5
3
  import Element from 'fulldev-ui/components/Element.astro'
6
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
+ import Icon from 'fulldev-ui/components/Icon.astro'
5
+ import type { LinkSchema } from 'fulldev-ui/schemas/components/link'
7
6
 
8
- interface Props extends GlobalProps, HTMLAttributes<'a'> {
9
- slug?: CollectionEntry<'pages'>['slug'] | undefined
10
- text?: string | undefined
7
+ interface Props
8
+ extends Omit<HTMLAttributes<'a'>, 'href' | 'target'>,
9
+ LinkSchema {
10
+ as?: HTMLTag
11
+ current?: boolean | undefined
11
12
  }
12
13
 
13
- const { slug, href, text, ...rest } = Astro.props
14
-
15
- const entry = slug && (await getEntry('pages', slug))
14
+ const {
15
+ as = 'a',
16
+ variant = 'primary',
17
+ size = 'md',
18
+ text,
19
+ icon,
20
+ ...rest
21
+ } = Astro.props
16
22
  ---
17
23
 
18
24
  <Element
19
25
  class:list="link"
20
- href={slug ? `/${slug}/` : href}
21
- as="a"
26
+ {as}
27
+ {variant}
28
+ {size}
22
29
  {...rest}
23
30
  >
31
+ <Fragment set:html={text} />
24
32
  <slot />
25
- <Fragment set:html={entry?.data?.title ?? text} />
33
+ <Icon name={icon} />
26
34
  </Element>
27
35
 
28
- <style is:global lang="scss">
36
+ <style is:global>
29
37
  @layer fulldev {
30
- .link {
31
- display: inline-flex;
32
- flex-wrap: wrap;
33
- align-items: center;
34
- gap: var(--space-2);
35
- cursor: pointer;
36
- border: none;
37
- background: none;
38
- color: var(--color-11);
39
- font-size: var(--text-3);
40
- text-decoration-color: var(--border); // FIXME, werkt niet
41
- text-decoration: none;
42
- white-space: nowrap;
43
-
44
- &:is(p > &) {
45
- text-decoration: underline;
38
+ .link,
39
+ .prose-content > *:not(.prose-footer) > a {
40
+ @apply ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
41
+
42
+ &.variant-primary,
43
+ &:is(.prose-content > *:not(.prose-footer) > a) {
44
+ @apply text-primary underline underline-offset-4;
45
+ }
46
+
47
+ &.variant-underline {
48
+ @apply underline underline-offset-4;
49
+ }
50
+
51
+ &.variant-muted {
52
+ @apply text-muted-foreground hover:text-foreground;
53
+
54
+ &.current {
55
+ @apply text-foreground;
56
+ }
57
+ }
58
+
59
+ &.size-sm {
60
+ @apply text-sm;
61
+ }
62
+
63
+ &.size-lg {
64
+ @apply text-lg;
46
65
  }
47
66
 
48
- &:hover {
49
- color: var(--color-12);
67
+ .icon {
68
+ @apply mb-0.5;
50
69
  }
51
70
  }
52
71
  }