fulldev-ui 0.4.33 → 0.5.0-beta-16

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 (315) hide show
  1. package/.env.example +3 -0
  2. package/CONTRIBUTING.md +10 -4
  3. package/astro.config.ts +11 -11
  4. package/package.json +31 -17
  5. package/pnpm-lock.yaml +1353 -438
  6. package/public/favicon/android-chrome-192x192.png +0 -0
  7. package/public/favicon/android-chrome-512x512.png +0 -0
  8. package/public/favicon/apple-touch-icon.png +0 -0
  9. package/public/favicon/browserconfig.xml +7 -7
  10. package/public/favicon/favicon-16x16-dark.png +0 -0
  11. package/public/favicon/favicon-16x16.png +0 -0
  12. package/public/favicon/favicon-32x32-dark.png +0 -0
  13. package/public/favicon/favicon-32x32.png +0 -0
  14. package/public/favicon/favicon-48x48-dark.png +0 -0
  15. package/public/favicon/favicon-48x48.png +0 -0
  16. package/public/favicon/favicon-dark.ico +0 -0
  17. package/public/favicon/favicon.ico +0 -0
  18. package/public/favicon/favicon.svg +16 -0
  19. package/public/favicon/manifest.webmanifest +26 -0
  20. package/public/favicon/mstile-150x150.png +0 -0
  21. package/public/favicon/safari-pinned-tab.svg +14 -15
  22. package/public/favicon/yandex-browser-50x50.png +0 -0
  23. package/public/favicon/yandex-browser-manifest.json +9 -0
  24. package/src/blocks/Article.astro +40 -0
  25. package/src/blocks/Banner.astro +48 -0
  26. package/src/blocks/Colleagues.astro +2 -1
  27. package/src/blocks/Contact.astro +61 -99
  28. package/src/blocks/Cta.astro +2 -1
  29. package/src/blocks/Excerpt.astro +14 -0
  30. package/src/blocks/Hero.astro +1 -2
  31. package/src/blocks/Intro.astro +4 -1
  32. package/src/blocks/Jobs.astro +1 -1
  33. package/src/blocks/Prices.astro +1 -1
  34. package/src/blocks/Product.astro +75 -27
  35. package/src/blocks/Reviews.astro +1 -1
  36. package/src/components/Avatar.astro +3 -20
  37. package/src/components/Badge.astro +17 -54
  38. package/src/components/Badges.astro +40 -0
  39. package/src/components/Button.astro +65 -46
  40. package/src/components/Buttons.astro +49 -0
  41. package/src/components/Card.astro +100 -178
  42. package/src/components/Cards.astro +135 -0
  43. package/src/components/Cart.astro +38 -0
  44. package/src/components/CartForm.astro +122 -0
  45. package/src/components/CartList.astro +134 -0
  46. package/src/components/CartSummary.astro +148 -0
  47. package/src/components/Channel.astro +70 -0
  48. package/src/components/Channels.astro +37 -0
  49. package/src/components/Checkbox.astro +12 -16
  50. package/src/components/Dialog.astro +10 -12
  51. package/src/components/Drawer.astro +131 -63
  52. package/src/components/Element.astro +58 -0
  53. package/src/components/Footer.astro +142 -93
  54. package/src/components/Form.astro +49 -0
  55. package/src/components/Head.astro +11 -45
  56. package/src/components/Header.astro +91 -163
  57. package/src/components/Heading.astro +18 -26
  58. package/src/components/Icon.astro +9 -9
  59. package/src/components/Image.astro +42 -152
  60. package/src/components/Input.astro +16 -28
  61. package/src/components/Label.astro +14 -17
  62. package/src/components/Link.astro +22 -44
  63. package/src/components/List.astro +12 -10
  64. package/src/components/LocaleSwitcher.astro +25 -0
  65. package/src/components/Menu.astro +57 -0
  66. package/src/components/Price.astro +34 -0
  67. package/src/components/Rating.astro +29 -25
  68. package/src/components/Search.astro +4 -7
  69. package/src/components/Section.astro +196 -234
  70. package/src/components/Select.astro +16 -34
  71. package/src/components/Sidebar.astro +85 -58
  72. package/src/components/Social.astro +36 -0
  73. package/src/components/Socials.astro +37 -0
  74. package/src/components/Switch.astro +14 -22
  75. package/src/components/Table.astro +23 -36
  76. package/src/components/Tagline.astro +11 -16
  77. package/src/components/Text.astro +17 -19
  78. package/src/components/Textarea.astro +8 -22
  79. package/src/components/ThemeSelect.astro +41 -0
  80. package/src/components/Toc.astro +59 -56
  81. package/src/components/Writeup.astro +90 -0
  82. package/src/components/docs/PropsTable.astro +229 -56
  83. package/src/components/experimental/Form.astro +36 -17
  84. package/src/components/experimental/Gallery.astro +50 -126
  85. package/src/components/experimental/Logo.astro +26 -9
  86. package/src/components/experimental/Prose.astro +41 -5
  87. package/src/components/experimental/Video.astro +1 -1
  88. package/src/components/experimental/Window.astro +3 -4
  89. package/src/components/sections.astro +28 -0
  90. package/src/content/config.ts +10 -7
  91. package/src/content/pages/base/_dialog.mdx +1 -2
  92. package/src/content/pages/base/_drawer.mdx +1 -2
  93. package/src/content/pages/base/_localeswitcher.mdx +17 -0
  94. package/src/content/pages/base/_switch.mdx +1 -2
  95. package/src/content/pages/base/badge.mdx +1 -12
  96. package/src/content/pages/base/button.mdx +1 -12
  97. package/src/content/pages/base/card.mdx +2 -29
  98. package/src/content/pages/base/checkbox.mdx +1 -2
  99. package/src/content/pages/base/icon.mdx +1 -2
  100. package/src/content/pages/base/image.mdx +42 -0
  101. package/src/content/pages/base/input.mdx +1 -12
  102. package/src/content/pages/base/rating.mdx +3 -14
  103. package/src/content/pages/base/section.mdx +2 -3
  104. package/src/content/pages/base/select.mdx +1 -20
  105. package/src/content/pages/base/table.mdx +1 -28
  106. package/src/content/pages/base/textarea.mdx +1 -16
  107. package/src/content/pages/base/theme-select.mdx +15 -0
  108. package/src/content/pages/blocks/_categories.mdx +3 -5
  109. package/src/content/pages/blocks/{footer.mdx → _footer.mdx} +2 -4
  110. package/src/content/pages/blocks/{header.mdx → _header.mdx} +2 -7
  111. package/src/content/pages/blocks/_jobs.mdx +1 -2
  112. package/src/content/pages/blocks/{prices.mdx → _prices.mdx} +5 -7
  113. package/src/content/pages/blocks/_product.mdx +74 -4
  114. package/src/content/pages/blocks/_products.mdx +1 -2
  115. package/src/content/pages/blocks/_stats.mdx +1 -1
  116. package/src/content/pages/blocks/{_banner.mdx → banner.mdx} +2 -2
  117. package/src/content/pages/blocks/colleagues.mdx +6 -8
  118. package/src/content/pages/blocks/contact.mdx +69 -0
  119. package/src/content/pages/blocks/content.mdx +1 -19
  120. package/src/content/pages/blocks/cta.mdx +2 -25
  121. package/src/content/pages/blocks/features.mdx +2 -3
  122. package/src/content/pages/blocks/hero.mdx +5 -3
  123. package/src/content/pages/blocks/intro.mdx +2 -5
  124. package/src/content/pages/blocks/posts.mdx +9 -2
  125. package/src/content/pages/blocks/reviews.mdx +23 -18
  126. package/src/content/pages/index.mdx +16 -20
  127. package/src/content/pages/layouts/_layout.mdx +14 -0
  128. package/src/content/pages/layouts/docslayout.mdx +14 -0
  129. package/src/content/pages/overview/components.mdx +75 -0
  130. package/src/content/pages/overview/content-collections.mdx +139 -0
  131. package/src/content/pages/overview/frameworks.mdx +4 -4
  132. package/src/content/pages/overview/installation.mdx +36 -3
  133. package/src/content/pages/overview/introduction.mdx +19 -9
  134. package/src/content/pages/overview/theming.mdx +53 -67
  135. package/src/content/pages/schemas/page.mdx +17 -0
  136. package/src/content/pages/schemas/preset.mdx +9 -0
  137. package/src/content/pages/showcase/anti-slip-profiles.md +5 -0
  138. package/src/content/pages/showcase/fulldev-ui.md +5 -0
  139. package/src/content/pages/showcase/lavis-detailing.md +5 -0
  140. package/src/content/pages/showcase/leren-trainingsacteren.md +5 -0
  141. package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +5 -0
  142. package/src/content/{records/record.yml → pages/showcase/record.md} +2 -0
  143. package/src/content/pages/showcase/sloepverhuur-bolsward.md +5 -0
  144. package/src/content/pages/showcase/stark-vulcanising-products.md +5 -0
  145. package/src/content/pages/showcase/the-gym-haren.md +5 -0
  146. package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +5 -0
  147. package/src/content/pages/showcase.mdx +11 -41
  148. package/src/content/pages/typography/_tagline.mdx +1 -2
  149. package/src/content/pages/typography/heading.mdx +1 -2
  150. package/src/content/pages/typography/label.mdx +1 -2
  151. package/src/content/pages/typography/link.mdx +1 -13
  152. package/src/content/pages/typography/list.mdx +1 -2
  153. package/src/content/pages/typography/text.mdx +1 -2
  154. package/src/content/{settings → presets}/base.yml +62 -45
  155. package/src/content/presets/blocks.yml +1 -0
  156. package/src/content/presets/docs.yml +6 -0
  157. package/src/css/color.css +0 -82
  158. package/src/css/custom.css +9 -56
  159. package/src/css/size.css +10 -0
  160. package/src/css/space.css +0 -8
  161. package/src/css/styles.css +0 -15
  162. package/src/env.d.ts +1 -1
  163. package/src/images/avatar-1.yml +1 -0
  164. package/src/images/favicon.svg +16 -0
  165. package/src/integration/generate-colors.ts +2 -0
  166. package/src/integration/index.ts +95 -7
  167. package/src/layouts/BlockLayout.astro +10 -15
  168. package/src/layouts/ContactLayout.astro +21 -0
  169. package/src/layouts/DocsLayout.astro +73 -0
  170. package/src/layouts/Layout.astro +114 -133
  171. package/src/layouts/OverviewLayout.astro +28 -31
  172. package/src/layouts/PostLayout.astro +12 -23
  173. package/src/layouts/ProductLayout.astro +10 -20
  174. package/src/loaders/imageLoader.ts +26 -0
  175. package/src/pages/[...page].astro +25 -21
  176. package/src/schemas/components/avatar.ts +3 -0
  177. package/src/schemas/components/avatars.ts +4 -0
  178. package/src/schemas/components/badge.ts +13 -0
  179. package/src/schemas/components/button.ts +16 -0
  180. package/src/schemas/components/buttons.ts +4 -0
  181. package/src/schemas/components/card.ts +25 -0
  182. package/src/schemas/components/cards.ts +4 -0
  183. package/src/schemas/components/channel.ts +13 -0
  184. package/src/schemas/components/channels.ts +4 -0
  185. package/src/schemas/components/footer.ts +25 -0
  186. package/src/schemas/components/header.ts +11 -0
  187. package/src/schemas/components/heading.ts +3 -0
  188. package/src/schemas/components/icon.ts +3 -0
  189. package/src/schemas/components/image.ts +25 -0
  190. package/src/schemas/components/images.ts +4 -0
  191. package/src/schemas/components/list.ts +3 -0
  192. package/src/schemas/components/logo.ts +3 -0
  193. package/src/schemas/components/menu.ts +13 -0
  194. package/src/schemas/components/price.ts +3 -0
  195. package/src/schemas/components/rating.ts +15 -0
  196. package/src/schemas/components/section.ts +15 -0
  197. package/src/schemas/components/sections.ts +3 -0
  198. package/src/schemas/components/sidebar.ts +15 -0
  199. package/src/schemas/components/social.ts +3 -0
  200. package/src/schemas/components/socials.ts +4 -0
  201. package/src/schemas/components/tagline.ts +3 -0
  202. package/src/schemas/components/text.ts +3 -0
  203. package/src/schemas/components/toc.ts +3 -0
  204. package/src/schemas/components/writeup.ts +20 -0
  205. package/src/schemas/imageSchema.ts +12 -0
  206. package/src/schemas/pageSchema.ts +91 -0
  207. package/src/schemas/presetSchema.ts +3 -0
  208. package/src/schemas/utils/component.ts +17 -0
  209. package/src/schemas/utils/navigation.ts +8 -0
  210. package/src/schemas/utils/parents.ts +3 -0
  211. package/src/schemas/{utils.ts → utils/pathSchema.ts} +2 -11
  212. package/src/stores/cart.ts +23 -0
  213. package/src/types/global-props.ts +16 -0
  214. package/src/types/virtual-modules.d.ts +5 -0
  215. package/src/utils/_archive/Childmorphic.ts +1 -1
  216. package/src/utils/_archive/mergeEntries.ts +28 -0
  217. package/src/utils/cart.ts +32 -0
  218. package/src/utils/getDeepReferenceChildren.ts +14 -0
  219. package/src/utils/getFolderChildren.ts +18 -0
  220. package/src/utils/getReferenceChildren.ts +14 -0
  221. package/src/utils/getSiblingPages.ts +14 -0
  222. package/tsconfig.json +2 -5
  223. package/public/favicon/site.webmanifest +0 -19
  224. package/public/images/avatars/1.jpeg +0 -0
  225. package/public/images/avatars/2.jpeg +0 -0
  226. package/public/images/avatars/3.jpeg +0 -0
  227. package/public/images/avatars/300/1.jpeg +0 -0
  228. package/public/images/avatars/300/2.jpeg +0 -0
  229. package/public/images/avatars/300/3.jpeg +0 -0
  230. package/public/images/avatars/300/4.jpeg +0 -0
  231. package/public/images/avatars/4.jpeg +0 -0
  232. package/public/images/avatars/5.jpeg +0 -0
  233. package/public/images/avatars/6.jpeg +0 -0
  234. package/public/images/avatars/7.jpeg +0 -0
  235. package/public/images/avatars/8.jpeg +0 -0
  236. package/public/images/blocks/colleagues.png +0 -0
  237. package/public/images/blocks/content.png +0 -0
  238. package/public/images/blocks/cta.png +0 -0
  239. package/public/images/blocks/features.png +0 -0
  240. package/public/images/blocks/footer.png +0 -0
  241. package/public/images/blocks/header.png +0 -0
  242. package/public/images/blocks/hero.png +0 -0
  243. package/public/images/blocks/intro.png +0 -0
  244. package/public/images/blocks/posts.png +0 -0
  245. package/public/images/blocks/prices.png +0 -0
  246. package/public/images/blocks/reviews.png +0 -0
  247. package/public/images/logo-placeholder.svg +0 -1
  248. package/src/components/Bento.astro +0 -43
  249. package/src/components/Block.astro +0 -157
  250. package/src/components/Blocks.astro +0 -5
  251. package/src/components/Box.astro +0 -63
  252. package/src/components/Carousel.astro +0 -54
  253. package/src/components/Column.astro +0 -73
  254. package/src/components/Grid.astro +0 -32
  255. package/src/components/Masonry.astro +0 -42
  256. package/src/components/Root.astro +0 -94
  257. package/src/components/Row.astro +0 -49
  258. package/src/components/Split.astro +0 -59
  259. package/src/components/Spread.astro +0 -46
  260. package/src/components/Stack.astro +0 -36
  261. package/src/components/Toggle.astro +0 -46
  262. package/src/components/Wrap.astro +0 -42
  263. package/src/components/docs/NavigationButtons.astro +0 -59
  264. package/src/components/experimental/Channel.astro +0 -74
  265. package/src/components/experimental/GalleryVertical.astro +0 -161
  266. package/src/components/experimental/Price.astro +0 -40
  267. package/src/content/pages/_changelog.mdx +0 -10
  268. package/src/content/pages/_segment/footer.mdx +0 -244
  269. package/src/content/pages/_segment/header.mdx +0 -210
  270. package/src/content/pages/base/_image.mdx +0 -14
  271. package/src/content/pages/base/toggle.mdx +0 -32
  272. package/src/content/pages/blocks.mdx +0 -10
  273. package/src/content/pages/overview/integration.mdx +0 -37
  274. package/src/content/pages/structure/_row.mdx +0 -23
  275. package/src/content/pages/structure/_wrap.mdx +0 -25
  276. package/src/content/pages/structure/carousel.mdx +0 -31
  277. package/src/content/pages/structure/column.mdx +0 -21
  278. package/src/content/pages/structure/grid.mdx +0 -26
  279. package/src/content/pages/structure/masonry.mdx +0 -32
  280. package/src/content/pages/structure/split.mdx +0 -21
  281. package/src/content/pages/structure/spread.mdx +0 -21
  282. package/src/content/pages/structure/stack.mdx +0 -22
  283. package/src/content/settings/components.yml +0 -29
  284. package/src/layouts/BlockOverviewLayout.astro +0 -39
  285. package/src/layouts/ComponentLayout.astro +0 -23
  286. package/src/layouts/JobsLayout.astro +0 -40
  287. package/src/layouts/PageLayout.astro +0 -32
  288. package/src/schemas/base.ts +0 -90
  289. package/src/schemas/block.ts +0 -15
  290. package/src/schemas/card.ts +0 -3
  291. package/src/schemas/page.ts +0 -43
  292. package/src/utils/mergeEntries.ts +0 -28
  293. /package/{public/showcase → src/images}/anti-slip-profiles.webp +0 -0
  294. /package/{public/images/avatars/500/1.jpeg → src/images/avatar-1.jpeg} +0 -0
  295. /package/{public/images/avatars/500/2.jpeg → src/images/avatar-2.jpeg} +0 -0
  296. /package/{public/images/avatars/500/3.jpeg → src/images/avatar-3.jpeg} +0 -0
  297. /package/{public/images/avatars/500/4.jpeg → src/images/avatar-4.jpeg} +0 -0
  298. /package/{public → src}/images/avatar-placeholder.jpg +0 -0
  299. /package/{public → src}/images/block-code.png +0 -0
  300. /package/{public → src}/images/component-code.png +0 -0
  301. /package/{public/showcase → src/images}/fulldev-ui.webp +0 -0
  302. /package/{public/showcase → src/images}/lavis-detailing.webp +0 -0
  303. /package/{public/showcase → src/images}/leren-trainingsacteren.webp +0 -0
  304. /package/{public/showcase → src/images}/miele-witgoedcenter-amsterdam.webp +0 -0
  305. /package/{public → src}/images/og-image.png +0 -0
  306. /package/{public → src}/images/placeholder-center.webp +0 -0
  307. /package/{public → src}/images/placeholder-landscape-dark.png +0 -0
  308. /package/{public → src}/images/placeholder-landscape.webp +0 -0
  309. /package/{public → src}/images/placeholder-portrait.webp +0 -0
  310. /package/{public → src}/images/placeholder-right.webp +0 -0
  311. /package/{public → src}/images/placeholder.webp +0 -0
  312. /package/{public/showcase → src/images}/sloepverhuur-bolsward.webp +0 -0
  313. /package/{public/showcase → src/images}/stark-vulcanising-products.webp +0 -0
  314. /package/{public/showcase → src/images}/the-gym-haren.webp +0 -0
  315. /package/{public/showcase → src/images}/van-dillen-antieke-bouwmaterialen.webp +0 -0
