@spectrabrain/eds 0.1.0 → 0.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.
- package/AI.md +13 -63
- package/AI_CONTEXT.json +26 -95
- package/CHANGELOG.md +70 -4
- package/CONSUMER_AGENT.md +86 -164
- package/FRONTEND_CONVENTIONS.md +252 -0
- package/QUICKSTART.md +24 -29
- package/README.md +29 -73
- package/TAILWIND_V4.md +52 -184
- package/TOKEN_CONTEXT.md +79 -36
- package/consumer/align/templates/components.json +21 -0
- package/consumer/align/templates/env.mock +1 -0
- package/consumer/align/templates/eslint.config.js +35 -0
- package/consumer/align/templates/package.scripts.json +10 -0
- package/consumer/align/templates/prettierignore +2 -0
- package/consumer/align/templates/prettierrc.json +7 -0
- package/consumer/align/templates/src/app/App.tsx +16 -0
- package/consumer/align/templates/src/app/main.tsx +27 -0
- package/consumer/align/templates/src/app/providers/ErrorBoundary.tsx +58 -0
- package/consumer/align/templates/src/app/providers/ErrorHandler.tsx +29 -0
- package/consumer/align/templates/src/app/router/index.tsx +23 -0
- package/consumer/align/templates/src/app/styles/index.css +2 -0
- package/consumer/align/templates/src/mocks/browser.ts +5 -0
- package/consumer/align/templates/src/mocks/handlers.ts +4 -0
- package/consumer/align/templates/src/shared/api/index.ts +23 -0
- package/consumer/align/templates/src/shared/api/queryClient.ts +24 -0
- package/consumer/align/templates/src/shared/lib/eventBus.ts +44 -0
- package/consumer/align/templates/src/shared/lib/utils/index.ts +6 -0
- package/consumer/align/templates/src/vite-env.d.ts +2 -0
- package/consumer/align/templates/tsconfig.json +22 -0
- package/consumer/align/templates/vite.config.babel.ts +36 -0
- package/consumer/align/templates/vite.config.rolldown.ts +35 -0
- package/consumer/align-analysis.mjs +1159 -0
- package/consumer/align-plan.mjs +377 -0
- package/consumer/align-rules.mjs +473 -0
- package/consumer/align.mjs +401 -0
- package/consumer/cli.mjs +90 -40
- package/consumer/css-root.mjs +24 -4
- package/consumer/doctor.mjs +47 -21
- package/consumer/generate-tailwind.mjs +41 -1
- package/consumer/init.mjs +39 -25
- package/consumer/managed-block.mjs +11 -5
- package/consumer/paths.mjs +69 -14
- package/consumer/register-scripts.mjs +17 -12
- package/consumer/scan-classes.mjs +24 -5
- package/consumer/sync.mjs +35 -13
- package/consumer/update-agent-context.mjs +63 -7
- package/consumer-postinstall.mjs +8 -7
- package/dist/components/Button/README.md +66 -95
- package/dist/components/Button/spec.json +19 -138
- package/dist/components.css +102 -366
- package/dist/index.d.mts +20 -18
- package/dist/index.d.ts +20 -18
- package/dist/index.js +301 -1
- package/dist/index.mjs +301 -1
- package/dist/tokens.css +30 -0
- package/dist/tokens.d.mts +7 -3
- package/dist/tokens.d.ts +7 -3
- package/dist/tokens.js +301 -1
- package/dist/tokens.json +360 -0
- package/dist/tokens.mjs +301 -1
- package/llms.txt +20 -14
- package/package.json +3 -1
package/dist/index.d.mts
CHANGED
|
@@ -6,7 +6,7 @@ type ButtonIconName = "ArrowLeft" | "ArrowRight" | "Check" | "ChevronDown" | "Ch
|
|
|
6
6
|
|
|
7
7
|
/** 버튼 크기입니다. */
|
|
8
8
|
type ButtonSize = "xs" | "sm" | "md";
|
|
9
|
-
/** 행동의
|
|
9
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
10
10
|
type ButtonRole = "brand" | "neutral" | "critical";
|
|
11
11
|
/** 시각 위계입니다. role마다 허용 조합이 다르며 ButtonProps가 조합을 강제합니다. link는 neutral 탐색 전용입니다. */
|
|
12
12
|
type ButtonVariant = "solid" | "weak" | "outline" | "ghost" | "link";
|
|
@@ -14,27 +14,32 @@ type ButtonVariant = "solid" | "weak" | "outline" | "ghost" | "link";
|
|
|
14
14
|
type ButtonLayout = "textOnly" | "iconFirst" | "iconLast" | "iconBoth" | "iconOnly";
|
|
15
15
|
/** native button branch의 type입니다. 폼 제출은 "submit", 그 밖의 행동은 "button"입니다. */
|
|
16
16
|
type NativeButtonType = "button" | "submit" | "reset";
|
|
17
|
-
/**
|
|
18
|
-
* 허용되는 role·variant 조합입니다. 화면의 핵심 행동(저장·생성·확인)은 brand/solid, 일반 주요 행동(검색·조회)은 neutral/solid,
|
|
19
|
-
* 취소·닫기·수정은 neutral/outline, 부담이 낮은 반복 행동(초기화·갱신)은 neutral/weak, 되돌리기 어려운 삭제·초기화는 critical/weak입니다.
|
|
20
|
-
*/
|
|
17
|
+
/** 허용되는 role·variant 조합입니다. 행동별 선택은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
21
18
|
type ButtonVisualProps = {
|
|
19
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
22
20
|
readonly role: "brand";
|
|
21
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
23
22
|
readonly variant: "solid" | "outline";
|
|
24
23
|
} | {
|
|
24
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
25
25
|
readonly role: "neutral";
|
|
26
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
26
27
|
readonly variant: "solid" | "weak" | "outline" | "ghost";
|
|
27
28
|
} | {
|
|
29
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
28
30
|
readonly role: "critical";
|
|
31
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
29
32
|
readonly variant: "weak";
|
|
30
33
|
};
|
|
31
34
|
/** neutral/link 조합입니다. 페이지나 콘텐츠로 이동하는 탐색에만 사용하며 상태 변경이나 일반 CTA에는 쓰지 않습니다. */
|
|
32
35
|
type LinkVisualProps = {
|
|
36
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
33
37
|
readonly role: "neutral";
|
|
38
|
+
/** 페이지·콘텐츠 이동 전용 variant이며 href가 필수입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
34
39
|
readonly variant: "link";
|
|
35
40
|
};
|
|
36
41
|
type ReactIconSlot = {
|
|
37
|
-
/** label 앞의 custom ReactElement 슬롯입니다. startIconName과 함께 쓰지 않습니다. 크기는 Button이
|
|
42
|
+
/** label 앞의 custom ReactElement 슬롯입니다. startIconName과 함께 쓰지 않습니다. 크기는 Button이 맞추며, 이름으로 지정한 아이콘과 같아 보이려면 lucide 기본 stroke를 그대로 둡니다. */
|
|
38
43
|
readonly startIcon?: ReactElement;
|
|
39
44
|
readonly startIconName?: never;
|
|
40
45
|
} | {
|
|
@@ -43,7 +48,7 @@ type ReactIconSlot = {
|
|
|
43
48
|
readonly startIconName?: ButtonIconName;
|
|
44
49
|
};
|
|
45
50
|
type ReactEndIconSlot = {
|
|
46
|
-
/** label 뒤의 custom ReactElement 슬롯입니다. endIconName과 함께 쓰지 않습니다. 크기는 Button이
|
|
51
|
+
/** label 뒤의 custom ReactElement 슬롯입니다. endIconName과 함께 쓰지 않습니다. 크기는 Button이 맞추며, 이름으로 지정한 아이콘과 같아 보이려면 lucide 기본 stroke를 그대로 둡니다. */
|
|
47
52
|
readonly endIcon?: ReactElement;
|
|
48
53
|
readonly endIconName?: never;
|
|
49
54
|
} | {
|
|
@@ -52,11 +57,11 @@ type ReactEndIconSlot = {
|
|
|
52
57
|
readonly endIconName?: ButtonIconName;
|
|
53
58
|
};
|
|
54
59
|
type TextSlotProps = {
|
|
55
|
-
/** 버튼 label
|
|
60
|
+
/** 버튼 label이며 한 줄로 표시합니다. 렌더링할 내용이 없으면(빈 문자열·공백·null) render 오류이므로, icon-only는 children 대신 icon 또는 iconName을 씁니다. */
|
|
56
61
|
readonly children: ReactNode;
|
|
57
62
|
readonly icon?: never;
|
|
58
63
|
readonly iconName?: never;
|
|
59
|
-
/** 선택적 accessible name입니다.
|
|
64
|
+
/** 선택적 accessible name입니다. 공백뿐인 문자열은 render 오류이므로, 값이 없을 수 있으면 `""`로 대체하지 말고 prop을 생략합니다. */
|
|
60
65
|
readonly "aria-label"?: string;
|
|
61
66
|
} & ReactIconSlot & ReactEndIconSlot;
|
|
62
67
|
type IconOnlySlotProps = {
|
|
@@ -65,7 +70,7 @@ type IconOnlySlotProps = {
|
|
|
65
70
|
readonly startIconName?: never;
|
|
66
71
|
readonly endIcon?: never;
|
|
67
72
|
readonly endIconName?: never;
|
|
68
|
-
/** icon-only 버튼의 accessible name입니다.
|
|
73
|
+
/** icon-only 버튼의 accessible name입니다. 아이콘은 aria-hidden이므로 항상 비어 있지 않은 값(또는 aria-labelledby)을 지정합니다. 공백뿐인 문자열은 render 오류입니다. */
|
|
69
74
|
readonly "aria-label"?: string;
|
|
70
75
|
} & ({
|
|
71
76
|
/** icon-only용 custom ReactElement입니다. children·start/end 슬롯과 함께 쓰지 않습니다. */
|
|
@@ -85,7 +90,7 @@ type SharedProps = {
|
|
|
85
90
|
readonly disabled?: boolean;
|
|
86
91
|
/** 비동기 처리 중 상태입니다. aria-busy를 적용하고 상호작용을 막으며 label·아이콘 공간과 accessible name을 유지합니다. "저장 중…" 같은 별도 문구 대신 사용합니다. */
|
|
87
92
|
readonly loading?: boolean;
|
|
88
|
-
/**
|
|
93
|
+
/** 바깥 배치(margin·정렬·grid 위치)에만 사용합니다. 문서에 없는 색·상태·variant를 className으로 우회하지 않습니다. */
|
|
89
94
|
readonly className?: string;
|
|
90
95
|
/** 지원하지 않습니다. 공개 스타일 override를 제공하지 않습니다. */
|
|
91
96
|
readonly style?: never;
|
|
@@ -95,15 +100,12 @@ type NativeButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children
|
|
|
95
100
|
readonly type: NativeButtonType;
|
|
96
101
|
};
|
|
97
102
|
type NativeLinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "children" | "className" | "href" | "role" | "style" | "type" | "aria-label" | "aria-busy"> & {
|
|
98
|
-
/** 이동할 주소입니다. neutral/link branch에서 필수이며, 상태 변경이나 일반 CTA를 link로 표현하지 않습니다. */
|
|
103
|
+
/** 이동할 주소입니다. neutral/link branch에서 필수이며, 상태 변경이나 일반 CTA를 link로 표현하지 않습니다. 공백뿐인 주소는 render 오류이므로 주소가 없을 수 있으면 Button을 렌더링하지 않거나 native button branch를 씁니다. */
|
|
99
104
|
readonly href: string;
|
|
100
105
|
};
|
|
101
106
|
type NativeButtonBranchProps = SharedProps & NativeButtonProps & ButtonVisualProps & SlotProps;
|
|
102
107
|
type LinkBranchProps = SharedProps & NativeLinkProps & LinkVisualProps & SlotProps;
|
|
103
|
-
/**
|
|
104
|
-
* Button의 공개 props입니다. native button branch(type 필수)와 neutral/link branch(href 필수)의 union입니다.
|
|
105
|
-
* 허용 조합과 접근성 계약의 기계 판독 원천은 @spectrabrain/eds/components/Button/spec.json입니다.
|
|
106
|
-
*/
|
|
108
|
+
/** Button의 공개 props입니다. native button branch(type 필수)와 neutral/link branch(href 필수)의 union입니다. */
|
|
107
109
|
type ButtonProps = NativeButtonBranchProps | LinkBranchProps;
|
|
108
110
|
/** Button의 호출 시그니처입니다. ref는 branch에 따라 HTMLButtonElement 또는 HTMLAnchorElement입니다. */
|
|
109
111
|
interface ButtonComponent {
|
|
@@ -118,8 +120,8 @@ interface ButtonComponent {
|
|
|
118
120
|
}): ReactElement | null;
|
|
119
121
|
}
|
|
120
122
|
/**
|
|
121
|
-
* EDS Button입니다.
|
|
122
|
-
*
|
|
123
|
+
* EDS Button입니다. role·variant를 고를 때 package root의 dist/components/Button/README.md를,
|
|
124
|
+
* 허용 조합·아이콘 이름·접근성 동작을 확인할 때 dist/components/Button/spec.json을 읽습니다.
|
|
123
125
|
*/
|
|
124
126
|
declare const Button: ButtonComponent;
|
|
125
127
|
|
package/dist/index.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ type ButtonIconName = "ArrowLeft" | "ArrowRight" | "Check" | "ChevronDown" | "Ch
|
|
|
6
6
|
|
|
7
7
|
/** 버튼 크기입니다. */
|
|
8
8
|
type ButtonSize = "xs" | "sm" | "md";
|
|
9
|
-
/** 행동의
|
|
9
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
10
10
|
type ButtonRole = "brand" | "neutral" | "critical";
|
|
11
11
|
/** 시각 위계입니다. role마다 허용 조합이 다르며 ButtonProps가 조합을 강제합니다. link는 neutral 탐색 전용입니다. */
|
|
12
12
|
type ButtonVariant = "solid" | "weak" | "outline" | "ghost" | "link";
|
|
@@ -14,27 +14,32 @@ type ButtonVariant = "solid" | "weak" | "outline" | "ghost" | "link";
|
|
|
14
14
|
type ButtonLayout = "textOnly" | "iconFirst" | "iconLast" | "iconBoth" | "iconOnly";
|
|
15
15
|
/** native button branch의 type입니다. 폼 제출은 "submit", 그 밖의 행동은 "button"입니다. */
|
|
16
16
|
type NativeButtonType = "button" | "submit" | "reset";
|
|
17
|
-
/**
|
|
18
|
-
* 허용되는 role·variant 조합입니다. 화면의 핵심 행동(저장·생성·확인)은 brand/solid, 일반 주요 행동(검색·조회)은 neutral/solid,
|
|
19
|
-
* 취소·닫기·수정은 neutral/outline, 부담이 낮은 반복 행동(초기화·갱신)은 neutral/weak, 되돌리기 어려운 삭제·초기화는 critical/weak입니다.
|
|
20
|
-
*/
|
|
17
|
+
/** 허용되는 role·variant 조합입니다. 행동별 선택은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
21
18
|
type ButtonVisualProps = {
|
|
19
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
22
20
|
readonly role: "brand";
|
|
21
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
23
22
|
readonly variant: "solid" | "outline";
|
|
24
23
|
} | {
|
|
24
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
25
25
|
readonly role: "neutral";
|
|
26
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
26
27
|
readonly variant: "solid" | "weak" | "outline" | "ghost";
|
|
27
28
|
} | {
|
|
29
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
28
30
|
readonly role: "critical";
|
|
31
|
+
/** role 안의 시각 위계입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
29
32
|
readonly variant: "weak";
|
|
30
33
|
};
|
|
31
34
|
/** neutral/link 조합입니다. 페이지나 콘텐츠로 이동하는 탐색에만 사용하며 상태 변경이나 일반 CTA에는 쓰지 않습니다. */
|
|
32
35
|
type LinkVisualProps = {
|
|
36
|
+
/** 행동의 의미를 나타내는 시각 prop입니다. ARIA role이 아니며 DOM에 전달되지 않습니다. brand는 화면의 핵심 행동, neutral은 일반·보조 행동, critical은 되돌리기 어려운 행동입니다. */
|
|
33
37
|
readonly role: "neutral";
|
|
38
|
+
/** 페이지·콘텐츠 이동 전용 variant이며 href가 필수입니다. 행동별 조합은 QUICKSTART.md의 Button 조합표를 따릅니다. */
|
|
34
39
|
readonly variant: "link";
|
|
35
40
|
};
|
|
36
41
|
type ReactIconSlot = {
|
|
37
|
-
/** label 앞의 custom ReactElement 슬롯입니다. startIconName과 함께 쓰지 않습니다. 크기는 Button이
|
|
42
|
+
/** label 앞의 custom ReactElement 슬롯입니다. startIconName과 함께 쓰지 않습니다. 크기는 Button이 맞추며, 이름으로 지정한 아이콘과 같아 보이려면 lucide 기본 stroke를 그대로 둡니다. */
|
|
38
43
|
readonly startIcon?: ReactElement;
|
|
39
44
|
readonly startIconName?: never;
|
|
40
45
|
} | {
|
|
@@ -43,7 +48,7 @@ type ReactIconSlot = {
|
|
|
43
48
|
readonly startIconName?: ButtonIconName;
|
|
44
49
|
};
|
|
45
50
|
type ReactEndIconSlot = {
|
|
46
|
-
/** label 뒤의 custom ReactElement 슬롯입니다. endIconName과 함께 쓰지 않습니다. 크기는 Button이
|
|
51
|
+
/** label 뒤의 custom ReactElement 슬롯입니다. endIconName과 함께 쓰지 않습니다. 크기는 Button이 맞추며, 이름으로 지정한 아이콘과 같아 보이려면 lucide 기본 stroke를 그대로 둡니다. */
|
|
47
52
|
readonly endIcon?: ReactElement;
|
|
48
53
|
readonly endIconName?: never;
|
|
49
54
|
} | {
|
|
@@ -52,11 +57,11 @@ type ReactEndIconSlot = {
|
|
|
52
57
|
readonly endIconName?: ButtonIconName;
|
|
53
58
|
};
|
|
54
59
|
type TextSlotProps = {
|
|
55
|
-
/** 버튼 label
|
|
60
|
+
/** 버튼 label이며 한 줄로 표시합니다. 렌더링할 내용이 없으면(빈 문자열·공백·null) render 오류이므로, icon-only는 children 대신 icon 또는 iconName을 씁니다. */
|
|
56
61
|
readonly children: ReactNode;
|
|
57
62
|
readonly icon?: never;
|
|
58
63
|
readonly iconName?: never;
|
|
59
|
-
/** 선택적 accessible name입니다.
|
|
64
|
+
/** 선택적 accessible name입니다. 공백뿐인 문자열은 render 오류이므로, 값이 없을 수 있으면 `""`로 대체하지 말고 prop을 생략합니다. */
|
|
60
65
|
readonly "aria-label"?: string;
|
|
61
66
|
} & ReactIconSlot & ReactEndIconSlot;
|
|
62
67
|
type IconOnlySlotProps = {
|
|
@@ -65,7 +70,7 @@ type IconOnlySlotProps = {
|
|
|
65
70
|
readonly startIconName?: never;
|
|
66
71
|
readonly endIcon?: never;
|
|
67
72
|
readonly endIconName?: never;
|
|
68
|
-
/** icon-only 버튼의 accessible name입니다.
|
|
73
|
+
/** icon-only 버튼의 accessible name입니다. 아이콘은 aria-hidden이므로 항상 비어 있지 않은 값(또는 aria-labelledby)을 지정합니다. 공백뿐인 문자열은 render 오류입니다. */
|
|
69
74
|
readonly "aria-label"?: string;
|
|
70
75
|
} & ({
|
|
71
76
|
/** icon-only용 custom ReactElement입니다. children·start/end 슬롯과 함께 쓰지 않습니다. */
|
|
@@ -85,7 +90,7 @@ type SharedProps = {
|
|
|
85
90
|
readonly disabled?: boolean;
|
|
86
91
|
/** 비동기 처리 중 상태입니다. aria-busy를 적용하고 상호작용을 막으며 label·아이콘 공간과 accessible name을 유지합니다. "저장 중…" 같은 별도 문구 대신 사용합니다. */
|
|
87
92
|
readonly loading?: boolean;
|
|
88
|
-
/**
|
|
93
|
+
/** 바깥 배치(margin·정렬·grid 위치)에만 사용합니다. 문서에 없는 색·상태·variant를 className으로 우회하지 않습니다. */
|
|
89
94
|
readonly className?: string;
|
|
90
95
|
/** 지원하지 않습니다. 공개 스타일 override를 제공하지 않습니다. */
|
|
91
96
|
readonly style?: never;
|
|
@@ -95,15 +100,12 @@ type NativeButtonProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children
|
|
|
95
100
|
readonly type: NativeButtonType;
|
|
96
101
|
};
|
|
97
102
|
type NativeLinkProps = Omit<AnchorHTMLAttributes<HTMLAnchorElement>, "children" | "className" | "href" | "role" | "style" | "type" | "aria-label" | "aria-busy"> & {
|
|
98
|
-
/** 이동할 주소입니다. neutral/link branch에서 필수이며, 상태 변경이나 일반 CTA를 link로 표현하지 않습니다. */
|
|
103
|
+
/** 이동할 주소입니다. neutral/link branch에서 필수이며, 상태 변경이나 일반 CTA를 link로 표현하지 않습니다. 공백뿐인 주소는 render 오류이므로 주소가 없을 수 있으면 Button을 렌더링하지 않거나 native button branch를 씁니다. */
|
|
99
104
|
readonly href: string;
|
|
100
105
|
};
|
|
101
106
|
type NativeButtonBranchProps = SharedProps & NativeButtonProps & ButtonVisualProps & SlotProps;
|
|
102
107
|
type LinkBranchProps = SharedProps & NativeLinkProps & LinkVisualProps & SlotProps;
|
|
103
|
-
/**
|
|
104
|
-
* Button의 공개 props입니다. native button branch(type 필수)와 neutral/link branch(href 필수)의 union입니다.
|
|
105
|
-
* 허용 조합과 접근성 계약의 기계 판독 원천은 @spectrabrain/eds/components/Button/spec.json입니다.
|
|
106
|
-
*/
|
|
108
|
+
/** Button의 공개 props입니다. native button branch(type 필수)와 neutral/link branch(href 필수)의 union입니다. */
|
|
107
109
|
type ButtonProps = NativeButtonBranchProps | LinkBranchProps;
|
|
108
110
|
/** Button의 호출 시그니처입니다. ref는 branch에 따라 HTMLButtonElement 또는 HTMLAnchorElement입니다. */
|
|
109
111
|
interface ButtonComponent {
|
|
@@ -118,8 +120,8 @@ interface ButtonComponent {
|
|
|
118
120
|
}): ReactElement | null;
|
|
119
121
|
}
|
|
120
122
|
/**
|
|
121
|
-
* EDS Button입니다.
|
|
122
|
-
*
|
|
123
|
+
* EDS Button입니다. role·variant를 고를 때 package root의 dist/components/Button/README.md를,
|
|
124
|
+
* 허용 조합·아이콘 이름·접근성 동작을 확인할 때 dist/components/Button/spec.json을 읽습니다.
|
|
123
125
|
*/
|
|
124
126
|
declare const Button: ButtonComponent;
|
|
125
127
|
|
package/dist/index.js
CHANGED
|
@@ -414,6 +414,276 @@ var tokenMap = /* @__PURE__ */ Object.freeze({
|
|
|
414
414
|
"value": "#FDE047",
|
|
415
415
|
"cssVariable": "--eds-color-stroke-warning-weak"
|
|
416
416
|
},
|
|
417
|
+
"radius-1": {
|
|
418
|
+
"name": "radius-1",
|
|
419
|
+
"type": "dimension",
|
|
420
|
+
"value": {
|
|
421
|
+
"value": 2,
|
|
422
|
+
"unit": "px"
|
|
423
|
+
},
|
|
424
|
+
"cssVariable": "--eds-radius-1"
|
|
425
|
+
},
|
|
426
|
+
"radius-10": {
|
|
427
|
+
"name": "radius-10",
|
|
428
|
+
"type": "dimension",
|
|
429
|
+
"value": {
|
|
430
|
+
"value": 999,
|
|
431
|
+
"unit": "px"
|
|
432
|
+
},
|
|
433
|
+
"cssVariable": "--eds-radius-10"
|
|
434
|
+
},
|
|
435
|
+
"radius-2": {
|
|
436
|
+
"name": "radius-2",
|
|
437
|
+
"type": "dimension",
|
|
438
|
+
"value": {
|
|
439
|
+
"value": 4,
|
|
440
|
+
"unit": "px"
|
|
441
|
+
},
|
|
442
|
+
"cssVariable": "--eds-radius-2"
|
|
443
|
+
},
|
|
444
|
+
"radius-3": {
|
|
445
|
+
"name": "radius-3",
|
|
446
|
+
"type": "dimension",
|
|
447
|
+
"value": {
|
|
448
|
+
"value": 6,
|
|
449
|
+
"unit": "px"
|
|
450
|
+
},
|
|
451
|
+
"cssVariable": "--eds-radius-3"
|
|
452
|
+
},
|
|
453
|
+
"radius-4": {
|
|
454
|
+
"name": "radius-4",
|
|
455
|
+
"type": "dimension",
|
|
456
|
+
"value": {
|
|
457
|
+
"value": 8,
|
|
458
|
+
"unit": "px"
|
|
459
|
+
},
|
|
460
|
+
"cssVariable": "--eds-radius-4"
|
|
461
|
+
},
|
|
462
|
+
"radius-5": {
|
|
463
|
+
"name": "radius-5",
|
|
464
|
+
"type": "dimension",
|
|
465
|
+
"value": {
|
|
466
|
+
"value": 10,
|
|
467
|
+
"unit": "px"
|
|
468
|
+
},
|
|
469
|
+
"cssVariable": "--eds-radius-5"
|
|
470
|
+
},
|
|
471
|
+
"radius-6": {
|
|
472
|
+
"name": "radius-6",
|
|
473
|
+
"type": "dimension",
|
|
474
|
+
"value": {
|
|
475
|
+
"value": 12,
|
|
476
|
+
"unit": "px"
|
|
477
|
+
},
|
|
478
|
+
"cssVariable": "--eds-radius-6"
|
|
479
|
+
},
|
|
480
|
+
"radius-7": {
|
|
481
|
+
"name": "radius-7",
|
|
482
|
+
"type": "dimension",
|
|
483
|
+
"value": {
|
|
484
|
+
"value": 14,
|
|
485
|
+
"unit": "px"
|
|
486
|
+
},
|
|
487
|
+
"cssVariable": "--eds-radius-7"
|
|
488
|
+
},
|
|
489
|
+
"radius-8": {
|
|
490
|
+
"name": "radius-8",
|
|
491
|
+
"type": "dimension",
|
|
492
|
+
"value": {
|
|
493
|
+
"value": 16,
|
|
494
|
+
"unit": "px"
|
|
495
|
+
},
|
|
496
|
+
"cssVariable": "--eds-radius-8"
|
|
497
|
+
},
|
|
498
|
+
"radius-9": {
|
|
499
|
+
"name": "radius-9",
|
|
500
|
+
"type": "dimension",
|
|
501
|
+
"value": {
|
|
502
|
+
"value": 20,
|
|
503
|
+
"unit": "px"
|
|
504
|
+
},
|
|
505
|
+
"cssVariable": "--eds-radius-9"
|
|
506
|
+
},
|
|
507
|
+
"radius-none": {
|
|
508
|
+
"name": "radius-none",
|
|
509
|
+
"type": "dimension",
|
|
510
|
+
"value": {
|
|
511
|
+
"value": 0,
|
|
512
|
+
"unit": "px"
|
|
513
|
+
},
|
|
514
|
+
"cssVariable": "--eds-radius-none"
|
|
515
|
+
},
|
|
516
|
+
"spacing-0.5": {
|
|
517
|
+
"name": "spacing-0.5",
|
|
518
|
+
"type": "dimension",
|
|
519
|
+
"value": {
|
|
520
|
+
"value": 2,
|
|
521
|
+
"unit": "px"
|
|
522
|
+
},
|
|
523
|
+
"cssVariable": "--eds-spacing-0\\.5"
|
|
524
|
+
},
|
|
525
|
+
"spacing-1": {
|
|
526
|
+
"name": "spacing-1",
|
|
527
|
+
"type": "dimension",
|
|
528
|
+
"value": {
|
|
529
|
+
"value": 4,
|
|
530
|
+
"unit": "px"
|
|
531
|
+
},
|
|
532
|
+
"cssVariable": "--eds-spacing-1"
|
|
533
|
+
},
|
|
534
|
+
"spacing-1.5": {
|
|
535
|
+
"name": "spacing-1.5",
|
|
536
|
+
"type": "dimension",
|
|
537
|
+
"value": {
|
|
538
|
+
"value": 6,
|
|
539
|
+
"unit": "px"
|
|
540
|
+
},
|
|
541
|
+
"cssVariable": "--eds-spacing-1\\.5"
|
|
542
|
+
},
|
|
543
|
+
"spacing-10": {
|
|
544
|
+
"name": "spacing-10",
|
|
545
|
+
"type": "dimension",
|
|
546
|
+
"value": {
|
|
547
|
+
"value": 40,
|
|
548
|
+
"unit": "px"
|
|
549
|
+
},
|
|
550
|
+
"cssVariable": "--eds-spacing-10"
|
|
551
|
+
},
|
|
552
|
+
"spacing-11": {
|
|
553
|
+
"name": "spacing-11",
|
|
554
|
+
"type": "dimension",
|
|
555
|
+
"value": {
|
|
556
|
+
"value": 44,
|
|
557
|
+
"unit": "px"
|
|
558
|
+
},
|
|
559
|
+
"cssVariable": "--eds-spacing-11"
|
|
560
|
+
},
|
|
561
|
+
"spacing-12": {
|
|
562
|
+
"name": "spacing-12",
|
|
563
|
+
"type": "dimension",
|
|
564
|
+
"value": {
|
|
565
|
+
"value": 48,
|
|
566
|
+
"unit": "px"
|
|
567
|
+
},
|
|
568
|
+
"cssVariable": "--eds-spacing-12"
|
|
569
|
+
},
|
|
570
|
+
"spacing-2": {
|
|
571
|
+
"name": "spacing-2",
|
|
572
|
+
"type": "dimension",
|
|
573
|
+
"value": {
|
|
574
|
+
"value": 8,
|
|
575
|
+
"unit": "px"
|
|
576
|
+
},
|
|
577
|
+
"cssVariable": "--eds-spacing-2"
|
|
578
|
+
},
|
|
579
|
+
"spacing-2.5": {
|
|
580
|
+
"name": "spacing-2.5",
|
|
581
|
+
"type": "dimension",
|
|
582
|
+
"value": {
|
|
583
|
+
"value": 10,
|
|
584
|
+
"unit": "px"
|
|
585
|
+
},
|
|
586
|
+
"cssVariable": "--eds-spacing-2\\.5"
|
|
587
|
+
},
|
|
588
|
+
"spacing-3": {
|
|
589
|
+
"name": "spacing-3",
|
|
590
|
+
"type": "dimension",
|
|
591
|
+
"value": {
|
|
592
|
+
"value": 12,
|
|
593
|
+
"unit": "px"
|
|
594
|
+
},
|
|
595
|
+
"cssVariable": "--eds-spacing-3"
|
|
596
|
+
},
|
|
597
|
+
"spacing-3.5": {
|
|
598
|
+
"name": "spacing-3.5",
|
|
599
|
+
"type": "dimension",
|
|
600
|
+
"value": {
|
|
601
|
+
"value": 14,
|
|
602
|
+
"unit": "px"
|
|
603
|
+
},
|
|
604
|
+
"cssVariable": "--eds-spacing-3\\.5"
|
|
605
|
+
},
|
|
606
|
+
"spacing-4": {
|
|
607
|
+
"name": "spacing-4",
|
|
608
|
+
"type": "dimension",
|
|
609
|
+
"value": {
|
|
610
|
+
"value": 16,
|
|
611
|
+
"unit": "px"
|
|
612
|
+
},
|
|
613
|
+
"cssVariable": "--eds-spacing-4"
|
|
614
|
+
},
|
|
615
|
+
"spacing-4.5": {
|
|
616
|
+
"name": "spacing-4.5",
|
|
617
|
+
"type": "dimension",
|
|
618
|
+
"value": {
|
|
619
|
+
"value": 18,
|
|
620
|
+
"unit": "px"
|
|
621
|
+
},
|
|
622
|
+
"cssVariable": "--eds-spacing-4\\.5"
|
|
623
|
+
},
|
|
624
|
+
"spacing-5": {
|
|
625
|
+
"name": "spacing-5",
|
|
626
|
+
"type": "dimension",
|
|
627
|
+
"value": {
|
|
628
|
+
"value": 20,
|
|
629
|
+
"unit": "px"
|
|
630
|
+
},
|
|
631
|
+
"cssVariable": "--eds-spacing-5"
|
|
632
|
+
},
|
|
633
|
+
"spacing-6": {
|
|
634
|
+
"name": "spacing-6",
|
|
635
|
+
"type": "dimension",
|
|
636
|
+
"value": {
|
|
637
|
+
"value": 24,
|
|
638
|
+
"unit": "px"
|
|
639
|
+
},
|
|
640
|
+
"cssVariable": "--eds-spacing-6"
|
|
641
|
+
},
|
|
642
|
+
"spacing-7": {
|
|
643
|
+
"name": "spacing-7",
|
|
644
|
+
"type": "dimension",
|
|
645
|
+
"value": {
|
|
646
|
+
"value": 28,
|
|
647
|
+
"unit": "px"
|
|
648
|
+
},
|
|
649
|
+
"cssVariable": "--eds-spacing-7"
|
|
650
|
+
},
|
|
651
|
+
"spacing-7.5": {
|
|
652
|
+
"name": "spacing-7.5",
|
|
653
|
+
"type": "dimension",
|
|
654
|
+
"value": {
|
|
655
|
+
"value": 30,
|
|
656
|
+
"unit": "px"
|
|
657
|
+
},
|
|
658
|
+
"cssVariable": "--eds-spacing-7\\.5"
|
|
659
|
+
},
|
|
660
|
+
"spacing-8": {
|
|
661
|
+
"name": "spacing-8",
|
|
662
|
+
"type": "dimension",
|
|
663
|
+
"value": {
|
|
664
|
+
"value": 32,
|
|
665
|
+
"unit": "px"
|
|
666
|
+
},
|
|
667
|
+
"cssVariable": "--eds-spacing-8"
|
|
668
|
+
},
|
|
669
|
+
"spacing-9": {
|
|
670
|
+
"name": "spacing-9",
|
|
671
|
+
"type": "dimension",
|
|
672
|
+
"value": {
|
|
673
|
+
"value": 36,
|
|
674
|
+
"unit": "px"
|
|
675
|
+
},
|
|
676
|
+
"cssVariable": "--eds-spacing-9"
|
|
677
|
+
},
|
|
678
|
+
"spacing-none": {
|
|
679
|
+
"name": "spacing-none",
|
|
680
|
+
"type": "dimension",
|
|
681
|
+
"value": {
|
|
682
|
+
"value": 0,
|
|
683
|
+
"unit": "px"
|
|
684
|
+
},
|
|
685
|
+
"cssVariable": "--eds-spacing-none"
|
|
686
|
+
},
|
|
417
687
|
"typography-body1-fontFamily": {
|
|
418
688
|
"name": "typography-body1-fontFamily",
|
|
419
689
|
"type": "fontFamily",
|
|
@@ -1216,6 +1486,36 @@ var tokenNames = /* @__PURE__ */ Object.freeze([
|
|
|
1216
1486
|
"color-stroke-positive-weak",
|
|
1217
1487
|
"color-stroke-warning-primary",
|
|
1218
1488
|
"color-stroke-warning-weak",
|
|
1489
|
+
"radius-1",
|
|
1490
|
+
"radius-10",
|
|
1491
|
+
"radius-2",
|
|
1492
|
+
"radius-3",
|
|
1493
|
+
"radius-4",
|
|
1494
|
+
"radius-5",
|
|
1495
|
+
"radius-6",
|
|
1496
|
+
"radius-7",
|
|
1497
|
+
"radius-8",
|
|
1498
|
+
"radius-9",
|
|
1499
|
+
"radius-none",
|
|
1500
|
+
"spacing-0.5",
|
|
1501
|
+
"spacing-1",
|
|
1502
|
+
"spacing-1.5",
|
|
1503
|
+
"spacing-10",
|
|
1504
|
+
"spacing-11",
|
|
1505
|
+
"spacing-12",
|
|
1506
|
+
"spacing-2",
|
|
1507
|
+
"spacing-2.5",
|
|
1508
|
+
"spacing-3",
|
|
1509
|
+
"spacing-3.5",
|
|
1510
|
+
"spacing-4",
|
|
1511
|
+
"spacing-4.5",
|
|
1512
|
+
"spacing-5",
|
|
1513
|
+
"spacing-6",
|
|
1514
|
+
"spacing-7",
|
|
1515
|
+
"spacing-7.5",
|
|
1516
|
+
"spacing-8",
|
|
1517
|
+
"spacing-9",
|
|
1518
|
+
"spacing-none",
|
|
1219
1519
|
"typography-body1-fontFamily",
|
|
1220
1520
|
"typography-body1-fontSize",
|
|
1221
1521
|
"typography-body1-fontWeight",
|
|
@@ -1306,7 +1606,7 @@ function cssVar(name) {
|
|
|
1306
1606
|
if (!tokenNames.includes(name)) {
|
|
1307
1607
|
throw new Error("Unknown semantic token: " + name);
|
|
1308
1608
|
}
|
|
1309
|
-
return "var(
|
|
1609
|
+
return "var(" + tokenMap[name].cssVariable + ")";
|
|
1310
1610
|
}
|
|
1311
1611
|
var buttonIcons = {
|
|
1312
1612
|
ArrowLeft: lucideReact.ArrowLeft,
|