@1d1s/design-system 1.0.0 → 1.2.0

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 (80) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +47 -0
  2. package/dist/components/Accordion/Accordion.stories.d.ts +8 -0
  3. package/dist/components/Accordion/index.d.ts +1 -0
  4. package/dist/components/AppHeader/AppHeader.d.ts +26 -0
  5. package/dist/components/AppHeader/AppHeader.stories.d.ts +9 -0
  6. package/dist/components/AppHeader/index.d.ts +1 -0
  7. package/dist/components/AvatarImagePicker/AvatarImagePicker.d.ts +24 -0
  8. package/dist/components/AvatarImagePicker/AvatarImagePicker.stories.d.ts +7 -0
  9. package/dist/components/AvatarImagePicker/index.d.ts +1 -0
  10. package/dist/components/BannerCarousel/BannerCarousel.d.ts +42 -0
  11. package/dist/components/BannerCarousel/BannerCarousel.stories.d.ts +10 -0
  12. package/dist/components/BannerCarousel/index.d.ts +1 -0
  13. package/dist/components/BottomSheet/BottomSheet.d.ts +19 -0
  14. package/dist/components/BottomSheet/BottomSheet.stories.d.ts +7 -0
  15. package/dist/components/BottomSheet/index.d.ts +2 -0
  16. package/dist/components/Button/Button.d.ts +2 -2
  17. package/dist/components/Calendar/Calendar.d.ts +4 -0
  18. package/dist/components/Calendar/Calendar.stories.d.ts +15 -0
  19. package/dist/components/Calendar/index.d.ts +1 -0
  20. package/dist/components/CheckContainer/CheckContainer.d.ts +17 -0
  21. package/dist/components/CheckContainer/CheckContainer.stories.d.ts +9 -0
  22. package/dist/components/CheckContainer/index.d.ts +1 -0
  23. package/dist/components/CheckList/CheckList.d.ts +37 -0
  24. package/dist/components/CheckList/CheckList.stories.d.ts +9 -0
  25. package/dist/components/CheckList/index.d.ts +1 -0
  26. package/dist/components/CommentThread/CommentThread.d.ts +31 -0
  27. package/dist/components/CommentThread/CommentThread.stories.d.ts +9 -0
  28. package/dist/components/CommentThread/index.d.ts +1 -0
  29. package/dist/components/DatePicker/DatePicker.d.ts +26 -0
  30. package/dist/components/DatePicker/DatePicker.stories.d.ts +7 -0
  31. package/dist/components/DatePicker/index.d.ts +1 -0
  32. package/dist/components/Dialog/Dialog.d.ts +78 -0
  33. package/dist/components/Dialog/Dialog.stories.d.ts +11 -0
  34. package/dist/components/Dialog/index.d.ts +2 -0
  35. package/dist/components/GoalAddList/GoalAddList.d.ts +16 -0
  36. package/dist/components/GoalAddList/GoalAddList.stories.d.ts +7 -0
  37. package/dist/components/GoalAddList/index.d.ts +1 -0
  38. package/dist/components/ImagePicker/ImagePicker.d.ts +50 -0
  39. package/dist/components/ImagePicker/ImagePicker.stories.d.ts +8 -0
  40. package/dist/components/ImagePicker/index.d.ts +1 -0
  41. package/dist/components/ImagePlaceholder/ImagePlaceholder.d.ts +11 -0
  42. package/dist/components/ImagePlaceholder/index.d.ts +1 -0
  43. package/dist/components/PageWatermark/PageWatermark.d.ts +1 -0
  44. package/dist/components/PageWatermark/PageWatermark.stories.d.ts +6 -0
  45. package/dist/components/PageWatermark/index.d.ts +1 -0
  46. package/dist/components/RightSidebar/RightSidebar.d.ts +41 -0
  47. package/dist/components/RightSidebar/RightSidebar.stories.d.ts +14 -0
  48. package/dist/components/RightSidebar/index.d.ts +1 -0
  49. package/dist/components/ScheduleCalendar/ScheduleCalendar.d.ts +31 -0
  50. package/dist/components/ScheduleCalendar/ScheduleCalendar.stories.d.ts +10 -0
  51. package/dist/components/ScheduleCalendar/index.d.ts +1 -0
  52. package/dist/components/Select/Select.d.ts +53 -0
  53. package/dist/components/Select/index.d.ts +1 -0
  54. package/dist/components/Snackbar/Snackbar.d.ts +20 -0
  55. package/dist/components/Snackbar/Snackbar.stories.d.ts +8 -0
  56. package/dist/components/Snackbar/SnackbarProvider.d.ts +33 -0
  57. package/dist/components/Snackbar/index.d.ts +4 -0
  58. package/dist/components/StatCard/StatCard.d.ts +1 -1
  59. package/dist/components/StepIndicator/StepIndicator.d.ts +19 -0
  60. package/dist/components/StepIndicator/StepIndicator.stories.d.ts +10 -0
  61. package/dist/components/StepIndicator/index.d.ts +1 -0
  62. package/dist/components/Streak/Streak.d.ts +31 -0
  63. package/dist/components/Streak/index.d.ts +1 -0
  64. package/dist/components/Tag/Tag.d.ts +1 -1
  65. package/dist/components/Text/Text.d.ts +1 -1
  66. package/dist/components/TextField/TextField.d.ts +2 -2
  67. package/dist/components/Toast/Toast.d.ts +53 -0
  68. package/dist/components/Toast/Toast.stories.d.ts +10 -0
  69. package/dist/components/Toast/ToastProvider.d.ts +40 -0
  70. package/dist/components/Toast/index.d.ts +4 -0
  71. package/dist/components/ToggleGroup/ToggleGroup.d.ts +21 -0
  72. package/dist/components/ToggleGroup/ToggleGroup.stories.d.ts +8 -0
  73. package/dist/components/ToggleGroup/index.d.ts +1 -0
  74. package/dist/components/Tooltip/Tooltip.d.ts +7 -0
  75. package/dist/components/Tooltip/Tooltip.stories.d.ts +7 -0
  76. package/dist/components/Tooltip/index.d.ts +1 -0
  77. package/dist/components/index.d.ts +23 -0
  78. package/dist/index.es.js +12933 -2593
  79. package/dist/index.umd.js +45 -1
  80. package/package.json +9 -1
