@1d1s/design-system 0.2.32 → 0.2.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/dist/components/AchievementBadge/AchievementBadge.d.ts +29 -0
  2. package/dist/components/AchievementBadge/AchievementBadge.stories.d.ts +9 -0
  3. package/dist/components/AchievementBadge/index.d.ts +1 -0
  4. package/dist/components/Banner/Banner.d.ts +36 -0
  5. package/dist/components/Banner/Banner.stories.d.ts +9 -0
  6. package/dist/components/Banner/index.d.ts +1 -0
  7. package/dist/components/BottomNav/BottomNav.d.ts +34 -0
  8. package/dist/components/BottomNav/BottomNav.stories.d.ts +7 -0
  9. package/dist/components/BottomNav/index.d.ts +1 -0
  10. package/dist/components/Button/Button.d.ts +23 -11
  11. package/dist/components/Button/Button.stories.d.ts +7 -7
  12. package/dist/components/Card/Card.d.ts +51 -0
  13. package/dist/components/Card/Card.stories.d.ts +8 -0
  14. package/dist/components/Card/index.d.ts +1 -0
  15. package/dist/components/Checkbox/Checkbox.d.ts +9 -4
  16. package/dist/components/Checkbox/Checkbox.stories.d.ts +2 -1
  17. package/dist/components/CircleAvatar/CircleAvatar.d.ts +30 -2
  18. package/dist/components/CircleAvatar/CircleAvatar.stories.d.ts +5 -0
  19. package/dist/components/CircularProgress/CircularProgress.d.ts +23 -16
  20. package/dist/components/CircularProgress/CircularProgress.stories.d.ts +5 -2
  21. package/dist/components/CommentRow/CommentRow.d.ts +30 -0
  22. package/dist/components/CommentRow/CommentRow.stories.d.ts +8 -0
  23. package/dist/components/CommentRow/index.d.ts +1 -0
  24. package/dist/components/Dropdown/Dropdown.d.ts +24 -45
  25. package/dist/components/Dropdown/Dropdown.stories.d.ts +8 -4
  26. package/dist/components/Dropdown/DropdownMenu.d.ts +29 -0
  27. package/dist/components/Dropdown/MultiSelect.d.ts +26 -0
  28. package/dist/components/Dropdown/index.d.ts +2 -0
  29. package/dist/components/Heatmap/Heatmap.d.ts +35 -0
  30. package/dist/components/Heatmap/Heatmap.stories.d.ts +8 -0
  31. package/dist/components/Heatmap/index.d.ts +1 -0
  32. package/dist/components/Icons/Home.d.ts +2 -0
  33. package/dist/components/Icons/LayoutGrid.d.ts +2 -0
  34. package/dist/components/Icons/index.d.ts +2 -0
  35. package/dist/components/ProgressBar/ProgressBar.d.ts +20 -3
  36. package/dist/components/ProgressBar/ProgressBar.stories.d.ts +1 -0
  37. package/dist/components/Radio/Radio.d.ts +46 -0
  38. package/dist/components/Radio/Radio.stories.d.ts +9 -0
  39. package/dist/components/Radio/index.d.ts +1 -0
  40. package/dist/components/SectionHeader/SectionHeader.d.ts +31 -0
  41. package/dist/components/SectionHeader/SectionHeader.stories.d.ts +9 -0
  42. package/dist/components/SectionHeader/index.d.ts +1 -0
  43. package/dist/components/StatCard/StatCard.d.ts +29 -0
  44. package/dist/components/StatCard/StatCard.stories.d.ts +9 -0
  45. package/dist/components/StatCard/index.d.ts +1 -0
  46. package/dist/components/StatusBadge/StatusBadge.d.ts +28 -0
  47. package/dist/components/StatusBadge/StatusBadge.stories.d.ts +8 -0
  48. package/dist/components/StatusBadge/index.d.ts +1 -0
  49. package/dist/components/Streak/StreakChip.d.ts +20 -0
  50. package/dist/components/Streak/StreakChip.stories.d.ts +8 -0
  51. package/dist/components/Streak/StreakHero.d.ts +23 -0
  52. package/dist/components/Streak/StreakHero.stories.d.ts +8 -0
  53. package/dist/components/Streak/index.d.ts +2 -1
  54. package/dist/components/Stripe/Stripe.d.ts +29 -0
  55. package/dist/components/Stripe/Stripe.stories.d.ts +9 -0
  56. package/dist/components/Stripe/index.d.ts +1 -0
  57. package/dist/components/Tabs/Tabs.d.ts +37 -0
  58. package/dist/components/Tabs/Tabs.stories.d.ts +9 -0
  59. package/dist/components/Tabs/index.d.ts +1 -0
  60. package/dist/components/Tag/ChallengeTag.d.ts +19 -0
  61. package/dist/components/Tag/ChallengeTag.stories.d.ts +8 -0
  62. package/dist/components/Tag/FilterChip.d.ts +25 -0
  63. package/dist/components/Tag/Tag.d.ts +16 -14
  64. package/dist/components/Tag/Tag.stories.d.ts +6 -1
  65. package/dist/components/Tag/index.d.ts +2 -0
  66. package/dist/components/Text/Text.d.ts +2 -2
  67. package/dist/components/TextField/TextArea.d.ts +23 -0
  68. package/dist/components/TextField/TextArea.stories.d.ts +10 -0
  69. package/dist/components/TextField/TextField.d.ts +30 -13
  70. package/dist/components/TextField/TextField.stories.d.ts +7 -4
  71. package/dist/components/TextField/index.d.ts +1 -0
  72. package/dist/components/Toggle/Toggle.d.ts +14 -13
  73. package/dist/components/Toggle/Toggle.stories.d.ts +5 -5
  74. package/dist/components/TopNav/TopNav.d.ts +55 -0
  75. package/dist/components/TopNav/TopNav.stories.d.ts +8 -0
  76. package/dist/components/TopNav/index.d.ts +1 -0
  77. package/dist/components/index.d.ts +14 -25
  78. package/dist/index.es.js +3053 -11804
  79. package/dist/index.umd.js +1 -45
  80. package/package.json +2 -25
  81. package/src/styles/animation.css +109 -35
  82. package/src/styles/colors.css +25 -2
  83. package/src/styles/globals.css +1 -3
  84. package/src/styles/shadow.css +11 -1
  85. package/src/styles/shape.css +4 -0
  86. package/src/styles/typography.css +31 -11
  87. package/dist/components/Accordion/Accordion.d.ts +0 -47
  88. package/dist/components/Accordion/Accordion.stories.d.ts +0 -8
  89. package/dist/components/Accordion/index.d.ts +0 -1
  90. package/dist/components/AppHeader/AppHeader.d.ts +0 -26
  91. package/dist/components/AppHeader/AppHeader.stories.d.ts +0 -9
  92. package/dist/components/AppHeader/index.d.ts +0 -1
  93. package/dist/components/AvatarImagePicker/AvatarImagePicker.d.ts +0 -24
  94. package/dist/components/AvatarImagePicker/AvatarImagePicker.stories.d.ts +0 -7
  95. package/dist/components/AvatarImagePicker/index.d.ts +0 -1
  96. package/dist/components/BannerCarousel/BannerCarousel.d.ts +0 -42
  97. package/dist/components/BannerCarousel/BannerCarousel.stories.d.ts +0 -10
  98. package/dist/components/BannerCarousel/index.d.ts +0 -1
  99. package/dist/components/Calendar/Calendar.d.ts +0 -4
  100. package/dist/components/Calendar/Calendar.stories.d.ts +0 -15
  101. package/dist/components/Calendar/index.d.ts +0 -1
  102. package/dist/components/CheckContainer/CheckContainer.d.ts +0 -17
  103. package/dist/components/CheckContainer/CheckContainer.stories.d.ts +0 -9
  104. package/dist/components/CheckContainer/index.d.ts +0 -1
  105. package/dist/components/CheckList/CheckList.d.ts +0 -37
  106. package/dist/components/CheckList/CheckList.stories.d.ts +0 -9
  107. package/dist/components/CheckList/index.d.ts +0 -1
  108. package/dist/components/CommentThread/CommentThread.d.ts +0 -31
  109. package/dist/components/CommentThread/CommentThread.stories.d.ts +0 -9
  110. package/dist/components/CommentThread/index.d.ts +0 -1
  111. package/dist/components/DatePicker/DatePicker.d.ts +0 -26
  112. package/dist/components/DatePicker/DatePicker.stories.d.ts +0 -7
  113. package/dist/components/DatePicker/index.d.ts +0 -1
  114. package/dist/components/Dialog/Dialog.d.ts +0 -13
  115. package/dist/components/Dialog/Dialog.stories.d.ts +0 -9
  116. package/dist/components/Dialog/index.d.ts +0 -1
  117. package/dist/components/GoalAddList/GoalAddList.d.ts +0 -16
  118. package/dist/components/GoalAddList/GoalAddList.stories.d.ts +0 -7
  119. package/dist/components/GoalAddList/index.d.ts +0 -1
  120. package/dist/components/ImagePicker/ImagePicker.d.ts +0 -50
  121. package/dist/components/ImagePicker/ImagePicker.stories.d.ts +0 -8
  122. package/dist/components/ImagePicker/index.d.ts +0 -1
  123. package/dist/components/ImagePlaceholder/ImagePlaceholder.d.ts +0 -11
  124. package/dist/components/ImagePlaceholder/index.d.ts +0 -1
  125. package/dist/components/InfoButton/InfoButton.d.ts +0 -20
  126. package/dist/components/InfoButton/InfoButton.stories.d.ts +0 -9
  127. package/dist/components/InfoButton/index.d.ts +0 -1
  128. package/dist/components/Layout/Layout.d.ts +0 -69
  129. package/dist/components/Layout/Layout.stories.d.ts +0 -7
  130. package/dist/components/Layout/LayoutContext.d.ts +0 -12
  131. package/dist/components/Layout/index.d.ts +0 -2
  132. package/dist/components/PageWatermark/PageWatermark.d.ts +0 -1
  133. package/dist/components/PageWatermark/PageWatermark.stories.d.ts +0 -6
  134. package/dist/components/PageWatermark/index.d.ts +0 -1
  135. package/dist/components/Pagination/Pagination.d.ts +0 -14
  136. package/dist/components/Pagination/Pagination.stories.d.ts +0 -9
  137. package/dist/components/Pagination/index.d.ts +0 -1
  138. package/dist/components/Profile/Profile.d.ts +0 -37
  139. package/dist/components/Profile/Profile.stories.d.ts +0 -12
  140. package/dist/components/Profile/index.d.ts +0 -1
  141. package/dist/components/RightSidebar/RightSidebar.d.ts +0 -41
  142. package/dist/components/RightSidebar/RightSidebar.stories.d.ts +0 -14
  143. package/dist/components/RightSidebar/index.d.ts +0 -1
  144. package/dist/components/ScheduleCalendar/ScheduleCalendar.d.ts +0 -31
  145. package/dist/components/ScheduleCalendar/ScheduleCalendar.stories.d.ts +0 -10
  146. package/dist/components/ScheduleCalendar/index.d.ts +0 -1
  147. package/dist/components/StatContainer/StatContainer.d.ts +0 -15
  148. package/dist/components/StatContainer/StatContainer.stories.d.ts +0 -7
  149. package/dist/components/StatContainer/index.d.ts +0 -1
  150. package/dist/components/StepIndicator/StepIndicator.d.ts +0 -19
  151. package/dist/components/StepIndicator/StepIndicator.stories.d.ts +0 -10
  152. package/dist/components/StepIndicator/index.d.ts +0 -1
  153. package/dist/components/Streak/Streak.d.ts +0 -31
  154. package/dist/components/Streak/Streak.stories.d.ts +0 -12
  155. package/dist/components/ToggleGroup/ToggleGroup.d.ts +0 -21
  156. package/dist/components/ToggleGroup/ToggleGroup.stories.d.ts +0 -8
  157. package/dist/components/ToggleGroup/index.d.ts +0 -1
  158. package/dist/components/Tooltip/Tooltip.d.ts +0 -7
  159. package/dist/components/Tooltip/Tooltip.stories.d.ts +0 -7
  160. package/dist/components/Tooltip/index.d.ts +0 -1
