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,100 +1,77 @@
1
1
  ---
2
- import type { ComponentProps, HTMLAttributes } from 'astro/types'
2
+ import type { HTMLAttributes } from 'astro/types'
3
3
  import Element from 'fulldev-ui/components/Element.astro'
4
- import Logo from 'fulldev-ui/components/experimental/Logo.astro'
5
- import Menu from 'fulldev-ui/components/Menu.astro'
6
- import ThemeSelect from 'fulldev-ui/components/ThemeSelect.astro'
7
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
+ import type { SidebarSchema } from 'fulldev-ui/schemas/components/sidebar'
8
5
  import Heading from './Heading.astro'
9
- import Toc from './Toc.astro'
6
+ import Link from './Link.astro'
10
7
 
11
- interface Props extends GlobalProps, HTMLAttributes<'aside'> {
12
- menu?: ComponentProps<typeof Menu>['groups']
13
- heading?: ComponentProps<typeof Heading>['text']
14
- render?: ComponentProps<typeof Toc>['render']
15
- logo?: ComponentProps<typeof Logo>
16
- toc?: ComponentProps<typeof Toc>['heading']
17
- company?: ComponentProps<typeof Logo>['company']
18
- themeselect?: boolean | undefined
19
- }
8
+ interface Props extends HTMLAttributes<'aside'>, SidebarSchema {}
20
9
 
21
- const {
22
- size = 'sm',
23
- logo,
24
- company,
25
- render,
26
- themeselect,
27
- menu,
28
- toc,
29
- heading,
30
- ...rest
31
- } = Astro.props
10
+ const { company, logo, menus, links, heading, themer, ...rest } = Astro.props
32
11
  ---
33
12
 
34
13
  <Element
35
14
  class:list="sidebar"
36
15
  as="aside"
37
- {size}
38
16
  {...rest}
39
17
  >
40
- <Element
41
- class:list="sidebar-header"
42
- as="header"
43
- >
44
- <Logo
45
- {company}
46
- {...logo}
47
- />
48
- <Heading
49
- level={4}
50
- text={heading}
51
- />
52
- <slot name="header" />
53
- </Element>
54
- <Element class:list="sidebar-content">
55
- <Menu groups={menu} />
56
- <ThemeSelect if={themeselect} />
57
- <slot />
18
+ <Element class:list="sidebar-links">
19
+ {
20
+ links?.map((link) => (
21
+ <Link
22
+ variant="muted"
23
+ size="sm"
24
+ {...link}
25
+ />
26
+ ))
27
+ }
58
28
  </Element>
29
+ {
30
+ menus?.map(({ heading, links }) => (
31
+ <Element class:list="sidebar-menu">
32
+ <Heading
33
+ text={heading}
34
+ size="sm"
35
+ as="h6"
36
+ />
37
+ <Element class:list="sidebar-links">
38
+ {links?.map((link) => (
39
+ <Link
40
+ variant="muted"
41
+ size="sm"
42
+ {...link}
43
+ />
44
+ ))}
45
+ </Element>
46
+ </Element>
47
+ ))
48
+ }
59
49
  </Element>
60
50
 
