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,70 +1,79 @@
1
1
  ---
2
- import type { ComponentProps } from 'astro/types'
2
+ import type { HTMLAttributes } from 'astro/types'
3
3
  import Button from 'fulldev-ui/components/Button.astro'
4
4
  import Element from 'fulldev-ui/components/Element.astro'
5
5
  import Heading from 'fulldev-ui/components/Heading.astro'
6
- import Text from 'fulldev-ui/components/Text.astro'
7
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
+ import type { ChannelSchema } from 'fulldev-ui/schemas/components/channel'
8
7
 
9
- interface Props extends GlobalProps, ComponentProps<typeof Button> {
10
- variant?: ComponentProps<typeof Button>['variant']
11
- icon?: ComponentProps<typeof Button>['icon']
12
- href?: ComponentProps<typeof Button>['href']
13
- heading?: ComponentProps<typeof Heading>['text']
14
- text?: ComponentProps<typeof Text>['text']
15
- structure?: 'row' | 'column' | undefined
16
- align?: 'start' | 'center' | undefined
17
- }
8
+ interface Props extends HTMLAttributes<'div'>, ChannelSchema {}
18
9
 
19
10
  const {
20
11
  variant = 'secondary',
21
- structure = 'row',
22
- color = 'brand',
23
- align = 'start',
12
+ size = 'md',
13
+ href,
14
+ icon,
24
15
  heading,
25
16
  text,
26
- icon,
27
- href,
28
17
  ...rest
29
18
  } = Astro.props
30
19
  ---
31
20
 
32
21
  <Element
33
- class:list={`channel ${structure}`}
34
- {align}
22
+ class:list="channel"
23
+ {size}
35
24
  {...rest}
36
25
  >
37
26
  <Button
38
27
  {variant}
39
- {color}
28
+ {size}
40
29
  {href}
41
30
  {icon}
42
31
  />
43
- <Element class:list={'column'}>
32
+ <Element class:list="channel-content">
44
33
  <Heading
45
- level={6}
34
+ as="h6"
35
+ size="sm"
46
36
  text={heading}
47
37
  />
48
- <Text text={text} />
38
+ <Fragment set:html={text} />
39
+ <slot />
49
40
  </Element>
50
41
  </Element>
51
42
 
