@ncds/ui-admin-mcp 1.0.0-alpha.2
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/README.md +113 -0
- package/bin/components.bundle.js +21 -0
- package/bin/definitions/compliance-rules.json +64 -0
- package/bin/definitions/instructions.md +96 -0
- package/bin/definitions/rules.json +57 -0
- package/bin/definitions/token-descriptions.json +27 -0
- package/bin/definitions/tool-definitions.json +42 -0
- package/bin/instructions.d.ts +1 -0
- package/bin/instructions.js +14 -0
- package/bin/server.d.ts +1 -0
- package/bin/server.js +164 -0
- package/bin/server.mjs +8 -0
- package/bin/tools/getComponentHtml.d.ts +3 -0
- package/bin/tools/getComponentHtml.js +30 -0
- package/bin/tools/getComponentProps.d.ts +4 -0
- package/bin/tools/getComponentProps.js +17 -0
- package/bin/tools/getDesignTokens.d.ts +13 -0
- package/bin/tools/getDesignTokens.js +20 -0
- package/bin/tools/listComponents.d.ts +16 -0
- package/bin/tools/listComponents.js +24 -0
- package/bin/tools/listIcons.d.ts +22 -0
- package/bin/tools/listIcons.js +23 -0
- package/bin/tools/ping.d.ts +17 -0
- package/bin/tools/ping.js +20 -0
- package/bin/tools/renderToHtml.d.ts +21 -0
- package/bin/tools/renderToHtml.js +177 -0
- package/bin/tools/searchComponent.d.ts +4 -0
- package/bin/tools/searchComponent.js +33 -0
- package/bin/tools/searchIcon.d.ts +7 -0
- package/bin/tools/searchIcon.js +19 -0
- package/bin/tools/validateHtml.d.ts +18 -0
- package/bin/tools/validateHtml.js +85 -0
- package/bin/types.d.ts +111 -0
- package/bin/types.js +5 -0
- package/bin/utils/bemValidator.d.ts +36 -0
- package/bin/utils/bemValidator.js +198 -0
- package/bin/utils/compliance.d.ts +52 -0
- package/bin/utils/compliance.js +199 -0
- package/bin/utils/dataLoader.d.ts +33 -0
- package/bin/utils/dataLoader.js +174 -0
- package/bin/utils/domEnvironment.d.ts +9 -0
- package/bin/utils/domEnvironment.js +25 -0
- package/bin/utils/fuzzyMatch.d.ts +21 -0
- package/bin/utils/fuzzyMatch.js +110 -0
- package/bin/utils/logger.d.ts +18 -0
- package/bin/utils/logger.js +27 -0
- package/bin/utils/response.d.ts +26 -0
- package/bin/utils/response.js +28 -0
- package/bin/utils/tokenValidator.d.ts +24 -0
- package/bin/utils/tokenValidator.js +162 -0
- package/bin/version.d.ts +4 -0
- package/bin/version.js +7 -0
- package/data/_icons.json +12361 -0
- package/data/_meta.json +12 -0
- package/data/_tokens.json +661 -0
- package/data/badge-group.json +121 -0
- package/data/badge.json +130 -0
- package/data/bread-crumb.json +51 -0
- package/data/button-group.json +94 -0
- package/data/button.json +143 -0
- package/data/carousel-arrow.json +87 -0
- package/data/carousel-number-group.json +87 -0
- package/data/checkbox.json +99 -0
- package/data/combo-box.json +157 -0
- package/data/date-picker.json +109 -0
- package/data/divider.json +91 -0
- package/data/dot.json +103 -0
- package/data/dropdown.json +123 -0
- package/data/empty-state.json +64 -0
- package/data/featured-icon.json +125 -0
- package/data/file-input.json +161 -0
- package/data/horizontal-tab.json +114 -0
- package/data/image-file-input.json +185 -0
- package/data/input-base.json +145 -0
- package/data/modal.json +131 -0
- package/data/notification.json +176 -0
- package/data/number-input.json +141 -0
- package/data/pagination.json +101 -0
- package/data/password-input.json +45 -0
- package/data/progress-bar.json +90 -0
- package/data/progress-circle.json +96 -0
- package/data/radio.json +86 -0
- package/data/range-date-picker-with-buttons.json +101 -0
- package/data/range-date-picker.json +87 -0
- package/data/select-box.json +177 -0
- package/data/select.json +116 -0
- package/data/slider.json +100 -0
- package/data/spinner.json +94 -0
- package/data/switch.json +109 -0
- package/data/tag.json +101 -0
- package/data/textarea.json +96 -0
- package/data/toggle.json +102 -0
- package/data/tooltip.json +185 -0
- package/data/vertical-tab.json +99 -0
- package/package.json +71 -0
- package/templates/.mcp.json.example +8 -0
- package/templates/README.md +30 -0
package/data/tag.json
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tag",
|
|
3
|
+
"exportName": "Tag",
|
|
4
|
+
"importPath": "@ncds/ui-admin",
|
|
5
|
+
"jsRequired": true,
|
|
6
|
+
"category": "feedback",
|
|
7
|
+
"description": "Tag 컴포넌트는 정보를 분류하고 필터링하기 위한 시각적 표시를 제공합니다. 레이블, 카테고리, 필터 등을 나타내는 데 사용되며, 아이콘, 닫기 버튼, 체크박스, 카운트 등의 기능을 포함할 수 있습니다.",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"Tag",
|
|
10
|
+
"태그",
|
|
11
|
+
"레이블",
|
|
12
|
+
"카테고리",
|
|
13
|
+
"필터",
|
|
14
|
+
"분류",
|
|
15
|
+
"icon",
|
|
16
|
+
"dot",
|
|
17
|
+
"country",
|
|
18
|
+
"checkbox",
|
|
19
|
+
"close",
|
|
20
|
+
"count",
|
|
21
|
+
"maxLength",
|
|
22
|
+
"truncation",
|
|
23
|
+
"NCDS"
|
|
24
|
+
],
|
|
25
|
+
"hasChildren": true,
|
|
26
|
+
"whenToUse": [
|
|
27
|
+
"정보 분류와 필터링을 위한 시각적 라벨",
|
|
28
|
+
"사용자가 콘텐츠를 빠르게 분류/식별/필터링할 수 있도록 지원"
|
|
29
|
+
],
|
|
30
|
+
"forbiddenRules": [
|
|
31
|
+
"disabled 태그에 액션 제공 금지",
|
|
32
|
+
"과도한 태그 나열 금지",
|
|
33
|
+
"텍스트 없는 태그 사용 금지"
|
|
34
|
+
],
|
|
35
|
+
"seeAlso": [
|
|
36
|
+
"badge",
|
|
37
|
+
"badge-group",
|
|
38
|
+
"checkbox",
|
|
39
|
+
"dot"
|
|
40
|
+
],
|
|
41
|
+
"props": {
|
|
42
|
+
"children": {
|
|
43
|
+
"type": "ReactNode",
|
|
44
|
+
"required": false
|
|
45
|
+
},
|
|
46
|
+
"close": {
|
|
47
|
+
"type": "boolean",
|
|
48
|
+
"required": false
|
|
49
|
+
},
|
|
50
|
+
"count": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"required": false
|
|
53
|
+
},
|
|
54
|
+
"icon": {
|
|
55
|
+
"type": "object",
|
|
56
|
+
"required": false
|
|
57
|
+
},
|
|
58
|
+
"maxLength": {
|
|
59
|
+
"type": "number",
|
|
60
|
+
"required": false,
|
|
61
|
+
"default": 20
|
|
62
|
+
},
|
|
63
|
+
"onButtonClick": {
|
|
64
|
+
"type": "function",
|
|
65
|
+
"required": false
|
|
66
|
+
},
|
|
67
|
+
"size": {
|
|
68
|
+
"type": "enum",
|
|
69
|
+
"required": false,
|
|
70
|
+
"values": [
|
|
71
|
+
"md",
|
|
72
|
+
"sm"
|
|
73
|
+
],
|
|
74
|
+
"default": "sm"
|
|
75
|
+
},
|
|
76
|
+
"text": {
|
|
77
|
+
"type": "string",
|
|
78
|
+
"required": true
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"html": {},
|
|
82
|
+
"bemClasses": [
|
|
83
|
+
"ncua-tag",
|
|
84
|
+
"ncua-tag--md",
|
|
85
|
+
"ncua-tag--sm",
|
|
86
|
+
"ncua-tag--truncated",
|
|
87
|
+
"ncua-tag__close",
|
|
88
|
+
"ncua-tag__count",
|
|
89
|
+
"ncua-tag__text",
|
|
90
|
+
"ncua-tag__tooltip",
|
|
91
|
+
"ncua-tag__tooltip-content"
|
|
92
|
+
],
|
|
93
|
+
"usage": {
|
|
94
|
+
"import": "import { Tag } from '@ncds/ui-admin';",
|
|
95
|
+
"react": {
|
|
96
|
+
"default": "<Tag text=\"\" />",
|
|
97
|
+
"size:md": "<Tag size=\"md\" text=\"\" />",
|
|
98
|
+
"size:sm": "<Tag size=\"sm\" text=\"\" />"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "textarea",
|
|
3
|
+
"exportName": "Textarea",
|
|
4
|
+
"importPath": "@ncds/ui-admin",
|
|
5
|
+
"jsRequired": false,
|
|
6
|
+
"category": "input",
|
|
7
|
+
"description": "Textarea(멀티라인 인풋)는 여러 줄의 사용형 텍스트 입력을 위한 컴포넌트입니다.",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"Textarea",
|
|
10
|
+
"멀티라인",
|
|
11
|
+
"다중입력",
|
|
12
|
+
"TextArea",
|
|
13
|
+
"텍스트영역",
|
|
14
|
+
"Placeholder",
|
|
15
|
+
"CharacterCount",
|
|
16
|
+
"글자수",
|
|
17
|
+
"Resize",
|
|
18
|
+
"Helper Text",
|
|
19
|
+
"Destructive",
|
|
20
|
+
"NCDS"
|
|
21
|
+
],
|
|
22
|
+
"hasChildren": false,
|
|
23
|
+
"whenToUse": [
|
|
24
|
+
"Textarea는 50자 이상 다중 줄 입력에 사용하며, 반드시 외부 Label과 maxLength를 함께 정의한다",
|
|
25
|
+
"Width는 고정, Height만 Resize 허용"
|
|
26
|
+
],
|
|
27
|
+
"forbiddenRules": [
|
|
28
|
+
"30자 이하 입력 항목에 Textarea 사용 금지",
|
|
29
|
+
"Label 없이 단독 사용 금지",
|
|
30
|
+
"Placeholder를 설명 텍스트 대체로 사용 금지",
|
|
31
|
+
"Max 정의 없이 무제한 입력 허용 금지",
|
|
32
|
+
"Width 자유 Resize 허용 금지"
|
|
33
|
+
],
|
|
34
|
+
"seeAlso": [
|
|
35
|
+
"input",
|
|
36
|
+
"editor"
|
|
37
|
+
],
|
|
38
|
+
"htmlElement": "textarea",
|
|
39
|
+
"props": {
|
|
40
|
+
"characterCount": {
|
|
41
|
+
"type": "boolean",
|
|
42
|
+
"required": false
|
|
43
|
+
},
|
|
44
|
+
"className": {
|
|
45
|
+
"type": "string",
|
|
46
|
+
"required": false
|
|
47
|
+
},
|
|
48
|
+
"destructive": {
|
|
49
|
+
"type": "boolean",
|
|
50
|
+
"required": false
|
|
51
|
+
},
|
|
52
|
+
"disabled": {
|
|
53
|
+
"type": "boolean",
|
|
54
|
+
"required": false
|
|
55
|
+
},
|
|
56
|
+
"hintText": {
|
|
57
|
+
"type": "string",
|
|
58
|
+
"required": false
|
|
59
|
+
},
|
|
60
|
+
"label": {
|
|
61
|
+
"type": "string",
|
|
62
|
+
"required": false
|
|
63
|
+
},
|
|
64
|
+
"required": {
|
|
65
|
+
"type": "boolean",
|
|
66
|
+
"required": false
|
|
67
|
+
},
|
|
68
|
+
"size": {
|
|
69
|
+
"type": "enum",
|
|
70
|
+
"required": false,
|
|
71
|
+
"values": [
|
|
72
|
+
"sm",
|
|
73
|
+
"xs"
|
|
74
|
+
],
|
|
75
|
+
"default": "xs"
|
|
76
|
+
}
|
|
77
|
+
},
|
|
78
|
+
"html": {},
|
|
79
|
+
"bemClasses": [
|
|
80
|
+
"ncua-input",
|
|
81
|
+
"ncua-input--textarea",
|
|
82
|
+
"ncua-input__text-count",
|
|
83
|
+
"ncua-input__text-count-text",
|
|
84
|
+
"ncua-input__text-count-text-count",
|
|
85
|
+
"ncua-input__text-count-wrap",
|
|
86
|
+
"ncua-input__textarea"
|
|
87
|
+
],
|
|
88
|
+
"usage": {
|
|
89
|
+
"import": "import { Textarea } from '@ncds/ui-admin';",
|
|
90
|
+
"react": {
|
|
91
|
+
"default": "<Textarea />",
|
|
92
|
+
"size:sm": "<Textarea size=\"sm\" />",
|
|
93
|
+
"size:xs": "<Textarea size=\"xs\" />"
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
package/data/toggle.json
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "toggle",
|
|
3
|
+
"exportName": "Toggle",
|
|
4
|
+
"importPath": "@ncds/ui-admin",
|
|
5
|
+
"jsRequired": false,
|
|
6
|
+
"category": "input",
|
|
7
|
+
"description": "Toggle은 단일 기능의 활성/비활성 상태를 즉시 전환하는 컨트롤입니다. 설정 값의 ON/OFF, 수신 여부, 사용 여부 등 즉각 반영되는 상태 전환 UI에 사용합니다.",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"Toggle",
|
|
10
|
+
"토글",
|
|
11
|
+
"Switch",
|
|
12
|
+
"스위치",
|
|
13
|
+
"ON",
|
|
14
|
+
"OFF",
|
|
15
|
+
"활성",
|
|
16
|
+
"비활성",
|
|
17
|
+
"사용",
|
|
18
|
+
"미사용",
|
|
19
|
+
"노출",
|
|
20
|
+
"미노출",
|
|
21
|
+
"Checked",
|
|
22
|
+
"Disabled",
|
|
23
|
+
"Thumb",
|
|
24
|
+
"Track",
|
|
25
|
+
"NCDS"
|
|
26
|
+
],
|
|
27
|
+
"hasChildren": false,
|
|
28
|
+
"whenToUse": [
|
|
29
|
+
"즉시 반영되는 이진 상태(ON/OFF) 전환에만 사용",
|
|
30
|
+
"저장 후 반영, 3개 이상 옵션, 2차 부가 옵션이 있는 경우 Toggle을 사용하지 않는다"
|
|
31
|
+
],
|
|
32
|
+
"forbiddenRules": [
|
|
33
|
+
"3개 이상 옵션에 Toggle 사용 금지",
|
|
34
|
+
"저장 후 반영되는 설정에 Toggle 사용 금지",
|
|
35
|
+
"2차 부가 옵션이 있는 경우 사용 금지",
|
|
36
|
+
"다중 선택 개념에 사용 금지",
|
|
37
|
+
"조건 선택 개념에 사용 금지",
|
|
38
|
+
"동일 화면 내 Size 혼용 금지"
|
|
39
|
+
],
|
|
40
|
+
"seeAlso": [
|
|
41
|
+
"checkbox",
|
|
42
|
+
"radio",
|
|
43
|
+
"switch",
|
|
44
|
+
"select"
|
|
45
|
+
],
|
|
46
|
+
"htmlElement": "input",
|
|
47
|
+
"props": {
|
|
48
|
+
"className": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"required": false
|
|
51
|
+
},
|
|
52
|
+
"disabled": {
|
|
53
|
+
"type": "boolean",
|
|
54
|
+
"required": false,
|
|
55
|
+
"default": false
|
|
56
|
+
},
|
|
57
|
+
"onChange": {
|
|
58
|
+
"type": "function",
|
|
59
|
+
"required": false
|
|
60
|
+
},
|
|
61
|
+
"size": {
|
|
62
|
+
"type": "enum",
|
|
63
|
+
"required": false,
|
|
64
|
+
"values": [
|
|
65
|
+
"md",
|
|
66
|
+
"sm"
|
|
67
|
+
],
|
|
68
|
+
"default": "md"
|
|
69
|
+
},
|
|
70
|
+
"supportText": {
|
|
71
|
+
"type": "string",
|
|
72
|
+
"required": false,
|
|
73
|
+
"default": ""
|
|
74
|
+
},
|
|
75
|
+
"text": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"required": false,
|
|
78
|
+
"default": ""
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"html": {},
|
|
82
|
+
"bemClasses": [
|
|
83
|
+
"ncua-toggle",
|
|
84
|
+
"ncua-toggle--disabled",
|
|
85
|
+
"ncua-toggle--md",
|
|
86
|
+
"ncua-toggle--sm",
|
|
87
|
+
"ncua-toggle__input",
|
|
88
|
+
"ncua-toggle__slider",
|
|
89
|
+
"ncua-toggle__support-text",
|
|
90
|
+
"ncua-toggle__switch",
|
|
91
|
+
"ncua-toggle__text",
|
|
92
|
+
"ncua-toggle__text-wrapper"
|
|
93
|
+
],
|
|
94
|
+
"usage": {
|
|
95
|
+
"import": "import { Toggle } from '@ncds/ui-admin';",
|
|
96
|
+
"react": {
|
|
97
|
+
"default": "<Toggle />",
|
|
98
|
+
"size:md": "<Toggle size=\"md\" />",
|
|
99
|
+
"size:sm": "<Toggle size=\"sm\" />"
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "tooltip",
|
|
3
|
+
"exportName": "Tooltip",
|
|
4
|
+
"importPath": "@ncds/ui-admin",
|
|
5
|
+
"jsRequired": true,
|
|
6
|
+
"category": "overlay",
|
|
7
|
+
"description": "Tooltip은 항목, 데이터, 기능 등에 대해 추가 설명이 필요한 경우 보조 정보를 제공하는 말풍선 내 UI 컴포넌트입니다.",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"Tooltip",
|
|
10
|
+
"툴팁",
|
|
11
|
+
"Short Form",
|
|
12
|
+
"Long Form",
|
|
13
|
+
"Hover",
|
|
14
|
+
"보조설명",
|
|
15
|
+
"치환코드",
|
|
16
|
+
"aria-describedby",
|
|
17
|
+
"position",
|
|
18
|
+
"iconType",
|
|
19
|
+
"tooltipType",
|
|
20
|
+
"hideArrow",
|
|
21
|
+
"NCDS"
|
|
22
|
+
],
|
|
23
|
+
"hasChildren": false,
|
|
24
|
+
"whenToUse": [
|
|
25
|
+
"기본 화면의 흐름을 방해하지 않으면서 필요한 보조 정보를 즉시 제공해야 합니다",
|
|
26
|
+
"과도한 사용이나 긴 내용은 사용자 경험을 저해합니다"
|
|
27
|
+
],
|
|
28
|
+
"forbiddenRules": [
|
|
29
|
+
"Short Form에 텍스트 링크 사용 금지",
|
|
30
|
+
"Short Form에 버튼 포함 금지",
|
|
31
|
+
"Short Form 80자 초과 금지",
|
|
32
|
+
"Short Form에 상호작용 요소 포함 금지",
|
|
33
|
+
"Long Form Modal 중앙 정렬 금지",
|
|
34
|
+
"Long Form Dim 처리 금지",
|
|
35
|
+
"Long Form 300자 초과 금지",
|
|
36
|
+
"치환코드 복사 시 Tooltip 자동 닫힘 금지",
|
|
37
|
+
"치환코드 Tooltip Modal 전환 금지",
|
|
38
|
+
"치환코드 Tooltip에 Confirm Alert 사용 금지"
|
|
39
|
+
],
|
|
40
|
+
"seeAlso": [
|
|
41
|
+
"icon",
|
|
42
|
+
"notification"
|
|
43
|
+
],
|
|
44
|
+
"props": {
|
|
45
|
+
"className": {
|
|
46
|
+
"type": "string",
|
|
47
|
+
"required": false
|
|
48
|
+
},
|
|
49
|
+
"content": {
|
|
50
|
+
"type": "ReactNode",
|
|
51
|
+
"required": false
|
|
52
|
+
},
|
|
53
|
+
"hideArrow": {
|
|
54
|
+
"type": "boolean",
|
|
55
|
+
"required": false,
|
|
56
|
+
"default": false
|
|
57
|
+
},
|
|
58
|
+
"iconColor": {
|
|
59
|
+
"type": "string",
|
|
60
|
+
"required": false,
|
|
61
|
+
"default": "var(--gray-300)"
|
|
62
|
+
},
|
|
63
|
+
"iconStyle": {
|
|
64
|
+
"type": "enum",
|
|
65
|
+
"required": false,
|
|
66
|
+
"values": [
|
|
67
|
+
"alert-circle",
|
|
68
|
+
"help-circle"
|
|
69
|
+
],
|
|
70
|
+
"default": "help-circle"
|
|
71
|
+
},
|
|
72
|
+
"iconType": {
|
|
73
|
+
"type": "enum",
|
|
74
|
+
"required": false,
|
|
75
|
+
"values": [
|
|
76
|
+
"fill",
|
|
77
|
+
"stroke"
|
|
78
|
+
],
|
|
79
|
+
"default": "stroke"
|
|
80
|
+
},
|
|
81
|
+
"position": {
|
|
82
|
+
"type": "enum",
|
|
83
|
+
"required": false,
|
|
84
|
+
"values": [
|
|
85
|
+
"auto",
|
|
86
|
+
"bottom",
|
|
87
|
+
"bottom-left",
|
|
88
|
+
"bottom-right",
|
|
89
|
+
"left",
|
|
90
|
+
"right",
|
|
91
|
+
"top",
|
|
92
|
+
"top-left",
|
|
93
|
+
"top-right"
|
|
94
|
+
],
|
|
95
|
+
"default": "auto"
|
|
96
|
+
},
|
|
97
|
+
"size": {
|
|
98
|
+
"type": "enum",
|
|
99
|
+
"required": false,
|
|
100
|
+
"values": [
|
|
101
|
+
"md",
|
|
102
|
+
"sm"
|
|
103
|
+
],
|
|
104
|
+
"default": "sm"
|
|
105
|
+
},
|
|
106
|
+
"title": {
|
|
107
|
+
"type": "string",
|
|
108
|
+
"required": false
|
|
109
|
+
},
|
|
110
|
+
"tooltipType": {
|
|
111
|
+
"type": "enum",
|
|
112
|
+
"required": false,
|
|
113
|
+
"values": [
|
|
114
|
+
"black",
|
|
115
|
+
"white"
|
|
116
|
+
],
|
|
117
|
+
"default": "black"
|
|
118
|
+
},
|
|
119
|
+
"type": {
|
|
120
|
+
"type": "enum",
|
|
121
|
+
"required": false,
|
|
122
|
+
"values": [
|
|
123
|
+
"long",
|
|
124
|
+
"short"
|
|
125
|
+
],
|
|
126
|
+
"default": "short"
|
|
127
|
+
}
|
|
128
|
+
},
|
|
129
|
+
"html": {},
|
|
130
|
+
"bemClasses": [
|
|
131
|
+
"ncua-tooltip",
|
|
132
|
+
"ncua-tooltip--alert-circle",
|
|
133
|
+
"ncua-tooltip--auto",
|
|
134
|
+
"ncua-tooltip--black",
|
|
135
|
+
"ncua-tooltip--bottom",
|
|
136
|
+
"ncua-tooltip--bottom-left",
|
|
137
|
+
"ncua-tooltip--bottom-right",
|
|
138
|
+
"ncua-tooltip--fill",
|
|
139
|
+
"ncua-tooltip--help-circle",
|
|
140
|
+
"ncua-tooltip--hidden-arrow",
|
|
141
|
+
"ncua-tooltip--left",
|
|
142
|
+
"ncua-tooltip--long",
|
|
143
|
+
"ncua-tooltip--md",
|
|
144
|
+
"ncua-tooltip--right",
|
|
145
|
+
"ncua-tooltip--short",
|
|
146
|
+
"ncua-tooltip--sm",
|
|
147
|
+
"ncua-tooltip--stroke",
|
|
148
|
+
"ncua-tooltip--top",
|
|
149
|
+
"ncua-tooltip--top-left",
|
|
150
|
+
"ncua-tooltip--top-right",
|
|
151
|
+
"ncua-tooltip--white",
|
|
152
|
+
"ncua-tooltip__bg",
|
|
153
|
+
"ncua-tooltip__bg--force-hidden",
|
|
154
|
+
"ncua-tooltip__bg--measuring",
|
|
155
|
+
"ncua-tooltip__bg--visible",
|
|
156
|
+
"ncua-tooltip__close-button",
|
|
157
|
+
"ncua-tooltip__content",
|
|
158
|
+
"ncua-tooltip__title"
|
|
159
|
+
],
|
|
160
|
+
"usage": {
|
|
161
|
+
"import": "import { Tooltip } from '@ncds/ui-admin';",
|
|
162
|
+
"react": {
|
|
163
|
+
"default": "<Tooltip />",
|
|
164
|
+
"iconStyle:alert-circle": "<Tooltip iconStyle=\"alert-circle\" />",
|
|
165
|
+
"iconStyle:help-circle": "<Tooltip iconStyle=\"help-circle\" />",
|
|
166
|
+
"iconType:fill": "<Tooltip iconType=\"fill\" />",
|
|
167
|
+
"iconType:stroke": "<Tooltip iconType=\"stroke\" />",
|
|
168
|
+
"position:auto": "<Tooltip position=\"auto\" />",
|
|
169
|
+
"position:bottom": "<Tooltip position=\"bottom\" />",
|
|
170
|
+
"position:bottom-left": "<Tooltip position=\"bottom-left\" />",
|
|
171
|
+
"position:bottom-right": "<Tooltip position=\"bottom-right\" />",
|
|
172
|
+
"position:left": "<Tooltip position=\"left\" />",
|
|
173
|
+
"position:right": "<Tooltip position=\"right\" />",
|
|
174
|
+
"position:top": "<Tooltip position=\"top\" />",
|
|
175
|
+
"position:top-left": "<Tooltip position=\"top-left\" />",
|
|
176
|
+
"position:top-right": "<Tooltip position=\"top-right\" />",
|
|
177
|
+
"size:md": "<Tooltip size=\"md\" />",
|
|
178
|
+
"size:sm": "<Tooltip size=\"sm\" />",
|
|
179
|
+
"tooltipType:black": "<Tooltip tooltipType=\"black\" />",
|
|
180
|
+
"tooltipType:white": "<Tooltip tooltipType=\"white\" />",
|
|
181
|
+
"type:long": "<Tooltip type=\"long\" />",
|
|
182
|
+
"type:short": "<Tooltip type=\"short\" />"
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "vertical-tab",
|
|
3
|
+
"exportName": "VerticalTab",
|
|
4
|
+
"importPath": "@ncds/ui-admin",
|
|
5
|
+
"jsRequired": true,
|
|
6
|
+
"category": "navigation",
|
|
7
|
+
"description": "VerticalTab은 동일한 계층 구조의 관련 콘텐츠를 그룹화하여 동일 화면 내에서 콘텐츠를 전환하는 내비게이션 UI 컴포넌트입니다.",
|
|
8
|
+
"aliases": [
|
|
9
|
+
"VerticalTab",
|
|
10
|
+
"세로탭",
|
|
11
|
+
"탭",
|
|
12
|
+
"Tab",
|
|
13
|
+
"수직탭",
|
|
14
|
+
"콘텐츠전환",
|
|
15
|
+
"설정페이지",
|
|
16
|
+
"좌측네비게이션",
|
|
17
|
+
"Badge",
|
|
18
|
+
"SPA",
|
|
19
|
+
"네비게이션",
|
|
20
|
+
"NCDS",
|
|
21
|
+
"breakPoint",
|
|
22
|
+
"반응형",
|
|
23
|
+
"Select전환"
|
|
24
|
+
],
|
|
25
|
+
"hasChildren": false,
|
|
26
|
+
"whenToUse": [
|
|
27
|
+
"좌측 영역에서 수직 방향으로 콘텐츠를 전환하는 내비게이션",
|
|
28
|
+
"설정 페이지, 계정 관리, 관리자 메뉴 등 좌측 네비게이션 성격의 콘텐츠 그룹 전환",
|
|
29
|
+
"SPA 기준 라우팅 변경으로 동작"
|
|
30
|
+
],
|
|
31
|
+
"forbiddenRules": [
|
|
32
|
+
"1개 항목만 있는 경우 사용 금지",
|
|
33
|
+
"좌측 네비게이션과 혼동되도록 과도한 확장 금지",
|
|
34
|
+
"페이지 이동용 GNB처럼 사용 금지",
|
|
35
|
+
"이미지 사용 금지",
|
|
36
|
+
"장식 아이콘 사용 금지",
|
|
37
|
+
"서로 다른 계층 혼합 금지",
|
|
38
|
+
"페이지 리로드 금지",
|
|
39
|
+
"과도한 컬러 사용 금지"
|
|
40
|
+
],
|
|
41
|
+
"seeAlso": [
|
|
42
|
+
"horizontal-tab",
|
|
43
|
+
"badge"
|
|
44
|
+
],
|
|
45
|
+
"props": {
|
|
46
|
+
"activeTab": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"required": false
|
|
49
|
+
},
|
|
50
|
+
"breakPoint": {
|
|
51
|
+
"type": "enum",
|
|
52
|
+
"required": false,
|
|
53
|
+
"values": [
|
|
54
|
+
"mobile",
|
|
55
|
+
"pc"
|
|
56
|
+
],
|
|
57
|
+
"default": "pc"
|
|
58
|
+
},
|
|
59
|
+
"menus": {
|
|
60
|
+
"type": "string",
|
|
61
|
+
"required": false,
|
|
62
|
+
"rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/components/tab/TabButton\").TabButtonProps[] | undefined"
|
|
63
|
+
},
|
|
64
|
+
"onSelect": {
|
|
65
|
+
"type": "function",
|
|
66
|
+
"required": false
|
|
67
|
+
},
|
|
68
|
+
"type": {
|
|
69
|
+
"type": "enum",
|
|
70
|
+
"required": false,
|
|
71
|
+
"values": [
|
|
72
|
+
"button-primary",
|
|
73
|
+
"button-white",
|
|
74
|
+
"line-vertical"
|
|
75
|
+
],
|
|
76
|
+
"default": "button-primary"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"html": {},
|
|
80
|
+
"bemClasses": [
|
|
81
|
+
"ncua-vertical-tab",
|
|
82
|
+
"ncua-vertical-tab--button-primary",
|
|
83
|
+
"ncua-vertical-tab--button-white",
|
|
84
|
+
"ncua-vertical-tab--line-vertical",
|
|
85
|
+
"ncua-vertical-tab--mobile",
|
|
86
|
+
"ncua-vertical-tab--pc"
|
|
87
|
+
],
|
|
88
|
+
"usage": {
|
|
89
|
+
"import": "import { VerticalTab } from '@ncds/ui-admin';",
|
|
90
|
+
"react": {
|
|
91
|
+
"default": "<VerticalTab />",
|
|
92
|
+
"breakPoint:mobile": "<VerticalTab breakPoint=\"mobile\" />",
|
|
93
|
+
"breakPoint:pc": "<VerticalTab breakPoint=\"pc\" />",
|
|
94
|
+
"type:button-primary": "<VerticalTab type=\"button-primary\" />",
|
|
95
|
+
"type:button-white": "<VerticalTab type=\"button-white\" />",
|
|
96
|
+
"type:line-vertical": "<VerticalTab type=\"line-vertical\" />"
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ncds/ui-admin-mcp",
|
|
3
|
+
"version": "1.0.0-alpha.2",
|
|
4
|
+
"description": "NCDS UI Admin MCP 서버 — AI 에이전트가 NCUA 컴포넌트를 조회하고 HTML을 검증할 수 있는 MCP 서버",
|
|
5
|
+
"bin": {
|
|
6
|
+
"ncua-mcp": "./bin/server.mjs"
|
|
7
|
+
},
|
|
8
|
+
"files": [
|
|
9
|
+
"bin",
|
|
10
|
+
"data",
|
|
11
|
+
"templates",
|
|
12
|
+
"README.md"
|
|
13
|
+
],
|
|
14
|
+
"engines": {
|
|
15
|
+
"node": ">=20"
|
|
16
|
+
},
|
|
17
|
+
"scripts": {
|
|
18
|
+
"extract": "tsx scripts/extract-mcp-data.ts",
|
|
19
|
+
"extract:icons": "tsx scripts/extract-icons.ts",
|
|
20
|
+
"extract:tokens": "tsx scripts/extract-design-tokens.ts",
|
|
21
|
+
"generate:cdn-meta": "tsx scripts/generate-cdn-meta.ts",
|
|
22
|
+
"build:bundle": "tsx scripts/build-bundle.ts",
|
|
23
|
+
"build:server": "tsc --project tsconfig.json && rm -rf bin/definitions && cp -r src/definitions bin/definitions",
|
|
24
|
+
"build": "yarn extract && yarn extract:icons && yarn extract:tokens && yarn generate:cdn-meta && yarn build:bundle && yarn build:server",
|
|
25
|
+
"test": "vitest run --config vitest.config.ts",
|
|
26
|
+
"test:coverage": "vitest run --coverage --config vitest.config.ts",
|
|
27
|
+
"publish:npm": "npm publish --access=public"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"ncds",
|
|
31
|
+
"nhn-commerce",
|
|
32
|
+
"design-system",
|
|
33
|
+
"mcp",
|
|
34
|
+
"model-context-protocol"
|
|
35
|
+
],
|
|
36
|
+
"license": "SEE LICENSE IN LICENSE",
|
|
37
|
+
"private": false,
|
|
38
|
+
"dependencies": {
|
|
39
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
40
|
+
"jsdom": "^26.1.0",
|
|
41
|
+
"node-html-parser": "^7.1.0",
|
|
42
|
+
"react": "^18.2.0",
|
|
43
|
+
"react-dom": "^18.2.0",
|
|
44
|
+
"zod": "^4.3.6"
|
|
45
|
+
},
|
|
46
|
+
"peerDependencies": {
|
|
47
|
+
"flatpickr": ">=4.6.0",
|
|
48
|
+
"lodash-es": ">=4.17.0",
|
|
49
|
+
"moment": ">=2.30.0",
|
|
50
|
+
"swiper": ">=11.0.0"
|
|
51
|
+
},
|
|
52
|
+
"peerDependenciesMeta": {
|
|
53
|
+
"flatpickr": {
|
|
54
|
+
"optional": true
|
|
55
|
+
},
|
|
56
|
+
"lodash-es": {
|
|
57
|
+
"optional": true
|
|
58
|
+
},
|
|
59
|
+
"moment": {
|
|
60
|
+
"optional": true
|
|
61
|
+
},
|
|
62
|
+
"swiper": {
|
|
63
|
+
"optional": true
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
"devDependencies": {
|
|
67
|
+
"@types/node": "^25.5.0",
|
|
68
|
+
"@types/react": "^18.3.20",
|
|
69
|
+
"ts-morph": "^27.0.2"
|
|
70
|
+
}
|
|
71
|
+
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# NCUA MCP 서버 설정 템플릿
|
|
2
|
+
|
|
3
|
+
## 빠른 시작
|
|
4
|
+
|
|
5
|
+
프로젝트 루트에 `.mcp.json` 파일을 생성하고 아래 내용을 추가합니다.
|
|
6
|
+
|
|
7
|
+
```json
|
|
8
|
+
{
|
|
9
|
+
"mcpServers": {
|
|
10
|
+
"ncds-ui-admin": {
|
|
11
|
+
"command": "npx",
|
|
12
|
+
"args": ["-y", "@ncds/ui-admin-mcp"]
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
또는 이 디렉토리의 `.mcp.json.example` 파일을 프로젝트 루트로 복사합니다.
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
cp node_modules/@ncds/ui-admin-mcp/templates/.mcp.json.example .mcp.json
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## 요구사항
|
|
25
|
+
|
|
26
|
+
- Node.js 20 이상
|
|
27
|
+
|
|
28
|
+
## 확인 방법
|
|
29
|
+
|
|
30
|
+
설정 후 Claude Desktop 또는 Claude Code를 재시작하면 `ncds-ui-admin` MCP 서버가 자동으로 인식됩니다.
|