@ncds/ui-admin 1.8.0 → 1.8.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (448) hide show
  1. package/dist/cjs/src/components/badge/index.js +11 -0
  2. package/dist/cjs/src/components/combo-box/ComboBox.js +1 -0
  3. package/dist/cjs/src/components/date-picker/index.js +11 -0
  4. package/dist/cjs/src/components/image-file-input/components/index.js +16 -0
  5. package/dist/cjs/src/components/image-file-input/index.js +11 -0
  6. package/dist/cjs/src/components/progress-bar/components/index.js +27 -0
  7. package/dist/cjs/src/components/progress-bar/hooks/index.js +16 -0
  8. package/dist/cjs/src/components/progress-bar/index.js +33 -0
  9. package/dist/cjs/src/components/select/Select.js +0 -1
  10. package/dist/cjs/src/components/select-dropdown/index.js +11 -7
  11. package/dist/cjs/src/components/switch/index.js +11 -7
  12. package/dist/cjs/src/components/table/Table.js +128 -16
  13. package/dist/cjs/src/components/tooltip/Tooltip.js +170 -104
  14. package/dist/cjs/src/hooks/dropdown/index.js +61 -37
  15. package/dist/cjs/src/hooks/index.js +31 -25
  16. package/dist/cjs/vitest.config.js +13 -0
  17. package/dist/esm/src/components/badge/index.js +2 -1
  18. package/dist/esm/src/components/combo-box/ComboBox.js +1 -0
  19. package/dist/esm/src/components/date-picker/index.js +1 -0
  20. package/dist/esm/src/components/empty-state/EmptyState.js +2 -3
  21. package/dist/esm/src/components/image-file-input/components/index.js +1 -0
  22. package/dist/esm/src/components/image-file-input/index.js +2 -1
  23. package/dist/esm/src/components/progress-bar/components/index.js +2 -0
  24. package/dist/esm/src/components/progress-bar/hooks/index.js +1 -0
  25. package/dist/esm/src/components/progress-bar/index.js +4 -1
  26. package/dist/esm/src/components/select/Select.js +0 -1
  27. package/dist/esm/src/components/select-dropdown/index.js +1 -1
  28. package/dist/esm/src/components/switch/index.js +1 -1
  29. package/dist/esm/src/components/table/Table.js +129 -17
  30. package/dist/esm/src/components/tag/Tag.js +2 -3
  31. package/dist/esm/src/components/tooltip/Tooltip.js +172 -106
  32. package/dist/esm/src/hooks/dropdown/index.js +6 -6
  33. package/dist/esm/src/hooks/index.js +3 -3
  34. package/dist/esm/src/types/component-meta.js +2 -0
  35. package/dist/esm/vitest.config.js +7 -0
  36. package/dist/temp/src/components/badge/index.d.ts +1 -0
  37. package/dist/temp/src/components/badge/index.js +1 -0
  38. package/dist/temp/src/components/combo-box/ComboBox.js +1 -0
  39. package/dist/temp/src/components/date-picker/index.d.ts +1 -0
  40. package/dist/temp/src/components/date-picker/index.js +1 -0
  41. package/dist/temp/src/components/empty-state/EmptyState.d.ts +3 -5
  42. package/dist/temp/src/components/empty-state/EmptyState.js +1 -2
  43. package/dist/temp/src/components/image-file-input/components/index.d.ts +1 -0
  44. package/dist/temp/src/components/image-file-input/components/index.js +1 -0
  45. package/dist/temp/src/components/image-file-input/index.d.ts +1 -0
  46. package/dist/temp/src/components/image-file-input/index.js +1 -0
  47. package/dist/temp/src/components/progress-bar/components/index.d.ts +2 -0
  48. package/dist/temp/src/components/progress-bar/components/index.js +2 -0
  49. package/dist/temp/src/components/progress-bar/hooks/index.d.ts +1 -0
  50. package/dist/temp/src/components/progress-bar/hooks/index.js +1 -0
  51. package/dist/temp/src/components/progress-bar/index.d.ts +3 -0
  52. package/dist/temp/src/components/progress-bar/index.js +3 -0
  53. package/dist/temp/src/components/select/Select.js +1 -1
  54. package/dist/temp/src/components/select-dropdown/index.d.ts +1 -1
  55. package/dist/temp/src/components/select-dropdown/index.js +1 -1
  56. package/dist/temp/src/components/spinner/Spinner.d.ts +1 -2
  57. package/dist/temp/src/components/switch/index.d.ts +1 -2
  58. package/dist/temp/src/components/switch/index.js +1 -1
  59. package/dist/temp/src/components/table/Table.d.ts +4 -2
  60. package/dist/temp/src/components/table/Table.js +95 -11
  61. package/dist/temp/src/components/table/types.d.ts +3 -1
  62. package/dist/temp/src/components/tag/Tag.d.ts +3 -5
  63. package/dist/temp/src/components/tag/Tag.js +1 -2
  64. package/dist/temp/src/components/tooltip/Tooltip.d.ts +4 -2
  65. package/dist/temp/src/components/tooltip/Tooltip.js +126 -68
  66. package/dist/temp/src/hooks/dropdown/index.d.ts +6 -6
  67. package/dist/temp/src/hooks/dropdown/index.js +6 -6
  68. package/dist/temp/src/hooks/index.d.ts +3 -3
  69. package/dist/temp/src/hooks/index.js +3 -3
  70. package/dist/temp/src/types/component-meta.d.ts +26 -0
  71. package/dist/temp/src/types/component-meta.js +2 -0
  72. package/dist/temp/src/types/dropdown/option.d.ts +2 -4
  73. package/dist/temp/src/types/side-slot.d.ts +9 -1
  74. package/dist/temp/vitest.config.d.ts +2 -0
  75. package/dist/temp/vitest.config.js +7 -0
  76. package/dist/types/src/components/badge/index.d.ts +1 -0
  77. package/dist/types/src/components/date-picker/index.d.ts +1 -0
  78. package/dist/types/src/components/empty-state/EmptyState.d.ts +3 -5
  79. package/dist/types/src/components/image-file-input/components/index.d.ts +1 -0
  80. package/dist/types/src/components/image-file-input/index.d.ts +1 -0
  81. package/dist/types/src/components/progress-bar/components/index.d.ts +2 -0
  82. package/dist/types/src/components/progress-bar/hooks/index.d.ts +1 -0
  83. package/dist/types/src/components/progress-bar/index.d.ts +3 -0
  84. package/dist/types/src/components/select-dropdown/index.d.ts +1 -1
  85. package/dist/types/src/components/spinner/Spinner.d.ts +1 -2
  86. package/dist/types/src/components/switch/index.d.ts +1 -2
  87. package/dist/types/src/components/table/Table.d.ts +4 -2
  88. package/dist/types/src/components/table/types.d.ts +3 -1
  89. package/dist/types/src/components/tag/Tag.d.ts +3 -5
  90. package/dist/types/src/components/tooltip/Tooltip.d.ts +4 -2
  91. package/dist/types/src/hooks/dropdown/index.d.ts +6 -6
  92. package/dist/types/src/hooks/index.d.ts +3 -3
  93. package/dist/types/src/types/component-meta.d.ts +26 -0
  94. package/dist/types/src/types/dropdown/option.d.ts +2 -4
  95. package/dist/types/src/types/side-slot.d.ts +9 -1
  96. package/dist/types/vitest.config.d.ts +2 -0
  97. package/dist/ui-admin/assets/styles/style.css +178 -60
  98. package/package.json +6 -1
  99. package/dist/cjs/assets/scripts/baseBox.js +0 -146
  100. package/dist/cjs/assets/scripts/comboBox.js +0 -137
  101. package/dist/cjs/assets/scripts/datePicker.js +0 -671
  102. package/dist/cjs/assets/scripts/featuredIcon.js +0 -87
  103. package/dist/cjs/assets/scripts/fileInput/const/classNames.js +0 -25
  104. package/dist/cjs/assets/scripts/fileInput/const/index.js +0 -27
  105. package/dist/cjs/assets/scripts/fileInput/const/types.js +0 -13
  106. package/dist/cjs/assets/scripts/fileInput/fileInput.js +0 -78
  107. package/dist/cjs/assets/scripts/fileInput/fileInputModel.js +0 -53
  108. package/dist/cjs/assets/scripts/fileInput/fileInputView.js +0 -152
  109. package/dist/cjs/assets/scripts/fileInput/index.js +0 -44
  110. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInput.js +0 -184
  111. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -222
  112. package/dist/cjs/assets/scripts/imageFileInput/ImageFileInputView.js +0 -356
  113. package/dist/cjs/assets/scripts/imageFileInput/const/classNames.js +0 -31
  114. package/dist/cjs/assets/scripts/imageFileInput/const/index.js +0 -27
  115. package/dist/cjs/assets/scripts/imageFileInput/const/types.js +0 -13
  116. package/dist/cjs/assets/scripts/imageFileInput/index.js +0 -44
  117. package/dist/cjs/assets/scripts/index.js +0 -32
  118. package/dist/cjs/assets/scripts/modal/Modal.js +0 -104
  119. package/dist/cjs/assets/scripts/modal/ModalActions.js +0 -116
  120. package/dist/cjs/assets/scripts/modal/ModalContent.js +0 -46
  121. package/dist/cjs/assets/scripts/modal/ModalHeader.js +0 -104
  122. package/dist/cjs/assets/scripts/modal/const/classNames.js +0 -33
  123. package/dist/cjs/assets/scripts/modal/const/index.js +0 -27
  124. package/dist/cjs/assets/scripts/modal/index.js +0 -61
  125. package/dist/cjs/assets/scripts/modal/utils/contentUtils.js +0 -35
  126. package/dist/cjs/assets/scripts/notification/FloatingNotification.js +0 -178
  127. package/dist/cjs/assets/scripts/notification/FullWidthNotification.js +0 -132
  128. package/dist/cjs/assets/scripts/notification/MessageNotification.js +0 -159
  129. package/dist/cjs/assets/scripts/notification/Notification.js +0 -101
  130. package/dist/cjs/assets/scripts/notification/const/classNames.js +0 -50
  131. package/dist/cjs/assets/scripts/notification/const/icons.js +0 -31
  132. package/dist/cjs/assets/scripts/notification/const/index.js +0 -87
  133. package/dist/cjs/assets/scripts/notification/const/sizes.js +0 -46
  134. package/dist/cjs/assets/scripts/notification/const/types.js +0 -14
  135. package/dist/cjs/assets/scripts/notification/index.js +0 -92
  136. package/dist/cjs/assets/scripts/notification/utils.js +0 -97
  137. package/dist/cjs/assets/scripts/progress-bar/ProgressBar.js +0 -271
  138. package/dist/cjs/assets/scripts/progress-bar/index.js +0 -12
  139. package/dist/cjs/assets/scripts/selectBox.js +0 -169
  140. package/dist/cjs/assets/scripts/shared/ButtonCloseX.js +0 -45
  141. package/dist/cjs/assets/scripts/tab.js +0 -40
  142. package/dist/cjs/assets/scripts/table/Table.js +0 -377
  143. package/dist/cjs/assets/scripts/table/const/classNames.js +0 -33
  144. package/dist/cjs/assets/scripts/table/const/index.js +0 -27
  145. package/dist/cjs/assets/scripts/table/const/types.js +0 -5
  146. package/dist/cjs/assets/scripts/table/index.js +0 -43
  147. package/dist/cjs/assets/scripts/tag/Tag.js +0 -261
  148. package/dist/cjs/assets/scripts/tag/const/classNames.js +0 -20
  149. package/dist/cjs/assets/scripts/tag/const/index.js +0 -38
  150. package/dist/cjs/assets/scripts/tag/const/sizes.js +0 -13
  151. package/dist/cjs/assets/scripts/tag/const/types.js +0 -5
  152. package/dist/cjs/assets/scripts/tag/index.js +0 -44
  153. package/dist/cjs/assets/scripts/tooltip/Tooltip.js +0 -353
  154. package/dist/cjs/assets/scripts/tooltip/TooltipLayerManager.js +0 -82
  155. package/dist/cjs/assets/scripts/tooltip/const/classNames.js +0 -29
  156. package/dist/cjs/assets/scripts/tooltip/const/constants.js +0 -56
  157. package/dist/cjs/assets/scripts/tooltip/const/icons.js +0 -15
  158. package/dist/cjs/assets/scripts/tooltip/const/index.js +0 -123
  159. package/dist/cjs/assets/scripts/tooltip/const/templates.js +0 -66
  160. package/dist/cjs/assets/scripts/tooltip/const/types.js +0 -5
  161. package/dist/cjs/assets/scripts/tooltip/index.js +0 -57
  162. package/dist/cjs/assets/scripts/tooltip/utils.js +0 -40
  163. package/dist/cjs/assets/scripts/utils/debounce.js +0 -32
  164. package/dist/cjs/assets/scripts/utils/unifiedBox/domRenderer.js +0 -370
  165. package/dist/cjs/assets/scripts/utils/unifiedBox/dropdownModel.js +0 -285
  166. package/dist/cjs/assets/scripts/utils/unifiedBox/unifiedBoxController.js +0 -622
  167. package/dist/cjs/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +0 -473
  168. package/dist/esm/assets/scripts/baseBox.js +0 -139
  169. package/dist/esm/assets/scripts/comboBox.js +0 -130
  170. package/dist/esm/assets/scripts/datePicker.js +0 -663
  171. package/dist/esm/assets/scripts/featuredIcon.js +0 -80
  172. package/dist/esm/assets/scripts/fileInput/const/classNames.js +0 -16
  173. package/dist/esm/assets/scripts/fileInput/const/index.js +0 -2
  174. package/dist/esm/assets/scripts/fileInput/const/types.js +0 -7
  175. package/dist/esm/assets/scripts/fileInput/fileInput.js +0 -71
  176. package/dist/esm/assets/scripts/fileInput/fileInputModel.js +0 -46
  177. package/dist/esm/assets/scripts/fileInput/fileInputView.js +0 -145
  178. package/dist/esm/assets/scripts/fileInput/index.js +0 -9
  179. package/dist/esm/assets/scripts/imageFileInput/ImageFileInput.js +0 -177
  180. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -215
  181. package/dist/esm/assets/scripts/imageFileInput/ImageFileInputView.js +0 -349
  182. package/dist/esm/assets/scripts/imageFileInput/const/classNames.js +0 -20
  183. package/dist/esm/assets/scripts/imageFileInput/const/index.js +0 -2
  184. package/dist/esm/assets/scripts/imageFileInput/const/types.js +0 -7
  185. package/dist/esm/assets/scripts/imageFileInput/index.js +0 -9
  186. package/dist/esm/assets/scripts/index.js +0 -30
  187. package/dist/esm/assets/scripts/modal/Modal.js +0 -98
  188. package/dist/esm/assets/scripts/modal/ModalActions.js +0 -109
  189. package/dist/esm/assets/scripts/modal/ModalContent.js +0 -39
  190. package/dist/esm/assets/scripts/modal/ModalHeader.js +0 -97
  191. package/dist/esm/assets/scripts/modal/const/classNames.js +0 -23
  192. package/dist/esm/assets/scripts/modal/const/index.js +0 -2
  193. package/dist/esm/assets/scripts/modal/const/types.js +0 -1
  194. package/dist/esm/assets/scripts/modal/index.js +0 -15
  195. package/dist/esm/assets/scripts/modal/utils/contentUtils.js +0 -28
  196. package/dist/esm/assets/scripts/notification/FloatingNotification.js +0 -172
  197. package/dist/esm/assets/scripts/notification/FullWidthNotification.js +0 -125
  198. package/dist/esm/assets/scripts/notification/MessageNotification.js +0 -152
  199. package/dist/esm/assets/scripts/notification/Notification.js +0 -94
  200. package/dist/esm/assets/scripts/notification/const/classNames.js +0 -44
  201. package/dist/esm/assets/scripts/notification/const/icons.js +0 -25
  202. package/dist/esm/assets/scripts/notification/const/index.js +0 -4
  203. package/dist/esm/assets/scripts/notification/const/sizes.js +0 -40
  204. package/dist/esm/assets/scripts/notification/const/types.js +0 -8
  205. package/dist/esm/assets/scripts/notification/index.js +0 -11
  206. package/dist/esm/assets/scripts/notification/utils.js +0 -84
  207. package/dist/esm/assets/scripts/progress-bar/ProgressBar.js +0 -264
  208. package/dist/esm/assets/scripts/progress-bar/index.js +0 -1
  209. package/dist/esm/assets/scripts/selectBox.js +0 -162
  210. package/dist/esm/assets/scripts/shared/ButtonCloseX.js +0 -37
  211. package/dist/esm/assets/scripts/tab.js +0 -33
  212. package/dist/esm/assets/scripts/table/Table.js +0 -370
  213. package/dist/esm/assets/scripts/table/const/classNames.js +0 -27
  214. package/dist/esm/assets/scripts/table/const/index.js +0 -2
  215. package/dist/esm/assets/scripts/table/const/types.js +0 -1
  216. package/dist/esm/assets/scripts/table/index.js +0 -8
  217. package/dist/esm/assets/scripts/tag/Tag.js +0 -254
  218. package/dist/esm/assets/scripts/tag/const/classNames.js +0 -12
  219. package/dist/esm/assets/scripts/tag/const/index.js +0 -3
  220. package/dist/esm/assets/scripts/tag/const/sizes.js +0 -7
  221. package/dist/esm/assets/scripts/tag/const/types.js +0 -1
  222. package/dist/esm/assets/scripts/tag/index.js +0 -9
  223. package/dist/esm/assets/scripts/tooltip/Tooltip.js +0 -346
  224. package/dist/esm/assets/scripts/tooltip/TooltipLayerManager.js +0 -75
  225. package/dist/esm/assets/scripts/tooltip/const/classNames.js +0 -23
  226. package/dist/esm/assets/scripts/tooltip/const/constants.js +0 -50
  227. package/dist/esm/assets/scripts/tooltip/const/icons.js +0 -9
  228. package/dist/esm/assets/scripts/tooltip/const/index.js +0 -4
  229. package/dist/esm/assets/scripts/tooltip/const/templates.js +0 -59
  230. package/dist/esm/assets/scripts/tooltip/const/types.js +0 -1
  231. package/dist/esm/assets/scripts/tooltip/index.js +0 -10
  232. package/dist/esm/assets/scripts/tooltip/utils.js +0 -34
  233. package/dist/esm/assets/scripts/utils/debounce.js +0 -26
  234. package/dist/esm/assets/scripts/utils/unifiedBox/domRenderer.js +0 -363
  235. package/dist/esm/assets/scripts/utils/unifiedBox/dropdownModel.js +0 -279
  236. package/dist/esm/assets/scripts/utils/unifiedBox/unifiedBoxController.js +0 -615
  237. package/dist/esm/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +0 -466
  238. package/dist/temp/assets/scripts/baseBox.d.ts +0 -55
  239. package/dist/temp/assets/scripts/baseBox.js +0 -140
  240. package/dist/temp/assets/scripts/comboBox.d.ts +0 -60
  241. package/dist/temp/assets/scripts/comboBox.js +0 -132
  242. package/dist/temp/assets/scripts/datePicker.d.ts +0 -86
  243. package/dist/temp/assets/scripts/datePicker.js +0 -699
  244. package/dist/temp/assets/scripts/featuredIcon.d.ts +0 -22
  245. package/dist/temp/assets/scripts/featuredIcon.js +0 -79
  246. package/dist/temp/assets/scripts/fileInput/const/classNames.d.ts +0 -15
  247. package/dist/temp/assets/scripts/fileInput/const/classNames.js +0 -16
  248. package/dist/temp/assets/scripts/fileInput/const/index.d.ts +0 -2
  249. package/dist/temp/assets/scripts/fileInput/const/index.js +0 -2
  250. package/dist/temp/assets/scripts/fileInput/const/types.d.ts +0 -88
  251. package/dist/temp/assets/scripts/fileInput/const/types.js +0 -7
  252. package/dist/temp/assets/scripts/fileInput/fileInput.d.ts +0 -13
  253. package/dist/temp/assets/scripts/fileInput/fileInput.js +0 -71
  254. package/dist/temp/assets/scripts/fileInput/fileInputModel.d.ts +0 -12
  255. package/dist/temp/assets/scripts/fileInput/fileInputModel.js +0 -37
  256. package/dist/temp/assets/scripts/fileInput/fileInputView.d.ts +0 -42
  257. package/dist/temp/assets/scripts/fileInput/fileInputView.js +0 -145
  258. package/dist/temp/assets/scripts/fileInput/index.d.ts +0 -3
  259. package/dist/temp/assets/scripts/fileInput/index.js +0 -9
  260. package/dist/temp/assets/scripts/imageFileInput/ImageFileInput.d.ts +0 -63
  261. package/dist/temp/assets/scripts/imageFileInput/ImageFileInput.js +0 -180
  262. package/dist/temp/assets/scripts/imageFileInput/ImageFileInputModel.d.ts +0 -73
  263. package/dist/temp/assets/scripts/imageFileInput/ImageFileInputModel.js +0 -214
  264. package/dist/temp/assets/scripts/imageFileInput/ImageFileInputView.d.ts +0 -79
  265. package/dist/temp/assets/scripts/imageFileInput/ImageFileInputView.js +0 -350
  266. package/dist/temp/assets/scripts/imageFileInput/const/classNames.d.ts +0 -19
  267. package/dist/temp/assets/scripts/imageFileInput/const/classNames.js +0 -20
  268. package/dist/temp/assets/scripts/imageFileInput/const/index.d.ts +0 -2
  269. package/dist/temp/assets/scripts/imageFileInput/const/index.js +0 -2
  270. package/dist/temp/assets/scripts/imageFileInput/const/types.d.ts +0 -125
  271. package/dist/temp/assets/scripts/imageFileInput/const/types.js +0 -7
  272. package/dist/temp/assets/scripts/imageFileInput/index.d.ts +0 -3
  273. package/dist/temp/assets/scripts/imageFileInput/index.js +0 -9
  274. package/dist/temp/assets/scripts/index.d.ts +0 -34
  275. package/dist/temp/assets/scripts/index.js +0 -30
  276. package/dist/temp/assets/scripts/modal/Modal.d.ts +0 -27
  277. package/dist/temp/assets/scripts/modal/Modal.js +0 -100
  278. package/dist/temp/assets/scripts/modal/ModalActions.d.ts +0 -18
  279. package/dist/temp/assets/scripts/modal/ModalActions.js +0 -117
  280. package/dist/temp/assets/scripts/modal/ModalContent.d.ts +0 -13
  281. package/dist/temp/assets/scripts/modal/ModalContent.js +0 -39
  282. package/dist/temp/assets/scripts/modal/ModalHeader.d.ts +0 -15
  283. package/dist/temp/assets/scripts/modal/ModalHeader.js +0 -96
  284. package/dist/temp/assets/scripts/modal/const/classNames.d.ts +0 -22
  285. package/dist/temp/assets/scripts/modal/const/classNames.js +0 -23
  286. package/dist/temp/assets/scripts/modal/const/index.d.ts +0 -2
  287. package/dist/temp/assets/scripts/modal/const/index.js +0 -2
  288. package/dist/temp/assets/scripts/modal/const/types.d.ts +0 -61
  289. package/dist/temp/assets/scripts/modal/const/types.js +0 -1
  290. package/dist/temp/assets/scripts/modal/index.d.ts +0 -7
  291. package/dist/temp/assets/scripts/modal/index.js +0 -15
  292. package/dist/temp/assets/scripts/modal/utils/contentUtils.d.ts +0 -10
  293. package/dist/temp/assets/scripts/modal/utils/contentUtils.js +0 -29
  294. package/dist/temp/assets/scripts/notification/FloatingNotification.d.ts +0 -24
  295. package/dist/temp/assets/scripts/notification/FloatingNotification.js +0 -157
  296. package/dist/temp/assets/scripts/notification/FullWidthNotification.d.ts +0 -21
  297. package/dist/temp/assets/scripts/notification/FullWidthNotification.js +0 -110
  298. package/dist/temp/assets/scripts/notification/MessageNotification.d.ts +0 -22
  299. package/dist/temp/assets/scripts/notification/MessageNotification.js +0 -140
  300. package/dist/temp/assets/scripts/notification/Notification.d.ts +0 -21
  301. package/dist/temp/assets/scripts/notification/Notification.js +0 -94
  302. package/dist/temp/assets/scripts/notification/const/classNames.d.ts +0 -43
  303. package/dist/temp/assets/scripts/notification/const/classNames.js +0 -44
  304. package/dist/temp/assets/scripts/notification/const/icons.d.ts +0 -25
  305. package/dist/temp/assets/scripts/notification/const/icons.js +0 -25
  306. package/dist/temp/assets/scripts/notification/const/index.d.ts +0 -5
  307. package/dist/temp/assets/scripts/notification/const/index.js +0 -4
  308. package/dist/temp/assets/scripts/notification/const/sizes.d.ts +0 -32
  309. package/dist/temp/assets/scripts/notification/const/sizes.js +0 -40
  310. package/dist/temp/assets/scripts/notification/const/types.d.ts +0 -19
  311. package/dist/temp/assets/scripts/notification/const/types.js +0 -8
  312. package/dist/temp/assets/scripts/notification/index.d.ts +0 -7
  313. package/dist/temp/assets/scripts/notification/index.js +0 -11
  314. package/dist/temp/assets/scripts/notification/utils.d.ts +0 -8
  315. package/dist/temp/assets/scripts/notification/utils.js +0 -89
  316. package/dist/temp/assets/scripts/progress-bar/ProgressBar.d.ts +0 -67
  317. package/dist/temp/assets/scripts/progress-bar/ProgressBar.js +0 -263
  318. package/dist/temp/assets/scripts/progress-bar/index.d.ts +0 -1
  319. package/dist/temp/assets/scripts/progress-bar/index.js +0 -1
  320. package/dist/temp/assets/scripts/selectBox.d.ts +0 -50
  321. package/dist/temp/assets/scripts/selectBox.js +0 -170
  322. package/dist/temp/assets/scripts/shared/ButtonCloseX.d.ts +0 -5
  323. package/dist/temp/assets/scripts/shared/ButtonCloseX.js +0 -33
  324. package/dist/temp/assets/scripts/tab.d.ts +0 -7
  325. package/dist/temp/assets/scripts/tab.js +0 -33
  326. package/dist/temp/assets/scripts/table/Table.d.ts +0 -41
  327. package/dist/temp/assets/scripts/table/Table.js +0 -378
  328. package/dist/temp/assets/scripts/table/const/classNames.d.ts +0 -27
  329. package/dist/temp/assets/scripts/table/const/classNames.js +0 -27
  330. package/dist/temp/assets/scripts/table/const/index.d.ts +0 -2
  331. package/dist/temp/assets/scripts/table/const/index.js +0 -2
  332. package/dist/temp/assets/scripts/table/const/types.d.ts +0 -23
  333. package/dist/temp/assets/scripts/table/const/types.js +0 -1
  334. package/dist/temp/assets/scripts/table/index.d.ts +0 -3
  335. package/dist/temp/assets/scripts/table/index.js +0 -8
  336. package/dist/temp/assets/scripts/tag/Tag.d.ts +0 -27
  337. package/dist/temp/assets/scripts/tag/Tag.js +0 -259
  338. package/dist/temp/assets/scripts/tag/const/classNames.d.ts +0 -11
  339. package/dist/temp/assets/scripts/tag/const/classNames.js +0 -12
  340. package/dist/temp/assets/scripts/tag/const/index.d.ts +0 -3
  341. package/dist/temp/assets/scripts/tag/const/index.js +0 -3
  342. package/dist/temp/assets/scripts/tag/const/sizes.d.ts +0 -7
  343. package/dist/temp/assets/scripts/tag/const/sizes.js +0 -7
  344. package/dist/temp/assets/scripts/tag/const/types.d.ts +0 -33
  345. package/dist/temp/assets/scripts/tag/const/types.js +0 -1
  346. package/dist/temp/assets/scripts/tag/index.d.ts +0 -3
  347. package/dist/temp/assets/scripts/tag/index.js +0 -9
  348. package/dist/temp/assets/scripts/tooltip/Tooltip.d.ts +0 -54
  349. package/dist/temp/assets/scripts/tooltip/Tooltip.js +0 -335
  350. package/dist/temp/assets/scripts/tooltip/TooltipLayerManager.d.ts +0 -21
  351. package/dist/temp/assets/scripts/tooltip/TooltipLayerManager.js +0 -71
  352. package/dist/temp/assets/scripts/tooltip/const/classNames.d.ts +0 -17
  353. package/dist/temp/assets/scripts/tooltip/const/classNames.js +0 -23
  354. package/dist/temp/assets/scripts/tooltip/const/constants.d.ts +0 -33
  355. package/dist/temp/assets/scripts/tooltip/const/constants.js +0 -46
  356. package/dist/temp/assets/scripts/tooltip/const/icons.d.ts +0 -4
  357. package/dist/temp/assets/scripts/tooltip/const/icons.js +0 -9
  358. package/dist/temp/assets/scripts/tooltip/const/index.d.ts +0 -5
  359. package/dist/temp/assets/scripts/tooltip/const/index.js +0 -4
  360. package/dist/temp/assets/scripts/tooltip/const/templates.d.ts +0 -16
  361. package/dist/temp/assets/scripts/tooltip/const/templates.js +0 -59
  362. package/dist/temp/assets/scripts/tooltip/const/types.d.ts +0 -14
  363. package/dist/temp/assets/scripts/tooltip/const/types.js +0 -1
  364. package/dist/temp/assets/scripts/tooltip/index.d.ts +0 -6
  365. package/dist/temp/assets/scripts/tooltip/index.js +0 -10
  366. package/dist/temp/assets/scripts/tooltip/utils.d.ts +0 -2
  367. package/dist/temp/assets/scripts/tooltip/utils.js +0 -33
  368. package/dist/temp/assets/scripts/utils/debounce.d.ts +0 -8
  369. package/dist/temp/assets/scripts/utils/debounce.js +0 -23
  370. package/dist/temp/assets/scripts/utils/unifiedBox/domRenderer.d.ts +0 -107
  371. package/dist/temp/assets/scripts/utils/unifiedBox/domRenderer.js +0 -367
  372. package/dist/temp/assets/scripts/utils/unifiedBox/dropdownModel.d.ts +0 -142
  373. package/dist/temp/assets/scripts/utils/unifiedBox/dropdownModel.js +0 -286
  374. package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxController.d.ts +0 -156
  375. package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxController.js +0 -604
  376. package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxManager.d.ts +0 -95
  377. package/dist/temp/assets/scripts/utils/unifiedBox/unifiedBoxManager.js +0 -482
  378. package/dist/types/assets/scripts/baseBox.d.ts +0 -55
  379. package/dist/types/assets/scripts/comboBox.d.ts +0 -60
  380. package/dist/types/assets/scripts/datePicker.d.ts +0 -86
  381. package/dist/types/assets/scripts/featuredIcon.d.ts +0 -22
  382. package/dist/types/assets/scripts/fileInput/const/classNames.d.ts +0 -15
  383. package/dist/types/assets/scripts/fileInput/const/index.d.ts +0 -2
  384. package/dist/types/assets/scripts/fileInput/const/types.d.ts +0 -88
  385. package/dist/types/assets/scripts/fileInput/fileInput.d.ts +0 -13
  386. package/dist/types/assets/scripts/fileInput/fileInputModel.d.ts +0 -12
  387. package/dist/types/assets/scripts/fileInput/fileInputView.d.ts +0 -42
  388. package/dist/types/assets/scripts/fileInput/index.d.ts +0 -3
  389. package/dist/types/assets/scripts/imageFileInput/ImageFileInput.d.ts +0 -63
  390. package/dist/types/assets/scripts/imageFileInput/ImageFileInputModel.d.ts +0 -73
  391. package/dist/types/assets/scripts/imageFileInput/ImageFileInputView.d.ts +0 -79
  392. package/dist/types/assets/scripts/imageFileInput/const/classNames.d.ts +0 -19
  393. package/dist/types/assets/scripts/imageFileInput/const/index.d.ts +0 -2
  394. package/dist/types/assets/scripts/imageFileInput/const/types.d.ts +0 -125
  395. package/dist/types/assets/scripts/imageFileInput/index.d.ts +0 -3
  396. package/dist/types/assets/scripts/index.d.ts +0 -34
  397. package/dist/types/assets/scripts/modal/Modal.d.ts +0 -27
  398. package/dist/types/assets/scripts/modal/ModalActions.d.ts +0 -18
  399. package/dist/types/assets/scripts/modal/ModalContent.d.ts +0 -13
  400. package/dist/types/assets/scripts/modal/ModalHeader.d.ts +0 -15
  401. package/dist/types/assets/scripts/modal/const/classNames.d.ts +0 -22
  402. package/dist/types/assets/scripts/modal/const/index.d.ts +0 -2
  403. package/dist/types/assets/scripts/modal/const/types.d.ts +0 -61
  404. package/dist/types/assets/scripts/modal/index.d.ts +0 -7
  405. package/dist/types/assets/scripts/modal/utils/contentUtils.d.ts +0 -10
  406. package/dist/types/assets/scripts/notification/FloatingNotification.d.ts +0 -24
  407. package/dist/types/assets/scripts/notification/FullWidthNotification.d.ts +0 -21
  408. package/dist/types/assets/scripts/notification/MessageNotification.d.ts +0 -22
  409. package/dist/types/assets/scripts/notification/Notification.d.ts +0 -21
  410. package/dist/types/assets/scripts/notification/const/classNames.d.ts +0 -43
  411. package/dist/types/assets/scripts/notification/const/icons.d.ts +0 -25
  412. package/dist/types/assets/scripts/notification/const/index.d.ts +0 -5
  413. package/dist/types/assets/scripts/notification/const/sizes.d.ts +0 -32
  414. package/dist/types/assets/scripts/notification/const/types.d.ts +0 -19
  415. package/dist/types/assets/scripts/notification/index.d.ts +0 -7
  416. package/dist/types/assets/scripts/notification/utils.d.ts +0 -8
  417. package/dist/types/assets/scripts/progress-bar/ProgressBar.d.ts +0 -67
  418. package/dist/types/assets/scripts/progress-bar/index.d.ts +0 -1
  419. package/dist/types/assets/scripts/selectBox.d.ts +0 -50
  420. package/dist/types/assets/scripts/shared/ButtonCloseX.d.ts +0 -5
  421. package/dist/types/assets/scripts/tab.d.ts +0 -7
  422. package/dist/types/assets/scripts/table/Table.d.ts +0 -41
  423. package/dist/types/assets/scripts/table/const/classNames.d.ts +0 -27
  424. package/dist/types/assets/scripts/table/const/index.d.ts +0 -2
  425. package/dist/types/assets/scripts/table/const/types.d.ts +0 -23
  426. package/dist/types/assets/scripts/table/index.d.ts +0 -3
  427. package/dist/types/assets/scripts/tag/Tag.d.ts +0 -27
  428. package/dist/types/assets/scripts/tag/const/classNames.d.ts +0 -11
  429. package/dist/types/assets/scripts/tag/const/index.d.ts +0 -3
  430. package/dist/types/assets/scripts/tag/const/sizes.d.ts +0 -7
  431. package/dist/types/assets/scripts/tag/const/types.d.ts +0 -33
  432. package/dist/types/assets/scripts/tag/index.d.ts +0 -3
  433. package/dist/types/assets/scripts/tooltip/Tooltip.d.ts +0 -54
  434. package/dist/types/assets/scripts/tooltip/TooltipLayerManager.d.ts +0 -21
  435. package/dist/types/assets/scripts/tooltip/const/classNames.d.ts +0 -17
  436. package/dist/types/assets/scripts/tooltip/const/constants.d.ts +0 -33
  437. package/dist/types/assets/scripts/tooltip/const/icons.d.ts +0 -4
  438. package/dist/types/assets/scripts/tooltip/const/index.d.ts +0 -5
  439. package/dist/types/assets/scripts/tooltip/const/templates.d.ts +0 -16
  440. package/dist/types/assets/scripts/tooltip/const/types.d.ts +0 -14
  441. package/dist/types/assets/scripts/tooltip/index.d.ts +0 -6
  442. package/dist/types/assets/scripts/tooltip/utils.d.ts +0 -2
  443. package/dist/types/assets/scripts/utils/debounce.d.ts +0 -8
  444. package/dist/types/assets/scripts/utils/unifiedBox/domRenderer.d.ts +0 -107
  445. package/dist/types/assets/scripts/utils/unifiedBox/dropdownModel.d.ts +0 -142
  446. package/dist/types/assets/scripts/utils/unifiedBox/unifiedBoxController.d.ts +0 -156
  447. package/dist/types/assets/scripts/utils/unifiedBox/unifiedBoxManager.d.ts +0 -95
  448. /package/dist/cjs/{assets/scripts/modal/const/types.js → src/types/component-meta.js} +0 -0