@@ -1,17 +1,15 @@
1
1
  ---
2
2
  import type { HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
3
4
  import Icon from 'fulldev-ui/components/Icon.astro'
4
5
  import Label from 'fulldev-ui/components/Label.astro'
5
- import Root from 'fulldev-ui/components/Root.astro'
6
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
7
 
7
- type Props = HTMLAttributes<'select'> & {
8
- color?: 'base' | 'brand'
9
- label?: string
10
- placeholder?: string
11
- options?: string[]
12
- value?: string
13
- radius?: 'none' | 'auto' | 'full'
14
- variant?: 'outline'
8
+ interface Props extends GlobalProps, HTMLAttributes<'select'> {
9
+ label?: string | undefined
10
+ placeholder?: string | undefined
11
+ options?: string[] | undefined
12
+ value?: string | undefined
15
13
  }
16
14
 
17
15
  const {
@@ -21,32 +19,30 @@ const {
21
19
  value,
22
20
  name,
23
21
  required,
24
- radius = 'auto',
25
22
  disabled,
26
- variant = 'outline',
23
+ onchange,
27
24
  ...rest
28
25
  } = Astro.props
29
26
  ---
30
27
 
31
- <Root
28
+ <Element
32
29
  class:list="select"
33
- {variant}
34
30
  {...rest}
35
31
  >
36
32
  <Label
37
33
  for={name}
38
- html={label}
34
+ text={label}
39
35
  />
40
- <Root
36
+ <Element
41
37
  as="select"
42
38
  if={name || options}
43
39
  id={name}
44
- {radius}
45
40
  {name}
46
41
  {required}
47
42
  {disabled}
43
+ {onchange}
48
44
  >
49
- <Root
45
+ <Element
50
46
  as="option"
51
47
  value={placeholder}
52
48
  set:html={placeholder}
@@ -55,7 +51,7 @@ const {
55
51
  />
56
52
  {
57
53
  options?.map((option: any) => (
58
- <Root
54
+ <Element
59
55
  as="option"
60
56
  selected={value === option}
61
57
  set:html={option}
@@ -64,9 +60,9 @@ const {
64
60
  ))
65
61
  }
66
62
  <slot />
67
- </Root>
63
+ </Element>
68
64
  <Icon name="chevron-down" />
69
- </Root>
65
+ </Element>
70
66
 
71
67
  <style is:global lang="scss">
72
68
  @layer fulldev {
@@ -120,26 +116,12 @@ const {
120
116
  cursor: not-allowed;
121
117
  pointer-events: none;
122
118
  }
123
-
124
- &.radius-none {
125
- border-radius: 0;
126
- }
127
-
128
- &.radius-auto {
129
- border-radius: var(--radius-1);
130
- }
131
-
132
- &.radius-full {
133
- border-radius: 9999px;
134
- }
135
119
  }
136
120
 
137
121
  option {
138
122
  color: var(--text);
139
- font-weight: var(--font-weight);
140
123
  font-size: var(--text-2);
141
124
  line-height: 1;
142
- font-family: var(--font-family);
143
125
  }
144
126
  }
145
127
  }
@@ -1,73 +1,100 @@
1
1
  ---
2
- import { getCollection } from 'astro:content'
3
- import Column from 'fulldev-ui/components/Column.astro'
4
- import Heading from 'fulldev-ui/components/Heading.astro'
5
- import Link from 'fulldev-ui/components/Link.astro'
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
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'
8
+ import Heading from './Heading.astro'
9
+ import Toc from './Toc.astro'
6
10
 
7
- const { sidebar } = Astro.props
8
- const slug = Astro.url.pathname.replace(/^\/|\/$/g, '')
9
- const url = Astro.url.href
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
+ }
20
+
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
32
  ---
11
33
 
12
- <Column
13
- as="aside"
34
+ <Element
14
35
  class:list="sidebar"
36
+ as="aside"
37
+ {size}
38
+ {...rest}
15
39
  >
16
- {
17
- sidebar?.length > 0 &&
18
- sidebar.map((item: any) => (
19
- <>
20
- <Heading
21
- level={6}
22
- set:html={item.heading}
23
- />
24
- {item.links?.map((link: any) => (
25
- <Link
26
- {...link}
27
- class="sidebar-link"
28
- color={url.endsWith(link.href) ? 'brand' : undefined}
29
- />
30
- ))}
31
- {item.folder &&
32
- (async () => {
33
- const pages = await getCollection(
34
- 'pages',
35
- (entry: any) =>
36
- entry.slug.startsWith(item.folder) &&
37
- !entry.slug.endsWith(item.folder)
38
- )
39
- return pages.map((page: any) => (
40
- <Link
41
- href={`/${page.slug}`}
42
- class="sidebar-link"
43
- color={slug === page.slug ? 'brand' : undefined}
44
- set:html={page.data.title}
45
- />
46
- ))
47
- })()}
48
- </>
49
- ))
50
- }
51
- </Column>
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 />
58
+ </Element>
59
+ </Element>
52
60
 
53
61
  <style lang="scss" is:global>
54
62
  @layer fulldev {
55
63
  .sidebar {
56
- display: none !important;
57
- box-sizing: border-box;
58
- border-right: 1px solid var(--color-a6);
59
- padding: var(--space-6) min(var(--space-5), var(--gutter)) var(--space-6)
60
- 0;
61
- height: 100vh;
62
- max-height: 100vh;
63
- overflow-y: auto;
64
-
65
- .sidebar-link {
66
- font-size: var(--text-2);
67
- }
64
+ display: none;
68
65
 
69
66
  @media (min-width: 1024px) {
70
- display: flex !important;
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));
78
+
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;
87
+ }
88
+
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
+ }
71
98
  }
