fulldev-ui 0.5.0-beta.8 → 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 -104
  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 -106
  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,59 +1,123 @@
1
1
  ---
2
- import Dialog from 'fulldev-ui/components/Dialog.astro'
2
+ import { getCollection } from 'astro:content'
3
+ import { getHref } from 'fulldev-ui/utils/getHref'
4
+ import Button from './Button.astro'
5
+ import Element from './Element.astro'
6
+ import Heading from './Heading.astro'
7
+ import Input from './Input.astro'
8
+ import Paragraph from './Paragraph.astro'
3
9
 
4
- const { variant = 'secondary', ...rest } = Astro.props
10
+ const pages = await getCollection('pages')
11
+ const products = await getCollection('products')
12
+ const categories = await getCollection('categories')
13
+ const posts = await getCollection('posts')
14
+ const docs = await getCollection('docs')
15
+ const entries = [...pages, ...categories, ...products, ...posts, ...docs]
5
16
  ---
6
17
 
7
- <Dialog
8
- class:list="search"
9
- id="search"
18
+ <script>
19
+ document.addEventListener('astro:page-load', () => {
20
+ const input = document.querySelector('.search-input')
21
+ const items = document.querySelectorAll('.search-item')
22
+
23
+ input?.addEventListener('input', (e) => {
24
+ if (!(e.target instanceof HTMLInputElement)) return
25
+ const value = e.target.value.toLowerCase()
26
+ items.forEach((item) => {
27
+ if (!(item instanceof HTMLElement)) return
28
+
29
+ const title =
30
+ item.querySelector('.heading')?.textContent?.toLowerCase() || ''
31
+ const description =
32
+ item.querySelector('.paragraph')?.textContent?.toLowerCase() || ''
33
+
34
+ const isVisible = title.includes(value) || description.includes(value)
35
+ item.classList.toggle('hide', !isVisible)
36
+ })
37
+ })
38
+ })
39
+ </script>
40
+
41
+ <Button
42
+ class:list="search-button"
43
+ variant={Astro.props.variant}
44
+ size="sm"
10
45
  icon="search"
11
- {variant}
12
- {...rest}
46
+ onclick={`document.getElementById('search').showModal()`}
13
47
  />
14
48
 
15
- <style is:global lang="scss">
16
- :root {
17
- --pagefind-ui-primary: var(--brand-11);
18
- --pagefind-ui-text: var(--base-12);
19
- --pagefind-ui-background: var(--base-2);
20
- --pagefind-ui-border: var(--base-6);
21
- --pagefind-ui-tag: var(--base-6);
22
- }
49
+ <dialog
50
+ class="search"
51
+ id="search"
52
+ onclick={`event.target === this && this.close()`}
53
+ >
54
+ <Element class:list="search-container">
55
+ <Element class:list="search-content">
56
+ <Input
57
+ class:list="search-input"
58
+ placeholder="Search"
59
+ icon="search"
60
+ />
61
+ <Element class:list="search-list">
62
+ {
63
+ entries.map(({ collection, slug, data }) => (
64
+ <Element
65
+ as="a"
66
+ href={getHref(slug)}
67
+ class="search-item hide"
68
+ >
69
+ <Heading
70
+ text={data.title}
71
+ as="h6"
72
+ size="md"
73
+ />
74
+ <Paragraph
75
+ set:text={'description' in data ? data.description : undefined}
76
+ />
77
+ </Element>
78
+ ))
79
+ }
80
+ </Element>
81
+ </Element>
82
+ </Element>
83
+ </dialog>
23
84
 
