@tipp/ui 2.1.2 → 2.1.3
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/app/index.cjs.map +1 -1
- package/dist/app/index.js +50 -50
- package/dist/app/platform/coach-question-list.cjs.map +1 -1
- package/dist/app/platform/coach-question-list.js +31 -31
- package/dist/app/platform/contents-card.cjs.map +1 -1
- package/dist/app/platform/contents-card.js +31 -31
- package/dist/app/platform/curriculum-card.cjs.map +1 -1
- package/dist/app/platform/curriculum-card.js +3 -3
- package/dist/app/platform/edit-coaching-time.cjs.map +1 -1
- package/dist/app/platform/edit-coaching-time.js +38 -38
- package/dist/app/platform/edit-service-type.cjs.map +1 -1
- package/dist/app/platform/edit-service-type.js +37 -37
- package/dist/app/platform/goal-manage-card-edit.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-edit.js +38 -38
- package/dist/app/platform/goal-manage-card-read.cjs.map +1 -1
- package/dist/app/platform/goal-manage-card-read.js +31 -31
- package/dist/app/platform/on-offline-radio-card.cjs.map +1 -1
- package/dist/app/platform/on-offline-radio-card.js +37 -37
- package/dist/app/platform/report-card.cjs.map +1 -1
- package/dist/app/platform/report-card.js +31 -31
- package/dist/app/platform/reservation-card.cjs.map +1 -1
- package/dist/app/platform/reservation-card.js +38 -38
- package/dist/app/platform/session-card.cjs.map +1 -1
- package/dist/app/platform/session-card.js +39 -39
- package/dist/app/platform/session-review-simple-read.cjs.map +1 -1
- package/dist/app/platform/session-review-simple-read.js +31 -31
- package/dist/app/platform/userInfos/coaching-customer-info/index.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/index.js +33 -33
- package/dist/app/platform/userInfos/coaching-customer-info/large.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/large.js +31 -31
- package/dist/app/platform/userInfos/coaching-customer-info/medium.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/medium.js +31 -31
- package/dist/app/platform/userInfos/coaching-customer-info/small.cjs.map +1 -1
- package/dist/app/platform/userInfos/coaching-customer-info/small.js +30 -30
- package/dist/app/platform/userInfos/session-user-info-detail.cjs.map +1 -1
- package/dist/app/platform/userInfos/session-user-info-detail.js +30 -30
- package/dist/app/platform/userInfos/utils.cjs.map +1 -1
- package/dist/app/platform/userInfos/utils.js +30 -30
- package/dist/atoms/index.cjs.map +1 -1
- package/dist/atoms/index.js +75 -75
- package/dist/atoms/pagination.cjs.map +1 -1
- package/dist/atoms/pagination.js +2 -2
- package/dist/chunk-5GZYEJDJ.js +354 -0
- package/dist/chunk-5GZYEJDJ.js.map +1 -0
- package/dist/chunk-5L67AX4O.js +174 -0
- package/dist/chunk-5L67AX4O.js.map +1 -0
- package/dist/chunk-73HTISDU.js +119 -0
- package/dist/chunk-73HTISDU.js.map +1 -0
- package/dist/chunk-B7BDVAPP.js +117 -0
- package/dist/chunk-B7BDVAPP.js.map +1 -0
- package/dist/chunk-CAJB7UMC.js +63 -0
- package/dist/chunk-CAJB7UMC.js.map +1 -0
- package/dist/chunk-EFVHZOXL.js +125 -0
- package/dist/chunk-EFVHZOXL.js.map +1 -0
- package/dist/chunk-FYW5UFSF.js +169 -0
- package/dist/chunk-FYW5UFSF.js.map +1 -0
- package/dist/chunk-GCVD7GTB.js +96 -0
- package/dist/chunk-GCVD7GTB.js.map +1 -0
- package/dist/chunk-GYPMDICK.js +165 -0
- package/dist/chunk-GYPMDICK.js.map +1 -0
- package/dist/chunk-Q3YXD5XT.js +68 -0
- package/dist/chunk-Q3YXD5XT.js.map +1 -0
- package/dist/chunk-QBTHBHQZ.js +190 -0
- package/dist/chunk-QBTHBHQZ.js.map +1 -0
- package/dist/chunk-UXFJFLDU.js +145 -0
- package/dist/chunk-UXFJFLDU.js.map +1 -0
- package/dist/chunk-VVKYZDXM.js +281 -0
- package/dist/chunk-VVKYZDXM.js.map +1 -0
- package/dist/chunk-YBD27PMB.js +144 -0
- package/dist/chunk-YBD27PMB.js.map +1 -0
- package/dist/chunk-YR5VE2XI.js +99 -0
- package/dist/chunk-YR5VE2XI.js.map +1 -0
- package/dist/icon.cjs +2 -0
- package/dist/icon.cjs.map +1 -1
- package/dist/icon.d.cts +1 -1
- package/dist/icon.d.ts +1 -1
- package/dist/icon.js +3 -1
- package/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +111 -109
- package/dist/molecules/date-picker/date-picker-button.cjs.map +1 -1
- package/dist/molecules/date-picker/date-picker-button.js +32 -32
- package/dist/molecules/date-picker/index.cjs.map +1 -1
- package/dist/molecules/date-picker/index.js +2 -2
- package/dist/molecules/expand-table/index.cjs.map +1 -1
- package/dist/molecules/expand-table/index.js +31 -31
- package/dist/molecules/expand-table/row.cjs.map +1 -1
- package/dist/molecules/expand-table/row.js +30 -30
- package/dist/molecules/index.cjs.map +1 -1
- package/dist/molecules/index.js +41 -41
- package/dist/molecules/learning-post.js +2 -2
- package/dist/molecules/navigation.cjs.map +1 -1
- package/dist/molecules/navigation.js +30 -30
- package/dist/molecules/radio-button-card.cjs.map +1 -1
- package/dist/molecules/radio-button-card.js +30 -30
- package/dist/molecules/stepper.cjs.map +1 -1
- package/dist/molecules/stepper.js +3 -3
- package/dist/molecules/tag-selector.cjs.map +1 -1
- package/dist/molecules/tag-selector.js +31 -31
- package/dist/molecules/time-select.cjs.map +1 -1
- package/dist/molecules/time-select.js +30 -30
- package/package.json +1 -1
- package/src/icon.ts +2 -1
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// src/icon.ts
|
|
2
|
+
import {
|
|
3
|
+
BookmarkIcon,
|
|
4
|
+
ExitIcon,
|
|
5
|
+
InfoCircledIcon,
|
|
6
|
+
ExclamationTriangleIcon,
|
|
7
|
+
MagnifyingGlassIcon,
|
|
8
|
+
DotsHorizontalIcon,
|
|
9
|
+
ChatBubbleIcon,
|
|
10
|
+
PlusIcon,
|
|
11
|
+
BookmarkFilledIcon,
|
|
12
|
+
MixerHorizontalIcon,
|
|
13
|
+
ChevronLeftIcon,
|
|
14
|
+
ChevronRightIcon,
|
|
15
|
+
ClipboardIcon,
|
|
16
|
+
BarChartIcon,
|
|
17
|
+
PersonIcon,
|
|
18
|
+
GearIcon,
|
|
19
|
+
DotsVerticalIcon,
|
|
20
|
+
Pencil1Icon,
|
|
21
|
+
Cross1Icon,
|
|
22
|
+
Link2Icon,
|
|
23
|
+
ChevronUpIcon,
|
|
24
|
+
ChevronDownIcon,
|
|
25
|
+
FileIcon,
|
|
26
|
+
TrashIcon,
|
|
27
|
+
DoubleArrowLeftIcon,
|
|
28
|
+
DoubleArrowRightIcon,
|
|
29
|
+
GlobeIcon,
|
|
30
|
+
BackpackIcon,
|
|
31
|
+
CalendarIcon,
|
|
32
|
+
CheckIcon,
|
|
33
|
+
ArchiveIcon,
|
|
34
|
+
RowsIcon,
|
|
35
|
+
Share1Icon,
|
|
36
|
+
ClipboardCopyIcon,
|
|
37
|
+
CheckCircledIcon,
|
|
38
|
+
ArrowLeftIcon,
|
|
39
|
+
ReloadIcon,
|
|
40
|
+
RocketIcon,
|
|
41
|
+
ArrowRightIcon,
|
|
42
|
+
CopyIcon,
|
|
43
|
+
Pencil2Icon,
|
|
44
|
+
TargetIcon,
|
|
45
|
+
UpdateIcon,
|
|
46
|
+
DownloadIcon,
|
|
47
|
+
SpeakerLoudIcon,
|
|
48
|
+
UploadIcon,
|
|
49
|
+
SpeakerOffIcon,
|
|
50
|
+
TimerIcon,
|
|
51
|
+
ArrowTopRightIcon,
|
|
52
|
+
VideoIcon,
|
|
53
|
+
CubeIcon,
|
|
54
|
+
HamburgerMenuIcon,
|
|
55
|
+
FileTextIcon,
|
|
56
|
+
PaperPlaneIcon,
|
|
57
|
+
BellIcon,
|
|
58
|
+
ResetIcon
|
|
59
|
+
} from "@radix-ui/react-icons";
|
|
60
|
+
|
|
61
|
+
export {
|
|
62
|
+
BookmarkIcon,
|
|
63
|
+
ExitIcon,
|
|
64
|
+
InfoCircledIcon,
|
|
65
|
+
ExclamationTriangleIcon,
|
|
66
|
+
MagnifyingGlassIcon,
|
|
67
|
+
DotsHorizontalIcon,
|
|
68
|
+
ChatBubbleIcon,
|
|
69
|
+
PlusIcon,
|
|
70
|
+
BookmarkFilledIcon,
|
|
71
|
+
MixerHorizontalIcon,
|
|
72
|
+
ChevronLeftIcon,
|
|
73
|
+
ChevronRightIcon,
|
|
74
|
+
ClipboardIcon,
|
|
75
|
+
BarChartIcon,
|
|
76
|
+
PersonIcon,
|
|
77
|
+
GearIcon,
|
|
78
|
+
DotsVerticalIcon,
|
|
79
|
+
Pencil1Icon,
|
|
80
|
+
Cross1Icon,
|
|
81
|
+
Link2Icon,
|
|
82
|
+
ChevronUpIcon,
|
|
83
|
+
ChevronDownIcon,
|
|
84
|
+
FileIcon,
|
|
85
|
+
TrashIcon,
|
|
86
|
+
DoubleArrowLeftIcon,
|
|
87
|
+
DoubleArrowRightIcon,
|
|
88
|
+
GlobeIcon,
|
|
89
|
+
BackpackIcon,
|
|
90
|
+
CalendarIcon,
|
|
91
|
+
CheckIcon,
|
|
92
|
+
ArchiveIcon,
|
|
93
|
+
RowsIcon,
|
|
94
|
+
Share1Icon,
|
|
95
|
+
ClipboardCopyIcon,
|
|
96
|
+
CheckCircledIcon,
|
|
97
|
+
ArrowLeftIcon,
|
|
98
|
+
ReloadIcon,
|
|
99
|
+
RocketIcon,
|
|
100
|
+
ArrowRightIcon,
|
|
101
|
+
CopyIcon,
|
|
102
|
+
Pencil2Icon,
|
|
103
|
+
TargetIcon,
|
|
104
|
+
UpdateIcon,
|
|
105
|
+
DownloadIcon,
|
|
106
|
+
SpeakerLoudIcon,
|
|
107
|
+
UploadIcon,
|
|
108
|
+
SpeakerOffIcon,
|
|
109
|
+
TimerIcon,
|
|
110
|
+
ArrowTopRightIcon,
|
|
111
|
+
VideoIcon,
|
|
112
|
+
CubeIcon,
|
|
113
|
+
HamburgerMenuIcon,
|
|
114
|
+
FileTextIcon,
|
|
115
|
+
PaperPlaneIcon,
|
|
116
|
+
BellIcon,
|
|
117
|
+
ResetIcon
|
|
118
|
+
};
|
|
119
|
+
//# sourceMappingURL=chunk-73HTISDU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/icon.ts"],"sourcesContent":["\nexport {\n BookmarkIcon,\n ExitIcon,\n InfoCircledIcon,\n ExclamationTriangleIcon,\n MagnifyingGlassIcon,\n DotsHorizontalIcon,\n ChatBubbleIcon,\n PlusIcon,\n BookmarkFilledIcon,\n MixerHorizontalIcon,\n ChevronLeftIcon,\n ChevronRightIcon,\n ClipboardIcon,\n BarChartIcon,\n PersonIcon,\n GearIcon,\n DotsVerticalIcon,\n Pencil1Icon,\n Cross1Icon,\n Link2Icon,\n ChevronUpIcon,\n ChevronDownIcon,\n FileIcon,\n TrashIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n GlobeIcon,\n BackpackIcon,\n CalendarIcon,\n CheckIcon,\n ArchiveIcon,\n RowsIcon,\n Share1Icon,\n ClipboardCopyIcon,\n CheckCircledIcon,\n ArrowLeftIcon,\n ReloadIcon,\n RocketIcon,\n ArrowRightIcon,\n CopyIcon,\n Pencil2Icon,\n TargetIcon,\n UpdateIcon,\n DownloadIcon,\n SpeakerLoudIcon,\n UploadIcon,\n SpeakerOffIcon,\n TimerIcon,\n ArrowTopRightIcon,\n VideoIcon,\n CubeIcon,\n HamburgerMenuIcon,\n FileTextIcon,\n PaperPlaneIcon,\n BellIcon,\n ResetIcon,\n} from '@radix-ui/react-icons';\n \n\nexport * from './icons';\n"],"mappings":";AACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;","names":[]}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Skeleton
|
|
3
|
+
} from "./chunk-5H3YPCZK.js";
|
|
4
|
+
import {
|
|
5
|
+
Grid
|
|
6
|
+
} from "./chunk-EGEQY3KT.js";
|
|
7
|
+
import {
|
|
8
|
+
Inset
|
|
9
|
+
} from "./chunk-XQOL7UBI.js";
|
|
10
|
+
import {
|
|
11
|
+
Heading
|
|
12
|
+
} from "./chunk-3IT3NVK6.js";
|
|
13
|
+
import {
|
|
14
|
+
DropdownMenu
|
|
15
|
+
} from "./chunk-HYE34QEM.js";
|
|
16
|
+
import {
|
|
17
|
+
Card
|
|
18
|
+
} from "./chunk-HEDMSFPW.js";
|
|
19
|
+
import {
|
|
20
|
+
Box
|
|
21
|
+
} from "./chunk-4Y5BEXVN.js";
|
|
22
|
+
import {
|
|
23
|
+
Typo
|
|
24
|
+
} from "./chunk-LH57PIY2.js";
|
|
25
|
+
import {
|
|
26
|
+
Flex
|
|
27
|
+
} from "./chunk-25HMMI7R.js";
|
|
28
|
+
import {
|
|
29
|
+
Button
|
|
30
|
+
} from "./chunk-AFPH32MF.js";
|
|
31
|
+
import {
|
|
32
|
+
DotsVerticalIcon
|
|
33
|
+
} from "./chunk-73HTISDU.js";
|
|
34
|
+
|
|
35
|
+
// src/app/platform/contents-card.tsx
|
|
36
|
+
import { forwardRef } from "react";
|
|
37
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
38
|
+
var ContentsCard = forwardRef(
|
|
39
|
+
({
|
|
40
|
+
title,
|
|
41
|
+
description,
|
|
42
|
+
imageSrc,
|
|
43
|
+
footer,
|
|
44
|
+
dropdownItems,
|
|
45
|
+
onClickCard,
|
|
46
|
+
isLoading = false
|
|
47
|
+
}, ref) => {
|
|
48
|
+
return /* @__PURE__ */ jsxs(
|
|
49
|
+
Card,
|
|
50
|
+
{
|
|
51
|
+
onClick: onClickCard,
|
|
52
|
+
ref,
|
|
53
|
+
style: {
|
|
54
|
+
height: "100%",
|
|
55
|
+
width: "100%",
|
|
56
|
+
display: "grid",
|
|
57
|
+
cursor: "pointer",
|
|
58
|
+
maxHeight: "450px"
|
|
59
|
+
},
|
|
60
|
+
children: [
|
|
61
|
+
/* @__PURE__ */ jsx(Inset, { clip: "padding-box", pb: "0", side: "top", children: /* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(
|
|
62
|
+
Box,
|
|
63
|
+
{
|
|
64
|
+
height: "210px",
|
|
65
|
+
style: {
|
|
66
|
+
backgroundImage: `url(${imageSrc})`,
|
|
67
|
+
backgroundSize: "cover",
|
|
68
|
+
backgroundPosition: "center"
|
|
69
|
+
},
|
|
70
|
+
width: "100%"
|
|
71
|
+
}
|
|
72
|
+
) }) }),
|
|
73
|
+
/* @__PURE__ */ jsxs(Flex, { direction: "column", p: "4", pb: "3", children: [
|
|
74
|
+
/* @__PURE__ */ jsxs(Box, { children: [
|
|
75
|
+
/* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Heading, { mb: "3", variant: "heading5", children: title }) }),
|
|
76
|
+
/* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Typo, { as: "p", variant: "caption", children: description }) })
|
|
77
|
+
] }),
|
|
78
|
+
/* @__PURE__ */ jsxs(
|
|
79
|
+
Grid,
|
|
80
|
+
{
|
|
81
|
+
align: "center",
|
|
82
|
+
columns: "1fr auto",
|
|
83
|
+
justify: "between",
|
|
84
|
+
pt: "2",
|
|
85
|
+
style: { marginTop: "auto" },
|
|
86
|
+
width: "100%",
|
|
87
|
+
children: [
|
|
88
|
+
/* @__PURE__ */ jsx(Skeleton, { loading: isLoading, children: /* @__PURE__ */ jsx(Flex, { gap: "3", overflow: "hidden", children: footer }) }),
|
|
89
|
+
Boolean(dropdownItems == null ? void 0 : dropdownItems.length) && /* @__PURE__ */ jsxs(DropdownMenu.Root, { children: [
|
|
90
|
+
/* @__PURE__ */ jsx(DropdownMenu.Trigger, { children: /* @__PURE__ */ jsx(Button, { size: "large", variant: "transparent", children: /* @__PURE__ */ jsx(DotsVerticalIcon, { color: "gray", height: "20px", width: "20px" }) }) }),
|
|
91
|
+
/* @__PURE__ */ jsx(DropdownMenu.Content, { children: dropdownItems == null ? void 0 : dropdownItems.map((item) => /* @__PURE__ */ jsx(
|
|
92
|
+
DropdownMenu.Item,
|
|
93
|
+
{
|
|
94
|
+
onClick: (e) => {
|
|
95
|
+
e.stopPropagation();
|
|
96
|
+
item.onClick();
|
|
97
|
+
},
|
|
98
|
+
children: item.label
|
|
99
|
+
},
|
|
100
|
+
item.label
|
|
101
|
+
)) })
|
|
102
|
+
] })
|
|
103
|
+
]
|
|
104
|
+
}
|
|
105
|
+
)
|
|
106
|
+
] })
|
|
107
|
+
]
|
|
108
|
+
}
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
);
|
|
112
|
+
ContentsCard.displayName = "ContentsCard";
|
|
113
|
+
|
|
114
|
+
export {
|
|
115
|
+
ContentsCard
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=chunk-B7BDVAPP.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/app/platform/contents-card.tsx"],"sourcesContent":["import React, { forwardRef } from 'react';\nimport { Heading } from '@/atoms/heading';\nimport { Button } from '@/atoms/button';\nimport { DropdownMenu } from '@/atoms/dropdown-menu';\nimport { Box } from '@/atoms/box';\nimport { Flex } from '@/atoms/flex';\nimport { Grid } from '@/atoms/grid';\nimport { Skeleton } from '@/atoms/skeleton';\nimport { Typo } from '@/atoms/typo';\nimport { DotsVerticalIcon } from '@/icon';\nimport { Card, Inset } from '@/atoms';\n\nexport interface ContentsCardProps {\n title?: React.ReactNode;\n description?: string;\n id?: string;\n imageSrc?: string | null;\n imageAlt?: string;\n footer?: React.ReactNode;\n dropdownItems?: {\n label: string;\n onClick: () => void;\n }[];\n onClickCard?: () => void;\n isLoading?: boolean;\n}\n\nexport const ContentsCard = forwardRef<HTMLDivElement, ContentsCardProps>(\n (\n {\n title,\n description,\n imageSrc,\n footer,\n dropdownItems,\n onClickCard,\n isLoading = false,\n },\n ref\n ): React.ReactNode => {\n return (\n <Card\n onClick={onClickCard}\n ref={ref}\n style={{\n height: '100%',\n width: '100%',\n display: 'grid',\n cursor: 'pointer',\n maxHeight: '450px',\n }}\n >\n {/* 섬네일 */}\n <Inset clip=\"padding-box\" pb=\"0\" side=\"top\">\n <Skeleton loading={isLoading}>\n <Box\n height=\"210px\"\n style={{\n backgroundImage: `url(${imageSrc})`,\n backgroundSize: 'cover',\n backgroundPosition: 'center',\n }}\n width=\"100%\"\n />\n </Skeleton>\n </Inset>\n {/* 제목, 설명 */}\n <Flex direction=\"column\" p=\"4\" pb=\"3\">\n <Box>\n <Skeleton loading={isLoading}>\n <Heading mb=\"3\" variant=\"heading5\">\n {title}\n </Heading>\n </Skeleton>\n <Skeleton loading={isLoading}>\n <Typo as=\"p\" variant=\"caption\">\n {description}\n </Typo>\n </Skeleton>\n </Box>\n <Grid\n align=\"center\"\n columns=\"1fr auto\"\n justify=\"between\"\n pt=\"2\"\n style={{ marginTop: 'auto' }}\n width=\"100%\"\n >\n <Skeleton loading={isLoading}>\n <Flex gap=\"3\" overflow=\"hidden\">\n {footer}\n </Flex>\n </Skeleton>\n {Boolean(dropdownItems?.length) && (\n <DropdownMenu.Root>\n <DropdownMenu.Trigger>\n <Button size=\"large\" variant=\"transparent\">\n <DotsVerticalIcon color=\"gray\" height=\"20px\" width=\"20px\" />\n </Button>\n </DropdownMenu.Trigger>\n <DropdownMenu.Content>\n {dropdownItems?.map((item) => (\n <DropdownMenu.Item\n key={item.label}\n onClick={(e) => {\n e.stopPropagation();\n item.onClick();\n }}\n >\n {item.label}\n </DropdownMenu.Item>\n ))}\n </DropdownMenu.Content>\n </DropdownMenu.Root>\n )}\n </Grid>\n </Flex>\n </Card>\n );\n }\n);\nContentsCard.displayName = 'ContentsCard';\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,kBAAkB;AAuDtB,cAaF,YAbE;AA5BL,IAAM,eAAe;AAAA,EAC1B,CACE;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAY;AAAA,EACd,GACA,QACoB;AACpB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,SAAS;AAAA,QACT;AAAA,QACA,OAAO;AAAA,UACL,QAAQ;AAAA,UACR,OAAO;AAAA,UACP,SAAS;AAAA,UACT,QAAQ;AAAA,UACR,WAAW;AAAA,QACb;AAAA,QAGA;AAAA,8BAAC,SAAM,MAAK,eAAc,IAAG,KAAI,MAAK,OACpC,8BAAC,YAAS,SAAS,WACjB;AAAA,YAAC;AAAA;AAAA,cACC,QAAO;AAAA,cACP,OAAO;AAAA,gBACL,iBAAiB,OAAO,QAAQ;AAAA,gBAChC,gBAAgB;AAAA,gBAChB,oBAAoB;AAAA,cACtB;AAAA,cACA,OAAM;AAAA;AAAA,UACR,GACF,GACF;AAAA,UAEA,qBAAC,QAAK,WAAU,UAAS,GAAE,KAAI,IAAG,KAChC;AAAA,iCAAC,OACC;AAAA,kCAAC,YAAS,SAAS,WACjB,8BAAC,WAAQ,IAAG,KAAI,SAAQ,YACrB,iBACH,GACF;AAAA,cACA,oBAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,IAAG,KAAI,SAAQ,WAClB,uBACH,GACF;AAAA,eACF;AAAA,YACA;AAAA,cAAC;AAAA;AAAA,gBACC,OAAM;AAAA,gBACN,SAAQ;AAAA,gBACR,SAAQ;AAAA,gBACR,IAAG;AAAA,gBACH,OAAO,EAAE,WAAW,OAAO;AAAA,gBAC3B,OAAM;AAAA,gBAEN;AAAA,sCAAC,YAAS,SAAS,WACjB,8BAAC,QAAK,KAAI,KAAI,UAAS,UACpB,kBACH,GACF;AAAA,kBACC,QAAQ,+CAAe,MAAM,KAC5B,qBAAC,aAAa,MAAb,EACC;AAAA,wCAAC,aAAa,SAAb,EACC,8BAAC,UAAO,MAAK,SAAQ,SAAQ,eAC3B,8BAAC,oBAAiB,OAAM,QAAO,QAAO,QAAO,OAAM,QAAO,GAC5D,GACF;AAAA,oBACA,oBAAC,aAAa,SAAb,EACE,yDAAe,IAAI,CAAC,SACnB;AAAA,sBAAC,aAAa;AAAA,sBAAb;AAAA,wBAEC,SAAS,CAAC,MAAM;AACd,4BAAE,gBAAgB;AAClB,+BAAK,QAAQ;AAAA,wBACf;AAAA,wBAEC,eAAK;AAAA;AAAA,sBAND,KAAK;AAAA,oBAOZ,IAEJ;AAAA,qBACF;AAAA;AAAA;AAAA,YAEJ;AAAA,aACF;AAAA;AAAA;AAAA,IACF;AAAA,EAEJ;AACF;AACA,aAAa,cAAc;","names":[]}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DatePicker
|
|
3
|
+
} from "./chunk-GCVD7GTB.js";
|
|
4
|
+
import {
|
|
5
|
+
Box
|
|
6
|
+
} from "./chunk-4Y5BEXVN.js";
|
|
7
|
+
import {
|
|
8
|
+
Flex
|
|
9
|
+
} from "./chunk-25HMMI7R.js";
|
|
10
|
+
import {
|
|
11
|
+
Button
|
|
12
|
+
} from "./chunk-AFPH32MF.js";
|
|
13
|
+
import {
|
|
14
|
+
CalendarIcon
|
|
15
|
+
} from "./chunk-73HTISDU.js";
|
|
16
|
+
import {
|
|
17
|
+
__objRest,
|
|
18
|
+
__spreadProps,
|
|
19
|
+
__spreadValues
|
|
20
|
+
} from "./chunk-2NMEKWO5.js";
|
|
21
|
+
|
|
22
|
+
// src/molecules/date-picker/date-picker-button.tsx
|
|
23
|
+
import { useMemo } from "react";
|
|
24
|
+
import { format } from "date-fns";
|
|
25
|
+
import { clsx } from "clsx";
|
|
26
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
27
|
+
function DatePickerButton(props) {
|
|
28
|
+
const _a = props, { size, placeholder, format: formatProps, disabled } = _a, rest = __objRest(_a, ["size", "placeholder", "format", "disabled"]);
|
|
29
|
+
const buttonProps = useMemo(() => {
|
|
30
|
+
const variant = "outline";
|
|
31
|
+
const color = "gray";
|
|
32
|
+
return { size, color, variant, disabled };
|
|
33
|
+
}, [disabled, size]);
|
|
34
|
+
const selectFormat = useMemo(() => {
|
|
35
|
+
if (formatProps) return formatProps;
|
|
36
|
+
return (date) => {
|
|
37
|
+
return date ? format(date, "yyyy\uB144 MM\uC6D4 dd\uC77C") : placeholder;
|
|
38
|
+
};
|
|
39
|
+
}, [formatProps, placeholder]);
|
|
40
|
+
const className = useMemo(() => {
|
|
41
|
+
return clsx(
|
|
42
|
+
"date-picker-button",
|
|
43
|
+
(disabled || props.readOnly) && "disabled"
|
|
44
|
+
);
|
|
45
|
+
}, [disabled, props.readOnly]);
|
|
46
|
+
return /* @__PURE__ */ jsx(Box, { p: "0", width: "100%", children: /* @__PURE__ */ jsx(
|
|
47
|
+
DatePicker,
|
|
48
|
+
__spreadProps(__spreadValues({
|
|
49
|
+
customInput: /* @__PURE__ */ jsx(Button, __spreadProps(__spreadValues({ className, type: "button" }, buttonProps), { children: /* @__PURE__ */ jsxs(Flex, { align: "center", gap: "3", justify: "between", width: "100%", children: [
|
|
50
|
+
rest.selected ? selectFormat(rest.selected) : placeholder,
|
|
51
|
+
/* @__PURE__ */ jsx(CalendarIcon, {})
|
|
52
|
+
] }) })),
|
|
53
|
+
wrapperClassName: "full-width"
|
|
54
|
+
}, rest), {
|
|
55
|
+
disabled
|
|
56
|
+
})
|
|
57
|
+
) });
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export {
|
|
61
|
+
DatePickerButton
|
|
62
|
+
};
|
|
63
|
+
//# sourceMappingURL=chunk-CAJB7UMC.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/molecules/date-picker/date-picker-button.tsx"],"sourcesContent":["import React, { useMemo } from 'react';\nimport { format } from 'date-fns';\nimport { clsx } from 'clsx';\nimport type { ButtonProps } from '../../atoms';\nimport { Box, Button, Flex } from '../../atoms';\nimport { CalendarIcon } from '../../icon';\nimport type { DatePickerProps } from '.';\nimport { DatePicker } from '.';\n\nexport type DatePickerButtonProps = DatePickerProps & {\n placeholder?: React.ReactNode;\n format?: (date: Date) => string;\n size?: ButtonProps['size'];\n};\n\nexport function DatePickerButton(\n props: DatePickerButtonProps\n): React.ReactNode {\n const { size, placeholder, format: formatProps, disabled, ...rest } = props;\n\n const buttonProps = useMemo(() => {\n const variant: ButtonProps['variant'] = 'outline';\n const color: ButtonProps['color'] = 'gray';\n return { size, color, variant, disabled };\n }, [disabled, size]);\n\n const selectFormat = useMemo(() => {\n if (formatProps) return formatProps;\n return (date?: Date) => {\n return date ? format(date, 'yyyy년 MM월 dd일') : placeholder;\n };\n }, [formatProps, placeholder]);\n\n const className = useMemo(() => {\n return clsx(\n 'date-picker-button',\n (disabled || props.readOnly) && 'disabled'\n );\n }, [disabled, props.readOnly]);\n\n return (\n <Box p=\"0\" width=\"100%\">\n <DatePicker\n customInput={\n <Button className={className} type=\"button\" {...buttonProps}>\n <Flex align=\"center\" gap=\"3\" justify=\"between\" width=\"100%\">\n {rest.selected ? selectFormat(rest.selected) : placeholder}\n <CalendarIcon />\n </Flex>\n </Button>\n }\n wrapperClassName=\"full-width\"\n {...rest}\n disabled={disabled}\n />\n </Box>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,SAAgB,eAAe;AAC/B,SAAS,cAAc;AACvB,SAAS,YAAY;AA2CT,SAEE,KAFF;AA9BL,SAAS,iBACd,OACiB;AACjB,QAAsE,YAA9D,QAAM,aAAa,QAAQ,aAAa,SAlBlD,IAkBwE,IAAT,iBAAS,IAAT,CAArD,QAAM,eAAa,UAAqB;AAEhD,QAAM,cAAc,QAAQ,MAAM;AAChC,UAAM,UAAkC;AACxC,UAAM,QAA8B;AACpC,WAAO,EAAE,MAAM,OAAO,SAAS,SAAS;AAAA,EAC1C,GAAG,CAAC,UAAU,IAAI,CAAC;AAEnB,QAAM,eAAe,QAAQ,MAAM;AACjC,QAAI,YAAa,QAAO;AACxB,WAAO,CAAC,SAAgB;AACtB,aAAO,OAAO,OAAO,MAAM,8BAAe,IAAI;AAAA,IAChD;AAAA,EACF,GAAG,CAAC,aAAa,WAAW,CAAC;AAE7B,QAAM,YAAY,QAAQ,MAAM;AAC9B,WAAO;AAAA,MACL;AAAA,OACC,YAAY,MAAM,aAAa;AAAA,IAClC;AAAA,EACF,GAAG,CAAC,UAAU,MAAM,QAAQ,CAAC;AAE7B,SACE,oBAAC,OAAI,GAAE,KAAI,OAAM,QACf;AAAA,IAAC;AAAA;AAAA,MACC,aACE,oBAAC,uCAAO,WAAsB,MAAK,YAAa,cAA/C,EACC,+BAAC,QAAK,OAAM,UAAS,KAAI,KAAI,SAAQ,WAAU,OAAM,QAClD;AAAA,aAAK,WAAW,aAAa,KAAK,QAAQ,IAAI;AAAA,QAC/C,oBAAC,gBAAa;AAAA,SAChB,IACF;AAAA,MAEF,kBAAiB;AAAA,OACb,OAVL;AAAA,MAWC;AAAA;AAAA,EACF,GACF;AAEJ;","names":[]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import {
|
|
2
|
+
IconButton
|
|
3
|
+
} from "./chunk-O3DNDMV3.js";
|
|
4
|
+
import {
|
|
5
|
+
Typo
|
|
6
|
+
} from "./chunk-LH57PIY2.js";
|
|
7
|
+
import {
|
|
8
|
+
Flex
|
|
9
|
+
} from "./chunk-25HMMI7R.js";
|
|
10
|
+
import {
|
|
11
|
+
ChevronLeftIcon,
|
|
12
|
+
ChevronRightIcon,
|
|
13
|
+
DoubleArrowLeftIcon,
|
|
14
|
+
DoubleArrowRightIcon
|
|
15
|
+
} from "./chunk-73HTISDU.js";
|
|
16
|
+
import {
|
|
17
|
+
__spreadProps,
|
|
18
|
+
__spreadValues
|
|
19
|
+
} from "./chunk-2NMEKWO5.js";
|
|
20
|
+
|
|
21
|
+
// src/atoms/pagination.tsx
|
|
22
|
+
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
23
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
24
|
+
function Pagination(props) {
|
|
25
|
+
const { onChange, count = 0, siblingCount = 2 } = props;
|
|
26
|
+
const [page, setPage] = useState(() => props.page || props.defaultPage || 1);
|
|
27
|
+
const visibleItems = useMemo(() => {
|
|
28
|
+
let start = Math.max(1, page - siblingCount);
|
|
29
|
+
let end = Math.min(count, page + siblingCount);
|
|
30
|
+
if (page - siblingCount <= 0 && end < count) {
|
|
31
|
+
end = Math.min(count, end + Math.abs(page - siblingCount) + 1);
|
|
32
|
+
} else if (page + siblingCount > count && start > 1) {
|
|
33
|
+
start = Math.max(1, start - (page + siblingCount - count));
|
|
34
|
+
}
|
|
35
|
+
return Array.from({ length: end - start + 1 }, (_, i) => i + start);
|
|
36
|
+
}, [count, page, siblingCount]);
|
|
37
|
+
useEffect(() => {
|
|
38
|
+
onChange == null ? void 0 : onChange(page);
|
|
39
|
+
}, [onChange, page]);
|
|
40
|
+
useEffect(() => {
|
|
41
|
+
if (props.page) {
|
|
42
|
+
setPage(props.page);
|
|
43
|
+
}
|
|
44
|
+
}, [props.page]);
|
|
45
|
+
const prev = useMemo(() => {
|
|
46
|
+
const p = page - 1;
|
|
47
|
+
return p < 1 ? void 0 : p;
|
|
48
|
+
}, [page]);
|
|
49
|
+
const next = useMemo(() => {
|
|
50
|
+
const n = page + 1;
|
|
51
|
+
return n > count ? void 0 : n;
|
|
52
|
+
}, [count, page]);
|
|
53
|
+
const onClickPrev = useCallback(() => {
|
|
54
|
+
prev && setPage(prev);
|
|
55
|
+
}, [prev]);
|
|
56
|
+
const onClickNext = useCallback(() => {
|
|
57
|
+
next && setPage(next);
|
|
58
|
+
}, [next]);
|
|
59
|
+
const doublePrev = useMemo(() => {
|
|
60
|
+
if (!visibleItems.length) return;
|
|
61
|
+
return Math.max(0, visibleItems[0] - 1);
|
|
62
|
+
}, [visibleItems]);
|
|
63
|
+
const onClickDoublePrev = useCallback(() => {
|
|
64
|
+
doublePrev && setPage(doublePrev);
|
|
65
|
+
}, [doublePrev]);
|
|
66
|
+
const doubleNext = useMemo(() => {
|
|
67
|
+
if (!visibleItems.length) return;
|
|
68
|
+
const n = visibleItems[visibleItems.length - 1] + 1;
|
|
69
|
+
if (n > count) return;
|
|
70
|
+
return Math.min(count, n);
|
|
71
|
+
}, [count, visibleItems]);
|
|
72
|
+
const onClickDoubleNext = useCallback(() => {
|
|
73
|
+
doubleNext && setPage(doubleNext);
|
|
74
|
+
}, [doubleNext]);
|
|
75
|
+
const iconSize = {
|
|
76
|
+
height: 24,
|
|
77
|
+
width: 24
|
|
78
|
+
};
|
|
79
|
+
const moveButtonProps = {
|
|
80
|
+
variant: "ghost",
|
|
81
|
+
size: "3",
|
|
82
|
+
style: { borderRadius: "50%" }
|
|
83
|
+
};
|
|
84
|
+
return /* @__PURE__ */ jsxs(Flex, { align: "center", className: "tipp-pagination", gap: "4", children: [
|
|
85
|
+
/* @__PURE__ */ jsx(
|
|
86
|
+
IconButton,
|
|
87
|
+
__spreadProps(__spreadValues({
|
|
88
|
+
disabled: !doublePrev,
|
|
89
|
+
onClick: onClickDoublePrev
|
|
90
|
+
}, moveButtonProps), {
|
|
91
|
+
children: /* @__PURE__ */ jsx(DoubleArrowLeftIcon, __spreadValues({}, iconSize))
|
|
92
|
+
})
|
|
93
|
+
),
|
|
94
|
+
/* @__PURE__ */ jsx(IconButton, __spreadProps(__spreadValues({ disabled: !prev, onClick: onClickPrev }, moveButtonProps), { children: /* @__PURE__ */ jsx(ChevronLeftIcon, __spreadValues({}, iconSize)) })),
|
|
95
|
+
/* @__PURE__ */ jsx(Flex, { gap: "1", children: visibleItems.map((item) => {
|
|
96
|
+
return /* @__PURE__ */ jsx(
|
|
97
|
+
"button",
|
|
98
|
+
{
|
|
99
|
+
className: `page-button ${item === page ? "active" : ""}`,
|
|
100
|
+
onClick: () => {
|
|
101
|
+
setPage(item);
|
|
102
|
+
},
|
|
103
|
+
type: "button",
|
|
104
|
+
children: /* @__PURE__ */ jsx(Typo, { variant: "body", children: item })
|
|
105
|
+
},
|
|
106
|
+
item
|
|
107
|
+
);
|
|
108
|
+
}) }),
|
|
109
|
+
/* @__PURE__ */ jsx(IconButton, __spreadProps(__spreadValues({ disabled: !next, onClick: onClickNext }, moveButtonProps), { children: /* @__PURE__ */ jsx(ChevronRightIcon, __spreadValues({}, iconSize)) })),
|
|
110
|
+
/* @__PURE__ */ jsx(
|
|
111
|
+
IconButton,
|
|
112
|
+
__spreadProps(__spreadValues({
|
|
113
|
+
disabled: !doubleNext,
|
|
114
|
+
onClick: onClickDoubleNext
|
|
115
|
+
}, moveButtonProps), {
|
|
116
|
+
children: /* @__PURE__ */ jsx(DoubleArrowRightIcon, __spreadValues({}, iconSize))
|
|
117
|
+
})
|
|
118
|
+
)
|
|
119
|
+
] });
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
export {
|
|
123
|
+
Pagination
|
|
124
|
+
};
|
|
125
|
+
//# sourceMappingURL=chunk-EFVHZOXL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/atoms/pagination.tsx"],"sourcesContent":["import React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport {\n ChevronLeftIcon,\n ChevronRightIcon,\n DoubleArrowLeftIcon,\n DoubleArrowRightIcon,\n} from '../icon';\nimport type { IconButtonProps } from './icon-button';\nimport { IconButton } from './icon-button';\nimport { Flex } from './flex';\nimport { Typo } from './typo';\n\nexport interface PaginationProps {\n /** 현재 선택된 페이지, 1부터 시작 */\n page?: number;\n /** 기본 선택 페이지, page보다 낮은 우선 순위를 갖는다 */\n defaultPage?: number;\n /** 선택한 페이지 변경 이벤트 cb */\n onChange?: (page: number) => void;\n /** 전체 페이지의 수 */\n count?: number;\n /** 표시할 페이지 버튼의 개수 */\n siblingCount?: number;\n}\n\nexport function Pagination(props: PaginationProps): React.ReactNode {\n const { onChange, count = 0, siblingCount = 2 } = props;\n\n const [page, setPage] = useState(() => props.page || props.defaultPage || 1);\n\n const visibleItems = useMemo(() => {\n let start = Math.max(1, page - siblingCount);\n let end = Math.min(count, page + siblingCount);\n if (page - siblingCount <= 0 && end < count) {\n end = Math.min(count, end + Math.abs(page - siblingCount) + 1);\n } else if (page + siblingCount > count && start > 1) {\n start = Math.max(1, start - (page + siblingCount - count));\n }\n\n return Array.from({ length: end - start + 1 }, (_, i) => i + start);\n }, [count, page, siblingCount]);\n\n useEffect(() => {\n onChange?.(page);\n }, [onChange, page]);\n\n useEffect(() => {\n if (props.page) {\n setPage(props.page);\n }\n }, [props.page]);\n\n const prev = useMemo<number | undefined>(() => {\n const p = page - 1;\n return p < 1 ? undefined : p;\n }, [page]);\n\n const next = useMemo<number | undefined>(() => {\n const n = page + 1;\n return n > count ? undefined : n;\n }, [count, page]);\n\n const onClickPrev = useCallback(() => {\n prev && setPage(prev);\n }, [prev]);\n\n const onClickNext = useCallback(() => {\n next && setPage(next);\n }, [next]);\n\n const doublePrev = useMemo<number | undefined>(() => {\n if (!visibleItems.length) return;\n return Math.max(0, visibleItems[0] - 1);\n }, [visibleItems]);\n\n const onClickDoublePrev = useCallback(() => {\n doublePrev && setPage(doublePrev);\n }, [doublePrev]);\n\n const doubleNext = useMemo<number | undefined>(() => {\n if (!visibleItems.length) return;\n const n = visibleItems[visibleItems.length - 1] + 1;\n if (n > count) return;\n return Math.min(count, n);\n }, [count, visibleItems]);\n\n const onClickDoubleNext = useCallback(() => {\n doubleNext && setPage(doubleNext);\n }, [doubleNext]);\n\n const iconSize = {\n height: 24,\n width: 24,\n };\n\n const moveButtonProps: IconButtonProps = {\n variant: 'ghost',\n size: '3',\n style: { borderRadius: '50%' },\n };\n\n return (\n <Flex align=\"center\" className=\"tipp-pagination\" gap=\"4\">\n <IconButton\n disabled={!doublePrev}\n onClick={onClickDoublePrev}\n {...moveButtonProps}\n >\n <DoubleArrowLeftIcon {...iconSize} />\n </IconButton>\n <IconButton disabled={!prev} onClick={onClickPrev} {...moveButtonProps}>\n <ChevronLeftIcon {...iconSize} />\n </IconButton>\n <Flex gap=\"1\">\n {visibleItems.map((item) => {\n return (\n <button\n className={`page-button ${item === page ? 'active' : ''}`}\n key={item}\n onClick={() => {\n setPage(item);\n }}\n type=\"button\"\n >\n <Typo variant=\"body\">{item}</Typo>\n </button>\n );\n })}\n </Flex>\n <IconButton disabled={!next} onClick={onClickNext} {...moveButtonProps}>\n <ChevronRightIcon {...iconSize} />\n </IconButton>\n <IconButton\n disabled={!doubleNext}\n onClick={onClickDoubleNext}\n {...moveButtonProps}\n >\n <DoubleArrowRightIcon {...iconSize} />\n </IconButton>\n </Flex>\n );\n}\n"],"mappings":"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","names":[]}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Avatar
|
|
3
|
+
} from "./chunk-FC7WH2S6.js";
|
|
4
|
+
import {
|
|
5
|
+
Typo
|
|
6
|
+
} from "./chunk-LH57PIY2.js";
|
|
7
|
+
import {
|
|
8
|
+
Flex
|
|
9
|
+
} from "./chunk-25HMMI7R.js";
|
|
10
|
+
import {
|
|
11
|
+
CheckIcon
|
|
12
|
+
} from "./chunk-73HTISDU.js";
|
|
13
|
+
|
|
14
|
+
// src/molecules/stepper.tsx
|
|
15
|
+
import { createContext, Children, useContext, useMemo } from "react";
|
|
16
|
+
import { Separator } from "@radix-ui/themes";
|
|
17
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
18
|
+
var StepContext = createContext({
|
|
19
|
+
active: false,
|
|
20
|
+
completed: false,
|
|
21
|
+
index: 0
|
|
22
|
+
});
|
|
23
|
+
function Root(props) {
|
|
24
|
+
const {
|
|
25
|
+
activeStep = 0,
|
|
26
|
+
children,
|
|
27
|
+
width,
|
|
28
|
+
minWidth,
|
|
29
|
+
maxWidth,
|
|
30
|
+
direction = "vertical"
|
|
31
|
+
} = props;
|
|
32
|
+
return /* @__PURE__ */ jsx(
|
|
33
|
+
Flex,
|
|
34
|
+
{
|
|
35
|
+
gap: "3",
|
|
36
|
+
style: {
|
|
37
|
+
width,
|
|
38
|
+
minWidth,
|
|
39
|
+
maxWidth
|
|
40
|
+
},
|
|
41
|
+
children: Children.map(children, (child, index) => {
|
|
42
|
+
return /* @__PURE__ */ jsx(
|
|
43
|
+
StepContext.Provider,
|
|
44
|
+
{
|
|
45
|
+
value: {
|
|
46
|
+
active: index === activeStep,
|
|
47
|
+
completed: index < activeStep,
|
|
48
|
+
index,
|
|
49
|
+
direction
|
|
50
|
+
},
|
|
51
|
+
children: child
|
|
52
|
+
}
|
|
53
|
+
);
|
|
54
|
+
})
|
|
55
|
+
}
|
|
56
|
+
);
|
|
57
|
+
}
|
|
58
|
+
function Step(props) {
|
|
59
|
+
const { Icon, children } = props;
|
|
60
|
+
const {
|
|
61
|
+
active,
|
|
62
|
+
completed,
|
|
63
|
+
index,
|
|
64
|
+
direction = "vertical"
|
|
65
|
+
} = useContext(StepContext);
|
|
66
|
+
const connector = index > 0 ? /* @__PURE__ */ jsx(
|
|
67
|
+
Separator,
|
|
68
|
+
{
|
|
69
|
+
style: {
|
|
70
|
+
width: `calc(100% - 40px)`,
|
|
71
|
+
position: "absolute",
|
|
72
|
+
top: 16,
|
|
73
|
+
right: `calc(50% + 26px)`
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
) : null;
|
|
77
|
+
const InnerStep = useMemo(() => {
|
|
78
|
+
if (active) {
|
|
79
|
+
return ActiveStep;
|
|
80
|
+
}
|
|
81
|
+
if (completed) {
|
|
82
|
+
return CompleteStep;
|
|
83
|
+
}
|
|
84
|
+
return IncompleteStep;
|
|
85
|
+
}, [completed, active]);
|
|
86
|
+
return /* @__PURE__ */ jsxs(
|
|
87
|
+
Flex,
|
|
88
|
+
{
|
|
89
|
+
align: "center",
|
|
90
|
+
direction: direction === "horizontal" ? "row" : "column",
|
|
91
|
+
gap: "4",
|
|
92
|
+
position: "relative",
|
|
93
|
+
style: { flex: 1 },
|
|
94
|
+
children: [
|
|
95
|
+
connector,
|
|
96
|
+
/* @__PURE__ */ jsx(InnerStep, { Icon, children })
|
|
97
|
+
]
|
|
98
|
+
}
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
function CompleteStep(props) {
|
|
102
|
+
const { Icon, children } = props;
|
|
103
|
+
const { completed, active } = useContext(StepContext);
|
|
104
|
+
const background = "var(--accent-a4)";
|
|
105
|
+
const border = "1px solid var(--accent-7)";
|
|
106
|
+
const color = "var(--accent-contrast)";
|
|
107
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
108
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { active, completed }) : /* @__PURE__ */ jsx(
|
|
109
|
+
Avatar,
|
|
110
|
+
{
|
|
111
|
+
fallback: /* @__PURE__ */ jsx(CheckIcon, { fill: color, height: 16, width: 16 }),
|
|
112
|
+
radius: "full",
|
|
113
|
+
size: "medium",
|
|
114
|
+
style: {
|
|
115
|
+
border,
|
|
116
|
+
background
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
),
|
|
120
|
+
/* @__PURE__ */ jsx(Typo, { align: "center", variant: "caption", children })
|
|
121
|
+
] });
|
|
122
|
+
}
|
|
123
|
+
function IncompleteStep(props) {
|
|
124
|
+
const { Icon, children } = props;
|
|
125
|
+
const { completed, active, index } = useContext(StepContext);
|
|
126
|
+
const background = "var(--gray-5)";
|
|
127
|
+
const color = "var(--gray-a11)";
|
|
128
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
129
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { active, completed }) : /* @__PURE__ */ jsx(
|
|
130
|
+
Avatar,
|
|
131
|
+
{
|
|
132
|
+
fallback: /* @__PURE__ */ jsx(Typo, { style: { color }, children: index + 1 }),
|
|
133
|
+
radius: "full",
|
|
134
|
+
size: "medium",
|
|
135
|
+
style: {
|
|
136
|
+
background
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
),
|
|
140
|
+
/* @__PURE__ */ jsx(Typo, { align: "center", style: { color }, variant: "caption", children })
|
|
141
|
+
] });
|
|
142
|
+
}
|
|
143
|
+
function ActiveStep(props) {
|
|
144
|
+
const { Icon, children } = props;
|
|
145
|
+
const { completed, active, index } = useContext(StepContext);
|
|
146
|
+
const background = "var(--accent-10)";
|
|
147
|
+
const color = "var(--accent-contrast)";
|
|
148
|
+
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
149
|
+
Icon ? /* @__PURE__ */ jsx(Icon, { active, completed }) : /* @__PURE__ */ jsx(
|
|
150
|
+
Avatar,
|
|
151
|
+
{
|
|
152
|
+
fallback: /* @__PURE__ */ jsx(Typo, { style: { color }, weight: "bold", children: index + 1 }),
|
|
153
|
+
radius: "full",
|
|
154
|
+
size: "medium",
|
|
155
|
+
style: { background }
|
|
156
|
+
}
|
|
157
|
+
),
|
|
158
|
+
/* @__PURE__ */ jsx(Typo, { align: "center", variant: "caption", weight: "bold", children })
|
|
159
|
+
] });
|
|
160
|
+
}
|
|
161
|
+
var Stepper = {
|
|
162
|
+
Root,
|
|
163
|
+
Step
|
|
164
|
+
};
|
|
165
|
+
|
|
166
|
+
export {
|
|
167
|
+
Stepper
|
|
168
|
+
};
|
|
169
|
+
//# sourceMappingURL=chunk-FYW5UFSF.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/molecules/stepper.tsx"],"sourcesContent":["import React, { createContext, Children, useContext, useMemo } from 'react';\nimport { Separator } from '@radix-ui/themes';\nimport { Flex } from '../atoms/flex';\nimport { Avatar } from '../atoms/avatar';\nimport { CheckIcon } from '../icon';\nimport { Typo } from '../atoms/typo';\n\ninterface StepState extends Pick<StepperProps, 'direction'> {\n active: boolean;\n completed: boolean;\n index: number;\n}\n\nconst StepContext = createContext<StepState>({\n active: false,\n completed: false,\n index: 0,\n});\n\ninterface StepperProps {\n // 활성화된 스텝 인덱스. 0부터 시작\n activeStep?: number;\n children?: React.ReactNode | React.ReactNode[];\n width?: string;\n maxWidth?: string;\n minWidth?: string;\n /** icon과 children의 배치 방향. 기본 값 vertical */\n direction?: 'horizontal' | 'vertical';\n}\n\nfunction Root(props: StepperProps): React.ReactNode {\n const {\n activeStep = 0,\n children,\n width,\n minWidth,\n maxWidth,\n direction = 'vertical',\n } = props;\n\n return (\n <Flex\n gap=\"3\"\n style={{\n width,\n minWidth,\n maxWidth,\n }}\n >\n {Children.map(children, (child, index) => {\n return (\n <StepContext.Provider\n value={{\n active: index === activeStep,\n completed: index < activeStep,\n index,\n direction,\n }}\n >\n {child}\n </StepContext.Provider>\n );\n })}\n </Flex>\n );\n}\n\ninterface StepProps {\n children?: React.ReactNode;\n /** 아이콘 커스텀 필요시 사용 */\n Icon?: (args: { completed: boolean; active: boolean }) => React.ReactNode;\n}\n\nfunction Step(props: StepProps): React.ReactNode {\n const { Icon, children } = props;\n const {\n active,\n completed,\n index,\n direction = 'vertical',\n } = useContext(StepContext);\n\n const connector =\n index > 0 ? (\n <Separator\n style={{\n width: `calc(100% - 40px)`,\n position: 'absolute',\n top: 16,\n right: `calc(50% + 26px)`,\n }}\n />\n ) : null;\n\n const InnerStep = useMemo<(props: StepProps) => React.ReactNode>(() => {\n if (active) {\n return ActiveStep;\n }\n if (completed) {\n return CompleteStep;\n }\n return IncompleteStep;\n }, [completed, active]);\n\n return (\n <Flex\n align=\"center\"\n direction={direction === 'horizontal' ? 'row' : 'column'}\n gap=\"4\"\n position=\"relative\"\n style={{ flex: 1 }}\n >\n {connector}\n <InnerStep Icon={Icon}>{children}</InnerStep>\n </Flex>\n );\n}\n\nfunction CompleteStep(props: StepProps): React.ReactNode {\n const { Icon, children } = props;\n const { completed, active } = useContext(StepContext);\n const background = 'var(--accent-a4)';\n const border = '1px solid var(--accent-7)';\n const color = 'var(--accent-contrast)';\n\n return (\n <>\n {Icon ? (\n <Icon active={active} completed={completed} />\n ) : (\n <Avatar\n fallback={<CheckIcon fill={color} height={16} width={16} />}\n radius=\"full\"\n size=\"medium\"\n style={{\n border,\n background,\n }}\n />\n )}\n <Typo align=\"center\" variant=\"caption\">\n {children}\n </Typo>\n </>\n );\n}\n\nfunction IncompleteStep(props: StepProps): React.ReactNode {\n const { Icon, children } = props;\n const { completed, active, index } = useContext(StepContext);\n const background = 'var(--gray-5)';\n const color = 'var(--gray-a11)';\n return (\n <>\n {Icon ? (\n <Icon active={active} completed={completed} />\n ) : (\n <Avatar\n fallback={<Typo style={{ color }}>{index + 1}</Typo>}\n radius=\"full\"\n size=\"medium\"\n style={{\n background,\n }}\n />\n )}\n <Typo align=\"center\" style={{ color }} variant=\"caption\">\n {children}\n </Typo>\n </>\n );\n}\n\nfunction ActiveStep(props: StepProps): React.ReactNode {\n const { Icon, children } = props;\n const { completed, active, index } = useContext(StepContext);\n const background = 'var(--accent-10)';\n const color = 'var(--accent-contrast)';\n\n return (\n <>\n {Icon ? (\n <Icon active={active} completed={completed} />\n ) : (\n <Avatar\n fallback={\n <Typo style={{ color }} weight=\"bold\">\n {index + 1}\n </Typo>\n }\n radius=\"full\"\n size=\"medium\"\n style={{ background }}\n />\n )}\n <Typo align=\"center\" variant=\"caption\" weight=\"bold\">\n {children}\n </Typo>\n </>\n );\n}\n\nexport const Stepper = {\n Root,\n Step,\n};\n"],"mappings":"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","names":[]}
|