@ncds/ui-admin-mcp 1.0.0-alpha.2 → 1.0.0-alpha.20

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 (100) hide show
  1. package/bin/components.bundle.js +15 -19
  2. package/bin/definitions/external/editor.d.ts +50 -0
  3. package/bin/definitions/external/editor.js +53 -0
  4. package/bin/definitions/external/step-guide.d.ts +61 -0
  5. package/bin/definitions/external/step-guide.js +52 -0
  6. package/bin/definitions/instructions.md +194 -10
  7. package/bin/definitions/js-api.json +352 -0
  8. package/bin/definitions/rules.json +36 -4
  9. package/bin/definitions/tool-definitions.json +33 -9
  10. package/bin/overrides/composition.json +2500 -0
  11. package/bin/server.d.ts +5 -0
  12. package/bin/server.js +97 -33
  13. package/bin/server.mjs +0 -0
  14. package/bin/tools/external/editor.d.ts +18 -0
  15. package/bin/tools/external/editor.js +88 -0
  16. package/bin/tools/external/step-guide.d.ts +19 -0
  17. package/bin/tools/external/step-guide.js +79 -0
  18. package/bin/tools/getComponentProps.d.ts +3 -0
  19. package/bin/tools/getComponentProps.js +12 -3
  20. package/bin/tools/listCompositionOverrides.d.ts +61 -0
  21. package/bin/tools/listCompositionOverrides.js +156 -0
  22. package/bin/tools/ping.d.ts +1 -1
  23. package/bin/tools/renderToHtml.d.ts +38 -7
  24. package/bin/tools/renderToHtml.js +785 -110
  25. package/bin/tools/searchComponent.d.ts +5 -0
  26. package/bin/tools/searchComponent.js +3 -3
  27. package/bin/tools/validateHtml.d.ts +8 -6
  28. package/bin/tools/validateHtml.js +74 -6
  29. package/bin/types.d.ts +60 -1
  30. package/bin/utils/bemValidator.d.ts +16 -8
  31. package/bin/utils/bemValidator.js +16 -4
  32. package/bin/utils/compliance.d.ts +7 -6
  33. package/bin/utils/compliance.js +8 -4
  34. package/bin/utils/dataLoader.d.ts +43 -14
  35. package/bin/utils/dataLoader.js +125 -22
  36. package/bin/utils/domEnvironment.js +51 -0
  37. package/bin/utils/fuzzyMatch.d.ts +4 -0
  38. package/bin/utils/fuzzyMatch.js +13 -3
  39. package/bin/utils/logger.d.ts +5 -5
  40. package/bin/utils/logger.js +5 -5
  41. package/bin/utils/response.d.ts +4 -2
  42. package/bin/utils/response.js +15 -4
  43. package/bin/utils/tokenValidator.d.ts +4 -3
  44. package/bin/utils/tokenValidator.js +13 -11
  45. package/bin/version.d.ts +4 -2
  46. package/bin/version.js +4 -2
  47. package/data/_icons.json +357 -2
  48. package/data/_meta.json +4 -5
  49. package/data/_tokens.json +8 -8
  50. package/data/badge-group.json +181 -4
  51. package/data/badge.json +146 -14
  52. package/data/block-container.json +95 -0
  53. package/data/block-header.json +208 -0
  54. package/data/bread-crumb.json +38 -2
  55. package/data/button-group.json +59 -0
  56. package/data/button.json +124 -1
  57. package/data/carousel-arrow.json +6 -11
  58. package/data/carousel-number-group.json +2 -12
  59. package/data/checkbox.json +1 -1
  60. package/data/combo-box.json +32 -8
  61. package/data/data-grid.json +240 -0
  62. package/data/date-picker.json +22 -2
  63. package/data/divider.json +1 -1
  64. package/data/dot.json +2 -2
  65. package/data/dropdown.json +187 -20
  66. package/data/editor.json +85 -0
  67. package/data/empty-state.json +168 -3
  68. package/data/featured-icon.json +20 -5
  69. package/data/file-input.json +176 -10
  70. package/data/horizontal-tab.json +219 -3
  71. package/data/image-file-input.json +176 -10
  72. package/data/input-base.json +165 -4
  73. package/data/modal.json +266 -5
  74. package/data/notification.json +56 -40
  75. package/data/number-input.json +164 -4
  76. package/data/page-title.json +135 -0
  77. package/data/pagination.json +8 -4
  78. package/data/password-input.json +252 -13
  79. package/data/progress-bar.json +28 -8
  80. package/data/progress-circle.json +9 -6
  81. package/data/radio.json +4 -3
  82. package/data/range-date-picker-with-buttons.json +187 -7
  83. package/data/range-date-picker.json +186 -6
  84. package/data/select-box.json +48 -16
  85. package/data/select.json +35 -25
  86. package/data/slider.json +1 -1
  87. package/data/spinner.json +3 -4
  88. package/data/step-guide.json +130 -0
  89. package/data/switch.json +66 -6
  90. package/data/table.json +293 -0
  91. package/data/tag.json +68 -6
  92. package/data/textarea.json +1 -1
  93. package/data/toggle.json +2 -2
  94. package/data/tooltip.json +16 -3
  95. package/data/vertical-tab.json +220 -3
  96. package/package.json +27 -25
  97. package/bin/instructions.d.ts +0 -1
  98. package/bin/instructions.js +0 -14
  99. package/bin/tools/getComponentHtml.d.ts +0 -3
  100. package/bin/tools/getComponentHtml.js +0 -30