@@ -0,0 +1,29 @@
1
+ import { default as React } from 'react';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ declare const badgeVariants: (props?: ({
4
+ tone?: "main" | "peach" | "mint" | "blue" | "green" | "gray" | null | undefined;
5
+ layout?: "vertical" | "horizontal" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ export interface AchievementBadgeProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children">, VariantProps<typeof badgeVariants> {
9
+ /** 배지 이모지 또는 아이콘 */
10
+ emoji: React.ReactNode;
11
+ /** 배지 라벨 */
12
+ label: React.ReactNode;
13
+ }
14
+ /**
15
+ * AchievementBadge
16
+ * 마이페이지 / 프로필에 사용하는 업적 배지.
17
+ *
18
+ * @param tone `main` (default) · `peach` · `mint` · `blue` · `green` · `gray`
19
+ * @param layout `vertical` (default) · `horizontal`
20
+ * @param size `sm` · `md` (default) · `lg`
21
+ *
22
+ * @example
23
+ * ```tsx
24
+ * <AchievementBadge emoji="🔥" label="14일 연속" tone="main" />
25
+ * <AchievementBadge emoji="🏆" label="첫 완주" tone="peach" layout="horizontal" />
26
+ * ```
27
+ */
28
+ export declare function AchievementBadge({ emoji, label, tone, layout, size, className, ...props }: AchievementBadgeProps): React.ReactElement;
29
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { AchievementBadge } from './AchievementBadge';
3
+ declare const meta: Meta<typeof AchievementBadge>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof AchievementBadge>;
6
+ export declare const Default: Story;
7
+ export declare const Tones: Story;
8
+ export declare const Horizontal: Story;
9
+ export declare const Sizes: Story;
@@ -0,0 +1 @@
1
+ export * from './AchievementBadge';
@@ -0,0 +1,36 @@
1
+ import { default as React } from 'react';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ import { StatusBadgeKind } from '../StatusBadge';
4
+ declare const bannerVariants: (props?: ({
5
+ tone?: "mint" | "blue" | "gray" | "orange" | "purple" | null | undefined;
6
+ size?: "sm" | "md" | "lg" | null | undefined;
7
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
8
+ export interface BannerProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "title">, VariantProps<typeof bannerVariants> {
9
+ /** 좌상단 상태 라벨 (NEW/HOT/TIP) — string도 허용 */
10
+ kind?: StatusBadgeKind | string;
11
+ /** 제목 — `\n`은 줄바꿈으로 렌더링됨 */
12
+ title: React.ReactNode;
13
+ /** 부제 */
14
+ subtitle?: React.ReactNode;
15
+ /** 우측 슬롯 (CTA / 데코) */
16
+ action?: React.ReactNode;
17
+ /** 사용자 정의 background (CSS 값). 지정 시 tone 무시 */
18
+ bg?: string;
19
+ }
20
+ /**
21
+ * Banner
22
+ * 풀블리드 그라디언트 히어로 배너 — 홈/마이페이지 등.
23
+ *
24
+ * @param tone `orange` (default) · `mint` · `blue` · `purple` · `gray`
25
+ * @param size `sm` · `md` (default) · `lg`
26
+ * @param kind 좌상단 상태 라벨 (StatusBadge inline 형태)
27
+ * @param bg CSS background — 지정 시 tone 무시
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <Banner kind="NEW" title={'5월 챌린지\n시즌 오픈!'} subtitle="함께 도전할 챌린저를 찾아보세요" />
32
+ * <Banner tone="mint" kind="TIP" title="꾸준함이 실력이 됩니다" />
33
+ * ```
34
+ */
35
+ export declare function Banner({ kind, title, subtitle, action, tone, size, bg, className, style, ...props }: BannerProps): React.ReactElement;
36
+ export {};
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Banner } from './Banner';
3
+ declare const meta: Meta<typeof Banner>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Banner>;
6
+ export declare const Default: Story;
7
+ export declare const Tones: Story;
8
+ export declare const WithAction: Story;
9
+ export declare const CustomBg: Story;
@@ -0,0 +1 @@
1
+ export * from './Banner';
@@ -0,0 +1,34 @@
1
+ import { default as React } from 'react';
2
+ export interface BottomNavItem {
3
+ id: string;
4
+ /** 아이콘 노드 (또는 active/inactive 분기용 함수) */
5
+ icon: React.ReactNode | ((active: boolean) => React.ReactNode);
6
+ label: React.ReactNode;
7
+ onClick?: () => void;
8
+ }
9
+ export interface BottomNavProps extends Omit<React.HTMLAttributes<HTMLElement>, "children" | "onChange"> {
10
+ items: BottomNavItem[];
11
+ /** 활성 항목의 id */
12
+ activeId?: string;
13
+ /** 항목 클릭 시 호출 (item.onClick보다 먼저 호출됨) */
14
+ onChange?: (id: string) => void;
15
+ }
16
+ /**
17
+ * BottomNav
18
+ * 모바일 하단 sticky 내비게이션. 4개 탭이 일반적이지만 가변.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <BottomNav
23
+ * activeId={tab}
24
+ * onChange={setTab}
25
+ * items={[
26
+ * { id: 'home', icon: <Home />, label: '홈' },
27
+ * { id: 'challenge', icon: <Grid />, label: '챌린지' },
28
+ * { id: 'diary', icon: <Book />, label: '일지' },
29
+ * { id: 'mypage', icon: <User />, label: '마이' },
30
+ * ]}
31
+ * />
32
+ * ```
33
+ */
34
+ export declare function BottomNav({ items, activeId, onChange, className, ...props }: BottomNavProps): React.ReactElement;
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { BottomNav } from './BottomNav';
3
+ declare const meta: Meta<typeof BottomNav>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof BottomNav>;
6
+ export declare const Default: Story;
7
+ export declare const ActiveStrokeBoost: Story;
@@ -0,0 +1 @@
1
+ export * from './BottomNav';
@@ -1,21 +1,33 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
- declare const customButtonVariants: (props?: ({
3
- variant?: "default" | "outlined" | "secondary" | "ghost" | null | undefined;
4
- size?: "small" | "medium" | "large" | "icon" | null | undefined;
2
+ declare const buttonVariants: (props?: ({
3
+ variant?: "primary" | "secondary" | "soft" | "ghost" | "danger" | null | undefined;
4
+ size?: "sm" | "md" | "lg" | "icon" | "xs" | "xl" | null | undefined;
5
+ pill?: boolean | null | undefined;
6
+ fullWidth?: boolean | null | undefined;
5
7
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
- export interface ButtonProps extends React.ComponentProps<"button">, VariantProps<typeof customButtonVariants> {
8
+ export interface ButtonProps extends Omit<React.ComponentProps<"button">, "size">, VariantProps<typeof buttonVariants> {
9
+ /** asChild로 렌더링하면 자식 엘리먼트에 버튼 props를 머지 (Radix Slot) */
7
10
  asChild?: boolean;
11
+ /** 라벨 좌측 아이콘 */
12
+ iconLeft?: React.ReactNode;
13
+ /** 라벨 우측 아이콘 */
14
+ iconRight?: React.ReactNode;
8
15
  }
9
16
  /**
10
- * Button
11
- * 커스텀 버튼 컴포넌트
12
- * @param variant 버튼스타일 : default, outlined, secondary, ghost
13
- * @param size 버튼 크기 : small, medium, large, icon
17
+ * Button v3
14
18
  *
15
- * @example 기본 버튼
19
+ * @param variant `primary` (default) · `secondary` · `soft` · `ghost` · `danger`
20
+ * @param size `xs` · `sm` · `md` (default) · `lg` · `xl` · `icon`
21
+ * @param pill 둥근 알약형 (rounded-full)
22
+ * @param fullWidth 부모 너비 100%
23
+ * @param iconLeft / iconRight 라벨 양옆 아이콘
24
+ *
25
+ * @example
16
26
  * ```tsx
17
- * <Button variant="default" size="large">Large Button</Button>
27
+ * <Button variant="primary" size="lg" iconLeft={<Plus />}>
28
+ * 새 챌린지
29
+ * </Button>
18
30
  * ```
19
31
  */
20
- export declare function Button({ className, variant, size, asChild, disabled, ...props }: ButtonProps): React.ReactElement;
32
+ export declare function Button({ className, variant, size, pill, fullWidth, asChild, disabled, iconLeft, iconRight, children, ...props }: ButtonProps): React.ReactElement;
21
33
  export {};
@@ -3,11 +3,11 @@ import { Button } from './Button';
3
3
  declare const meta: Meta<typeof Button>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof Button>;
6
- export declare const Large: Story;
7
- export declare const Medium: Story;
8
- export declare const Small: Story;
9
- export declare const Outlined: Story;
10
- export declare const Secondary: Story;
11
- export declare const Ghost: Story;
6
+ export declare const Primary: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const Variants: Story;
9
+ export declare const WithIcons: Story;
10
+ export declare const Pill: Story;
11
+ export declare const FullWidth: Story;
12
+ export declare const IconOnly: Story;
12
13
  export declare const Disabled: Story;
13
- export declare const Icon: Story;
@@ -0,0 +1,51 @@
1
+ import { default as React } from 'react';
2
+ import { VariantProps } from 'class-variance-authority';
3
+ declare const cardVariants: (props?: ({
4
+ radius?: "sm" | "md" | "lg" | "xl" | null | undefined;
5
+ interactive?: boolean | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ export interface CardProps extends React.HTMLAttributes<HTMLDivElement>, VariantProps<typeof cardVariants> {
8
+ }
9
+ /**
10
+ * Card
11
+ * 흰 배경 + 얇은 보더 + 라운드 컨테이너. 챌린지/일지/스탯 카드의 베이스.
12
+ *
13
+ * @param radius `sm`(8) · `md`(12) · `lg`(14, default) · `xl`(16)
14
+ * @param interactive hover lift + shadow
15
+ */
16
+ export declare function Card({ radius, interactive, className, ...props }: CardProps): React.ReactElement;
17
+ export declare namespace Card {
18
+ var Thumb: typeof CardThumb;
19
+ var Body: typeof CardBody;
20
+ var Title: typeof CardTitle;
21
+ var Meta: typeof CardMeta;
22
+ var Overlay: typeof CardOverlay;
23
+ }
24
+ /**
25
+ * Card.Thumb
26
+ * 카드 상단 이미지/플레이스홀더 영역. height/aspect 직접 지정.
27
+ */
28
+ export declare function CardThumb({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
29
+ /**
30
+ * Card.Body
31
+ * 카드 하단 텍스트 영역.
32
+ */
33
+ export declare function CardBody({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
34
+ /**
35
+ * Card.Title
36
+ * 카드 본문 큰 라벨.
37
+ */
38
+ export declare function CardTitle({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
39
+ /**
40
+ * Card.Meta
41
+ * 카드 하단 메타 라인 (좌/우 분할).
42
+ */
43
+ export declare function CardMeta({ className, children, ...props }: React.HTMLAttributes<HTMLDivElement>): React.ReactElement;
44
+ /**
45
+ * Card.Overlay
46
+ * 썸네일 위에 절대 위치로 얹는 라벨 (퍼센트/이모지 등).
47
+ */
48
+ export declare function CardOverlay({ className, children, position, ...props }: React.HTMLAttributes<HTMLDivElement> & {
49
+ position?: "top-left" | "top-right" | "bottom-left" | "bottom-right";
50
+ }): React.ReactElement;
51
+ export {};
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Card } from './Card';
3
+ declare const meta: Meta<typeof Card>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Card>;
6
+ export declare const Empty: Story;
7
+ export declare const ChallengeCard: Story;
8
+ export declare const DiaryCard: Story;
@@ -0,0 +1 @@
1
+ export * from './Card';
@@ -2,13 +2,18 @@ import * as React from "react";
2
2
  import * as CheckboxPrimitive from "@radix-ui/react-checkbox";
3
3
  export interface CheckboxProps extends React.ComponentPropsWithoutRef<typeof CheckboxPrimitive.Root> {
4
4
  label?: string;
5
+ /** 읽기 전용 — 클릭/포커스 비활성, 시각은 유지 */
5
6
  readOnly?: boolean;
6
7
  }
7
8
  /**
8
- * Checkbox
9
- * 왼쪽의 네모 박스 안에 체크 표시가 들어가는 전형적인 체크박스 컴포넌트
9
+ * Checkbox v3
10
+ * 18×18 박스, 체크 brand 컬러로 채움.
11
+ * 체크되면 라벨이 자동으로 회색 + 취소선 처리됨 (체크리스트 스타일).
10
12
  *
11
- * @param label 선택적 텍스트 라벨
12
- * @param readOnly 읽기 전용 여부 (클릭 불가, 시각적 변경 없음)
13
+ * @example
14
+ * ```tsx
15
+ * <Checkbox label="아침 30분 러닝" defaultChecked />
16
+ * <Checkbox label="물 2L 마시기" />
17
+ * ```
13
18
  */
14
19
  export declare const Checkbox: React.ForwardRefExoticComponent<CheckboxProps & React.RefAttributes<HTMLButtonElement>>;
@@ -4,7 +4,8 @@ declare const meta: Meta<typeof Checkbox>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof Checkbox>;
6
6
  export declare const Default: Story;
7
+ export declare const Checked: Story;
7
8
  export declare const WithoutLabel: Story;
8
9
  export declare const Disabled: Story;
9
10
  export declare const ReadOnly: Story;
10
- export declare const List: Story;
11
+ export declare const TodoList: Story;
@@ -1,8 +1,36 @@
1
1
  import { default as React } from 'react';
2
+ import { StripeTone } from '../Stripe';
3
+ export type CircleAvatarSize = "xs" | "sm" | "md" | "lg" | "xl";
4
+ export type CircleAvatarTone = StripeTone;
2
5
  interface CircleAvatarProps {
6
+ /** 사이즈 — 프리셋 또는 px 숫자 (default `"md"` = 40) */
7
+ size?: CircleAvatarSize | number;
8
+ /** 이미지가 없을 때 보여줄 줄무늬 톤 — 프리셋 또는 CSS color 문자열 */
9
+ tone?: CircleAvatarTone | string;
10
+ /** 외곽선 (main-200 컬러). size>40일 때 3px, 아니면 2px */
11
+ ring?: boolean;
12
+ /** 이미지 URL — 비어있거나 로드 실패 시 톤 Stripe 패턴으로 fallback */
3
13
  imageUrl?: string;
4
- size?: 'sm' | 'md' | 'lg' | 'xl';
14
+ /** Stripe 대신 보여줄 커스텀 fallback (이니셜·이모지 등) */
15
+ fallback?: React.ReactNode;
16
+ /** alt 텍스트 */
17
+ alt?: string;
5
18
  className?: string;
6
19
  }
7
- export declare function CircleAvatar({ imageUrl, size, className, }: CircleAvatarProps): React.ReactElement;
20
+ /**
21
+ * CircleAvatar
22
+ * 원형 아바타 — 이미지 또는 톤 Stripe 패턴.
23
+ *
24
+ * @param size `xs`(24)·`sm`(32)·`md`(40, default)·`lg`(56)·`xl`(76)·또는 px 숫자
25
+ * @param tone Stripe 컬러 — `peach`(default)·`cream`·`mint`·`blue`·`sky`·`rose`·`gray`·또는 CSS color
26
+ * @param ring main-200 외곽선 (size>40 → 3px, 이하 → 2px)
27
+ *
28
+ * @example
29
+ * ```tsx
30
+ * <CircleAvatar size="lg" tone="mint" ring />
31
+ * <CircleAvatar imageUrl="/me.jpg" size="md" />
32
+ * <CircleAvatar size={48} tone="#ffbaba" ring />
33
+ * ```
34
+ */
35
+ export declare function CircleAvatar({ size, tone, ring, imageUrl, fallback, alt, className, }: CircleAvatarProps): React.ReactElement;
8
36
  export {};
@@ -4,4 +4,9 @@ declare const meta: Meta<typeof CircleAvatar>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof CircleAvatar>;
6
6
  export declare const Default: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const Tones: Story;
9
+ export declare const CustomTone: Story;
10
+ export declare const NumericSize: Story;
7
11
  export declare const WithImage: Story;
12
+ export declare const WithFallbackNode: Story;
@@ -1,27 +1,34 @@
1
1
  import { default as React } from 'react';
2
- import { VariantProps } from 'class-variance-authority';
3
- declare const circularProgressVariants: (props?: ({
4
- size?: "sm" | "lg" | null | undefined;
5
- } & import('class-variance-authority/types').ClassProp) | undefined) => string;
6
- export type CircularProgressVariants = VariantProps<typeof circularProgressVariants>;
7
- interface CircularProgressProps extends CircularProgressVariants {
2
+ export type CircularProgressSize = "sm" | "md" | "lg" | "xl";
3
+ export interface CircularProgressProps {
4
+ /** 진행률 0~100 */
8
5
  value: number;
6
+ /** 사이즈 프리셋 또는 픽셀 단위 직경 */
7
+ size?: CircularProgressSize | number;
8
+ /** stroke 두께(px). 미지정 시 size 프리셋 값 또는 직경의 1/10 */
9
+ stroke?: number;
10
+ /** 채움 색 — 미지정 시 brand */
11
+ color?: string;
12
+ /** 트랙 색 — 미지정 시 gray-100 */
13
+ trackColor?: string;
14
+ /** 가운데 퍼센트 텍스트 */
9
15
  showPercentage?: boolean;
16
+ /** 가운데에 들어갈 커스텀 노드 (showPercentage보다 우선) */
17
+ centerSlot?: React.ReactNode;
10
18
  className?: string;
11
19
  }
12
20
  /**
13
- * CircularProgress
14
- * 원형 진행률 표시 컴포넌트
21
+ * CircularProgress v3
22
+ * 원형 진행률 track + fill 2-arc SVG.
15
23
  *
16
- * @param value 진행률 (0~100)
17
- * @param size 크기 (sm, lg)
18
- * @param showPercentage 퍼센트 표시 여부
19
- * @param className 추가 클래스 이름
24
+ * @param size `sm`(48) · `md`(72, default) · `lg`(100) · `xl`(140) · 또는 숫자(px)
25
+ * @param stroke stroke 두께 (px)
26
+ * @param color 채움
20
27
  *
21
- * @example 기본 사용
28
+ * @example
22
29
  * ```tsx
23
- * <CircularProgress value={75} size="sm" showPercentage />
30
+ * <CircularProgress value={75} size="lg" />
31
+ * <CircularProgress value={62} size={120} stroke={10} />
24
32
  * ```
25
33
  */
26
- export declare function CircularProgress({ value, size, showPercentage, className, }: CircularProgressProps): React.ReactElement;
27
- export {};
34
+ export declare function CircularProgress({ value, size, stroke, color, trackColor, showPercentage, centerSlot, className, }: CircularProgressProps): React.ReactElement;
@@ -4,5 +4,8 @@ declare const meta: Meta<typeof CircularProgress>;
4
4
  export default meta;
5
5
  type Story = StoryObj<typeof CircularProgress>;
6
6
  export declare const Default: Story;
7
- export declare const Large: Story;
8
- export declare const ExtraLarge: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const CustomSize: Story;
9
+ export declare const CustomColor: Story;
10
+ export declare const NoLabel: Story;
11
+ export declare const CustomCenter: Story;
@@ -0,0 +1,30 @@
1
+ import { default as React } from 'react';
2
+ export interface CommentRowProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "children"> {
3
+ /** 좌측 아바타 슬롯 (CircleAvatar 등). 미지정 시 imageUrl로 자동 생성 */
4
+ avatar?: React.ReactNode;
5
+ /** avatar 미지정 시 사용할 이미지 URL */
6
+ imageUrl?: string;
7
+ /** 작성자 이름 */
8
+ author: React.ReactNode;
9
+ /** 댓글 본문 */
10
+ text: React.ReactNode;
11
+ /** 작성 시간 (예: "1시간 전") */
12
+ time?: React.ReactNode;
13
+ /** 하단 구분선 표시 (default `true`) */
14
+ divider?: boolean;
15
+ }
16
+ /**
17
+ * CommentRow
18
+ * 한 줄 댓글 — 응원 / 단순 댓글 리스트용. 중첩이 필요하면 `CommentThread` 사용.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <CommentRow
23
+ * imageUrl="/users/min.jpg"
24
+ * author="새벽러너"
25
+ * text="5km 축하드려요! 🏃"
26
+ * time="1시간 전"
27
+ * />
28
+ * ```
29
+ */
30
+ export declare function CommentRow({ avatar, imageUrl, author, text, time, divider, className, ...props }: CommentRowProps): React.ReactElement;
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { CommentRow } from './CommentRow';
3
+ declare const meta: Meta<typeof CommentRow>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CommentRow>;
6
+ export declare const Default: Story;
7
+ export declare const Thread: Story;
8
+ export declare const NoDivider: Story;
@@ -0,0 +1 @@
1
+ export * from './CommentRow';
@@ -1,53 +1,32 @@
1
+ import { VariantProps } from 'class-variance-authority';
1
2
  import * as React from "react";
2
- import * as SelectPrimitive from "@radix-ui/react-select";
3
- declare const Select: React.FC<SelectPrimitive.SelectProps>;
4
- declare const SelectGroup: React.ForwardRefExoticComponent<SelectPrimitive.SelectGroupProps & React.RefAttributes<HTMLDivElement>>;
5
- declare const SelectValue: React.ForwardRefExoticComponent<SelectPrimitive.SelectValueProps & React.RefAttributes<HTMLSpanElement>>;
3
+ declare const dropdownTriggerVariants: (props?: ({
4
+ size?: "sm" | "md" | "lg" | null | undefined;
5
+ open?: boolean | null | undefined;
6
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
7
+ export interface DropdownProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "size" | "value">, VariantProps<typeof dropdownTriggerVariants> {
8
+ /** 라벨 (위) */
9
+ label?: React.ReactNode;
10
+ /** 현재 선택값 */
11
+ value?: React.ReactNode;
12
+ /** 미선택 시 표시할 placeholder */
13
+ placeholder?: React.ReactNode;
14
+ /** 부모 너비 100%. false면 240px */
15
+ full?: boolean;
16
+ }
6
17
  /**
7
- * SelectTrigger
8
- * Select 기본 트리거 컴포넌트
18
+ * Dropdown
19
+ * 셀렉트형 버튼 우측 chevron, open 상태에서 brand 보더 + main 글로우.
9
20
  *
10
- * @example
11
- * ```tsx
12
- * <SelectTrigger className="w-[180px]">
13
- * <SelectValue placeholder="값을 선택해주세요" />
14
- * </SelectTrigger>
15
- * ```
16
- */
17
- declare function SelectTrigger({ className, size, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Trigger> & {
18
- size?: "sm" | "default";
19
- }): React.ReactElement;
20
- /**
21
- * SelectItem
22
- * Select 기본 아이템 컴포넌트
23
- *
24
- * @example
25
- * ```tsx
26
- * <SelectItem value="option1">value1</SelectItem>
27
- * ```
28
- */
29
- declare function SelectItem({ className, children, ...props }: React.ComponentProps<typeof SelectPrimitive.Item>): React.ReactElement;
30
- /**
31
- * SelectSeparator
32
- * Select 구분선 컴포넌트
33
- */
34
- declare function SelectSeparator({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Separator>): React.ReactElement;
35
- declare function SelectScrollUpButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollUpButton>): React.ReactElement;
36
- declare function SelectScrollDownButton({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.ScrollDownButton>): React.ReactElement;
37
- /**
38
- * SelectContent
39
- * Select 기본 컨텐츠 컴포넌트
21
+ * @param size `sm` · `md` (default) · `lg`
22
+ * @param open 메뉴 열림 시각 상태 (실제 메뉴 렌더링은 별도)
40
23
  *
41
24
  * @example
42
25
  * ```tsx
43
- * <SelectContent>
44
- * <SelectGroup>
45
- * <SelectItem value="option1">Option 1</SelectItem>
46
- * <SelectItem value="option2">Option 2</SelectItem>
47
- * </SelectGroup>
48
- * </SelectContent>
26
+ * <Dropdown value="인기순" />
27
+ * <Dropdown placeholder="카테고리 선택" />
28
+ * <Dropdown value="운동" open />
49
29
  * ```
50
30
  */
51
- declare function SelectContent({ className, children, position, ...props }: React.ComponentProps<typeof SelectPrimitive.Content>): React.ReactElement;
52
- declare function SelectLabel({ className, ...props }: React.ComponentProps<typeof SelectPrimitive.Label>): React.ReactElement;
53
- export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, };
31
+ export declare const Dropdown: React.ForwardRefExoticComponent<DropdownProps & React.RefAttributes<HTMLButtonElement>>;
32
+ export {};
@@ -1,7 +1,11 @@
1
1
  import { Meta, StoryObj } from '@storybook/react-vite';
2
- import { Select } from './Dropdown';
3
- declare const meta: Meta<typeof Select>;
2
+ import { Dropdown } from './Dropdown';
3
+ declare const meta: Meta<typeof Dropdown>;
4
4
  export default meta;
5
- type Story = StoryObj<typeof Select>;
5
+ type Story = StoryObj<typeof Dropdown>;
6
6
  export declare const Default: Story;
7
- export declare const Small: Story;
7
+ export declare const Sizes: Story;
8
+ export declare const States: Story;
9
+ export declare const Interactive: Story;
10
+ export declare const MenuOnly: Story;
11
+ export declare const Multi: Story;
@@ -0,0 +1,29 @@
1
+ import * as React from "react";
2
+ export interface DropdownMenuItem {
3
+ value: string;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface DropdownMenuProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "onSelect" | "children"> {
8
+ items: DropdownMenuItem[];
9
+ /** 현재 선택된 value */
10
+ value?: string;
11
+ /** 선택 시 콜백 */
12
+ onSelect?: (value: string) => void;
13
+ /** 메뉴 너비 (default 240) */
14
+ width?: number | string;
15
+ }
16
+ /**
17
+ * DropdownMenu
18
+ * Dropdown 트리거 아래 띄우는 항목 목록 — 선택된 항목은 brand + check.
19
+ *
20
+ * @example
21
+ * ```tsx
22
+ * <DropdownMenu
23
+ * items={[{ value: 'recent', label: '최신순' }, { value: 'popular', label: '인기순' }]}
24
+ * value="popular"
25
+ * onSelect={(v) => setSort(v)}
26
+ * />
27
+ * ```
28
+ */
29
+ export declare function DropdownMenu({ items, value, onSelect, width, className, style, ...props }: DropdownMenuProps): React.ReactElement;
@@ -0,0 +1,26 @@
1
+ import * as React from "react";
2
+ export interface MultiSelectProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange" | "children"> {
3
+ /** 선택된 값 라벨 배열 */
4
+ selected: string[];
5
+ /** placeholder 텍스트 (예: "카테고리 선택", "4 외 더 추가") */
6
+ placeholder?: React.ReactNode;
7
+ /** 칩 X 버튼 클릭 시 콜백 */
8
+ onRemove?: (value: string) => void;
9
+ /** 클릭 시 콜백 (메뉴 열기 등) */
10
+ onAddClick?: () => void;
11
+ }
12
+ /**
13
+ * MultiSelect
14
+ * 선택된 값을 brand-soft 칩 묶음으로 보여주는 multi-tag 입력. 칩에 X 버튼.
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <MultiSelect
19
+ * selected={['운동', '건강']}
20
+ * placeholder="4 외 더 추가"
21
+ * onRemove={(v) => setTags(tags.filter(t => t !== v))}
22
+ * onAddClick={openMenu}
23
+ * />
24
+ * ```
25
+ */
26
+ export declare function MultiSelect({ selected, placeholder, onRemove, onAddClick, className, ...props }: MultiSelectProps): React.ReactElement;
@@ -1 +1,3 @@
1
1
  export * from './Dropdown';
2
+ export * from './DropdownMenu';
3
+ export * from './MultiSelect';