@ncds/ui-admin 1.3.0 → 1.4.1

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 (368) hide show
  1. package/dist/cjs/assets/scripts/comboBox.js +262 -0
  2. package/dist/cjs/assets/scripts/datePicker.js +178 -60
  3. package/dist/cjs/assets/scripts/featuredIcon.js +95 -0
  4. package/dist/cjs/assets/scripts/fileInput/FileInput.js +183 -0
  5. package/dist/cjs/assets/scripts/fileInput/FileInputModel.js +246 -0
  6. package/dist/cjs/assets/scripts/fileInput/FileInputView.js +455 -0
  7. package/dist/cjs/assets/scripts/fileInput/const/classNames.js +35 -0
  8. package/dist/cjs/assets/scripts/fileInput/const/index.js +27 -0
  9. package/dist/cjs/assets/scripts/fileInput/const/types.js +13 -0
  10. package/dist/cjs/assets/scripts/fileInput/index.js +44 -0
  11. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInput.js +187 -0
  12. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +268 -0
  13. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputView.js +354 -0
  14. package/dist/cjs/assets/scripts/imageFileInput/const/classNames.js +41 -0
  15. package/dist/cjs/assets/scripts/imageFileInput/const/index.js +27 -0
  16. package/dist/cjs/assets/scripts/imageFileInput/const/types.js +13 -0
  17. package/dist/cjs/assets/scripts/imageFileInput/index.js +44 -0
  18. package/dist/cjs/assets/scripts/index.js +21 -1
  19. package/dist/cjs/assets/scripts/modal/Modal.js +116 -0
  20. package/dist/cjs/assets/scripts/modal/ModalActions.js +128 -0
  21. package/dist/cjs/assets/scripts/modal/ModalContent.js +46 -0
  22. package/dist/cjs/assets/scripts/modal/ModalHeader.js +115 -0
  23. package/dist/cjs/assets/scripts/modal/const/classNames.js +41 -0
  24. package/dist/cjs/assets/scripts/modal/const/index.js +27 -0
  25. package/dist/cjs/assets/scripts/modal/const/types.js +5 -0
  26. package/dist/cjs/assets/scripts/modal/index.js +61 -0
  27. package/dist/cjs/assets/scripts/modal/utils/contentUtils.js +35 -0
  28. package/dist/cjs/assets/scripts/notification/FloatingNotification.js +180 -0
  29. package/dist/cjs/assets/scripts/notification/FullWidthNotification.js +120 -0
  30. package/dist/cjs/assets/scripts/notification/Notification.js +113 -0
  31. package/dist/cjs/assets/scripts/notification/const/classNames.js +36 -0
  32. package/dist/cjs/assets/scripts/notification/const/icons.js +45 -0
  33. package/dist/cjs/assets/scripts/notification/const/index.js +74 -0
  34. package/dist/cjs/assets/scripts/notification/const/sizes.js +48 -0
  35. package/dist/cjs/assets/scripts/notification/const/types.js +5 -0
  36. package/dist/cjs/assets/scripts/notification/index.js +84 -0
  37. package/dist/cjs/assets/scripts/notification/utils.js +92 -0
  38. package/dist/cjs/assets/scripts/progress-bar/ProgressBar.js +272 -0
  39. package/dist/cjs/assets/scripts/progress-bar/index.js +12 -0
  40. package/dist/cjs/assets/scripts/selectBox.js +319 -0
  41. package/dist/cjs/assets/scripts/shared/ButtonCloseX.js +46 -0
  42. package/dist/cjs/assets/scripts/tag/Tag.js +268 -0
  43. package/dist/cjs/assets/scripts/tag/const/classNames.js +24 -0
  44. package/dist/cjs/assets/scripts/tag/const/index.js +38 -0
  45. package/dist/cjs/assets/scripts/tag/const/sizes.js +13 -0
  46. package/dist/cjs/assets/scripts/tag/const/types.js +5 -0
  47. package/dist/cjs/assets/scripts/tag/index.js +44 -0
  48. package/dist/cjs/assets/scripts/tooltip/Tooltip.js +380 -0
  49. package/dist/cjs/assets/scripts/tooltip/TooltipLayerManager.js +84 -0
  50. package/dist/cjs/assets/scripts/tooltip/const/classNames.js +29 -0
  51. package/dist/cjs/assets/scripts/tooltip/const/constants.js +56 -0
  52. package/dist/cjs/assets/scripts/tooltip/const/icons.js +15 -0
  53. package/dist/cjs/assets/scripts/tooltip/const/index.js +123 -0
  54. package/dist/cjs/assets/scripts/tooltip/const/templates.js +49 -0
  55. package/dist/cjs/assets/scripts/tooltip/const/types.js +5 -0
  56. package/dist/cjs/assets/scripts/tooltip/index.js +57 -0
  57. package/dist/cjs/assets/scripts/tooltip/utils.js +41 -0
  58. package/dist/cjs/assets/scripts/utils/selectbox/DOMRenderer.js +384 -0
  59. package/dist/cjs/assets/scripts/utils/selectbox/DropdownModel.js +361 -0
  60. package/dist/cjs/assets/scripts/utils/selectbox/SelectBoxController.js +681 -0
  61. package/dist/cjs/assets/scripts/utils/selectbox/UnifiedSelectBox.js +677 -0
  62. package/dist/cjs/constant/color.js +2 -0
  63. package/dist/cjs/src/components/button/Button.js +9 -35
  64. package/dist/cjs/src/components/button/ButtonGroup.js +9 -10
  65. package/dist/cjs/src/components/checkbox/Checkbox.js +20 -19
  66. package/dist/cjs/src/components/checkbox/CheckboxInput.js +22 -45
  67. package/dist/cjs/src/components/combobox/ComboBox.js +337 -0
  68. package/dist/cjs/src/components/combobox/index.js +12 -0
  69. package/dist/cjs/src/components/date-picker/CustomInput.js +52 -0
  70. package/dist/cjs/src/components/date-picker/DatePicker.js +86 -23
  71. package/dist/cjs/src/components/date-picker/RangeDatePicker.js +1 -1
  72. package/dist/cjs/src/components/{input → file-upload}/FileInput.js +17 -9
  73. package/dist/cjs/src/components/file-upload/index.js +16 -0
  74. package/dist/cjs/src/components/image-file-input/ImageFileInput.js +263 -0
  75. package/dist/cjs/src/components/image-file-input/components/ImagePreview.js +44 -0
  76. package/dist/cjs/src/components/image-file-input/index.js +16 -0
  77. package/dist/cjs/src/components/index.js +44 -0
  78. package/dist/cjs/src/components/input/InputBase.js +54 -10
  79. package/dist/cjs/src/components/input/Textarea.js +12 -20
  80. package/dist/cjs/src/components/input/index.js +0 -11
  81. package/dist/cjs/src/components/modal/Modal.js +7 -3
  82. package/dist/cjs/src/components/notification/FloatingNotification.js +34 -3
  83. package/dist/cjs/src/components/notification/FullWidthNotification.js +54 -5
  84. package/dist/cjs/src/components/pagination/NavButton.js +1 -13
  85. package/dist/cjs/src/components/pagination/Pagination.js +6 -20
  86. package/dist/cjs/src/components/progress-bar/ProgressBar.js +89 -20
  87. package/dist/cjs/src/components/progress-bar/components/SegmentBar.js +25 -0
  88. package/dist/cjs/src/components/progress-bar/components/SegmentLabels.js +74 -0
  89. package/dist/cjs/src/components/progress-bar/hooks/useProgressBar.js +119 -0
  90. package/dist/cjs/src/components/progress-bar/index.js +11 -0
  91. package/dist/cjs/src/components/progress-bar/types.js +5 -0
  92. package/dist/cjs/src/components/progress-bar/utils.js +31 -0
  93. package/dist/cjs/src/components/radio/Radio.js +5 -6
  94. package/dist/cjs/src/components/select/Select.js +7 -4
  95. package/dist/cjs/src/components/select-dropdown/SelectDropdown.js +146 -0
  96. package/dist/cjs/src/components/select-dropdown/index.js +12 -0
  97. package/dist/cjs/src/components/selectbox/SelectBox.js +283 -0
  98. package/dist/cjs/src/components/selectbox/index.js +12 -0
  99. package/dist/cjs/src/components/shared/hintText/HintText.js +1 -1
  100. package/dist/cjs/src/components/switch/Switch.js +123 -0
  101. package/dist/cjs/src/components/switch/index.js +12 -0
  102. package/dist/cjs/src/components/tab/HorizontalTab.js +8 -20
  103. package/dist/cjs/src/components/tab/TabButton.js +33 -16
  104. package/dist/cjs/src/components/tab/VerticalTab.js +15 -30
  105. package/dist/cjs/src/components/tag/Tag.js +92 -3
  106. package/dist/cjs/src/components/tooltip/Tooltip.js +125 -28
  107. package/dist/cjs/src/hooks/dropdown/index.js +47 -0
  108. package/dist/cjs/src/hooks/dropdown/useDropdown.js +109 -0
  109. package/dist/cjs/src/hooks/dropdown/useDropdownKeyboard.js +131 -0
  110. package/dist/cjs/src/hooks/dropdown/useDropdownPosition.js +27 -0
  111. package/dist/cjs/src/hooks/dropdown/useOutsideClick.js +33 -0
  112. package/dist/cjs/src/hooks/dropdown/useScrollLock.js +78 -0
  113. package/dist/cjs/src/hooks/dropdown/useWindowResize.js +52 -0
  114. package/dist/cjs/src/hooks/index.js +18 -1
  115. package/dist/cjs/src/types/dropdown/dropdown.js +5 -0
  116. package/dist/cjs/src/types/dropdown/index.js +27 -0
  117. package/dist/cjs/src/types/dropdown/option.js +5 -0
  118. package/dist/cjs/src/types/index.js +16 -0
  119. package/dist/cjs/src/utils/date-picker.js +37 -1
  120. package/dist/cjs/src/utils/dropdown/dropdownUtils.js +107 -0
  121. package/dist/cjs/src/utils/dropdown/index.js +27 -0
  122. package/dist/cjs/src/utils/dropdown/multiSelect.js +100 -0
  123. package/dist/cjs/src/utils/index.js +27 -0
  124. package/dist/esm/assets/scripts/comboBox.js +257 -0
  125. package/dist/esm/assets/scripts/datePicker.js +175 -59
  126. package/dist/esm/assets/scripts/featuredIcon.js +90 -0
  127. package/dist/esm/assets/scripts/fileInput/FileInput.js +178 -0
  128. package/dist/esm/assets/scripts/fileInput/FileInputModel.js +241 -0
  129. package/dist/esm/assets/scripts/fileInput/FileInputView.js +450 -0
  130. package/dist/esm/assets/scripts/fileInput/const/classNames.js +25 -0
  131. package/dist/esm/assets/scripts/fileInput/const/index.js +2 -0
  132. package/dist/esm/assets/scripts/fileInput/const/types.js +7 -0
  133. package/dist/esm/assets/scripts/fileInput/index.js +9 -0
  134. package/dist/esm/assets/scripts/imageFileInput/ImageFileInput.js +182 -0
  135. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +263 -0
  136. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputView.js +349 -0
  137. package/dist/esm/assets/scripts/imageFileInput/const/classNames.js +30 -0
  138. package/dist/esm/assets/scripts/imageFileInput/const/index.js +2 -0
  139. package/dist/esm/assets/scripts/imageFileInput/const/types.js +7 -0
  140. package/dist/esm/assets/scripts/imageFileInput/index.js +9 -0
  141. package/dist/esm/assets/scripts/index.js +21 -1
  142. package/dist/esm/assets/scripts/modal/Modal.js +110 -0
  143. package/dist/esm/assets/scripts/modal/ModalActions.js +123 -0
  144. package/dist/esm/assets/scripts/modal/ModalContent.js +41 -0
  145. package/dist/esm/assets/scripts/modal/ModalHeader.js +110 -0
  146. package/dist/esm/assets/scripts/modal/const/classNames.js +31 -0
  147. package/dist/esm/assets/scripts/modal/const/index.js +2 -0
  148. package/dist/esm/assets/scripts/modal/const/types.js +1 -0
  149. package/dist/esm/assets/scripts/modal/index.js +15 -0
  150. package/dist/esm/assets/scripts/modal/utils/contentUtils.js +28 -0
  151. package/dist/esm/assets/scripts/notification/FloatingNotification.js +176 -0
  152. package/dist/esm/assets/scripts/notification/FullWidthNotification.js +115 -0
  153. package/dist/esm/assets/scripts/notification/Notification.js +108 -0
  154. package/dist/esm/assets/scripts/notification/const/classNames.js +30 -0
  155. package/dist/esm/assets/scripts/notification/const/icons.js +39 -0
  156. package/dist/esm/assets/scripts/notification/const/index.js +3 -0
  157. package/dist/esm/assets/scripts/notification/const/sizes.js +42 -0
  158. package/dist/esm/assets/scripts/notification/const/types.js +1 -0
  159. package/dist/esm/assets/scripts/notification/index.js +10 -0
  160. package/dist/esm/assets/scripts/notification/utils.js +79 -0
  161. package/dist/esm/assets/scripts/progress-bar/ProgressBar.js +267 -0
  162. package/dist/esm/assets/scripts/progress-bar/index.js +1 -0
  163. package/dist/esm/assets/scripts/selectBox.js +314 -0
  164. package/dist/esm/assets/scripts/shared/ButtonCloseX.js +38 -0
  165. package/dist/esm/assets/scripts/tag/Tag.js +263 -0
  166. package/dist/esm/assets/scripts/tag/const/classNames.js +16 -0
  167. package/dist/esm/assets/scripts/tag/const/index.js +3 -0
  168. package/dist/esm/assets/scripts/tag/const/sizes.js +7 -0
  169. package/dist/esm/assets/scripts/tag/const/types.js +1 -0
  170. package/dist/esm/assets/scripts/tag/index.js +9 -0
  171. package/dist/esm/assets/scripts/tooltip/Tooltip.js +375 -0
  172. package/dist/esm/assets/scripts/tooltip/TooltipLayerManager.js +79 -0
  173. package/dist/esm/assets/scripts/tooltip/const/classNames.js +23 -0
  174. package/dist/esm/assets/scripts/tooltip/const/constants.js +50 -0
  175. package/dist/esm/assets/scripts/tooltip/const/icons.js +9 -0
  176. package/dist/esm/assets/scripts/tooltip/const/index.js +4 -0
  177. package/dist/esm/assets/scripts/tooltip/const/templates.js +42 -0
  178. package/dist/esm/assets/scripts/tooltip/const/types.js +1 -0
  179. package/dist/esm/assets/scripts/tooltip/index.js +10 -0
  180. package/dist/esm/assets/scripts/tooltip/utils.js +35 -0
  181. package/dist/esm/assets/scripts/utils/selectbox/DOMRenderer.js +379 -0
  182. package/dist/esm/assets/scripts/utils/selectbox/DropdownModel.js +356 -0
  183. package/dist/esm/assets/scripts/utils/selectbox/SelectBoxController.js +676 -0
  184. package/dist/esm/assets/scripts/utils/selectbox/UnifiedSelectBox.js +672 -0
  185. package/dist/esm/constant/color.js +2 -0
  186. package/dist/esm/src/components/button/Button.js +10 -36
  187. package/dist/esm/src/components/button/ButtonGroup.js +9 -10
  188. package/dist/esm/src/components/checkbox/Checkbox.js +21 -19
  189. package/dist/esm/src/components/checkbox/CheckboxInput.js +24 -47
  190. package/dist/esm/src/components/combobox/ComboBox.js +330 -0
  191. package/dist/esm/src/components/combobox/index.js +1 -0
  192. package/dist/esm/src/components/date-picker/CustomInput.js +45 -0
  193. package/dist/esm/src/components/date-picker/DatePicker.js +87 -24
  194. package/dist/esm/src/components/date-picker/RangeDatePicker.js +1 -1
  195. package/dist/esm/src/components/{input → file-upload}/FileInput.js +17 -9
  196. package/dist/esm/src/components/file-upload/index.js +1 -0
  197. package/dist/esm/src/components/image-file-input/ImageFileInput.js +256 -0
  198. package/dist/esm/src/components/image-file-input/components/ImagePreview.js +37 -0
  199. package/dist/esm/src/components/image-file-input/index.js +1 -0
  200. package/dist/esm/src/components/index.js +4 -0
  201. package/dist/esm/src/components/input/InputBase.js +55 -11
  202. package/dist/esm/src/components/input/Textarea.js +12 -20
  203. package/dist/esm/src/components/input/index.js +1 -2
  204. package/dist/esm/src/components/modal/Modal.js +7 -3
  205. package/dist/esm/src/components/notification/FloatingNotification.js +35 -4
  206. package/dist/esm/src/components/notification/FullWidthNotification.js +55 -6
  207. package/dist/esm/src/components/pagination/NavButton.js +1 -13
  208. package/dist/esm/src/components/pagination/Pagination.js +6 -20
  209. package/dist/esm/src/components/progress-bar/ProgressBar.js +89 -20
  210. package/dist/esm/src/components/progress-bar/components/SegmentBar.js +18 -0
  211. package/dist/esm/src/components/progress-bar/components/SegmentLabels.js +66 -0
  212. package/dist/esm/src/components/progress-bar/hooks/useProgressBar.js +112 -0
  213. package/dist/esm/src/components/progress-bar/index.js +2 -1
  214. package/dist/esm/src/components/progress-bar/types.js +1 -0
  215. package/dist/esm/src/components/progress-bar/utils.js +22 -0
  216. package/dist/esm/src/components/radio/Radio.js +5 -5
  217. package/dist/esm/src/components/select/Select.js +7 -4
  218. package/dist/esm/src/components/select-dropdown/SelectDropdown.js +139 -0
  219. package/dist/esm/src/components/select-dropdown/index.js +1 -0
  220. package/dist/esm/src/components/selectbox/SelectBox.js +276 -0
  221. package/dist/esm/src/components/selectbox/index.js +1 -0
  222. package/dist/esm/src/components/shared/hintText/HintText.js +1 -1
  223. package/dist/esm/src/components/switch/Switch.js +116 -0
  224. package/dist/esm/src/components/switch/index.js +1 -0
  225. package/dist/esm/src/components/tab/HorizontalTab.js +7 -19
  226. package/dist/esm/src/components/tab/TabButton.js +34 -17
  227. package/dist/esm/src/components/tab/VerticalTab.js +15 -30
  228. package/dist/esm/src/components/tag/Tag.js +92 -3
  229. package/dist/esm/src/components/tooltip/Tooltip.js +125 -28
  230. package/dist/esm/src/hooks/dropdown/index.js +6 -0
  231. package/dist/esm/src/hooks/dropdown/useDropdown.js +102 -0
  232. package/dist/esm/src/hooks/dropdown/useDropdownKeyboard.js +124 -0
  233. package/dist/esm/src/hooks/dropdown/useDropdownPosition.js +20 -0
  234. package/dist/esm/src/hooks/dropdown/useOutsideClick.js +26 -0
  235. package/dist/esm/src/hooks/dropdown/useScrollLock.js +71 -0
  236. package/dist/esm/src/hooks/dropdown/useWindowResize.js +45 -0
  237. package/dist/esm/src/hooks/index.js +4 -1
  238. package/dist/esm/src/types/dropdown/dropdown.js +1 -0
  239. package/dist/esm/src/types/dropdown/index.js +2 -0
  240. package/dist/esm/src/types/dropdown/option.js +1 -0
  241. package/dist/esm/src/types/index.js +2 -0
  242. package/dist/esm/src/utils/date-picker.js +33 -1
  243. package/dist/esm/src/utils/dropdown/dropdownUtils.js +97 -0
  244. package/dist/esm/src/utils/dropdown/index.js +2 -0
  245. package/dist/esm/src/utils/dropdown/multiSelect.js +88 -0
  246. package/dist/esm/src/utils/index.js +4 -0
  247. package/dist/types/assets/scripts/comboBox.d.ts +79 -0
  248. package/dist/types/assets/scripts/datePicker.d.ts +16 -13
  249. package/dist/types/assets/scripts/featuredIcon.d.ts +23 -0
  250. package/dist/types/assets/scripts/fileInput/FileInput.d.ts +67 -0
  251. package/dist/types/assets/scripts/fileInput/FileInputModel.d.ts +70 -0
  252. package/dist/types/assets/scripts/fileInput/FileInputView.d.ts +77 -0
  253. package/dist/types/assets/scripts/fileInput/const/classNames.d.ts +17 -0
  254. package/dist/types/assets/scripts/fileInput/const/index.d.ts +3 -0
  255. package/dist/types/assets/scripts/fileInput/const/types.d.ts +132 -0
  256. package/dist/types/assets/scripts/fileInput/index.d.ts +4 -0
  257. package/dist/types/assets/scripts/imageFileInput/ImageFileInput.d.ts +64 -0
  258. package/dist/types/assets/scripts/imageFileInput/ImageFileInputModel.d.ts +74 -0
  259. package/dist/types/assets/scripts/imageFileInput/ImageFileInputView.d.ts +80 -0
  260. package/dist/types/assets/scripts/imageFileInput/const/classNames.d.ts +20 -0
  261. package/dist/types/assets/scripts/imageFileInput/const/index.d.ts +3 -0
  262. package/dist/types/assets/scripts/imageFileInput/const/types.d.ts +126 -0
  263. package/dist/types/assets/scripts/imageFileInput/index.d.ts +4 -0
  264. package/dist/types/assets/scripts/index.d.ts +28 -2
  265. package/dist/types/assets/scripts/modal/Modal.d.ts +28 -0
  266. package/dist/types/assets/scripts/modal/ModalActions.d.ts +19 -0
  267. package/dist/types/assets/scripts/modal/ModalContent.d.ts +14 -0
  268. package/dist/types/assets/scripts/modal/ModalHeader.d.ts +16 -0
  269. package/dist/types/assets/scripts/modal/const/classNames.d.ts +23 -0
  270. package/dist/types/assets/scripts/modal/const/index.d.ts +3 -0
  271. package/dist/types/assets/scripts/modal/const/types.d.ts +62 -0
  272. package/dist/types/assets/scripts/modal/index.d.ts +8 -0
  273. package/dist/types/assets/scripts/modal/utils/contentUtils.d.ts +11 -0
  274. package/dist/types/assets/scripts/notification/FloatingNotification.d.ts +25 -0
  275. package/dist/types/assets/scripts/notification/FullWidthNotification.d.ts +22 -0
  276. package/dist/types/assets/scripts/notification/Notification.d.ts +22 -0
  277. package/dist/types/assets/scripts/notification/const/classNames.d.ts +30 -0
  278. package/dist/types/assets/scripts/notification/const/icons.d.ts +26 -0
  279. package/dist/types/assets/scripts/notification/const/index.d.ts +5 -0
  280. package/dist/types/assets/scripts/notification/const/sizes.d.ts +28 -0
  281. package/dist/types/assets/scripts/notification/const/types.d.ts +19 -0
  282. package/dist/types/assets/scripts/notification/index.d.ts +7 -0
  283. package/dist/types/assets/scripts/notification/utils.d.ts +9 -0
  284. package/dist/types/assets/scripts/progress-bar/ProgressBar.d.ts +68 -0
  285. package/dist/types/assets/scripts/progress-bar/index.d.ts +2 -0
  286. package/dist/types/assets/scripts/selectBox.d.ts +77 -0
  287. package/dist/types/assets/scripts/shared/ButtonCloseX.d.ts +6 -0
  288. package/dist/types/assets/scripts/tag/Tag.d.ts +28 -0
  289. package/dist/types/assets/scripts/tag/const/classNames.d.ts +12 -0
  290. package/dist/types/assets/scripts/tag/const/index.d.ts +4 -0
  291. package/dist/types/assets/scripts/tag/const/sizes.d.ts +8 -0
  292. package/dist/types/assets/scripts/tag/const/types.d.ts +34 -0
  293. package/dist/types/assets/scripts/tag/index.d.ts +4 -0
  294. package/dist/types/assets/scripts/tooltip/Tooltip.d.ts +55 -0
  295. package/dist/types/assets/scripts/tooltip/TooltipLayerManager.d.ts +22 -0
  296. package/dist/types/assets/scripts/tooltip/const/classNames.d.ts +18 -0
  297. package/dist/types/assets/scripts/tooltip/const/constants.d.ts +34 -0
  298. package/dist/types/assets/scripts/tooltip/const/icons.d.ts +5 -0
  299. package/dist/types/assets/scripts/tooltip/const/index.d.ts +6 -0
  300. package/dist/types/assets/scripts/tooltip/const/templates.d.ts +17 -0
  301. package/dist/types/assets/scripts/tooltip/const/types.d.ts +15 -0
  302. package/dist/types/assets/scripts/tooltip/index.d.ts +7 -0
  303. package/dist/types/assets/scripts/tooltip/utils.d.ts +3 -0
  304. package/dist/types/assets/scripts/utils/selectbox/DOMRenderer.d.ts +108 -0
  305. package/dist/types/assets/scripts/utils/selectbox/DropdownModel.d.ts +154 -0
  306. package/dist/types/assets/scripts/utils/selectbox/SelectBoxController.d.ts +171 -0
  307. package/dist/types/assets/scripts/utils/selectbox/UnifiedSelectBox.d.ts +80 -0
  308. package/dist/types/constant/color.d.ts +3 -1
  309. package/dist/types/src/components/button/Button.d.ts +14 -12
  310. package/dist/types/src/components/button/ButtonGroup.d.ts +4 -289
  311. package/dist/types/src/components/checkbox/Checkbox.d.ts +2 -3
  312. package/dist/types/src/components/combobox/ComboBox.d.ts +28 -0
  313. package/dist/types/src/components/combobox/index.d.ts +3 -0
  314. package/dist/types/src/components/date-picker/CustomInput.d.ts +12 -0
  315. package/dist/types/src/components/date-picker/DatePicker.d.ts +2 -0
  316. package/dist/types/src/components/{input → file-upload}/FileInput.d.ts +1 -1
  317. package/dist/types/src/components/file-upload/index.d.ts +2 -0
  318. package/dist/types/src/components/image-file-input/ImageFileInput.d.ts +78 -0
  319. package/dist/types/src/components/image-file-input/components/ImagePreview.d.ts +6 -0
  320. package/dist/types/src/components/image-file-input/index.d.ts +2 -0
  321. package/dist/types/src/components/index.d.ts +4 -0
  322. package/dist/types/src/components/input/InputBase.d.ts +2 -0
  323. package/dist/types/src/components/input/index.d.ts +0 -1
  324. package/dist/types/src/components/modal/Modal.d.ts +3 -2
  325. package/dist/types/src/components/notification/FloatingNotification.d.ts +5 -0
  326. package/dist/types/src/components/notification/FullWidthNotification.d.ts +15 -1
  327. package/dist/types/src/components/notification/Notification.d.ts +8 -2
  328. package/dist/types/src/components/pagination/NavButton.d.ts +1 -4
  329. package/dist/types/src/components/pagination/Pagination.d.ts +2 -13
  330. package/dist/types/src/components/progress-bar/ProgressBar.d.ts +2 -6
  331. package/dist/types/src/components/progress-bar/components/SegmentBar.d.ts +8 -0
  332. package/dist/types/src/components/progress-bar/components/SegmentLabels.d.ts +16 -0
  333. package/dist/types/src/components/progress-bar/hooks/useProgressBar.d.ts +14 -0
  334. package/dist/types/src/components/progress-bar/index.d.ts +1 -0
  335. package/dist/types/src/components/progress-bar/types.d.ts +16 -0
  336. package/dist/types/src/components/progress-bar/utils.d.ts +13 -0
  337. package/dist/types/src/components/radio/Radio.d.ts +2 -3
  338. package/dist/types/src/components/select/Select.d.ts +1 -4
  339. package/dist/types/src/components/select-dropdown/SelectDropdown.d.ts +28 -0
  340. package/dist/types/src/components/select-dropdown/index.d.ts +2 -0
  341. package/dist/types/src/components/selectbox/SelectBox.d.ts +25 -0
  342. package/dist/types/src/components/selectbox/index.d.ts +2 -0
  343. package/dist/types/src/components/switch/Switch.d.ts +22 -0
  344. package/dist/types/src/components/switch/index.d.ts +3 -0
  345. package/dist/types/src/components/tab/HorizontalTab.d.ts +1 -2
  346. package/dist/types/src/components/tab/TabButton.d.ts +9 -12
  347. package/dist/types/src/components/tab/VerticalTab.d.ts +2 -2
  348. package/dist/types/src/components/tag/Tag.d.ts +3 -1
  349. package/dist/types/src/components/tooltip/Tooltip.d.ts +4 -2
  350. package/dist/types/src/hooks/dropdown/index.d.ts +7 -0
  351. package/dist/types/src/hooks/dropdown/useDropdown.d.ts +30 -0
  352. package/dist/types/src/hooks/dropdown/useDropdownKeyboard.d.ts +11 -0
  353. package/dist/types/src/hooks/dropdown/useDropdownPosition.d.ts +10 -0
  354. package/dist/types/src/hooks/dropdown/useOutsideClick.d.ts +6 -0
  355. package/dist/types/src/hooks/dropdown/useScrollLock.d.ts +5 -0
  356. package/dist/types/src/hooks/dropdown/useWindowResize.d.ts +8 -0
  357. package/dist/types/src/hooks/index.d.ts +2 -1
  358. package/dist/types/src/types/dropdown/dropdown.d.ts +40 -0
  359. package/dist/types/src/types/dropdown/index.d.ts +3 -0
  360. package/dist/types/src/types/dropdown/option.d.ts +20 -0
  361. package/dist/types/src/types/index.d.ts +2 -0
  362. package/dist/types/src/utils/date-picker.d.ts +3 -0
  363. package/dist/types/src/utils/dropdown/dropdownUtils.d.ts +18 -0
  364. package/dist/types/src/utils/dropdown/index.d.ts +3 -0
  365. package/dist/types/src/utils/dropdown/multiSelect.d.ts +32 -0
  366. package/dist/types/src/utils/index.d.ts +3 -0
  367. package/dist/ui-admin/assets/styles/style.css +1744 -358
  368. package/package.json +8 -4
@@ -0,0 +1,79 @@
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 };
@@ -0,0 +1,23 @@
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
+ };
@@ -0,0 +1,50 @@
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
+ };
@@ -0,0 +1,9 @@
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
+ };
@@ -0,0 +1,4 @@
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';
@@ -0,0 +1,42 @@
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
+ };
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,10 @@
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;
@@ -0,0 +1,35 @@
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
+ }
@@ -0,0 +1,379 @@
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 };