52
- <style>
43
+ <style is:global>
53
44
  .channel {
54
- gap: var(--space-4);
45
+ @apply flex gap-3;
46
+
47
+ .channel-content {
48
+ @apply flex flex-col text-muted-foreground;
49
+
50
+ .heading {
51
+ @apply leading-snug;
52
+ }
53
+ }
54
+
55
+ &.size-sm {
56
+ @apply gap-2;
57
+
58
+ .channel-content {
59
+ @apply text-xs leading-tight;
60
+ }
61
+ }
62
+
63
+ &.size-md {
64
+ @apply gap-2.5;
55
65
 
56
- &.column {
57
- display: flex;
58
- flex-direction: column;
59
- align-items: inherit;
60
- gap: var(--space-1);
66
+ .channel-content {
67
+ @apply text-sm leading-tight;
68
+ }
61
69
  }
62
70
 
63
- &.row {
64
- display: flex;
65
- flex-direction: row;
66
- align-items: inherit;
67
- gap: var(--space-1);
71
+ &.size-lg {
72
+ @apply gap-3;
73
+
74
+ .channel-content {
75
+ @apply text-base leading-tight;
76
+ }
68
77
  }
69
78
  }
70
79
  </style>
@@ -6,32 +6,46 @@ import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
6
 
7
7
  interface Props extends GlobalProps, HTMLAttributes<'div'> {
8
8
  variant?: ComponentProps<typeof Channel>['variant']
9
+ size?: ComponentProps<typeof Channel>['size']
10
+ channel?: ComponentProps<typeof Channel> | undefined
9
11
  channels?: ComponentProps<typeof Channel>[] | undefined
10
12
  }
11
13
 
12
- const { channels, variant, ...rest } = Astro.props
14
+ const { channels = [], channel, variant, size, ...rest } = Astro.props
13
15
  ---
14
16
 
15
17
  <Element
16
18
  class:list="channels"
19
+ {size}
17
20
  {...rest}
18
21
  >
19
22
  {
20
- channels?.map((channel) => (
23
+ [channel, ...channels].filter(Boolean).map((channel) => (
21
24
  <Channel
22
25
  {variant}
26
+ {size}
23
27
  {...channel}
24
28
  />
25
29
  ))
26
30
  }
27
31
  </Element>
28
32
 
29
- <style is:global lang="scss">
33
+ <style is:global>
30
34
  @layer fulldev {
31
35
  .channels {
32
- display: flex;
33
- flex-direction: column;
34
- gap: var(--space-2);
36
+ @apply flex flex-col gap-2.5;
37
+
38
+ &.size-sm {
39
+ @apply gap-2;
40
+ }
41
+
42
+ &.size-md {
43
+ @apply gap-2.5;
44
+ }
45
+
46
+ &.size-lg {
47
+ @apply gap-3;
48
+ }
35
49
  }
36
50
  }
37
51
  </style>
@@ -3,6 +3,7 @@ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
3
  import Element from 'fulldev-ui/components/Element.astro'
4
4
  import Label from 'fulldev-ui/components/Label.astro'
5
5
  import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
+ import Icon from './Icon.astro'
6
7
 
7
8
  interface Props extends GlobalProps, HTMLAttributes<'input'> {
8
9
  label?: ComponentProps<typeof Label>['text']
@@ -10,52 +11,76 @@ interface Props extends GlobalProps, HTMLAttributes<'input'> {
10
11
 
11
12
  const {
12
13
  label,
13
- id,
14
- name,
15
- placeholder,
16
- value,
17
- disabled,
18
- checked,
19
- required,
14
+ name = label,
15
+ id = name,
16
+ type = 'text',
17
+ size = 'md',
20
18
  ...rest
21
19
  } = Astro.props
22
20
  ---
23
21
 
24
22
  <Element
25
23
  class:list="checkbox"
26
- {...rest}
24
+ as="label"
25
+ for={id}
26
+ {size}
27
27
  >
28
28
  <Element
29
+ class:list="checkbox-input"
29
30
  as="input"
30
31
  type="checkbox"
31
- id={id ?? name ?? label}
32
- if={id ?? name ?? label}
33
- name={name ?? label ?? id}
34
- {disabled}
35
- {placeholder}
36
- {required}
37
- {checked}
32
+ if={id}
33
+ {id}
34
+ {name}
38
35
  {...rest}
39
36
  />
37
+ <Icon
38
+ class="checkbox-icon"
39
+ name="check"
40
+ />
40
41
  <Label
41
- for={id ?? name ?? label}
42
+ for={id}
42
43
  text={label}
44
+ {size}
43
45
  />
44
46
  </Element>
45
47
 
46
- <style lang="scss" is:global>
48
+ <style is:global>
47
49
  @layer fulldev {
48
50
  .checkbox {
49
- display: flex;
50
- align-items: center;
51
- gap: var(--space-1);
52
-
53
- input {
54
- display: block;
55
- width: var(--text-2);
56
- height: var(--text-2);
57
- accent-color: var(--color-9);
58
- color-scheme: dark;
51
+ @apply relative flex items-center gap-2;
52
+
53
+ .checkbox-input {
54
+ @apply size-[1em] cursor-pointer rounded-sm border border-primary bg-transparent accent-primary;
55
+ @apply appearance-none border border-primary bg-background checked:bg-primary;
56
+ }
57
+
58
+ .icon.checkbox-icon {
59
+ @apply absolute bg-transparent p-0.5 text-background;
60
+
61
+ * {
62
+ stroke-width: 3.5px !important;
63
+ }
64
+ }
65
+
66
+ &.size-sm {
67
+ .checkbox-input,
68
+ .icon.checkbox-icon {
69
+ @apply !size-3.5;
70
+ }
71
+ }
72
+ &.size-md {
73
+ .checkbox-input,
74
+ .checkbox-icon {
75
+ @apply !size-4;
76
+ }
77
+ }
78
+
79
+ &.size-lg {
80
+ .checkbox-input,
81
+ .checkbox-icon {
82
+ @apply !size-[1.125rem];
83
+ }
59
84
  }
60
85
  }
61
86
  }
@@ -0,0 +1,52 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import { Code as AstroCode } from 'astro:components'
4
+ import Element from 'fulldev-ui/components/Element.astro'
5
+
6
+ interface Props extends ComponentProps<typeof AstroCode> {}
7
+
8
+ const { lang = 'astro', code, ...rest } = Astro.props
9
+ ---
10
+
11
+ <Element class:list="code">
12
+ <div class="example">
13
+ <slot name="example" />
14
+ <Fragment set:html={code} />
15
+ </div>
16
+ <slot name="code" />
17
+ {
18
+ code && (
19
+ <AstroCode
20
+ class:list="code"
21
+ code={code}
22
+ {lang}
23
+ {...rest}
24
+ />
25
+ )
26
+ }
27
+ </Element>
28
+
29
+ <style is:global>
30
+ @layer fulldev {
31
+ .astro-code {
32
+ @apply mt-4 rounded-md p-4 text-sm first:mt-0;
33
+ }
34
+
35
+ .code {
36
+ @apply mt-8 overflow-hidden rounded-md border first:mt-0;
37
+
38
+ .example {
39
+ @apply flex flex-wrap items-center gap-8 p-8;
40
+
41
+ > *,
42
+ > slot > * {
43
+ @apply mt-0;
44
+ }
45
+ }
46
+
47
+ .astro-code {
48
+ @apply mt-0 rounded-none border-none p-4;
49
+ }
50
+ }
51
+ }
52
+ </style>
@@ -0,0 +1,25 @@
1
+ ---
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+
5
+ interface Props extends HTMLAttributes<'div'> {
6
+ as?: HTMLTag
7
+ }
8
+
9
+ const { ...rest } = Astro.props
10
+ ---
11
+
12
+ <Element
13
+ class:list="container"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .container {
22
+ @apply mx-auto w-full max-w-screen-2xl px-gutter;
23
+ }
24
+ }
25
+ </style>
@@ -20,6 +20,7 @@ const {
20
20
  ---
21
21
 
22
22
  <Button
23
+ size="sm"
23
24
  id={`${id}-button`}
24
25
  variant="secondary"
25
26
  onclick={`document.getElementById('${id}').showModal()`}
@@ -28,7 +29,7 @@ const {
28
29
 
29
30
  <dialog
30
31
  class="dialog"
31
- {id}
32
+ id={id as string}
32
33
  onclick={`event.target === this && this.close()`}
33
34
  >
34
35
  <Card
@@ -39,7 +40,7 @@ const {
39
40
  </Card>
40
41
  </dialog>
41
42
 
42
- <style lang="scss" is:global>
43
+ <style is:global>
43
44
  @layer fulldev {
44
45
  .dialog {
45
46
  margin: auto !important;
@@ -1,171 +1,80 @@
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 Logo from 'fulldev-ui/components/experimental/Logo.astro'
6
- import Menu from 'fulldev-ui/components/Menu.astro'
7
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
8
- import Buttons from './Buttons.astro'
9
- import Heading from './Heading.astro'
4
+ import Button from './Button.astro'
10
5
 
11
- interface Props extends GlobalProps, HTMLAttributes<'aside'> {
12
- variant?: ComponentProps<typeof Button>['variant']
13
- text?: ComponentProps<typeof Button>['text']
14
- icon?: ComponentProps<typeof Button>['icon']
15
- heading?: ComponentProps<typeof Heading>['text']
16
- logo?: ComponentProps<typeof Logo> | undefined
17
- company?: ComponentProps<typeof Logo>['company']
18
- menu?: ComponentProps<typeof Menu>['groups']
19
- buttons?: ComponentProps<typeof Buttons>['buttons']
6
+ interface Props
7
+ extends HTMLAttributes<'aside'>,
8
+ Pick<ComponentProps<typeof Button>, 'variant' | 'size' | 'text' | 'icon'> {
9
+ id: string
10
+ icon: string
20
11
  }
21
12
 
22
- const {
23
- id = 'drawer',
24
- size = 'sm',
25
- icon = 'menu-2',
26
- color,
27
- variant,
28
- text,
29
- buttons,
30
- heading,
31
- logo,
32
- company,
33
- menu,
34
- if: ifProp,
35
- ...rest
36
- } = Astro.props
13
+ const { id, variant = 'ghost', size = 'md', icon, text, ...rest } = Astro.props
37
14
 
38
- const buttonsGroup = { heading: '', buttons: buttons }
39
- const mergedMenu = [buttonsGroup, ...(menu || [])] as typeof menu
15
+ const slot = await Astro.slots.render('default')
16
+ const render = slot?.trim().length > 0
40
17
  ---
41
18
 
42
- <Button
43
- if={ifProp}
44
- variant="secondary"
45
- class:list={['drawer-button', `${id}-button`]}
46
- onclick={`document.getElementById('${id}').showModal()`}
47
- {variant}
48
- {text}
49
- {icon}
50
- {color}
51
- />
52
-
53
- <Element
54
- if={ifProp}
55
- onclick={`event.target === this && this.close()`}
56
- class:list="drawer"
57
- as="dialog"
58
- {id}
59
- {text}
60
- {icon}
61
- {...rest}
62
- >
63
- <Element class:list="drawer-body">
64
- <Element
65
- class:list="drawer-header"
66
- as="header"
67
- >
68
- <Logo
69
- {company}
70
- {...logo}
19
+ {
20
+ render && (
21
+ <Element class:list="drawer">
22
+ <Button
23
+ class="drawer-button"
24
+ as="label"
25
+ for={id}
26
+ {variant}
27
+ {size}
28
+ {text}
29
+ {icon}
71
30
  />
72
- <Heading
73
- level={4}
74
- text={heading}
31
+
32
+ <input
33
+ type="checkbox"
34
+ class="drawer-checkbox"
35
+ name={id}
36
+ {id}
75
37
  />
76
- <Button
77
- variant="secondary"
78
- icon="x"
79
- onclick={`document.getElementById('${id}').close()`}
38
+
39
+ <Element
40
+ class:list="drawer-body"
41
+ as="aside"
42
+ {...rest}
43
+ >
44
+ <Fragment set:html={slot} />
45
+ </Element>
46
+
47
+ <label
48
+ for={id}
49
+ class="drawer-backdrop"
80
50
  />
81
- <slot name="header" />
82
- </Element>
83
- <Element class:list="drawer-content">
84
- <Menu groups={mergedMenu} />
85
- <slot />
86
51
  </Element>
87
- <Element
88
- class:list="drawer-footer"
89
- as="footer"
90
- >
91
- <slot name="footer" />
92
- </Element>
93
- </Element>
94
- </Element>
52
+ )
53
+ }
95
54
 
96
- <style lang="scss" is:global>
55
+ <style is:global>
97
56
  @layer fulldev {
98
- body:has(dialog[open]) {
99
- overflow: hidden;
100
-
101
- @media (min-width: 768px) {
102
- overflow: auto;
103
- }
104
- }
105
-
106
57
  .drawer {
107
- top: 0;
108
- bottom: 0;
109
- margin: 0;
110
- padding: 0;
111
- width: 100%;
112
- max-width: 100%;
113
- height: 100%;
114
- max-height: 100%;
115
-
116
- @media (min-width: 768px) {
117
- width: 440px;
118
- }
119
-
120
- &::backdrop {
121
- cursor: pointer;
122
- background: rgba(0, 0, 0, 0.5);
123
- }
58
+ @apply contents;
59
+ }
124
60
 
125
- .drawer-body {
126
- display: flex;
127
- flex-shrink: 1;
128
- flex-direction: column;
129
- border-right: 1px solid var(--color-a6);
130
- height: 100%;
131
- overflow: auto;
132
- }
61
+ .drawer-checkbox {
62
+ @apply invisible hidden;
63
+ }
133
64
 
134
- .drawer-content {
135
- display: flex;
136
- flex-direction: column;
137
- padding: var(--space-6) var(--gutter);
138
- }
65
+ .drawer-backdrop {
66
+ @apply pointer-events-none invisible fixed left-0 top-0 z-30 h-full w-full bg-black opacity-0 transition-opacity;
139
67
 
140
- .drawer-header,
141
- .drawer-footer {
142
- display: flex;
143
- position: sticky;
144
- flex-shrink: 0;
145
- z-index: 1;
146
- border-style: solid;
147
- border-color: var(--color-a6);
148
- background-color: var(--base-background);
68
+ &:is(.drawer-checkbox:checked ~ &) {
69
+ @apply pointer-events-auto visible opacity-50;
149
70
  }
71
+ }
150
72
 
151
- .drawer-header {
152
- top: 0;
153
- align-items: center;
154
- border-bottom-width: 1px;
155
- padding: 0 var(--gutter);
156
- height: 56px;
157
-
158
- .button {
159
- margin-left: auto;
160
- }
161
- }
73
+ .drawer-body {
74
+ @apply fixed bottom-0 left-0 top-0 z-40 h-full w-80 max-w-[75vw] -translate-x-full rounded-r-lg border border-l-0 bg-background shadow-2xl transition-transform;
162
75
 
163
- .drawer-footer {
164
- bottom: 0;
165
- flex-direction: column;
166
- margin-top: auto;
167
- border-top-width: 1px;
168
- padding: var(--space-5) var(--gutter);
76
+ &:is(.drawer-checkbox:checked ~ &) {
77
+ @apply translate-x-0;
169
78
  }
170
79
  }
171
80
  }