61
- <style lang="scss" is:global>
51
+ <style is:global>
62
52
  @layer fulldev {
63
53
  .sidebar {
64
- display: none;
54
+ @apply sticky bottom-0 left-0 hidden h-full max-w-[75vw] flex-col items-start gap-8 overflow-y-auto border-r bg-background py-8 pr-8 lg:flex;
55
+ @apply scrollbar scrollbar-track-transparent scrollbar-thumb-accent scrollbar-thumb-rounded-full scrollbar-w-2 hover:scrollbar-thumb-accent-hover;
65
56
 
66
- @media (min-width: 1024px) {
67
- display: flex;
68
- position: sticky;
69
- top: var(--header-height, 0px);
70
- bottom: 0;
71
- flex-shrink: 0;
72
- flex-direction: column;
73
- justify-content: flex-start;
74
- z-index: 10;
75
- border-right: 1px solid var(--color-a6);
76
- width: calc(var(--space-7) * 4);
77
- height: calc(100vh - var(--header-height, 0px));
57
+ --headers: calc(var(--header-height, 0px) + var(--subheader-height, 0px));
58
+ top: var(--headers);
59
+ width: var(--sidebar-width);
60
+ height: calc(100vh - var(--headers));
78
61
 
79
- .sidebar-header {
80
- display: flex;
81
- position: sticky;
82
- align-items: center;
83
- border-bottom: 1px solid var(--color-a6);
84
- padding: 0 var(--gutter);
85
- width: 100%;
86
- height: 56px;
62
+ &,
63
+ & ~ * {
64
+ @media (min-width: 1024px) {
65
+ --sidebar-width: 14rem;
87
66
  }
67
+ }
88
68
 
89
- .sidebar-content {
90
- display: flex;
91
- top: 0;
92
- flex: 1;
93
- flex-direction: column;
94
- padding: var(--space-md-6) var(--gutter);
95
- width: 100%;
96
- overflow-y: auto;
97
- }
69
+ .sidebar-menu {
70
+ @apply flex flex-col gap-3;
71
+ }
72
+
73
+ .sidebar-links {
74
+ @apply flex flex-col gap-2;
98
75
  }
99
76
  }
100
77
  }
@@ -4,7 +4,13 @@ import Button from 'fulldev-ui/components/Button.astro'
4
4
 
5
5
  interface Props extends ComponentProps<typeof Button> {}
6
6
 
7
- const { variant = 'secondary', icon, href } = Astro.props
7
+ const {
8
+ variant = 'secondary',
9
+ target = '_blank',
10
+ icon,
11
+ href,
12
+ ...rest
13
+ } = Astro.props
8
14
 
9
15
  const platform = () => {
10
16
  if (typeof href !== 'string') return
@@ -16,20 +22,16 @@ const platform = () => {
16
22
  if (href.includes('tiktok')) return 'brand-tiktok'
17
23
  if (href.includes('twitch')) return 'brand-twitch'
18
24
  if (href.includes('github')) return 'brand-github'
25
+ if (href.includes('discord')) return 'brand-discord'
19
26
  return undefined
20
27
  }
21
28
  ---
22
29
 
23
30
  <Button
24
- class:list={'social'}
31
+ class:list="social"
25
32
  icon={icon ?? platform()}
26
33
  {variant}
27
34
  {href}
35
+ {target}
36
+ {...rest}
28
37
  />
29
-
30
- <style is:global lang="scss">
31
- .social {
32
- padding: 0 var(--space-3);
33
- height: calc(var(--text-2) + 2 * var(--space-3));
34
- }
35
- </style>
@@ -9,29 +9,33 @@ interface Props extends GlobalProps, HTMLAttributes<'div'> {
9
9
  socials?: ComponentProps<typeof Social>['href'][] | undefined
10
10
  }
11
11
 
12
- const { socials, variant, ...rest } = Astro.props
12
+ const { variant = 'ghost', socials, size, ...rest } = Astro.props
13
13
  ---
14
14
 
15
15
  <Element
16
16
  class:list="socials"
17
+ {variant}
17
18
  {...rest}
18
19
  >
19
20
  {
20
21
  socials?.map((social) => (
21
22
  <Social
22
23
  {variant}
24
+ {size}
23
25
  href={social}
24
26
  />
25
27
  ))
26
28
  }
27
29
  </Element>
28
30
 
29
- <style is:global lang="scss">
31
+ <style is:global>
30
32
  @layer fulldev {
31
33
  .socials {
32
- display: flex;
33
- flex-wrap: wrap;
34
- gap: var(--space-2);
34
+ @apply flex gap-2;
35
+
36
+ &.variant-ghost {
37
+ @apply gap-0;
38
+ }
35
39
  }
36
40
  }
37
41
  </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="stack"
14
+ {...rest}
15
+ >
16
+ <slot />
17
+ </Element>
18
+
19
+ <style is:global>
20
+ @layer fulldev {
21
+ .stack {
22
+ @apply relative grid w-full auto-cols-fr items-start gap-x-16 gap-y-8 lg:grid-flow-col;
23
+ }
24
+ }
25
+ </style>
@@ -0,0 +1,59 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import Links from 'fulldev-ui/components/Links.astro'
5
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
+
7
+ interface Props extends GlobalProps, HTMLAttributes<'header'> {
8
+ dark?: boolean | undefined
9
+ size?: 'sm' | 'md' | 'lg' | undefined
10
+ links?: ComponentProps<typeof Links>['links']
11
+ }
12
+
13
+ const { size = 'sm', links, ...rest } = Astro.props
14
+ ---
15
+
16
+ <Element
17
+ class:list={['subheader']}
18
+ as="subheader"
19
+ {size}
20
+ {...rest}
21
+ >
22
+ <Element class:list="subheader-container">
23
+ <Links
24
+ class:list="subheader-links"
25
+ {size}
26
+ {links}
27
+ />
28
+ </Element>
29
+ </Element>
30
+
31
+ <style is:global>
32
+ @layer fulldev {
33
+ .subheader {
34
+ @apply sticky left-0 top-0 z-20 flex h-11 items-center overflow-hidden bg-card max-lg:hidden;
35
+
36
+ top: var(--header-height);
37
+
38
+ .subheader-container {
39
+ @apply container flex w-full items-center gap-6;
40
+ }
41
+
42
+ .subheader-links {
43
+ @apply w-full justify-between;
44
+ }
45
+
46
+ &,
47
+ & ~ * {
48
+ --subheader-height: 2.75rem;
49
+ }
50
+
51
+ @media (max-width: 1023.999px) {
52
+ &,
53
+ & ~ * {
54
+ --subheader-height: 0px;
55
+ }
56
+ }
57
+ }
58
+ }
59
+ </style>
@@ -1,48 +1,91 @@
1
1
  ---
2
- import type { HTMLAttributes } from 'astro/types'
2
+ 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
6
 
7
- interface Props extends GlobalProps, HTMLAttributes<'div'> {
8
- true?: string | undefined
9
- false?: string | undefined
10
- trueLabel?: string | undefined
11
- falseLabel?: string | undefined
12
- name: string
13
- checked: boolean
7
+ interface Props extends GlobalProps, Omit<HTMLAttributes<'input'>, 'type'> {
8
+ label?: ComponentProps<typeof Label>['text']
14
9
  }
15
10
 
16
- const { name, checked, trueLabel, falseLabel, ...rest } = Astro.props
11
+ const { label, name = label, id = name, size = 'md', ...rest } = Astro.props
17
12
  ---
18
13
 
19
14
  <Element
20
15
  class:list="switch"
21
- {...rest}
16
+ as="label"
17
+ for={id}
18
+ {size}
22
19
  >
23
- <Label
24
- for={name}
25
- set:html={falseLabel}
20
+ <Element
21
+ class:list="switch-input"
22
+ as="input"
23
+ type="checkbox"
24
+ if={id}
25
+ {id}
26
+ {name}
27
+ {...rest}
28
+ />
29
+ <Element
30
+ as="label"
31
+ for={id}
32
+ if={id}
33
+ class="switch-mark"
26
34
  />
27
- <label
28
- for={name}
29
- class="switch-element"
30
- >
31
- <input
32
- {checked}
33
- name={name}
34
- type="checkbox"
35
- class="checkbox"
36
- />
37
- <div class="checkmark"></div>
38
- </label>
39
35
  <Label
40
- for={name}
41
- set:html={trueLabel}
36
+ for={id}
37
+ text={label}
38
+ {size}
42
39
  />
43
40
  </Element>
44
41
 
45
- <style is:global lang="scss">
42
+ <style is:global>
43
+ @layer fulldev {
44
+ .switch {
45
+ @apply flex items-center gap-2;
46
+
47
+ .switch-input {
48
+ @apply hidden opacity-0;
49
+ }
50
+
51
+ .switch-mark {
52
+ @apply relative block cursor-pointer rounded-full bg-input transition;
53
+
54
+ &::before {
55
+ @apply block h-full w-1/2 rounded-full border-2 border-input bg-background transition content-[''];
56
+ }
57
+ }
58
+
59
+ .switch-input:checked ~ .switch-mark {
60
+ @apply bg-primary;
61
+
62
+ &::before {
63
+ @apply translate-x-full border-primary;
64
+ }
65
+ }
66
+
67
+ &.size-sm {
68
+ .switch-mark {
69
+ @apply h-5 w-10;
70
+ }
71
+ }
72
+
73
+ &.size-md {
74
+ .switch-mark {
75
+ @apply h-6 w-12;
76
+ }
77
+ }
78
+
79
+ &.size-lg {
80
+ .switch-mark {
81
+ @apply h-7 w-14;
82
+ }
83
+ }
84
+ }
85
+ }
86
+ </style>
87
+
88
+ <!-- <style is:global>
46
89
  @layer fulldev {
47
90
  .switch {
48
91
  display: flex;
@@ -105,4 +148,4 @@ const { name, checked, trueLabel, falseLabel, ...rest } = Astro.props
105
148
  }
106
149
  }
107
150
  }
108
- </style>
151
+ </style> -->
@@ -41,7 +41,7 @@ const { header, body, footer, ...rest } = Astro.props
41
41
  </Element>
42
42
  </Element>
43
43
 
44
- <style is:global lang="scss">
44
+ <style is:global >
45
45
  @layer fulldev {
46
46
  .table {
47
47
  box-shadow: 0 0 0 1px var(--color-6);
@@ -1,32 +1,50 @@
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
- import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
+ import type { TaglineSchema } from 'fulldev-ui/schemas/components/tagline'
5
5
 
6
- interface Props extends GlobalProps, HTMLAttributes<'span'> {
7
- text?: string | undefined
6
+ interface Props extends HTMLAttributes<'p'>, TaglineSchema {
7
+ as?: HTMLTag
8
+ muted?: boolean | undefined
9
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | undefined
8
10
  }
9
11
 
10
- const { text, ...rest } = Astro.props
12
+ const { as = 'p', text, ...rest } = Astro.props
11
13
  ---
12
14
 
13
15
  <Element
14
16
  class:list="tagline"
15
- as="span"
17
+ {as}
16
18
  {...rest}
17
19
  >
20
+ <Fragment set:html={text} />
18
21
  <slot />
19
- <Fragment set:text={text} />
20
22
  </Element>
21
23
 
22
- <style is:global lang="scss">
24
+ <style is:global>
23
25
  @layer fulldev {
24
26
  .tagline {
25
- color: var(--color-11);
26
- font-size: var(--text-2);
27
- line-height: 1;
28
- text-align: left;
29
- white-space: nowrap;
27
+ @apply font-semibold leading-tight text-primary;
28
+
29
+ &.size-xs {
30
+ @apply text-xs;
31
+ }
32
+
33
+ &.size-sm {
34
+ @apply text-sm;
35
+ }
36
+
37
+ &.size-md {
38
+ @apply text-base;
39
+ }
40
+
41
+ &.size-lg {
42
+ @apply text-lg;
43
+ }
44
+
45
+ &.size-xl {
46
+ @apply text-xl;
47
+ }
30
48
  }
31
49
  }
32
50
  </style>
@@ -9,83 +9,73 @@ interface Props extends GlobalProps, HTMLAttributes<'textarea'> {
9
9
  }
10
10
 
11
11
  const {
12
- placeholder,
13
- name = placeholder,
14
12
  label,
15
- rows,
16
- value,
17
- disabled,
18
- required,
13
+ placeholder,
14
+ name = label || placeholder,
15
+ id = name,
16
+ size = 'md',
17
+ rows = 3,
19
18
  ...rest
20
19
  } = Astro.props
21
20
  ---
22
21
 
23
22
  <Element
24
23
  class:list="textarea"
25
- {...rest}
24
+ as="label"
25
+ for={id}
26
+ {size}
26
27
  >
27
28
  <Label
28
29
  for={name}
29
- set:html={label}
30
+ text={label}
31
+ {size}
30
32
  />
31
33
  <Element
34
+ class:list="textarea-textarea"
32
35
  as="textarea"
33
- if={name}
34
- id={name}
36
+ if={id}
37
+ {id}
35
38
  {name}
36
39
  {placeholder}
37
- {value}
38
- {disabled}
39
- {required}
40
40
  {rows}
41
+ {...rest}
41
42
  />
42
43
  </Element>
43
44
 
44
- <style is:global lang="scss">
45
- @layer fulldev {
45
+ <style is:global>
46
+ @layer textarea {
46
47
  .textarea {
47
- display: flex;
48
- position: relative;
49
- flex-direction: column;
50
- gap: var(--space-1);
51
- width: 100%;
48
+ @apply relative flex flex-col gap-1.5;
52
49
 
53
- textarea {
54
- display: flex;
55
- position: relative;
56
- align-items: center;
57
- outline: none;
58
- border: 1px solid var(--color-6);
59
- border-radius: var(--radius-1);
60
- background-color: transparent;
61
- padding: var(--space-4);
62
- width: 100%;
63
- height: calc((var(--text-2) + 2 * var(--space-4)) * 2);
64
- min-height: calc((var(--text-2) + 2 * var(--space-4)) * 2);
65
- resize: vertical;
66
- color: var(--color-11);
67
- font-weight: 400;
68
- font-size: var(--text-2);
69
- line-height: 1.25;
50
+ .textarea-textarea {
51
+ @apply flex w-full resize-y rounded-md border border-input bg-background text-sm ring-offset-background;
52
+ @apply file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground;
53
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
54
+ @apply disabled:pointer-events-none disabled:opacity-50;
55
+ @apply [&[readonly]]:pointer-events-none;
56
+ }
70
57
 
71
- &::placeholder {
72
- color: var(--color-11);
73
- }
58
+ &.size-sm {
59
+ @apply gap-1;
74
60
 
75
- &:hover {
76
- outline: none;
61
+ .textarea-textarea {
62
+ @apply min-h-9 px-2.5 py-1.5 text-xs;
77
63
  }
64
+ }
65
+
66
+ &.size-md {
67
+ @apply gap-1.5;
78
68
 
79
- &:focus {
80
- outline: none;
81
- box-shadow: inset 0 0 0 2px var(--color-7);
82
- border-color: var(--color-7);
69
+ .textarea-textarea {
70
+ @apply min-h-10 px-3 py-2 text-sm;
83
71
  }
72
+ }
73
+
74
+ &.size-lg {
75
+ @apply gap-2;
84
76
 
85
- &:disabled {
86
- opacity: 50%;
87
- cursor: not-allowed;
88
- pointer-events: none;
77
+ .textarea-textarea {
78
+ @apply min-h-12 px-3.5 py-2.5 text-base;
89
79
  }
90
80
  }
91
81
  }