@ncds/ui-admin 1.6.3 → 1.6.4-alpha.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.
Files changed (260) hide show
  1. package/mcp/bin/server.d.ts +1 -0
  2. package/mcp/bin/server.js +62 -0
  3. package/mcp/bin/server.mjs +14 -0
  4. package/mcp/bin/tools/getComponentHtml.d.ts +3 -0
  5. package/mcp/bin/tools/getComponentHtml.js +30 -0
  6. package/mcp/bin/tools/getComponentProps.d.ts +3 -0
  7. package/mcp/bin/tools/getComponentProps.js +16 -0
  8. package/mcp/bin/tools/listComponents.d.ts +3 -0
  9. package/mcp/bin/tools/listComponents.js +15 -0
  10. package/mcp/bin/tools/searchComponent.d.ts +3 -0
  11. package/mcp/bin/tools/searchComponent.js +20 -0
  12. package/mcp/bin/tools/validateHtml.d.ts +10 -0
  13. package/mcp/bin/tools/validateHtml.js +142 -0
  14. package/mcp/bin/types.d.ts +28 -0
  15. package/mcp/bin/types.js +5 -0
  16. package/mcp/bin/utils/dataLoader.d.ts +11 -0
  17. package/mcp/bin/utils/dataLoader.js +68 -0
  18. package/mcp/bin/utils/logger.d.ts +18 -0
  19. package/mcp/bin/utils/logger.js +27 -0
  20. package/mcp/bin/utils/response.d.ts +23 -0
  21. package/mcp/bin/utils/response.js +31 -0
  22. package/mcp/bin/version.d.ts +1 -0
  23. package/mcp/bin/version.js +4 -0
  24. package/mcp/data/.gitkeep +0 -0
  25. package/mcp/data/_meta.json +7 -0
  26. package/mcp/data/badge-group.json +73 -0
  27. package/mcp/data/badge.json +86 -0
  28. package/mcp/data/bread-crumb.json +22 -0
  29. package/mcp/data/breadcrumb.json +31 -0
  30. package/mcp/data/button-group.json +65 -0
  31. package/mcp/data/button.json +114 -0
  32. package/mcp/data/carousel-arrow.json +59 -0
  33. package/mcp/data/carousel-number-group.json +57 -0
  34. package/mcp/data/carousel.json +22 -0
  35. package/mcp/data/checkbox.json +31 -0
  36. package/mcp/data/combobox.json +114 -0
  37. package/mcp/data/date-picker.json +77 -0
  38. package/mcp/data/divider.json +56 -0
  39. package/mcp/data/dot.json +55 -0
  40. package/mcp/data/dropdown.json +81 -0
  41. package/mcp/data/empty-state.json +34 -0
  42. package/mcp/data/featured-icon.json +83 -0
  43. package/mcp/data/file-input.json +76 -0
  44. package/mcp/data/horizontal-tab.json +71 -0
  45. package/mcp/data/image-file-input.json +97 -0
  46. package/mcp/data/input.json +104 -0
  47. package/mcp/data/modal.json +85 -0
  48. package/mcp/data/notification.json +116 -0
  49. package/mcp/data/number-input.json +128 -0
  50. package/mcp/data/pagination.json +65 -0
  51. package/mcp/data/password-input.json +47 -0
  52. package/mcp/data/progress-bar.json +51 -0
  53. package/mcp/data/progress-circle.json +54 -0
  54. package/mcp/data/radio.json +31 -0
  55. package/mcp/data/range-date-picker-with-buttons.json +64 -0
  56. package/mcp/data/range-date-picker.json +55 -0
  57. package/mcp/data/select-dropdown.json +32 -0
  58. package/mcp/data/select.json +64 -0
  59. package/mcp/data/selectbox.json +129 -0
  60. package/mcp/data/slider.json +57 -0
  61. package/mcp/data/spinner.json +54 -0
  62. package/mcp/data/switch.json +71 -0
  63. package/mcp/data/tab.json +122 -0
  64. package/mcp/data/tag.json +66 -0
  65. package/mcp/data/textarea.json +88 -0
  66. package/mcp/data/toggle.json +59 -0
  67. package/mcp/data/tooltip.json +123 -0
  68. package/mcp/data/vertical-tab.json +64 -0
  69. package/mcp/templates/.mcp.json.example +8 -0
  70. package/mcp/templates/README.md +31 -0
  71. package/package.json +24 -3
  72. package/dist/cjs/assets/scripts/comboBox.js +0 -280
  73. package/dist/cjs/assets/scripts/datePicker.js +0 -706
  74. package/dist/cjs/assets/scripts/featuredIcon.js +0 -95
  75. package/dist/cjs/assets/scripts/fileInput/FileInput.js +0 -183
  76. package/dist/cjs/assets/scripts/fileInput/FileInputModel.js +0 -246
  77. package/dist/cjs/assets/scripts/fileInput/FileInputView.js +0 -455
  78. package/dist/cjs/assets/scripts/fileInput/const/classNames.js +0 -35
  79. package/dist/cjs/assets/scripts/fileInput/const/index.js +0 -27
  80. package/dist/cjs/assets/scripts/fileInput/const/types.js +0 -13
  81. package/dist/cjs/assets/scripts/fileInput/index.js +0 -44
  82. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInput.js +0 -187
  83. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -255
  84. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputView.js +0 -354
  85. package/dist/cjs/assets/scripts/imageFileInput/const/classNames.js +0 -41
  86. package/dist/cjs/assets/scripts/imageFileInput/const/index.js +0 -27
  87. package/dist/cjs/assets/scripts/imageFileInput/const/types.js +0 -13
  88. package/dist/cjs/assets/scripts/imageFileInput/index.js +0 -44
  89. package/dist/cjs/assets/scripts/index.js +0 -30
  90. package/dist/cjs/assets/scripts/modal/Modal.js +0 -116
  91. package/dist/cjs/assets/scripts/modal/ModalActions.js +0 -128
  92. package/dist/cjs/assets/scripts/modal/ModalContent.js +0 -46
  93. package/dist/cjs/assets/scripts/modal/ModalHeader.js +0 -115
  94. package/dist/cjs/assets/scripts/modal/const/classNames.js +0 -41
  95. package/dist/cjs/assets/scripts/modal/const/index.js +0 -27
  96. package/dist/cjs/assets/scripts/modal/const/types.js +0 -5
  97. package/dist/cjs/assets/scripts/modal/index.js +0 -61
  98. package/dist/cjs/assets/scripts/modal/utils/contentUtils.js +0 -35
  99. package/dist/cjs/assets/scripts/notification/FloatingNotification.js +0 -180
  100. package/dist/cjs/assets/scripts/notification/FullWidthNotification.js +0 -120
  101. package/dist/cjs/assets/scripts/notification/MessageNotification.js +0 -146
  102. package/dist/cjs/assets/scripts/notification/Notification.js +0 -116
  103. package/dist/cjs/assets/scripts/notification/const/classNames.js +0 -50
  104. package/dist/cjs/assets/scripts/notification/const/icons.js +0 -45
  105. package/dist/cjs/assets/scripts/notification/const/index.js +0 -87
  106. package/dist/cjs/assets/scripts/notification/const/sizes.js +0 -54
  107. package/dist/cjs/assets/scripts/notification/const/types.js +0 -14
  108. package/dist/cjs/assets/scripts/notification/index.js +0 -92
  109. package/dist/cjs/assets/scripts/notification/utils.js +0 -92
  110. package/dist/cjs/assets/scripts/progress-bar/ProgressBar.js +0 -272
  111. package/dist/cjs/assets/scripts/progress-bar/index.js +0 -12
  112. package/dist/cjs/assets/scripts/selectBox.js +0 -319
  113. package/dist/cjs/assets/scripts/shared/ButtonCloseX.js +0 -46
  114. package/dist/cjs/assets/scripts/tab.js +0 -40
  115. package/dist/cjs/assets/scripts/tag/Tag.js +0 -268
  116. package/dist/cjs/assets/scripts/tag/const/classNames.js +0 -24
  117. package/dist/cjs/assets/scripts/tag/const/index.js +0 -38
  118. package/dist/cjs/assets/scripts/tag/const/sizes.js +0 -13
  119. package/dist/cjs/assets/scripts/tag/const/types.js +0 -5
  120. package/dist/cjs/assets/scripts/tag/index.js +0 -44
  121. package/dist/cjs/assets/scripts/tooltip/Tooltip.js +0 -380
  122. package/dist/cjs/assets/scripts/tooltip/TooltipLayerManager.js +0 -84
  123. package/dist/cjs/assets/scripts/tooltip/const/classNames.js +0 -29
  124. package/dist/cjs/assets/scripts/tooltip/const/constants.js +0 -56
  125. package/dist/cjs/assets/scripts/tooltip/const/icons.js +0 -15
  126. package/dist/cjs/assets/scripts/tooltip/const/index.js +0 -123
  127. package/dist/cjs/assets/scripts/tooltip/const/templates.js +0 -49
  128. package/dist/cjs/assets/scripts/tooltip/const/types.js +0 -5
  129. package/dist/cjs/assets/scripts/tooltip/index.js +0 -57
  130. package/dist/cjs/assets/scripts/tooltip/utils.js +0 -41
  131. package/dist/cjs/assets/scripts/utils/unifiedBox/DOMRenderer.js +0 -384
  132. package/dist/cjs/assets/scripts/utils/unifiedBox/DropdownModel.js +0 -368
  133. package/dist/cjs/assets/scripts/utils/unifiedBox/UnifiedBoxController.js +0 -681
  134. package/dist/cjs/assets/scripts/utils/unifiedBox/UnifiedBoxManager.js +0 -711
  135. package/dist/esm/assets/scripts/comboBox.js +0 -275
  136. package/dist/esm/assets/scripts/datePicker.js +0 -699
  137. package/dist/esm/assets/scripts/featuredIcon.js +0 -90
  138. package/dist/esm/assets/scripts/fileInput/FileInput.js +0 -178
  139. package/dist/esm/assets/scripts/fileInput/FileInputModel.js +0 -241
  140. package/dist/esm/assets/scripts/fileInput/FileInputView.js +0 -450
  141. package/dist/esm/assets/scripts/fileInput/const/classNames.js +0 -25
  142. package/dist/esm/assets/scripts/fileInput/const/index.js +0 -2
  143. package/dist/esm/assets/scripts/fileInput/const/types.js +0 -7
  144. package/dist/esm/assets/scripts/fileInput/index.js +0 -9
  145. package/dist/esm/assets/scripts/imageFileInput/ImageFileInput.js +0 -182
  146. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -250
  147. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputView.js +0 -349
  148. package/dist/esm/assets/scripts/imageFileInput/const/classNames.js +0 -30
  149. package/dist/esm/assets/scripts/imageFileInput/const/index.js +0 -2
  150. package/dist/esm/assets/scripts/imageFileInput/const/types.js +0 -7
  151. package/dist/esm/assets/scripts/imageFileInput/index.js +0 -9
  152. package/dist/esm/assets/scripts/index.js +0 -28
  153. package/dist/esm/assets/scripts/modal/Modal.js +0 -110
  154. package/dist/esm/assets/scripts/modal/ModalActions.js +0 -123
  155. package/dist/esm/assets/scripts/modal/ModalContent.js +0 -41
  156. package/dist/esm/assets/scripts/modal/ModalHeader.js +0 -110
  157. package/dist/esm/assets/scripts/modal/const/classNames.js +0 -31
  158. package/dist/esm/assets/scripts/modal/const/index.js +0 -2
  159. package/dist/esm/assets/scripts/modal/const/types.js +0 -1
  160. package/dist/esm/assets/scripts/modal/index.js +0 -15
  161. package/dist/esm/assets/scripts/modal/utils/contentUtils.js +0 -28
  162. package/dist/esm/assets/scripts/notification/FloatingNotification.js +0 -176
  163. package/dist/esm/assets/scripts/notification/FullWidthNotification.js +0 -115
  164. package/dist/esm/assets/scripts/notification/MessageNotification.js +0 -141
  165. package/dist/esm/assets/scripts/notification/Notification.js +0 -111
  166. package/dist/esm/assets/scripts/notification/const/classNames.js +0 -44
  167. package/dist/esm/assets/scripts/notification/const/icons.js +0 -39
  168. package/dist/esm/assets/scripts/notification/const/index.js +0 -4
  169. package/dist/esm/assets/scripts/notification/const/sizes.js +0 -48
  170. package/dist/esm/assets/scripts/notification/const/types.js +0 -8
  171. package/dist/esm/assets/scripts/notification/index.js +0 -11
  172. package/dist/esm/assets/scripts/notification/utils.js +0 -79
  173. package/dist/esm/assets/scripts/progress-bar/ProgressBar.js +0 -267
  174. package/dist/esm/assets/scripts/progress-bar/index.js +0 -1
  175. package/dist/esm/assets/scripts/selectBox.js +0 -314
  176. package/dist/esm/assets/scripts/shared/ButtonCloseX.js +0 -38
  177. package/dist/esm/assets/scripts/tab.js +0 -35
  178. package/dist/esm/assets/scripts/tag/Tag.js +0 -263
  179. package/dist/esm/assets/scripts/tag/const/classNames.js +0 -16
  180. package/dist/esm/assets/scripts/tag/const/index.js +0 -3
  181. package/dist/esm/assets/scripts/tag/const/sizes.js +0 -7
  182. package/dist/esm/assets/scripts/tag/const/types.js +0 -1
  183. package/dist/esm/assets/scripts/tag/index.js +0 -9
  184. package/dist/esm/assets/scripts/tooltip/Tooltip.js +0 -375
  185. package/dist/esm/assets/scripts/tooltip/TooltipLayerManager.js +0 -79
  186. package/dist/esm/assets/scripts/tooltip/const/classNames.js +0 -23
  187. package/dist/esm/assets/scripts/tooltip/const/constants.js +0 -50
  188. package/dist/esm/assets/scripts/tooltip/const/icons.js +0 -9
  189. package/dist/esm/assets/scripts/tooltip/const/index.js +0 -4
  190. package/dist/esm/assets/scripts/tooltip/const/templates.js +0 -42
  191. package/dist/esm/assets/scripts/tooltip/const/types.js +0 -1
  192. package/dist/esm/assets/scripts/tooltip/index.js +0 -10
  193. package/dist/esm/assets/scripts/tooltip/utils.js +0 -35
  194. package/dist/esm/assets/scripts/utils/unifiedBox/DOMRenderer.js +0 -379
  195. package/dist/esm/assets/scripts/utils/unifiedBox/DropdownModel.js +0 -363
  196. package/dist/esm/assets/scripts/utils/unifiedBox/UnifiedBoxController.js +0 -676
  197. package/dist/esm/assets/scripts/utils/unifiedBox/UnifiedBoxManager.js +0 -706
  198. package/dist/types/assets/scripts/comboBox.d.ts +0 -91
  199. package/dist/types/assets/scripts/datePicker.d.ts +0 -87
  200. package/dist/types/assets/scripts/featuredIcon.d.ts +0 -23
  201. package/dist/types/assets/scripts/fileInput/FileInput.d.ts +0 -67
  202. package/dist/types/assets/scripts/fileInput/FileInputModel.d.ts +0 -70
  203. package/dist/types/assets/scripts/fileInput/FileInputView.d.ts +0 -77
  204. package/dist/types/assets/scripts/fileInput/const/classNames.d.ts +0 -17
  205. package/dist/types/assets/scripts/fileInput/const/index.d.ts +0 -3
  206. package/dist/types/assets/scripts/fileInput/const/types.d.ts +0 -132
  207. package/dist/types/assets/scripts/fileInput/index.d.ts +0 -4
  208. package/dist/types/assets/scripts/imageFileInput/ImageFileInput.d.ts +0 -64
  209. package/dist/types/assets/scripts/imageFileInput/ImageFileInputModel.d.ts +0 -74
  210. package/dist/types/assets/scripts/imageFileInput/ImageFileInputView.d.ts +0 -80
  211. package/dist/types/assets/scripts/imageFileInput/const/classNames.d.ts +0 -20
  212. package/dist/types/assets/scripts/imageFileInput/const/index.d.ts +0 -3
  213. package/dist/types/assets/scripts/imageFileInput/const/types.d.ts +0 -126
  214. package/dist/types/assets/scripts/imageFileInput/index.d.ts +0 -4
  215. package/dist/types/assets/scripts/index.d.ts +0 -33
  216. package/dist/types/assets/scripts/modal/Modal.d.ts +0 -28
  217. package/dist/types/assets/scripts/modal/ModalActions.d.ts +0 -19
  218. package/dist/types/assets/scripts/modal/ModalContent.d.ts +0 -14
  219. package/dist/types/assets/scripts/modal/ModalHeader.d.ts +0 -16
  220. package/dist/types/assets/scripts/modal/const/classNames.d.ts +0 -23
  221. package/dist/types/assets/scripts/modal/const/index.d.ts +0 -3
  222. package/dist/types/assets/scripts/modal/const/types.d.ts +0 -62
  223. package/dist/types/assets/scripts/modal/index.d.ts +0 -8
  224. package/dist/types/assets/scripts/modal/utils/contentUtils.d.ts +0 -11
  225. package/dist/types/assets/scripts/notification/FloatingNotification.d.ts +0 -25
  226. package/dist/types/assets/scripts/notification/FullWidthNotification.d.ts +0 -22
  227. package/dist/types/assets/scripts/notification/MessageNotification.d.ts +0 -23
  228. package/dist/types/assets/scripts/notification/Notification.d.ts +0 -22
  229. package/dist/types/assets/scripts/notification/const/classNames.d.ts +0 -44
  230. package/dist/types/assets/scripts/notification/const/icons.d.ts +0 -26
  231. package/dist/types/assets/scripts/notification/const/index.d.ts +0 -6
  232. package/dist/types/assets/scripts/notification/const/sizes.d.ts +0 -33
  233. package/dist/types/assets/scripts/notification/const/types.d.ts +0 -20
  234. package/dist/types/assets/scripts/notification/index.d.ts +0 -8
  235. package/dist/types/assets/scripts/notification/utils.d.ts +0 -9
  236. package/dist/types/assets/scripts/progress-bar/ProgressBar.d.ts +0 -68
  237. package/dist/types/assets/scripts/progress-bar/index.d.ts +0 -2
  238. package/dist/types/assets/scripts/selectBox.d.ts +0 -77
  239. package/dist/types/assets/scripts/shared/ButtonCloseX.d.ts +0 -6
  240. package/dist/types/assets/scripts/tab.d.ts +0 -8
  241. package/dist/types/assets/scripts/tag/Tag.d.ts +0 -28
  242. package/dist/types/assets/scripts/tag/const/classNames.d.ts +0 -12
  243. package/dist/types/assets/scripts/tag/const/index.d.ts +0 -4
  244. package/dist/types/assets/scripts/tag/const/sizes.d.ts +0 -8
  245. package/dist/types/assets/scripts/tag/const/types.d.ts +0 -34
  246. package/dist/types/assets/scripts/tag/index.d.ts +0 -4
  247. package/dist/types/assets/scripts/tooltip/Tooltip.d.ts +0 -55
  248. package/dist/types/assets/scripts/tooltip/TooltipLayerManager.d.ts +0 -22
  249. package/dist/types/assets/scripts/tooltip/const/classNames.d.ts +0 -18
  250. package/dist/types/assets/scripts/tooltip/const/constants.d.ts +0 -34
  251. package/dist/types/assets/scripts/tooltip/const/icons.d.ts +0 -5
  252. package/dist/types/assets/scripts/tooltip/const/index.d.ts +0 -6
  253. package/dist/types/assets/scripts/tooltip/const/templates.d.ts +0 -17
  254. package/dist/types/assets/scripts/tooltip/const/types.d.ts +0 -15
  255. package/dist/types/assets/scripts/tooltip/index.d.ts +0 -7
  256. package/dist/types/assets/scripts/tooltip/utils.d.ts +0 -3
  257. package/dist/types/assets/scripts/utils/unifiedBox/DOMRenderer.d.ts +0 -108
  258. package/dist/types/assets/scripts/utils/unifiedBox/DropdownModel.d.ts +0 -158
  259. package/dist/types/assets/scripts/utils/unifiedBox/UnifiedBoxController.d.ts +0 -171
  260. package/dist/types/assets/scripts/utils/unifiedBox/UnifiedBoxManager.d.ts +0 -99
