-
+
+
)
diff --git a/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx b/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx
index 1d996336..dc93fcfa 100644
--- a/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx
+++ b/apps/landing/src/app/(detail)/components/MdxCardFooter.tsx
@@ -1,16 +1,27 @@
'use client'
-import { Box, Center, Flex, Text, VStack } from '@devup-ui/react'
+import { Box, Center, Flex, Image, Text, VStack } from '@devup-ui/react'
import { useState } from 'react'
import IconCode from '@/components/icons/IconCode'
export default function MdxCardFooter({
+ code,
children,
}: {
+ code: string
children: React.ReactNode
}) {
const [isOpen, setIsOpen] = useState(false)
+ const [copied, setCopied] = useState(false)
+
+ const handleCopy = () => {
+ navigator.clipboard
+ .writeText(code)
+ .then(() => setCopied(true))
+ .catch(() => setCopied(false))
+ }
+
return (
{isOpen && (
-
- {children}
-
+ <>
+
+
+
+
+ Copy
+
+
+
+
+ {children}
+
+ >
)}
)
diff --git a/apps/landing/src/app/(detail)/components/button/IconDelete.tsx b/apps/landing/src/app/(detail)/components/[component]/IconDelete.tsx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/IconDelete.tsx
rename to apps/landing/src/app/(detail)/components/[component]/IconDelete.tsx
diff --git a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx
new file mode 100644
index 00000000..3e5ee7d2
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/bottom-sheet/index.mdx
@@ -0,0 +1 @@
+`Bottom Sheet` component displays content in a slide-up panel from the bottom of the screen.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/button/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/button/Api.mdx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/Api.mdx
rename to apps/landing/src/app/(detail)/components/[component]/button/Api.mdx
diff --git a/apps/landing/src/app/(detail)/components/button/demo/Colors.tsx b/apps/landing/src/app/(detail)/components/[component]/button/demo/Colors.tsx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/demo/Colors.tsx
rename to apps/landing/src/app/(detail)/components/[component]/button/demo/Colors.tsx
diff --git a/apps/landing/src/app/(detail)/components/button/demo/Danger.tsx b/apps/landing/src/app/(detail)/components/[component]/button/demo/Danger.tsx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/demo/Danger.tsx
rename to apps/landing/src/app/(detail)/components/[component]/button/demo/Danger.tsx
diff --git a/apps/landing/src/app/(detail)/components/button/demo/Disabled.tsx b/apps/landing/src/app/(detail)/components/[component]/button/demo/Disabled.tsx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/demo/Disabled.tsx
rename to apps/landing/src/app/(detail)/components/[component]/button/demo/Disabled.tsx
diff --git a/apps/landing/src/app/(detail)/components/button/demo/Icon.tsx b/apps/landing/src/app/(detail)/components/[component]/button/demo/Icon.tsx
similarity index 98%
rename from apps/landing/src/app/(detail)/components/button/demo/Icon.tsx
rename to apps/landing/src/app/(detail)/components/[component]/button/demo/Icon.tsx
index fcf54105..2e0c2c58 100644
--- a/apps/landing/src/app/(detail)/components/button/demo/Icon.tsx
+++ b/apps/landing/src/app/(detail)/components/[component]/button/demo/Icon.tsx
@@ -1,7 +1,7 @@
import { Button } from '@devup-ui/components'
import { Box, css, Flex } from '@devup-ui/react'
-import IconDelete from '../IconDelete'
+import IconDelete from '../../IconDelete'
/**
* **Icon**
diff --git a/apps/landing/src/app/(detail)/components/button/demo/Variants.tsx b/apps/landing/src/app/(detail)/components/[component]/button/demo/Variants.tsx
similarity index 100%
rename from apps/landing/src/app/(detail)/components/button/demo/Variants.tsx
rename to apps/landing/src/app/(detail)/components/[component]/button/demo/Variants.tsx
diff --git a/apps/landing/src/app/(detail)/components/button/Button.mdx b/apps/landing/src/app/(detail)/components/[component]/button/index.mdx
similarity index 69%
rename from apps/landing/src/app/(detail)/components/button/Button.mdx
rename to apps/landing/src/app/(detail)/components/[component]/button/index.mdx
index a466fe85..a2b2b98f 100644
--- a/apps/landing/src/app/(detail)/components/button/Button.mdx
+++ b/apps/landing/src/app/(detail)/components/[component]/button/index.mdx
@@ -1,5 +1 @@
-**Button**
-
-#### Button
-
`Button` component is used to handle user interactions.
diff --git a/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/checkbox/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx b/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx
new file mode 100644
index 00000000..58d4b2b1
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/checkbox/index.mdx
@@ -0,0 +1 @@
+`Checkbox` component allows users to select multiple options.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/color-picker/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx b/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx
new file mode 100644
index 00000000..8f149a61
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/color-picker/index.mdx
@@ -0,0 +1 @@
+`Color Picker` component allows users to select colors from a color palette.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/confirm/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx b/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx
new file mode 100644
index 00000000..124f7fae
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/confirm/index.mdx
@@ -0,0 +1 @@
+`Confirm` component displays a confirmation dialog to users.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/date-picker/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx b/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx
new file mode 100644
index 00000000..08c07d5d
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/date-picker/index.mdx
@@ -0,0 +1 @@
+`Date Picker` component allows users to select a date from a calendar interface.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/dropdown/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx b/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx
new file mode 100644
index 00000000..7ccdce4b
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/dropdown/index.mdx
@@ -0,0 +1 @@
+`Dropdown` component displays a list of options that can be toggled.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/footer/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx b/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx
new file mode 100644
index 00000000..546e56d2
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/footer/index.mdx
@@ -0,0 +1 @@
+`Footer` component displays the bottom section of a page.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/header/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/header/index.mdx b/apps/landing/src/app/(detail)/components/[component]/header/index.mdx
new file mode 100644
index 00000000..ef274326
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/header/index.mdx
@@ -0,0 +1 @@
+`Header` component displays the top navigation area of a page.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx
new file mode 100644
index 00000000..38f68784
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/input/Api.mdx
@@ -0,0 +1,13 @@
+###### API
+`Input` props extends the input HTML attributes.
+
+
+| Property | Description | Type | Default |
+| --- | --- | --- | --- |
+| **variant** | The variant of the input | `'primary' \| 'default'` | `'default'` |
+| **size** | The size of the input | `'sm' \| 'md' \| 'lg'` | `'md'` |
+| **placeholder** | Placeholder text for the input | `string` | `undefined` |
+| **type** | The type of input | `'text' \| 'password' \| 'email' \| 'number'` | `'text'` |
+| **disabled** | Whether the input is disabled | `boolean` | `false` |
+| **error** | Whether the input has an error state | `boolean` | `false` |
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/input/index.mdx b/apps/landing/src/app/(detail)/components/[component]/input/index.mdx
new file mode 100644
index 00000000..b2598a47
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/input/index.mdx
@@ -0,0 +1 @@
+`Input` component is used to handle text input from users.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/label/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/label/index.mdx b/apps/landing/src/app/(detail)/components/[component]/label/index.mdx
new file mode 100644
index 00000000..66ac34e6
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/label/index.mdx
@@ -0,0 +1 @@
+`Label` component provides text labels for form elements.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/menu/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx b/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx
new file mode 100644
index 00000000..97dbf522
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/menu/index.mdx
@@ -0,0 +1 @@
+`Menu` component displays a list of navigation options.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/page.tsx b/apps/landing/src/app/(detail)/components/[component]/page.tsx
new file mode 100644
index 00000000..a0e41579
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/page.tsx
@@ -0,0 +1,133 @@
+import { Box, Flex, Text, VStack } from '@devup-ui/react'
+
+import { CustomCode } from '@/components/mdx/components/CustomCode'
+import { CustomH4 } from '@/components/mdx/components/CustomH4'
+import { CustomH6 } from '@/components/mdx/components/CustomH6'
+import { CustomParagraph } from '@/components/mdx/components/CustomParagraph'
+import { CustomPre } from '@/components/mdx/components/CustomPre'
+import { CustomStrong } from '@/components/mdx/components/CustomStrong'
+import { getDemos } from '@/utils/get-demos'
+
+import MdxCard from '../MdxCard'
+
+export const generateMetadata = async ({
+ params,
+}: {
+ params: Promise<{ component: string }>
+}) => {
+ const { component } = await params
+ const pascalWithSpace = component
+ .split('-')
+ .map((item) => item.charAt(0).toUpperCase() + item.slice(1))
+ .join(' ')
+ return {
+ title: `Devup UI - ${pascalWithSpace}`,
+ description: `${pascalWithSpace} component`,
+ alternates: {
+ canonical: `/components/${component}`,
+ },
+ openGraph: {
+ title: `Devup UI - ${pascalWithSpace}`,
+ description: `${pascalWithSpace} component`,
+ url: `/components/${component}`,
+ siteName: 'Devup UI',
+ images: [`/components-og/${component}.webp`],
+ },
+ }
+}
+
+export const generateStaticParams = async () => {
+ return [
+ 'button',
+ 'input',
+ 'uploader',
+ 'toggle',
+ 'tooltip',
+ 'textarea',
+ 'textbox',
+ 'theme-button',
+ 'snackbar',
+ 'stepper',
+ 'tab',
+ 'search',
+ 'select',
+ 'slider',
+ 'pagination',
+ 'progress-bar',
+ 'radio',
+ 'header',
+ 'label',
+ 'menu',
+ 'dropdown',
+ 'footer',
+ 'color-picker',
+ 'confirm',
+ 'date-picker',
+ 'checkbox',
+ 'bottom-sheet',
+ ].map((component) => ({ component }))
+}
+
+export default async function Page({
+ params,
+}: {
+ params: Promise<{ component: string }>
+}) {
+ const { component } = await params
+ const c = await getDemos(component)
+ const m = Math.ceil(c.length / 2)
+ const { default: Index } = await import(`./${component}/index.mdx`)
+ const { default: Api } = await import(`./${component}/Api.mdx`)
+ const componentName = component
+ .split('-')
+ .map((item) => item.charAt(0).toUpperCase() + item.slice(1))
+ .join(' ')
+
+ return (
+
+
+ {componentName}
+
+
+ {componentName}
+
+
+
+
+ Examples
+
+
+
+ {c.slice(0, m).map(([Demo, src]) => (
+ } src={src} />
+ ))}
+
+
+ {c.slice(m).map(([Demo, src]) => (
+ } src={src} />
+ ))}
+
+
+
+
+
+
+
+ )
+}
diff --git a/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/pagination/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx b/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx
new file mode 100644
index 00000000..cf69ad59
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/pagination/index.mdx
@@ -0,0 +1 @@
+`Pagination` component allows users to navigate through multiple pages.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/progress-bar/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx b/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx
new file mode 100644
index 00000000..8ec889a6
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/progress-bar/index.mdx
@@ -0,0 +1 @@
+`Progress Bar` component displays the progress of a task or operation.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/radio/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx b/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx
new file mode 100644
index 00000000..dbc0cef6
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/radio/index.mdx
@@ -0,0 +1 @@
+`Radio` component allows users to select a single option from a group.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/search/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/search/index.mdx b/apps/landing/src/app/(detail)/components/[component]/search/index.mdx
new file mode 100644
index 00000000..1f42be2d
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/search/index.mdx
@@ -0,0 +1 @@
+`Search` component provides a search input with filtering capabilities.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/select/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/select/index.mdx b/apps/landing/src/app/(detail)/components/[component]/select/index.mdx
new file mode 100644
index 00000000..c587b299
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/select/index.mdx
@@ -0,0 +1 @@
+`Select` component allows users to choose from a list of options.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/slider/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx b/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx
new file mode 100644
index 00000000..789d8ff2
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/slider/index.mdx
@@ -0,0 +1 @@
+`Slider` component allows users to select a value from a range.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/snackbar/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx b/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx
new file mode 100644
index 00000000..75cbc49a
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/snackbar/index.mdx
@@ -0,0 +1 @@
+`Snackbar` component displays brief notifications to users.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/stepper/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx b/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx
new file mode 100644
index 00000000..9ac4a130
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/stepper/index.mdx
@@ -0,0 +1 @@
+`Stepper` component guides users through a multi-step process.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/tab/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx b/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx
new file mode 100644
index 00000000..a86e5651
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/tab/index.mdx
@@ -0,0 +1 @@
+`Tab` component organizes content into multiple views.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/textarea/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx b/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx
new file mode 100644
index 00000000..4572394f
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/textarea/index.mdx
@@ -0,0 +1 @@
+`Textarea` component is used for multi-line text input.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/textbox/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx b/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx
new file mode 100644
index 00000000..c6db46d4
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/textbox/index.mdx
@@ -0,0 +1 @@
+`Textbox` component is used for single-line text input.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/theme-button/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx b/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx
new file mode 100644
index 00000000..1cd8b259
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/theme-button/index.mdx
@@ -0,0 +1 @@
+`Theme Button` component is used to switch between light and dark themes.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/toggle/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx b/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx
new file mode 100644
index 00000000..2f8973eb
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/toggle/index.mdx
@@ -0,0 +1 @@
+`Toggle` component allows users to switch between two states.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/tooltip/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx b/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx
new file mode 100644
index 00000000..7e79a439
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/tooltip/index.mdx
@@ -0,0 +1 @@
+`Tooltip` component displays additional information on hover.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx b/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx
new file mode 100644
index 00000000..0519ecba
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/uploader/Api.mdx
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx b/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx
new file mode 100644
index 00000000..150a3bad
--- /dev/null
+++ b/apps/landing/src/app/(detail)/components/[component]/uploader/index.mdx
@@ -0,0 +1 @@
+`Uploader` component allows users to upload files.
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/bottom-sheet/page.mdx b/apps/landing/src/app/(detail)/components/bottom-sheet/page.mdx
deleted file mode 100644
index 8e85ddc0..00000000
--- a/apps/landing/src/app/(detail)/components/bottom-sheet/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Bottom Sheet
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/button/page.tsx b/apps/landing/src/app/(detail)/components/button/page.tsx
deleted file mode 100644
index 2bf48220..00000000
--- a/apps/landing/src/app/(detail)/components/button/page.tsx
+++ /dev/null
@@ -1,60 +0,0 @@
-import { Box, Flex, Text, VStack } from '@devup-ui/react'
-
-import { CustomCode } from '@/components/mdx/components/CustomCode'
-import { CustomH4 } from '@/components/mdx/components/CustomH4'
-import { CustomH6 } from '@/components/mdx/components/CustomH6'
-import { CustomParagraph } from '@/components/mdx/components/CustomParagraph'
-import { CustomPre } from '@/components/mdx/components/CustomPre'
-import { CustomStrong } from '@/components/mdx/components/CustomStrong'
-import { getDemos } from '@/utils/get-demos'
-
-import MdxCard from '../MdxCard'
-import Api from './Api.mdx'
-import Button from './Button.mdx'
-
-export default async function Page() {
- const c = await getDemos(__dirname.split(/[\\/]/).pop()!)
- const m = Math.ceil(c.length / 2)
-
- return (
-
-
-
-
- Examples
-
-
-
- {c.slice(0, m).map(([Demo, src]) => (
- } src={src} />
- ))}
-
-
- {c.slice(m).map(([Demo, src]) => (
- } src={src} />
- ))}
-
-
-
-
-
-
-
- )
-}
diff --git a/apps/landing/src/app/(detail)/components/checkbox/page.mdx b/apps/landing/src/app/(detail)/components/checkbox/page.mdx
deleted file mode 100644
index 0cc86aa8..00000000
--- a/apps/landing/src/app/(detail)/components/checkbox/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Checkbox
diff --git a/apps/landing/src/app/(detail)/components/color-picker/page.mdx b/apps/landing/src/app/(detail)/components/color-picker/page.mdx
deleted file mode 100644
index 5a0cb3c1..00000000
--- a/apps/landing/src/app/(detail)/components/color-picker/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Color Picker
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/confirm/page.mdx b/apps/landing/src/app/(detail)/components/confirm/page.mdx
deleted file mode 100644
index 9add1d26..00000000
--- a/apps/landing/src/app/(detail)/components/confirm/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Confirm
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/date-picker/page.mdx b/apps/landing/src/app/(detail)/components/date-picker/page.mdx
deleted file mode 100644
index 50b9df4a..00000000
--- a/apps/landing/src/app/(detail)/components/date-picker/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Date Picker
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/dropdown/page.mdx b/apps/landing/src/app/(detail)/components/dropdown/page.mdx
deleted file mode 100644
index 28cdcda1..00000000
--- a/apps/landing/src/app/(detail)/components/dropdown/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Dropdown
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/footer/page.mdx b/apps/landing/src/app/(detail)/components/footer/page.mdx
deleted file mode 100644
index c9fb7bf6..00000000
--- a/apps/landing/src/app/(detail)/components/footer/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Footer
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/header/page.mdx b/apps/landing/src/app/(detail)/components/header/page.mdx
deleted file mode 100644
index 7b163ace..00000000
--- a/apps/landing/src/app/(detail)/components/header/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Header
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/label/page.mdx b/apps/landing/src/app/(detail)/components/label/page.mdx
deleted file mode 100644
index 2ed3f167..00000000
--- a/apps/landing/src/app/(detail)/components/label/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Label
diff --git a/apps/landing/src/app/(detail)/components/menu/page.mdx b/apps/landing/src/app/(detail)/components/menu/page.mdx
deleted file mode 100644
index 22e7054b..00000000
--- a/apps/landing/src/app/(detail)/components/menu/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Menu
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/pagination/page.mdx b/apps/landing/src/app/(detail)/components/pagination/page.mdx
deleted file mode 100644
index 4122fb7d..00000000
--- a/apps/landing/src/app/(detail)/components/pagination/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Pagination
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/progress-bar/page.mdx b/apps/landing/src/app/(detail)/components/progress-bar/page.mdx
deleted file mode 100644
index 2d2f5244..00000000
--- a/apps/landing/src/app/(detail)/components/progress-bar/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Progress Bar
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/radio/page.mdx b/apps/landing/src/app/(detail)/components/radio/page.mdx
deleted file mode 100644
index 4f02c541..00000000
--- a/apps/landing/src/app/(detail)/components/radio/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Radio
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/search/page.mdx b/apps/landing/src/app/(detail)/components/search/page.mdx
deleted file mode 100644
index da070d7f..00000000
--- a/apps/landing/src/app/(detail)/components/search/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Search
diff --git a/apps/landing/src/app/(detail)/components/select/page.mdx b/apps/landing/src/app/(detail)/components/select/page.mdx
deleted file mode 100644
index c8a42305..00000000
--- a/apps/landing/src/app/(detail)/components/select/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Select
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/slider/page.mdx b/apps/landing/src/app/(detail)/components/slider/page.mdx
deleted file mode 100644
index b6e8eab4..00000000
--- a/apps/landing/src/app/(detail)/components/slider/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Slider
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/snackbar/page.mdx b/apps/landing/src/app/(detail)/components/snackbar/page.mdx
deleted file mode 100644
index a4e74fb1..00000000
--- a/apps/landing/src/app/(detail)/components/snackbar/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Snackbar
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/stepper/page.mdx b/apps/landing/src/app/(detail)/components/stepper/page.mdx
deleted file mode 100644
index dd8d1281..00000000
--- a/apps/landing/src/app/(detail)/components/stepper/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Stepper
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/tab/page.mdx b/apps/landing/src/app/(detail)/components/tab/page.mdx
deleted file mode 100644
index 826dec4f..00000000
--- a/apps/landing/src/app/(detail)/components/tab/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Tab
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/text-area/page.mdx b/apps/landing/src/app/(detail)/components/text-area/page.mdx
deleted file mode 100644
index b1421398..00000000
--- a/apps/landing/src/app/(detail)/components/text-area/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Text Area
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/text-box/page.mdx b/apps/landing/src/app/(detail)/components/text-box/page.mdx
deleted file mode 100644
index 6291142c..00000000
--- a/apps/landing/src/app/(detail)/components/text-box/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Text Box
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/theme-button/page.mdx b/apps/landing/src/app/(detail)/components/theme-button/page.mdx
deleted file mode 100644
index a1228e75..00000000
--- a/apps/landing/src/app/(detail)/components/theme-button/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Theme Button
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/toggle/page.mdx b/apps/landing/src/app/(detail)/components/toggle/page.mdx
deleted file mode 100644
index c27b5496..00000000
--- a/apps/landing/src/app/(detail)/components/toggle/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Toggle
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/tooltip/page.mdx b/apps/landing/src/app/(detail)/components/tooltip/page.mdx
deleted file mode 100644
index e7f4f198..00000000
--- a/apps/landing/src/app/(detail)/components/tooltip/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Tooltip
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/components/uploader/page.mdx b/apps/landing/src/app/(detail)/components/uploader/page.mdx
deleted file mode 100644
index c8fc04eb..00000000
--- a/apps/landing/src/app/(detail)/components/uploader/page.mdx
+++ /dev/null
@@ -1 +0,0 @@
-# Uploader
\ No newline at end of file
diff --git a/apps/landing/src/app/(detail)/docs/RightIndex.tsx b/apps/landing/src/app/(detail)/docs/RightIndex.tsx
index b116fdba..1f5cf3a8 100644
--- a/apps/landing/src/app/(detail)/docs/RightIndex.tsx
+++ b/apps/landing/src/app/(detail)/docs/RightIndex.tsx
@@ -40,7 +40,7 @@ function IndexMenu({
export function RightIndex() {
const pathname = usePathname()
- const editUrl = `https://github.com/dev-five-git/devup-ui/tree/main/apps/landing/src/app/(detail)/docs${pathname.split('docs')[1]}/page.mdx`
+ const editUrl = `https://github.com/dev-five-git/devup-ui/tree/main/apps/landing/src/app/(detail)/components/${pathname.split('components')[1]}/`
const [menus, setMenus] = useState<
{
text: string
@@ -50,7 +50,7 @@ export function RightIndex() {
>([])
useEffect(() => {
const elements = document.querySelectorAll(
- '.markdown-body h1, .markdown-body h2',
+ '.markdown-body h4, .markdown-body h6',
)
const menus = []
for (let i = 0; i < elements.length; i++) {
@@ -58,7 +58,7 @@ export function RightIndex() {
const text = element.textContent!
menus.push({
text,
- sub: element.tagName === 'H2',
+ sub: element.tagName === 'H6',
onClick: () => {
element.scrollIntoView({ behavior: 'smooth' })
},
diff --git a/apps/landing/src/app/(detail)/docs/layout.tsx b/apps/landing/src/app/(detail)/docs/layout.tsx
index f685f0dd..33f2d7dc 100644
--- a/apps/landing/src/app/(detail)/docs/layout.tsx
+++ b/apps/landing/src/app/(detail)/docs/layout.tsx
@@ -10,7 +10,7 @@ export default function DetailLayout({
}>) {
return (
<>
-
+
@@ -25,7 +25,7 @@ export default function DetailLayout({
>
{children}
-
+
diff --git a/apps/landing/src/app/SponsorButton.tsx b/apps/landing/src/app/SponsorButton.tsx
new file mode 100644
index 00000000..8a97d044
--- /dev/null
+++ b/apps/landing/src/app/SponsorButton.tsx
@@ -0,0 +1,48 @@
+'use client'
+
+import { css, Flex, Image, Text } from '@devup-ui/react'
+import Link from 'next/link'
+
+export default function SponsorButton() {
+ return (
+
+
+
+
+ Sponsor
+
+
+
+ )
+}
diff --git a/apps/landing/src/app/StarButton.tsx b/apps/landing/src/app/StarButton.tsx
new file mode 100644
index 00000000..f3eb6ed1
--- /dev/null
+++ b/apps/landing/src/app/StarButton.tsx
@@ -0,0 +1,68 @@
+import { Center, css, Flex, Image, Text } from '@devup-ui/react'
+import Link from 'next/link'
+
+export default async function StarButton() {
+ const res = await fetch('https://api.github.com/repos/dev-five-git/devup-ui')
+ const data = await res.json()
+ const starCount = data.stargazers_count
+
+ return (
+
+
+
+
+
+ Star
+
+
+
+
+ {starCount}
+
+
+
+
+ )
+}
diff --git a/apps/landing/src/app/page.tsx b/apps/landing/src/app/page.tsx
index f4c3e469..eebec566 100644
--- a/apps/landing/src/app/page.tsx
+++ b/apps/landing/src/app/page.tsx
@@ -1,4 +1,13 @@
-import { Box, css, Flex, Grid, Image, Text, VStack } from '@devup-ui/react'
+import {
+ Box,
+ Center,
+ css,
+ Flex,
+ Grid,
+ Image,
+ Text,
+ VStack,
+} from '@devup-ui/react'
import { Metadata } from 'next'
import Link from 'next/link'
@@ -6,6 +15,8 @@ import { CodeBoard } from '../components/CodeBoard'
import { Container } from '../components/Container'
import { Discord } from '../components/Discord'
import { FeatureCard } from './FeatureCard'
+import SponsorButton from './SponsorButton'
+import StarButton from './StarButton'
export const metadata: Metadata = {
alternates: {
@@ -83,45 +94,57 @@ export default function HomePage() {
optimal performance.
-
-
-
-
-
- Get started
-
-
-
+
+
+
+
-
+
+
+
+
+
+
+ Get started
+
+
+
+
+
+
+
diff --git a/apps/landing/src/utils/get-demos.ts b/apps/landing/src/utils/get-demos.ts
index 447d74c7..c2ca4fbd 100644
--- a/apps/landing/src/utils/get-demos.ts
+++ b/apps/landing/src/utils/get-demos.ts
@@ -1,3 +1,4 @@
+import { existsSync } from 'node:fs'
import { readdir } from 'node:fs/promises'
import { join, relative } from 'node:path'
@@ -10,9 +11,13 @@ export async function getDemos(
'app',
'(detail)',
'components',
+ '[component]',
dir,
'demo',
)
+ if (!existsSync(dirPath)) {
+ return []
+ }
const demos = await readdir(dirPath)
return Promise.all(