@@ -1,8 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { ChevronDown, ChevronSelectorVertical, ChevronUp } from '@ncds/ui-admin-icon';
3
3
  import classNames from 'classnames';
4
- import { Children, forwardRef } from 'react';
4
+ import { Children, forwardRef, useEffect, useRef } from 'react';
5
5
  // ──────────────────────────────────────────────
6
+ // $table-header-height 와 동기화 — sticky thead가 차지하는 높이를 maxHeight에 보상
7
+ const TABLE_HEADER_HEIGHT = 40;
8
+ // 스크롤바 트랙 상하 여백 합계 (top 8px + bottom 8px) — SCSS &--fixed-header &__scrollbar 오프셋과 동기화
9
+ const SCROLLBAR_TRACK_OFFSET = 16;
10
+ const SCROLLBAR_THUMB_MIN_HEIGHT = 40;
6
11
  // Sort Icons (@ncds/ui-admin-icon)
7
12
  // ──────────────────────────────────────────────
8
13
  const SORT_ICONS = {
@@ -104,8 +109,18 @@ const Cell = /*#__PURE__*/forwardRef((_ref5, ref) => {
104
109
  let {
105
110
  children,
106
111
  className,
112
+ isHeader,
107
113
  ...rest
108
114
  } = _ref5;
115
+ if (isHeader) {
116
+ return _jsx("th", {
117
+ ref: ref,
118
+ scope: "row",
119
+ className: classNames('ncua-table__cell', className),
120
+ ...rest,
121
+ children: children
122
+ });
123
+ }
109
124
  return _jsx("td", {
110
125
  ref: ref,
111
126
  className: classNames('ncua-table__cell', className),
@@ -146,14 +161,13 @@ const ColGroup = _ref8 => {
146
161
  return width;
147
162
  };
148
163
  return _jsx("colgroup", {
149
- children: widths.map((width, index) => {
150
- const duplicateCount = widths.slice(0, index).filter(v => v === width).length;
151
- return _jsx("col", {
152
- style: {
153
- width: resolveColWidth(width)
154
- }
155
- }, `col-${width}-${duplicateCount}`);
156
- })
164
+ children: widths.map((width, index) =>
165
+ // biome-ignore lint/suspicious/noArrayIndexKey: colgroup columns never reorder or change
166
+ _jsx("col", {
167
+ style: {
168
+ width: resolveColWidth(width)
169
+ }
170
+ }, index))
157
171
  });
158
172
  };
159
173
  ColGroup.displayName = 'Table.ColGroup';
@@ -182,12 +196,18 @@ const categorizeChild = (child, result) => {
182
196
  result.footerContent.push(child);
183
197
  } else if (child.type === Pagination) {
184
198
  result.paginationContent.push(child);
199
+ } else if (child.type === Header) {
200
+ result.headerContent.push(child);
201
+ } else if (child.type === ColGroup) {
202
+ result.colGroupContent.push(child);
185
203
  } else {
186
204
  result.tableContent.push(child);
187
205
  }
188
206
  };
189
207
  const sortChildren = children => {
190
208
  const result = {
209
+ headerContent: [],
210
+ colGroupContent: [],
191
211
  tableContent: [],
192
212
  footerContent: [],
193
213
  paginationContent: []
@@ -219,17 +239,113 @@ const TableComponent = /*#__PURE__*/forwardRef((_ref0, ref) => {
219
239
  'ncua-table--selectable': selectable
220
240
  });
221
241
  const {
242
+ headerContent,
243
+ colGroupContent,
222
244
  tableContent,
223
245
  footerContent,
224
246
  paginationContent
225
247
  } = sortChildren(children);
226
248
  const scrollStyle = fixedHeader && maxHeight ? {
227
- maxHeight: typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight
249
+ maxHeight: typeof maxHeight === 'number' ? `${maxHeight + TABLE_HEADER_HEIGHT}px` : `calc(${maxHeight} + ${TABLE_HEADER_HEIGHT}px)`
228
250
  } : undefined;
229
- const tableElement = _jsx("table", {
251
+ // Custom scrollbar refs (used only in fixed-header mode)
252
+ const scrollContainerRef = useRef(null);
253
+ const scrollAreaRef = useRef(null);
254
+ const thumbRef = useRef(null);
255
+ useEffect(() => {
256
+ if (!fixedHeader || !maxHeight) return;
257
+ const scrollEl = scrollContainerRef.current;
258
+ const thumbEl = thumbRef.current;
259
+ if (!scrollEl || !thumbEl) return;
260
+ const update = () => {
261
+ const {
262
+ scrollTop,
263
+ scrollHeight,
264
+ clientHeight
265
+ } = scrollEl;
266
+ if (scrollHeight <= clientHeight) {
267
+ thumbEl.style.height = '0';
268
+ return;
269
+ }
270
+ const trackHeight = (scrollAreaRef.current?.clientHeight ?? clientHeight) - TABLE_HEADER_HEIGHT - SCROLLBAR_TRACK_OFFSET;
271
+ const thumbHeight = Math.max(SCROLLBAR_THUMB_MIN_HEIGHT, clientHeight / scrollHeight * trackHeight);
272
+ const thumbTop = scrollTop / (scrollHeight - clientHeight) * (trackHeight - thumbHeight);
273
+ thumbEl.style.height = `${thumbHeight}px`;
274
+ thumbEl.style.transform = `translateY(${thumbTop}px)`;
275
+ };
276
+ scrollEl.addEventListener('scroll', update, {
277
+ passive: true
278
+ });
279
+ const observer = new ResizeObserver(update);
280
+ observer.observe(scrollEl);
281
+ update();
282
+ return () => {
283
+ scrollEl.removeEventListener('scroll', update);
284
+ observer.disconnect();
285
+ };
286
+ }, [fixedHeader, maxHeight]);
287
+ const handleThumbMouseDown = e => {
288
+ e.preventDefault();
289
+ const scrollEl = scrollContainerRef.current;
290
+ const thumbEl = thumbRef.current;
291
+ const areaEl = scrollAreaRef.current;
292
+ if (!scrollEl || !thumbEl) return;
293
+ areaEl?.setAttribute('data-dragging', '');
294
+ const startY = e.clientY;
295
+ const startScrollTop = scrollEl.scrollTop;
296
+ const {
297
+ scrollHeight,
298
+ clientHeight
299
+ } = scrollEl;
300
+ const thumbHeight = thumbEl.offsetHeight;
301
+ const scrollRatio = (scrollHeight - clientHeight) / (clientHeight - thumbHeight);
302
+ const onMove = ev => {
303
+ scrollEl.scrollTop = startScrollTop + (ev.clientY - startY) * scrollRatio;
304
+ };
305
+ const onUp = () => {
306
+ areaEl?.removeAttribute('data-dragging');
307
+ document.removeEventListener('mousemove', onMove);
308
+ document.removeEventListener('mouseup', onUp);
309
+ };
310
+ document.addEventListener('mousemove', onMove);
311
+ document.addEventListener('mouseup', onUp);
312
+ };
313
+ if (fixedHeader && maxHeight) {
314
+ return _jsxs("div", {
315
+ ref: ref,
316
+ className: "ncua-table-wrapper",
317
+ children: [_jsxs("div", {
318
+ className: tableClasses,
319
+ ...rest,
320
+ children: [_jsxs("div", {
321
+ ref: scrollAreaRef,
322
+ className: "ncua-table__scroll-area",
323
+ children: [_jsx("div", {
324
+ ref: scrollContainerRef,
325
+ className: "ncua-table__scroll-container",
326
+ style: scrollStyle,
327
+ children: _jsxs("table", {
328
+ className: "ncua-table__table",
329
+ role: "table",
330
+ children: [colGroupContent, headerContent, tableContent]
331
+ })
332
+ }), _jsx("div", {
333
+ className: "ncua-table__scrollbar",
334
+ "aria-hidden": "true",
335
+ children: _jsx("div", {
336
+ ref: thumbRef,
337
+ className: "ncua-table__scrollbar-thumb",
338
+ onMouseDown: handleThumbMouseDown
339
+ })
340
+ })]
341
+ }), footerContent]
342
+ }), paginationContent]
343
+ });
344
+ }
345
+ const tableElement = _jsxs("table", {
230
346
  className: "ncua-table__table",
231
347
  role: "table",
232
- children: tableContent
348
+ children: [colGroupContent, headerContent, tableContent]
233
349
  });
234
350
  return _jsxs("div", {
235
351
  ref: ref,
@@ -237,11 +353,7 @@ const TableComponent = /*#__PURE__*/forwardRef((_ref0, ref) => {
237
353
  children: [_jsxs("div", {
238
354
  className: tableClasses,
239
355
  ...rest,
240
- children: [fixedHeader && maxHeight ? _jsx("div", {
241
- className: "ncua-table__scroll-container",
242
- style: scrollStyle,
243
- children: tableElement
244
- }) : tableElement, footerContent]
356
+ children: [tableElement, footerContent]
245
357
  }), paginationContent]
246
358
  });
247
359
  });
@@ -41,7 +41,7 @@ const calculateOptimalPosition = (triggerElement, tooltipElement) => {
41
41
  const fallbackPosition = hasTopSpace ? 'top-right' : 'bottom-right';
42
42
  return fallbackPosition;
43
43
  };
44
- const Tag = _ref => {
44
+ export const Tag = _ref => {
45
45
  let {
46
46
  size = 'sm',
47
47
  icon,
@@ -135,5 +135,4 @@ const Tag = _ref => {
135
135
  })
136
136
  })]
137
137
  });
138
- };
139
- export { Tag };
138
+ };
@@ -1,60 +1,74 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
2
2
  import { AlertCircle, AlertCircleFill, HelpCircle, HelpCircleFill } from '@ncds/ui-admin-icon';
3
3
  import classNames from 'classnames';
4
- import { useCallback, useMemo, useRef, useState } from 'react';
4
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
5
+ import { createPortal } from 'react-dom';
5
6
  import { ButtonCloseX } from '../button/ButtonCloseX';
6
7
  const ICON_SIZE_SM = 14;
7
8
  const ICON_SIZE_DEFAULT = 16;
8
- const MARGIN = 10;
9
- const DEFAULT_TOOLTIP_WIDTH = 200;
10
- const DEFAULT_TOOLTIP_HEIGHT = 60;
11
- const POSITION_PRIORITY = ['bottom', 'top', 'right', 'left'];
12
- // 수직 위치(top/bottom)일 때 수평 정렬 보정
13
- const resolveVerticalAlignment = (position, triggerRect, tooltipWidth, viewportWidth) => {
14
- const centerX = triggerRect.left + triggerRect.width / 2;
15
- const tooltipHalfWidth = tooltipWidth / 2;
16
- if (centerX - tooltipHalfWidth < MARGIN) {
17
- return `${position}-left`;
9
+ // HTML 구현체(assets/scripts/tooltip)와 동일한 상수
10
+ const TOOLTIP_OFFSET = 6;
11
+ const VIEWPORT_MARGIN = 8;
12
+ const EDGE_ALIGN_OFFSET = 12;
13
+ const OFFSCREEN = -99999;
14
+ // HTML 구현체(TooltipLayerManager)가 body에 만드는 `#tooltip-global-layer`와 동일 id.
15
+ // 한쪽만 바뀌면 포털이 body로 fallback되며 사일런트 동작 이상이 날 수 있으므로 함께 유지한다.
16
+ const GLOBAL_LAYER_ID = 'tooltip-global-layer';
17
+ // body 하위의 전역 레이어를 찾거나 없으면 body로 fallback
18
+ const resolvePortalTarget = () => {
19
+ if (typeof document === 'undefined') return null;
20
+ return document.getElementById(GLOBAL_LAYER_ID) ?? document.body;
21
+ };
22
+ // 앵커 rect와 패널 rect를 기반으로 viewport 고정 좌표 계산
23
+ const computePanelCoords = (prefer, anchor, panel) => {
24
+ let resolved = prefer;
25
+ if (resolved === 'auto') {
26
+ const enoughTop = anchor.top - TOOLTIP_OFFSET - panel.height >= VIEWPORT_MARGIN;
27
+ resolved = enoughTop ? 'top' : 'bottom';
18
28
  }
19
- if (centerX + tooltipHalfWidth > viewportWidth - MARGIN) {
20
- return `${position}-right`;
29
+ let top = 0;
30
+ let left = 0;
31
+ let calculatedPosition = 'bottom';
32
+ if (resolved === 'bottom') {
33
+ top = anchor.bottom + TOOLTIP_OFFSET;
34
+ left = anchor.left + anchor.width / 2 - panel.width / 2;
35
+ calculatedPosition = 'bottom';
36
+ } else if (resolved === 'top') {
37
+ top = anchor.top - panel.height - TOOLTIP_OFFSET;
38
+ left = anchor.left + anchor.width / 2 - panel.width / 2;
39
+ calculatedPosition = 'top';
40
+ } else if (resolved === 'left') {
41
+ top = anchor.top + anchor.height / 2 - panel.height / 2;
42
+ left = anchor.left - panel.width - TOOLTIP_OFFSET;
43
+ calculatedPosition = 'left';
44
+ } else if (resolved === 'right') {
45
+ top = anchor.top + anchor.height / 2 - panel.height / 2;
46
+ left = anchor.right + TOOLTIP_OFFSET;
47
+ calculatedPosition = 'right';
48
+ } else if (resolved === 'top-left') {
49
+ top = anchor.top - panel.height - TOOLTIP_OFFSET;
50
+ left = anchor.left - EDGE_ALIGN_OFFSET;
51
+ calculatedPosition = 'top-left';
52
+ } else if (resolved === 'top-right') {
53
+ top = anchor.top - panel.height - TOOLTIP_OFFSET;
54
+ left = anchor.right - panel.width + EDGE_ALIGN_OFFSET;
55
+ calculatedPosition = 'top-right';
56
+ } else if (resolved === 'bottom-left') {
57
+ top = anchor.bottom + TOOLTIP_OFFSET;
58
+ left = anchor.left - EDGE_ALIGN_OFFSET;
59
+ calculatedPosition = 'bottom-left';
60
+ } else if (resolved === 'bottom-right') {
61
+ top = anchor.bottom + TOOLTIP_OFFSET;
62
+ left = anchor.right - panel.width + EDGE_ALIGN_OFFSET;
63
+ calculatedPosition = 'bottom-right';
21
64
  }
22
- return position;
23
- };
24
- // 해당 위치에 툴팁을 배치할 충분한 공간이 있는지 확인
25
- const hasEnoughSpace = (position, spaces, tooltipWidth, tooltipHeight) => {
26
- const isVertical = position === 'bottom' || position === 'top';
27
- const requiredSpace = isVertical ? tooltipHeight : tooltipWidth;
28
- return spaces[position] >= requiredSpace + MARGIN;
29
- };
30
- // 위치 계산 position='auto' 일 때 사용
31
- const calculateOptimalPosition = function (triggerElement, tooltipElement) {
32
- let preferredPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 'bottom';
33
- const triggerRect = triggerElement.getBoundingClientRect();
34
- const tooltipRect = tooltipElement.getBoundingClientRect();
35
- const {
36
- innerWidth: viewportWidth,
37
- innerHeight: viewportHeight
38
- } = window;
39
- const spaces = {
40
- top: triggerRect.top,
41
- bottom: viewportHeight - triggerRect.bottom,
42
- left: triggerRect.left,
43
- right: viewportWidth - triggerRect.right
65
+ left = Math.max(VIEWPORT_MARGIN, Math.min(left, window.innerWidth - panel.width - VIEWPORT_MARGIN));
66
+ top = Math.max(VIEWPORT_MARGIN, Math.min(top, window.innerHeight - panel.height - VIEWPORT_MARGIN));
67
+ return {
68
+ top: Math.round(top),
69
+ left: Math.round(left),
70
+ calculatedPosition
44
71
  };
45
- const tooltipWidth = tooltipRect.width || DEFAULT_TOOLTIP_WIDTH;
46
- const tooltipHeight = tooltipRect.height || DEFAULT_TOOLTIP_HEIGHT;
47
- for (const position of POSITION_PRIORITY) {
48
- if (!hasEnoughSpace(position, spaces, tooltipWidth, tooltipHeight)) {
49
- continue;
50
- }
51
- const isVertical = position === 'bottom' || position === 'top';
52
- if (isVertical) {
53
- return resolveVerticalAlignment(position, triggerRect, tooltipWidth, viewportWidth);
54
- }
55
- return position;
56
- }
57
- return preferredPosition;
58
72
  };
59
73
  export const Tooltip = _ref => {
60
74
  let {
@@ -68,31 +82,71 @@ export const Tooltip = _ref => {
68
82
  type = 'short',
69
83
  iconColor = 'var(--gray-300)',
70
84
  iconStyle = 'help-circle',
71
- className
85
+ className,
86
+ zIndex
72
87
  } = _ref;
73
88
  const iconSize = size === 'sm' ? ICON_SIZE_SM : ICON_SIZE_DEFAULT;
74
- const tooltipRef = useRef(null);
75
- const tooltipBgRef = useRef(null);
89
+ const anchorRef = useRef(null);
90
+ const panelRef = useRef(null);
91
+ const rafIdRef = useRef(null);
92
+ const [mounted, setMounted] = useState(false);
93
+ const [coords, setCoords] = useState({
94
+ top: OFFSCREEN,
95
+ left: OFFSCREEN
96
+ });
76
97
  const [calculatedPosition, setCalculatedPosition] = useState(position === 'auto' ? 'bottom' : position);
77
98
  const [isVisible, setIsVisible] = useState(false);
78
99
  const [isManuallyClose, setIsManuallyClose] = useState(false);
79
- const [isMeasuring, setIsMeasuring] = useState(false);
100
+ useEffect(() => {
101
+ setMounted(true);
102
+ return () => {
103
+ if (rafIdRef.current !== null) {
104
+ cancelAnimationFrame(rafIdRef.current);
105
+ rafIdRef.current = null;
106
+ }
107
+ };
108
+ }, []);
109
+ const updatePosition = useCallback(() => {
110
+ if (!anchorRef.current || !panelRef.current) return;
111
+ const anchor = anchorRef.current.getBoundingClientRect();
112
+ const panel = panelRef.current.getBoundingClientRect();
113
+ const next = computePanelCoords(position, anchor, panel);
114
+ setCoords({
115
+ top: next.top,
116
+ left: next.left
117
+ });
118
+ setCalculatedPosition(next.calculatedPosition);
119
+ }, [position]);
120
+ useEffect(() => {
121
+ if (!isVisible) return;
122
+ updatePosition();
123
+ window.addEventListener('resize', updatePosition, {
124
+ passive: true
125
+ });
126
+ window.addEventListener('scroll', updatePosition, {
127
+ passive: true,
128
+ capture: true
129
+ });
130
+ return () => {
131
+ window.removeEventListener('resize', updatePosition);
132
+ window.removeEventListener('scroll', updatePosition, {
133
+ capture: true
134
+ });
135
+ };
136
+ }, [isVisible, updatePosition]);
80
137
  const handleMouseEnter = useCallback(() => {
81
138
  if (isManuallyClose) return;
139
+ // opacity 전환 전에 좌표 확정 (ref 가드는 updatePosition 내부)
140
+ updatePosition();
141
+ // 웹폰트 로드·max-content 재계산 등 비동기 layout 안정화 후 한 번 더 보정
142
+ // 빠른 hover in/out 시 이전 프레임 요청은 취소해 중복/unmount 후 실행 방지
143
+ if (rafIdRef.current !== null) cancelAnimationFrame(rafIdRef.current);
144
+ rafIdRef.current = requestAnimationFrame(() => {
145
+ rafIdRef.current = null;
146
+ updatePosition();
147
+ });
82
148
  setIsVisible(true);
83
- if (position === 'auto' && tooltipRef.current && tooltipBgRef.current) {
84
- // 크기 측정을 위해 임시로 measuring 클래스 추가
85
- setIsMeasuring(true);
86
- // 다음 렌더링 사이클에서 크기 측정
87
- setTimeout(() => {
88
- if (tooltipRef.current && tooltipBgRef.current) {
89
- const optimalPosition = calculateOptimalPosition(tooltipRef.current, tooltipBgRef.current, 'bottom');
90
- setCalculatedPosition(optimalPosition);
91
- setIsMeasuring(false);
92
- }
93
- }, 0);
94
- }
95
- }, [position, isManuallyClose]);
149
+ }, [isManuallyClose, updatePosition]);
96
150
  const handleMouseLeave = useCallback(() => {
97
151
  if (type === 'short') {
98
152
  setIsVisible(false);
@@ -109,48 +163,60 @@ export const Tooltip = _ref => {
109
163
  'ncua-tooltip--stroke': iconType === 'stroke',
110
164
  'ncua-tooltip--auto': position === 'auto'
111
165
  }, className), [size, type, hideArrow, iconType, position, className]);
112
- const tooltipBgClassName = useMemo(() => classNames('ncua-tooltip__bg', `ncua-tooltip__bg--${tooltipType}`, `ncua-tooltip__bg--${finalPosition}`, {
166
+ const panelClassName = useMemo(() => classNames('ncua-tooltip-panel', 'ncua-tooltip__bg', `ncua-tooltip__bg--${tooltipType}`, `ncua-tooltip__bg--${finalPosition}`, {
113
167
  'ncua-tooltip__bg--visible': isVisible,
114
- 'ncua-tooltip__bg--measuring': isMeasuring,
115
168
  'ncua-tooltip__bg--force-hidden': isManuallyClose
116
- }), [tooltipType, finalPosition, isVisible, isMeasuring, isManuallyClose]);
117
- return _jsxs("span", {
118
- ref: tooltipRef,
119
- className: tooltipClassName,
120
- onMouseEnter: handleMouseEnter,
121
- onMouseLeave: handleMouseLeave,
122
- children: [iconStyle === 'help-circle' && (iconType === 'stroke' ? _jsx(HelpCircle, {
123
- width: iconSize,
124
- height: iconSize,
125
- color: iconColor
126
- }) : _jsx(HelpCircleFill, {
127
- width: iconSize,
128
- height: iconSize,
129
- color: iconColor
130
- })), iconStyle === 'alert-circle' && (iconType === 'stroke' ? _jsx(AlertCircle, {
131
- width: iconSize,
132
- height: iconSize,
133
- color: iconColor
134
- }) : _jsx(AlertCircleFill, {
135
- width: iconSize,
136
- height: iconSize,
137
- color: iconColor
138
- })), _jsxs("span", {
139
- ref: tooltipBgRef,
140
- className: tooltipBgClassName,
141
- children: [title && _jsx("span", {
142
- className: "ncua-tooltip__title",
143
- children: title
144
- }), content && _jsx("span", {
145
- className: "ncua-tooltip__content",
146
- children: content
147
- }), type === 'long' && _jsx(ButtonCloseX, {
148
- className: "ncua-tooltip__close-button",
149
- size: "xs",
150
- theme: tooltipType === 'white' ? 'dark' : 'light',
151
- onClick: handleCloseClick,
152
- "aria-label": "\uD234\uD301 \uB2EB\uAE30"
153
- })]
169
+ }), [tooltipType, finalPosition, isVisible, isManuallyClose]);
170
+ const panelStyle = {
171
+ top: `${coords.top}px`,
172
+ left: `${coords.left}px`,
173
+ opacity: isVisible ? 1 : 0,
174
+ ...(zIndex && {
175
+ zIndex
176
+ })
177
+ };
178
+ const portalTarget = mounted ? resolvePortalTarget() : null;
179
+ const panel = _jsxs("span", {
180
+ ref: panelRef,
181
+ className: panelClassName,
182
+ style: panelStyle,
183
+ children: [title && _jsx("span", {
184
+ className: "ncua-tooltip__title",
185
+ children: title
186
+ }), content && _jsx("span", {
187
+ className: "ncua-tooltip__content",
188
+ children: content
189
+ }), type === 'long' && _jsx(ButtonCloseX, {
190
+ className: "ncua-tooltip__close-button",
191
+ size: "xs",
192
+ theme: tooltipType === 'white' ? 'dark' : 'light',
193
+ onClick: handleCloseClick,
194
+ "aria-label": "\uD234\uD301 \uB2EB\uAE30"
154
195
  })]
155
196
  });
197
+ return _jsxs(_Fragment, {
198
+ children: [_jsxs("span", {
199
+ ref: anchorRef,
200
+ className: tooltipClassName,
201
+ onMouseEnter: handleMouseEnter,
202
+ onMouseLeave: handleMouseLeave,
203
+ children: [iconStyle === 'help-circle' && (iconType === 'stroke' ? _jsx(HelpCircle, {
204
+ width: iconSize,
205
+ height: iconSize,
206
+ color: iconColor
207
+ }) : _jsx(HelpCircleFill, {
208
+ width: iconSize,
209
+ height: iconSize,
210
+ color: iconColor
211
+ })), iconStyle === 'alert-circle' && (iconType === 'stroke' ? _jsx(AlertCircle, {
212
+ width: iconSize,
213
+ height: iconSize,
214
+ color: iconColor
215
+ }) : _jsx(AlertCircleFill, {
216
+ width: iconSize,
217
+ height: iconSize,
218
+ color: iconColor
219
+ }))]
220
+ }), portalTarget && /*#__PURE__*/createPortal(panel, portalTarget)]
221
+ });
156
222
  };
@@ -1,6 +1,6 @@
1
- export { useDropdown } from './useDropdown';
2
- export { useDropdownKeyboard } from './useDropdownKeyboard';
3
- export { useDropdownPosition } from './useDropdownPosition';
4
- export { useOutsideClick } from './useOutsideClick';
5
- export { useScrollLock } from './useScrollLock';
6
- export { useWindowResize } from './useWindowResize';
1
+ export * from './useDropdown';
2
+ export * from './useDropdownKeyboard';
3
+ export * from './useDropdownPosition';
4
+ export * from './useOutsideClick';
5
+ export * from './useScrollLock';
6
+ export * from './useWindowResize';
@@ -1,6 +1,6 @@
1
1
  // 기존 공통 hooks
2
2
  // 드롭다운 관련 hooks
3
3
  export * from './dropdown';
4
- export { useCallbackRef } from './useCallbackRef';
5
- export { useMediaQuery } from './useMediaQuery';
6
- export { useMergeRefs } from './useMergeRefs';
4
+ export * from './useCallbackRef';
5
+ export * from './useMediaQuery';
6
+ export * from './useMergeRefs';
@@ -0,0 +1,2 @@
1
+ /** AI 에이전트용 컴포넌트 메타데이터 타입 */
2
+ export {};
@@ -0,0 +1,7 @@
1
+ import { defineConfig } from 'vitest/config';
2
+ export default defineConfig({
3
+ test: {
4
+ include: ['scripts/**/__tests__/**/*.test.ts'],
5
+ environment: 'node'
6
+ }
7
+ });
@@ -1 +1,2 @@
1
1
  export * from './Badge';
2
+ export * from './utils';
@@ -1 +1,2 @@
1
1
  export * from './Badge';
2
+ export * from './utils';
@@ -106,6 +106,7 @@ const ComboBox = forwardRef(({ placeholder = '검색하세요', id, className, h
106
106
  useImperativeHandle(ref, () => internalRef.current, []);
107
107
  const trailingElement = {
108
108
  type: 'custom',
109
+ placement: 'inside',
109
110
  children: (_jsx("div", { className: "ncua-input__icon-wrap ncua-input__right-icon", onClick: showAllItem, children: _jsx(Button, { label: "\uC804\uCCB4", hierarchy: "text", size: "xxs", leadingIcon: { type: 'icon', icon: ChevronSelectorVertical } }) })),
110
111
  };
111
112
  const leadingElement = {
@@ -1,2 +1,3 @@
1
1
  export * from './DatePicker';
2
+ export * from './CustomInput';
2
3
  export * from './utils';
@@ -1,2 +1,3 @@
1
1
  export * from './DatePicker';
2
+ export * from './CustomInput';
2
3
  export * from './utils';
@@ -1,14 +1,12 @@
1
1
  import { type ButtonProps } from '../button/Button';
2
- interface ButtonOptions extends Pick<ButtonProps, 'hierarchy' | 'size' | 'leadingIcon' | 'trailingIcon'> {
2
+ export interface ButtonOptions extends Pick<ButtonProps, 'hierarchy' | 'size' | 'leadingIcon' | 'trailingIcon'> {
3
3
  label: string;
4
4
  onClick?: () => void;
5
5
  disabled?: boolean;
6
6
  }
7
- interface EmptyStateProps {
7
+ export interface EmptyStateProps {
8
8
  title: string;
9
9
  description: string;
10
10
  buttons?: ButtonOptions | ButtonOptions[];
11
11
  }
12
- declare const EmptyState: ({ title, description, buttons }: EmptyStateProps) => import("react/jsx-runtime").JSX.Element;
13
- export type { ButtonOptions };
14
- export { EmptyState };
12
+ export declare const EmptyState: ({ title, description, buttons }: EmptyStateProps) => import("react/jsx-runtime").JSX.Element;
@@ -1,7 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { Button } from '../button/Button';
3
- const EmptyState = ({ title, description, buttons }) => {
3
+ export const EmptyState = ({ title, description, buttons }) => {
4
4
  const emptyStateButtons = buttons ? (Array.isArray(buttons) ? buttons : [buttons]) : [];
5
5
  return (_jsxs("div", { className: "ncua-empty-state", children: [_jsx("p", { className: "ncua-empty-state__title", children: title }), _jsx("span", { className: "ncua-empty-state__description", children: description }), emptyStateButtons.length > 0 && (_jsx("div", { className: "ncua-empty-state__button-group", children: emptyStateButtons.map(({ size, label, ...rest }) => (_jsx(Button, { size: size ?? 'xs', label: label, ...rest }, label))) }))] }));
6
6
  };
7
- export { EmptyState };
@@ -0,0 +1 @@
1
+ export * from './ImagePreview';
@@ -0,0 +1 @@
1
+ export * from './ImagePreview';
@@ -1 +1,2 @@
1
1
  export * from './ImageFileInput';
2
+ export * from './components';
@@ -1 +1,2 @@
1
1
  export * from './ImageFileInput';
2
+ export * from './components';
@@ -0,0 +1,2 @@
1
+ export * from './SegmentBar';
2
+ export * from './SegmentLabels';
@@ -0,0 +1,2 @@
1
+ export * from './SegmentBar';
2
+ export * from './SegmentLabels';
@@ -0,0 +1 @@
1
+ export * from './useProgressBar';
@@ -0,0 +1 @@
1
+ export * from './useProgressBar';