24
- @media (max-width: 1023.999px) {
25
- .search,
26
- #search,
27
- #search-button {
28
- display: none !important;
29
- }
30
- }
85
+ <style is:global>
86
+ @layer fulldev {
87
+ .search {
88
+ @apply container h-full w-full max-w-screen-md rounded-lg !border-none bg-transparent py-24 outline-none backdrop:bg-black/50;
31
89
 
32
- .dialog div {
33
- width: 100%;
34
- }
90
+ &:is(.dark &) {
91
+ color-scheme: dark;
92
+ }
35
93
 
36
- .pagefind-ui__search-input {
37
- outline: none !important;
38
- border: 1px solid var(--base-7);
39
- color: var(--base-11);
94
+ .search-container {
95
+ @apply w-full overflow-hidden rounded-lg border bg-background shadow-md;
96
+ }
40
97
 
41
- &::placeholder {
42
- color: var(--base-11);
43
- }
98
+ .search-content {
99
+ @apply max-h-[400px] w-full overflow-y-auto;
100
+ }
44
101
 
45
- &:hover {
46
- outline: none;
47
- }
102
+ .input {
103
+ @apply m-5;
104
+ }
48
105
 
49
- &:focus {
50
- outline: none;
51
- box-shadow: inset 0 0 0 2px var(--base-8);
52
- border-color: var(--base-8);
53
- }
54
- }
106
+ .search-list {
107
+ @apply flex h-full w-full shrink grow-0 flex-col;
108
+ }
109
+
110
+ .search-item {
111
+ @apply border-t p-5 transition-colors hover:bg-accent;
55
112
 
56
- .pagefind-ui__search-clear {
57
- background: transparent !important;
113
+ &.hide {
114
+ @apply hidden;
115
+ }
116
+ }
117
+
118
+ .paragraph {
119
+ @apply mt-2 truncate text-sm text-muted-foreground;
120
+ }
121
+ }
58
122
  }
59
123
  </style>
@@ -1,255 +1,26 @@
1
1
  ---
2
- import type { ComponentProps, HTMLAttributes } from 'astro/types'
3
- import Button from 'fulldev-ui/components/Button.astro'
4
- import Buttons from 'fulldev-ui/components/Buttons.astro'
5
- import type Card from 'fulldev-ui/components/Card.astro'
6
- import Cards from 'fulldev-ui/components/Cards.astro'
2
+ import type { HTMLAttributes, HTMLTag } from 'astro/types'
7
3
  import Element from 'fulldev-ui/components/Element.astro'
8
- import Image from 'fulldev-ui/components/Image.astro'
9
- import Writeup from 'fulldev-ui/components/Writeup.astro'
10
- import type { GlobalProps } from 'fulldev-ui/types/global-props.js'
11
4
 
12
- interface Props
13
- extends GlobalProps,
14
- ComponentProps<typeof Writeup>,
15
- HTMLAttributes<'section'> {
16
- image?: ComponentProps<typeof Image>
17
- position?: ComponentProps<typeof Image>['position']
18
- buttons?: ComponentProps<typeof Buttons>['buttons']
19
- button?: ComponentProps<typeof Button> | undefined
20
- variant?: ComponentProps<typeof Button>['variant']
21
- cards?: ComponentProps<typeof Cards>['cards']
22
- panel?: ComponentProps<typeof Card>['panel']
23
- component?: string
24
- structure?:
25
- | ComponentProps<typeof Cards>['structure']
26
- | 'column'
27
- | 'split'
28
- | 'spread'
5
+ interface Props extends HTMLAttributes<'section'> {
6
+ as?: HTMLTag
29
7
  }
30
8
 
31
- const {
32
- cards,
33
- structure = cards ? 'grid' : 'column',
34
- align = 'start',
35
- level = 2,
36
- size = 'md',
37
- badge,
38
- tagline,
39
- rating,
40
- heading,
41
- text,
42
- list,
43
- button,
44
- buttons,
45
- variant,
46
- panel,
47
- image,
48
- theme,
49
- position,
50
- ...rest
51
- } = Astro.props
52
-
53
- const { component, ...props } = Astro.props
54
-
55
- const allComponents = {
56
- ...import.meta.glob('/src/**/*.astro'),
57
- ...import.meta.glob('../../**/*.astro'),
58
- }
59
-
60
- const componentPath = Object.keys(allComponents).find(
61
- (path) => path.split('/').pop()?.split('.')[0] === component
62
- )
63
-
64
- const Component =
65
- componentPath && (await (allComponents[componentPath] as any)()).default
9
+ const { as = 'section', ...rest } = Astro.props
66
10
  ---
67
11
 
68
- {
69
- Component ? (
70
- <Component {...props} />
71
- ) : (
72
- <Element
73
- class:list="section"
74
- as="section"
75
- panel={!cards && panel}
76
- theme={cards ? undefined : theme}
77
- structure={
78
- structure === 'grid' ||
79
- structure === 'carousel' ||
80
- structure === 'stack'
81
- ? text
82
- ? 'column'
83
- : 'spread'
84
- : structure
85
- }
86
- {align}
87
- {size}
88
- {...rest}
89
- >
90
- <Element class:list="segment">
91
- <slot name="segment">
92
- <slot name="writeup">
93
- <Writeup
94
- {level}
95
- {rating}
96
- {badge}
97
- {tagline}
98
- {heading}
99
- {text}
100
- {list}
101
- />
102
- </slot>
103
- <slot name="buttons">
104
- <Button
105
- {variant}
106
- {...button}
107
- />
108
- <Buttons
109
- {variant}
110
- {buttons}
111
- />
112
- </slot>
113
- </slot>
114
- </Element>
115
- <slot>
116
- <Cards
117
- level={(level + 2) as any}
118
- size={size === 'lg' ? 'md' : 'sm'}
119
- structure={
120
- structure === 'grid' ||
121
- structure === 'masonry' ||
122
- structure === 'stack' ||
123
- structure === 'carousel' ||
124
- structure === 'bento'
125
- ? structure
126
- : undefined
127
- }
128
- position={cards ? position : undefined}
129
- {theme}
130
- {cards}
131
- {panel}
132
- {position}
133
- />
134
- <Image
135
- position={cards ? undefined : position}
136
- {...image}
137
- />
138
- </slot>
139
- </Element>
140
- )
141
- }
12
+ <Element
13
+ class:list="section"
14
+ {as}
15
+ {...rest}
16
+ >
17
+ <slot />
18
+ </Element>
142
19
 
143
- <style is:global lang="scss">
20
+ <style is:global>
144
21
  @layer fulldev {
145
22
  .section {
146
- --inset-top: 0px;
147
- --inset-left: var(--gutter);
148
- --inset-right: var(--gutter);
149
- --inset-bottom: var(--spacer);
150
-
151
- display: flex;
152
- position: relative;
153
- flex-direction: column;
154
- align-items: flex-start;
155
- gap: var(--space-6) var(--space-7);
156
- padding: var(--spacer) var(--gutter);
157
-
158
- .segment {
159
- display: flex;
160
- flex-direction: column;
161
- align-items: flex-start;
162
- gap: var(--space-5);
163
- z-index: 1;
164
- }
165
-
166
- &.panel {
167
- margin: var(--spacer) var(--gutter);
168
- border: 1px solid var(--base-a6);
169
- border-radius: var(--radius-2);
170
- background-color: var(--base-2);
171
- padding: min(var(--gutter), var(--spacer));
172
- overflow: hidden;
173
- }
174
-
175
- &.reverse {
176
- --inset-top: var(--spacer);
177
- --inset-left: var(--gutter);
178
- --inset-right: var(--gutter);
179
- --inset-bottom: 0px;
180
-
181
- &:not(.structure-split) {
182
- .segment {
183
- order: 999;
184
- }
185
- }
186
-
187
- @media (min-width: 1024px) {
188
- .segment {
189
- order: 999;
190
- }
191
- }
192
- }
193
-
194
- &.structure-column {
195
- display: flex;
196
- flex-direction: column;
197
-
198
- &.align-center {
199
- align-items: center;
200
-
201
- .segment {
202
- align-items: center;
203
- text-align: center;
204
- }
205
- }
206
- }
207
-
208
- &.structure-split {
209
- display: grid;
210
- grid-template-columns: 1fr;
211
- width: 100%;
212
-
213
- @media (min-width: 1024px) {
214
- --inset-top: var(--spacer);
215
- --inset-left: 0px;
216
- --inset-right: var(--gutter);
217
- --inset-bottom: var(--spacer);
218
-
219
- grid-auto-columns: 1fr;
220
- grid-auto-flow: column;
221
-
222
- &.reverse {
223
- --inset-right: 0px;
224
- --inset-left: var(--gutter);
225
- }
226
- }
227
-
228
- &.align-center {
229
- align-items: center;
230
- }
231
- }
232
-
233
- &.structure-spread {
234
- display: flex;
235
- flex-direction: column;
236
-
237
- .segment {
238
- flex-direction: row;
239
- justify-content: space-between;
240
- width: 100%;
241
- }
242
-
243
- &.align-center {
244
- .segment {
245
- align-items: center;
246
-
247
- .writeup {
248
- align-items: flex-start;
249
- }
250
- }
251
- }
252
- }
23
+ @apply relative w-full bg-background py-16 first:py-8;
253
24
  }
254
25
  }
255
26
  </style>
@@ -15,34 +15,37 @@ interface Props extends GlobalProps, HTMLAttributes<'select'> {
15
15
  const {
16
16
  label,
17
17
  placeholder,
18
+ name = label || placeholder,
19
+ id = name,
20
+ size = 'md',
18
21
  options,
19
22
  value,
20
- name,
21
- required,
22
- disabled,
23
- onchange,
24
23
  ...rest
25
24
  } = Astro.props
26
25
  ---
27
26
 
28
27
  <Element
28
+ if={options}
29
29
  class:list="select"
30
- {...rest}
30
+ as="label"
31
+ for={id}
32
+ {size}
31
33
  >
32
34
  <Label
33
35
  for={name}
34
36
  text={label}
35
37
  />
38
+ <Icon name="chevron-down" />
36
39
  <Element
40
+ class:list="select-select"
37
41
  as="select"
38
- if={name || options}
39
- id={name}
42
+ if={id}
43
+ {id}
40
44
  {name}
41
- {required}
42
- {disabled}
43
- {onchange}
45
+ {...rest}
44
46
  >
45
47
  <Element
48
+ class:list="select-option"
46
49
  as="option"
47
50
  value={placeholder}
48
51
  set:html={placeholder}
@@ -52,6 +55,7 @@ const {
52
55
  {
53
56
  options?.map((option: any) => (
54
57
  <Element
58
+ class:list="select-option"
55
59
  as="option"
56
60
  selected={value === option}
57
61
  set:html={option}
@@ -61,67 +65,53 @@ const {
61
65
  }
62
66
  <slot />
63
67
  </Element>
64
- <Icon name="chevron-down" />
65
68
  </Element>
66
69
 
67
- <style is:global lang="scss">
70
+ <style is:global>
68
71
  @layer fulldev {
69
72
  .select {
70
- display: flex;
71
- position: relative;
72
- flex-direction: column;
73
- gap: var(--space-1);
74
- width: 100%;
73
+ @apply relative flex flex-col gap-1.5;
75
74
 
76
75
  .icon {
77
- position: absolute;
78
- right: var(--space-4);
79
- bottom: var(--space-4);
80
- width: var(--text-2);
81
- height: var(--text-2);
82
- pointer-events: none;
76
+ @apply pointer-events-none absolute;
83
77
  }
84
78
 
85
- select {
86
- display: flex;
87
- position: relative;
88
- align-items: center;
89
- appearance: none;
90
- appearance: none;
91
- outline: none;
92
- border: 1px solid var(--color-6);
93
- border-radius: var(--radius-1);
94
- background-color: transparent;
95
- padding-right: calc(var(--text-2) + 2 * var(--space-4));
96
- padding-left: var(--space-4);
97
- width: 100%;
98
- min-width: var(--space-4);
99
- height: calc(var(--text-2) + 2 * var(--space-4));
100
- color: var(--color-11);
101
- font-size: var(--text-2);
102
- line-height: 1.25;
79
+ .select-select {
80
+ @apply flex w-full appearance-none rounded-md border border-input bg-background pr-10 text-sm ring-offset-background;
81
+ @apply file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground;
82
+ @apply focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2;
83
+ @apply disabled:pointer-events-none disabled:opacity-50;
84
+ @apply [&[readonly]]:pointer-events-none;
85
+ }
103
86
 
104
- &:hover {
105
- outline: none;
87
+ &.size-sm {
88
+ .select-select {
89
+ @apply h-9 px-2.5 py-1.5 pr-9 text-xs;
106
90
  }
107
91
 
108
- &:focus {
109
- outline: none;
110
- box-shadow: inset 0 0 0 2px var(--color-7);
111
- border-color: var(--color-7);
92
+ .icon {
93
+ @apply bottom-2 right-2;
112
94
  }
95
+ }
113
96
 
114
- &:disabled {
115
- opacity: 50%;
116
- cursor: not-allowed;
117
- pointer-events: none;
97
+ &.size-md {
98
+ .select-select {
99
+ @apply h-10 px-3 py-2 pr-10 text-sm;
100
+ }
101
+
102
+ .icon {
103
+ @apply bottom-2.5 right-2.5;
118
104
  }
119
105
  }
120
106
 
121
- option {
122
- color: var(--text);
123
- font-size: var(--text-2);
124
- line-height: 1;
107
+ &.size-lg {
108
+ .select-select {
109
+ @apply h-12 px-3.5 py-2.5 pr-11 text-base;
110
+ }
111
+
112
+ .icon {
113
+ @apply bottom-3.5 right-3.5;
114
+ }
125
115
  }
126
116
  }
127
117
  }