@@ -0,0 +1,240 @@
1
+ {
2
+ "name": "data-grid",
3
+ "exportName": "DataGrid",
4
+ "importPath": "@ncds/ui-admin",
5
+ "jsRequired": false,
6
+ "category": "data-display",
7
+ "description": "DataGrid는 관리자 화면에서 대량의 데이터를 테이블 형태로 조회·관리하기 위한 핵심 컴포넌트입니다. 조회 결과 리스트, 일반 가로형·세로형 테이블로 구분되며, Header·데이터 필드·선택·액션·필터·정렬·페이지네이션·검색결과 영역 등으로 구성됩니다.",
8
+ "aliases": [
9
+ "DataGrid",
10
+ "데이터그리드",
11
+ "테이블",
12
+ "Table",
13
+ "Grid",
14
+ "조회결과",
15
+ "가로형",
16
+ "세로형",
17
+ "Header",
18
+ "Pagination",
19
+ "Filter",
20
+ "Sort",
21
+ "Action Button",
22
+ "Row Selection",
23
+ "Reorder",
24
+ "Expand",
25
+ "Collapse",
26
+ "Empty State",
27
+ "Badge",
28
+ "Checkbox",
29
+ "DataGrid.SearchFilter",
30
+ "DataGrid.Summary",
31
+ "DataGrid.FilterBar",
32
+ "DataGrid.ActionBar",
33
+ "DataGrid.Table",
34
+ "DataGrid.Pagination",
35
+ "variant",
36
+ "search-result",
37
+ "horizontal",
38
+ "position",
39
+ "align",
40
+ "fixedHeader",
41
+ "maxHeight",
42
+ "hoverable",
43
+ "selectable",
44
+ "NCDS",
45
+ "가로스크롤",
46
+ "horizontal scroll",
47
+ "scrollX",
48
+ "overflow-x",
49
+ "column min-width",
50
+ "셀 최소 너비",
51
+ "셀 최소 글자수",
52
+ "1140",
53
+ "table min-width",
54
+ "줄바꿈",
55
+ "word-break",
56
+ "콘텐츠 타입별 차등",
57
+ "2단 wrapper",
58
+ "Portal",
59
+ "Floating UI",
60
+ "스크롤 컨테이너",
61
+ "scrollbar token",
62
+ "Modal DataGrid 예외"
63
+ ],
64
+ "hasChildren": true,
65
+ "whenToUse": [
66
+ "DataGrid는 반드시 Block 또는 Tab 구조 내에 포함되어야 하며, Block > 세부항목 내부에 Table 구조를 중첩하는 것은 지양한다 (5개 이하 정보 제공 시에만 예외 허용)",
67
+ "10개 이상 데이터 관리 화면에서 적용",
68
+ "관리자가 데이터를 조작하는 화면",
69
+ "대량 데이터 일괄 처리 화면"
70
+ ],
71
+ "forbiddenRules": [
72
+ "블록 내부 중첩 테이블 남발 금지",
73
+ "▲▼ 형태 정렬 UI 사용 금지",
74
+ "과도한 Badge/Icon 사용 금지",
75
+ "Row Height 임의 수정 금지",
76
+ "프로젝트별 임의 컬럼 정렬 변경 금지"
77
+ ],
78
+ "seeAlso": [
79
+ "table",
80
+ "checkbox",
81
+ "radio",
82
+ "pagination",
83
+ "badge",
84
+ "empty-state",
85
+ "button",
86
+ "block-container"
87
+ ],
88
+ "htmlElement": "div",
89
+ "props": {
90
+ "children": {
91
+ "type": "ReactNode",
92
+ "required": true
93
+ },
94
+ "variant": {
95
+ "type": "enum",
96
+ "required": false,
97
+ "values": [
98
+ "horizontal",
99
+ "search-result"
100
+ ],
101
+ "default": "search-result"
102
+ }
103
+ },
104
+ "subComponents": {
105
+ "DataGrid.SearchFilter": {
106
+ "props": {
107
+ "children": {
108
+ "type": "ReactNode",
109
+ "required": true
110
+ }
111
+ }
112
+ },
113
+ "DataGrid.Summary": {
114
+ "props": {
115
+ "children": {
116
+ "type": "ReactNode",
117
+ "required": true
118
+ }
119
+ }
120
+ },
121
+ "DataGrid.FilterBar": {
122
+ "props": {
123
+ "children": {
124
+ "type": "ReactNode",
125
+ "required": true
126
+ }
127
+ }
128
+ },
129
+ "DataGrid.ActionBar": {
130
+ "props": {
131
+ "align": {
132
+ "type": "enum",
133
+ "required": false,
134
+ "values": [
135
+ "left",
136
+ "right",
137
+ "space-between"
138
+ ],
139
+ "default": "space-between"
140
+ },
141
+ "children": {
142
+ "type": "ReactNode",
143
+ "required": true
144
+ },
145
+ "position": {
146
+ "type": "enum",
147
+ "required": false,
148
+ "values": [
149
+ "bottom",
150
+ "top"
151
+ ],
152
+ "default": "top"
153
+ }
154
+ }
155
+ },
156
+ "DataGrid.Table": {
157
+ "props": {
158
+ "children": {
159
+ "type": "ReactNode",
160
+ "required": true
161
+ },
162
+ "className": {
163
+ "type": "string",
164
+ "required": false
165
+ },
166
+ "fixedHeader": {
167
+ "type": "boolean",
168
+ "required": false
169
+ },
170
+ "horizontalScroll": {
171
+ "type": "boolean",
172
+ "required": false
173
+ },
174
+ "hoverable": {
175
+ "type": "boolean",
176
+ "required": false
177
+ },
178
+ "maxHeight": {
179
+ "type": "string",
180
+ "required": false,
181
+ "rawType": "string | number | undefined"
182
+ },
183
+ "minWidth": {
184
+ "type": "string",
185
+ "required": false,
186
+ "rawType": "string | number | undefined"
187
+ },
188
+ "selectable": {
189
+ "type": "boolean",
190
+ "required": false
191
+ },
192
+ "type": {
193
+ "type": "enum",
194
+ "required": false,
195
+ "values": [
196
+ "horizontal",
197
+ "vertical"
198
+ ],
199
+ "default": "horizontal"
200
+ }
201
+ }
202
+ },
203
+ "DataGrid.Pagination": {
204
+ "props": {
205
+ "children": {
206
+ "type": "ReactNode",
207
+ "required": true
208
+ }
209
+ }
210
+ }
211
+ },
212
+ "html": {},
213
+ "bemClasses": [
214
+ "ncua-data-grid",
215
+ "ncua-data-grid--horizontal",
216
+ "ncua-data-grid--search-result",
217
+ "ncua-data-grid__action-bar",
218
+ "ncua-data-grid__action-bar ncua-data-grid__action-bar--bottom",
219
+ "ncua-data-grid__action-bar--bottom",
220
+ "ncua-data-grid__action-bar--left",
221
+ "ncua-data-grid__action-bar--right",
222
+ "ncua-data-grid__action-bar--space-between",
223
+ "ncua-data-grid__action-bar--top",
224
+ "ncua-data-grid__filter-bar",
225
+ "ncua-data-grid__pagination",
226
+ "ncua-data-grid__search-filter",
227
+ "ncua-data-grid__summary",
228
+ "ncua-data-grid__table",
229
+ "ncua-data-grid__table-wrapper",
230
+ "ncua-table--in-data-grid"
231
+ ],
232
+ "usage": {
233
+ "import": "import { DataGrid } from '@ncds/ui-admin';",
234
+ "react": {
235
+ "default": "<DataGrid children=\"예시\" />",
236
+ "variant:horizontal": "<DataGrid variant=\"horizontal\" children=\"예시\" />",
237
+ "variant:search-result": "<DataGrid variant=\"search-result\" children=\"예시\" />"
238
+ }
239
+ }
240
+ }
@@ -3,7 +3,7 @@
3
3
  "exportName": "DatePicker",
