@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.
Files changed (97) hide show
  1. package/README.md +113 -0
  2. package/bin/components.bundle.js +21 -0
  3. package/bin/definitions/compliance-rules.json +64 -0
  4. package/bin/definitions/instructions.md +96 -0
  5. package/bin/definitions/rules.json +57 -0
  6. package/bin/definitions/token-descriptions.json +27 -0
  7. package/bin/definitions/tool-definitions.json +42 -0
  8. package/bin/instructions.d.ts +1 -0
  9. package/bin/instructions.js +14 -0
  10. package/bin/server.d.ts +1 -0
  11. package/bin/server.js +164 -0
  12. package/bin/server.mjs +8 -0
  13. package/bin/tools/getComponentHtml.d.ts +3 -0
  14. package/bin/tools/getComponentHtml.js +30 -0
  15. package/bin/tools/getComponentProps.d.ts +4 -0
  16. package/bin/tools/getComponentProps.js +17 -0
  17. package/bin/tools/getDesignTokens.d.ts +13 -0
  18. package/bin/tools/getDesignTokens.js +20 -0
  19. package/bin/tools/listComponents.d.ts +16 -0
  20. package/bin/tools/listComponents.js +24 -0
  21. package/bin/tools/listIcons.d.ts +22 -0
  22. package/bin/tools/listIcons.js +23 -0
  23. package/bin/tools/ping.d.ts +17 -0
  24. package/bin/tools/ping.js +20 -0
  25. package/bin/tools/renderToHtml.d.ts +21 -0
  26. package/bin/tools/renderToHtml.js +177 -0
  27. package/bin/tools/searchComponent.d.ts +4 -0
  28. package/bin/tools/searchComponent.js +33 -0
  29. package/bin/tools/searchIcon.d.ts +7 -0
  30. package/bin/tools/searchIcon.js +19 -0
  31. package/bin/tools/validateHtml.d.ts +18 -0
  32. package/bin/tools/validateHtml.js +85 -0
  33. package/bin/types.d.ts +111 -0
  34. package/bin/types.js +5 -0
  35. package/bin/utils/bemValidator.d.ts +36 -0
  36. package/bin/utils/bemValidator.js +198 -0
  37. package/bin/utils/compliance.d.ts +52 -0
  38. package/bin/utils/compliance.js +199 -0
  39. package/bin/utils/dataLoader.d.ts +33 -0
  40. package/bin/utils/dataLoader.js +174 -0
  41. package/bin/utils/domEnvironment.d.ts +9 -0
  42. package/bin/utils/domEnvironment.js +25 -0
  43. package/bin/utils/fuzzyMatch.d.ts +21 -0
  44. package/bin/utils/fuzzyMatch.js +110 -0
  45. package/bin/utils/logger.d.ts +18 -0
  46. package/bin/utils/logger.js +27 -0
  47. package/bin/utils/response.d.ts +26 -0
  48. package/bin/utils/response.js +28 -0
  49. package/bin/utils/tokenValidator.d.ts +24 -0
  50. package/bin/utils/tokenValidator.js +162 -0
  51. package/bin/version.d.ts +4 -0
  52. package/bin/version.js +7 -0
  53. package/data/_icons.json +12361 -0
  54. package/data/_meta.json +12 -0
  55. package/data/_tokens.json +661 -0
  56. package/data/badge-group.json +121 -0
  57. package/data/badge.json +130 -0
  58. package/data/bread-crumb.json +51 -0
  59. package/data/button-group.json +94 -0
  60. package/data/button.json +143 -0
  61. package/data/carousel-arrow.json +87 -0
  62. package/data/carousel-number-group.json +87 -0
  63. package/data/checkbox.json +99 -0
  64. package/data/combo-box.json +157 -0
  65. package/data/date-picker.json +109 -0
  66. package/data/divider.json +91 -0
  67. package/data/dot.json +103 -0
  68. package/data/dropdown.json +123 -0
  69. package/data/empty-state.json +64 -0
  70. package/data/featured-icon.json +125 -0
  71. package/data/file-input.json +161 -0
  72. package/data/horizontal-tab.json +114 -0
  73. package/data/image-file-input.json +185 -0
  74. package/data/input-base.json +145 -0
  75. package/data/modal.json +131 -0
  76. package/data/notification.json +176 -0
  77. package/data/number-input.json +141 -0
  78. package/data/pagination.json +101 -0
  79. package/data/password-input.json +45 -0
  80. package/data/progress-bar.json +90 -0
  81. package/data/progress-circle.json +96 -0
  82. package/data/radio.json +86 -0
  83. package/data/range-date-picker-with-buttons.json +101 -0
  84. package/data/range-date-picker.json +87 -0
  85. package/data/select-box.json +177 -0
  86. package/data/select.json +116 -0
  87. package/data/slider.json +100 -0
  88. package/data/spinner.json +94 -0
  89. package/data/switch.json +109 -0
  90. package/data/tag.json +101 -0
  91. package/data/textarea.json +96 -0
  92. package/data/toggle.json +102 -0
  93. package/data/tooltip.json +185 -0
  94. package/data/vertical-tab.json +99 -0
  95. package/package.json +71 -0
  96. package/templates/.mcp.json.example +8 -0
  97. package/templates/README.md +30 -0
