@anker-in/headless-ui 0.0.27-alpha.0 → 0.0.27-alpha.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/dist/cjs/biz-components/BrandEquity/BrandEquity.js +1 -1
- package/dist/cjs/biz-components/BrandEquity/BrandEquity.js.map +2 -2
- package/dist/cjs/biz-components/Category/index.js +1 -1
- package/dist/cjs/biz-components/Category/index.js.map +2 -2
- package/dist/cjs/biz-components/Evaluate/index.d.ts +1 -0
- package/dist/cjs/biz-components/Evaluate/index.js +1 -1
- package/dist/cjs/biz-components/Evaluate/index.js.map +3 -3
- package/dist/cjs/biz-components/Marquee/index.js +1 -1
- package/dist/cjs/biz-components/Marquee/index.js.map +2 -2
- package/dist/cjs/biz-components/MemberEquity/index.js +30 -30
- package/dist/cjs/biz-components/MemberEquity/index.js.map +2 -2
- package/dist/cjs/biz-components/ShelfDisplay/index.js +9 -9
- package/dist/cjs/biz-components/ShelfDisplay/index.js.map +2 -2
- package/dist/cjs/biz-components/Slogan/index.js +1 -1
- package/dist/cjs/biz-components/Slogan/index.js.map +2 -2
- package/dist/cjs/components/button.js +1 -1
- package/dist/cjs/components/button.js.map +2 -2
- package/dist/cjs/components/card.js +1 -1
- package/dist/cjs/components/card.js.map +2 -2
- package/dist/cjs/components/carousel.js +1 -1
- package/dist/cjs/components/carousel.js.map +2 -2
- package/dist/cjs/components/container.js +1 -1
- package/dist/cjs/components/container.js.map +2 -2
- package/dist/cjs/components/dialog.js +1 -1
- package/dist/cjs/components/dialog.js.map +2 -2
- package/dist/cjs/components/gird.js +1 -1
- package/dist/cjs/components/gird.js.map +2 -2
- package/dist/cjs/components/heading.d.ts +1 -1
- package/dist/cjs/components/heading.js +1 -1
- package/dist/cjs/components/heading.js.map +2 -2
- package/dist/cjs/components/text.js +1 -1
- package/dist/cjs/components/text.js.map +1 -1
- package/dist/cjs/stories/container.stories.js +6 -6
- package/dist/cjs/stories/container.stories.js.map +2 -2
- package/dist/cjs/stories/dialog.stories.js +1 -1
- package/dist/cjs/stories/dialog.stories.js.map +2 -2
- package/dist/cjs/stories/evaluate.stories.js +1 -1
- package/dist/cjs/stories/evaluate.stories.js.map +2 -2
- package/dist/cjs/stories/heading.stories.d.ts +3 -2
- package/dist/cjs/stories/heading.stories.js +1 -1
- package/dist/cjs/stories/heading.stories.js.map +2 -2
- package/dist/cjs/stories/text.stories.js +1 -1
- package/dist/cjs/stories/text.stories.js.map +2 -2
- package/dist/esm/biz-components/BrandEquity/BrandEquity.js +1 -1
- package/dist/esm/biz-components/BrandEquity/BrandEquity.js.map +2 -2
- package/dist/esm/biz-components/Category/index.js +1 -1
- package/dist/esm/biz-components/Category/index.js.map +2 -2
- package/dist/esm/biz-components/Evaluate/index.d.ts +1 -0
- package/dist/esm/biz-components/Evaluate/index.js +1 -1
- package/dist/esm/biz-components/Evaluate/index.js.map +3 -3
- package/dist/esm/biz-components/Marquee/index.js +1 -1
- package/dist/esm/biz-components/Marquee/index.js.map +2 -2
- package/dist/esm/biz-components/MemberEquity/index.js +29 -29
- package/dist/esm/biz-components/MemberEquity/index.js.map +2 -2
- package/dist/esm/biz-components/ShelfDisplay/index.js +9 -9
- package/dist/esm/biz-components/ShelfDisplay/index.js.map +2 -2
- package/dist/esm/biz-components/Slogan/index.js +1 -1
- package/dist/esm/biz-components/Slogan/index.js.map +2 -2
- package/dist/esm/components/button.js +1 -1
- package/dist/esm/components/button.js.map +2 -2
- package/dist/esm/components/card.js +1 -1
- package/dist/esm/components/card.js.map +2 -2
- package/dist/esm/components/carousel.js +1 -1
- package/dist/esm/components/carousel.js.map +2 -2
- package/dist/esm/components/container.js +1 -1
- package/dist/esm/components/container.js.map +2 -2
- package/dist/esm/components/dialog.js +1 -1
- package/dist/esm/components/dialog.js.map +2 -2
- package/dist/esm/components/gird.js +1 -1
- package/dist/esm/components/gird.js.map +2 -2
- package/dist/esm/components/heading.d.ts +1 -1
- package/dist/esm/components/heading.js +1 -1
- package/dist/esm/components/heading.js.map +2 -2
- package/dist/esm/components/text.js +1 -1
- package/dist/esm/components/text.js.map +1 -1
- package/dist/esm/stories/container.stories.js +6 -6
- package/dist/esm/stories/container.stories.js.map +2 -2
- package/dist/esm/stories/dialog.stories.js +1 -1
- package/dist/esm/stories/dialog.stories.js.map +2 -2
- package/dist/esm/stories/evaluate.stories.js +1 -1
- package/dist/esm/stories/evaluate.stories.js.map +2 -2
- package/dist/esm/stories/heading.stories.d.ts +3 -2
- package/dist/esm/stories/heading.stories.js +1 -1
- package/dist/esm/stories/heading.stories.js.map +2 -2
- package/dist/esm/stories/text.stories.js +2 -2
- package/dist/esm/stories/text.stories.js.map +2 -2
- package/package.json +2 -3
- package/style.css +44 -30
- package/src/biz-components/BrandEquity/BrandEquity.tsx +0 -77
- package/src/biz-components/BrandEquity/index.ts +0 -1
- package/src/biz-components/Category/index.tsx +0 -57
- package/src/biz-components/Evaluate/index.tsx +0 -85
- package/src/biz-components/HeroBanner/HeroBanner.tsx +0 -103
- package/src/biz-components/HeroBanner/index.tsx +0 -1
- package/src/biz-components/HeroBanner/types.ts +0 -28
- package/src/biz-components/Marquee/index.tsx +0 -79
- package/src/biz-components/MemberEquity/index.tsx +0 -114
- package/src/biz-components/MemberEquity/types.ts +0 -26
- package/src/biz-components/Shelf/Shelf.tsx +0 -22
- package/src/biz-components/Shelf/index.ts +0 -1
- package/src/biz-components/Shelf/types.ts +0 -6
- package/src/biz-components/ShelfDisplay/index.tsx +0 -142
- package/src/biz-components/Slogan/index.tsx +0 -53
- package/src/biz-components/Slogan/types.ts +0 -25
- package/src/biz-components/index.ts +0 -11
- package/src/components/alert.tsx +0 -124
- package/src/components/avatar.tsx +0 -126
- package/src/components/badge.tsx +0 -27
- package/src/components/button.tsx +0 -183
- package/src/components/card.tsx +0 -51
- package/src/components/carousel.tsx +0 -352
- package/src/components/checkbox.tsx +0 -42
- package/src/components/color.tsx +0 -77
- package/src/components/container.tsx +0 -28
- package/src/components/dialog.tsx +0 -98
- package/src/components/drawer.tsx +0 -115
- package/src/components/drop-down.tsx +0 -182
- package/src/components/gird.tsx +0 -90
- package/src/components/heading.tsx +0 -80
- package/src/components/index.ts +0 -26
- package/src/components/input-number.tsx +0 -216
- package/src/components/input.tsx +0 -79
- package/src/components/link.tsx +0 -99
- package/src/components/picture.tsx +0 -100
- package/src/components/popover.tsx +0 -31
- package/src/components/radio.tsx +0 -85
- package/src/components/skeleton.tsx +0 -41
- package/src/components/tabs.tsx +0 -78
- package/src/components/text.tsx +0 -99
- package/src/components/theme.tsx +0 -20
- package/src/helpers/component-props.ts +0 -17
- package/src/helpers/constants.ts +0 -0
- package/src/helpers/index.ts +0 -2
- package/src/helpers/utils.ts +0 -16
- package/src/icons/spinner.tsx +0 -26
- package/src/index.ts +0 -1
- package/src/shared/Styles.tsx +0 -94
- package/src/stories/HeroBanner.stories.tsx +0 -86
- package/src/stories/MemberEquity.stories.tsx +0 -107
- package/src/stories/alert.stories.tsx +0 -41
- package/src/stories/avatar.stories.tsx +0 -83
- package/src/stories/badge.stories.tsx +0 -40
- package/src/stories/brandEquity.stories.tsx +0 -73
- package/src/stories/button.stories.tsx +0 -145
- package/src/stories/card.stories.tsx +0 -97
- package/src/stories/carousel.stories.tsx +0 -161
- package/src/stories/category.stories.tsx +0 -52
- package/src/stories/checkbox.stories.tsx +0 -93
- package/src/stories/container.stories.tsx +0 -97
- package/src/stories/dialog.stories.tsx +0 -74
- package/src/stories/drawer.stories.tsx +0 -88
- package/src/stories/drop-down.stories.tsx +0 -83
- package/src/stories/evaluate.stories.tsx +0 -53
- package/src/stories/grid.stories.tsx +0 -190
- package/src/stories/heading.stories.tsx +0 -96
- package/src/stories/input-number.stories.tsx +0 -52
- package/src/stories/input.stories.tsx +0 -64
- package/src/stories/link.stories.tsx +0 -142
- package/src/stories/marquee.stories.tsx +0 -102
- package/src/stories/picture.stories.tsx +0 -51
- package/src/stories/popover.stories.tsx +0 -41
- package/src/stories/radio.stories.tsx +0 -55
- package/src/stories/shelf.stories.tsx +0 -35
- package/src/stories/shelfDisplay.stories.tsx +0 -69
- package/src/stories/skeleton.stories.tsx +0 -67
- package/src/stories/slogan.stories.tsx +0 -99
- package/src/stories/tabs.stories.tsx +0 -179
- package/src/stories/text.stories.tsx +0 -130
- package/src/styles/global.css +0 -4
- package/src/styles/index.css +0 -0
- package/src/types/index.ts +0 -0
- package/src/types/props.ts +0 -5
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import React, { useEffect, useRef, forwardRef } from 'react'
|
|
4
|
-
import fitty from 'fitty'
|
|
5
|
-
import type { FittyInstance } from 'fitty'
|
|
6
|
-
import * as AvatarPrimitive from '@radix-ui/react-avatar'
|
|
7
|
-
import { type VariantProps, cva } from 'class-variance-authority'
|
|
8
|
-
import { cn } from '../helpers/index.js'
|
|
9
|
-
|
|
10
|
-
// 定义 avatar 的样式变体
|
|
11
|
-
const avatarVariants = cva('tracking transition-colors', {
|
|
12
|
-
variants: {
|
|
13
|
-
size: {
|
|
14
|
-
small: 'size-6', // 小
|
|
15
|
-
medium: 'size-12', // 中
|
|
16
|
-
large: 'size-[72px]', // 大
|
|
17
|
-
},
|
|
18
|
-
},
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
type AvatarProps = {
|
|
22
|
-
/** 定义子组件作为父组件的类型,详细使用方式请参考radix-ui */
|
|
23
|
-
asChild?: boolean
|
|
24
|
-
/** 类名*/
|
|
25
|
-
className?: string
|
|
26
|
-
/** 样式*/
|
|
27
|
-
style?: React.CSSProperties
|
|
28
|
-
/** 点击事件*/
|
|
29
|
-
onClick?: Function
|
|
30
|
-
/** 文本自适应*/
|
|
31
|
-
isAdaptation?: boolean
|
|
32
|
-
/** 文本自适应最小字体, 开启时生效*/
|
|
33
|
-
minSize?: number
|
|
34
|
-
/** 文本自适应最大字体, 开启时生效*/
|
|
35
|
-
maxSize?: number
|
|
36
|
-
/** 文本自适应的类, 开启时生效*/
|
|
37
|
-
textClassName?: string
|
|
38
|
-
} & VariantProps<typeof avatarVariants> &
|
|
39
|
-
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Root>
|
|
40
|
-
|
|
41
|
-
const Avatar = forwardRef<React.ElementRef<typeof AvatarPrimitive.Root>, AvatarProps>(
|
|
42
|
-
(
|
|
43
|
-
{
|
|
44
|
-
className,
|
|
45
|
-
textClassName,
|
|
46
|
-
isAdaptation = false,
|
|
47
|
-
minSize = 4,
|
|
48
|
-
maxSize = 16,
|
|
49
|
-
children,
|
|
50
|
-
style,
|
|
51
|
-
size = 'small',
|
|
52
|
-
onClick,
|
|
53
|
-
...props
|
|
54
|
-
},
|
|
55
|
-
ref
|
|
56
|
-
) => {
|
|
57
|
-
const textRef = useRef<HTMLDivElement>(null)
|
|
58
|
-
// 点击事件
|
|
59
|
-
const handleClick = (e: React.MouseEvent<HTMLSpanElement, MouseEvent>) => {
|
|
60
|
-
onClick?.(e)
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
useEffect(() => {
|
|
64
|
-
let fittyInstance: FittyInstance
|
|
65
|
-
if (isAdaptation && textRef.current) {
|
|
66
|
-
fittyInstance = fitty?.(textRef.current, {
|
|
67
|
-
minSize,
|
|
68
|
-
maxSize,
|
|
69
|
-
})
|
|
70
|
-
}
|
|
71
|
-
return () => fittyInstance?.unsubscribe?.()
|
|
72
|
-
}, [])
|
|
73
|
-
|
|
74
|
-
return (
|
|
75
|
-
<AvatarPrimitive.Root
|
|
76
|
-
ref={ref}
|
|
77
|
-
onClick={handleClick}
|
|
78
|
-
className={cn(
|
|
79
|
-
avatarVariants({ size }),
|
|
80
|
-
'bg-bg-2 relative flex shrink-0 overflow-hidden rounded-full',
|
|
81
|
-
className
|
|
82
|
-
)}
|
|
83
|
-
{...(style ? { style: style } : null)}
|
|
84
|
-
{...props}
|
|
85
|
-
>
|
|
86
|
-
{isAdaptation ? (
|
|
87
|
-
<span className="bg-muted flex size-full items-center justify-center rounded-full">
|
|
88
|
-
<span ref={textRef} className={cn('px-2', textClassName)}>
|
|
89
|
-
{children}
|
|
90
|
-
</span>
|
|
91
|
-
</span>
|
|
92
|
-
) : (
|
|
93
|
-
children
|
|
94
|
-
)}
|
|
95
|
-
</AvatarPrimitive.Root>
|
|
96
|
-
)
|
|
97
|
-
}
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
Avatar.displayName = 'Avatar'
|
|
101
|
-
|
|
102
|
-
const AvatarImage = forwardRef<
|
|
103
|
-
React.ElementRef<typeof AvatarPrimitive.Image>,
|
|
104
|
-
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Image>
|
|
105
|
-
>(({ className, ...props }, ref) => (
|
|
106
|
-
<AvatarPrimitive.Image ref={ref} className={cn('aspect-square size-full', className)} {...props} />
|
|
107
|
-
))
|
|
108
|
-
|
|
109
|
-
AvatarImage.displayName = AvatarPrimitive.Image.displayName
|
|
110
|
-
|
|
111
|
-
const AvatarFallback = forwardRef<
|
|
112
|
-
React.ElementRef<typeof AvatarPrimitive.Fallback>,
|
|
113
|
-
React.ComponentPropsWithoutRef<typeof AvatarPrimitive.Fallback>
|
|
114
|
-
>(({ className, ...props }, ref) => {
|
|
115
|
-
return (
|
|
116
|
-
<AvatarPrimitive.Fallback
|
|
117
|
-
ref={ref}
|
|
118
|
-
className={cn('bg-muted flex size-full items-center justify-center rounded-full', className)}
|
|
119
|
-
{...props}
|
|
120
|
-
/>
|
|
121
|
-
)
|
|
122
|
-
})
|
|
123
|
-
|
|
124
|
-
AvatarFallback.displayName = AvatarPrimitive.Fallback.displayName
|
|
125
|
-
|
|
126
|
-
export { Avatar, AvatarImage, AvatarFallback }
|
package/src/components/badge.tsx
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
import { type VariantProps, cva } from 'class-variance-authority'
|
|
3
|
-
|
|
4
|
-
import { cn } from '../helpers/index.js'
|
|
5
|
-
|
|
6
|
-
const badgeVariants = cva(
|
|
7
|
-
'inline-flex justify-center text-btn-primary border-btn-primary items-center font-medium rounded-[20px] border px-[10px] py-1 text-xs transition-colors focus:outline-none',
|
|
8
|
-
{
|
|
9
|
-
variants: {
|
|
10
|
-
size: {
|
|
11
|
-
sm: 'text-xs',
|
|
12
|
-
base: 'text-sm',
|
|
13
|
-
}
|
|
14
|
-
},
|
|
15
|
-
defaultVariants: {
|
|
16
|
-
size: 'base',
|
|
17
|
-
},
|
|
18
|
-
}
|
|
19
|
-
)
|
|
20
|
-
|
|
21
|
-
export interface BadgeProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof badgeVariants> { }
|
|
22
|
-
|
|
23
|
-
function Badge({ className, size, ...props }: BadgeProps) {
|
|
24
|
-
return <div className={cn(badgeVariants({ size }), className)} {...props} />
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
export default Badge
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
'use client'
|
|
2
|
-
|
|
3
|
-
import * as React from 'react'
|
|
4
|
-
import { Slot } from '@radix-ui/react-slot'
|
|
5
|
-
import { VisuallyHidden } from '@radix-ui/react-visually-hidden'
|
|
6
|
-
import { type VariantProps, cva } from 'class-variance-authority'
|
|
7
|
-
import Spinner from '../icons/spinner.js'
|
|
8
|
-
import { cn } from '../helpers/index.js'
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Button Variants
|
|
12
|
-
*/
|
|
13
|
-
const buttonVariants = cva(
|
|
14
|
-
'ring-offset-background focus-visible:ring-ring rounded-btn inline-flex items-center justify-center text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none',
|
|
15
|
-
{
|
|
16
|
-
variants: {
|
|
17
|
-
variant: {
|
|
18
|
-
nature: 'border border-solid border-black',
|
|
19
|
-
primary: 'bg-btn-primary text-btn-primary-foreground hover:bg-btn-primary-active',
|
|
20
|
-
secondary:
|
|
21
|
-
'bg-btn-secondary text-btn-secondary-foreground hover:bg-btn-secondary-active hover:text-btn-secondary border border-solid',
|
|
22
|
-
link: 'text-primary underline-offset-4 hover:underline',
|
|
23
|
-
ghost: 'hover:bg-btn-primary hover:text-btn-primary-foreground',
|
|
24
|
-
},
|
|
25
|
-
size: {
|
|
26
|
-
sm: 'px-3 py-2 text-[12px] leading-tight',
|
|
27
|
-
base: 'px-5 pt-[11px] pb-[10px] text-[14px] leading-tight',
|
|
28
|
-
lg: 'px-7 pt-[15px] pb-[14px] text-[16px] leading-tight',
|
|
29
|
-
icon: 'size-10 rounded-full leading-tight',
|
|
30
|
-
},
|
|
31
|
-
/** hover 状态下的动画效果,需要注意不同variant 下的效果 */
|
|
32
|
-
hoverEffect: {
|
|
33
|
-
none: '',
|
|
34
|
-
slide: '',
|
|
35
|
-
},
|
|
36
|
-
state: {
|
|
37
|
-
default: '',
|
|
38
|
-
disabled: '',
|
|
39
|
-
loading: '',
|
|
40
|
-
},
|
|
41
|
-
theme: {
|
|
42
|
-
dark: '',
|
|
43
|
-
light: '',
|
|
44
|
-
},
|
|
45
|
-
},
|
|
46
|
-
compoundVariants: [
|
|
47
|
-
{
|
|
48
|
-
variant: 'primary',
|
|
49
|
-
hoverEffect: 'slide',
|
|
50
|
-
class:
|
|
51
|
-
'z-[1] before:-z-[1] before:rounded-btn hover:!bg-btn-primary before:bg-btn-primary-active relative overflow-hidden before:absolute before:inset-y-0 before:w-full before:-translate-x-full before:transition-transform before:duration-300 before:ease-in-out before:content-[""] hover:before:translate-x-0',
|
|
52
|
-
},
|
|
53
|
-
{
|
|
54
|
-
variant: 'secondary',
|
|
55
|
-
hoverEffect: 'slide',
|
|
56
|
-
class:
|
|
57
|
-
'z-[1] before:-z-[1] before:rounded-btn hover:!bg-btn-secondary before:bg-btn-secondary-active relative overflow-hidden before:absolute before:inset-y-0 before:w-full before:-translate-x-full before:transition-transform before:duration-300 before:ease-in-out before:content-[""] hover:before:translate-x-0',
|
|
58
|
-
},
|
|
59
|
-
{
|
|
60
|
-
variant: 'primary',
|
|
61
|
-
state: 'loading',
|
|
62
|
-
class: 'bg-btn-primary',
|
|
63
|
-
},
|
|
64
|
-
{
|
|
65
|
-
variant: 'secondary',
|
|
66
|
-
state: 'loading',
|
|
67
|
-
class: 'bg-btn-secondary disabled:bg-btn-secondary-disabled disabled:text-btn-secondary-disabled-foreground',
|
|
68
|
-
},
|
|
69
|
-
{
|
|
70
|
-
variant: 'primary',
|
|
71
|
-
state: 'disabled',
|
|
72
|
-
class: 'disabled:bg-btn-primary-disabled disabled:text-btn-primary-disabled-foreground',
|
|
73
|
-
},
|
|
74
|
-
{
|
|
75
|
-
variant: 'secondary',
|
|
76
|
-
state: 'disabled',
|
|
77
|
-
class: 'disabled:bg-btn-secondary-disabled disabled:text-btn-secondary-disabled-foreground',
|
|
78
|
-
},
|
|
79
|
-
{
|
|
80
|
-
variant: 'nature',
|
|
81
|
-
theme: 'dark',
|
|
82
|
-
class: 'bg-transparent text-black',
|
|
83
|
-
},
|
|
84
|
-
{
|
|
85
|
-
variant: 'nature',
|
|
86
|
-
theme: 'light',
|
|
87
|
-
class: 'bg-black text-white',
|
|
88
|
-
},
|
|
89
|
-
],
|
|
90
|
-
defaultVariants: {
|
|
91
|
-
variant: 'primary',
|
|
92
|
-
size: 'base',
|
|
93
|
-
hoverEffect: 'none',
|
|
94
|
-
state: 'default',
|
|
95
|
-
theme: 'light',
|
|
96
|
-
},
|
|
97
|
-
}
|
|
98
|
-
)
|
|
99
|
-
|
|
100
|
-
const loadingSvgVariants = cva('', {
|
|
101
|
-
variants: {
|
|
102
|
-
variant: {
|
|
103
|
-
nature: 'stroke-btn-primary-foreground',
|
|
104
|
-
primary: 'stroke-btn-primary-foreground',
|
|
105
|
-
secondary: 'stroke-btn-secondary-foreground',
|
|
106
|
-
link: 'stroke-primary',
|
|
107
|
-
ghost: 'stroke-primary',
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
defaultVariants: {
|
|
111
|
-
variant: 'primary',
|
|
112
|
-
},
|
|
113
|
-
})
|
|
114
|
-
|
|
115
|
-
export interface ButtonProps
|
|
116
|
-
extends React.ButtonHTMLAttributes<HTMLButtonElement>,
|
|
117
|
-
VariantProps<typeof buttonVariants> {
|
|
118
|
-
/** 设置按钮载入状态 */
|
|
119
|
-
loading?: boolean
|
|
120
|
-
/** 设置按钮失效状态 */
|
|
121
|
-
disabled?: boolean
|
|
122
|
-
/** 定义自组件作为父组件的类型, 详细使用方式请参考radix-ui */
|
|
123
|
-
asChild?: boolean
|
|
124
|
-
/** 自定义loading */
|
|
125
|
-
spinner?: React.ReactNode
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
const Button = React.forwardRef<HTMLButtonElement, ButtonProps>(
|
|
129
|
-
(
|
|
130
|
-
{
|
|
131
|
-
asChild = false,
|
|
132
|
-
size = 'base',
|
|
133
|
-
children,
|
|
134
|
-
variant,
|
|
135
|
-
theme = 'light',
|
|
136
|
-
hoverEffect = 'none',
|
|
137
|
-
className,
|
|
138
|
-
disabled = false,
|
|
139
|
-
loading = false,
|
|
140
|
-
spinner,
|
|
141
|
-
...props
|
|
142
|
-
}: ButtonProps,
|
|
143
|
-
ref
|
|
144
|
-
) => {
|
|
145
|
-
const Comp = asChild ? Slot : 'button'
|
|
146
|
-
const isInactive = disabled || loading
|
|
147
|
-
const state = loading ? 'loading' : disabled ? 'disabled' : 'default'
|
|
148
|
-
|
|
149
|
-
return (
|
|
150
|
-
<Comp
|
|
151
|
-
disabled={isInactive}
|
|
152
|
-
className={cn(buttonVariants({ variant, size, hoverEffect, state, theme }), className)}
|
|
153
|
-
ref={ref}
|
|
154
|
-
{...props}
|
|
155
|
-
>
|
|
156
|
-
{loading ? (
|
|
157
|
-
<>
|
|
158
|
-
<span style={{ display: 'contents', visibility: 'hidden' }} aria-hidden>
|
|
159
|
-
{children}
|
|
160
|
-
</span>
|
|
161
|
-
<span className="absolute">
|
|
162
|
-
{spinner ? (
|
|
163
|
-
spinner
|
|
164
|
-
) : (
|
|
165
|
-
<Spinner
|
|
166
|
-
className={loadingSvgVariants({
|
|
167
|
-
variant,
|
|
168
|
-
})}
|
|
169
|
-
/>
|
|
170
|
-
)}
|
|
171
|
-
</span>
|
|
172
|
-
<VisuallyHidden>{children}</VisuallyHidden>
|
|
173
|
-
</>
|
|
174
|
-
) : (
|
|
175
|
-
children
|
|
176
|
-
)}
|
|
177
|
-
</Comp>
|
|
178
|
-
)
|
|
179
|
-
}
|
|
180
|
-
)
|
|
181
|
-
|
|
182
|
-
Button.displayName = 'Button'
|
|
183
|
-
export default Button
|
package/src/components/card.tsx
DELETED
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
import * as React from 'react'
|
|
2
|
-
|
|
3
|
-
import { cn } from '../helpers/index.js'
|
|
4
|
-
|
|
5
|
-
const Card = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(({ className, ...props }, ref) => (
|
|
6
|
-
<div ref={ref} className={cn('bg-card text-card-foreground rounded-lg border shadow-sm', className)} {...props} />
|
|
7
|
-
))
|
|
8
|
-
Card.displayName = 'Card'
|
|
9
|
-
|
|
10
|
-
const CardHeader = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
11
|
-
({ className, ...props }, ref) => (
|
|
12
|
-
<div
|
|
13
|
-
ref={ref}
|
|
14
|
-
className={cn('min-xl:px-6 min-xl:pt-[32px] flex flex-col space-y-1.5 px-4 pt-6', className)}
|
|
15
|
-
{...props}
|
|
16
|
-
/>
|
|
17
|
-
)
|
|
18
|
-
)
|
|
19
|
-
CardHeader.displayName = 'CardHeader'
|
|
20
|
-
|
|
21
|
-
const CardTitle = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
22
|
-
({ className, ...props }, ref) => (
|
|
23
|
-
<div ref={ref} className={cn('text-2xl font-semibold leading-none tracking-tight', className)} {...props} />
|
|
24
|
-
)
|
|
25
|
-
)
|
|
26
|
-
CardTitle.displayName = 'CardTitle'
|
|
27
|
-
|
|
28
|
-
const CardDescription = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
29
|
-
({ className, ...props }, ref) => (
|
|
30
|
-
<div ref={ref} className={cn('text-muted-foreground text-sm', className)} {...props} />
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
CardDescription.displayName = 'CardDescription'
|
|
34
|
-
|
|
35
|
-
const CardContent = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
36
|
-
({ className, ...props }, ref) => <div ref={ref} className={cn('min-xl:p-6 p-4 pt-0', className)} {...props} />
|
|
37
|
-
)
|
|
38
|
-
CardContent.displayName = 'CardContent'
|
|
39
|
-
|
|
40
|
-
const CardFooter = React.forwardRef<HTMLDivElement, React.HTMLAttributes<HTMLDivElement>>(
|
|
41
|
-
({ className, ...props }, ref) => (
|
|
42
|
-
<div
|
|
43
|
-
ref={ref}
|
|
44
|
-
className={cn('min-xl:px-6 min-xl:pb-[32px] flex items-center px-4 pb-6 pt-0', className)}
|
|
45
|
-
{...props}
|
|
46
|
-
/>
|
|
47
|
-
)
|
|
48
|
-
)
|
|
49
|
-
CardFooter.displayName = 'CardFooter'
|
|
50
|
-
|
|
51
|
-
export { Card, CardHeader, CardFooter, CardTitle, CardDescription, CardContent }
|