mirror of
https://github.com/vercel/commerce.git
synced 2025-07-22 12:24:18 +00:00
.vscode
assets
components
auth
cart
common
icons
product
ui
Button
Container
Grid
Hero
Input
Link
LoadingDots
Logo
Marquee
Modal
Sidebar
Skeleton
Text
Text.module.css
Text.tsx
index.ts
README.md
context.tsx
index.ts
wishlist
config
framework
lib
pages
public
.editorconfig
.env.template
.gitignore
.prettierignore
.prettierrc
README.md
codegen.json
commerce.config.json
global.d.ts
license.md
next-env.d.ts
next.config.js
package.json
postcss.config.js
tailwind.config.js
tsconfig.json
yarn.lock
68 lines
1.3 KiB
TypeScript
68 lines
1.3 KiB
TypeScript
import React, {
|
|
FunctionComponent,
|
|
JSXElementConstructor,
|
|
CSSProperties,
|
|
} from 'react'
|
|
import cn from 'classnames'
|
|
import s from './Text.module.css'
|
|
|
|
interface Props {
|
|
variant?: Variant
|
|
className?: string
|
|
style?: CSSProperties
|
|
children?: React.ReactNode | any
|
|
html?: string
|
|
}
|
|
|
|
type Variant = 'heading' | 'body' | 'pageHeading' | 'sectionHeading'
|
|
|
|
const Text: FunctionComponent<Props> = ({
|
|
style,
|
|
className = '',
|
|
variant = 'body',
|
|
children,
|
|
html,
|
|
}) => {
|
|
const componentsMap: {
|
|
[P in Variant]: React.ComponentType<any> | string
|
|
} = {
|
|
body: 'div',
|
|
heading: 'h1',
|
|
pageHeading: 'h1',
|
|
sectionHeading: 'h2',
|
|
}
|
|
|
|
const Component:
|
|
| JSXElementConstructor<any>
|
|
| React.ReactElement<any>
|
|
| React.ComponentType<any>
|
|
| string = componentsMap![variant!]
|
|
|
|
const htmlContentProps = html
|
|
? {
|
|
dangerouslySetInnerHTML: { __html: html },
|
|
}
|
|
: {}
|
|
|
|
return (
|
|
<Component
|
|
className={cn(
|
|
s.root,
|
|
{
|
|
[s.body]: variant === 'body',
|
|
[s.heading]: variant === 'heading',
|
|
[s.pageHeading]: variant === 'pageHeading',
|
|
[s.sectionHeading]: variant === 'sectionHeading',
|
|
},
|
|
className
|
|
)}
|
|
style={style}
|
|
{...htmlContentProps}
|
|
>
|
|
{children}
|
|
</Component>
|
|
)
|
|
}
|
|
|
|
export default Text
|