72
99
  }
73
100
  }
@@ -0,0 +1,36 @@
1
+ ---
2
+ import type { ComponentProps } from 'astro/types'
3
+ import Button from 'fulldev-ui/components/Button.astro'
4
+
5
+ interface Props extends ComponentProps<typeof Button> {}
6
+
7
+ const { variant = 'secondary', icon, href } = Astro.props
8
+
9
+ const platform = () => {
10
+ if (typeof href !== 'string') return
11
+ if (href.includes('x.com')) return 'brand-x'
12
+ if (href.includes('facebook')) return 'brand-facebook'
13
+ if (href.includes('instagram')) return 'brand-instagram'
14
+ if (href.includes('linkedin')) return 'brand-linkedin'
15
+ if (href.includes('youtube')) return 'brand-youtube'
16
+ if (href.includes('tiktok')) return 'brand-tiktok'
17
+ if (href.includes('twitch')) return 'brand-twitch'
18
+ if (href.includes('github')) return 'brand-github'
19
+ if (href.includes('discord')) return 'brand-discord'
20
+ return undefined
21
+ }
22
+ ---
23
+
24
+ <Button
25
+ class:list={'social'}
26
+ icon={icon ?? platform()}
27
+ {variant}
28
+ {href}
29
+ />
30
+
31
+ <style is:global lang="scss">
32
+ .social {
33
+ padding: 0 var(--space-3);
34
+ height: calc(var(--text-2) + 2 * var(--space-3));
35
+ }
36
+ </style>
@@ -0,0 +1,37 @@
1
+ ---
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import Social from 'fulldev-ui/components/Social.astro'
5
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
6
+
7
+ interface Props extends GlobalProps, HTMLAttributes<'div'> {
8
+ variant?: ComponentProps<typeof Social>['variant']
9
+ socials?: ComponentProps<typeof Social>['href'][] | undefined
10
+ }
11
+
12
+ const { socials, variant, ...rest } = Astro.props
13
+ ---
14
+
15
+ <Element
16
+ class:list="socials"
17
+ {...rest}
18
+ >
19
+ {
20
+ socials?.map((social) => (
21
+ <Social
22
+ {variant}
23
+ href={social}
24
+ />
25
+ ))
26
+ }
27
+ </Element>
28
+
29
+ <style is:global lang="scss">
30
+ @layer fulldev {
31
+ .socials {
32
+ display: flex;
33
+ flex-wrap: wrap;
34
+ gap: var(--space-2);
35
+ }
36
+ }
37
+ </style>
@@ -1,32 +1,23 @@
1
1
  ---
