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
@@ -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'>, HTMLAttributes<'a'> {
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 = Omit<HTMLAttributes<'body'>, 'title'> & {
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
  }