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,275 +1,49 @@
1
1
  ---
2
- import Table from 'fulldev-ui/components/Table.astro'
3
- import { readFileSync } from 'node:fs'
4
- import { pascal } from 'radash'
5
-
6
- const slug = Astro.params.page || 'index'
7
- const componentName = pascal(slug)
8
-
9
- const allComponents = import.meta.glob('/src/**/*.astro', { eager: true })
10
- const foundComponent = Object.entries(allComponents).find(
11
- ([key]) => key.split('/').pop() === `${componentName}.astro`
12
- )?.[1] as any
13
- const componentFileContent =
14
- (foundComponent && readFileSync(foundComponent.file, 'utf-8')) || ''
15
-
16
- interface Prop {
17
- name: string
18
- type: string
19
- }
20
-
21
- // Regular expression to match the Props interface or type
22
- const staticProps = /(?:interface|type)\s+Props[\s\S]*?{([\s\S]*?)}/
23
-
24
- // Function to extract props from the component file
25
- const extractProps = (content: string): Prop[] => {
26
- const props: Prop[] = []
27
-
28
- // Extract static props from Props interface or type
29
- const staticPropsMatch = content.match(staticProps)
30
- if (staticPropsMatch && staticPropsMatch[1]) {
31
- const propsContent = staticPropsMatch[1]
32
- const propLines = propsContent.split('\n')
33
-
34
- let currentProp: Prop | null = null
35
-
36
- propLines.forEach((line) => {
37
- const trimmedLine = line.trim()
38
- if (trimmedLine === '') return
39
-
40
- // Match prop name and type
41
- const match = trimmedLine.match(/^(\w+)(\??):(.*)/)
42
- if (match && match[1] && match[3]) {
43
- if (currentProp) props.push(currentProp)
44
- currentProp = {
45
- name: match[1],
46
- type: match[3].trim(),
47
- }
48
- } else if (currentProp) {
49
- // Continue adding to type if it spans multiple lines
50
- currentProp.type += ' ' + trimmedLine
51
- }
52
- })
53
-
54
- if (currentProp) props.push(currentProp)
55
- }
56
-
57
- // Extract props from type intersections
58
- const intersectionProps = content.match(
59
- /Props(?:<[^>]+>)?\s*=\s*([\s\S]*?)(?:$|\n\n)/
60
- )
61
- if (intersectionProps && intersectionProps[1]) {
62
- const intersectionContent = intersectionProps[1]
63
- let currentProp: Prop | null = null
64
- const lines = intersectionContent.split('\n')
65
-
66
- lines.forEach((line) => {
67
- const trimmedLine = line.trim()
68
- if (trimmedLine === '') return
69
-
70
- // Match prop name and type
71
- const match = trimmedLine.match(/(\w+)(\??):(.*)/)
72
- if (match && match[1] && match[3]) {
73
- if (currentProp) props.push(currentProp)
74
- currentProp = {
75
- name: match[1],
76
- type: match[3].trim(),
77
- }
78
- } else if (currentProp) {
79
- // Continue adding to type if it spans multiple lines
80
- currentProp.type += ' ' + trimmedLine
81
- }
82
- })
83
-
84
- if (currentProp) props.push(currentProp)
85
- }
86
-
87
- // Clean up the type of the last prop
88
- if (props.length > 0) {
89
- const lastProp = props[props.length - 1]
90
- if (lastProp) {
91
- lastProp.type = lastProp.type.replace(/\s*}\s*$/, '')
92
- }
93
- }
94
-
95
- // Filter out 'as' prop and props starting with underscore
96
- return props.filter(
97
- (prop) => prop.name !== 'as' && !prop.name.startsWith('_')
98
- )
99
- }
100
-
101
- // Function to extract default prop values from Astro.props
102
- const extractDefaultProps = (content: string): Record<string, string> => {
103
- const defaultPropsMatch = content.match(
104
- /const\s*{[\s\S]*?}\s*=\s*Astro\.props/
105
- )
106
- return defaultPropsMatch
107
- ? [
108
- ...defaultPropsMatch[0].matchAll(
109
- /(\w+)\s*=\s*('[^']*'|"[^"]*"|[^,\n]+)/g
110
- ),
111
- ].reduce(
112
- (acc, match) => {
113
- const [, name, value] = match
114
- if (name && name !== 'as' && value !== undefined) {
115
- acc[name] =
116
- value.startsWith("'") || value.startsWith('"')
117
- ? value.slice(1, -1)
118
- : value
119
- }
120
- return acc
121
- },
122
- {} as Record<string, string>
123
- )
124
- : {}
125
- }
126
-
127
- // Function to extract the default 'As' prop value from the interface or type
128
- const extractAsDefault = (content: string): string => {
129
- const asTypeMatch = content.match(/type Props<As extends ([^>]+)>/)
130
- if (asTypeMatch && asTypeMatch[1]) {
131
- return asTypeMatch[1].trim().replace(/['"]/g, '')
132
- }
133
-
134
- const asInterfaceMatch = content.match(/interface Props<As extends ([^>]+)>/)
135
- if (asInterfaceMatch && asInterfaceMatch[1]) {
136
- return asInterfaceMatch[1].trim().replace(/['"]/g, '')
137
- }
138
-
139
- return ''
140
- }
141
-
142
- const parsedProps = extractProps(componentFileContent)
143
- const parsedAstroProps = extractDefaultProps(componentFileContent)
144
- const asDefault = extractAsDefault(componentFileContent)
145
-
146
- // Function to get the default value for a prop
147
- const getDefaultValue = (name: string): string => {
148
- if (name in parsedAstroProps) {
149
- return parsedAstroProps[name] || '-'
150
- }
151
-
152
- return '-'
153
- }
154
-
155
- // Check if the component extends Element.astro
156
- const extendsElement = componentFileContent.includes('GlobalProps')
157
-
158
- // Check if the component extends Writeup.astro
159
- const extendsWriteup = componentFileContent.includes(
160
- 'ComponentProps<typeof Writeup>'
161
- )
162
-
163
- // Prepare the table body data
164
- const tableBody = new Map()
165
-
166
- // Add component-specific props
167
- parsedProps.forEach((item) => {
168
- tableBody.set(item.name, [
169
- item.name,
170
- item.type.replace(/\s*\|?\s*(undefined|null)/, '').trim(),
171
- getDefaultValue(item.name),
172
- ])
173
- })
174
-
175
- // Add Element props if the component extends Element.astro
176
- if (extendsElement) {
177
- const elementProps = extractProps(
178
- readFileSync('src/components/Element.astro', 'utf-8')
179
- )
180
- elementProps
181
- .filter((item) => item.name !== '[key: string | number | symbol]')
182
- .forEach((item) => {
183
- if (!tableBody.has(item.name)) {
184
- let type = item.type
185
- .replace(/\s*\|?\s*(undefined|null)/, '')
186
- .trim()
187
- .replace(/\s*\|\s*any/, '')
188
- .replace(/\s*\[key: string \| number \| symbol\]: any/, '')
189
-
190
- // Remove [key: string | number | symbol]: any from the last prop
191
- if (item === elementProps[elementProps.length - 1]) {
192
- type = type.replace(/\s*\[key: string \| number \| symbol\]: any/, '')
193
- }
194
-
195
- if (item.name === 'size') {
196
- type = "'sm' | 'md' | 'lg'"
197
- } else if (item.name === 'color') {
198
- type = "'base' | 'brand'"
199
- }
200
-
201
- tableBody.set(item.name, [item.name, type, getDefaultValue(item.name)])
202
- }
203
- })
204
- }
205
-
206
- // Add Writeup props if the component extends Writeup.astro
207
- if (extendsWriteup) {
208
- const writeupProps = extractProps(
209
- readFileSync('src/components/Writeup.astro', 'utf-8')
210
- )
211
- writeupProps
212
- .filter((item) => item.name !== '[key: string | number | symbol]')
213
- .forEach((item) => {
214
- if (!tableBody.has(item.name)) {
215
- let type = item.type
216
- .replace(/\s*\|?\s*(undefined|null)/, '')
217
- .trim()
218
- .replace(/\s*\|\s*any/, '')
219
- .replace(/\s*\[key: string \| number \| symbol\]: any/, '')
220
-
221
- // Remove [key: string | number | symbol]: any from the last prop
222
- if (item === writeupProps[writeupProps.length - 1]) {
223
- type = type.replace(/\s*\[key: string \| number \| symbol\]: any/, '')
224
- }
225
-
226
- tableBody.set(item.name, [item.name, type, getDefaultValue(item.name)])
227
- }
228
- })
229
- }
230
-
231
- // Add 'as' prop only if asDefault is not empty
232
- if (asDefault) {
233
- tableBody.set('as', ['as', 'HTMLTag', asDefault])
234
- }
235
-
236
- // Check if the component is polymorphic
237
- const isPolymorphic = componentFileContent.includes('Polymorphic<')
238
-
239
- // Extract HTMLAttributes from the component
240
- const htmlAttributesMatch = componentFileContent.match(
241
- /HTMLAttributes<'(\w+)'>/
242
- )
243
- let htmlElement = htmlAttributesMatch ? htmlAttributesMatch[1] : ''
244
-
245
- // Special handling for List and Button components
246
- if (componentName === 'List') {
247
- htmlElement = "'ul' | 'ol'"
248
- } else if (componentName === 'Button') {
249
- htmlElement = "'button' | 'a' | 'label'"
250
- }
251
-
252
- // Add HTML Attributes row
253
- if (isPolymorphic && asDefault) {
254
- tableBody.set('HTML Attributes', [
255
- 'HTML Attributes',
256
- `Polymorphic<${asDefault}>`,
257
- '-',
258
- ])
259
- } else if (htmlElement) {
260
- tableBody.set('HTML Attributes', ['HTML Attributes', `${htmlElement}`, '-'])
261
- }
2
+ // const { schema } = Astro.props
3
+
4
+ // import Table from 'fulldev-ui/components/Table.astro'
5
+ // import { zodToJsonSchema } from 'zod-to-json-schema'
6
+
7
+ // const slug = Astro.params.page?.split('/').pop() || ''
8
+
9
+ // const allSchemas = import.meta.glob('/src/schemas/**/*.ts', {
10
+ // eager: true,
11
+ // })
12
+
13
+ // const schemaName = schema ?? slug
14
+ // const foundSchema = Object.entries(allSchemas).find(([key]) =>
15
+ // key.toLowerCase().includes(`/${schemaName.toLowerCase()}.ts`)
16
+ // )?.[1] as any
17
+
18
+ // const jsonSchema = zodToJsonSchema(foundSchema?.default, {
19
+ // pipeStrategy: 'output',
20
+ // }) as { properties?: Record<string, any> }
21
+
22
+ // const properties = jsonSchema.properties || {}
23
+
24
+ // const tableBody = Object.entries(properties).map(([key, value]: any) => {
25
+ // let type = 'any'
26
+ // if (value.enum) {
27
+ // type = value.enum.join(' | ')
28
+ // } else if (value.type) {
29
+ // type = value.type
30
+ // } else if (value.$ref) {
31
+ // type = `typeof ${key}`
32
+ // }
33
+ // const defaultValue = value.default?.toString() ?? '-'
34
+ // return [key, type, defaultValue]
35
+ // })
262
36
  ---
263
37
 
264
- <Table
38
+ <!-- <Table
265
39
  size="md"
266
40
  class:list={['props-table']}
267
41
  header={['Prop', 'Type', 'Default']}
268
- body={Array.from(tableBody.values())}
42
+ body={tableBody}
269
43
  />
270
44
 
271
- <style is:global lang="scss">
45
+ <style is:global>
272
46
  .props-table {
273
47
  overflow: auto;
274
48
  }
275
- </style>
49
+ </style> -->
@@ -1,4 +1,4 @@
1
- ---
1
+ <!-- ---
2
2
  import Button from 'fulldev-ui/components/Button.astro'
3
3
 
4
4
  const { componentProps } = Astro.props
@@ -25,7 +25,7 @@ const isComponent =
25
25
  </div>
26
26
  </div>
27
27
  ) : (
28
- <div class="block window">
28
+ <div class="window block">
29
29
  <div class="button-header">
30
30
  <Button
31
31
  for={id}
@@ -50,22 +50,11 @@ const isComponent =
50
50
  )
51
51
  }
52
52
 
53
- <style lang="scss" is:global>
53
+ <style is:global>
54
54
  @layer fulldev {
55
55
  .window {
56
- display: flex;
57
- flex-direction: column;
58
- align-items: flex-start;
59
- width: 100%;
60
-
61
56
  .code-container {
62
- width: 100%;
63
-
64
- .astro-code {
65
- margin: 0;
66
- background-color: #191919 !important;
67
- padding: var(--space-5);
68
- }
57
+ @apply w-full;
69
58
  }
70
59
 
71
60
  &.component {
@@ -130,45 +119,4 @@ const isComponent =
130
119
  }
131
120
  }
132
121
  }
133
-
134
- // .window {
135
- // width: 100%;
136
-
137
- // &.component {
138
- // border: 1px solid var(--base-6);
139
- // border-radius: var(--radius-2);
140
- // overflow: hidden;
141
-
142
- // .example-container {
143
- // display: flex;
144
- // flex-direction: column;
145
- // align-items: start;
146
- // gap: var(--space-4);
147
- // padding: var(--space-5);
148
- // }
149
-
150
- // .astro-code {
151
- // border: none;
152
- // border-top: 1px solid var(--base-6);
153
- // border-radius: 0px;
154
- // }
155
- // }
156
-
157
- // &:not(.component) {
158
- // padding-top: var(--space-7);
159
- // padding-bottom: var(--space-7);
160
-
161
- // .live-code-layout {
162
- // display: flex;
163
- // flex-direction: column;
164
- // margin-top: var(--space-4);
165
- // width: 100%;
166
- // overflow: hidden;
167
-
168
- // .example-container {
169
- // border-top: 1px solid var(--base-6);
170
- // }
171
- // }
172
- // }
173
- // }
174
- </style>
122
+ </style> -->
@@ -1,20 +1,14 @@
1
1
  import { defineCollection } from 'astro:content'
2
- import imageLoader from 'fulldev-ui/loaders/imageLoader.ts'
3
- import imageSchema from 'fulldev-ui/schemas/imageSchema.ts'
4
- import pageSchema from 'fulldev-ui/schemas/pageSchema.ts'
5
- import presetSchema from 'fulldev-ui/schemas/presetSchema.ts'
2
+ import { layoutSchema } from 'fulldev-ui/schemas/layoutSchema.ts'
3
+ import { pageSchema } from 'fulldev-ui/schemas/pageSchema.ts'
6
4
 
7
5
  export const collections = {
8
6
  pages: defineCollection({
9
7
  type: 'content',
10
8
  schema: pageSchema,
11
9
  }),
12
- presets: defineCollection({
10
+ layouts: defineCollection({
13
11
  type: 'data',
14
- schema: presetSchema,
15
- }),
16
- images: defineCollection({
17
- loader: imageLoader,
18
- schema: imageSchema,
12
+ schema: layoutSchema,
19
13
  }),
20
14
  }
@@ -1,83 +1,62 @@
1
- theme: dark
2
-
3
- seo:
1
+ head:
2
+ title: Fulldev UI - Astro component and block library, open-source
4
3
  image: /images/og-image.png
5
-
6
- code:
7
- head: |
4
+ theme: system
5
+ code: |
8
6
  <script is:inline>
9
7
  !function(t,e){var o,n,p,r;e.__SV||(window.posthog=e,e._i=[],e.init=function(i,s,a){function g(t,e){var o=e.split(".");2==o.length&&(t=t[o[0]],e=o[1]),t[e]=function(){t.push([e].concat(Array.prototype.slice.call(arguments,0)))}}(p=t.createElement("script")).type="text/javascript",p.crossOrigin="anonymous",p.async=!0,p.src=s.api_host.replace(".i.posthog.com","-assets.i.posthog.com")+"/static/array.js",(r=t.getElementsByTagName("script")[0]).parentNode.insertBefore(p,r);var u=e;for(void 0!==a?u=e[a]=[]:a="posthog",u.people=u.people||[],u.toString=function(t){var e="posthog";return"posthog"!==a&&(e+="."+a),t||(e+=" (stub)"),e},u.people.toString=function(){return u.toString(1)+".people (stub)"},o="init capture register register_once register_for_session unregister unregister_for_session getFeatureFlag getFeatureFlagPayload isFeatureEnabled reloadFeatureFlags updateEarlyAccessFeatureEnrollment getEarlyAccessFeatures on onFeatureFlags onSessionId getSurveys getActiveMatchingSurveys renderSurvey canRenderSurvey getNextSurveyStep identify setPersonProperties group resetGroups setPersonPropertiesForFlags resetPersonPropertiesForFlags setGroupPropertiesForFlags resetGroupPropertiesForFlags reset get_distinct_id getGroups get_session_id get_session_replay_url alias set_config startSessionRecording stopSessionRecording sessionRecordingStarted captureException loadToolbar get_property getSessionProperty createPersonProfile opt_in_capturing opt_out_capturing has_opted_in_capturing has_opted_out_capturing clear_opt_in_out_capturing debug".split(" "),n=0;n<o.length;n++)g(u,o[n]);e._i.push([i,s,a])},e.__SV=1)}(document,window.posthog||[]);
10
8
  posthog.init('phc_mVacbe8Xydu0UZlh4bNw5EGisvzyRcpqXEEuEEp5lOY',{api_host:'https://eu.i.posthog.com', person_profiles: 'identified_only' // or 'always' to create profiles for anonymous users as well
11
9
  })
12
10
  </script>
13
- navigation:
14
- header: true
15
- company: Fulldev UI
16
- buttons:
11
+
12
+ banner:
13
+ text: 'Introducing v0.6: layouts & pagebuilding 🎉'
14
+
15
+ header:
16
+ search: true
17
+ logo:
18
+ text: Fulldev UI
19
+ links:
17
20
  - text: Docs
18
- href: /overview/introduction
21
+ href: /docs/
19
22
  - text: Components
20
- href: /typography/heading
23
+ href: /docs/components/badge/
21
24
  - text: Blocks
22
- href: /blocks/banner
23
- - showcase
24
- - href: https://github.com/fulldotdev/ui
25
- target: _blank
26
- icon: brand-github
27
- variant: secondary
28
- - href: https://discord.gg/vXZqMbadm8
29
- target: _blank
30
- icon: brand-discord
31
- variant: secondary
32
- menu:
25
+ href: /docs/blocks/banner/
26
+ - text: Showcase
27
+ href: /showcase/
28
+ socials:
29
+ - https://github.com/fulldotdev/ui
30
+ - https://discord.gg/vXZqMbadm8
31
+
32
+ sidebar:
33
+ menus:
33
34
  - heading: Get Started
34
- buttons:
35
- - overview/introduction
36
- - overview/installation
37
- - overview/theming
38
- - overview/frameworks
39
- - overview/components
40
- - overview/content-collections
41
- - heading: Typography
42
- buttons:
43
- - typography/heading
44
- - typography/label
45
- - typography/link
46
- - typography/list
47
- - typography/text
48
- - heading: Base
49
- buttons:
50
- - base/badge
51
- - base/button
52
- - base/card
53
- - base/checkbox
54
- - base/icon
55
- - base/input
56
- - base/rating
57
- - base/section
58
- - base/select
59
- - base/table
60
- - base/textarea
61
- - base/theme-select
62
- - base/image
63
- - heading: Blocks
64
- buttons:
65
- - blocks/banner
66
- - blocks/colleagues
67
- - blocks/contact
68
- - blocks/content
69
- - blocks/cta
70
- - blocks/features
71
- - blocks/hero
72
- - blocks/intro
73
- - blocks/posts
74
- - blocks/reviews
75
- - heading: Schemas
76
- buttons:
77
- - schemas/page
78
- - schemas/preset
79
- - heading: More
80
- buttons:
81
- - showcase
82
- - text: Changelog
83
- href: https://github.com/fulldotdev/ui/releases
35
+ links:
36
+ - text: Introduction
37
+ href: /docs/
38
+ - text: Installation
39
+ href: /docs/installation/
40
+ - text: Customization
41
+ href: /docs/customization/
42
+ - text: Frameworks
43
+ href: /docs/frameworks/
44
+ - text: Components
45
+ href: /docs/components/
46
+ - text: Collections
47
+ href: /docs/collections/
48
+
49
+ footer:
50
+ logo:
51
+ text: Fulldev UI
52
+ menus:
53
+ - heading: Docs
54
+ links:
55
+ - text: Docs
56
+ href: /docs/
57
+ - text: Components
58
+ href: /docs/components/badge/
59
+ - text: Blocks
60
+ href: /docs/blocks/banner/
61
+ - text: Showcase
62
+ href: /showcase/
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Categories
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Footer
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Header
5
3
  ---
6
4
 
@@ -151,7 +149,6 @@ import Header from 'fulldev-ui/components/Header.astro'
151
149
  },
152
150
  ]}
153
151
  position="relative"
154
- color="brand"
155
152
  />
156
153
  ```
157
154
 
@@ -182,6 +179,5 @@ import Header from 'fulldev-ui/components/Header.astro'
182
179
  },
183
180
  ]}
184
181
  position="relative"
185
- color="brand"
186
182
  />
187
183
  ```
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Jobs
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Prices
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Product
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Products
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Stats
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Banner
5
3
  ---
6
4
 
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Colleagues
5
3
  ---
6
4
 
@@ -10,7 +8,6 @@ import Colleagues from 'fulldev-ui/blocks/Colleagues.astro'
10
8
  ---
11
9
 
12
10
  <Colleagues
13
- align="start"
14
11
  heading="Meet the team"
15
12
  text="Our team is made up of experienced professionals who are dedicated to helping you achieve your goals."
16
13
  panel
@@ -1,6 +1,4 @@
1
1
  ---
2
- presets: [docs, blocks]
3
-
4
2
  title: Contact
5
3
  ---
6
4