@@ -0,0 +1,87 @@
1
+ {
2
+ "name": "range-date-picker",
3
+ "exportName": "RangeDatePicker",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": false,
6
+ "category": "input",
7
+ "description": "RangeDatePicker는 시작일~종료일 기간 범위를 선택해야 하는 경우 사용하는 복합 선택 위젯입니다. 검색 기간 설정, 노출 기간 설정, 이벤트 기간 설정 등 두 날짜의 쌍(Pair)이 필요한 모든 상황에서 사용합니다.",
8
+ "aliases": [
9
+ "범위날짜선택",
10
+ "RangeDatePicker",
11
+ "RangeDatePickerWithButtons",
12
+ "컴포넌트",
13
+ "기간선택",
14
+ "시작일",
15
+ "종료일",
16
+ "날짜범위",
17
+ "ButtonGroup",
18
+ "기간옵션",
19
+ "periodKeys",
20
+ "validationOption",
21
+ "onDateValidation",
22
+ "overlap",
23
+ "period",
24
+ "NCDS"
25
+ ],
26
+ "hasChildren": false,
27
+ "whenToUse": [
28
+ "시작일·종료일 동일 Format·동일 Size를 유지",
29
+ "기간 옵션 ButtonGroup(4~7개)으로 빠른 기간 설정 지원",
30
+ "overlap/period 유효성 검증으로 잘못된 입력 방지"
31
+ ],
32
+ "forbiddenRules": [
33
+ "시작일과 종료일의 Format 불일치 금지",
34
+ "기간 옵션 ButtonGroup 3개 이하 또는 8개 이상 구성 금지",
35
+ "시작일·종료일 DatePicker 사이즈 불일치 금지",
36
+ "종료일에 isEndDate 수동 false 설정 금지",
37
+ "조회 화면에서 Disabled Field 사용 금지",
38
+ "텍스트 입력 불가 UX 금지",
39
+ "ButtonGroup 없이 기간 프리셋 누락 금지",
40
+ "구분자 ~ 외 다른 기호 사용 금지"
41
+ ],
42
+ "seeAlso": [
43
+ "date-picker",
44
+ "button-group"
45
+ ],
46
+ "props": {
47
+ "endDateOptions": {
48
+ "type": "string",
49
+ "required": true,
50
+ "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/components/date-picker/DatePicker\").DatePickerProps"
51
+ },
52
+ "onDateValidation": {
53
+ "type": "function",
54
+ "required": false
55
+ },
56
+ "size": {
57
+ "type": "enum",
58
+ "required": false,
59
+ "values": [
60
+ "sm",
61
+ "xs"
62
+ ],
63
+ "default": "xs"
64
+ },
65
+ "startDateOptions": {
66
+ "type": "string",
67
+ "required": true,
68
+ "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/components/date-picker/DatePicker\").DatePickerProps"
69
+ },
70
+ "validationOption": {
71
+ "type": "object",
72
+ "required": false
73
+ }
74
+ },
75
+ "html": {},
76
+ "bemClasses": [
77
+ "ncua-range-date-picker"
78
+ ],
79
+ "usage": {
80
+ "import": "import { RangeDatePicker } from '@ncds/ui-admin';",
81
+ "react": {
82
+ "default": "<RangeDatePicker endDateOptions=\"\" startDateOptions=\"\" />",
83
+ "size:sm": "<RangeDatePicker size=\"sm\" endDateOptions=\"\" startDateOptions=\"\" />",
84
+ "size:xs": "<RangeDatePicker size=\"xs\" endDateOptions=\"\" startDateOptions=\"\" />"
85
+ }
86
+ }
87
+ }
@@ -0,0 +1,177 @@
1
+ {
2
+ "name": "select-box",
3
+ "exportName": "SelectBox",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": true,
6
+ "category": "input",
7
+ "description": "Selectbox는 목록(레이어) 중에서 하나 이상의 항목을 선택하는 입력 컴포넌트로, 선택 가능한 옵션이 3~30개 정도이며 공간 효율이 중요한 경우 사용합니다.",
8
+ "aliases": [
9
+ "셀렉트박스",
10
+ "Selectbox",
11
+ "SelectBox",
12
+ "Dropdown",
13
+ "드롭다운",
14
+ "Single Select",
15
+ "Multi Select",
16
+ "Chips",
17
+ "옵션선택",
18
+ "placeholder",
19
+ "optionItems",
20
+ "multiple",
21
+ "react-hook-form",
22
+ "NCDS"
23
+ ],
24
+ "hasChildren": true,
25
+ "whenToUse": [
26
+ "옵션 수 6개 이상 또는 공간 제약 시 사용",
27
+ "옵션 3~30개인 경우",
28
+ "테이블 내부 컴팩트 영역에서 옵션 선택 필요",
29
+ "상태/분류/정렬 단일 선택",
30
+ "팀 멤버/태그/필터 다중 선택"
31
+ ],
32
+ "forbiddenRules": [
33
+ "옵션 2개(180도 반대 의미)인데 Selectbox 사용 금지",
34
+ "옵션 수 5개 이하+공간 충분한데 Selectbox 남용 금지",
35
+ "30개 이상 옵션을 일반 Selectbox로만 제공 금지",
36
+ "다중 선택형에서 선택 완료 없이 즉시 확정 UX 혼용 금지",
37
+ "말줄임 Chips에 Tooltip 미제공 금지",
38
+ "Read only에서 레이어 열림 동작 제공 금지",
39
+ "Read only를 Disabled로 대체하여 값 가독성 저하 지양",
40
+ "Disabled 상태에서 Tooltip/설명 없이 클릭 시도 유도 금지"
41
+ ],
42
+ "seeAlso": [
43
+ "radio",
44
+ "checkbox",
45
+ "switch",
46
+ "input",
47
+ "tooltip"
48
+ ],
49
+ "htmlElement": "div",
50
+ "props": {
51
+ "align": {
52
+ "type": "enum",
53
+ "required": false,
54
+ "values": [
55
+ "left",
56
+ "right"
57
+ ],
58
+ "default": "left"
59
+ },
60
+ "autoWidth": {
61
+ "type": "boolean",
62
+ "required": false,
63
+ "default": true
64
+ },
65
+ "children": {
66
+ "type": "ReactNode",
67
+ "required": false
68
+ },
69
+ "destructive": {
70
+ "type": "boolean",
71
+ "required": false,
72
+ "default": false
73
+ },
74
+ "disabled": {
75
+ "type": "boolean",
76
+ "required": false,
77
+ "default": false
78
+ },
79
+ "disabledPlaceholder": {
80
+ "type": "boolean",
81
+ "required": false,
82
+ "default": false
83
+ },
84
+ "hintText": {
85
+ "type": "string",
86
+ "required": false
87
+ },
88
+ "maxHeight": {
89
+ "type": "number",
90
+ "required": false,
91
+ "default": "DEFAULT_MAX_HEIGHT"
92
+ },
93
+ "multiple": {
94
+ "type": "boolean",
95
+ "required": false,
96
+ "default": false
97
+ },
98
+ "onChange": {
99
+ "type": "function",
100
+ "required": false
101
+ },
102
+ "onEdit": {
103
+ "type": "function",
104
+ "required": false
105
+ },
106
+ "optionItems": {
107
+ "type": "string",
108
+ "required": false,
109
+ "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/types/dropdown/option\").OptionType[] | undefined",
110
+ "default": "[]"
111
+ },
112
+ "placeholder": {
113
+ "type": "string",
114
+ "required": false,
115
+ "default": "선택하세요"
116
+ },
117
+ "register": {
118
+ "type": "object",
119
+ "required": false
120
+ },
121
+ "size": {
122
+ "type": "enum",
123
+ "required": false,
124
+ "values": [
125
+ "md",
126
+ "sm",
127
+ "xs"
128
+ ],
129
+ "default": "xs"
130
+ },
131
+ "type": {
132
+ "type": "enum",
133
+ "required": false,
134
+ "values": [
135
+ "default",
136
+ "simple"
137
+ ],
138
+ "default": "default"
139
+ },
140
+ "value": {
141
+ "type": "string",
142
+ "required": false,
143
+ "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/types/dropdown/option\").OptionValue | undefined"
144
+ }
145
+ },
146
+ "html": {},
147
+ "bemClasses": [
148
+ "ncua-hint-text",
149
+ "ncua-selectbox",
150
+ "ncua-selectbox--disabled",
151
+ "ncua-selectbox--multiple",
152
+ "ncua-selectbox--open",
153
+ "ncua-selectbox--simple",
154
+ "ncua-selectbox__arrow",
155
+ "ncua-selectbox__arrow--up",
156
+ "ncua-selectbox__content",
157
+ "ncua-selectbox__content-inner",
158
+ "ncua-selectbox__tags",
159
+ "ncua-selectbox__value",
160
+ "ncua-selectbox__value-container",
161
+ "ncua-selectbox__value-icon",
162
+ "ncua-selectbox__value-text"
163
+ ],
164
+ "usage": {
165
+ "import": "import { SelectBox } from '@ncds/ui-admin';",
166
+ "react": {
167
+ "default": "<SelectBox />",
168
+ "align:left": "<SelectBox align=\"left\" />",
169
+ "align:right": "<SelectBox align=\"right\" />",
170
+ "size:md": "<SelectBox size=\"md\" />",
171
+ "size:sm": "<SelectBox size=\"sm\" />",
172
+ "size:xs": "<SelectBox size=\"xs\" />",
173
+ "type:default": "<SelectBox type=\"default\" />",
174
+ "type:simple": "<SelectBox type=\"simple\" />"
175
+ }
176
+ }
177
+ }
@@ -0,0 +1,116 @@
1
+ {
2
+ "name": "select",
3
+ "exportName": "Select",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": false,
6
+ "category": "input",
7
+ "description": "네이티브 HTML select 래퍼로, 간단한 드롭다운 목록에서 하나의 항목을 선택하는 입력 컴포넌트입니다.",
8
+ "aliases": [
9
+ "셀렉트",
10
+ "드롭다운 선택",
11
+ "목록 선택",
12
+ "dropdown select",
13
+ "카테고리",
14
+ "정렬",
15
+ "필터",
16
+ "Select",
17
+ "SelectBox",
18
+ "셀렉트박스",
19
+ "Dropdown",
20
+ "드롭다운",
21
+ "옵션선택",
22
+ "placeholder",
23
+ "react-hook-form",
24
+ "Single Select"
25
+ ],
26
+ "hasChildren": true,
27
+ "whenToUse": [
28
+ "간단한 목록에서 하나를 선택하는 맥락",
29
+ "커스텀 드롭다운이 불필요한 단순 선택",
30
+ "옵션 수 6개 이상이거나 공간이 제한적인 경우"
31
+ ],
32
+ "forbiddenRules": [
33
+ "옵션 2개(반대 의미)이면 Switch 우선",
34
+ "5개 이하+공간 충분하면 Radio/Checkbox 우선",
35
+ "30개 이상 옵션을 일반 select로만 제공 금지",
36
+ "Read only 상태에서 레이어 열림 동작 제공 금지",
37
+ "Disabled 상태에서 Tooltip/설명 없이 클릭 시도 유도 금지",
38
+ "말줄임 Chips에 Tooltip 미제공 금지"
39
+ ],
40
+ "seeAlso": [
41
+ "selectbox",
42
+ "combobox"
43
+ ],
44
+ "htmlElement": "select",
45
+ "props": {
46
+ "children": {
47
+ "type": "ReactNode",
48
+ "required": false
49
+ },
50
+ "destructive": {
51
+ "type": "boolean",
52
+ "required": false,
53
+ "default": false
54
+ },
55
+ "disabledPlaceholder": {
56
+ "type": "boolean",
57
+ "required": false,
58
+ "default": false
59
+ },
60
+ "hintText": {
61
+ "type": "string",
62
+ "required": false
63
+ },
64
+ "optionItems": {
65
+ "type": "string",
66
+ "required": false,
67
+ "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/types/dropdown/option\").OptionType[] | undefined"
68
+ },
69
+ "placeholder": {
70
+ "type": "string",
71
+ "required": false
72
+ },
73
+ "register": {
74
+ "type": "object",
75
+ "required": false
76
+ },
77
+ "size": {
78
+ "type": "enum",
79
+ "required": false,
80
+ "values": [
81
+ "md",
82
+ "sm",
83
+ "xs"
84
+ ],
85
+ "default": "md"
86
+ },
87
+ "type": {
88
+ "type": "enum",
89
+ "required": false,
90
+ "values": [
91
+ "default",
92
+ "simple"
93
+ ],
94
+ "default": "default"
95
+ }
96
+ },
97
+ "html": {},
98
+ "bemClasses": [
99
+ "ncua-hint-text",
100
+ "ncua-select",
101
+ "ncua-select--simple",
102
+ "ncua-select__content",
103
+ "ncua-select__tag"
104
+ ],
105
+ "usage": {
106
+ "import": "import { Select } from '@ncds/ui-admin';",
107
+ "react": {
108
+ "default": "<Select />",
109
+ "size:md": "<Select size=\"md\" />",
110
+ "size:sm": "<Select size=\"sm\" />",
111
+ "size:xs": "<Select size=\"xs\" />",
112
+ "type:default": "<Select type=\"default\" />",
113
+ "type:simple": "<Select type=\"simple\" />"
114
+ }
115
+ }
116
+ }
@@ -0,0 +1,100 @@
1
+ {
2
+ "name": "slider",
3
+ "exportName": "Slider",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": true,
6
+ "category": "input",
7
+ "description": "Slider는 연속적 또는 구간 기반 수치를 직관적으로 조절하는 입력 컴포넌트로, 텍스트 입력보다 범위가 명확하고 빠른 조정이 필요하며 시각적 비율이 중요한 경우 사용합니다.",
8
+ "aliases": [
9
+ "슬라이더",
10
+ "Slider",
11
+ "Range",
12
+ "Thumb",
13
+ "Track",
14
+ "범위선택",
15
+ "단일값",
16
+ "min",
17
+ "max",
18
+ "step",
19
+ "labelPosition",
20
+ "드래그",
21
+ "키보드조작",
22
+ "NCDS"
23
+ ],
24
+ "hasChildren": false,
25
+ "whenToUse": [
26
+ "min/max와 step이 반드시 정의되어야 하며 정밀 수치 입력이 필요한 경우 NumberInput과 조합하거나 대체",
27
+ "최소값과 최대값이 명확한 경우",
28
+ "값이 상대적 비율로 이해되는 경우",
29
+ "빠른 조정을 선호하는 경우",
30
+ "0~100 범위 기반 수치"
31
+ ],
32
+ "forbiddenRules": [
33
+ "min/max 없이 사용 금지",
34
+ "step 정의 없이 사용 금지",
35
+ "값 표시 없이 정밀 값 조정 요구 금지",
36
+ "정밀 수치 입력 필요한 곳에서 단독 사용 금지",
37
+ "Range Slider에서 Thumb 교차 허용 금지"
38
+ ],
39
+ "seeAlso": [
40
+ "number-input",
41
+ "input",
42
+ "tooltip"
43
+ ],
44
+ "props": {
45
+ "className": {
46
+ "type": "string",
47
+ "required": false
48
+ },
49
+ "disabled": {
50
+ "type": "boolean",
51
+ "required": false,
52
+ "default": false
53
+ },
54
+ "labelPosition": {
55
+ "type": "enum",
56
+ "required": false,
57
+ "values": [
58
+ "bottom",
59
+ "top-floating"
60
+ ]
61
+ },
62
+ "max": {
63
+ "type": "number",
64
+ "required": false,
65
+ "default": 100
66
+ },
67
+ "min": {
68
+ "type": "number",
69
+ "required": false,
70
+ "default": 0
71
+ },
72
+ "onChange": {
73
+ "type": "function",
74
+ "required": false
75
+ },
76
+ "step": {
77
+ "type": "number",
78
+ "required": false,
79
+ "default": 1
80
+ },
81
+ "value": {
82
+ "type": "string",
83
+ "required": false,
84
+ "rawType": "number | [number, number] | undefined",
85
+ "default": 0
86
+ }
87
+ },
88
+ "html": {},
89
+ "bemClasses": [
90
+ "ncua-slider"
91
+ ],
92
+ "usage": {
93
+ "import": "import { Slider } from '@ncds/ui-admin';",
94
+ "react": {
95
+ "default": "<Slider />",
96
+ "labelPosition:bottom": "<Slider labelPosition=\"bottom\" />",
97
+ "labelPosition:top-floating": "<Slider labelPosition=\"top-floating\" />"
98
+ }
99
+ }
100
+ }
@@ -0,0 +1,94 @@
1
+ {
2
+ "name": "spinner",
3
+ "exportName": "Spinner",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": false,
6
+ "category": "feedback",
7
+ "description": "Spinner는 데이터 조회, 검색, 업로드, 파일 생성 등 3초 이상 소요되는 처리 과정에서 사용자 불안감을 줄이기 위해 제공되는 피드백 UI입니다.",
8
+ "aliases": [
9
+ "Spinner",
10
+ "스피너",
11
+ "로딩",
12
+ "loading",
13
+ "불확정",
14
+ "비동기",
15
+ "대기",
16
+ "backdrop",
17
+ "dim",
18
+ "오버레이",
19
+ "취소",
20
+ "장시간",
21
+ "General",
22
+ "Long",
23
+ "NCDS"
24
+ ],
25
+ "hasChildren": true,
26
+ "whenToUse": [
27
+ "불확정 로딩 상태를 시각적으로 전달",
28
+ "진행률(%)을 알 수 없는 비동기 작업에서 사용",
29
+ "진행률이 확정된 경우에는 ProgressBar 또는 ProgressCircle을 사용"
30
+ ],
31
+ "forbiddenRules": [
32
+ "3초 미만 작업에 사용 금지",
33
+ "확정 진행률에 사용 금지(ProgressBar/ProgressCircle 사용)",
34
+ "안내 문구 없이 장시간 노출 금지",
35
+ "오버레이 없이 전체 페이지 로딩 사용 금지",
36
+ "장식 용도 금지"
37
+ ],
38
+ "seeAlso": [
39
+ "progress-bar",
40
+ "progress-circle"
41
+ ],
42
+ "props": {
43
+ "as": {
44
+ "type": "string",
45
+ "required": false,
46
+ "rawType": "React.ElementType | undefined",
47
+ "default": "p"
48
+ },
49
+ "backdrop": {
50
+ "type": "boolean",
51
+ "required": false,
52
+ "default": false
53
+ },
54
+ "children": {
55
+ "type": "ReactNode",
56
+ "required": false
57
+ },
58
+ "size": {
59
+ "type": "enum",
60
+ "required": false,
61
+ "values": [
62
+ "lg",
63
+ "md",
64
+ "sm",
65
+ "xl",
66
+ "xs"
67
+ ],
68
+ "default": "md"
69
+ }
70
+ },
71
+ "html": {},
72
+ "bemClasses": [
73
+ "ncua-spinner",
74
+ "ncua-spinner--backdrop",
75
+ "ncua-spinner--lg",
76
+ "ncua-spinner--md",
77
+ "ncua-spinner--sm",
78
+ "ncua-spinner--xl",
79
+ "ncua-spinner--xs",
80
+ "ncua-spinner__content",
81
+ "ncua-spinner__text"
82
+ ],
83
+ "usage": {
84
+ "import": "import { Spinner } from '@ncds/ui-admin';",
85
+ "react": {
86
+ "default": "<Spinner />",
87
+ "size:lg": "<Spinner size=\"lg\" />",
88
+ "size:md": "<Spinner size=\"md\" />",
89
+ "size:sm": "<Spinner size=\"sm\" />",
90
+ "size:xl": "<Spinner size=\"xl\" />",
91
+ "size:xs": "<Spinner size=\"xs\" />"
92
+ }
93
+ }
94
+ }
@@ -0,0 +1,109 @@
1
+ {
2
+ "name": "switch",
3
+ "exportName": "Switch",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": false,
6
+ "category": "input",
7
+ "description": "Switch는 하나의 기능 또는 상태에 대해 180도 다른 두 개의 선택지를 제공하는 토글형 컴포넌트로, 라디오 버튼 방식의 좌/우 영역 선택을 통해 즉각적인 상태 전환을 수행합니다.",
8
+ "aliases": [
9
+ "스위치",
10
+ "Switch",
11
+ "토글",
12
+ "Toggle",
13
+ "On",
14
+ "Off",
15
+ "사용함",
16
+ "사용안함",
17
+ "이진선택",
18
+ "즉각전환",
19
+ "SwitchOption",
20
+ "SwitchSize",
21
+ "NCDS"
22
+ ],
23
+ "hasChildren": false,
24
+ "whenToUse": [
25
+ "선택지가 정확히 2개이고 180도 반대 의미이며 하위 옵션이 없는 경우",
26
+ "좌측=On 우측=Off를 일관 유지",
27
+ "테이블 내 사용은 메인/핵심 옵션에 한해 제한적 허용"
28
+ ],
29
+ "forbiddenRules": [
30
+ "다중 옵션 기능에 Switch 사용 금지",
31
+ "하위 옵션 존재 시 Switch 사용 금지",
32
+ "강조 스타일로 특정 상태 유도 금지",
33
+ "3개 이상 선택지에 사용 금지",
34
+ "Title 영역에 Switch 적용 지양"
35
+ ],
36
+ "seeAlso": [
37
+ "radio",
38
+ "checkbox",
39
+ "selectbox",
40
+ "toggle"
41
+ ],
42
+ "props": {
43
+ "className": {
44
+ "type": "string",
45
+ "required": false
46
+ },
47
+ "defaultValue": {
48
+ "type": "string",
49
+ "required": false,
50
+ "rawType": "string | boolean | undefined",
51
+ "default": "left.value"
52
+ },
53
+ "disabled": {
54
+ "type": "boolean",
55
+ "required": false,
56
+ "default": false
57
+ },
58
+ "left": {
59
+ "type": "object",
60
+ "required": true
61
+ },
62
+ "name": {
63
+ "type": "string",
64
+ "required": true
65
+ },
66
+ "onChange": {
67
+ "type": "function",
68
+ "required": false
69
+ },
70
+ "refs": {
71
+ "type": "object",
72
+ "required": false
73
+ },
74
+ "right": {
75
+ "type": "object",
76
+ "required": true
77
+ },
78
+ "size": {
79
+ "type": "string",
80
+ "required": false,
81
+ "rawType": "any",
82
+ "default": "xs"
83
+ },
84
+ "value": {
85
+ "type": "string",
86
+ "required": false,
87
+ "rawType": "string | boolean | undefined"
88
+ }
89
+ },
90
+ "html": {},
91
+ "bemClasses": [
92
+ "ncua-switch",
93
+ "ncua-switch--disabled",
94
+ "ncua-switch__label",
95
+ "ncua-switch__option",
96
+ "ncua-switch__option--active",
97
+ "ncua-switch__option--inactive",
98
+ "ncua-switch__option--left",
99
+ "ncua-switch__option--right",
100
+ "ncua-switch__radio ncua-switch__radio--left",
101
+ "ncua-switch__radio ncua-switch__radio--right"
102
+ ],
103
+ "usage": {
104
+ "import": "import { Switch } from '@ncds/ui-admin';",
105
+ "react": {
106
+ "default": "<Switch left=\"\" name=\"\" right=\"\" />"
107
+ }
108
+ }
109
+ }