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,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,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
- class:list="tagline"
15
- as="span"
16
+ class:list="text"
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
  }
@@ -0,0 +1,76 @@
1
+ ---
2
+ import Button from './Button.astro'
3
+ import Icon from './Icon.astro'
4
+
5
+ interface Props {
6
+ if?: any
7
+ size?: any
8
+ variant?: 'primary' | 'secondary' | 'outline' | 'ghost' | undefined
9
+ }
10
+
11
+ const { variant = 'secondary', ...rest } = Astro.props
12
+ ---
13
+
14
+ <Button
15
+ class="themer"
16
+ {variant}
17
+ {...rest}
18
+ >
19
+ <Icon
20
+ class="themer-light-icon"
21
+ name="sun"
22
+ />
23
+ <Icon
24
+ class="themer-dark-icon"
25
+ name="moon"
26
+ />
27
+ <select class="themer-select">
28
+ <option value="light">Light</option>
29
+ <option value="dark">Dark</option>
30
+ <option
31
+ value="system"
32
+ selected
33
+ >
34
+ System
35
+ </option>
36
+ </select>
37
+ </Button>
38
+
39
+ <script>
40
+ import { navigate } from 'astro:transitions/client'
41
+
42
+ function init(document: Document) {
43
+ document.querySelectorAll('.themer select').forEach((select) => {
44
+ select.addEventListener('change', (event) => {
45
+ if (event.target instanceof HTMLSelectElement) {
46
+ localStorage.setItem('theme', event.target.value)
47
+ navigate(window.location.href)
48
+ }
49
+ })
50
+ })
51
+ }
52
+
53
+ init(document)
54
+
55
+ document.addEventListener('astro:before-swap', (event) => {
56
+ init(event.newDocument)
57
+ })
58
+ </script>
59
+
60
+ <style is:global>
61
+ .themer {
62
+ @apply relative px-0;
63
+
64
+ .themer-select {
65
+ @apply absolute inset-0 cursor-pointer appearance-none opacity-0;
66
+ }
67
+ }
68
+
69
+ html.dark .themer-light-icon {
70
+ display: none;
71
+ }
72
+
73
+ html:not(.dark) .themer-dark-icon {
74
+ display: none;
75
+ }
76
+ </style>