2
- import type { Polymorphic } from 'astro/types'
2
+ import type { HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
3
4
  import Label from 'fulldev-ui/components/Label.astro'
4
- import Root from 'fulldev-ui/components/Root.astro'
5
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
5
6
 
6
- type Props<As extends 'div'> = Polymorphic<{ as: As }> & {
7
- color?: 'base' | 'brand'
8
- true?: string
9
- false?: string
10
- trueLabel?: string
11
- falseLabel?: string
7
+ interface Props extends GlobalProps, HTMLAttributes<'div'> {
8
+ true?: string | undefined
9
+ false?: string | undefined
10
+ trueLabel?: string | undefined
11
+ falseLabel?: string | undefined
12
12
  name: string
13
13
  checked: boolean
14
14
  }
15
15
 
16
- const {
17
- as = 'div',
18
- name,
19
- checked,
20
- trueLabel,
21
- falseLabel,
22
- ...rest
23
- } = Astro.props
16
+ const { name, checked, trueLabel, falseLabel, ...rest } = Astro.props
24
17
  ---
25
18
 
26
- <Root
27
- structure="row"
19
+ <Element
28
20
  class:list="switch"
29
- {as}
30
21
  {...rest}
31
22
  >
32
23
  <Label
@@ -49,11 +40,12 @@ const {
49
40
  for={name}
50
41
  set:html={trueLabel}
51
42
  />
52
- </Root>
43
+ </Element>
53
44
 
54
45
  <style is:global lang="scss">
55
46
  @layer fulldev {
56
47
  .switch {
48
+ display: flex;
57
49
  position: relative;
58
50
  align-items: center;
59
51
  gap: var(--space-1);
@@ -62,7 +54,7 @@ const {
62
54
  .switch-element {
63
55
  display: block;
64
56
  position: relative;
65
- transition: var(--transition);
57
+ transition: all;
66
58
  cursor: pointer;
67
59
  box-sizing: border-box;
68
60
  border: 1px solid var(--border);
@@ -84,7 +76,7 @@ const {
84
76
 
85
77
  .checkmark {
86
78
  transform: 0%;
87
- transition: var(--transition);
79
+ transition: all;
88
80
  border-radius: 999px;
89
81
  background-color: var(--base-1);
90
82
  width: 50%;
@@ -1,50 +1,45 @@
1
1
  ---
2
2
  import type { HTMLAttributes } from 'astro/types'
3
- import Root from 'fulldev-ui/components/Root.astro'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
5
 
5
- type Props = HTMLAttributes<'table'> & {
6
- color?: 'base' | 'brand'
7
- size?: 'sm' | 'md' | 'lg'
8
- header?: string[]
9
- body?: string[][]
10
- footer?: string[]
11
- radius?: 'none' | 'auto'
6
+ interface Props extends GlobalProps, HTMLAttributes<'table'> {
7
+ header?: string[] | undefined
8
+ body?: string[][] | undefined
9
+ footer?: string[] | undefined
12
10
  }
13
11
 
14
- const { header, body, footer, radius = 'auto', ...rest } = Astro.props
12
+ const { header, body, footer, ...rest } = Astro.props
15
13
  ---
16
14
 
17
- <Root
15
+ <Element
18
16
  class:list="table"
19
17
  {...rest}
20
18
  >
21
- <Root
22
- as="table"
23
- {radius}
24
- >
25
- <Root as="thead">
26
- <Root as="tr">
19
+ <Element as="table">
20
+ <Element as="thead">
21
+ <Element as="tr">
27
22
  {header?.map((cell) => <th>{cell}</th>)}
28
- </Root>
29
- </Root>
30
- <Root as="tbody">
23
+ </Element>
24
+ </Element>
25
+ <Element as="tbody">
31
26
  {
32
27
  body?.map((row: string[]) => (
33
- <Root as="tr">
28
+ <Element as="tr">
34
29
  {row?.map((cell) => (
35
30
  <td>{cell}</td>
36
31
  ))}
37
- </Root>
32
+ </Element>
38
33
  ))
39
34
  }
40
- </Root>
41
- <Root as="tfoot">
42
- <Root as="tr">
35
+ </Element>
36
+ <Element as="tfoot">
37
+ <Element as="tr">
43
38
  {footer?.map((cell) => <td>{cell}</td>)}
44
- </Root>
45
- </Root>
46
- </Root>
47
- </Root>
39
+ </Element>
40
+ </Element>
41
+ </Element>
42
+ </Element>
48
43
 
49
44
  <style is:global lang="scss">
50
45
  @layer fulldev {
@@ -61,14 +56,6 @@ const { header, body, footer, radius = 'auto', ...rest } = Astro.props
61
56
  caption-side: bottom;
62
57
  white-space: nowrap;
63
58
 
64
- &.radius-none {
65
- border-radius: 0;
66
- }
67
-
68
- &.radius-auto {
69
- border-radius: var(--radius-1);
70
- }
71
-
72
59
  thead {
73
60
  background-color: var(--color-3);
74
61
 
@@ -1,28 +1,23 @@
1
1
  ---
2
- import type { HTMLTag, Polymorphic } from 'astro/types'
3
- import Root from 'fulldev-ui/components/Root.astro'
2
+ import type { HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
5
 
5
- type Props<As extends HTMLTag = 'span'> = Polymorphic<{ as: As }> & {
6
- size?: 'sm' | 'md' | 'lg'
7
- color?: 'base' | 'brand'
8
- contrast?: boolean
9
- html?: string
10
- text?: string
6
+ interface Props extends GlobalProps, HTMLAttributes<'span'> {
7
+ text?: string | undefined
11
8
  }
12
9
 
13
- const { as = 'span', html, text, ...rest } = Astro.props
10
+ const { text, ...rest } = Astro.props
14
11
  ---
15
12
 
16
- <Root
13
+ <Element
17
14
  class:list="tagline"
18
- {as}
15
+ as="span"
19
16
  {...rest}
20
17
  >
21
- <slot>
22
- <Fragment set:html={html} />
23
- <Fragment set:text={text} />
24
- </slot>
25
- </Root>
18
+ <slot />
19
+ <Fragment set:html={text} />
20
+ </Element>
26
21
 
27
22
  <style is:global lang="scss">
28
23
  @layer fulldev {
@@ -1,31 +1,29 @@
1
1
  ---
2
- import type { HTMLTag, Polymorphic } from 'astro/types'
3
- import Root from 'fulldev-ui/components/Root.astro'
2
+ import type { HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
4
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
4
5
 
5
- type Props<As extends HTMLTag = 'p'> = Polymorphic<{ as: As }> & {
6
- size?: 'sm' | 'md' | 'lg'
7
- color?: 'base' | 'brand'
8
- contrast?: boolean
9
- lead?: boolean
10
- html?: string
11
- text?: string
6
+ interface Props extends GlobalProps, HTMLAttributes<'p'> {
7
+ size?: 'sm' | 'md' | 'lg' | undefined
8
+ color?: 'base' | 'brand' | undefined
9
+ theme?: 'light' | 'dark' | undefined
10
+ contrast?: boolean | undefined
11
+ lead?: boolean | undefined
12
+ text?: string | undefined
12
13
  }
13
14
 
14
- const { as = 'p', color = 'base', html, text, ...rest } = Astro.props
15
+ const { color = 'base', text, ...rest } = Astro.props
15
16
  ---
16
17
 
17
- <Root
18
+ <Element
18
19
  class:list="text"
19
- {as}
20
- {html}
20
+ as="p"
21
21
  {color}
22
22
  {...rest}
23
23
  >
24
- <slot>
25
- <Fragment set:html={html} />
26
- <Fragment set:text={text} />
27
- </slot>
28
- </Root>
24
+ <slot />
25
+ <Fragment set:html={text} />
26
+ </Element>
29
27
 
30
28
  <style is:global lang="scss">
31
29
  @layer fulldev {
@@ -33,12 +31,12 @@ const { as = 'p', color = 'base', html, text, ...rest } = Astro.props
33
31
  margin: 0;
34
32
  max-width: calc(var(--space-4) * 44);
35
33
  color: var(--color-11);
36
- font-weight: var(--font-weight);
37
34
  font-size: var(--text-3);
38
35
  line-height: 1.625;
39
36
 
40
37
  &.lead {
41
38
  font-size: var(--text-4);
39
+ text-wrap: balance;
42
40
  }
43
41
  }
44
42
  }
@@ -1,20 +1,16 @@
1
1
  ---
2
- import type { HTMLAttributes } from 'astro/types'
2
+ import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
+ import Element from 'fulldev-ui/components/Element.astro'
3
4
  import Label from 'fulldev-ui/components/Label.astro'
4
- import Root from 'fulldev-ui/components/Root.astro'
5
+ import type { GlobalProps } from 'fulldev-ui/types/global-props'
5
6
 
6
- type Props = HTMLAttributes<'textarea'> & {
7
- radius?: 'none' | 'auto'
8
- color?: 'base' | 'brand'
9
- variant?: 'outline'
10
- label?: string
7
+ interface Props extends GlobalProps, HTMLAttributes<'textarea'> {
8
+ label?: ComponentProps<typeof Label>['text']
11
9
  }
12
10
 
13
11
  const {
14
12
  placeholder,
15
13
  name = placeholder,
16
- variant = 'outline',
17
- radius = 'auto',
18
14
  label,
19
15
  rows,
20
16
  value,
@@ -24,7 +20,7 @@ const {
24
20
  } = Astro.props
25
21
  ---
26
22
 
27
- <Root
23
+ <Element
28
24
  class:list="textarea"
29
25
  {...rest}
30
26
  >
@@ -32,20 +28,18 @@ const {
32
28
  for={name}
33
29
  set:html={label}
34
30
  />
35
- <Root
31
+ <Element
36
32
  as="textarea"
37
33
  if={name}
38
34
  id={name}
39
35
  {name}
40
- {variant}
41
36
  {placeholder}
42
37
  {value}
43
38
  {disabled}
44
39
  {required}
45
40
  {rows}
46
- {radius}
47
41
  />
48
- </Root>
42
+ </Element>
49
43
 
50
44
  <style is:global lang="scss">
51
45
  @layer fulldev {
@@ -74,14 +68,6 @@ const {
74
68
  font-size: var(--text-2);
75
69
  line-height: 1.25;
76
70
 
77
- &.radius-none {
78
- border-radius: 0;
79
- }
80
-
81
- &.radius-auto {
82
- border-radius: var(--radius-1);
83
- }
84
-
85
71
  &::placeholder {
86
72
  color: var(--color-11);
87
73
  }