fulldev-ui 0.4.29 → 0.5.0-beta.1
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.
- package/CONTRIBUTING.md +2 -2
- package/astro.config.ts +15 -4
- package/package.json +26 -16
- package/pnpm-lock.yaml +6473 -0
- package/public/favicon/android-chrome-192x192.png +0 -0
- package/public/favicon/android-chrome-512x512.png +0 -0
- package/public/favicon/apple-touch-icon.png +0 -0
- package/public/favicon/browserconfig.xml +7 -7
- package/public/favicon/favicon-16x16-dark.png +0 -0
- package/public/favicon/favicon-16x16.png +0 -0
- package/public/favicon/favicon-32x32-dark.png +0 -0
- package/public/favicon/favicon-32x32.png +0 -0
- package/public/favicon/favicon-48x48-dark.png +0 -0
- package/public/favicon/favicon-48x48.png +0 -0
- package/public/favicon/favicon-dark.ico +0 -0
- package/public/favicon/favicon.ico +0 -0
- package/public/favicon/favicon.svg +16 -0
- package/public/favicon/manifest.webmanifest +26 -0
- package/public/favicon/mstile-150x150.png +0 -0
- package/public/favicon/safari-pinned-tab.svg +14 -15
- package/public/favicon/yandex-browser-50x50.png +0 -0
- package/public/favicon/yandex-browser-manifest.json +9 -0
- package/src/blocks/Article.astro +21 -0
- package/src/blocks/Banner.astro +47 -0
- package/src/blocks/Colleagues.astro +2 -1
- package/src/blocks/Contact.astro +84 -99
- package/src/blocks/Cta.astro +2 -1
- package/src/blocks/Hero.astro +1 -2
- package/src/blocks/Intro.astro +1 -1
- package/src/blocks/Jobs.astro +1 -1
- package/src/blocks/Prices.astro +1 -1
- package/src/blocks/Product.astro +23 -10
- package/src/blocks/Reviews.astro +1 -1
- package/src/components/Avatar.astro +3 -20
- package/src/components/Badge.astro +17 -54
- package/src/components/Badges.astro +50 -0
- package/src/components/Button.astro +65 -45
- package/src/components/Buttons.astro +49 -0
- package/src/components/Card.astro +94 -177
- package/src/components/Cards.astro +135 -0
- package/src/components/Channel.astro +70 -0
- package/src/components/Channels.astro +37 -0
- package/src/components/Checkbox.astro +12 -16
- package/src/components/Dialog.astro +10 -12
- package/src/components/Drawer.astro +16 -22
- package/src/components/Element.astro +58 -0
- package/src/components/Footer.astro +139 -93
- package/src/components/Head.astro +7 -45
- package/src/components/Header.astro +78 -160
- package/src/components/Heading.astro +18 -26
- package/src/components/Icon.astro +9 -9
- package/src/components/Image.astro +43 -152
- package/src/components/Input.astro +10 -28
- package/src/components/Label.astro +14 -17
- package/src/components/Link.astro +22 -44
- package/src/components/List.astro +12 -10
- package/src/components/LocaleSwitcher.astro +25 -0
- package/src/components/Price.astro +38 -0
- package/src/components/Rating.astro +29 -25
- package/src/components/Search.astro +3 -3
- package/src/components/Section.astro +196 -236
- package/src/components/Select.astro +16 -34
- package/src/components/Sidebar.astro +123 -46
- package/src/components/Social.astro +28 -0
- package/src/components/Socials.astro +37 -0
- package/src/components/Switch.astro +14 -22
- package/src/components/Table.astro +23 -36
- package/src/components/Tagline.astro +11 -16
- package/src/components/Text.astro +17 -19
- package/src/components/Textarea.astro +8 -22
- package/src/components/ThemeSelect.astro +38 -0
- package/src/components/Toc.astro +98 -41
- package/src/components/Writeup.astro +90 -0
- package/src/components/docs/PropsTable.astro +229 -56
- package/src/components/experimental/Form.astro +10 -17
- package/src/components/experimental/Logo.astro +26 -9
- package/src/components/experimental/Prose.astro +9 -5
- package/src/components/experimental/Video.astro +1 -1
- package/src/components/experimental/Window.astro +3 -4
- package/src/components/sections.astro +28 -0
- package/src/content/config.ts +10 -7
- package/src/content/pages/base/_dialog.mdx +1 -2
- package/src/content/pages/base/_drawer.mdx +1 -2
- package/src/content/pages/base/_localeswitcher.mdx +17 -0
- package/src/content/pages/base/_switch.mdx +1 -2
- package/src/content/pages/base/badge.mdx +1 -12
- package/src/content/pages/base/button.mdx +1 -12
- package/src/content/pages/base/card.mdx +2 -29
- package/src/content/pages/base/checkbox.mdx +1 -2
- package/src/content/pages/base/icon.mdx +1 -2
- package/src/content/pages/base/image.mdx +42 -0
- package/src/content/pages/base/input.mdx +1 -12
- package/src/content/pages/base/rating.mdx +3 -14
- package/src/content/pages/base/section.mdx +2 -3
- package/src/content/pages/base/select.mdx +1 -12
- package/src/content/pages/base/table.mdx +1 -28
- package/src/content/pages/base/textarea.mdx +1 -11
- package/src/content/pages/base/theme-select.mdx +15 -0
- package/src/content/pages/blocks/_categories.mdx +3 -5
- package/src/content/pages/blocks/{footer.mdx → _footer.mdx} +2 -4
- package/src/content/pages/blocks/{header.mdx → _header.mdx} +2 -7
- package/src/content/pages/blocks/_jobs.mdx +1 -2
- package/src/content/pages/blocks/{prices.mdx → _prices.mdx} +5 -7
- package/src/content/pages/blocks/_product.mdx +1 -2
- package/src/content/pages/blocks/_products.mdx +1 -2
- package/src/content/pages/blocks/_stats.mdx +1 -1
- package/src/content/pages/blocks/{_banner.mdx → banner.mdx} +2 -2
- package/src/content/pages/blocks/colleagues.mdx +6 -8
- package/src/content/pages/blocks/contact.mdx +69 -0
- package/src/content/pages/blocks/content.mdx +1 -19
- package/src/content/pages/blocks/cta.mdx +2 -25
- package/src/content/pages/blocks/features.mdx +2 -3
- package/src/content/pages/blocks/hero.mdx +5 -3
- package/src/content/pages/blocks/intro.mdx +2 -5
- package/src/content/pages/blocks/posts.mdx +9 -2
- package/src/content/pages/blocks/reviews.mdx +23 -18
- package/src/content/pages/index.mdx +19 -20
- package/src/content/pages/layouts/docslayout.mdx +5 -0
- package/src/content/pages/layouts/layout.mdx +21 -0
- package/src/content/pages/layouts/pagelayout.mdx +21 -0
- package/src/content/pages/overview/components.mdx +70 -0
- package/src/content/pages/overview/content-layer.mdx +128 -0
- package/src/content/pages/overview/{theming.mdx → customization.mdx} +6 -6
- package/src/content/pages/overview/frameworks.mdx +4 -4
- package/src/content/pages/overview/installation.mdx +37 -3
- package/src/content/pages/overview/introduction.mdx +6 -2
- package/src/content/pages/schemas/page.mdx +11 -0
- package/src/content/pages/schemas/preset.mdx +9 -0
- package/src/content/pages/showcase/anti-slip-profiles.md +5 -0
- package/src/content/pages/showcase/fulldev-ui.md +5 -0
- package/src/content/pages/showcase/lavis-detailing.md +5 -0
- package/src/content/pages/showcase/leren-trainingsacteren.md +5 -0
- package/src/content/pages/showcase/miele-witgoedcenter-amsterdam.md +5 -0
- package/src/content/{records/record.yml → pages/showcase/record.md} +2 -0
- package/src/content/pages/showcase/sloepverhuur-bolsward.md +5 -0
- package/src/content/pages/showcase/stark-vulcanising-products.md +5 -0
- package/src/content/pages/showcase/the-gym-haren.md +5 -0
- package/src/content/pages/showcase/van-dillen-antieke-bouwmaterialen.md +5 -0
- package/src/content/pages/showcase.mdx +11 -41
- package/src/content/pages/typography/_tagline.mdx +1 -2
- package/src/content/pages/typography/heading.mdx +1 -2
- package/src/content/pages/typography/label.mdx +1 -2
- package/src/content/pages/typography/link.mdx +1 -13
- package/src/content/pages/typography/list.mdx +1 -2
- package/src/content/pages/typography/text.mdx +1 -2
- package/src/content/presets/base.yml +70 -0
- package/src/content/presets/blocks.yml +4 -0
- package/src/content/presets/docs.yml +65 -0
- package/src/css/color.css +0 -82
- package/src/css/custom.css +9 -56
- package/src/css/size.css +10 -0
- package/src/css/space.css +0 -8
- package/src/css/styles.css +0 -15
- package/src/images/avatar-1.yml +1 -0
- package/src/images/favicon.svg +16 -0
- package/src/integration/generate-colors.ts +2 -0
- package/src/integration/index.ts +67 -7
- package/src/layouts/BlockLayout.astro +10 -15
- package/src/layouts/ContactLayout.astro +21 -0
- package/src/layouts/ContentLayout.astro +16 -0
- package/src/layouts/DocsLayout.astro +85 -0
- package/src/layouts/Layout.astro +111 -133
- package/src/layouts/OverviewLayout.astro +22 -32
- package/src/layouts/PageLayout.astro +7 -24
- package/src/layouts/PostLayout.astro +8 -19
- package/src/layouts/ProductLayout.astro +9 -22
- package/src/loaders/imageLoader.ts +26 -0
- package/src/pages/[...page].astro +25 -21
- package/src/schemas/components/avatar.ts +3 -0
- package/src/schemas/components/avatars.ts +4 -0
- package/src/schemas/components/badge.ts +13 -0
- package/src/schemas/components/button.ts +16 -0
- package/src/schemas/components/buttons.ts +4 -0
- package/src/schemas/components/card.ts +25 -0
- package/src/schemas/components/cards.ts +4 -0
- package/src/schemas/components/channel.ts +13 -0
- package/src/schemas/components/channels.ts +4 -0
- package/src/schemas/components/footer.ts +24 -0
- package/src/schemas/components/header.ts +10 -0
- package/src/schemas/components/heading.ts +3 -0
- package/src/schemas/components/icon.ts +3 -0
- package/src/schemas/components/image.ts +18 -0
- package/src/schemas/components/images.ts +4 -0
- package/src/schemas/components/list.ts +3 -0
- package/src/schemas/components/logo.ts +3 -0
- package/src/schemas/components/price.ts +3 -0
- package/src/schemas/components/rating.ts +15 -0
- package/src/schemas/components/section.ts +15 -0
- package/src/schemas/components/sections.ts +3 -0
- package/src/schemas/components/social.ts +3 -0
- package/src/schemas/components/socials.ts +4 -0
- package/src/schemas/components/tagline.ts +3 -0
- package/src/schemas/components/text.ts +3 -0
- package/src/schemas/components/writeup.ts +20 -0
- package/src/schemas/imageSchema.ts +12 -0
- package/src/schemas/pageSchema.ts +63 -0
- package/src/schemas/presetSchema.ts +29 -0
- package/src/schemas/utils/categories.ts +3 -0
- package/src/schemas/utils/component.ts +17 -0
- package/src/schemas/utils/navigation.ts +53 -0
- package/src/schemas/{utils.ts → utils/pathSchema.ts} +2 -11
- package/src/types/global-props.d.ts +16 -0
- package/src/types/virtual-modules.d.ts +5 -0
- package/src/utils/_archive/Childmorphic.ts +1 -1
- package/src/utils/_archive/mergeEntries.ts +28 -0
- package/src/utils/getCategoryPages.ts +11 -0
- package/src/utils/getChildPages.ts +16 -0
- package/src/utils/getSiblingPages.ts +14 -0
- package/tsconfig.json +1 -2
- package/public/favicon/site.webmanifest +0 -19
- package/public/images/avatars/1.jpeg +0 -0
- package/public/images/avatars/2.jpeg +0 -0
- package/public/images/avatars/3.jpeg +0 -0
- package/public/images/avatars/300/1.jpeg +0 -0
- package/public/images/avatars/300/2.jpeg +0 -0
- package/public/images/avatars/300/3.jpeg +0 -0
- package/public/images/avatars/300/4.jpeg +0 -0
- package/public/images/avatars/4.jpeg +0 -0
- package/public/images/avatars/5.jpeg +0 -0
- package/public/images/avatars/6.jpeg +0 -0
- package/public/images/avatars/7.jpeg +0 -0
- package/public/images/avatars/8.jpeg +0 -0
- package/public/images/blocks/colleagues.png +0 -0
- package/public/images/blocks/content.png +0 -0
- package/public/images/blocks/cta.png +0 -0
- package/public/images/blocks/features.png +0 -0
- package/public/images/blocks/footer.png +0 -0
- package/public/images/blocks/header.png +0 -0
- package/public/images/blocks/hero.png +0 -0
- package/public/images/blocks/intro.png +0 -0
- package/public/images/blocks/posts.png +0 -0
- package/public/images/blocks/prices.png +0 -0
- package/public/images/blocks/reviews.png +0 -0
- package/public/images/logo-placeholder.svg +0 -1
- package/src/components/Bento.astro +0 -43
- package/src/components/Block.astro +0 -157
- package/src/components/Blocks.astro +0 -5
- package/src/components/Box.astro +0 -63
- package/src/components/Carousel.astro +0 -54
- package/src/components/Column.astro +0 -73
- package/src/components/Grid.astro +0 -32
- package/src/components/Masonry.astro +0 -42
- package/src/components/Root.astro +0 -94
- package/src/components/Row.astro +0 -49
- package/src/components/Split.astro +0 -59
- package/src/components/Spread.astro +0 -46
- package/src/components/Stack.astro +0 -36
- package/src/components/Toggle.astro +0 -46
- package/src/components/Wrap.astro +0 -42
- package/src/components/docs/NavigationButtons.astro +0 -59
- package/src/components/experimental/Channel.astro +0 -74
- package/src/components/experimental/Price.astro +0 -40
- package/src/content/pages/_changelog.mdx +0 -10
- package/src/content/pages/_segment/footer.mdx +0 -244
- package/src/content/pages/_segment/header.mdx +0 -210
- package/src/content/pages/base/_image.mdx +0 -14
- package/src/content/pages/base/toggle.mdx +0 -32
- package/src/content/pages/blocks.mdx +0 -10
- package/src/content/pages/overview/integration.mdx +0 -37
- package/src/content/pages/structure/_row.mdx +0 -23
- package/src/content/pages/structure/_wrap.mdx +0 -25
- package/src/content/pages/structure/carousel.mdx +0 -31
- package/src/content/pages/structure/column.mdx +0 -21
- package/src/content/pages/structure/grid.mdx +0 -26
- package/src/content/pages/structure/masonry.mdx +0 -32
- package/src/content/pages/structure/split.mdx +0 -21
- package/src/content/pages/structure/spread.mdx +0 -21
- package/src/content/pages/structure/stack.mdx +0 -22
- package/src/content/settings/base.yml +0 -55
- package/src/content/settings/components.yml +0 -29
- package/src/layouts/BlockOverviewLayout.astro +0 -39
- package/src/layouts/ComponentLayout.astro +0 -23
- package/src/layouts/JobsLayout.astro +0 -40
- package/src/schemas/base.ts +0 -90
- package/src/schemas/block.ts +0 -15
- package/src/schemas/card.ts +0 -3
- package/src/schemas/page.ts +0 -43
- package/src/utils/mergeEntries.ts +0 -28
- /package/{public/showcase → src/images}/anti-slip-profiles.webp +0 -0
- /package/{public/images/avatars/500/1.jpeg → src/images/avatar-1.jpeg} +0 -0
- /package/{public/images/avatars/500/2.jpeg → src/images/avatar-2.jpeg} +0 -0
- /package/{public/images/avatars/500/3.jpeg → src/images/avatar-3.jpeg} +0 -0
- /package/{public/images/avatars/500/4.jpeg → src/images/avatar-4.jpeg} +0 -0
- /package/{public → src}/images/avatar-placeholder.jpg +0 -0
- /package/{public → src}/images/block-code.png +0 -0
- /package/{public → src}/images/component-code.png +0 -0
- /package/{public/showcase → src/images}/fulldev-ui.webp +0 -0
- /package/{public/showcase → src/images}/lavis-detailing.webp +0 -0
- /package/{public/showcase → src/images}/leren-trainingsacteren.webp +0 -0
- /package/{public/showcase → src/images}/miele-witgoedcenter-amsterdam.webp +0 -0
- /package/{public → src}/images/og-image.png +0 -0
- /package/{public → src}/images/placeholder-center.webp +0 -0
- /package/{public → src}/images/placeholder-landscape-dark.png +0 -0
- /package/{public → src}/images/placeholder-landscape.webp +0 -0
- /package/{public → src}/images/placeholder-portrait.webp +0 -0
- /package/{public → src}/images/placeholder-right.webp +0 -0
- /package/{public → src}/images/placeholder.webp +0 -0
- /package/{public/showcase → src/images}/sloepverhuur-bolsward.webp +0 -0
- /package/{public/showcase → src/images}/stark-vulcanising-products.webp +0 -0
- /package/{public/showcase → src/images}/the-gym-haren.webp +0 -0
- /package/{public/showcase → src/images}/van-dillen-antieke-bouwmaterialen.webp +0 -0
|
@@ -1,43 +1,105 @@
|
|
|
1
1
|
---
|
|
2
2
|
import Table from 'fulldev-ui/components/Table.astro'
|
|
3
3
|
import { readFileSync } from 'node:fs'
|
|
4
|
+
import { pascal } from 'radash'
|
|
4
5
|
|
|
5
|
-
const
|
|
6
|
-
const
|
|
7
|
-
const component = slug.charAt(0).toUpperCase() + slug.slice(1)
|
|
6
|
+
const slug = Astro.url.pathname.replace(/\/$/, '').split('/').pop() || ''
|
|
7
|
+
const componentName = pascal(slug)
|
|
8
8
|
|
|
9
|
-
const allComponents =
|
|
10
|
-
const
|
|
11
|
-
(
|
|
12
|
-
)
|
|
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
|
|
13
35
|
|
|
14
|
-
|
|
36
|
+
propLines.forEach((line) => {
|
|
37
|
+
const trimmedLine = line.trim()
|
|
38
|
+
if (trimmedLine === '') return
|
|
15
39
|
|
|
16
|
-
|
|
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
|
+
})
|
|
17
53
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
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)/
|
|
21
60
|
)
|
|
22
|
-
if (
|
|
23
|
-
const
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
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)
|
|
36
85
|
}
|
|
37
|
-
|
|
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
|
+
)
|
|
38
99
|
}
|
|
39
100
|
|
|
40
|
-
|
|
101
|
+
// Function to extract default prop values from Astro.props
|
|
102
|
+
const extractDefaultProps = (content: string): Record<string, string> => {
|
|
41
103
|
const defaultPropsMatch = content.match(
|
|
42
104
|
/const\s*{[\s\S]*?}\s*=\s*Astro\.props/
|
|
43
105
|
)
|
|
@@ -47,11 +109,14 @@ const extractDefaultProps = (content: string) => {
|
|
|
47
109
|
/(\w+)\s*=\s*('[^']*'|"[^"]*"|[^,\n]+)/g
|
|
48
110
|
),
|
|
49
111
|
].reduce(
|
|
50
|
-
(acc,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
+
}
|
|
55
120
|
return acc
|
|
56
121
|
},
|
|
57
122
|
{} as Record<string, string>
|
|
@@ -59,40 +124,148 @@ const extractDefaultProps = (content: string) => {
|
|
|
59
124
|
: {}
|
|
60
125
|
}
|
|
61
126
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
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 ''
|
|
72
140
|
}
|
|
73
141
|
|
|
74
142
|
const parsedProps = extractProps(componentFileContent)
|
|
75
143
|
const parsedAstroProps = extractDefaultProps(componentFileContent)
|
|
76
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
|
+
}
|
|
77
262
|
---
|
|
78
263
|
|
|
79
264
|
<Table
|
|
80
265
|
size="md"
|
|
81
266
|
class:list={['props-table']}
|
|
82
267
|
header={['Prop', 'Type', 'Default']}
|
|
83
|
-
body={
|
|
84
|
-
...parsedProps.map((item) => [
|
|
85
|
-
item.name,
|
|
86
|
-
item.type,
|
|
87
|
-
parsedAstroProps[item.name] ?? '-',
|
|
88
|
-
]),
|
|
89
|
-
...(asDefault !== 'div'
|
|
90
|
-
? [
|
|
91
|
-
['as', 'HTMLTag', asDefault],
|
|
92
|
-
['HTML Attributes', `Polymorphic<${asDefault}>`, '-'],
|
|
93
|
-
]
|
|
94
|
-
: []),
|
|
95
|
-
]}
|
|
268
|
+
body={Array.from(tableBody.values())}
|
|
96
269
|
/>
|
|
97
270
|
|
|
98
271
|
<style is:global lang="scss">
|
|
@@ -1,29 +1,22 @@
|
|
|
1
1
|
---
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
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
|
-
|
|
6
|
-
structure?: 'column' | 'row' | 'group'
|
|
7
|
-
space?: 'none' | 'auto'
|
|
6
|
+
interface Props extends GlobalProps, HTMLAttributes<'form'> {
|
|
7
|
+
structure?: 'column' | 'row' | 'group' | undefined
|
|
8
8
|
}
|
|
9
9
|
|
|
10
|
-
const {
|
|
11
|
-
as = 'form',
|
|
12
|
-
space = 'auto',
|
|
13
|
-
structure = 'column',
|
|
14
|
-
...rest
|
|
15
|
-
} = Astro.props
|
|
10
|
+
const { structure = 'column', ...rest } = Astro.props
|
|
16
11
|
---
|
|
17
12
|
|
|
18
|
-
<
|
|
19
|
-
class:list=
|
|
20
|
-
|
|
21
|
-
{structure}
|
|
22
|
-
{space}
|
|
13
|
+
<Element
|
|
14
|
+
class:list={`form ${structure}`}
|
|
15
|
+
as="form"
|
|
23
16
|
{...rest}
|
|
24
17
|
>
|
|
25
18
|
<slot />
|
|
26
|
-
</
|
|
19
|
+
</Element>
|
|
27
20
|
|
|
28
21
|
<style is:global lang="scss">
|
|
29
22
|
.form {
|
|
@@ -1,21 +1,38 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { ComponentProps } from 'astro/types'
|
|
3
|
+
import Element from 'fulldev-ui/components/Element.astro'
|
|
3
4
|
import Image from 'fulldev-ui/components/Image.astro'
|
|
4
5
|
|
|
5
|
-
|
|
6
|
+
interface Props extends ComponentProps<typeof Image> {
|
|
7
|
+
company?: string | undefined
|
|
8
|
+
}
|
|
6
9
|
|
|
7
|
-
const { ...rest } = Astro.props
|
|
10
|
+
const { company, ...rest } = Astro.props as Props
|
|
8
11
|
---
|
|
9
12
|
|
|
10
|
-
<
|
|
13
|
+
<Element
|
|
14
|
+
as="a"
|
|
15
|
+
href="/"
|
|
11
16
|
class:list="logo"
|
|
12
|
-
|
|
13
|
-
/>
|
|
17
|
+
>
|
|
18
|
+
{company ? <Fragment set:html={company} /> : <Image {...rest} />}
|
|
19
|
+
</Element>
|
|
14
20
|
|
|
15
21
|
<style is:global lang="scss">
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
22
|
+
@layer fulldev {
|
|
23
|
+
.logo {
|
|
24
|
+
display: flex;
|
|
25
|
+
align-items: center;
|
|
26
|
+
color: var(--color-12);
|
|
27
|
+
font-weight: 700;
|
|
28
|
+
font-size: var(--text-6);
|
|
29
|
+
line-height: 1.1;
|
|
30
|
+
|
|
31
|
+
.image {
|
|
32
|
+
max-width: calc(15 * var(--space-2));
|
|
33
|
+
height: 100%;
|
|
34
|
+
object-fit: contain;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
20
37
|
}
|
|
21
38
|
</style>
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
---
|
|
2
2
|
import type { HTMLTag, Polymorphic } from 'astro/types'
|
|
3
|
-
import
|
|
3
|
+
import Element from 'fulldev-ui/components/Element.astro'
|
|
4
4
|
|
|
5
5
|
type Props<As extends HTMLTag = 'div'> = Polymorphic<{ as: As }>
|
|
6
6
|
|
|
7
7
|
const { as = 'div', ...rest } = Astro.props
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
<
|
|
10
|
+
<Element
|
|
11
11
|
class:list="prose"
|
|
12
12
|
{as}
|
|
13
13
|
{...rest}
|
|
14
14
|
>
|
|
15
15
|
<slot />
|
|
16
|
-
</
|
|
16
|
+
</Element>
|
|
17
17
|
|
|
18
18
|
<style is:global lang="scss">
|
|
19
19
|
@layer fulldev {
|
|
@@ -21,10 +21,8 @@ const { as = 'div', ...rest } = Astro.props
|
|
|
21
21
|
width: 100%;
|
|
22
22
|
scroll-margin-top: var(--space-6);
|
|
23
23
|
color: var(--color-11);
|
|
24
|
-
font-weight: var(--font-weight);
|
|
25
24
|
font-size: var(--text-3);
|
|
26
25
|
line-height: 1.7;
|
|
27
|
-
font-family: var(--font-family);
|
|
28
26
|
|
|
29
27
|
> {
|
|
30
28
|
.astro-code,
|
|
@@ -152,5 +150,11 @@ const { as = 'div', ...rest } = Astro.props
|
|
|
152
150
|
text-decoration: underline;
|
|
153
151
|
}
|
|
154
152
|
}
|
|
153
|
+
|
|
154
|
+
p code {
|
|
155
|
+
background-color: var(--base-12);
|
|
156
|
+
padding: 0 var(--space-1);
|
|
157
|
+
color: var(--base-1);
|
|
158
|
+
}
|
|
155
159
|
}
|
|
156
160
|
</style>
|
|
@@ -28,7 +28,6 @@ const isComponent =
|
|
|
28
28
|
<div class="block window">
|
|
29
29
|
<div class="button-header">
|
|
30
30
|
<Button
|
|
31
|
-
as="label"
|
|
32
31
|
for={id}
|
|
33
32
|
variant="secondary"
|
|
34
33
|
>
|
|
@@ -64,7 +63,7 @@ const isComponent =
|
|
|
64
63
|
|
|
65
64
|
.astro-code {
|
|
66
65
|
margin: 0;
|
|
67
|
-
background-color:
|
|
66
|
+
background-color: #191919 !important;
|
|
68
67
|
padding: var(--space-5);
|
|
69
68
|
}
|
|
70
69
|
}
|
|
@@ -88,8 +87,8 @@ const isComponent =
|
|
|
88
87
|
border-radius: 0px;
|
|
89
88
|
|
|
90
89
|
.astro-code {
|
|
91
|
-
border: none;
|
|
92
|
-
border-radius: 0px;
|
|
90
|
+
border: none !important;
|
|
91
|
+
border-radius: 0px !important;
|
|
93
92
|
}
|
|
94
93
|
}
|
|
95
94
|
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { ComponentProps, HTMLAttributes } from 'astro/types'
|
|
3
|
+
import Element from 'fulldev-ui/components/Element.astro'
|
|
4
|
+
import type { GlobalProps } from 'fulldev-ui/types/global-props'
|
|
5
|
+
import Section from './Section.astro'
|
|
6
|
+
|
|
7
|
+
interface Props extends GlobalProps, HTMLAttributes<'div'> {
|
|
8
|
+
sections?: ComponentProps<typeof Section>[] | undefined
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { sections, ...rest } = Astro.props
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<Element
|
|
15
|
+
class:list="sections"
|
|
16
|
+
{...rest}
|
|
17
|
+
>
|
|
18
|
+
{sections?.map((section) => <Section {...section} />)}
|
|
19
|
+
</Element>
|
|
20
|
+
|
|
21
|
+
<style is:global lang="scss">
|
|
22
|
+
@layer fulldev {
|
|
23
|
+
.sections {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
</style>
|
package/src/content/config.ts
CHANGED
|
@@ -1,17 +1,20 @@
|
|
|
1
1
|
import { defineCollection } from 'astro:content'
|
|
2
|
-
import
|
|
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'
|
|
3
6
|
|
|
4
7
|
export const collections = {
|
|
5
8
|
pages: defineCollection({
|
|
6
9
|
type: 'content',
|
|
7
|
-
schema:
|
|
10
|
+
schema: pageSchema,
|
|
8
11
|
}),
|
|
9
|
-
|
|
12
|
+
presets: defineCollection({
|
|
10
13
|
type: 'data',
|
|
11
|
-
schema:
|
|
14
|
+
schema: presetSchema,
|
|
12
15
|
}),
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
schema:
|
|
16
|
+
images: defineCollection({
|
|
17
|
+
loader: imageLoader,
|
|
18
|
+
schema: imageSchema,
|
|
16
19
|
}),
|
|
17
20
|
}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
settings: components
|
|
2
|
+
presets: [docs]
|
|
4
3
|
|
|
5
4
|
title: Badge
|
|
6
5
|
---
|
|
@@ -56,15 +55,5 @@ import Badge from 'fulldev-ui/components/Badge.astro'
|
|
|
56
55
|
import Badge from 'fulldev-ui/components/Badge.astro'
|
|
57
56
|
---
|
|
58
57
|
|
|
59
|
-
<Badge radius="none">Badge</Badge>
|
|
60
|
-
<Badge radius="auto">Badge</Badge>
|
|
61
|
-
<Badge radius="full">Badge</Badge>
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
```astro live
|
|
65
|
-
---
|
|
66
|
-
import Badge from 'fulldev-ui/components/Badge.astro'
|
|
67
|
-
---
|
|
68
|
-
|
|
69
58
|
<Badge icon="circle" text="Badge" />
|
|
70
59
|
```
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
settings: components
|
|
2
|
+
presets: [docs]
|
|
4
3
|
|
|
5
4
|
title: Button
|
|
6
5
|
---
|
|
@@ -59,13 +58,3 @@ import Button from 'fulldev-ui/components/Button.astro'
|
|
|
59
58
|
<Button color="base" text="Button" />
|
|
60
59
|
<Button color="brand" text="Button" />
|
|
61
60
|
```
|
|
62
|
-
|
|
63
|
-
```astro live
|
|
64
|
-
---
|
|
65
|
-
import Button from 'fulldev-ui/components/Button.astro'
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
<Button radius="none" text="Button" />
|
|
69
|
-
<Button radius="auto" text="Button" />
|
|
70
|
-
<Button radius="full" text="Button" />
|
|
71
|
-
```
|