@@ -1,90 +0,0 @@
1
- var __assign = this && this.__assign || function () {
2
- __assign = Object.assign || function (t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6
- }
7
- return t;
8
- };
9
- return __assign.apply(this, arguments);
10
- };
11
- // React 컴포넌트와 동일하게 구성
12
- var iconSizeMap = {
13
- sm: 16,
14
- md: 20,
15
- lg: 24,
16
- xl: 28
17
- };
18
- var FeaturedIcon = /** @class */function () {
19
- function FeaturedIcon(options) {
20
- this.options = __assign({
21
- theme: 'light-circle',
22
- color: 'neutral',
23
- size: 'md',
24
- className: ''
25
- }, options);
26
- this.element = this.createElement();
27
- }
28
- // svgString ( ICON SVG ) 을 받아서 요소를 생성
29
- FeaturedIcon.prototype.createElement = function () {
30
- var _a = this.options,
31
- theme = _a.theme,
32
- color = _a.color,
33
- size = _a.size,
34
- className = _a.className,
35
- svgString = _a.svgString;
36
- // React FeaturedIcon과 동일한 클래스 구조
37
- var classes = ['ncua-featured-icon', "ncua-featured-icon--".concat(theme), "ncua-featured-icon--".concat(color), "ncua-featured-icon--".concat(size)];
38
- if (className) {
39
- classes.push(className);
40
- }
41
- var div = document.createElement('div');
42
- div.className = classes.join(' ');
43
- // outline-circle 테마일 때 추가 요소들 (React 컴포넌트와 동일)
44
- if (theme === 'outline-circle') {
45
- var innerOutline = document.createElement('div');
46
- innerOutline.className = 'ncua-featured-icon__outline ncua-featured-icon__outline--inner';
47
- div.appendChild(innerOutline);
48
- var outerOutline = document.createElement('div');
49
- outerOutline.className = 'ncua-featured-icon__outline ncua-featured-icon__outline--outer';
50
- div.appendChild(outerOutline);
51
- }
52
- // SVG 아이콘 추가
53
- var iconSize = iconSizeMap[size];
54
- var svgWithSize = this.addSizeToSvg(svgString, iconSize);
55
- div.innerHTML += svgWithSize;
56
- return div;
57
- };
58
- FeaturedIcon.prototype.addSizeToSvg = function (svgString, size) {
59
- return svgString.replace(/<svg([^>]*)>/, "<svg$1 width=\"".concat(size, "\" height=\"").concat(size, "\">"));
60
- };
61
- // Public methods
62
- FeaturedIcon.prototype.getElement = function () {
63
- return this.element;
64
- };
65
- FeaturedIcon.prototype.updateColor = function (color) {
66
- this.element.className = this.element.className.replace(/ncua-featured-icon--(neutral|error|warning|success)/, "ncua-featured-icon--".concat(color));
67
- this.options.color = color;
68
- };
69
- FeaturedIcon.prototype.updateSize = function (size) {
70
- var iconSize = iconSizeMap[size];
71
- this.element.className = this.element.className.replace(/ncua-featured-icon--(sm|md|lg|xl)/, "ncua-featured-icon--".concat(size));
72
- var svgIcon = this.element.querySelector('svg');
73
- if (svgIcon) {
74
- svgIcon.setAttribute('width', String(iconSize));
75
- svgIcon.setAttribute('height', String(iconSize));
76
- }
77
- this.options.size = size;
78
- };
79
- FeaturedIcon.prototype.destroy = function () {
80
- if (this.element.parentNode) {
81
- this.element.parentNode.removeChild(this.element);
82
- }
83
- };
84
- // Static factory method
85
- FeaturedIcon.create = function (options) {
86
- return new FeaturedIcon(options);
87
- };
88
- return FeaturedIcon;
89
- }();
90
- export { FeaturedIcon };
@@ -1,178 +0,0 @@
1
- import { FileInputModel } from './FileInputModel';
2
- import { FileInputView } from './FileInputView';
3
- var FileInput = /** @class */function () {
4
- function FileInput(options) {
5
- var _this = this;
6
- /**
7
- * 파일 선택 버튼 클릭 핸들러
8
- */
9
- this.handleBrowseClick = function () {
10
- if (!_this.model.isDisabled()) {
11
- _this.view.getFileInputElement().click();
12
- }
13
- };
14
- /**
15
- * 파일 변경 핸들러
16
- */
17
- this.handleFileChange = function (event) {
18
- var _a, _b, _c;
19
- var target = event.target;
20
- var selectedFiles = target.files;
21
- if (!selectedFiles || selectedFiles.length === 0) return;
22
- var _d = _this.model.validateFiles(Array.from(selectedFiles)),
23
- validFiles = _d.validFiles,
24
- invalidFiles = _d.invalidFiles;
25
- var options = _this.model.getOptions();
26
- // 유효한 파일에 대한 콜백 호출 (자동 추가/렌더링 없음)
27
- if (validFiles.length > 0) {
28
- // 콜백을 통해 선택된 파일 정보 전달
29
- if (_this.model.isControlled()) {
30
- (_a = options.onChange) === null || _a === void 0 ? void 0 : _a.call(options, validFiles);
31
- } else {
32
- (_b = options.onFileSelect) === null || _b === void 0 ? void 0 : _b.call(options, validFiles);
33
- }
34
- }
35
- // 유효하지 않은 파일 처리
36
- if (invalidFiles.length > 0) {
37
- (_c = options.onFail) === null || _c === void 0 ? void 0 : _c.call(options, invalidFiles);
38
- }
39
- // Reset input value to allow re-selecting the same file
40
- target.value = '';
41
- };
42
- /**
43
- * 파일 제거 핸들러
44
- * 주의: 이 메서드는 renderFileTags에서 사용되지만,
45
- * 파일 선택 시 자동 렌더링이 비활성화되어 있으므로 수동으로 호출해야 함
46
- */
47
- this.handleRemoveFile = function (index) {
48
- _this.model.removeFile(index);
49
- _this.notifyChange();
50
- };
51
- this.model = new FileInputModel(options);
52
- this.view = new FileInputView(this.model.getOptions(), this.model);
53
- this.setupEventListeners();
54
- // 파일 선택 시 자동 렌더링은 제거됨 - 사용자가 콜백에서 직접 처리
55
- // 컨테이너가 지정되면 자동으로 추가
56
- if (options.container) {
57
- this.appendToContainer(options.container);
58
- }
59
- }
60
- /**
61
- * 컨테이너에 요소 추가
62
- */
63
- FileInput.prototype.appendToContainer = function (container) {
64
- var containerElement = null;
65
- if (typeof container === 'string') {
66
- // ID로 찾기 (# 없이)
67
- containerElement = document.getElementById(container);
68
- // ID로 못 찾으면 CSS 셀렉터로 찾기
69
- if (!containerElement) {
70
- containerElement = document.querySelector(container);
71
- }
72
- } else {
73
- containerElement = container;
74
- }
75
- if (containerElement) {
76
- containerElement.appendChild(this.getElement());
77
- } else {
78
- console.warn("FileInput: Container not found:", container);
79
- }
80
- };
81
- /**
82
- * 이벤트 리스너 설정
83
- */
84
- FileInput.prototype.setupEventListeners = function () {
85
- var fileInput = this.view.getFileInputElement();
86
- var button = this.view.getButtonElement();
87
- // 파일 선택 이벤트
88
- fileInput.addEventListener('change', this.handleFileChange);
89
- // 버튼 클릭 이벤트
90
- button.addEventListener('click', this.handleBrowseClick);
91
- };
92
- /**
93
- * 변경 알림 (onChange/onFileSelect 호출)
94
- * 주의: 이 메서드는 setFiles 등 내부적으로 파일 목록이 변경될 때만 사용됨
95
- */
96
- FileInput.prototype.notifyChange = function () {
97
- var _a, _b;
98
- var options = this.model.getOptions();
99
- var files = this.model.getFiles();
100
- if (this.model.isControlled()) {
101
- // Controlled mode: onChange 호출
102
- (_a = options.onChange) === null || _a === void 0 ? void 0 : _a.call(options, files);
103
- } else {
104
- // Uncontrolled mode: onFileSelect 호출 및 렌더링
105
- (_b = options.onFileSelect) === null || _b === void 0 ? void 0 : _b.call(options, files);
106
- this.render();
107
- }
108
- };
109
- /**
110
- * 뷰 렌더링 (내부용)
111
- */
112
- FileInput.prototype.render = function () {
113
- var files = this.model.getFiles();
114
- this.view.renderFileTags(files, this.handleRemoveFile);
115
- };
116
- // Public API
117
- /**
118
- * 파일 태그를 수동으로 렌더링
119
- * 사용자가 콜백에서 직접 호출하여 태그를 렌더링할 수 있음
120
- */
121
- FileInput.prototype.renderFileTags = function () {
122
- this.render();
123
- };
124
- /**
125
- * DOM 요소 반환
126
- */
127
- FileInput.prototype.getElement = function () {
128
- return this.view.getElement();
129
- };
130
- /**
131
- * 현재 파일 목록 반환
132
- */
133
- FileInput.prototype.getFiles = function () {
134
- return this.model.getFiles();
135
- };
136
- /**
137
- * 초기 업로드된 파일 목록 설정
138
- */
139
- FileInput.prototype.setFiles = function (uploadedFiles) {
140
- var _a;
141
- this.model.setFiles(uploadedFiles);
142
- var options = this.model.getOptions();
143
- if (this.model.isControlled()) {
144
- var allFiles = this.model.getFiles();
145
- (_a = options.onChange) === null || _a === void 0 ? void 0 : _a.call(options, allFiles);
146
- } else {
147
- this.render();
148
- }
149
- };
150
- /**
151
- * 모든 파일 제거
152
- */
153
- FileInput.prototype.clearFiles = function () {
154
- this.model.clearFiles();
155
- this.notifyChange();
156
- };
157
- /**
158
- * disabled 상태 설정
159
- */
160
- FileInput.prototype.setDisabled = function (disabled) {
161
- this.model.setDisabled(disabled);
162
- this.view.setButtonDisabled(disabled);
163
- };
164
- /**
165
- * 리소스 정리
166
- */
167
- FileInput.prototype.destroy = function () {
168
- // 이벤트 리스너 제거
169
- var fileInput = this.view.getFileInputElement();
170
- var button = this.view.getButtonElement();
171
- fileInput.removeEventListener('change', this.handleFileChange);
172
- button.removeEventListener('click', this.handleBrowseClick);
173
- // View 리소스 정리
174
- this.view.destroy();
175
- };
176
- return FileInput;
177
- }();
178
- export { FileInput };
@@ -1,241 +0,0 @@
1
- var __assign = this && this.__assign || function () {
2
- __assign = Object.assign || function (t) {
3
- for (var s, i = 1, n = arguments.length; i < n; i++) {
4
- s = arguments[i];
5
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
6
- }
7
- return t;
8
- };
9
- return __assign.apply(this, arguments);
10
- };
11
- var __spreadArray = this && this.__spreadArray || function (to, from, pack) {
12
- if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
13
- if (ar || !(i in from)) {
14
- if (!ar) ar = Array.prototype.slice.call(from, 0, i);
15
- ar[i] = from[i];
16
- }
17
- }
18
- return to.concat(ar || Array.prototype.slice.call(from));
19
- };
20
- import { FileInputErrorType } from './const/types';
21
- var FileInputModel = /** @class */function () {
22
- function FileInputModel(options) {
23
- this.internalFiles = [];
24
- this.initialFiles = []; // 초기 파일 목록 (렌더링 시점의 파일)
25
- this.newlyAddedFiles = new Set(); // 새로 추가된 파일 추적
26
- this.deletedInitialFiles = new Set(); // 삭제 표시된 초기 파일들 (파일명으로 추적)
27
- this.options = __assign({
28
- size: 'xs',
29
- multiple: false,
30
- buttonLabel: '파일 찾기',
31
- disabled: false,
32
- showImagePreview: false
33
- }, options);
34
- // 초기 파일 설정
35
- if (this.options.value && this.options.value.length > 0) {
36
- this.internalFiles = __spreadArray([], this.options.value, true);
37
- // value로 들어온 File[]은 새로 추가된 파일로 처리 (initialFiles는 별도로 setFiles(UploadedFile[])로 설정)
38
- }
39
- }
40
- /**
41
- * 옵션 반환
42
- */
43
- FileInputModel.prototype.getOptions = function () {
44
- return this.options;
45
- };
46
- /**
47
- * 현재 파일 목록 반환 (초기 파일 + 새로 추가된 파일, 삭제 표시된 파일 제외)
48
- */
49
- FileInputModel.prototype.getFiles = function () {
50
- var _this = this;
51
- var newFiles = this.options.value !== undefined ? this.options.value : this.internalFiles;
52
- // UploadedFile을 File 객체로 변환 (삭제 표시되지 않은 것만)
53
- var initialFilesAsFiles = this.initialFiles.filter(function (uploadedFile) {
54
- return !_this.deletedInitialFiles.has(uploadedFile.fileName);
55
- }).map(function (uploadedFile) {
56
- // UploadedFile을 File 객체로 변환 (빈 데이터지만 이름과 타입 정보 유지)
57
- var mimeType = _this.getMimeTypeFromFileName(uploadedFile.fileName);
58
- return new File([], uploadedFile.fileName, {
59
- type: mimeType
60
- });
61
- });
62
- // 초기 파일 + 새로 추가된 파일 합치기
63
- return __spreadArray(__spreadArray([], initialFilesAsFiles, true), newFiles, true);
64
- };
65
- /**
66
- * 파일명에서 MIME 타입 추론
67
- */
68
- FileInputModel.prototype.getMimeTypeFromFileName = function (fileName) {
69
- var _a;
70
- var extension = (_a = fileName.split('.').pop()) === null || _a === void 0 ? void 0 : _a.toLowerCase();
71
- var mimeTypes = {
72
- jpg: 'image/jpeg',
73
- jpeg: 'image/jpeg',
74
- png: 'image/png',
75
- gif: 'image/gif',
76
- webp: 'image/webp',
77
- pdf: 'application/pdf',
78
- txt: 'text/plain',
79
- doc: 'application/msword',
80
- docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
81
- xls: 'application/vnd.ms-excel',
82
- xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
83
- };
84
- return mimeTypes[extension || ''] || 'application/octet-stream';
85
- };
86
- /**
87
- * 초기 업로드된 파일 목록 설정 (UploadedFile[] 타입만 허용)
88
- */
89
- FileInputModel.prototype.setFiles = function (uploadedFiles) {
90
- this.initialFiles = __spreadArray([], uploadedFiles, true);
91
- };
92
- /**
93
- * 파일 추가
94
- */
95
- FileInputModel.prototype.addFiles = function (files) {
96
- var _this = this;
97
- // getFiles()를 사용하지 않고 새로 추가된 파일만 관리
98
- var currentNewFiles = this.options.value !== undefined ? this.options.value : this.internalFiles;
99
- var newFiles = __spreadArray(__spreadArray([], currentNewFiles, true), files, true);
100
- // 새로 추가된 파일로 표시
101
- files.forEach(function (file) {
102
- return _this.newlyAddedFiles.add(file);
103
- });
104
- // addFiles에서는 initialFiles 로직을 건드리지 않고 직접 설정
105
- var isControlled = this.options.value !== undefined;
106
- if (isControlled) {
107
- this.options.value = newFiles;
108
- } else {
109
- this.internalFiles = newFiles;
110
- }
111
- };
112
- /**
113
- * 특정 인덱스의 파일 제거
114
- */
115
- FileInputModel.prototype.removeFile = function (index) {
116
- var visibleFiles = this.getFiles(); // 현재 보이는 파일들
117
- var fileToRemove = visibleFiles[index];
118
- if (!fileToRemove) return;
119
- // 초기 파일인지 확인
120
- var isInitialFile = this.isInitialFile(fileToRemove);
121
- if (isInitialFile) {
122
- // 초기 파일: 삭제 표시만 함 (실제 제거하지 않음)
123
- this.deletedInitialFiles.add(fileToRemove.name);
124
- } else {
125
- // 새로 추가된 파일: 실제 제거
126
- var currentFiles = this.options.value !== undefined ? this.options.value : this.internalFiles;
127
- var newFiles = currentFiles.filter(function (file) {
128
- return file !== fileToRemove;
129
- });
130
- // newlyAddedFiles Set에서도 제거
131
- this.newlyAddedFiles.delete(fileToRemove);
132
- var isControlled = this.options.value !== undefined;
133
- if (isControlled) {
134
- this.options.value = newFiles;
135
- } else {
136
- this.internalFiles = newFiles;
137
- }
138
- }
139
- };
140
- /**
141
- * 모든 파일 제거
142
- */
143
- FileInputModel.prototype.clearFiles = function () {
144
- var _this = this;
145
- // 초기 파일들은 모두 삭제 표시
146
- this.initialFiles.forEach(function (uploadedFile) {
147
- _this.deletedInitialFiles.add(uploadedFile.fileName);
148
- });
149
- this.newlyAddedFiles.clear();
150
- var isControlled = this.options.value !== undefined;
151
- if (isControlled) {
152
- this.options.value = [];
153
- } else {
154
- this.internalFiles = [];
155
- }
156
- };
157
- /**
158
- * 파일 유효성 검사
159
- */
160
- FileInputModel.prototype.validateFiles = function (fileList) {
161
- var validFiles = [];
162
- var invalidFiles = [];
163
- var currentFiles = this.getFiles();
164
- var _loop_1 = function (file) {
165
- // 중복 체크
166
- if (currentFiles.some(function (f) {
167
- return f.name === file.name && f.size === file.size;
168
- })) {
169
- invalidFiles.push(__assign(__assign({}, file), {
170
- errorType: FileInputErrorType.ALREADY_UPLOADED
171
- }));
172
- return "continue";
173
- }
174
- // 파일 크기 체크
175
- if (this_1.options.maxFileSize && file.size > this_1.options.maxFileSize) {
176
- invalidFiles.push(__assign(__assign({}, file), {
177
- errorType: FileInputErrorType.EXCEED_MAX_FILE_SIZE
178
- }));
179
- return "continue";
180
- }
181
- // 파일 개수 체크
182
- if (this_1.options.maxFileCount && currentFiles.length + validFiles.length >= this_1.options.maxFileCount) {
183
- invalidFiles.push(__assign(__assign({}, file), {
184
- errorType: FileInputErrorType.EXCEED_MAX_FILE_COUNT
185
- }));
186
- return "continue";
187
- }
188
- validFiles.push(file);
189
- };
190
- var this_1 = this;
191
- for (var _i = 0, fileList_1 = fileList; _i < fileList_1.length; _i++) {
192
- var file = fileList_1[_i];
193
- _loop_1(file);
194
- }
195
- return {
196
- validFiles: validFiles,
197
- invalidFiles: invalidFiles
198
- };
199
- };
200
- /**
201
- * disabled 상태 설정
202
- */
203
- FileInputModel.prototype.setDisabled = function (disabled) {
204
- this.options.disabled = disabled;
205
- };
206
- /**
207
- * disabled 상태 반환
208
- */
209
- FileInputModel.prototype.isDisabled = function () {
210
- return this.options.disabled;
211
- };
212
- /**
213
- * Controlled mode 여부 확인
214
- * onChange가 있으면 Controlled mode로 판단
215
- */
216
- FileInputModel.prototype.isControlled = function () {
217
- return this.options.onChange !== undefined;
218
- };
219
- /**
220
- * 파일이 초기 파일인지 확인 (UploadedFile로 설정된 기존 파일)
221
- */
222
- FileInputModel.prototype.isInitialFile = function (file) {
223
- return this.initialFiles.some(function (uploadedFile) {
224
- return uploadedFile.fileName === file.name;
225
- });
226
- };
227
- /**
228
- * 파일이 새로 추가된 파일인지 확인
229
- */
230
- FileInputModel.prototype.isNewlyAddedFile = function (file) {
231
- return this.newlyAddedFiles.has(file);
232
- };
233
- /**
234
- * 파일이 삭제 표시된 초기 파일인지 확인
235
- */
236
- FileInputModel.prototype.isDeletedInitialFile = function (file) {
237
- return this.deletedInitialFiles.has(file.name);
238
- };
239
- return FileInputModel;
240
- }();
241
- export { FileInputModel };