4
4
  "importPath": "@ncds/ui-admin",
5
5
  "jsRequired": true,
6
- "category": "input",
6
+ "category": "forms-and-input",
7
7
  "description": "DatePicker는 등록일, 노출일, 검색 기간 등 날짜 또는 시간 설정이 필요한 경우 사용하는 선택 위젯입니다.",
8
8
  "aliases": [
9
9
  "날짜선택위젯",
@@ -37,6 +37,19 @@
37
37
  "range-date-picker"
38
38
  ],
39
39
  "htmlElement": "input",
40
+ "usageExamples": {
41
+ "default": {
42
+ "currentDate": "2026-03-24",
43
+ "size": "sm"
44
+ },
45
+ "withTime": {
46
+ "currentDate": "2026-03-24 14:30",
47
+ "datePickerOptions": {
48
+ "enableTime": true,
49
+ "dateFormat": "Y-m-d H:i"
50
+ }
51
+ }
52
+ },
40
53
  "props": {
41
54
  "className": {
42
55
  "type": "string",
@@ -48,7 +61,8 @@
48
61
  },
49
62
  "datePickerOptions": {
50
63
  "type": "object",
51
- "required": false
64
+ "required": false,
65
+ "rawType": "Partial<import(\"/home/runner/_work/ncds/ncds/node_modules/.pnpm/flatpickr@4.6.13/node_modules/flatpickr/dist/types/options\").BaseOptions> | undefined"
52
66
  },
53
67
  "destructive": {
54
68
  "type": "string",
@@ -71,6 +85,11 @@
71
85
  "type": "string",
72
86
  "required": false
73
87
  },
88
+ "portal": {
89
+ "type": "boolean",
90
+ "required": false,
91
+ "default": false
92
+ },
74
93
  "shouldFocus": {
75
94
  "type": "boolean",
76
95
  "required": false,
@@ -92,6 +111,7 @@
92
111
  "ncua-date-picker--destructive",
93
112
  "ncua-date-picker--disabled",
94
113
  "ncua-date-picker--has-time",
114
+ "ncua-date-picker--portal",
95
115
  "ncua-date-picker--sm",
96
116
  "ncua-date-picker--xs",
97
117
  "ncua-date-picker__destructive",
package/data/divider.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "exportName": "Divider",
4
4
  "importPath": "@ncds/ui-admin",
5
5
  "jsRequired": false,
6
- "category": "data-display",
6
+ "category": "layout",
7
7
  "description": "콘텐츠 영역을 시각적으로 구분하는 수평 또는 수직 구분선 컴포넌트입니다.",
8
8
  "aliases": [
9
9
  "Divider",
package/data/dot.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "exportName": "Dot",
4
4
  "importPath": "@ncds/ui-admin",
5
5
  "jsRequired": false,
6
- "category": "icon",
6
+ "category": "image-and-icons",
7
7
  "description": "Dot 컴포넌트는 상태나 알림을 시각적으로 표시하기 위한 작은 원형 표시기입니다",
8
8
  "aliases": [
9
9
  "Dot",
@@ -67,7 +67,7 @@
67
67
  "md",
68
68
  "sm"
69
69
  ],
70
- "default": "md"
70
+ "default": "sm"
71
71
  }
72
72
  },
73
73
  "html": {},
@@ -2,8 +2,8 @@
2
2
  "name": "dropdown",
3
3
  "exportName": "Dropdown",
4
4
  "importPath": "@ncds/ui-admin",
5
- "jsRequired": false,
6
- "category": "overlay",
5
+ "jsRequired": true,
6
+ "category": "overlays",
7
7
  "description": "Dropdown(메뉴형)은 버튼, 아이콘, 아바타 등 트리거 요소를 통해 숨겨진 메뉴 또는 작업(Action) 목록을 레이어 형태로 노출하는 컴포넌트입니다.",
8
8
  "aliases": [
9
9
  "Dropdown",
@@ -28,7 +28,12 @@
28
28
  "hasChildren": true,
29
29
  "whenToUse": [
30
30
  "Dropdown은 값 선택이 아닌 액션 실행 컴포넌트입니다",
31
- "제한된 화면 공간에서 다수의 작업을 구조적으로 제공할 사용합니다"
31
+ "값을 선택하는 Selectbox와 달리, 메뉴 항목 선택 즉시 특정 기능이 실행됩니다",
32
+ "제한된 화면 공간에서 다수의 작업을 구조적으로 제공할 때 사용합니다",
33
+ "다수 액션 제공",
34
+ "사용자 계정 메뉴",
35
+ "관리/설정 메뉴",
36
+ "제한된 공간의 보조 액션"
32
37
  ],
33
38
  "forbiddenRules": [
34
39
  "메뉴명 말줄임 처리 금지",
@@ -44,6 +49,52 @@
44
49
  "icon",
45
50
  "icon-button"
46
51
  ],
52
+ "usageExamples": {
53
+ "buttonTrigger": {
54
+ "trigger": {
55
+ "type": "button",
56
+ "text": "메뉴"
57
+ },
58
+ "groups": [
59
+ {
60
+ "items": [
61
+ {
62
+ "id": "edit",
63
+ "text": "수정"
64
+ },
65
+ {
66
+ "id": "copy",
67
+ "text": "복사"
68
+ },
69
+ {
70
+ "id": "delete",
71
+ "text": "삭제",
72
+ "type": "danger"
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ },
78
+ "iconTrigger": {
79
+ "trigger": {
80
+ "type": "icon"
81
+ },
82
+ "groups": [
83
+ {
84
+ "items": [
85
+ {
86
+ "id": "setting",
87
+ "text": "설정"
88
+ },
89
+ {
90
+ "id": "logout",
91
+ "text": "로그아웃"
92
+ }
93
+ ]
94
+ }
95
+ ]
96
+ }
97
+ },
47
98
  "props": {
48
99
  "align": {
49
100
  "type": "enum",
@@ -51,47 +102,156 @@
51
102
  "values": [
52
103
  "left",
53
104
  "right"
54
- ],
55
- "default": "left"
105
+ ]
56
106
  },
57
107
  "className": {
58
108
  "type": "string",
59
109
  "required": false
60
110
  },
61
- "closeOnClickItem": {
62
- "type": "boolean",
63
- "required": false,
64
- "default": true
65
- },
66
111
  "closeOnClickOutside": {
67
112
  "type": "boolean",
68
- "required": false,
69
- "default": true
113
+ "required": false
70
114
  },
71
115
  "groups": {
72
- "type": "string",
116
+ "type": "object",
73
117
  "required": true,
74
- "rawType": "import(\"/Users/nhncommerce/Desktop/company/ai-driven-ncds/packages/ui-admin/src/components/dropdown/Dropdown\").DropdownGroup[]"
118
+ "rawType": "import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").DropdownGroup[]",
119
+ "properties": {
120
+ "items": {
121
+ "type": "object",
122
+ "required": true,
123
+ "rawType": "import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").DropdownItemType[]",
124
+ "properties": {
125
+ "id": {
126
+ "type": "string",
127
+ "required": true
128
+ },
129
+ "text": {
130
+ "type": "string",
131
+ "required": true
132
+ },
133
+ "icon": {
134
+ "type": "function",
135
+ "required": false,
136
+ "semantic": "icon-component"
137
+ },
138
+ "shortcut": {
139
+ "type": "string",
140
+ "required": false
141
+ },
142
+ "onClick": {
143
+ "type": "function",
144
+ "required": false
145
+ },
146
+ "disabled": {
147
+ "type": "boolean",
148
+ "required": false
149
+ },
150
+ "type": {
151
+ "type": "enum",
152
+ "required": false,
153
+ "values": [
154
+ "danger",
155
+ "default"
156
+ ]
157
+ },
158
+ "className": {
159
+ "type": "string",
160
+ "required": false
161
+ },
162
+ "visible": {
163
+ "type": "boolean",
164
+ "required": false
165
+ },
166
+ "required": {
167
+ "type": "boolean",
168
+ "required": false
169
+ }
170
+ }
171
+ },
172
+ "sortable": {
173
+ "type": "boolean",
174
+ "required": false
175
+ }
176
+ }
75
177
  },
76
178
  "header": {
77
179
  "type": "object",
78
- "required": false
180
+ "required": false,
181
+ "rawType": "import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").DropdownHeaderType | undefined",
182
+ "properties": {
183
+ "type": {
184
+ "type": "string",
185
+ "required": true,
186
+ "rawType": "\"avatar\""
187
+ },
188
+ "avatar": {
189
+ "type": "string",
190
+ "required": false
191
+ },
192
+ "title": {
193
+ "type": "string",
194
+ "required": true
195
+ },
196
+ "subtitle": {
197
+ "type": "string",
198
+ "required": false
199
+ }
200
+ }
79
201
  },
80
202
  "opened": {
81
203
  "type": "boolean",
82
- "required": false,
83
- "default": false
204
+ "required": false
84
205
  },
85
206
  "trigger": {
86
207
  "type": "object",
87
- "required": true
208
+ "required": true,
209
+ "rawType": "import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").AvatarTrigger | import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").ButtonTrigger | import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").IconTrigger | import(\"/home/runner/_work/ncds/ncds/packages/ui-admin/src/components/overlays/dropdown/Dropdown\").CustomTrigger",
210
+ "properties": {
211
+ "type": {
212
+ "type": "string",
213
+ "required": true,
214
+ "rawType": "\"avatar\""
215
+ },
216
+ "avatar": {
217
+ "type": "string",
218
+ "required": false
219
+ },
220
+ "text": {
221
+ "type": "string",
222
+ "required": false
223
+ },
224
+ "icon": {
225
+ "type": "function",
226
+ "required": false,
227
+ "semantic": "icon-component"
228
+ },
229
+ "children": {
230
+ "type": "ReactNode",
231
+ "required": false
232
+ }
233
+ }
234
+ },
235
+ "usePortal": {
236
+ "type": "boolean",
237
+ "required": false
238
+ },
239
+ "variant": {
240
+ "type": "enum",
241
+ "required": false,
242
+ "values": [
243
+ "action",
244
+ "config"
245
+ ]
88
246
  }
89
247
  },
90
248
  "html": {},
91
249
  "bemClasses": [
92
250
  "ncua-dropdown",
251
+ "ncua-dropdown-",
93
252
  "ncua-dropdown--right",
94
253
  "ncua-dropdown__avatar",
254
+ "ncua-dropdown__footer",
95
255
  "ncua-dropdown__group",
96
256
  "ncua-dropdown__header",
97
257
  "ncua-dropdown__header-avatar-group",
@@ -99,13 +259,18 @@
99
259
  "ncua-dropdown__header-text",
100
260
  "ncua-dropdown__header-title",
101
261
  "ncua-dropdown__item",
102
- "ncua-dropdown__item-clickable-layer",
262
+ "ncua-dropdown__item--config",
263
+ "ncua-dropdown__item--drag-preview",
103
264
  "ncua-dropdown__item-content",
265
+ "ncua-dropdown__item-drag-handle",
266
+ "ncua-dropdown__item-drop-indicator",
104
267
  "ncua-dropdown__item-icon",
105
268
  "ncua-dropdown__item-shortcut",
106
269
  "ncua-dropdown__item-text",
107
270
  "ncua-dropdown__item-text-group",
271
+ "ncua-dropdown__item-visibility",
108
272
  "ncua-dropdown__menu",
273
+ "ncua-dropdown__menu--portal",
109
274
  "ncua-dropdown__menu-items",
110
275
  "ncua-dropdown__trigger",
111
276
  "ncua-dropdown__trigger ncua-dropdown__trigger--avatar",
@@ -117,7 +282,9 @@
117
282
  "react": {
118
283
  "default": "<Dropdown groups=\"\" trigger=\"\" />",
119
284
  "align:left": "<Dropdown align=\"left\" groups=\"\" trigger=\"\" />",
120
- "align:right": "<Dropdown align=\"right\" groups=\"\" trigger=\"\" />"
285
+ "align:right": "<Dropdown align=\"right\" groups=\"\" trigger=\"\" />",
286
+ "variant:action": "<Dropdown variant=\"action\" groups=\"\" trigger=\"\" />",
287
+ "variant:config": "<Dropdown variant=\"config\" groups=\"\" trigger=\"\" />"
121
288
  }
122
289
  }
123
290
  }