@@ -0,0 +1,47 @@
1
+ import * as React from "react";
2
+ import * as AccordionPrimitive from "@radix-ui/react-accordion";
3
+ /**
4
+ * Accordion
5
+ * 아코디언 컴포넌트 - 접을 수 있는 콘텐츠 섹션을 제공합니다.
6
+ *
7
+ * @example 단일 아코디언
8
+ * ```tsx
9
+ * <Accordion type="single" collapsible>
10
+ * <AccordionItem value="item-1">
11
+ * <AccordionTrigger>제목</AccordionTrigger>
12
+ * <AccordionContent>내용</AccordionContent>
13
+ * </AccordionItem>
14
+ * </Accordion>
15
+ * ```
16
+ *
17
+ * @example 다중 아코디언
18
+ * ```tsx
19
+ * <Accordion type="multiple">
20
+ * <AccordionItem value="item-1">
21
+ * <AccordionTrigger>제목 1</AccordionTrigger>
22
+ * <AccordionContent>내용 1</AccordionContent>
23
+ * </AccordionItem>
24
+ * <AccordionItem value="item-2">
25
+ * <AccordionTrigger>제목 2</AccordionTrigger>
26
+ * <AccordionContent>내용 2</AccordionContent>
27
+ * </AccordionItem>
28
+ * </Accordion>
29
+ * ```
30
+ */
31
+ declare const Accordion: React.ForwardRefExoticComponent<(AccordionPrimitive.AccordionSingleProps | AccordionPrimitive.AccordionMultipleProps) & React.RefAttributes<HTMLDivElement>>;
32
+ /**
33
+ * AccordionItem
34
+ * 각 아코디언 항목을 감싸는 컨테이너
35
+ */
36
+ declare function AccordionItem({ className, ...props }: React.ComponentProps<typeof AccordionPrimitive.Item>): React.ReactElement;
37
+ /**
38
+ * AccordionTrigger
39
+ * 아코디언을 열고 닫는 트리거 버튼
40
+ */
41
+ declare function AccordionTrigger({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Trigger>): React.ReactElement;
42
+ /**
43
+ * AccordionContent
44
+ * 아코디언의 접히는 콘텐츠 영역
45
+ */
46
+ declare function AccordionContent({ className, children, ...props }: React.ComponentProps<typeof AccordionPrimitive.Content>): React.ReactElement;
47
+ export { Accordion, AccordionItem, AccordionTrigger, AccordionContent };
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Accordion } from './Accordion';
3
+ declare const meta: Meta<typeof Accordion>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Accordion>;
6
+ export declare const Single: Story;
7
+ export declare const Multiple: Story;
8
+ export declare const DefaultOpen: Story;
@@ -0,0 +1 @@
1
+ export * from './Accordion';
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ export interface AppHeaderNavItem {
3
+ key: string;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface AppHeaderProps {
8
+ brandName?: string;
9
+ logo?: React.ReactNode;
10
+ navItems?: AppHeaderNavItem[];
11
+ activeKey?: string;
12
+ showProfile?: boolean;
13
+ profileImage?: string;
14
+ showBackButton?: boolean;
15
+ onBackClick?(): void;
16
+ className?: string;
17
+ onLogoClick?(): void;
18
+ onNavChange?(key: string): void;
19
+ onNotificationClick?(): void;
20
+ onProfileClick?(): void;
21
+ }
22
+ /**
23
+ * AppHeader
24
+ * 로고, 주요 네비게이션, 우측 액션 아이콘을 포함한 상단 헤더 컴포넌트.
25
+ */
26
+ export declare function AppHeader({ brandName, logo, navItems, activeKey, showProfile, profileImage, showBackButton, onBackClick, className, onLogoClick, onNavChange, onNotificationClick, onProfileClick, }: AppHeaderProps): React.ReactElement;
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { AppHeader } from './AppHeader';
3
+ declare const meta: Meta<typeof AppHeader>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof AppHeader>;
6
+ export declare const WithProfile: Story;
7
+ export declare const WithoutProfile: Story;
8
+ export declare const WithBackButton: Story;
9
+ export declare const Mobile: Story;
@@ -0,0 +1 @@
1
+ export * from './AppHeader';
@@ -0,0 +1,24 @@
1
+ import { default as React } from 'react';
2
+ export interface AvatarImagePickerProps extends Omit<React.ComponentPropsWithoutRef<"input">, "size"> {
3
+ /** 원형 이미지 영역 지름(px) */
4
+ size?: number;
5
+ /** 초기 이미지 URL */
6
+ defaultImageUrl?: string;
7
+ /** 하단 변경 버튼 텍스트 */
8
+ changeLabel?: string;
9
+ }
10
+ /**
11
+ * AvatarImagePicker
12
+ * 이미지 업로드 및 미리보기를 위한 컴포넌트
13
+ *
14
+ * @param onChange 파일 선택 시 호출되는 콜백 함수(optional)
15
+ * @param size 원형 이미지 영역 지름(px), 기본값 300
16
+ * @param defaultImageUrl 초기 이미지 URL
17
+ * @param changeLabel 하단 변경 버튼 텍스트(기본값: Change)
18
+ *
19
+ * @example 기본 사용
20
+ * ```tsx
21
+ * <AvatarImagePicker onChange={(e) => console.log(e.target.files)} />
22
+ * ```
23
+ */
24
+ export declare function AvatarImagePicker({ onChange, size, defaultImageUrl, changeLabel, ...props }: AvatarImagePickerProps): React.ReactElement;
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { AvatarImagePicker } from './AvatarImagePicker';
3
+ declare const meta: Meta<typeof AvatarImagePicker>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof AvatarImagePicker>;
6
+ export declare const Default: Story;
7
+ export declare const WithImage: Story;
@@ -0,0 +1 @@
1
+ export * from './AvatarImagePicker';
@@ -0,0 +1,42 @@
1
+ import { default as React } from 'react';
2
+ export interface BannerCarouselItem {
3
+ id?: string | number;
4
+ type: string;
5
+ title: string;
6
+ subtitle: string;
7
+ backgroundImageUrl?: string;
8
+ /** @deprecated `backgroundImageUrl`을 사용하세요. */
9
+ backgroundImage?: string;
10
+ }
11
+ export interface BannerTrackingPayload {
12
+ event: "impression" | "click" | "change";
13
+ componentId?: string;
14
+ bannerId: string;
15
+ bannerIndex: number;
16
+ bannerType: string;
17
+ bannerTitle: string;
18
+ bannerSubtitle: string;
19
+ timestamp: number;
20
+ }
21
+ export interface BannerCarouselProps extends React.HTMLAttributes<HTMLDivElement> {
22
+ items: BannerCarouselItem[];
23
+ autoSlideIntervalMs?: number;
24
+ initialIndex?: number;
25
+ enableLoop?: boolean;
26
+ showIndicators?: boolean;
27
+ aspectRatioClassName?: string;
28
+ minHeightPx?: number;
29
+ componentId?: string;
30
+ enableDataLayerTracking?: boolean;
31
+ impressionMode?: "once" | "always";
32
+ onBannerClick?(payload: BannerTrackingPayload): void;
33
+ onBannerImpression?(payload: BannerTrackingPayload): void;
34
+ onBannerChange?(payload: BannerTrackingPayload): void;
35
+ onItemClick?(item: BannerCarouselItem, index: number): void;
36
+ }
37
+ /**
38
+ * BannerCarousel
39
+ * 메인 배너 슬라이더 컴포넌트. 자동 슬라이드, 무한 루프, 인디케이터를 지원하며
40
+ * 클릭/노출 추적 콜백 및 dataLayer 이벤트 전송 포인트를 제공합니다.
41
+ */
42
+ export declare function BannerCarousel({ items, autoSlideIntervalMs, initialIndex, enableLoop, showIndicators, aspectRatioClassName, minHeightPx, componentId, enableDataLayerTracking, impressionMode, onBannerClick, onBannerImpression, onBannerChange, onItemClick, className, ...props }: BannerCarouselProps): React.ReactElement | null;
@@ -0,0 +1,10 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { BannerCarousel } from './BannerCarousel';
3
+ declare const meta: Meta<typeof BannerCarousel>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof BannerCarousel>;
6
+ export declare const Default: Story;
7
+ export declare const ImageBackground: Story;
8
+ export declare const Mobile: Story;
9
+ export declare const NoAutoSlide: Story;
10
+ export declare const NoIndicators: Story;
@@ -0,0 +1 @@
1
+ export * from './BannerCarousel';
@@ -0,0 +1,19 @@
1
+ import * as React from "react";
2
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
3
+ declare const BottomSheet: React.FC<DialogPrimitive.DialogProps>;
4
+ declare const BottomSheetTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
5
+ declare const BottomSheetPortal: React.FC<DialogPrimitive.DialogPortalProps>;
6
+ declare const BottomSheetClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare function BottomSheetOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.ReactElement;
8
+ export interface BottomSheetContentProps extends React.ComponentProps<typeof DialogPrimitive.Content> {
9
+ /** 시트 좌·우·하단 inset (px). 기본 8 */
10
+ inset?: number;
11
+ /** 상단 그립 핸들 노출 (기본 true) */
12
+ showHandle?: boolean;
13
+ }
14
+ declare function BottomSheetContent({ className, children, inset, showHandle, style, ...props }: BottomSheetContentProps): React.ReactElement;
15
+ declare function BottomSheetHeader({ className, ...props }: React.ComponentProps<"div">): React.ReactElement;
16
+ declare function BottomSheetFooter({ className, ...props }: React.ComponentProps<"div">): React.ReactElement;
17
+ declare function BottomSheetTitle({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.ReactElement;
18
+ declare function BottomSheetDescription({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.ReactElement;
19
+ export { BottomSheet, BottomSheetTrigger, BottomSheetPortal, BottomSheetClose, BottomSheetOverlay, BottomSheetContent, BottomSheetHeader, BottomSheetFooter, BottomSheetTitle, BottomSheetDescription, };
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { BottomSheet } from './BottomSheet';
3
+ declare const meta: Meta<typeof BottomSheet>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof BottomSheet>;
6
+ export declare const MoodPicker: Story;
7
+ export declare const Options: Story;
@@ -0,0 +1,2 @@
1
+ export { BottomSheet, BottomSheetTrigger, BottomSheetPortal, BottomSheetClose, BottomSheetOverlay, BottomSheetContent, BottomSheetHeader, BottomSheetFooter, BottomSheetTitle, BottomSheetDescription, } from './BottomSheet';
2
+ export type { BottomSheetContentProps } from './BottomSheet';
@@ -1,7 +1,7 @@
1
1
  import { VariantProps } from 'class-variance-authority';
2
2
  declare const buttonVariants: (props?: ({
3
- variant?: "primary" | "secondary" | "soft" | "ghost" | "danger" | null | undefined;
4
- size?: "sm" | "md" | "lg" | "icon" | "xs" | "xl" | null | undefined;
3
+ variant?: "default" | "primary" | "secondary" | "soft" | "ghost" | "danger" | "outlined" | null | undefined;
4
+ size?: "small" | "sm" | "md" | "lg" | "medium" | "xs" | "xl" | "icon" | "large" | null | undefined;
5
5
  pill?: boolean | null | undefined;
6
6
  fullWidth?: boolean | null | undefined;
7
7
  } & import('class-variance-authority/types').ClassProp) | undefined) => string;
@@ -0,0 +1,4 @@
1
+ import { DayPicker } from 'react-day-picker';
2
+ import * as React from 'react';
3
+ declare function Calendar({ className, classNames, showOutsideDays, ...props }: React.ComponentProps<typeof DayPicker>): React.ReactElement;
4
+ export { Calendar };
@@ -0,0 +1,15 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Calendar } from './Calendar';
3
+ declare const meta: Meta<typeof Calendar>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Calendar>;
6
+ export declare const Default: Story;
7
+ export declare const Range: Story;
8
+ /** 오늘로부터 N일 이전/이후만 클릭 가능 */
9
+ export declare const DisabledOutsideRange: Story;
10
+ /** 오늘 이후 날짜만 클릭 가능 (과거 비활성화) */
11
+ export declare const DisabledPastDays: Story;
12
+ /** 오늘 이전 날짜만 클릭 가능 (미래 비활성화) */
13
+ export declare const DisabledFutureDays: Story;
14
+ /** 특정 날짜 범위만 클릭 가능 */
15
+ export declare const DisabledWithCustomMatcher: Story;
@@ -0,0 +1 @@
1
+ export * from './Calendar';
@@ -0,0 +1,17 @@
1
+ import { default as React } from 'react';
2
+ export interface CheckContainerProps extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "onChange"> {
3
+ label?: React.ReactNode;
4
+ icon?: React.ReactNode;
5
+ children?: React.ReactNode;
6
+ checked?: boolean;
7
+ defaultChecked?: boolean;
8
+ onCheckedChange?(checked: boolean): void;
9
+ showCheckIndicator?: boolean;
10
+ width?: number | string;
11
+ height?: number | string;
12
+ }
13
+ /**
14
+ * CheckContainer
15
+ * 선택 가능한 카드형 컨테이너. 우측 상단 체크 인디케이터 표시 여부를 제어할 수 있습니다.
16
+ */
17
+ export declare function CheckContainer({ label, icon, children, checked, defaultChecked, onCheckedChange, showCheckIndicator, width, height, className, disabled, onClick, style, "aria-label": ariaLabel, ...props }: CheckContainerProps): React.ReactElement;
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { CheckContainer } from './CheckContainer';
3
+ declare const meta: Meta<typeof CheckContainer>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CheckContainer>;
6
+ export declare const WithIndicator: Story;
7
+ export declare const WithoutIndicator: Story;
8
+ export declare const CustomSize: Story;
9
+ export declare const WithCustomContent: Story;
@@ -0,0 +1 @@
1
+ export * from './CheckContainer';
@@ -0,0 +1,37 @@
1
+ import { default as React } from 'react';
2
+ export interface CheckListOption {
3
+ id: string;
4
+ label: React.ReactNode;
5
+ disabled?: boolean;
6
+ }
7
+ export interface CheckListProps {
8
+ /** 체크박스 옵션 목록 */
9
+ options: CheckListOption[];
10
+ /** 선택된 옵션의 ID 목록 */
11
+ value: string[];
12
+ /** 선택 변경 시 호출되는 콜백 */
13
+ onValueChange: (value: string[]) => void;
14
+ /** 추가 클래스 */
15
+ className?: string;
16
+ /** 읽기 전용 여부 (시각 변화 없이 토글만 비활성화) */
17
+ readOnly?: boolean;
18
+ /** 전체 비활성화 여부 */
19
+ disabled?: boolean;
20
+ }
21
+ /**
22
+ * CheckList
23
+ * 여러 개의 Checkbox를 리스트 형태로 보여주고 다중 선택을 관리하는 컴포넌트
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <CheckList
28
+ * options={[
29
+ * { id: '1', label: '옵션 1' },
30
+ * { id: '2', label: '옵션 2' }
31
+ * ]}
32
+ * value={selectedIds}
33
+ * onValueChange={setSelectedIds}
34
+ * />
35
+ * ```
36
+ */
37
+ export declare function CheckList({ options, value, onValueChange, className, readOnly, disabled, }: CheckListProps): React.ReactElement;
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { CheckList } from './CheckList';
3
+ declare const meta: Meta<typeof CheckList>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CheckList>;
6
+ export declare const Default: Story;
7
+ export declare const Empty: Story;
8
+ export declare const Disabled: Story;
9
+ export declare const ReadOnly: Story;
@@ -0,0 +1 @@
1
+ export * from './CheckList';
@@ -0,0 +1,31 @@
1
+ import { default as React } from 'react';
2
+ export interface CommentAuthor {
3
+ id: string;
4
+ nickname: string;
5
+ profileImageUrl?: string;
6
+ }
7
+ export interface CommentNode {
8
+ id: string;
9
+ content: string;
10
+ createdAt: string;
11
+ author: CommentAuthor;
12
+ replies?: CommentNode[];
13
+ isAuthor?: boolean;
14
+ hasMoreReplies?: boolean;
15
+ remainingReplyCount?: number;
16
+ isLoadingReplies?: boolean;
17
+ }
18
+ export interface CommentThreadProps {
19
+ comments: CommentNode[];
20
+ currentUserId?: string;
21
+ className?: string;
22
+ replyPlaceholder?: string;
23
+ replySubmitLabel?: string;
24
+ replyCancelLabel?: string;
25
+ loadMoreRepliesLabel?: string;
26
+ onDelete?(comment: CommentNode): void;
27
+ onReport?(comment: CommentNode): void;
28
+ onReplySubmit?(comment: CommentNode, content: string): void;
29
+ onLoadMoreReplies?(comment: CommentNode): void;
30
+ }
31
+ export declare function CommentThread({ comments, currentUserId, className, replyPlaceholder, replySubmitLabel, replyCancelLabel, loadMoreRepliesLabel, onReplySubmit, onLoadMoreReplies, onDelete, onReport, }: CommentThreadProps): React.ReactElement;
@@ -0,0 +1,9 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { CommentThread } from './CommentThread';
3
+ declare const meta: Meta<typeof CommentThread>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof CommentThread>;
6
+ export declare const Default: Story;
7
+ export declare const Empty: Story;
8
+ export declare const LongContent: Story;
9
+ export declare const ManyReplies: Story;
@@ -0,0 +1 @@
1
+ export * from './CommentThread';
@@ -0,0 +1,26 @@
1
+ import { default as React } from 'react';
2
+ import { DateRange } from 'react-day-picker';
3
+ interface BasePickerProps {
4
+ className?: string;
5
+ placeholder?: string;
6
+ disableClickPropagation?: boolean;
7
+ }
8
+ export interface DatePickerProps extends BasePickerProps {
9
+ value: Date | undefined;
10
+ onChange(date: Date | undefined): void;
11
+ }
12
+ export interface RangeDatePickerProps extends BasePickerProps {
13
+ value: DateRange | undefined;
14
+ onChange(range: DateRange | undefined): void;
15
+ }
16
+ /**
17
+ * DatePicker
18
+ * 단일 날짜를 선택하는 시안형 Date Picker 컴포넌트.
19
+ */
20
+ export declare function DatePicker({ value, onChange, className, placeholder, disableClickPropagation, }: DatePickerProps): React.ReactElement;
21
+ /**
22
+ * RangeDatePicker
23
+ * 시작일/종료일 범위를 선택하는 시안형 Date Range Picker 컴포넌트.
24
+ */
25
+ export declare function RangeDatePicker({ value, onChange, className, placeholder, disableClickPropagation, }: RangeDatePickerProps): React.ReactElement;
26
+ export {};
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { DatePicker } from './DatePicker';
3
+ declare const meta: Meta<typeof DatePicker>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof DatePicker>;
6
+ export declare const Single: Story;
7
+ export declare const Range: Story;
@@ -0,0 +1 @@
1
+ export * from './DatePicker';
@@ -0,0 +1,78 @@
1
+ import { VariantProps } from 'class-variance-authority';
2
+ import { IconName } from '../Icons/Icon';
3
+ import * as React from "react";
4
+ import * as DialogPrimitive from "@radix-ui/react-dialog";
5
+ declare const Dialog: React.FC<DialogPrimitive.DialogProps>;
6
+ declare const DialogTrigger: React.ForwardRefExoticComponent<DialogPrimitive.DialogTriggerProps & React.RefAttributes<HTMLButtonElement>>;
7
+ declare const DialogPortal: React.FC<DialogPrimitive.DialogPortalProps>;
8
+ declare const DialogClose: React.ForwardRefExoticComponent<DialogPrimitive.DialogCloseProps & React.RefAttributes<HTMLButtonElement>>;
9
+ declare function DialogOverlay({ className, ...props }: React.ComponentProps<typeof DialogPrimitive.Overlay>): React.ReactElement;
10
+ declare const dialogContentVariants: (props?: ({
11
+ size?: "sm" | "md" | "lg" | "xl" | null | undefined;
12
+ } & import('class-variance-authority/types').ClassProp) | undefined) => string;
13
+ export interface DialogContentProps extends React.ComponentProps<typeof DialogPrimitive.Content>, VariantProps<typeof dialogContentVariants> {
14
+ /** 닫기 버튼 노출 (기본 true) */
15
+ showClose?: boolean;
16
+ }
17
+ declare function DialogContent({ className, children, size, showClose, ...props }: DialogContentProps): React.ReactElement;
18
+ declare function DialogHeader({ className, ...props }: React.ComponentProps<"div">): React.ReactElement;
19
+ declare function DialogBody({ className, ...props }: React.ComponentProps<"div">): React.ReactElement;
20
+ declare function DialogFooter({ className, ...props }: React.ComponentProps<"div">): React.ReactElement;
21
+ declare function DialogTitle({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Title>): React.ReactElement;
22
+ declare function DialogDescription({ className, children, ...props }: React.ComponentProps<typeof DialogPrimitive.Description>): React.ReactElement;
23
+ declare const confirmToneStyles: {
24
+ brand: {
25
+ iconBg: string;
26
+ iconColor: string;
27
+ buttonVariant: "primary";
28
+ };
29
+ danger: {
30
+ iconBg: string;
31
+ iconColor: string;
32
+ buttonVariant: "danger";
33
+ };
34
+ mint: {
35
+ iconBg: string;
36
+ iconColor: string;
37
+ buttonVariant: "primary";
38
+ };
39
+ };
40
+ export type ConfirmTone = keyof typeof confirmToneStyles;
41
+ export interface ConfirmDialogProps {
42
+ open?: boolean;
43
+ defaultOpen?: boolean;
44
+ onOpenChange?: (open: boolean) => void;
45
+ /** 톤 색상 — `brand` (기본) · `danger` · `mint` */
46
+ tone?: ConfirmTone;
47
+ /** 상단 원형 배지에 들어갈 아이콘 */
48
+ icon?: IconName;
49
+ title: React.ReactNode;
50
+ /** `\n` 줄바꿈을 그대로 렌더 */
51
+ description?: React.ReactNode;
52
+ confirmLabel?: React.ReactNode;
53
+ cancelLabel?: React.ReactNode;
54
+ onConfirm?: () => void;
55
+ onCancel?: () => void;
56
+ /** Trigger 노드 (옵션). 외부에서 `open`을 제어할 때는 생략 */
57
+ children?: React.ReactNode;
58
+ }
59
+ /**
60
+ * ConfirmDialog
61
+ * 아이콘 + 제목 + 설명 + 2버튼 형태의 확인 다이얼로그.
62
+ *
63
+ * @example
64
+ * ```tsx
65
+ * <ConfirmDialog
66
+ * tone="danger"
67
+ * icon="Flame"
68
+ * title="정말 포기하시겠어요?"
69
+ * description={"27일 스트릭이 초기화돼요.\n이 동작은 되돌릴 수 없어요."}
70
+ * confirmLabel="포기"
71
+ * onConfirm={() => stop()}
72
+ * >
73
+ * <Button variant="danger">포기하기</Button>
74
+ * </ConfirmDialog>
75
+ * ```
76
+ */
77
+ declare function ConfirmDialog({ open, defaultOpen, onOpenChange, tone, icon, title, description, confirmLabel, cancelLabel, onConfirm, onCancel, children, }: ConfirmDialogProps): React.ReactElement;
78
+ export { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogBody, DialogFooter, DialogTitle, DialogDescription, ConfirmDialog, };
@@ -0,0 +1,11 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { Dialog } from './Dialog';
3
+ declare const meta: Meta<typeof Dialog>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof Dialog>;
6
+ export declare const SizeSm: Story;
7
+ export declare const SizeMd: Story;
8
+ export declare const SizeLg: Story;
9
+ export declare const ConfirmBrand: Story;
10
+ export declare const ConfirmDanger: Story;
11
+ export declare const ConfirmMint: Story;
@@ -0,0 +1,2 @@
1
+ export { Dialog, DialogTrigger, DialogPortal, DialogClose, DialogOverlay, DialogContent, DialogHeader, DialogBody, DialogFooter, DialogTitle, DialogDescription, ConfirmDialog, } from './Dialog';
2
+ export type { DialogContentProps, ConfirmDialogProps, ConfirmTone } from './Dialog';
@@ -0,0 +1,16 @@
1
+ import { default as React } from 'react';
2
+ export interface GoalAddListProps extends Omit<React.HTMLAttributes<HTMLDivElement>, "onChange"> {
3
+ goals?: string[];
4
+ defaultGoals?: string[];
5
+ onGoalsChange?(goals: string[]): void;
6
+ placeholder?: string;
7
+ disabled?: boolean;
8
+ addOnBlur?: boolean;
9
+ inputAriaLabel?: string;
10
+ maxGoals?: number;
11
+ }
12
+ /**
13
+ * GoalAddList
14
+ * 목표 문자열 목록을 보여주고 하단 입력창에서 Enter로 새 목표를 추가하는 컴포넌트.
15
+ */
16
+ export declare function GoalAddList({ goals, defaultGoals, onGoalsChange, placeholder, disabled, addOnBlur, inputAriaLabel, maxGoals, className, ...props }: GoalAddListProps): React.ReactElement;
@@ -0,0 +1,7 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { GoalAddList } from './GoalAddList';
3
+ declare const meta: Meta<typeof GoalAddList>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof GoalAddList>;
6
+ export declare const Default: Story;
7
+ export declare const Controlled: Story;
@@ -0,0 +1 @@
1
+ export * from './GoalAddList';
@@ -0,0 +1,50 @@
1
+ import { default as React } from 'react';
2
+ export interface ImagePickerProps {
3
+ /** 현재 미리보기 이미지 URL (blob: / data: / https: 모두 가능) */
4
+ previewUrl?: string;
5
+ /** 파일 선택 시 호출되는 콜백 */
6
+ onSelectFile: (file: File) => void;
7
+ /** 선택 해제 버튼 클릭 시 호출되는 콜백 */
8
+ onClear?: () => void;
9
+ /** 이미지 미선택 시 안내 텍스트 (기본값: "썸네일 영역을 클릭해 이미지를 선택하세요.") */
10
+ placeholderTitle?: string;
11
+ /** 이미지 미선택 시 보조 안내 텍스트 (기본값: "또는 이미지를 드래그해서 놓아주세요.") */
12
+ placeholderSubtitle?: string;
13
+ /** 하단 도움말 텍스트 (기본값: "JPG, PNG, GIF 파일을 업로드할 수 있습니다.") */
14
+ helperText?: string;
15
+ /** 선택 해제 버튼 텍스트 (기본값: "선택 해제") */
16
+ clearLabel?: string;
17
+ /**
18
+ * 드롭존 영역의 크기·비율을 지정하는 className.
19
+ * 기본값: `aspect-video`
20
+ * @example "aspect-[4/1]", "aspect-square", "h-64"
21
+ */
22
+ dropZoneClassName?: string;
23
+ /** 추가 className */
24
+ className?: string;
25
+ }
26
+ /**
27
+ * ImagePicker
28
+ * 일지 썸네일 이미지 선택 컴포넌트
29
+ *
30
+ * 클릭 또는 드래그 앤 드롭으로 이미지를 선택할 수 있습니다.
31
+ *
32
+ * @param previewUrl 현재 미리보기 이미지 URL
33
+ * @param onSelectFile 파일 선택 시 호출되는 콜백
34
+ * @param onClear 선택 해제 버튼 클릭 시 호출되는 콜백
35
+ * @param placeholderTitle 이미지 미선택 시 안내 텍스트
36
+ * @param placeholderSubtitle 이미지 미선택 시 보조 안내 텍스트
37
+ * @param helperText 하단 도움말 텍스트
38
+ * @param clearLabel 선택 해제 버튼 텍스트
39
+ * @param className 추가 className
40
+ *
41
+ * @example
42
+ * ```tsx
43
+ * <ImagePicker
44
+ * previewUrl={previewUrl}
45
+ * onSelectFile={(file) => setFile(file)}
46
+ * onClear={() => setFile(null)}
47
+ * />
48
+ * ```
49
+ */
50
+ export declare function ImagePicker({ previewUrl, onSelectFile, onClear, placeholderTitle, placeholderSubtitle, helperText, clearLabel, dropZoneClassName, className, }: ImagePickerProps): React.ReactElement;
@@ -0,0 +1,8 @@
1
+ import { Meta, StoryObj } from '@storybook/react-vite';
2
+ import { ImagePicker } from './ImagePicker';
3
+ declare const meta: Meta<typeof ImagePicker>;
4
+ export default meta;
5
+ type Story = StoryObj<typeof ImagePicker>;
6
+ export declare const Default: Story;
7
+ export declare const WithImage: Story;
8
+ export declare const WithoutClear: Story;
@@ -0,0 +1 @@
1
+ export * from './ImagePicker';
@@ -0,0 +1,11 @@
1
+ import { default as React } from 'react';
2
+ interface ImagePlaceholderProps {
3
+ className?: string;
4
+ logoSize?: 'sm' | 'md' | 'lg';
5
+ }
6
+ /**
7
+ * ImagePlaceholder
8
+ * 이미지가 없을 때 연한 primary 색상 배경에 로고를 보여주는 컴포넌트
9
+ */
10
+ export declare function ImagePlaceholder({ className, logoSize, }: ImagePlaceholderProps): React.ReactElement;
11
+ export {};