@reitwagen/design-components 0.3.1 → 0.6.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.
- package/dist/components/Button/Button.d.ts +6 -5
- package/dist/components/Button/Button.d.ts.map +1 -1
- package/dist/components/Button/Button.js +3 -2
- package/dist/components/Button/Button.stories.d.ts +1 -0
- package/dist/components/Button/Button.stories.d.ts.map +1 -1
- package/dist/components/Button/Button.stories.js +4 -0
- package/dist/components/Checkbox/Checkbox.d.ts +3 -5
- package/dist/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.js +1 -2
- package/dist/components/Checkbox/Checkbox.stories.d.ts +1 -0
- package/dist/components/Checkbox/Checkbox.stories.d.ts.map +1 -1
- package/dist/components/Checkbox/Checkbox.stories.js +5 -1
- package/dist/components/Chip/Chip.d.ts +2 -2
- package/dist/components/Chip/Chip.d.ts.map +1 -1
- package/dist/components/Chip/Chip.js +1 -0
- package/dist/components/Chip/Chip.stories.d.ts +1 -0
- package/dist/components/Chip/Chip.stories.d.ts.map +1 -1
- package/dist/components/Chip/Chip.stories.js +2 -0
- package/dist/components/Chip/index.d.ts.map +1 -1
- package/dist/components/FormControl/FormControl.d.ts +55 -0
- package/dist/components/FormControl/FormControl.d.ts.map +1 -0
- package/dist/components/FormControl/FormControl.js +79 -0
- package/dist/components/FormControl/FormControl.stories.d.ts +19 -0
- package/dist/components/FormControl/FormControl.stories.d.ts.map +1 -0
- package/dist/components/FormControl/FormControl.stories.js +75 -0
- package/dist/components/FormControl/FormControlLabel.d.ts +20 -0
- package/dist/components/FormControl/FormControlLabel.d.ts.map +1 -0
- package/dist/components/FormControl/FormControlLabel.js +32 -0
- package/dist/components/FormControl/FormControlValidation.d.ts +13 -0
- package/dist/components/FormControl/FormControlValidation.d.ts.map +1 -0
- package/dist/components/FormControl/FormControlValidation.js +22 -0
- package/dist/components/FormControl/index.d.ts +2 -0
- package/dist/components/FormControl/index.d.ts.map +1 -0
- package/dist/components/FormControl/index.js +5 -0
- package/dist/components/Icons/IconAlarmOff.d.ts.map +1 -1
- package/dist/components/Icons/IconAlarmOff.js +1 -0
- package/dist/components/Icons/IconAlarmOn.d.ts.map +1 -1
- package/dist/components/Icons/IconAlarmOn.js +1 -0
- package/dist/components/Icons/IconAppleDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconAppleDefault.js +1 -0
- package/dist/components/Icons/IconArrowDown.d.ts.map +1 -1
- package/dist/components/Icons/IconArrowDown.js +1 -0
- package/dist/components/Icons/IconArrowLeft.d.ts.map +1 -1
- package/dist/components/Icons/IconArrowLeft.js +1 -0
- package/dist/components/Icons/IconArrowRight.d.ts.map +1 -1
- package/dist/components/Icons/IconArrowRight.js +1 -0
- package/dist/components/Icons/IconArrowUp.d.ts.map +1 -1
- package/dist/components/Icons/IconArrowUp.js +1 -0
- package/dist/components/Icons/IconBikeDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconBikeDefault.js +1 -0
- package/dist/components/Icons/IconBookmarkOff.d.ts.map +1 -1
- package/dist/components/Icons/IconBookmarkOff.js +1 -0
- package/dist/components/Icons/IconBookmarkOn.d.ts.map +1 -1
- package/dist/components/Icons/IconBookmarkOn.js +1 -0
- package/dist/components/Icons/IconCafeDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCafeDefault.js +1 -0
- package/dist/components/Icons/IconCalendarDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCalendarDefault.js +1 -0
- package/dist/components/Icons/IconCallDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCallDefault.js +1 -0
- package/dist/components/Icons/IconCameraDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCameraDefault.js +1 -0
- package/dist/components/Icons/IconChatDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconChatDefault.js +1 -0
- package/dist/components/Icons/IconCheckDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCheckDefault.js +1 -0
- package/dist/components/Icons/IconChevronDown.d.ts.map +1 -1
- package/dist/components/Icons/IconChevronDown.js +1 -0
- package/dist/components/Icons/IconChevronLeft.d.ts.map +1 -1
- package/dist/components/Icons/IconChevronLeft.js +1 -0
- package/dist/components/Icons/IconChevronRight.d.ts.map +1 -1
- package/dist/components/Icons/IconChevronRight.js +1 -0
- package/dist/components/Icons/IconChevronUp.d.ts.map +1 -1
- package/dist/components/Icons/IconChevronUp.js +1 -0
- package/dist/components/Icons/IconCloseCircle.d.ts.map +1 -1
- package/dist/components/Icons/IconCloseCircle.js +1 -0
- package/dist/components/Icons/IconCloseDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCloseDefault.js +1 -0
- package/dist/components/Icons/IconCloseSmall.d.ts.map +1 -1
- package/dist/components/Icons/IconCloseSmall.js +1 -0
- package/dist/components/Icons/IconCommentOff.d.ts.map +1 -1
- package/dist/components/Icons/IconCommentOff.js +1 -0
- package/dist/components/Icons/IconCommentOn.d.ts.map +1 -1
- package/dist/components/Icons/IconCommentOn.js +1 -0
- package/dist/components/Icons/IconCommunityDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCommunityDefault.js +1 -0
- package/dist/components/Icons/IconCopyDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCopyDefault.js +1 -0
- package/dist/components/Icons/IconCouponDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconCouponDefault.js +1 -0
- package/dist/components/Icons/IconEditDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconEditDefault.js +1 -0
- package/dist/components/Icons/IconEyeOff.d.ts.map +1 -1
- package/dist/components/Icons/IconEyeOff.js +1 -0
- package/dist/components/Icons/IconEyeOn.d.ts.map +1 -1
- package/dist/components/Icons/IconEyeOn.js +1 -0
- package/dist/components/Icons/IconFilterDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconFilterDefault.js +1 -0
- package/dist/components/Icons/IconFireDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconFireDefault.js +1 -0
- package/dist/components/Icons/IconFlagDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconFlagDefault.js +1 -0
- package/dist/components/Icons/IconFunDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconFunDefault.js +1 -0
- package/dist/components/Icons/IconHeartDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconHeartDefault.js +1 -0
- package/dist/components/Icons/IconHeartOff.d.ts.map +1 -1
- package/dist/components/Icons/IconHeartOff.js +1 -0
- package/dist/components/Icons/IconHeartOn.d.ts.map +1 -1
- package/dist/components/Icons/IconHeartOn.js +1 -0
- package/dist/components/Icons/IconHelmetDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconHelmetDefault.js +1 -0
- package/dist/components/Icons/IconHomeDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconHomeDefault.js +1 -0
- package/dist/components/Icons/IconHomeLine.d.ts.map +1 -1
- package/dist/components/Icons/IconHomeLine.js +1 -0
- package/dist/components/Icons/IconImageDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconImageDefault.js +1 -0
- package/dist/components/Icons/IconInfoDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconInfoDefault.js +1 -0
- package/dist/components/Icons/IconInformationDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconInformationDefault.js +1 -0
- package/dist/components/Icons/IconInstagramDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconInstagramDefault.js +1 -0
- package/dist/components/Icons/IconKakaotalkDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconKakaotalkDefault.js +1 -0
- package/dist/components/Icons/IconLike.d.ts.map +1 -1
- package/dist/components/Icons/IconLike.js +1 -0
- package/dist/components/Icons/IconLikeOff.d.ts.map +1 -1
- package/dist/components/Icons/IconLikeOff.js +1 -0
- package/dist/components/Icons/IconLikeOn.d.ts.map +1 -1
- package/dist/components/Icons/IconLikeOn.js +1 -0
- package/dist/components/Icons/IconLocateDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconLocateDefault.js +1 -0
- package/dist/components/Icons/IconMYDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconMYDefault.js +1 -0
- package/dist/components/Icons/IconMYLine.d.ts.map +1 -1
- package/dist/components/Icons/IconMYLine.js +1 -0
- package/dist/components/Icons/IconMedal.d.ts.map +1 -1
- package/dist/components/Icons/IconMedal.js +1 -0
- package/dist/components/Icons/IconMenuDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconMenuDefault.js +1 -0
- package/dist/components/Icons/IconMessage.d.ts.map +1 -1
- package/dist/components/Icons/IconMessage.js +1 -0
- package/dist/components/Icons/IconMessageDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconMessageDefault.js +1 -0
- package/dist/components/Icons/IconMinusDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconMinusDefault.js +1 -0
- package/dist/components/Icons/IconMoreDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconMoreDefault.js +1 -0
- package/dist/components/Icons/IconNaviDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconNaviDefault.js +1 -0
- package/dist/components/Icons/IconNaviLine.d.ts.map +1 -1
- package/dist/components/Icons/IconNaviLine.js +1 -0
- package/dist/components/Icons/IconNull.d.ts.map +1 -1
- package/dist/components/Icons/IconNull.js +1 -0
- package/dist/components/Icons/IconOilDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconOilDefault.js +1 -0
- package/dist/components/Icons/IconPlaceDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconPlaceDefault.js +1 -0
- package/dist/components/Icons/IconPlaceLine.d.ts.map +1 -1
- package/dist/components/Icons/IconPlaceLine.js +2 -1
- package/dist/components/Icons/IconPlusDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconPlusDefault.js +1 -0
- package/dist/components/Icons/IconReceiptDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconReceiptDefault.js +1 -0
- package/dist/components/Icons/IconRepairDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconRepairDefault.js +1 -0
- package/dist/components/Icons/IconResetDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconResetDefault.js +1 -0
- package/dist/components/Icons/IconRevolvingLightDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconRevolvingLightDefault.js +1 -0
- package/dist/components/Icons/IconSadDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconSadDefault.js +1 -0
- package/dist/components/Icons/IconSafe.d.ts.map +1 -1
- package/dist/components/Icons/IconSafe.js +1 -0
- package/dist/components/Icons/IconSearchDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconSearchDefault.js +1 -0
- package/dist/components/Icons/IconSettingDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconSettingDefault.js +1 -0
- package/dist/components/Icons/IconShareDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconShareDefault.js +1 -0
- package/dist/components/Icons/IconShopDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconShopDefault.js +1 -0
- package/dist/components/Icons/IconSmileDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconSmileDefault.js +1 -0
- package/dist/components/Icons/IconStarOff.d.ts.map +1 -1
- package/dist/components/Icons/IconStarOff.js +1 -0
- package/dist/components/Icons/IconStarOn.d.ts.map +1 -1
- package/dist/components/Icons/IconStarOn.js +1 -0
- package/dist/components/Icons/IconThumbDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconThumbDefault.js +1 -0
- package/dist/components/Icons/IconThunder.d.ts.map +1 -1
- package/dist/components/Icons/IconThunder.js +1 -0
- package/dist/components/Icons/IconTimeDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconTimeDefault.js +1 -0
- package/dist/components/Icons/IconVoteDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconVoteDefault.js +1 -0
- package/dist/components/Icons/IconYoutubeDefault.d.ts.map +1 -1
- package/dist/components/Icons/IconYoutubeDefault.js +1 -0
- package/dist/components/Input/Input.d.ts +28 -0
- package/dist/components/Input/Input.d.ts.map +1 -0
- package/dist/components/Input/Input.js +30 -0
- package/dist/components/Input/Input.stories.d.ts +34 -0
- package/dist/components/Input/Input.stories.d.ts.map +1 -0
- package/dist/components/Input/Input.stories.js +81 -0
- package/dist/components/Input/Input.styles.d.ts +5 -0
- package/dist/components/Input/Input.styles.d.ts.map +1 -0
- package/dist/components/Input/Input.styles.js +20 -0
- package/dist/components/Input/index.d.ts +2 -0
- package/dist/components/Input/index.d.ts.map +1 -0
- package/dist/components/Input/index.js +5 -0
- package/dist/components/Radio/Radio.d.ts +34 -0
- package/dist/components/Radio/Radio.d.ts.map +1 -0
- package/dist/components/Radio/Radio.js +63 -0
- package/dist/components/Radio/Radio.stories.d.ts +34 -0
- package/dist/components/Radio/Radio.stories.d.ts.map +1 -0
- package/dist/components/Radio/Radio.stories.js +122 -0
- package/dist/components/Radio/Radio.styles.d.ts +9 -0
- package/dist/components/Radio/Radio.styles.d.ts.map +1 -0
- package/dist/components/Radio/Radio.styles.js +70 -0
- package/dist/components/Radio/index.d.ts +2 -0
- package/dist/components/Radio/index.d.ts.map +1 -0
- package/dist/components/Radio/index.js +5 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts +55 -0
- package/dist/components/RadioGroup/RadioGroup.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.js +45 -0
- package/dist/components/RadioGroup/RadioGroup.stories.d.ts +40 -0
- package/dist/components/RadioGroup/RadioGroup.stories.d.ts.map +1 -0
- package/dist/components/RadioGroup/RadioGroup.stories.js +103 -0
- package/dist/components/RadioGroup/index.d.ts +2 -0
- package/dist/components/RadioGroup/index.d.ts.map +1 -0
- package/dist/components/RadioGroup/index.js +5 -0
- package/dist/components/Toggle/Toggle.d.ts +8 -8
- package/dist/components/Toggle/Toggle.d.ts.map +1 -1
- package/dist/components/Toggle/Toggle.js +1 -4
- package/dist/components/Toggle/Toggle.stories.d.ts.map +1 -1
- package/dist/components/Toggle/index.d.ts.map +1 -1
- package/dist/index.css +101 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/types/props.d.ts +6 -2
- package/dist/types/props.d.ts.map +1 -1
- package/package.json +3 -3
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Error = exports.Default = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const Input_1 = require("./Input");
|
|
6
|
+
const meta = {
|
|
7
|
+
title: "Components/Input",
|
|
8
|
+
component: Input_1.Input,
|
|
9
|
+
tags: ["autodocs"],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: "centered",
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
Input은 한 줄의 텍스트 값을 설정하는데 사용됩니다.
|
|
16
|
+
|
|
17
|
+
## <b>Input guide</b>
|
|
18
|
+
|
|
19
|
+
입력 필드는 텍스트의 길이를 고려하여 적절한 크기로 제공하며, 플레이스홀더를 레이블이나 도움말의 대체 수단으로 사용하지 않도록 합니다.
|
|
20
|
+
`,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
argTypes: {
|
|
25
|
+
variant: {
|
|
26
|
+
control: { type: "radio" },
|
|
27
|
+
options: ["default"],
|
|
28
|
+
},
|
|
29
|
+
disabled: {
|
|
30
|
+
control: { type: "boolean" },
|
|
31
|
+
options: ["true", "false"],
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
exports.default = meta;
|
|
36
|
+
exports.Default = {
|
|
37
|
+
parameters: {
|
|
38
|
+
layout: "centered",
|
|
39
|
+
docs: {
|
|
40
|
+
description: {
|
|
41
|
+
story: `
|
|
42
|
+
|
|
43
|
+
`,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
},
|
|
47
|
+
render: (props) => ((0, jsx_runtime_1.jsxs)("div", { className: "ui:flex ui:gap-2", children: [(0, jsx_runtime_1.jsx)(Input_1.Input, { ...props }), props.children] })),
|
|
48
|
+
args: {
|
|
49
|
+
placeholder: "placeholder",
|
|
50
|
+
variant: "default",
|
|
51
|
+
},
|
|
52
|
+
argTypes: {
|
|
53
|
+
disabled: {
|
|
54
|
+
control: { type: "boolean" },
|
|
55
|
+
options: ["true", "false"],
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
exports.Error = {
|
|
60
|
+
parameters: {
|
|
61
|
+
layout: "centered",
|
|
62
|
+
docs: {
|
|
63
|
+
description: {
|
|
64
|
+
story: `
|
|
65
|
+
|
|
66
|
+
`,
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
render: (props) => ((0, jsx_runtime_1.jsxs)("div", { className: "ui:flex ui:gap-2", children: [(0, jsx_runtime_1.jsx)(Input_1.Input, { ...props, variant: "error" }), props.children] })),
|
|
71
|
+
args: {
|
|
72
|
+
placeholder: "placeholder",
|
|
73
|
+
variant: "error",
|
|
74
|
+
},
|
|
75
|
+
argTypes: {
|
|
76
|
+
disabled: {
|
|
77
|
+
control: { type: "boolean" },
|
|
78
|
+
options: ["true", "false"],
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Input/Input.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;8EAmBzB,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inputVariants = void 0;
|
|
4
|
+
const class_variance_authority_1 = require("class-variance-authority");
|
|
5
|
+
exports.inputVariants = (0, class_variance_authority_1.cva)("ui:h-[50px] ui:bg-white ui:px-4 ui:rounded-[16px] ui:w-full ui:border ui:text-body4 ui:transition-colors ui:outline-none", {
|
|
6
|
+
variants: {
|
|
7
|
+
variant: {
|
|
8
|
+
default: "ui:border-gray-100 ui:text-gray-800 ui:placeholder:text-body4 ui:placeholder:text-gray-500 ui:focus:bg-gray-50 ui:focus:border-gray-200",
|
|
9
|
+
error: "ui:border-red-200 ui:bg-red-50",
|
|
10
|
+
},
|
|
11
|
+
disabled: {
|
|
12
|
+
true: "ui:cursor-not-allowed ui:bg-gray-50 ui:border-gray-100 ui:text-gray-500 ui:placeholder:text-300",
|
|
13
|
+
false: "",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
defaultVariants: {
|
|
17
|
+
variant: "default",
|
|
18
|
+
disabled: false,
|
|
19
|
+
},
|
|
20
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Input/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ComponentPropsWithRef } from "react";
|
|
2
|
+
import { VariantProps } from "class-variance-authority";
|
|
3
|
+
import { ChildrenProps } from "../../types/props";
|
|
4
|
+
import { radioVariants } from "./Radio.styles";
|
|
5
|
+
export type RadioProps = ComponentPropsWithRef<"input"> & ChildrenProps & VariantProps<typeof radioVariants> & {
|
|
6
|
+
/**
|
|
7
|
+
* 라디오의 선택 상태가 변경될 때 호출되는 이벤트 핸들러
|
|
8
|
+
*/
|
|
9
|
+
onCheckedChange?: (checked: boolean) => void;
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* `Radio`: 그룹 내 단일 선택만 가능한 요소로, 상호 배타적 옵션을 나타냅니다. 그룹과 함께 사용하려면, `RadioGroup`을 사용하세요.
|
|
13
|
+
* @see [RDS Storybook: Radio](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radio--docs)
|
|
14
|
+
* @see [RDS Storybook: RadioGroup](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radiogroup--docs)
|
|
15
|
+
* @example
|
|
16
|
+
* ```tsx
|
|
17
|
+
* const [checked, setChecked] = useState(false)
|
|
18
|
+
*
|
|
19
|
+
* // Controlled
|
|
20
|
+
* <Radio
|
|
21
|
+
* checked={checked}
|
|
22
|
+
* onCheckedChange={() => setChecked(!checked)}
|
|
23
|
+
* >
|
|
24
|
+
* Option
|
|
25
|
+
* </Radio>
|
|
26
|
+
* // Uncontrolled
|
|
27
|
+
* <Radio defaultChecked>Option</Radio>
|
|
28
|
+
* ```
|
|
29
|
+
*/
|
|
30
|
+
export declare function Radio({ id: idProp, checked: controlledChecked, defaultChecked, disabled, className, onCheckedChange, children, value, ...props }: RadioProps): import("react/jsx-runtime").JSX.Element;
|
|
31
|
+
export declare namespace Radio {
|
|
32
|
+
var displayName: string;
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=Radio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,qBAAqB,EAAmB,MAAM,OAAO,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAoB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGjE,MAAM,MAAM,UAAU,GAAG,qBAAqB,CAAC,OAAO,CAAC,GACrD,aAAa,GACb,YAAY,CAAC,OAAO,aAAa,CAAC,GAAG;IACnC;;OAEG;IACH,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;CAC9C,CAAC;AAEJ;;;;;;;;;;;;;;;;;;GAkBG;AAEH,wBAAgB,KAAK,CAAC,EACpB,EAAE,EAAE,MAAM,EACV,OAAO,EAAE,iBAAiB,EAC1B,cAAc,EACd,QAAQ,EACR,SAAS,EACT,eAAe,EACf,QAAQ,EACR,KAAK,EACL,GAAG,KAAK,EACT,EAAE,UAAU,2CA8EZ;yBAxFe,KAAK"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
"use strict";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.Radio = Radio;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const style_1 = require("../../utils/style");
|
|
8
|
+
const Radio_styles_1 = require("./Radio.styles");
|
|
9
|
+
const RadioGroup_1 = require("../RadioGroup/RadioGroup");
|
|
10
|
+
/**
|
|
11
|
+
* `Radio`: 그룹 내 단일 선택만 가능한 요소로, 상호 배타적 옵션을 나타냅니다. 그룹과 함께 사용하려면, `RadioGroup`을 사용하세요.
|
|
12
|
+
* @see [RDS Storybook: Radio](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radio--docs)
|
|
13
|
+
* @see [RDS Storybook: RadioGroup](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radiogroup--docs)
|
|
14
|
+
* @example
|
|
15
|
+
* ```tsx
|
|
16
|
+
* const [checked, setChecked] = useState(false)
|
|
17
|
+
*
|
|
18
|
+
* // Controlled
|
|
19
|
+
* <Radio
|
|
20
|
+
* checked={checked}
|
|
21
|
+
* onCheckedChange={() => setChecked(!checked)}
|
|
22
|
+
* >
|
|
23
|
+
* Option
|
|
24
|
+
* </Radio>
|
|
25
|
+
* // Uncontrolled
|
|
26
|
+
* <Radio defaultChecked>Option</Radio>
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
function Radio({ id: idProp, checked: controlledChecked, defaultChecked, disabled, className, onCheckedChange, children, value, ...props }) {
|
|
30
|
+
const [uncontrolledChecked, setUncontrolledChecked] = (0, react_1.useState)(defaultChecked);
|
|
31
|
+
const group = (0, RadioGroup_1.useRadioGroup)();
|
|
32
|
+
const uniqId = (0, react_1.useId)();
|
|
33
|
+
const id = idProp || uniqId;
|
|
34
|
+
const isInGroup = !!group;
|
|
35
|
+
const isDisabled = group?.disabled || disabled;
|
|
36
|
+
const isChecked = isInGroup
|
|
37
|
+
? group.value === value
|
|
38
|
+
: (controlledChecked ?? uncontrolledChecked);
|
|
39
|
+
const handleChange = () => {
|
|
40
|
+
if (disabled) {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
if (isInGroup) {
|
|
44
|
+
group.setValue(value);
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
if (controlledChecked === undefined) {
|
|
48
|
+
setUncontrolledChecked(true);
|
|
49
|
+
}
|
|
50
|
+
onCheckedChange?.(true);
|
|
51
|
+
};
|
|
52
|
+
return ((0, jsx_runtime_1.jsxs)("label", { htmlFor: id, className: (0, style_1.cn)("ui:flex ui:items-center ui:gap-2 ui:cursor-pointer", isDisabled && "ui:cursor-default ui:pointer-events-none"), children: [(0, jsx_runtime_1.jsx)("input", { id: id, type: "radio", name: group?.name, value: value, checked: isChecked, defaultChecked: defaultChecked, disabled: isDisabled, onChange: handleChange, className: "ui:sr-only", ...props }), (0, jsx_runtime_1.jsx)("div", { className: (0, Radio_styles_1.radioVariants)({
|
|
53
|
+
checked: isChecked,
|
|
54
|
+
disabled: isDisabled,
|
|
55
|
+
className,
|
|
56
|
+
}), children: (0, jsx_runtime_1.jsx)("div", { className: (0, Radio_styles_1.radioDotVariants)({
|
|
57
|
+
checked: isChecked,
|
|
58
|
+
disabled: isDisabled,
|
|
59
|
+
}) }) }), children && ((0, jsx_runtime_1.jsx)("span", { className: (0, style_1.cn)("ui:text-body5", isDisabled
|
|
60
|
+
? "ui:text-gray-400 ui:pointer-events-none"
|
|
61
|
+
: "ui:cursor-pointer"), children: children }))] }));
|
|
62
|
+
}
|
|
63
|
+
Radio.displayName = "Radio";
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react";
|
|
2
|
+
import { Radio } from "./Radio";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof Radio;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
docs: {
|
|
10
|
+
description: {
|
|
11
|
+
component: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
argTypes: {
|
|
16
|
+
checked: {
|
|
17
|
+
control: {
|
|
18
|
+
type: "boolean";
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
disabled: {
|
|
22
|
+
control: {
|
|
23
|
+
type: "boolean";
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
export default meta;
|
|
29
|
+
type Story = StoryObj<typeof meta>;
|
|
30
|
+
export declare const Controlled: Story;
|
|
31
|
+
export declare const ControlledWithLabel: Story;
|
|
32
|
+
export declare const UnControlled: Story;
|
|
33
|
+
export declare const UnControlledWithLabel: Story;
|
|
34
|
+
//# sourceMappingURL=Radio.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.stories.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;CAsBoB,CAAC;AAE/B,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,UAAU,EAAE,KAgCxB,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,KA4BjC,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KAoB1B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,KASnC,CAAC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UnControlledWithLabel = exports.UnControlled = exports.ControlledWithLabel = exports.Controlled = void 0;
|
|
4
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
5
|
+
const Radio_1 = require("./Radio");
|
|
6
|
+
const meta = {
|
|
7
|
+
title: "Components/Radio",
|
|
8
|
+
component: Radio_1.Radio,
|
|
9
|
+
tags: ["autodocs"],
|
|
10
|
+
parameters: {
|
|
11
|
+
layout: "centered",
|
|
12
|
+
docs: {
|
|
13
|
+
description: {
|
|
14
|
+
component: `
|
|
15
|
+
그룹 내 단일 선택만 가능한 요소로, 상호 배타적 옵션을 나타냅니다. 라벨과 함께 사용하거나 단독으로 사용할 수 있습니다. 둘 이상의 Radio를 활용할 때는, \`<RadioGroup>\` 컴포넌트를 활용하는 것을 권장합니다.
|
|
16
|
+
`,
|
|
17
|
+
},
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
argTypes: {
|
|
21
|
+
checked: {
|
|
22
|
+
control: { type: "boolean" },
|
|
23
|
+
},
|
|
24
|
+
disabled: {
|
|
25
|
+
control: { type: "boolean" },
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
exports.default = meta;
|
|
30
|
+
exports.Controlled = {
|
|
31
|
+
parameters: {
|
|
32
|
+
layout: "centered",
|
|
33
|
+
docs: {
|
|
34
|
+
description: {
|
|
35
|
+
story: `
|
|
36
|
+
### 상태를 외부에서 관리하는 방식
|
|
37
|
+
|
|
38
|
+
Radio의 상태를 외부에서 관리하려면 \`checked\`와 \`onCheckedChange\` 속성을 함께 사용하세요.
|
|
39
|
+
`,
|
|
40
|
+
},
|
|
41
|
+
source: {
|
|
42
|
+
code: `
|
|
43
|
+
function Controlled() {
|
|
44
|
+
const [checked, setChecked] = useState(true);
|
|
45
|
+
|
|
46
|
+
return (
|
|
47
|
+
<Radio
|
|
48
|
+
checked={checked}
|
|
49
|
+
onCheckedChange={() => setChecked(!checked)}
|
|
50
|
+
/>
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
`.trim(),
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
render: (props) => (0, jsx_runtime_1.jsx)(Radio_1.Radio, { ...props }),
|
|
58
|
+
args: {
|
|
59
|
+
checked: true,
|
|
60
|
+
disabled: false,
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
exports.ControlledWithLabel = {
|
|
64
|
+
parameters: {
|
|
65
|
+
layout: "centered",
|
|
66
|
+
docs: {
|
|
67
|
+
source: {
|
|
68
|
+
code: `
|
|
69
|
+
function ControlledWithLabel() {
|
|
70
|
+
const [checked, setChecked] = useState(false);
|
|
71
|
+
|
|
72
|
+
return (
|
|
73
|
+
<Radio
|
|
74
|
+
checked={checked}
|
|
75
|
+
onCheckedChange={() => setChecked(!checked)}
|
|
76
|
+
>
|
|
77
|
+
Action Text
|
|
78
|
+
</Radio>
|
|
79
|
+
);
|
|
80
|
+
}
|
|
81
|
+
`.trim(),
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
},
|
|
85
|
+
render: (props) => (0, jsx_runtime_1.jsx)(Radio_1.Radio, { ...props }),
|
|
86
|
+
args: {
|
|
87
|
+
children: "Action Text",
|
|
88
|
+
checked: false,
|
|
89
|
+
disabled: false,
|
|
90
|
+
},
|
|
91
|
+
};
|
|
92
|
+
exports.UnControlled = {
|
|
93
|
+
parameters: {
|
|
94
|
+
layout: "centered",
|
|
95
|
+
docs: {
|
|
96
|
+
description: {
|
|
97
|
+
story: `
|
|
98
|
+
### 상태를 내부에서 관리하는 방식
|
|
99
|
+
|
|
100
|
+
Radio의 상태를 내부에서 자동으로 관리하려면 <code>defaultChecked</code> 속성을 사용하세요. 이 속성은 Checkbox이 처음 화면에 표시될 때 선택 상태를 정해주고, 그 후에는 컴포넌트가 스스로 상태를 관리해요. 상태 변화를 추적하지 않아도 될 때 유용해요.
|
|
101
|
+
`,
|
|
102
|
+
},
|
|
103
|
+
},
|
|
104
|
+
},
|
|
105
|
+
render: (props) => (0, jsx_runtime_1.jsx)(Radio_1.Radio, { ...props }),
|
|
106
|
+
args: {
|
|
107
|
+
defaultChecked: true,
|
|
108
|
+
},
|
|
109
|
+
argTypes: {
|
|
110
|
+
defaultChecked: { control: "boolean" },
|
|
111
|
+
},
|
|
112
|
+
};
|
|
113
|
+
exports.UnControlledWithLabel = {
|
|
114
|
+
render: (props) => (0, jsx_runtime_1.jsx)(Radio_1.Radio, { ...props, children: props.children }),
|
|
115
|
+
args: {
|
|
116
|
+
children: "Action Text",
|
|
117
|
+
defaultChecked: true,
|
|
118
|
+
},
|
|
119
|
+
argTypes: {
|
|
120
|
+
defaultChecked: { control: "boolean" },
|
|
121
|
+
},
|
|
122
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const radioVariants: (props?: ({
|
|
2
|
+
checked?: boolean | null | undefined;
|
|
3
|
+
disabled?: boolean | null | undefined;
|
|
4
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
5
|
+
export declare const radioDotVariants: (props?: ({
|
|
6
|
+
checked?: boolean | null | undefined;
|
|
7
|
+
disabled?: boolean | null | undefined;
|
|
8
|
+
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
9
|
+
//# sourceMappingURL=Radio.styles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Radio.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/Radio.styles.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,aAAa;;;8EAyCzB,CAAC;AAEF,eAAO,MAAM,gBAAgB;;;8EA8B5B,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.radioDotVariants = exports.radioVariants = void 0;
|
|
4
|
+
const class_variance_authority_1 = require("class-variance-authority");
|
|
5
|
+
exports.radioVariants = (0, class_variance_authority_1.cva)("ui:w-[22px] ui:h-[22px] ui:flex ui:items-center ui:justify-center ui:rounded-full ui:border-[1.5px] ui:duration-100 ui:transition-colors", {
|
|
6
|
+
variants: {
|
|
7
|
+
checked: {
|
|
8
|
+
true: "",
|
|
9
|
+
false: "",
|
|
10
|
+
},
|
|
11
|
+
disabled: {
|
|
12
|
+
true: "",
|
|
13
|
+
false: "",
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
compoundVariants: [
|
|
17
|
+
{
|
|
18
|
+
checked: true,
|
|
19
|
+
disabled: false,
|
|
20
|
+
className: "ui:bg-white ui:border-blue-700 ui:active:border-blue-800",
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
checked: false,
|
|
24
|
+
disabled: false,
|
|
25
|
+
className: "ui:bg-white ui:border-gray-200 ui:active:bg-gray-100 ui:active:border-gray-300",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
checked: true,
|
|
29
|
+
disabled: true,
|
|
30
|
+
className: "ui:bg-white ui:border-blue-300",
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
checked: false,
|
|
34
|
+
disabled: true,
|
|
35
|
+
className: "ui:bg-white ui:border-gray-100",
|
|
36
|
+
},
|
|
37
|
+
],
|
|
38
|
+
defaultVariants: {
|
|
39
|
+
checked: false,
|
|
40
|
+
disabled: false,
|
|
41
|
+
},
|
|
42
|
+
});
|
|
43
|
+
exports.radioDotVariants = (0, class_variance_authority_1.cva)("ui:w-3 ui:h-3 ui:rounded-full ui:transition-colors ui:duration-300", {
|
|
44
|
+
variants: {
|
|
45
|
+
checked: {
|
|
46
|
+
true: "ui:opacity-100",
|
|
47
|
+
false: "ui:opacity-0",
|
|
48
|
+
},
|
|
49
|
+
disabled: {
|
|
50
|
+
true: "",
|
|
51
|
+
false: "",
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
compoundVariants: [
|
|
55
|
+
{
|
|
56
|
+
checked: true,
|
|
57
|
+
disabled: false,
|
|
58
|
+
className: "ui:bg-blue-700 ui:active:bg-blue-800",
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
checked: true,
|
|
62
|
+
disabled: true,
|
|
63
|
+
className: "ui:bg-blue-300",
|
|
64
|
+
},
|
|
65
|
+
],
|
|
66
|
+
defaultVariants: {
|
|
67
|
+
checked: false,
|
|
68
|
+
disabled: false,
|
|
69
|
+
},
|
|
70
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/Radio/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ComponentPropsWithoutRef } from "react";
|
|
2
|
+
interface RadioGroupContextValue {
|
|
3
|
+
name: string;
|
|
4
|
+
disabled?: boolean;
|
|
5
|
+
value?: string;
|
|
6
|
+
setValue: (value: string) => void;
|
|
7
|
+
}
|
|
8
|
+
export declare const useRadioGroup: () => RadioGroupContextValue | null;
|
|
9
|
+
export interface RadioGroupProps extends ComponentPropsWithoutRef<"div"> {
|
|
10
|
+
/**
|
|
11
|
+
* `Radio` 컴포넌트 목록
|
|
12
|
+
*/
|
|
13
|
+
children: React.ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* 선택된 value (Controlled)
|
|
16
|
+
*/
|
|
17
|
+
value?: string;
|
|
18
|
+
/**
|
|
19
|
+
* 초기 선택 값 (Uncontrolled)
|
|
20
|
+
*/
|
|
21
|
+
defaultValue?: string;
|
|
22
|
+
/**
|
|
23
|
+
* 선택 값이 변경될 때 호출되는 이벤트 핸들러
|
|
24
|
+
*/
|
|
25
|
+
onValueChange?: (value: string) => void;
|
|
26
|
+
/**
|
|
27
|
+
* 그룹 전체 비활성화 여부
|
|
28
|
+
*/
|
|
29
|
+
disabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* `RadioGroup`: 하나의 값을 선택할 수 있는 라디오 옵션 그룹입니다.
|
|
33
|
+
* 내부의 `Radio` 컴포넌트는 자동으로 그룹 상태를 공유하며, 그룹 단위로 value 제어 및 disabled 상태를 관리할 수 있습니다.
|
|
34
|
+
*
|
|
35
|
+
* @see [RDS Storybook: RadioGroup](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radiogroup--docs)
|
|
36
|
+
* @example
|
|
37
|
+
* ```tsx
|
|
38
|
+
* // Controlled
|
|
39
|
+
* const [value, setValue] = useState("a");
|
|
40
|
+
*
|
|
41
|
+
* <RadioGroup value={value} onValueChange={setValue}>
|
|
42
|
+
* <Radio value="a">Option A</Radio>
|
|
43
|
+
* <Radio value="b">Option B</Radio>
|
|
44
|
+
* </RadioGroup>
|
|
45
|
+
*
|
|
46
|
+
* // Uncontrolled
|
|
47
|
+
* <RadioGroup defaultValue="b">
|
|
48
|
+
* <Radio value="a">Option A</Radio>
|
|
49
|
+
* <Radio value="b">Option B</Radio>
|
|
50
|
+
* </RadioGroup>
|
|
51
|
+
* ```
|
|
52
|
+
*/
|
|
53
|
+
export declare function RadioGroup({ children, value: controlledValue, defaultValue, onValueChange, disabled, className, ...props }: RadioGroupProps): import("react/jsx-runtime").JSX.Element;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=RadioGroup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.d.ts","sourceRoot":"","sources":["../../../src/components/RadioGroup/RadioGroup.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,wBAAwB,EAKzB,MAAM,OAAO,CAAC;AAGf,UAAU,sBAAsB;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACnC;AAID,eAAO,MAAM,aAAa,qCAA+B,CAAC;AAE1D,MAAM,WAAW,eAAgB,SAAQ,wBAAwB,CAAC,KAAK,CAAC;IACtE;;OAEG;IACH,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC;IAC1B;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB;;OAEG;IACH,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAExC;;OAEG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,UAAU,CAAC,EACzB,QAAQ,EACR,KAAK,EAAE,eAAe,EACtB,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,SAAS,EACT,GAAG,KAAK,EACT,EAAE,eAAe,2CAwBjB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.useRadioGroup = void 0;
|
|
4
|
+
exports.RadioGroup = RadioGroup;
|
|
5
|
+
const jsx_runtime_1 = require("react/jsx-runtime");
|
|
6
|
+
const react_1 = require("react");
|
|
7
|
+
const style_1 = require("../../utils/style");
|
|
8
|
+
const RadioGroupContext = (0, react_1.createContext)(null);
|
|
9
|
+
const useRadioGroup = () => (0, react_1.use)(RadioGroupContext);
|
|
10
|
+
exports.useRadioGroup = useRadioGroup;
|
|
11
|
+
/**
|
|
12
|
+
* `RadioGroup`: 하나의 값을 선택할 수 있는 라디오 옵션 그룹입니다.
|
|
13
|
+
* 내부의 `Radio` 컴포넌트는 자동으로 그룹 상태를 공유하며, 그룹 단위로 value 제어 및 disabled 상태를 관리할 수 있습니다.
|
|
14
|
+
*
|
|
15
|
+
* @see [RDS Storybook: RadioGroup](https://main--691ac7d6da1eb0c0acb5f3e2.chromatic.com/?path=/docs/components-radiogroup--docs)
|
|
16
|
+
* @example
|
|
17
|
+
* ```tsx
|
|
18
|
+
* // Controlled
|
|
19
|
+
* const [value, setValue] = useState("a");
|
|
20
|
+
*
|
|
21
|
+
* <RadioGroup value={value} onValueChange={setValue}>
|
|
22
|
+
* <Radio value="a">Option A</Radio>
|
|
23
|
+
* <Radio value="b">Option B</Radio>
|
|
24
|
+
* </RadioGroup>
|
|
25
|
+
*
|
|
26
|
+
* // Uncontrolled
|
|
27
|
+
* <RadioGroup defaultValue="b">
|
|
28
|
+
* <Radio value="a">Option A</Radio>
|
|
29
|
+
* <Radio value="b">Option B</Radio>
|
|
30
|
+
* </RadioGroup>
|
|
31
|
+
* ```
|
|
32
|
+
*/
|
|
33
|
+
function RadioGroup({ children, value: controlledValue, defaultValue, onValueChange, disabled, className, ...props }) {
|
|
34
|
+
const [uncontrolledValue, setUncontrolledValue] = (0, react_1.useState)(defaultValue);
|
|
35
|
+
const name = (0, react_1.useId)();
|
|
36
|
+
const isControlled = controlledValue !== undefined;
|
|
37
|
+
const currentValue = isControlled ? controlledValue : uncontrolledValue;
|
|
38
|
+
const setValue = (newValue) => {
|
|
39
|
+
if (!isControlled) {
|
|
40
|
+
setUncontrolledValue(newValue);
|
|
41
|
+
}
|
|
42
|
+
onValueChange?.(newValue);
|
|
43
|
+
};
|
|
44
|
+
return ((0, jsx_runtime_1.jsx)(RadioGroupContext, { value: { name, value: currentValue, disabled, setValue }, children: (0, jsx_runtime_1.jsx)("div", { className: (0, style_1.cn)("ui:flex ui:flex-col", className), ...props, children: children }) }));
|
|
45
|
+
}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { StoryObj } from "@storybook/react";
|
|
2
|
+
import { RadioGroup } from "./RadioGroup";
|
|
3
|
+
declare const meta: {
|
|
4
|
+
title: string;
|
|
5
|
+
component: typeof RadioGroup;
|
|
6
|
+
tags: string[];
|
|
7
|
+
parameters: {
|
|
8
|
+
layout: string;
|
|
9
|
+
docs: {
|
|
10
|
+
description: {
|
|
11
|
+
component: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
argTypes: {
|
|
16
|
+
value: {
|
|
17
|
+
control: "text";
|
|
18
|
+
};
|
|
19
|
+
defaultValue: {
|
|
20
|
+
control: "text";
|
|
21
|
+
};
|
|
22
|
+
disabled: {
|
|
23
|
+
control: "boolean";
|
|
24
|
+
};
|
|
25
|
+
className: {
|
|
26
|
+
control: "text";
|
|
27
|
+
description: string;
|
|
28
|
+
};
|
|
29
|
+
children: {
|
|
30
|
+
table: {
|
|
31
|
+
disable: true;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export default meta;
|
|
37
|
+
type Story = StoryObj<typeof meta>;
|
|
38
|
+
export declare const Controlled: Story;
|
|
39
|
+
export declare const Uncontrolled: Story;
|
|
40
|
+
//# sourceMappingURL=RadioGroup.stories.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RadioGroup.stories.d.ts","sourceRoot":"","sources":["../../../src/components/RadioGroup/RadioGroup.stories.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,EAAE,UAAU,EAAmB,MAAM,cAAc,CAAC;AAG3D,QAAA,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCyB,CAAC;AAEpC,eAAe,IAAI,CAAC;AACpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAcnC,eAAO,MAAM,UAAU,EAAE,KAmCxB,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,KA0B1B,CAAC"}
|