@@ -0,0 +1,85 @@
1
+ {
2
+ "name": "editor",
3
+ "exportName": "NcdsEditor",
4
+ "importPath": "@ncds/editor-html",
5
+ "jsRequired": true,
6
+ "category": "form",
7
+ "description": "froala 기반 WYSIWYG 에디터. textarea 를 in-place 변환. 외부 패키지(@ncds/editor-html) — render_to_html 호출 시 외부 분기 모듈에서 응답 직접 조립.",
8
+ "aliases": [
9
+ "Editor",
10
+ "에디터",
11
+ "WYSIWYG",
12
+ "위지윅",
13
+ "Froala",
14
+ "GodoEditor",
15
+ "NcdsEditor",
16
+ "리치 텍스트",
17
+ "rich text",
18
+ "ncds-editor",
19
+ "editor-html"
20
+ ],
21
+ "hasChildren": false,
22
+ "whenToUse": [
23
+ "장문/리치 텍스트 입력이 필요한 경우 (게시글 본문·상품 설명·뉴스레터 작성 등)",
24
+ "이미지·표·링크 등 인라인 컨텐츠 삽입이 필요한 경우",
25
+ "한국어 폰트 다양성이 중요한 경우 (나눔고딕·바탕 등 9종 지원)"
26
+ ],
27
+ "forbiddenRules": [
28
+ "단순 한 줄 텍스트 입력에 사용 금지 (Input 컴포넌트 사용)",
29
+ "컴포넌트 자식(children)으로 직접 마크업 주입 금지 — setHTML(html) API 사용",
30
+ "동적 삽입(모달 안에 textarea 추가) 시 mcp 출력 그대로 사용 금지 — window.ncdsEditor.initAll() 수동 호출 필요 (현재 mcp 미지원, 후속 스토리)"
31
+ ],
32
+ "seeAlso": ["input", "textarea"],
33
+ "usageExamples": {
34
+ "default": {
35
+ "heightMin": 300,
36
+ "heightMax": 600,
37
+ "placeholderText": "내용을 입력하세요."
38
+ },
39
+ "resizable": {
40
+ "heightMin": 150,
41
+ "heightMax": 400,
42
+ "heightResize": true,
43
+ "placeholderText": "높이를 조정할 수 있습니다."
44
+ },
45
+ "withCustomImageUpload": {
46
+ "heightMin": 200,
47
+ "heightMax": 400,
48
+ "placeholderText": "이미지 업로드가 가능합니다.",
49
+ "imageUploadCallback": "customImageUploadHandler"
50
+ }
51
+ },
52
+ "props": {
53
+ "heightMin": {
54
+ "type": "number",
55
+ "required": false,
56
+ "default": 300
57
+ },
58
+ "heightMax": {
59
+ "type": "number",
60
+ "required": false,
61
+ "default": 600
62
+ },
63
+ "heightResize": {
64
+ "type": "boolean",
65
+ "required": false,
66
+ "default": false
67
+ },
68
+ "placeholderText": {
69
+ "type": "string",
70
+ "required": false,
71
+ "default": "내용을 입력하세요."
72
+ },
73
+ "imageUploadCallback": {
74
+ "type": "string",
75
+ "required": false,
76
+ "description": "전역 이미지 업로드 콜백 함수명. 마크업의 data-image-upload-callback 속성으로 직렬화."
77
+ }
78
+ },
79
+ "html": {},
80
+ "bemClasses": ["ncds-editor-container", "fr-toolbar", "fr-element", "fr-box", "fr-resize-handle"],
81
+ "usage": {
82
+ "import": "// CDN 로드 (npm import 미지원, vanilla JS only)\n<script src=\"https://fe-sdk.cdn-nhncommerce.com/@ncds/editor/0.0/ncds-editor.js\"></script>",
83
+ "react": {}
84
+ }
85
+ }