@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,79 +0,0 @@
1
- import { CLASS_NAMES, Z_INDEX } from './const';
2
- /**
3
- * 툴팁 레이어 관리자
4
- * 전역 레이어 하나를 사용하여 모든 툴팁 패널을 관리합니다.
5
- */
6
- var TooltipLayerManager = /** @class */function () {
7
- function TooltipLayerManager() {
8
- this.layer = null;
9
- this.panels = new Map();
10
- this.nextId = 0;
11
- this.maxZIndex = Z_INDEX.TOOLTIP_LAYER; // 기본 z-index (가장 높은 값 추적)
12
- this.createGlobalLayer();
13
- }
14
- TooltipLayerManager.getInstance = function () {
15
- if (!this.instance) {
16
- this.instance = new TooltipLayerManager();
17
- }
18
- return this.instance;
19
- };
20
- TooltipLayerManager.prototype.createGlobalLayer = function () {
21
- // 기존 레이어가 있으면 제거
22
- var existingLayer = document.getElementById('tooltip-global-layer');
23
- if (existingLayer) {
24
- existingLayer.remove();
25
- }
26
- this.layer = document.createElement('div');
27
- this.layer.id = 'tooltip-global-layer';
28
- this.layer.className = CLASS_NAMES.TOOLTIP_GLOBAL_LAYER;
29
- this.layer.style.zIndex = String(this.maxZIndex);
30
- document.body.appendChild(this.layer);
31
- };
32
- TooltipLayerManager.prototype.createPanel = function (zIndex) {
33
- if (zIndex === void 0) {
34
- zIndex = Z_INDEX.TOOLTIP_LAYER;
35
- }
36
- if (!this.layer) {
37
- this.createGlobalLayer();
38
- }
39
- // 최대 z-index 추적 및 전역 레이어 업데이트
40
- // 왜 이런 구현이 필요한지..? 툴팁 레이어 매니저는 바디에 무분별하게 붙는걸 방지하기 위해 하나의 전역 레이아웃입니다. 툴팁 20개씩 붙는 페이지를 위함
41
- // 전역 레이어의 z-index는 자식과 일치되면 가장 좋지만, 수시로 변하는 z-index를 추적하는 것이 디버깅측면에서 좋지않고 버그를 유발할 가능성이 높아보여
42
- // 툴팁은 보통은 고정된값을 사용하기에, 변동이 없다고 가정하고, 변동되는 경우에만 가장 높은 z-index를 추적하고 업데이트하는 구현을 하였습니다.
43
- if (zIndex > this.maxZIndex) {
44
- this.maxZIndex = zIndex;
45
- if (this.layer) {
46
- this.layer.style.zIndex = String(this.maxZIndex);
47
- }
48
- }
49
- var id = "tooltip-panel-".concat(++this.nextId);
50
- var panel = document.createElement('span');
51
- panel.id = id;
52
- panel.className = CLASS_NAMES.TOOLTIP_PANEL;
53
- this.panels.set(id, panel);
54
- this.layer.appendChild(panel);
55
- return {
56
- id: id,
57
- panel: panel
58
- };
59
- };
60
- TooltipLayerManager.prototype.removePanel = function (id) {
61
- var panel = this.panels.get(id);
62
- if (panel && panel.parentNode) {
63
- panel.parentNode.removeChild(panel);
64
- this.panels.delete(id);
65
- }
66
- };
67
- TooltipLayerManager.prototype.getPanel = function (id) {
68
- return this.panels.get(id) || null;
69
- };
70
- TooltipLayerManager.prototype.destroy = function () {
71
- this.panels.clear();
72
- if (this.layer && this.layer.parentNode) {
73
- this.layer.parentNode.removeChild(this.layer);
74
- }
75
- this.layer = null;
76
- };
77
- return TooltipLayerManager;
78
- }();
79
- export { TooltipLayerManager };
@@ -1,23 +0,0 @@
1
- // Tooltip CSS 클래스명 상수들
2
- export var CLASS_NAMES = {
3
- // 기본 클래스
4
- TOOLTIP: 'ncua-tooltip',
5
- TOOLTIP_ICON: 'ncua-tooltip__icon',
6
- TOOLTIP_BG: 'ncua-tooltip__bg',
7
- TOOLTIP_TITLE: 'ncua-tooltip__title',
8
- TOOLTIP_CONTENT: 'ncua-tooltip__content',
9
- TOOLTIP_CLOSE_BUTTON: 'ncua-tooltip__close-button',
10
- // 수정자 클래스 (modifier classes)
11
- TOOLTIP_HIDDEN_ARROW: 'ncua-tooltip--hidden-arrow',
12
- TOOLTIP_STROKE: 'ncua-tooltip--stroke',
13
- TOOLTIP_AUTO: 'ncua-tooltip--auto',
14
- // 배경 상태 클래스
15
- TOOLTIP_BG_VISIBLE: 'ncua-tooltip__bg--visible',
16
- TOOLTIP_BG_MEASURING: 'ncua-tooltip__bg--measuring',
17
- TOOLTIP_BG_FORCE_HIDDEN: 'ncua-tooltip__bg--force-hidden',
18
- // 레이어 관련 클래스
19
- TOOLTIP_GLOBAL_LAYER: 'ncua-tooltip-global-layer',
20
- TOOLTIP_PANEL: 'ncua-tooltip-panel',
21
- // 버튼 클래스
22
- BUTTON_CLOSE_X: 'ncua-button-close-x'
23
- };
@@ -1,50 +0,0 @@
1
- export var MARGIN = 10;
2
- export var DEFAULT_TOOLTIP_WIDTH = 200;
3
- export var DEFAULT_TOOLTIP_HEIGHT = 60;
4
- export var POSITION_PRIORITY = ['bottom', 'top', 'right', 'left'];
5
- // 툴팁 위치 계산 관련 상수
6
- export var TOOLTIP_OFFSET = 8; // 툴팁과 앵커 사이의 거리
7
- export var VIEWPORT_MARGIN = 8; // 뷰포트 경계와의 최소 거리
8
- // 아이콘 크기 상수
9
- export var ICON_SIZES = {
10
- sm: 14,
11
- md: 16
12
- };
13
- // 애니메이션 관련 상수
14
- export var TRANSITION_DURATION = '0.18s';
15
- export var OFFSCREEN_POSITION = '-99999px';
16
- // 툴팁 상태 관련 상수
17
- export var OPACITY = {
18
- HIDDEN: '0',
19
- VISIBLE: '1'
20
- };
21
- export var POSITION = {
22
- INITIAL: '0px',
23
- OFFSCREEN: OFFSCREEN_POSITION
24
- };
25
- // z-index 관련 상수
26
- export var Z_INDEX = {
27
- TOOLTIP_LAYER: 2000 // 툴팁 전역 레이어 기본 z-index
28
- };
29
- // 이벤트 관련 상수
30
- export var EVENT_OPTIONS = {
31
- PASSIVE: {
32
- passive: true
33
- },
34
- ONCE: {
35
- once: true
36
- }
37
- };
38
- export var TOOLTIP_DEFAULT_VALUE = {
39
- tooltipType: 'white',
40
- iconType: 'stroke',
41
- position: 'auto',
42
- size: 'sm',
43
- hideArrow: false,
44
- title: '',
45
- content: '',
46
- type: 'short',
47
- zIndex: Z_INDEX.TOOLTIP_LAYER,
48
- useShadowDOM: false,
49
- className: '' // 커스텀 클래스명
50
- };
@@ -1,9 +0,0 @@
1
- // SVG 아이콘들
2
- export var SVG_ICONS = {
3
- 'help-circle-stroke': function (size) {
4
- return "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"".concat(size, "\" height=\"").concat(size, "\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"none\">\n <path stroke=\"currentColor\" stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3m.08 4h.01M22 12c0 5.523-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2s10 4.477 10 10\"></path>\n </svg>");
5
- },
6
- 'help-circle-fill': function (size) {
7
- return "<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"".concat(size, "\" height=\"").concat(size, "\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"none\">\n <path fill=\"currentColor\" fill-rule=\"evenodd\" d=\"M12 1C5.925 1 1 5.925 1 12s4.925 11 11 11 11-4.925 11-11S18.075 1 12 1m-1.093 7.271a2 2 0 0 1 3.013 1.727V10c0 .47-.365.958-1.055 1.418a6 6 0 0 1-1.262.634 1 1 0 0 0 .633 1.897l.169-.061a8.05 8.05 0 0 0 1.57-.806c.81-.54 1.944-1.55 1.945-3.081a4 4 0 0 0-7.773-1.333 1 1 0 0 0 1.886.664 2 2 0 0 1 .874-1.06M12 16a1 1 0 1 0 0 2h.01a1 1 0 0 0 0-2z\" clip-rule=\"evenodd\"></path>\n </svg>");
8
- }
9
- };
@@ -1,4 +0,0 @@
1
- export { SVG_ICONS } from './icons';
2
- export { CLASS_NAMES } from './classNames';
3
- export { MARGIN, DEFAULT_TOOLTIP_WIDTH, DEFAULT_TOOLTIP_HEIGHT, POSITION_PRIORITY, TOOLTIP_DEFAULT_VALUE, TOOLTIP_OFFSET, VIEWPORT_MARGIN, ICON_SIZES, TRANSITION_DURATION, OFFSCREEN_POSITION, OPACITY, POSITION, Z_INDEX, EVENT_OPTIONS } from './constants';
4
- export { CSS_TEMPLATES, HTML_TEMPLATES, FALLBACK_ICON_SVG } from './templates';
@@ -1,42 +0,0 @@
1
- import { OFFSCREEN_POSITION, TRANSITION_DURATION } from './constants';
2
- /**
3
- * 툴팁 관련 CSS 및 HTML 템플릿
4
- */
5
- // CSS 템플릿
6
- export var CSS_TEMPLATES = {
7
- // 레이어 컨테이너 스타일 (클릭 통과)
8
- LAYER_CONTAINER: function (zIndex) {
9
- return "\n position: fixed;\n inset: 0;\n pointer-events: none;\n z-index: ".concat(zIndex, ";\n display: block;\n ");
10
- },
11
- // 툴팁 패널 스타일 (클릭 허용)
12
- TOOLTIP_PANEL: function (zIndex) {
13
- return "\n position: fixed;\n left: ".concat(OFFSCREEN_POSITION, "; \n top: ").concat(OFFSCREEN_POSITION, ";\n opacity: 0;\n transition: opacity ").concat(TRANSITION_DURATION, " ease;\n pointer-events: auto;\n z-index: ").concat(zIndex, ";\n right: auto;\n bottom: auto;\n transform: none;\n ");
14
- },
15
- // 앵커 래퍼 스타일
16
- ANCHOR_WRAPPER: "\n display: inline-flex;\n vertical-align: middle;\n margin: 0 4px;\n ",
17
- // Shadow DOM 기본 스타일
18
- SHADOW_DOM_HOST: "\n :host { \n all: unset; \n display: block; \n font-family: system-ui; \n color: black; \n }\n "
19
- };
20
- // HTML 템플릿
21
- export var HTML_TEMPLATES = {
22
- // 아이콘 래퍼
23
- ICON_WRAPPER: function (className, iconSvg) {
24
- return "<span class=\"".concat(className, "\">").concat(iconSvg, "</span>");
25
- },
26
- // 툴팁 제목
27
- TOOLTIP_TITLE: function (className, title) {
28
- return "<span class=\"".concat(className, "\">").concat(title, "</span>");
29
- },
30
- // 툴팁 콘텐츠 (일반)
31
- TOOLTIP_CONTENT: function (className, content) {
32
- return "<span class=\"".concat(className, "\">").concat(content, "</span>");
33
- },
34
- // 툴팁 콘텐츠 (Shadow DOM)
35
- TOOLTIP_CONTENT_SHADOW: function (className) {
36
- return "<span class=\"".concat(className, "\" data-shadow-content></span>");
37
- }
38
- };
39
- // 폴백 아이콘 SVG
40
- export var FALLBACK_ICON_SVG = function (size) {
41
- return "<svg width=\"".concat(size, "\" height=\"").concat(size, "\" viewBox=\"0 0 16 16\" aria-hidden=\"true\">\n <circle cx=\"8\" cy=\"8\" r=\"7\" stroke=\"currentColor\" fill=\"none\"/>\n <text x=\"8\" y=\"11\" font-size=\"8\" text-anchor=\"middle\" fill=\"currentColor\">?</text>\n </svg>");
42
- };
@@ -1 +0,0 @@
1
- export {};
@@ -1,10 +0,0 @@
1
- import { Tooltip } from './Tooltip';
2
- export { Tooltip } from './Tooltip';
3
- export { calculateOptimalPosition } from './utils';
4
- export { SVG_ICONS, MARGIN, DEFAULT_TOOLTIP_WIDTH, DEFAULT_TOOLTIP_HEIGHT, POSITION_PRIORITY } from './const';
5
- // 전역 등록 ( 추후 index.ts와 개별동작 할 수 있게끔 대비 )
6
- if (typeof window !== 'undefined') {
7
- window.ncua = window.ncua || {};
8
- window.ncua.Tooltip = Tooltip;
9
- }
10
- export default Tooltip;
@@ -1,35 +0,0 @@
1
- import { MARGIN, DEFAULT_TOOLTIP_WIDTH, DEFAULT_TOOLTIP_HEIGHT, POSITION_PRIORITY } from './const';
2
- export function calculateOptimalPosition(triggerElement, tooltipElement, preferredPosition) {
3
- if (preferredPosition === void 0) {
4
- preferredPosition = 'bottom';
5
- }
6
- var triggerRect = triggerElement.getBoundingClientRect();
7
- var tooltipRect = tooltipElement.getBoundingClientRect();
8
- var viewportWidth = window.innerWidth,
9
- viewportHeight = window.innerHeight;
10
- var spaces = {
11
- top: triggerRect.top,
12
- bottom: viewportHeight - triggerRect.bottom,
13
- left: triggerRect.left,
14
- right: viewportWidth - triggerRect.right
15
- };
16
- var tooltipWidth = tooltipRect.width || DEFAULT_TOOLTIP_WIDTH;
17
- var tooltipHeight = tooltipRect.height || DEFAULT_TOOLTIP_HEIGHT;
18
- for (var _i = 0, POSITION_PRIORITY_1 = POSITION_PRIORITY; _i < POSITION_PRIORITY_1.length; _i++) {
19
- var position = POSITION_PRIORITY_1[_i];
20
- var hasSpace = position === 'bottom' || position === 'top' ? spaces[position] >= tooltipHeight + MARGIN : spaces[position] >= tooltipWidth + MARGIN;
21
- if (hasSpace) {
22
- if (position === 'bottom' || position === 'top') {
23
- var centerX = triggerRect.left + triggerRect.width / 2;
24
- var tooltipHalfWidth = tooltipWidth / 2;
25
- if (centerX - tooltipHalfWidth < MARGIN) {
26
- return "".concat(position, "-left");
27
- } else if (centerX + tooltipHalfWidth > viewportWidth - MARGIN) {
28
- return "".concat(position, "-right");
29
- }
30
- }
31
- return position;
32
- }
33
- }
34
- return preferredPosition;
35
- }
@@ -1,379 +0,0 @@
1
- var DOMRenderer = /** @class */function () {
2
- function DOMRenderer() {
3
- this.optionElementCache = new Map();
4
- }
5
- /**
6
- * 드롭다운 컨테이너 생성 (구조만)
7
- */
8
- DOMRenderer.prototype.createDropdownStructure = function (config) {
9
- var dropdown = document.createElement('div');
10
- dropdown.className = "ncua-select-dropdown ncua-select-dropdown--down ncua-select-dropdown--".concat(config.size);
11
- dropdown.style.display = 'none';
12
- var content = document.createElement('div');
13
- content.className = 'ncua-select-dropdown__content';
14
- var optionsList = document.createElement('ul');
15
- optionsList.className = 'ncua-select-dropdown__options';
16
- optionsList.setAttribute('role', 'listbox');
17
- optionsList.setAttribute('id', config.listboxId);
18
- optionsList.style.maxHeight = "".concat(config.maxHeight, "px");
19
- optionsList.style.overflowY = 'auto'; // 스크롤 활성화
20
- content.appendChild(optionsList);
21
- dropdown.appendChild(content);
22
- return {
23
- dropdown: dropdown,
24
- content: content,
25
- optionsList: optionsList
26
- };
27
- };
28
- /**
29
- * 단일 옵션 엘리먼트 생성 (재사용 가능)
30
- */
31
- DOMRenderer.prototype.createOptionElement = function (option, index, config) {
32
- var cached = this.optionElementCache.get(option.id);
33
- if (cached) {
34
- this.updateOptionElement(cached, option, index, config);
35
- return cached;
36
- }
37
- var element = document.createElement('li');
38
- element.className = 'ncua-select-dropdown__option';
39
- element.setAttribute('data-value', String(option.id));
40
- element.setAttribute('data-index', String(index));
41
- element.setAttribute('role', 'option');
42
- element.id = "".concat(config.listboxId, "-").concat(option.id);
43
- var span = document.createElement('span');
44
- span.className = 'ncua-select-dropdown__option-text';
45
- span.textContent = option.label;
46
- element.appendChild(span);
47
- this.updateOptionElement(element, option, index, config);
48
- this.optionElementCache.set(option.id, element);
49
- return element;
50
- };
51
- /**
52
- * 옵션 엘리먼트 상태 업데이트 (DOM 조작 최소화)
53
- */
54
- DOMRenderer.prototype.updateOptionElement = function (element, option, index, config) {
55
- // 클래스 업데이트 (필요한 경우에만)
56
- var shouldHaveSelected = option.selected || false;
57
- var shouldHaveFocused = option.focused || false;
58
- var shouldHaveDisabled = option.disabled || false;
59
- this.toggleClass(element, 'ncua-select-dropdown__option--selected', shouldHaveSelected);
60
- this.toggleClass(element, 'ncua-select-dropdown__option--focused', shouldHaveFocused);
61
- this.toggleClass(element, 'ncua-select-dropdown__option--disabled', shouldHaveDisabled);
62
- // 속성 업데이트 (필요한 경우에만)
63
- element.setAttribute('aria-selected', String(shouldHaveSelected));
64
- element.setAttribute('data-index', String(index));
65
- };
66
- /**
67
- * "결과 없음" 엘리먼트 생성
68
- */
69
- DOMRenderer.prototype.createNoResultsElement = function (text) {
70
- if (text === void 0) {
71
- text = '일치하는 결과가 없습니다.';
72
- }
73
- var noResults = document.createElement('li');
74
- noResults.className = 'ncua-select-dropdown__no-results';
75
- noResults.textContent = text;
76
- return noResults;
77
- };
78
- /**
79
- * 옵션 리스트 효율적 업데이트 (Differential Rendering)
80
- */
81
- DOMRenderer.prototype.updateOptionsList = function (container, newOptions, config, showNoResults) {
82
- var _this = this;
83
- if (showNoResults === void 0) {
84
- showNoResults = false;
85
- }
86
- // 스크롤 위치 저장
87
- var scrollTop = container.scrollTop;
88
- // 결과 없음 처리
89
- if (showNoResults) {
90
- container.innerHTML = '';
91
- container.appendChild(this.createNoResultsElement(config.noResultsText));
92
- return [];
93
- }
94
- var newElements = [];
95
- // 새 옵션들로 엘리먼트 생성/업데이트
96
- newOptions.forEach(function (option, index) {
97
- var element = _this.createOptionElement(option, index, config);
98
- newElements.push(element);
99
- });
100
- // DOM 업데이트 최소화 - 변경된 부분만 업데이트
101
- this.updateContainerChildren(container, newElements);
102
- // 스크롤 위치 복원 (다음 프레임에서 실행)
103
- requestAnimationFrame(function () {
104
- container.scrollTop = scrollTop;
105
- });
106
- return newElements;
107
- };
108
- /**
109
- * 컨테이너 자식 엘리먼트 효율적 업데이트
110
- */
111
- DOMRenderer.prototype.updateContainerChildren = function (container, newChildren) {
112
- // 기존 엘리먼트 제거 (새 리스트에 없는 것들)
113
- Array.from(container.children).forEach(function (child) {
114
- if (!newChildren.includes(child)) {
115
- child.remove();
116
- }
117
- });
118
- // 새 엘리먼트 추가 (순서 유지)
119
- newChildren.forEach(function (child, index) {
120
- var currentChild = container.children[index];
121
- if (currentChild !== child) {
122
- if (currentChild) {
123
- container.insertBefore(child, currentChild);
124
- } else {
125
- container.appendChild(child);
126
- }
127
- }
128
- });
129
- };
130
- /**
131
- * 클래스 토글 (변경이 필요한 경우에만)
132
- */
133
- DOMRenderer.prototype.toggleClass = function (element, className, shouldHave) {
134
- var hasClass = element.classList.contains(className);
135
- if (shouldHave && !hasClass) {
136
- element.classList.add(className);
137
- } else if (!shouldHave && hasClass) {
138
- element.classList.remove(className);
139
- }
140
- };
141
- /**
142
- * 입력 필드 생성 (InputFieldUtils에서 이동)
143
- */
144
- DOMRenderer.prototype.createInputField = function (config) {
145
- var actualSize = config.size === 'md' ? 'sm' : config.size || 'sm';
146
- // 최상위 ncua-input 컨테이너 (React 버전과 동일)
147
- var inputContainer = document.createElement('div');
148
- inputContainer.className = "ncua-input ncua-input--".concat(actualSize);
149
- if (config.disabled) inputContainer.classList.add('is-disabled');
150
- // ncua-input__content 래퍼 (React 버전과 동일)
151
- var inputContent = document.createElement('div');
152
- inputContent.className = 'ncua-input__content';
153
- // ncua-input__field 래퍼 (React 버전과 동일, size 포함)
154
- var inputField = document.createElement('div');
155
- inputField.className = "ncua-input__field ncua-input__field--".concat(actualSize);
156
- // 실제 입력 필드 (React 버전과 동일)
157
- var input = document.createElement('input');
158
- input.type = 'text';
159
- input.placeholder = config.placeholder || '';
160
- if (config.disabled) input.disabled = true;
161
- // 이벤트 리스너
162
- if (config.onInput) {
163
- input.addEventListener('input', function (e) {
164
- config.onInput(e.target.value);
165
- });
166
- }
167
- if (config.onClick) {
168
- input.addEventListener('click', function (event) {
169
- event.stopPropagation(); // 이벤트 버블링 방지
170
- config.onClick();
171
- });
172
- }
173
- // 클리어 버튼 (React 버전의 renderClearButton과 동일)
174
- var clearButton = null;
175
- if (config.onClear) {
176
- clearButton = document.createElement('button');
177
- clearButton.type = 'button';
178
- clearButton.className = 'ncua-input__icon-wrap ncua-input__right-icon ncua-input__clear';
179
- clearButton.style.display = 'none'; // 초기에는 숨김
180
- clearButton.addEventListener('click', config.onClear);
181
- // 클리어 아이콘 (React와 동일한 크기)
182
- var iconSize = actualSize === 'xs' ? 14 : 16;
183
- var clearIcon = DOMRenderer.createSvgIcon('close', iconSize);
184
- clearIcon.setAttribute('class', 'ncua-input__clear-icon');
185
- clearButton.appendChild(clearIcon);
186
- // 입력값 변경 시 클리어 버튼 표시/숨김
187
- input.addEventListener('input', function () {
188
- if (clearButton) {
189
- clearButton.style.display = input.value ? 'flex' : 'none';
190
- }
191
- });
192
- }
193
- // 전체 보기 버튼 (React 버전의 trailingElement와 동일)
194
- var showAllButton = null;
195
- if (config.onShowAll) {
196
- showAllButton = document.createElement('div');
197
- showAllButton.className = 'ncua-input__icon-wrap ncua-input__right-icon';
198
- showAllButton.addEventListener('click', config.onShowAll);
199
- // 전체 버튼 (React Button 컴포넌트와 유사한 구조)
200
- var button = document.createElement('button');
201
- button.type = 'button';
202
- button.className = 'ncua-btn ncua-btn--xxs ncua-btn--text';
203
- // 아이콘
204
- var iconSize = 14;
205
- var showAllIcon = DOMRenderer.createSvgIcon('chevron-selector-vertical', iconSize);
206
- button.appendChild(showAllIcon);
207
- // 텍스트
208
- var label = document.createElement('span');
209
- label.className = 'ncua-btn__label';
210
- label.textContent = '전체';
211
- button.appendChild(label);
212
- showAllButton.appendChild(button);
213
- }
214
- // 검색 아이콘 (React 버전의 leadingElement와 동일)
215
- var searchIcon = null;
216
- if (config.showSearchIcon) {
217
- searchIcon = document.createElement('div');
218
- searchIcon.className = 'ncua-input__icon-wrap ncua-input__left-icon';
219
- // 검색 아이콘 (React와 동일한 크기와 색상)
220
- var searchSvg = DOMRenderer.createSvgIcon('search', 14);
221
- searchSvg.style.color = '#98a2b3'; // gray300에 해당하는 색상
222
- searchIcon.appendChild(searchSvg);
223
- }
224
- // 구조 조립 (React 버전과 동일한 순서)
225
- if (searchIcon) inputField.appendChild(searchIcon);
226
- inputField.appendChild(input);
227
- if (clearButton) inputField.appendChild(clearButton);
228
- if (showAllButton) inputField.appendChild(showAllButton);
229
- inputContent.appendChild(inputField);
230
- inputContainer.appendChild(inputContent);
231
- return {
232
- container: inputContainer,
233
- input: input,
234
- setValue: function (value) {
235
- input.value = value;
236
- // 클리어 버튼 표시 상태 업데이트
237
- if (clearButton) {
238
- clearButton.style.display = value ? 'flex' : 'none';
239
- }
240
- },
241
- focus: function () {
242
- return input.focus();
243
- },
244
- blur: function () {
245
- return input.blur();
246
- }
247
- };
248
- };
249
- /**
250
- * 캐시 정리
251
- */
252
- DOMRenderer.prototype.clearCache = function () {
253
- this.optionElementCache.clear();
254
- };
255
- /**
256
- * 특정 옵션 캐시 제거
257
- */
258
- DOMRenderer.prototype.removeCachedOption = function (optionId) {
259
- this.optionElementCache.delete(optionId);
260
- };
261
- /**
262
- * 공통 DOM 생성 유틸리티
263
- */
264
- DOMRenderer.createElementWithClass = function (tagName, className, textContent) {
265
- var element = document.createElement(tagName);
266
- element.className = className;
267
- if (textContent) {
268
- element.textContent = textContent;
269
- }
270
- return element;
271
- };
272
- /**
273
- * 버튼 엘리먼트 생성
274
- */
275
- DOMRenderer.createButton = function (className, textContent, onClick) {
276
- var button = document.createElement('button');
277
- button.className = className;
278
- // React 컴포넌트와 일치하도록 span.ncua-btn__label 구조 사용
279
- var label = document.createElement('span');
280
- label.className = 'ncua-btn__label';
281
- label.textContent = textContent;
282
- button.appendChild(label);
283
- if (onClick) {
284
- button.addEventListener('click', onClick);
285
- }
286
- return button;
287
- };
288
- /**
289
- * SVG 아이콘 생성
290
- */
291
- DOMRenderer.createSvgIcon = function (iconName, size) {
292
- if (size === void 0) {
293
- size = 16;
294
- }
295
- var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
296
- svg.setAttribute('width', size.toString());
297
- svg.setAttribute('height', size.toString());
298
- svg.setAttribute('viewBox', '0 0 24 24');
299
- svg.setAttribute('fill', 'none');
300
- // 기본 아이콘들
301
- switch (iconName) {
302
- case 'close':
303
- svg.innerHTML = '<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 7 7 17M7 7l10 10"/>';
304
- break;
305
- case 'chevron-down':
306
- svg.innerHTML = '<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"/>';
307
- break;
308
- case 'chevron-selector-vertical':
309
- svg.innerHTML = '<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m7 15 5 5 5-5M7 9l5-5 5 5"/>';
310
- break;
311
- case 'search':
312
- svg.innerHTML = '<path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m21 21-3.5-3.5m2.5-6a8.5 8.5 0 1 1-17 0 8.5 8.5 0 0 1 17 0"></path>';
313
- break;
314
- }
315
- return svg;
316
- };
317
- /**
318
- * 푸터 생성
319
- */
320
- DOMRenderer.prototype.createFooter = function (config) {
321
- // 푸터 생성
322
- var footer = document.createElement('div');
323
- footer.className = 'ncua-select-dropdown__footer';
324
- var footerButtons = document.createElement('div');
325
- footerButtons.className = 'ncua-select-dropdown__footer-buttons';
326
- var footerLeft = document.createElement('div');
327
- footerLeft.className = 'ncua-select-dropdown__footer-left';
328
- var footerRight = document.createElement('div');
329
- footerRight.className = 'ncua-select-dropdown__footer-right';
330
- // 다중 선택인 경우 전체 선택 버튼 추가
331
- if (config.multiple) {
332
- var selectAllButton = DOMRenderer.createButton('ncua-btn ncua-btn--xs ncua-btn--text has-underline', config.selectAllButtonText || '전체 선택', function (e) {
333
- var _a;
334
- e.preventDefault();
335
- e.stopPropagation();
336
- (_a = config.onSelectAll) === null || _a === void 0 ? void 0 : _a.call(config);
337
- });
338
- footerLeft.appendChild(selectAllButton);
339
- }
340
- // 편집 버튼 (showFooterButtons가 true이고 onEdit가 있는 경우)
341
- if (config.showFooterButtons && config.onEdit) {
342
- var editButton = DOMRenderer.createButton('ncua-btn ncua-btn--xs ncua-btn--secondary-gray', '편집', function (e) {
343
- var _a;
344
- e.preventDefault();
345
- e.stopPropagation();
346
- (_a = config.onEdit) === null || _a === void 0 ? void 0 : _a.call(config);
347
- });
348
- footerRight.appendChild(editButton);
349
- }
350
- // 선택 완료 버튼 (다중 선택이거나 showFooterButtons가 true인 경우)
351
- if (config.multiple || config.showFooterButtons) {
352
- var completeButton = DOMRenderer.createButton('ncua-btn ncua-btn--xs ncua-btn--secondary', '선택 완료', function (e) {
353
- var _a;
354
- e.preventDefault();
355
- e.stopPropagation();
356
- (_a = config.onComplete) === null || _a === void 0 ? void 0 : _a.call(config);
357
- });
358
- footerRight.appendChild(completeButton);
359
- }
360
- footerButtons.appendChild(footerLeft);
361
- footerButtons.appendChild(footerRight);
362
- footer.appendChild(footerButtons);
363
- return footer;
364
- };
365
- /**
366
- * 전체 선택 버튼 텍스트 업데이트
367
- */
368
- DOMRenderer.prototype.updateSelectAllButtonText = function (footerElement, text) {
369
- var selectAllButton = footerElement.querySelector('.ncua-select-dropdown__footer-left .ncua-btn');
370
- if (selectAllButton) {
371
- var label = selectAllButton.querySelector('.ncua-btn__label');
372
- if (label) {
373
- label.textContent = text;
374
- }
375
- }
376
- };
377
- return DOMRenderer;
378
- }();
379
- export { DOMRenderer };