@thewrong/ui 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (514) hide show
  1. package/README.md +25 -4
  2. package/dist/_virtual/_rolldown/runtime.cjs +1 -0
  3. package/dist/components/_shared/form-size-tokens.cjs +1 -0
  4. package/dist/{src/components → components}/_shared/form-size-tokens.d.ts +3 -1
  5. package/dist/components/_shared/form-size-tokens.esm.js +34 -0
  6. package/dist/components/action-toast/ActionToast.cjs +1 -0
  7. package/dist/{src/components → components}/action-toast/ActionToast.d.ts +17 -3
  8. package/dist/components/action-toast/ActionToast.esm.js +238 -0
  9. package/dist/{src/components → components}/action-toast/index.d.ts +2 -2
  10. package/dist/components/animated-height/AnimatedHeight.cjs +1 -0
  11. package/dist/components/animated-height/AnimatedHeight.esm.js +36 -0
  12. package/dist/components/animated-height/index.d.ts +2 -0
  13. package/dist/components/badge/Badge.cjs +1 -0
  14. package/dist/{src/components → components}/badge/Badge.d.ts +1 -1
  15. package/dist/components/badge/Badge.esm.js +26 -0
  16. package/dist/components/badge/index.d.ts +2 -0
  17. package/dist/components/badge/utils.cjs +1 -0
  18. package/dist/{src/components → components}/badge/utils.d.ts +1 -1
  19. package/dist/components/badge/utils.esm.js +38 -0
  20. package/dist/components/button/Button.cjs +1 -0
  21. package/dist/components/button/Button.d.ts +19 -0
  22. package/dist/components/button/Button.esm.js +77 -0
  23. package/dist/{src/components → components}/button/index.d.ts +2 -2
  24. package/dist/components/button/utils.cjs +1 -0
  25. package/dist/{src/components → components}/button/utils.d.ts +1 -1
  26. package/dist/components/button/utils.esm.js +38 -0
  27. package/dist/components/checkbox/Checkbox.cjs +1 -0
  28. package/dist/{src/components → components}/checkbox/Checkbox.d.ts +1 -1
  29. package/dist/components/checkbox/Checkbox.esm.js +69 -0
  30. package/dist/components/checkbox/index.d.ts +2 -0
  31. package/dist/components/checkbox/utils.cjs +1 -0
  32. package/dist/{src/components → components}/checkbox/utils.d.ts +1 -1
  33. package/dist/components/checkbox/utils.esm.js +44 -0
  34. package/dist/components/collapsible/Collapsible.cjs +1 -0
  35. package/dist/components/collapsible/Collapsible.esm.js +20 -0
  36. package/dist/components/collapsible/index.d.ts +2 -0
  37. package/dist/components/copyable-text/CopyableText.cjs +1 -0
  38. package/dist/components/copyable-text/CopyableText.d.ts +22 -0
  39. package/dist/components/copyable-text/CopyableText.esm.js +50 -0
  40. package/dist/components/copyable-text/index.d.ts +2 -0
  41. package/dist/components/date-input/DateInput.cjs +1 -0
  42. package/dist/{src/components → components}/date-input/DateInput.d.ts +1 -0
  43. package/dist/components/date-input/DateInput.esm.js +40 -0
  44. package/dist/components/date-input/index.d.ts +1 -0
  45. package/dist/components/date-picker/PickerSheet.cjs +1 -0
  46. package/dist/components/date-picker/PickerSheet.d.ts +22 -0
  47. package/dist/components/date-picker/PickerSheet.esm.js +77 -0
  48. package/dist/components/date-picker/date-picker.cjs +1 -0
  49. package/dist/{src/components → components}/date-picker/date-picker.d.ts +1 -0
  50. package/dist/components/date-picker/date-picker.esm.js +183 -0
  51. package/dist/components/date-picker/date-range-picker.cjs +1 -0
  52. package/dist/{src/components → components}/date-picker/date-range-picker.d.ts +3 -1
  53. package/dist/components/date-picker/date-range-picker.esm.js +238 -0
  54. package/dist/components/date-picker/index.d.ts +5 -0
  55. package/dist/components/date-picker/month-picker.cjs +1 -0
  56. package/dist/{src/components → components}/date-picker/month-picker.d.ts +1 -0
  57. package/dist/components/date-picker/month-picker.esm.js +103 -0
  58. package/dist/components/drawer/Drawer.cjs +1 -0
  59. package/dist/components/drawer/Drawer.d.ts +45 -0
  60. package/dist/components/drawer/Drawer.esm.js +143 -0
  61. package/dist/components/drawer/index.d.ts +2 -0
  62. package/dist/components/error-boundary/ErrorBoundary.cjs +1 -0
  63. package/dist/components/error-boundary/ErrorBoundary.d.ts +23 -0
  64. package/dist/components/error-boundary/ErrorBoundary.esm.js +46 -0
  65. package/dist/components/error-boundary/chunk-reload.cjs +1 -0
  66. package/dist/components/error-boundary/chunk-reload.d.ts +77 -0
  67. package/dist/components/error-boundary/chunk-reload.esm.js +73 -0
  68. package/dist/components/error-boundary/index.d.ts +4 -0
  69. package/dist/components/error-boundary/types.d.ts +23 -0
  70. package/dist/components/field/Field.cjs +1 -0
  71. package/dist/components/field/Field.d.ts +16 -0
  72. package/dist/components/field/Field.esm.js +34 -0
  73. package/dist/components/field/FieldMessage.cjs +1 -0
  74. package/dist/components/field/FieldMessage.d.ts +19 -0
  75. package/dist/components/field/FieldMessage.esm.js +12 -0
  76. package/dist/components/field/index.d.ts +3 -0
  77. package/dist/components/field/types.d.ts +24 -0
  78. package/dist/components/info-tooltip/InfoTooltip.cjs +1 -0
  79. package/dist/{src/components → components}/info-tooltip/InfoTooltip.d.ts +7 -0
  80. package/dist/components/info-tooltip/InfoTooltip.esm.js +25 -0
  81. package/dist/components/info-tooltip/index.d.ts +2 -0
  82. package/dist/components/input/DecimalInput.cjs +1 -0
  83. package/dist/components/input/DecimalInput.d.ts +18 -0
  84. package/dist/components/input/DecimalInput.esm.js +40 -0
  85. package/dist/components/input/Input.cjs +1 -0
  86. package/dist/{src/components → components}/input/Input.d.ts +1 -1
  87. package/dist/components/input/Input.esm.js +89 -0
  88. package/dist/components/input/PasswordInput.cjs +1 -0
  89. package/dist/{src/components → components}/input/PasswordInput.d.ts +1 -1
  90. package/dist/components/input/PasswordInput.esm.js +29 -0
  91. package/dist/components/input/decimal-validation.cjs +1 -0
  92. package/dist/components/input/decimal-validation.d.ts +7 -0
  93. package/dist/components/input/decimal-validation.esm.js +66 -0
  94. package/dist/components/input/format.cjs +1 -0
  95. package/dist/{src/components → components}/input/format.d.ts +17 -1
  96. package/dist/components/input/format.esm.js +44 -0
  97. package/dist/components/input/index.d.ts +7 -0
  98. package/dist/{src/components → components}/input/types.d.ts +2 -2
  99. package/dist/components/input/use-input-format.cjs +1 -0
  100. package/dist/components/input/use-input-format.d.ts +43 -0
  101. package/dist/components/input/use-input-format.esm.js +75 -0
  102. package/dist/components/input/utils.cjs +1 -0
  103. package/dist/{src/components → components}/input/utils.d.ts +1 -1
  104. package/dist/components/input/utils.esm.js +24 -0
  105. package/dist/components/loading-spinner/LoadingSpinner.cjs +1 -0
  106. package/dist/{src/components → components}/loading-spinner/LoadingSpinner.d.ts +7 -0
  107. package/dist/components/loading-spinner/LoadingSpinner.esm.js +48 -0
  108. package/dist/components/loading-spinner/index.d.ts +2 -0
  109. package/dist/components/modal/Modal.cjs +1 -0
  110. package/dist/{src/components → components}/modal/Modal.d.ts +34 -2
  111. package/dist/components/modal/Modal.esm.js +167 -0
  112. package/dist/components/modal/ModalFocusTrapContext.cjs +1 -0
  113. package/dist/components/modal/ModalFocusTrapContext.d.ts +18 -0
  114. package/dist/components/modal/ModalFocusTrapContext.esm.js +36 -0
  115. package/dist/components/modal/ModalSubView.cjs +1 -0
  116. package/dist/{src/components → components}/modal/ModalSubView.d.ts +6 -1
  117. package/dist/components/modal/ModalSubView.esm.js +111 -0
  118. package/dist/components/modal/StandardModal.cjs +1 -0
  119. package/dist/{src/components → components}/modal/StandardModal.d.ts +8 -2
  120. package/dist/components/modal/StandardModal.esm.js +57 -0
  121. package/dist/components/modal/index.d.ts +6 -0
  122. package/dist/components/month-range-picker/index.d.ts +2 -0
  123. package/dist/components/month-range-picker/month-range-picker.cjs +1 -0
  124. package/dist/components/month-range-picker/month-range-picker.d.ts +16 -0
  125. package/dist/components/month-range-picker/month-range-picker.esm.js +227 -0
  126. package/dist/components/month-range-picker/month-range-utils.cjs +1 -0
  127. package/dist/components/month-range-picker/month-range-utils.d.ts +9 -0
  128. package/dist/components/month-range-picker/month-range-utils.esm.js +28 -0
  129. package/dist/components/page-title/PageTitle.cjs +1 -0
  130. package/dist/components/page-title/PageTitle.esm.js +17 -0
  131. package/dist/components/page-title/index.d.ts +1 -0
  132. package/dist/components/popover/Popover.cjs +1 -0
  133. package/dist/{src/components → components}/popover/Popover.d.ts +19 -1
  134. package/dist/components/popover/Popover.esm.js +57 -0
  135. package/dist/components/popover/index.d.ts +2 -0
  136. package/dist/components/progress/Progress.cjs +1 -0
  137. package/dist/components/progress/Progress.d.ts +13 -0
  138. package/dist/components/progress/Progress.esm.js +24 -0
  139. package/dist/components/progress/index.d.ts +2 -0
  140. package/dist/components/progress/types.d.ts +13 -0
  141. package/dist/components/radio/Radio.cjs +1 -0
  142. package/dist/components/radio/Radio.d.ts +31 -0
  143. package/dist/components/radio/Radio.esm.js +118 -0
  144. package/dist/components/radio/index.d.ts +2 -0
  145. package/dist/components/radio/types.d.ts +24 -0
  146. package/dist/components/search-box/ExactMatchToggle.cjs +1 -0
  147. package/dist/components/search-box/ExactMatchToggle.esm.js +28 -0
  148. package/dist/components/search-box/SearchBox.cjs +1 -0
  149. package/dist/{src/components → components}/search-box/SearchBox.d.ts +1 -1
  150. package/dist/components/search-box/SearchBox.esm.js +155 -0
  151. package/dist/components/search-box/SearchBoxChips.cjs +1 -0
  152. package/dist/components/search-box/SearchBoxChips.esm.js +36 -0
  153. package/dist/components/search-box/SearchBoxDateRange.cjs +1 -0
  154. package/dist/{src/components → components}/search-box/SearchBoxDateRange.d.ts +1 -1
  155. package/dist/components/search-box/SearchBoxDateRange.esm.js +60 -0
  156. package/dist/components/search-box/SearchBoxDateSingle.cjs +1 -0
  157. package/dist/{src/components → components}/search-box/SearchBoxDateSingle.d.ts +1 -1
  158. package/dist/components/search-box/SearchBoxDateSingle.esm.js +39 -0
  159. package/dist/components/search-box/SearchBoxField.cjs +1 -0
  160. package/dist/{src/components → components}/search-box/SearchBoxField.d.ts +1 -1
  161. package/dist/components/search-box/SearchBoxField.esm.js +48 -0
  162. package/dist/components/search-box/SearchBoxFloatingInput.cjs +1 -0
  163. package/dist/components/search-box/SearchBoxFloatingInput.esm.js +43 -0
  164. package/dist/components/search-box/SearchBoxFloatingSelect.cjs +1 -0
  165. package/dist/{src/components → components}/search-box/SearchBoxFloatingSelect.d.ts +1 -1
  166. package/dist/components/search-box/SearchBoxFloatingSelect.esm.js +79 -0
  167. package/dist/components/search-box/SearchBoxMonth.cjs +1 -0
  168. package/dist/components/search-box/SearchBoxMonth.esm.js +36 -0
  169. package/dist/components/search-box/SearchBoxMultiSelect.cjs +1 -0
  170. package/dist/{src/components → components}/search-box/SearchBoxMultiSelect.d.ts +2 -2
  171. package/dist/components/search-box/SearchBoxMultiSelect.esm.js +83 -0
  172. package/dist/components/search-box/SearchBoxSheetContext.cjs +1 -0
  173. package/dist/components/search-box/SearchBoxSheetContext.esm.js +5 -0
  174. package/dist/components/search-box/dateRangePresets.cjs +1 -0
  175. package/dist/{src/components → components}/search-box/dateRangePresets.d.ts +1 -1
  176. package/dist/components/search-box/dateRangePresets.esm.js +59 -0
  177. package/dist/{src/components → components}/search-box/index.d.ts +5 -5
  178. package/dist/components/search-box/parseDateRange.cjs +1 -0
  179. package/dist/components/search-box/parseDateRange.esm.js +21 -0
  180. package/dist/components/search-box/parseSearchValues.cjs +1 -0
  181. package/dist/{src/components → components}/search-box/parseSearchValues.d.ts +2 -2
  182. package/dist/components/search-box/parseSearchValues.esm.js +15 -0
  183. package/dist/{src/components → components}/search-box/types.d.ts +1 -1
  184. package/dist/components/search-box/useSearchBoxState.cjs +1 -0
  185. package/dist/{src/components → components}/search-box/useSearchBoxState.d.ts +1 -1
  186. package/dist/components/search-box/useSearchBoxState.esm.js +87 -0
  187. package/dist/components/segmented-code-input/SegmentedCodeInput.cjs +1 -0
  188. package/dist/components/segmented-code-input/SegmentedCodeInput.d.ts +49 -0
  189. package/dist/components/segmented-code-input/SegmentedCodeInput.esm.js +87 -0
  190. package/dist/components/segmented-code-input/code-utils.cjs +1 -0
  191. package/dist/components/segmented-code-input/code-utils.d.ts +4 -0
  192. package/dist/components/segmented-code-input/code-utils.esm.js +9 -0
  193. package/dist/components/segmented-code-input/index.d.ts +2 -0
  194. package/dist/components/segmented-control/SegmentedControl.cjs +1 -0
  195. package/dist/components/segmented-control/SegmentedControl.d.ts +27 -0
  196. package/dist/components/segmented-control/SegmentedControl.esm.js +84 -0
  197. package/dist/components/segmented-control/index.d.ts +2 -0
  198. package/dist/components/segmented-control/types.d.ts +30 -0
  199. package/dist/components/select/MultiSelect.cjs +1 -0
  200. package/dist/{src/components → components}/select/MultiSelect.d.ts +11 -3
  201. package/dist/components/select/MultiSelect.esm.js +279 -0
  202. package/dist/components/select/Select.cjs +1 -0
  203. package/dist/{src/components → components}/select/Select.d.ts +16 -2
  204. package/dist/components/select/Select.esm.js +320 -0
  205. package/dist/components/select/index.d.ts +4 -0
  206. package/dist/components/select/loading-dots.cjs +1 -0
  207. package/dist/components/select/loading-dots.d.ts +3 -0
  208. package/dist/components/select/loading-dots.esm.js +24 -0
  209. package/dist/components/select/panel-width.cjs +1 -0
  210. package/dist/components/select/panel-width.d.ts +2 -0
  211. package/dist/components/select/panel-width.esm.js +7 -0
  212. package/dist/{src/components → components}/select/utils.d.ts +1 -1
  213. package/dist/components/skeleton/Skeleton.cjs +1 -0
  214. package/dist/components/skeleton/Skeleton.d.ts +6 -0
  215. package/dist/components/skeleton/Skeleton.esm.js +12 -0
  216. package/dist/components/skeleton/index.d.ts +2 -0
  217. package/dist/components/skeleton/types.d.ts +2 -0
  218. package/dist/components/stepper/Stepper.cjs +1 -0
  219. package/dist/components/stepper/Stepper.d.ts +51 -0
  220. package/dist/components/stepper/Stepper.esm.js +142 -0
  221. package/dist/components/stepper/index.d.ts +4 -0
  222. package/dist/components/stepper/use-stepper.cjs +1 -0
  223. package/dist/components/stepper/use-stepper.d.ts +43 -0
  224. package/dist/components/stepper/use-stepper.esm.js +57 -0
  225. package/dist/components/switch/Switch.cjs +1 -0
  226. package/dist/{src/components → components}/switch/Switch.d.ts +1 -1
  227. package/dist/components/switch/Switch.esm.js +37 -0
  228. package/dist/components/switch/index.d.ts +2 -0
  229. package/dist/components/switch/utils.cjs +1 -0
  230. package/dist/{src/components → components}/switch/utils.d.ts +2 -2
  231. package/dist/components/switch/utils.esm.js +40 -0
  232. package/dist/components/table/accordion-table.cjs +1 -0
  233. package/dist/{src/components → components}/table/accordion-table.d.ts +1 -1
  234. package/dist/components/table/accordion-table.esm.js +418 -0
  235. package/dist/components/table/column-group-utils.cjs +1 -0
  236. package/dist/{src/components → components}/table/column-group-utils.d.ts +1 -1
  237. package/dist/components/table/column-group-utils.esm.js +53 -0
  238. package/dist/components/table/components/ColumnPresetSelector.cjs +1 -0
  239. package/dist/{src/components → components}/table/components/ColumnPresetSelector.d.ts +2 -2
  240. package/dist/components/table/components/ColumnPresetSelector.esm.js +166 -0
  241. package/dist/components/table/components/ColumnSettingsTable.cjs +1 -0
  242. package/dist/{src/components → components}/table/components/ColumnSettingsTable.d.ts +1 -1
  243. package/dist/components/table/components/ColumnSettingsTable.esm.js +194 -0
  244. package/dist/components/table/components/KeyboardNavButton.cjs +1 -0
  245. package/dist/components/table/components/KeyboardNavButton.esm.js +24 -0
  246. package/dist/components/table/components/PageJumpInput.cjs +1 -0
  247. package/dist/components/table/components/PageJumpInput.esm.js +54 -0
  248. package/dist/components/table/components/Pagination.cjs +1 -0
  249. package/dist/components/table/components/Pagination.esm.js +163 -0
  250. package/dist/components/table/components/PaginationFooter.cjs +1 -0
  251. package/dist/components/table/components/PaginationFooter.esm.js +80 -0
  252. package/dist/components/table/components/SortableHeaderCell.cjs +1 -0
  253. package/dist/components/table/components/SortableHeaderCell.esm.js +30 -0
  254. package/dist/components/table/hooks/useColumnPresets.cjs +1 -0
  255. package/dist/{src/components → components}/table/hooks/useColumnPresets.d.ts +2 -2
  256. package/dist/components/table/hooks/useColumnPresets.esm.js +165 -0
  257. package/dist/components/table/hooks/useColumnResize.cjs +1 -0
  258. package/dist/{src/components → components}/table/hooks/useColumnResize.d.ts +12 -0
  259. package/dist/components/table/hooks/useColumnResize.esm.js +118 -0
  260. package/dist/components/table/hooks/useFillEmptyRows.d.ts +2 -0
  261. package/dist/components/table/hooks/useInfiniteScroll.d.ts +2 -0
  262. package/dist/components/table/hooks/useTableColumnState.cjs +1 -0
  263. package/dist/{src/components → components}/table/hooks/useTableColumnState.d.ts +1 -1
  264. package/dist/components/table/hooks/useTableColumnState.esm.js +46 -0
  265. package/dist/components/table/hooks/useTableDragSelection.d.ts +2 -0
  266. package/dist/components/table/hooks/useTableSort.cjs +1 -0
  267. package/dist/{src/components → components}/table/hooks/useTableSort.d.ts +1 -1
  268. package/dist/components/table/hooks/useTableSort.esm.js +30 -0
  269. package/dist/components/table/hooks/useVirtualTable.cjs +1 -0
  270. package/dist/components/table/hooks/useVirtualTable.esm.js +18 -0
  271. package/dist/components/table/index.d.ts +27 -0
  272. package/dist/components/table/mini-table.cjs +1 -0
  273. package/dist/{src/components → components}/table/mini-table.d.ts +1 -1
  274. package/dist/components/table/mini-table.esm.js +127 -0
  275. package/dist/components/table/paginated-mini-table.cjs +1 -0
  276. package/dist/{src/components → components}/table/paginated-mini-table.d.ts +1 -1
  277. package/dist/components/table/paginated-mini-table.esm.js +31 -0
  278. package/dist/components/table/paginated-table.cjs +1 -0
  279. package/dist/{src/components → components}/table/paginated-table.d.ts +1 -1
  280. package/dist/components/table/paginated-table.esm.js +31 -0
  281. package/dist/components/table/table.cjs +1 -0
  282. package/dist/{src/components → components}/table/table.d.ts +2 -1
  283. package/dist/components/table/table.esm.js +343 -0
  284. package/dist/components/table/utils.cjs +35 -0
  285. package/dist/{src/components → components}/table/utils.d.ts +2 -2
  286. package/dist/components/table/utils.esm.js +16 -0
  287. package/dist/components/table-checkbox/TableCheckbox.cjs +1 -0
  288. package/dist/components/table-checkbox/TableCheckbox.esm.js +40 -0
  289. package/dist/components/table-checkbox/index.d.ts +1 -0
  290. package/dist/components/table-page-layout/TablePageLayout.cjs +1 -0
  291. package/dist/components/table-page-layout/TablePageLayout.esm.js +37 -0
  292. package/dist/{src/components → components}/table-page-layout/index.d.ts +1 -1
  293. package/dist/components/textarea/Textarea.cjs +1 -0
  294. package/dist/{src/components → components}/textarea/Textarea.d.ts +1 -1
  295. package/dist/components/textarea/Textarea.esm.js +64 -0
  296. package/dist/components/textarea/index.d.ts +2 -0
  297. package/dist/components/time-picker/index.d.ts +2 -0
  298. package/dist/components/time-picker/time-picker.cjs +1 -0
  299. package/dist/components/time-picker/time-picker.d.ts +35 -0
  300. package/dist/components/time-picker/time-picker.esm.js +193 -0
  301. package/dist/components/time-picker/time-utils.cjs +1 -0
  302. package/dist/components/time-picker/time-utils.d.ts +12 -0
  303. package/dist/components/time-picker/time-utils.esm.js +56 -0
  304. package/dist/components/toast/ToastProvider.cjs +1 -0
  305. package/dist/{src/components → components}/toast/ToastProvider.d.ts +3 -0
  306. package/dist/components/toast/ToastProvider.esm.js +86 -0
  307. package/dist/components/toast/index.d.ts +3 -0
  308. package/dist/components/toast/index.esm.js +3 -0
  309. package/dist/components/toolbar/Toolbar.cjs +1 -0
  310. package/dist/{src/components → components}/toolbar/Toolbar.d.ts +1 -1
  311. package/dist/components/toolbar/Toolbar.esm.js +149 -0
  312. package/dist/components/toolbar/index.d.ts +2 -0
  313. package/dist/components/tooltip/Tooltip.cjs +1 -0
  314. package/dist/{src/components → components}/tooltip/Tooltip.d.ts +10 -0
  315. package/dist/components/tooltip/Tooltip.esm.js +39 -0
  316. package/dist/components/tooltip/index.d.ts +2 -0
  317. package/dist/components/typewriter-text/TypewriterText.cjs +1 -0
  318. package/dist/components/typewriter-text/TypewriterText.d.ts +7 -0
  319. package/dist/components/typewriter-text/TypewriterText.esm.js +58 -0
  320. package/dist/components/typewriter-text/index.d.ts +2 -0
  321. package/dist/components/typewriter-text/types.d.ts +12 -0
  322. package/dist/components/typing-dots/TypingDots.cjs +1 -0
  323. package/dist/components/typing-dots/TypingDots.d.ts +10 -0
  324. package/dist/components/typing-dots/TypingDots.esm.js +37 -0
  325. package/dist/components/typing-dots/index.d.ts +2 -0
  326. package/dist/components/typing-dots/types.d.ts +4 -0
  327. package/dist/hooks/awaitableOverlayController.cjs +1 -0
  328. package/dist/hooks/awaitableOverlayController.d.ts +6 -0
  329. package/dist/hooks/awaitableOverlayController.esm.js +18 -0
  330. package/dist/hooks/index.d.ts +17 -0
  331. package/dist/hooks/useAwaitableOverlay.cjs +1 -0
  332. package/dist/hooks/useAwaitableOverlay.d.ts +16 -0
  333. package/dist/hooks/useAwaitableOverlay.esm.js +22 -0
  334. package/dist/hooks/useBottomSheetDrag.cjs +1 -0
  335. package/dist/hooks/useBottomSheetDrag.esm.js +17 -0
  336. package/dist/hooks/useClickOutside.cjs +1 -0
  337. package/dist/hooks/useClickOutside.esm.js +20 -0
  338. package/dist/hooks/useFillEmptyRows.cjs +1 -0
  339. package/dist/{src/components/table/hooks → hooks}/useFillEmptyRows.d.ts +10 -1
  340. package/dist/hooks/useFillEmptyRows.esm.js +60 -0
  341. package/dist/hooks/useFocusTrap.cjs +1 -0
  342. package/dist/hooks/useFocusTrap.d.ts +47 -0
  343. package/dist/hooks/useFocusTrap.esm.js +210 -0
  344. package/dist/hooks/useInfiniteScroll.cjs +1 -0
  345. package/dist/hooks/useInfiniteScroll.d.ts +36 -0
  346. package/dist/hooks/useInfiniteScroll.esm.js +31 -0
  347. package/dist/hooks/useMediaQuery.cjs +1 -0
  348. package/dist/hooks/useMediaQuery.esm.js +15 -0
  349. package/dist/hooks/useScrollLock.cjs +1 -0
  350. package/dist/hooks/useScrollLock.esm.js +16 -0
  351. package/dist/hooks/useTableDragSelection.cjs +1 -0
  352. package/dist/{src/components/table/hooks → hooks}/useTableDragSelection.d.ts +3 -4
  353. package/dist/hooks/useTableDragSelection.esm.js +79 -0
  354. package/dist/hooks/useVirtualRows.cjs +1 -0
  355. package/dist/hooks/useVirtualRows.d.ts +56 -0
  356. package/dist/hooks/useVirtualRows.esm.js +20 -0
  357. package/dist/hooks.cjs +1 -0
  358. package/dist/hooks.esm.js +12 -0
  359. package/dist/index.cjs +1 -0
  360. package/dist/index.d.ts +40 -0
  361. package/dist/index.esm.js +81 -0
  362. package/dist/lib/Portal.cjs +1 -0
  363. package/dist/lib/Portal.esm.js +11 -0
  364. package/dist/lib/column-preset-storage.cjs +1 -0
  365. package/dist/lib/column-preset-storage.esm.js +123 -0
  366. package/dist/lib/index.d.ts +6 -0
  367. package/dist/lib/overlay-stack.cjs +1 -0
  368. package/dist/lib/overlay-stack.esm.js +28 -0
  369. package/dist/lib/utils.cjs +1 -0
  370. package/dist/{src/lib → lib}/utils.d.ts +2 -1
  371. package/dist/lib/utils.esm.js +114 -0
  372. package/dist/node_modules/clsx/dist/clsx.cjs +1 -0
  373. package/dist/node_modules/clsx/dist/clsx.esm.js +16 -0
  374. package/dist/node_modules/lucide-react/dist/esm/Icon.cjs +1 -0
  375. package/dist/node_modules/lucide-react/dist/esm/Icon.esm.js +23 -0
  376. package/dist/node_modules/lucide-react/dist/esm/context.cjs +1 -0
  377. package/dist/node_modules/lucide-react/dist/esm/context.esm.js +6 -0
  378. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.cjs +1 -0
  379. package/dist/node_modules/lucide-react/dist/esm/createLucideIcon.esm.js +17 -0
  380. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.cjs +1 -0
  381. package/dist/node_modules/lucide-react/dist/esm/defaultAttributes.esm.js +14 -0
  382. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.cjs +1 -0
  383. package/dist/node_modules/lucide-react/dist/esm/icons/arrow-left.esm.js +10 -0
  384. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.cjs +1 -0
  385. package/dist/node_modules/lucide-react/dist/esm/icons/calendar.esm.js +25 -0
  386. package/dist/node_modules/lucide-react/dist/esm/icons/check.cjs +1 -0
  387. package/dist/node_modules/lucide-react/dist/esm/icons/check.esm.js +7 -0
  388. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.cjs +1 -0
  389. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js +7 -0
  390. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.cjs +1 -0
  391. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js +7 -0
  392. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.cjs +1 -0
  393. package/dist/node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js +7 -0
  394. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.cjs +1 -0
  395. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-left.esm.js +10 -0
  396. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.cjs +1 -0
  397. package/dist/node_modules/lucide-react/dist/esm/icons/chevrons-right.esm.js +10 -0
  398. package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.cjs +1 -0
  399. package/dist/node_modules/lucide-react/dist/esm/icons/circle-check.esm.js +12 -0
  400. package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.cjs +1 -0
  401. package/dist/node_modules/lucide-react/dist/esm/icons/circle-x.esm.js +19 -0
  402. package/dist/node_modules/lucide-react/dist/esm/icons/clock.cjs +1 -0
  403. package/dist/node_modules/lucide-react/dist/esm/icons/clock.esm.js +12 -0
  404. package/dist/node_modules/lucide-react/dist/esm/icons/copy.cjs +1 -0
  405. package/dist/node_modules/lucide-react/dist/esm/icons/copy.esm.js +15 -0
  406. package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.cjs +1 -0
  407. package/dist/node_modules/lucide-react/dist/esm/icons/eye-off.esm.js +21 -0
  408. package/dist/node_modules/lucide-react/dist/esm/icons/eye.cjs +1 -0
  409. package/dist/node_modules/lucide-react/dist/esm/icons/eye.esm.js +12 -0
  410. package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.cjs +1 -0
  411. package/dist/node_modules/lucide-react/dist/esm/icons/grip-vertical.esm.js +41 -0
  412. package/dist/node_modules/lucide-react/dist/esm/icons/info.cjs +1 -0
  413. package/dist/node_modules/lucide-react/dist/esm/icons/info.esm.js +19 -0
  414. package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.cjs +1 -0
  415. package/dist/node_modules/lucide-react/dist/esm/icons/keyboard.esm.js +45 -0
  416. package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.cjs +1 -0
  417. package/dist/node_modules/lucide-react/dist/esm/icons/list-filter.esm.js +17 -0
  418. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.cjs +1 -0
  419. package/dist/node_modules/lucide-react/dist/esm/icons/loader-circle.esm.js +7 -0
  420. package/dist/node_modules/lucide-react/dist/esm/icons/minus.cjs +1 -0
  421. package/dist/node_modules/lucide-react/dist/esm/icons/minus.esm.js +7 -0
  422. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.cjs +1 -0
  423. package/dist/node_modules/lucide-react/dist/esm/icons/rotate-ccw.esm.js +10 -0
  424. package/dist/node_modules/lucide-react/dist/esm/icons/save.cjs +1 -0
  425. package/dist/node_modules/lucide-react/dist/esm/icons/save.esm.js +17 -0
  426. package/dist/node_modules/lucide-react/dist/esm/icons/search.cjs +1 -0
  427. package/dist/node_modules/lucide-react/dist/esm/icons/search.esm.js +12 -0
  428. package/dist/node_modules/lucide-react/dist/esm/icons/settings.cjs +1 -0
  429. package/dist/node_modules/lucide-react/dist/esm/icons/settings.esm.js +12 -0
  430. package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.cjs +1 -0
  431. package/dist/node_modules/lucide-react/dist/esm/icons/triangle-alert.esm.js +17 -0
  432. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.cjs +1 -0
  433. package/dist/node_modules/lucide-react/dist/esm/icons/wrench.esm.js +7 -0
  434. package/dist/node_modules/lucide-react/dist/esm/icons/x.cjs +1 -0
  435. package/dist/node_modules/lucide-react/dist/esm/icons/x.esm.js +10 -0
  436. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.cjs +1 -0
  437. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/hasA11yProp.esm.js +7 -0
  438. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.cjs +1 -0
  439. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/mergeClasses.esm.js +4 -0
  440. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.cjs +1 -0
  441. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toCamelCase.esm.js +4 -0
  442. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.cjs +1 -0
  443. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toKebabCase.esm.js +4 -0
  444. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.cjs +1 -0
  445. package/dist/node_modules/lucide-react/dist/esm/shared/src/utils/toPascalCase.esm.js +8 -0
  446. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.cjs +1 -0
  447. package/dist/node_modules/tailwind-merge/dist/bundle-mjs.esm.js +1723 -0
  448. package/dist/node_modules/use-debounce/dist/index.module.cjs +1 -0
  449. package/dist/node_modules/use-debounce/dist/index.module.esm.js +70 -0
  450. package/dist/tokens.css +1085 -0
  451. package/dist/ui.css +1 -1
  452. package/llms.txt +117 -0
  453. package/package.json +18 -9
  454. package/dist/index.cjs.js +0 -40
  455. package/dist/index.es.js +0 -8066
  456. package/dist/src/components/animated-height/index.d.ts +0 -2
  457. package/dist/src/components/badge/index.d.ts +0 -2
  458. package/dist/src/components/button/Button.d.ts +0 -2
  459. package/dist/src/components/checkbox/index.d.ts +0 -2
  460. package/dist/src/components/collapsible/index.d.ts +0 -2
  461. package/dist/src/components/date-input/index.d.ts +0 -1
  462. package/dist/src/components/date-picker/index.d.ts +0 -5
  463. package/dist/src/components/drawer/Drawer.d.ts +0 -18
  464. package/dist/src/components/drawer/index.d.ts +0 -2
  465. package/dist/src/components/info-tooltip/index.d.ts +0 -2
  466. package/dist/src/components/input/index.d.ts +0 -4
  467. package/dist/src/components/loading-spinner/index.d.ts +0 -2
  468. package/dist/src/components/modal/index.d.ts +0 -6
  469. package/dist/src/components/page-title/index.d.ts +0 -1
  470. package/dist/src/components/popover/index.d.ts +0 -2
  471. package/dist/src/components/select/index.d.ts +0 -4
  472. package/dist/src/components/select/loading-dots.d.ts +0 -9
  473. package/dist/src/components/switch/index.d.ts +0 -2
  474. package/dist/src/components/table/hooks/useInfiniteScroll.d.ts +0 -58
  475. package/dist/src/components/table/index.d.ts +0 -27
  476. package/dist/src/components/table-checkbox/index.d.ts +0 -1
  477. package/dist/src/components/textarea/index.d.ts +0 -2
  478. package/dist/src/components/toast/index.d.ts +0 -3
  479. package/dist/src/components/toolbar/index.d.ts +0 -2
  480. package/dist/src/components/tooltip/index.d.ts +0 -2
  481. package/dist/src/hooks/index.d.ts +0 -4
  482. package/dist/src/index.d.ts +0 -27
  483. package/dist/src/lib/index.d.ts +0 -6
  484. /package/dist/{src/components → components}/animated-height/AnimatedHeight.d.ts +0 -0
  485. /package/dist/{src/components → components}/badge/types.d.ts +0 -0
  486. /package/dist/{src/components → components}/button/types.d.ts +0 -0
  487. /package/dist/{src/components → components}/checkbox/types.d.ts +0 -0
  488. /package/dist/{src/components → components}/collapsible/Collapsible.d.ts +0 -0
  489. /package/dist/{src/components → components}/page-title/PageTitle.d.ts +0 -0
  490. /package/dist/{src/components → components}/search-box/ExactMatchToggle.d.ts +0 -0
  491. /package/dist/{src/components → components}/search-box/SearchBoxChips.d.ts +0 -0
  492. /package/dist/{src/components → components}/search-box/SearchBoxFloatingInput.d.ts +0 -0
  493. /package/dist/{src/components → components}/search-box/SearchBoxMonth.d.ts +0 -0
  494. /package/dist/{src/components → components}/search-box/SearchBoxSheetContext.d.ts +0 -0
  495. /package/dist/{src/components → components}/search-box/parseDateRange.d.ts +0 -0
  496. /package/dist/{src/components → components}/select/types.d.ts +0 -0
  497. /package/dist/{src/components → components}/switch/types.d.ts +0 -0
  498. /package/dist/{src/components → components}/table/components/KeyboardNavButton.d.ts +0 -0
  499. /package/dist/{src/components → components}/table/components/PageJumpInput.d.ts +0 -0
  500. /package/dist/{src/components → components}/table/components/Pagination.d.ts +0 -0
  501. /package/dist/{src/components → components}/table/components/PaginationFooter.d.ts +0 -0
  502. /package/dist/{src/components → components}/table/components/SortableHeaderCell.d.ts +0 -0
  503. /package/dist/{src/components → components}/table/hooks/useVirtualTable.d.ts +0 -0
  504. /package/dist/{src/components → components}/table/types.d.ts +0 -0
  505. /package/dist/{src/components → components}/table-checkbox/TableCheckbox.d.ts +0 -0
  506. /package/dist/{src/components → components}/table-page-layout/TablePageLayout.d.ts +0 -0
  507. /package/dist/{src/components → components}/textarea/types.d.ts +0 -0
  508. /package/dist/{src/hooks → hooks}/useBottomSheetDrag.d.ts +0 -0
  509. /package/dist/{src/hooks → hooks}/useClickOutside.d.ts +0 -0
  510. /package/dist/{src/hooks → hooks}/useMediaQuery.d.ts +0 -0
  511. /package/dist/{src/hooks → hooks}/useScrollLock.d.ts +0 -0
  512. /package/dist/{src/lib → lib}/Portal.d.ts +0 -0
  513. /package/dist/{src/lib → lib}/column-preset-storage.d.ts +0 -0
  514. /package/dist/{src/lib → lib}/overlay-stack.d.ts +0 -0
@@ -0,0 +1,143 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { useIsMobile as t } from "../../hooks/useMediaQuery.esm.js";
3
+ import { useScrollLock as n } from "../../hooks/useScrollLock.esm.js";
4
+ import { useFocusTrap as r } from "../../hooks/useFocusTrap.esm.js";
5
+ import { overlayStack as i } from "../../lib/overlay-stack.esm.js";
6
+ import { Portal as a } from "../../lib/Portal.esm.js";
7
+ import { ModalFocusTrapContext as o, useModalSubViews as s } from "../modal/ModalFocusTrapContext.esm.js";
8
+ import { useEffect as c, useId as l, useLayoutEffect as u, useState as d } from "react";
9
+ import { jsx as f, jsxs as p } from "react/jsx-runtime";
10
+ import { AnimatePresence as m, motion as h, useDragControls as g, useReducedMotion as _ } from "motion/react";
11
+ //#region src/components/drawer/Drawer.tsx
12
+ function v({ open: v, onClose: y, title: b, dismissible: x = !0, trapFocus: S = !0, onExitComplete: C, widthPx: w = 480, className: T, children: E }) {
13
+ let D = t(), O = {
14
+ width: w,
15
+ maxWidth: "100vw"
16
+ }, k = l(), A = l(), j = g(), M = _(), [N, P] = d(null), { context: F, isTop: I } = s(v, S, k);
17
+ u(() => {
18
+ N && (N.inert = !v);
19
+ }, [N, v]);
20
+ let L = (e, t) => {
21
+ x && (t.offset.y > 100 || t.velocity.y > 500) && y();
22
+ };
23
+ c(() => {
24
+ if (v) return i.push(k), () => {
25
+ i.pop(k);
26
+ };
27
+ }, [v, k]), n(v), r(N, {
28
+ enabled: v,
29
+ trapFocus: S,
30
+ canTrap: I
31
+ }), c(() => {
32
+ let e = (e) => {
33
+ e.key !== "Escape" || !x || I() && y();
34
+ };
35
+ return v && window.addEventListener("keydown", e), () => window.removeEventListener("keydown", e);
36
+ }, [
37
+ v,
38
+ y,
39
+ x,
40
+ I
41
+ ]);
42
+ let R = /* @__PURE__ */ p(a, { children: [/* @__PURE__ */ f(m, { children: v && /* @__PURE__ */ f(h.div, {
43
+ initial: { opacity: 0 },
44
+ animate: { opacity: 1 },
45
+ exit: { opacity: 0 },
46
+ transition: { duration: M ? 0 : .2 },
47
+ onClick: () => {
48
+ !x || !I() || y();
49
+ },
50
+ className: "fixed inset-0 z-overlay bg-bg-overlay"
51
+ }, "drawer-backdrop") }), /* @__PURE__ */ f(m, {
52
+ onExitComplete: C,
53
+ children: v && /* @__PURE__ */ p(h.div, {
54
+ ref: P,
55
+ role: "dialog",
56
+ "aria-modal": "true",
57
+ "aria-labelledby": b ? A : void 0,
58
+ tabIndex: -1,
59
+ initial: D ? { y: "100%" } : { x: "100%" },
60
+ animate: D ? { y: 0 } : { x: 0 },
61
+ exit: D ? {
62
+ y: "100%",
63
+ transition: {
64
+ duration: M ? 0 : .2,
65
+ ease: [
66
+ .4,
67
+ 0,
68
+ 1,
69
+ 1
70
+ ]
71
+ }
72
+ } : { x: "100%" },
73
+ transition: M ? { duration: 0 } : D ? {
74
+ type: "spring",
75
+ damping: 38,
76
+ stiffness: 320
77
+ } : {
78
+ type: "spring",
79
+ damping: 30,
80
+ stiffness: 280
81
+ },
82
+ drag: D && x ? "y" : !1,
83
+ dragListener: !1,
84
+ dragControls: j,
85
+ dragConstraints: {
86
+ top: 0,
87
+ bottom: 0
88
+ },
89
+ dragElastic: {
90
+ top: 0,
91
+ bottom: .4
92
+ },
93
+ onDragEnd: L,
94
+ className: e("fixed z-overlay flex flex-col overflow-x-hidden bg-bg-surface text-fg-default outline-none -bottom-8 left-0 right-0 max-h-[88vh] w-full rounded-t-sheet pb-8 sm:bottom-0 sm:left-auto sm:right-0 sm:top-0 sm:max-h-none sm:h-full sm:w-auto sm:rounded-none sm:pb-0", T),
95
+ style: D ? void 0 : O,
96
+ children: [
97
+ /* @__PURE__ */ f("div", {
98
+ className: e("flex justify-center pt-2 pb-1 cursor-grab touch-none active:cursor-grabbing sm:hidden", !x && "pointer-events-none opacity-0"),
99
+ onPointerDown: (e) => {
100
+ x && j.start(e);
101
+ },
102
+ children: /* @__PURE__ */ f("div", { className: "h-1 w-10 rounded-full bg-bg-handle" })
103
+ }),
104
+ b && /* @__PURE__ */ p("div", {
105
+ className: "flex items-center justify-between border-b border-border-subtle px-4 py-3",
106
+ children: [/* @__PURE__ */ f("h3", {
107
+ id: A,
108
+ className: "text-base font-semibold text-fg-default sm:text-lg",
109
+ children: b
110
+ }), /* @__PURE__ */ f("button", {
111
+ type: "button",
112
+ onClick: y,
113
+ disabled: !x,
114
+ className: e("rounded-control-medium p-1 text-fg-muted hover:text-fg-default", !x && "pointer-events-none opacity-0"),
115
+ "aria-label": "닫기",
116
+ children: /* @__PURE__ */ f("svg", {
117
+ className: "h-5 w-5",
118
+ fill: "none",
119
+ stroke: "currentColor",
120
+ viewBox: "0 0 24 24",
121
+ children: /* @__PURE__ */ f("path", {
122
+ strokeLinecap: "round",
123
+ strokeLinejoin: "round",
124
+ strokeWidth: 2,
125
+ d: "M6 18L18 6M6 6l12 12"
126
+ })
127
+ })
128
+ })]
129
+ }),
130
+ /* @__PURE__ */ f("div", {
131
+ className: "flex-1 overflow-auto",
132
+ children: E
133
+ })
134
+ ]
135
+ }, "drawer-sheet")
136
+ })] });
137
+ return /* @__PURE__ */ f(o.Provider, {
138
+ value: F,
139
+ children: R
140
+ });
141
+ }
142
+ //#endregion
143
+ export { v as Drawer };
@@ -0,0 +1,2 @@
1
+ export { Drawer } from './Drawer.js';
2
+ export type { DrawerProps } from './Drawer.js';
@@ -0,0 +1 @@
1
+ const e=require("./chunk-reload.cjs");let t=require("react"),n=require("react/jsx-runtime");var r={error:null,isChunkError:!1},i=class extends t.Component{constructor(...t){super(...t),this.state=r,this.reset=()=>{this.setState(r)},this.reload=()=>{this.props.chunkReloadPort?e.reloadAfterClearingChunkGuard(this.props.chunkReloadPort):typeof window<`u`&&window.location.reload()}}static getDerivedStateFromError(t){return{error:t,isChunkError:e.isChunkLoadError(t)}}componentDidCatch(t,n){let r=e.isChunkLoadError(t);this.props.onError?.(t,n,r),r&&this.props.chunkReloadPort&&e.reloadOnceForChunkError(this.props.chunkReloadPort)}render(){let{error:e,isChunkError:t}=this.state;return e?this.props.fallbackRender?this.props.fallbackRender({error:e,isChunkError:t,reset:this.reset,reload:this.reload}):(0,n.jsxs)(`div`,{role:`alert`,className:`flex flex-col items-start gap-3 rounded-control-medium border-control border-border-subtle bg-bg-surface p-4 text-fg-default`,children:[(0,n.jsx)(`p`,{children:this.props.message??`문제가 발생했습니다.`}),(0,n.jsx)(`button`,{type:`button`,className:`rounded-control-small bg-primary px-3 py-2 text-fg-inverse`,onClick:t?this.reload:this.reset,children:t?this.props.reloadLabel??`새로고침`:this.props.retryLabel??`다시 시도`})]}):this.props.children}};exports.ErrorBoundary=i;
@@ -0,0 +1,23 @@
1
+ import { Component, ErrorInfo, ReactNode } from 'react';
2
+ import { ErrorBoundaryProps } from './types.js';
3
+ interface ErrorBoundaryState {
4
+ error: Error | null;
5
+ isChunkError: boolean;
6
+ }
7
+ /**
8
+ * 자손의 렌더 오류를 포착하고 다시 시도할 수 있는 경계.
9
+ *
10
+ * 청크 오류의 자동 새로고침에는 영속 가드가 필요하다. 저장소 접근이 막히거나
11
+ * chunkReloadPort가 없으면 반복 새로고침을 피하기 위해 폴백을 유지한다.
12
+ * 포트와 fallbackRender를 주입하면 복구·안내 방식을 직접 지정할 수 있다.
13
+ * 이벤트 핸들러나 비동기 콜백의 오류는 React 경계가 포착하지 않으므로 호출부에서 처리한다.
14
+ */
15
+ export declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {
16
+ state: ErrorBoundaryState;
17
+ static getDerivedStateFromError(error: Error): ErrorBoundaryState;
18
+ componentDidCatch(error: Error, info: ErrorInfo): void;
19
+ private reset;
20
+ private reload;
21
+ render(): ReactNode;
22
+ }
23
+ export {};
@@ -0,0 +1,46 @@
1
+ import { isChunkLoadError as e, reloadAfterClearingChunkGuard as t, reloadOnceForChunkError as n } from "./chunk-reload.esm.js";
2
+ import { Component as r } from "react";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ //#region src/components/error-boundary/ErrorBoundary.tsx
5
+ var o = {
6
+ error: null,
7
+ isChunkError: !1
8
+ }, s = class extends r {
9
+ constructor(...e) {
10
+ super(...e), this.state = o, this.reset = () => {
11
+ this.setState(o);
12
+ }, this.reload = () => {
13
+ this.props.chunkReloadPort ? t(this.props.chunkReloadPort) : typeof window < "u" && window.location.reload();
14
+ };
15
+ }
16
+ static getDerivedStateFromError(t) {
17
+ return {
18
+ error: t,
19
+ isChunkError: e(t)
20
+ };
21
+ }
22
+ componentDidCatch(t, r) {
23
+ let i = e(t);
24
+ this.props.onError?.(t, r, i), i && this.props.chunkReloadPort && n(this.props.chunkReloadPort);
25
+ }
26
+ render() {
27
+ let { error: e, isChunkError: t } = this.state;
28
+ return e ? this.props.fallbackRender ? this.props.fallbackRender({
29
+ error: e,
30
+ isChunkError: t,
31
+ reset: this.reset,
32
+ reload: this.reload
33
+ }) : /* @__PURE__ */ a("div", {
34
+ role: "alert",
35
+ className: "flex flex-col items-start gap-3 rounded-control-medium border-control border-border-subtle bg-bg-surface p-4 text-fg-default",
36
+ children: [/* @__PURE__ */ i("p", { children: this.props.message ?? "문제가 발생했습니다." }), /* @__PURE__ */ i("button", {
37
+ type: "button",
38
+ className: "rounded-control-small bg-primary px-3 py-2 text-fg-inverse",
39
+ onClick: t ? this.reload : this.reset,
40
+ children: t ? this.props.reloadLabel ?? "새로고침" : this.props.retryLabel ?? "다시 시도"
41
+ })]
42
+ }) : this.props.children;
43
+ }
44
+ };
45
+ //#endregion
46
+ export { s as ErrorBoundary };
@@ -0,0 +1 @@
1
+ var e=3e4,t=null;function n(e,t){if(typeof e!=`object`||!e||!(t in e))return;let n=e[t];return typeof n==`string`?n:void 0}function r(e){if(n(e,`name`)===`ChunkLoadError`)return!0;let t=n(e,`message`);return t?/Loading chunk [\w-]+ failed/i.test(t)||/Failed to fetch dynamically imported module/i.test(t)||/error loading dynamically imported module/i.test(t)||/Importing a module script failed/i.test(t)||/Unable to preload CSS for/i.test(t):!1}function i(e,t,n){return e===null||!Number.isFinite(e)?!1:t-e<n}function a(e,n={}){let r=(n.now??Date.now)(),a=n.ttlMs??3e4,o;try{o=e.get()}catch{return!1}if(i(o,r,a)||i(t,r,a))return!1;try{if(e.set(r),e.get()!==r)return!1}catch{return!1}return t=r,!0}function o(e,t={}){let n=a(e,t);return n&&e.reload(),n}function s(e){t=null;try{e.remove()}catch{}}function c(e){s(e),e.reload()}function l(e,t=window,r=()=>!0,i,o){let s=new Set,c=t=>{let c=t.payload,l=c instanceof Error?c:Error(typeof c==`string`?c:n(c,`message`)??`Vite preload failed`),u=r(t),d=!0;try{d=o?.(t)??!0}catch{}let f=()=>{try{(typeof d==`function`?d():d)&&e.report(l,u?`navigation`:`preload`)}catch{}},p=typeof d==`function`;if(p||f(),!u&&!p)return;let m=()=>{a(e)&&e.reload()};if(i||p){let e=setTimeout(()=>{s.delete(e),p&&f(),u&&!i?.(t)&&m()},0);s.add(e)}else m()};return t.addEventListener(`vite:preloadError`,c),()=>{t.removeEventListener(`vite:preloadError`,c);for(let e of s)clearTimeout(e);s.clear()}}exports.CHUNK_RELOAD_TTL_MS=e,exports.clearChunkReloadGuard=s,exports.isChunkLoadError=r,exports.listenForChunkPreloadError=l,exports.reloadAfterClearingChunkGuard=c,exports.reloadOnceForChunkError=o,exports.tryAcquireChunkReloadGuard=a;
@@ -0,0 +1,77 @@
1
+ /** 저장·보고·새로고침을 소비자가 제공하는 청크 복구 포트. */
2
+ export interface ChunkReloadPort {
3
+ get(): number | null;
4
+ set(reloadedAt: number): void;
5
+ remove(): void;
6
+ report(error: Error, trigger: "navigation" | "preload"): void;
7
+ /** 새로고침 전 필요한 대기를 마친 뒤 reload한다. */
8
+ reload(): Promise<void>;
9
+ }
10
+ export declare const CHUNK_RELOAD_TTL_MS = 30000;
11
+ /** 브라우저와 번들러마다 다른 dynamic import 실패 형태를 판별한다. */
12
+ export declare function isChunkLoadError(error: unknown): boolean;
13
+ interface ReloadOnceOptions {
14
+ now?: () => number;
15
+ ttlMs?: number;
16
+ }
17
+ /**
18
+ * TTL 가드를 판정하고 통과하면 가드 상태를 영속한다. 이 함수는 보고나 reload를
19
+ * 실행하지 않는다. `reloadOnceForChunkError`는 가드 통과 뒤 reload까지 잇는 래퍼다.
20
+ */
21
+ export declare function tryAcquireChunkReloadGuard(port: ChunkReloadPort, options?: ReloadOnceOptions): boolean;
22
+ /**
23
+ * 청크 실패를 한 번만 자동 새로고침한다.
24
+ *
25
+ * hard reload 뒤에도 가드가 남는다는 것을 쓰기 후 재조회로 확인한 경우에만
26
+ * reload한다. 스토리지가 차단되거나 가득 찬 환경에서는 자동 복구를 포기하고
27
+ * 앱 fallback에 머문다. 메모리 가드는 영속에 성공한 같은 페이지 생명주기의
28
+ * 중복 호출만 보조한다. TTL 뒤에는 다음 배포의 복구를 허용한다.
29
+ *
30
+ * `port.reload()`를 즉시 호출한다. 가드 통과 여부만 알고 reload는 직접 제어하려는
31
+ * 호출자는 `tryAcquireChunkReloadGuard`를 쓴다.
32
+ */
33
+ export declare function reloadOnceForChunkError(port: ChunkReloadPort, options?: ReloadOnceOptions): boolean;
34
+ /** 사용자가 명시적으로 reload를 선택했을 때 다음 복구 사이클을 연다. */
35
+ export declare function clearChunkReloadGuard(port: ChunkReloadPort): void;
36
+ export declare function reloadAfterClearingChunkGuard(port: ChunkReloadPort): void;
37
+ /**
38
+ * Vite의 `vite:preloadError` payload를 보고한 뒤, 허용된 경우 1회 reload한다.
39
+ * 기본 보고는 동기이며, import catch의 식별이 필요하면 기존 다음 task에서 보고한다.
40
+ * `preventDefault()`를 호출하지 않아 Vite가 원래 실패를 다시 throw하게 둔다.
41
+ *
42
+ * 동적 import 실패에서 `preventDefault()`로 Vite의 throw를 막으면 import promise가
43
+ * `undefined`로 완료된다. TanStack `lazyRouteComponent`가 그 값을 `res[exportName]`에서
44
+ * 읽다가 원래 오류 대신 TypeError를 만들기 때문에, 원래 오류가 그대로 전파되도록 둔다.
45
+ *
46
+ * TanStack `lazyRouteComponent`는 세션의 `tanstack_router_reload:<message>` 표식이 없는
47
+ * 첫 인식 실패를 컴포넌트 렌더 중 reload한다. 이때 pending promise를 던져 route boundary를
48
+ * 건너뛸 수 있다. 실패한 import를 캐시해 후속 클릭에서 다시 import하거나 Vite 이벤트를
49
+ * 내지 않고, 캐시된 실패를 렌더에서 처리한다: 표식이 없으면 TanStack이 자체 reload하고,
50
+ * 표식이 있으면 같은 Error를 던진다. 앱의 `reportError`는 같은 Error 객체를 중복 제거한다.
51
+ *
52
+ * Vite 이벤트는 TanStack의 동작보다 먼저 발생한다. `shouldReload`는 이벤트 시점에
53
+ * 한 번 평가해 네비게이션 상태와 보고용 trigger를 보존한다. 결과가 false인 intent
54
+ * preload 실패도 보고하되 TTL 가드를 소모하거나 자체 reload를 예약하지 않는다.
55
+ * 다음 task에서 평가하는 `shouldIgnoreAfterImport`와 평가 시점이 다르다.
56
+ *
57
+ * 이동 보존: 네비게이션 발 이벤트 시점에는 주소창이 이미 목표 URL이다.
58
+ * 같은 URL을 reload하면 목표 화면에 착지하므로 별도 경로 저장은 필요 없다.
59
+ * 실측: Vite 8.1.3 + @tanstack/react-router 1.170.17의 코드 분할 라우트 이동.
60
+ *
61
+ * 무한 루프 가드: TTL 30초(`CHUNK_RELOAD_TTL_MS`) 안에서는 reload를 다시 예약하지 않는다.
62
+ * 가드에 걸리면 원래 오류가 전파되고, 경계가 수동 새로고침 화면을 보여준다.
63
+ *
64
+ * @param port 앱이 조립한 스토리지·보고·reload 경계. 다른 청크 복구 층과 같은 포트를 써야
65
+ * TTL 가드가 공유된다.
66
+ * @param target 리스너를 붙일 대상. 기본값은 `window`이며 테스트에서 교체한다.
67
+ * @param shouldReload 네비게이션 발 이벤트에 reload를 허용할지 판별한다. 원본 이벤트도
68
+ * 전달하므로 선택 기능 청크를 구분해 제외할 수 있다. 기본값은 true.
69
+ * @param shouldIgnoreAfterImport 선택 기능 import의 catch가 오류 객체를 식별할 시간을
70
+ * 주도록 다음 task에서 평가하는 reload 제외 조건. 보고는 이 판정과 무관하게 먼저 한다.
71
+ * 제외된 오류는 TTL 가드를 소모하지 않는다.
72
+ * @param shouldReport 보고 허용 조건. 함수를 반환하면 import catch 뒤 기존 다음 task에서
73
+ * 평가한다. 이 경우에도 이벤트 시점 trigger를 쓰고 reload 전에 보고한다.
74
+ * @returns 리스너를 해제하는 함수.
75
+ */
76
+ export declare function listenForChunkPreloadError(port: ChunkReloadPort, target?: Pick<Window, "addEventListener" | "removeEventListener">, shouldReload?: (event: Event) => boolean, shouldIgnoreAfterImport?: (event: Event) => boolean, shouldReport?: (event: Event) => boolean | (() => boolean)): () => void;
77
+ export {};
@@ -0,0 +1,73 @@
1
+ //#region src/components/error-boundary/chunk-reload.ts
2
+ var e = 3e4, t = null;
3
+ function n(e, t) {
4
+ if (typeof e != "object" || !e || !(t in e)) return;
5
+ let n = e[t];
6
+ return typeof n == "string" ? n : void 0;
7
+ }
8
+ function r(e) {
9
+ if (n(e, "name") === "ChunkLoadError") return !0;
10
+ let t = n(e, "message");
11
+ return t ? /Loading chunk [\w-]+ failed/i.test(t) || /Failed to fetch dynamically imported module/i.test(t) || /error loading dynamically imported module/i.test(t) || /Importing a module script failed/i.test(t) || /Unable to preload CSS for/i.test(t) : !1;
12
+ }
13
+ function i(e, t, n) {
14
+ return e === null || !Number.isFinite(e) ? !1 : t - e < n;
15
+ }
16
+ function a(e, n = {}) {
17
+ let r = (n.now ?? Date.now)(), a = n.ttlMs ?? 3e4, o;
18
+ try {
19
+ o = e.get();
20
+ } catch {
21
+ return !1;
22
+ }
23
+ if (i(o, r, a) || i(t, r, a)) return !1;
24
+ try {
25
+ if (e.set(r), e.get() !== r) return !1;
26
+ } catch {
27
+ return !1;
28
+ }
29
+ return t = r, !0;
30
+ }
31
+ function o(e, t = {}) {
32
+ let n = a(e, t);
33
+ return n && e.reload(), n;
34
+ }
35
+ function s(e) {
36
+ t = null;
37
+ try {
38
+ e.remove();
39
+ } catch {}
40
+ }
41
+ function c(e) {
42
+ s(e), e.reload();
43
+ }
44
+ function l(e, t = window, r = () => !0, i, o) {
45
+ let s = /* @__PURE__ */ new Set(), c = (t) => {
46
+ let c = t.payload, l = c instanceof Error ? c : Error(typeof c == "string" ? c : n(c, "message") ?? "Vite preload failed"), u = r(t), d = !0;
47
+ try {
48
+ d = o?.(t) ?? !0;
49
+ } catch {}
50
+ let f = () => {
51
+ try {
52
+ (typeof d == "function" ? d() : d) && e.report(l, u ? "navigation" : "preload");
53
+ } catch {}
54
+ }, p = typeof d == "function";
55
+ if (p || f(), !u && !p) return;
56
+ let m = () => {
57
+ a(e) && e.reload();
58
+ };
59
+ if (i || p) {
60
+ let e = setTimeout(() => {
61
+ s.delete(e), p && f(), u && !i?.(t) && m();
62
+ }, 0);
63
+ s.add(e);
64
+ } else m();
65
+ };
66
+ return t.addEventListener("vite:preloadError", c), () => {
67
+ t.removeEventListener("vite:preloadError", c);
68
+ for (let e of s) clearTimeout(e);
69
+ s.clear();
70
+ };
71
+ }
72
+ //#endregion
73
+ export { e as CHUNK_RELOAD_TTL_MS, s as clearChunkReloadGuard, r as isChunkLoadError, l as listenForChunkPreloadError, c as reloadAfterClearingChunkGuard, o as reloadOnceForChunkError, a as tryAcquireChunkReloadGuard };
@@ -0,0 +1,4 @@
1
+ export { ErrorBoundary } from './ErrorBoundary.js';
2
+ export type { ErrorBoundaryProps, ErrorBoundaryFallbackProps } from './types.js';
3
+ export { CHUNK_RELOAD_TTL_MS, isChunkLoadError, tryAcquireChunkReloadGuard, reloadOnceForChunkError, clearChunkReloadGuard, reloadAfterClearingChunkGuard, listenForChunkPreloadError, } from './chunk-reload.js';
4
+ export type { ChunkReloadPort } from './chunk-reload.js';
@@ -0,0 +1,23 @@
1
+ import { ErrorInfo, ReactNode } from 'react';
2
+ import { ChunkReloadPort } from './chunk-reload.js';
3
+ export interface ErrorBoundaryFallbackProps {
4
+ error: Error;
5
+ isChunkError: boolean;
6
+ reset: () => void;
7
+ reload: () => void;
8
+ }
9
+ export interface ErrorBoundaryProps {
10
+ children: ReactNode;
11
+ /** 영속 가드와 보고·새로고침 구현. 없으면 청크 자동 새로고침을 시도하지 않는다. */
12
+ chunkReloadPort?: ChunkReloadPort;
13
+ /** 기본 안내 대신 표시할 폴백. reset과 reload를 직접 연결할 수 있다. */
14
+ fallbackRender?: (props: ErrorBoundaryFallbackProps) => ReactNode;
15
+ /** 기본 폴백의 안내 문구. */
16
+ message?: string;
17
+ /** 일반 오류에서 다시 렌더할 버튼의 문구. */
18
+ retryLabel?: string;
19
+ /** 청크 오류에서 페이지를 새로고침할 버튼의 문구. */
20
+ reloadLabel?: string;
21
+ /** 청크 오류를 포함한 렌더 오류마다 호출된다. */
22
+ onError?: (error: Error, errorInfo: ErrorInfo, isChunkError: boolean) => void;
23
+ }
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs");let t=require("react/jsx-runtime");function n({label:n,htmlFor:r,rightLabel:i,className:a,required:o,optional:s,children:c}){let l=i!=null&&typeof i!=`string`;return(0,t.jsxs)(`div`,{className:e.cn(`space-y-1.5`,a),children:[(0,t.jsxs)(`div`,{className:e.cn(`flex items-center justify-between`,!l&&`h-4`),children:[(0,t.jsxs)(`label`,{htmlFor:r,className:`block text-xs leading-4 font-medium text-fg-muted`,children:[n,o&&(0,t.jsx)(`span`,{"aria-hidden":`true`,className:`ml-1 text-fg-danger`,children:`*`}),!o&&s&&(0,t.jsx)(`span`,{className:`ml-1 text-fg-subtle`,children:`(선택)`})]}),typeof i==`string`?(0,t.jsx)(`span`,{style:{lineHeight:`16px`},className:`text-[11px] text-fg-subtle`,children:i}):i]}),c]})}exports.Field=n;
@@ -0,0 +1,16 @@
1
+ import { FieldProps } from './types.js';
2
+ /**
3
+ * 라벨 + 우측 보조 텍스트 + 컨트롤을 묶는 폼 필드 래퍼.
4
+ * 모달 폼 및 일반 폼에서 공통 사용.
5
+ *
6
+ * @example
7
+ * <Field label="이름" required>
8
+ * <Input variant="box" placeholder="이름을 입력하세요" />
9
+ * </Field>
10
+ *
11
+ * @example
12
+ * <Field label="금액" rightLabel="최대 100만원">
13
+ * <Input variant="box" suffix="원" />
14
+ * </Field>
15
+ */
16
+ export declare function Field({ label, htmlFor, rightLabel, className, required, optional, children, }: FieldProps): import("react").JSX.Element;
@@ -0,0 +1,34 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/components/field/Field.tsx
4
+ function r({ label: r, htmlFor: i, rightLabel: a, className: o, required: s, optional: c, children: l }) {
5
+ let u = a != null && typeof a != "string";
6
+ return /* @__PURE__ */ n("div", {
7
+ className: e("space-y-1.5", o),
8
+ children: [/* @__PURE__ */ n("div", {
9
+ className: e("flex items-center justify-between", !u && "h-4"),
10
+ children: [/* @__PURE__ */ n("label", {
11
+ htmlFor: i,
12
+ className: "block text-xs leading-4 font-medium text-fg-muted",
13
+ children: [
14
+ r,
15
+ s && /* @__PURE__ */ t("span", {
16
+ "aria-hidden": "true",
17
+ className: "ml-1 text-fg-danger",
18
+ children: "*"
19
+ }),
20
+ !s && c && /* @__PURE__ */ t("span", {
21
+ className: "ml-1 text-fg-subtle",
22
+ children: "(선택)"
23
+ })
24
+ ]
25
+ }), typeof a == "string" ? /* @__PURE__ */ t("span", {
26
+ style: { lineHeight: "16px" },
27
+ className: "text-[11px] text-fg-subtle",
28
+ children: a
29
+ }) : a]
30
+ }), l]
31
+ });
32
+ }
33
+ //#endregion
34
+ export { r as Field };
@@ -0,0 +1 @@
1
+ const e=require("../animated-height/AnimatedHeight.cjs");let t=require("react/jsx-runtime");function n({children:n,animated:r=!1,...i}){let a=n?(0,t.jsx)(`div`,{...i,children:n}):null;return r?(0,t.jsx)(e.AnimatedHeight,{children:a}):a}exports.FieldMessage=n;
@@ -0,0 +1,19 @@
1
+ import { HTMLAttributes, ReactNode } from 'react';
2
+ export interface FieldMessageProps extends Omit<HTMLAttributes<HTMLDivElement>, "children"> {
3
+ children?: ReactNode;
4
+ /** 메시지가 나타나고 사라질 때 높이를 부드럽게 전환한다. */
5
+ animated?: boolean;
6
+ }
7
+ /**
8
+ * 폼 컨트롤 아래의 도움말·검증 메시지 영역.
9
+ *
10
+ * 조건부 메시지를 애니메이션하려면 컴포넌트 자체는 유지하고 children만 바꾼다.
11
+ *
12
+ * @example
13
+ * ```tsx
14
+ * <FieldMessage animated className="mt-1 text-xs text-fg-danger">
15
+ * {errorMessage}
16
+ * </FieldMessage>
17
+ * ```
18
+ */
19
+ export declare function FieldMessage({ children, animated, ...messageProps }: FieldMessageProps): import("react").JSX.Element | null;
@@ -0,0 +1,12 @@
1
+ import { AnimatedHeight as e } from "../animated-height/AnimatedHeight.esm.js";
2
+ import { jsx as t } from "react/jsx-runtime";
3
+ //#region src/components/field/FieldMessage.tsx
4
+ function n({ children: n, animated: r = !1, ...i }) {
5
+ let a = n ? /* @__PURE__ */ t("div", {
6
+ ...i,
7
+ children: n
8
+ }) : null;
9
+ return r ? /* @__PURE__ */ t(e, { children: a }) : a;
10
+ }
11
+ //#endregion
12
+ export { n as FieldMessage };
@@ -0,0 +1,3 @@
1
+ export { Field } from './Field.js';
2
+ export { FieldMessage, type FieldMessageProps } from './FieldMessage.js';
3
+ export type { FieldProps } from './types.js';
@@ -0,0 +1,24 @@
1
+ export interface FieldProps {
2
+ /** 라벨 텍스트. */
3
+ label: string;
4
+ /** 연결할 폼 컨트롤 id. 제공하면 label의 htmlFor로 전달된다. */
5
+ htmlFor?: string;
6
+ /**
7
+ * 라벨 우측 보조 텍스트 또는 노드(버튼·뱃지 등).
8
+ * string이면 자동으로 옅은 보조 스타일(fg-subtle) 적용.
9
+ */
10
+ rightLabel?: React.ReactNode;
11
+ /** 외부 그리드에서 필드 셀의 배치를 조정할 때 사용하는 추가 className. */
12
+ className?: string;
13
+ /**
14
+ * 필수 표시를 라벨 뒤에 추가한다. 접근성을 위해 실제 입력에도 required를 지정한다.
15
+ * `optional`과 동시 사용 시 `required`가 우선한다.
16
+ */
17
+ required?: boolean;
18
+ /**
19
+ * 선택 필드 — 라벨 뒤에 `(선택)` 표시.
20
+ * `required`와 동시 사용 시 `required` 우선.
21
+ */
22
+ optional?: boolean;
23
+ children: React.ReactNode;
24
+ }
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs");let t=require("react/jsx-runtime");function n({content:n,position:r=`top`}){return(0,t.jsxs)(`div`,{className:`relative inline-flex items-center group`,children:[(0,t.jsx)(`div`,{className:`w-3.5 h-3.5 rounded-full bg-primary flex items-center justify-center cursor-help hover:bg-primary-hover transition-colors`,children:(0,t.jsx)(`span`,{className:`text-[9px] font-bold text-fg-inverse`,children:`?`})}),(0,t.jsxs)(`div`,{className:e.cn(`absolute z-floating px-3 py-2 bg-bg-tooltip text-fg-tooltip text-xs rounded-tooltip shadow-overlay opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 pointer-events-none w-64 whitespace-normal`,{top:`bottom-full left-1/2 -translate-x-1/2 mb-2`,bottom:`top-full left-1/2 -translate-x-1/2 mt-2`,left:`right-full top-1/2 -translate-y-1/2 mr-2`,right:`left-full top-1/2 -translate-y-1/2 ml-2`}[r]),children:[n,(0,t.jsx)(`div`,{className:e.cn(`absolute w-2 h-2 bg-bg-tooltip transform rotate-45`,r===`top`?`bottom-[-4px] left-1/2 -translate-x-1/2`:r===`bottom`?`top-[-4px] left-1/2 -translate-x-1/2`:r===`left`?`right-[-4px] top-1/2 -translate-y-1/2`:`left-[-4px] top-1/2 -translate-y-1/2`)})]})]})}exports.InfoTooltip=n;
@@ -7,5 +7,12 @@ export interface InfoTooltipProps {
7
7
  * 정보 툴팁 컴포넌트
8
8
  *
9
9
  * `?` 아이콘에 마우스 호버 시 툴팁을 표시해요. CSS group-hover 기반의 단순 구현.
10
+ *
11
+ * 라벨 옆 보조 설명에 쓴다. `content`가 ReactNode라 강조·줄바꿈이 자유롭다(string만이면 `Tooltip`).
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <label>정산 주기 <InfoTooltip content={<>영업일 기준 <b>D+2</b></>} /></label>
16
+ * ```
10
17
  */
11
18
  export declare function InfoTooltip({ content, position }: InfoTooltipProps): import("react").JSX.Element;
@@ -0,0 +1,25 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { jsx as t, jsxs as n } from "react/jsx-runtime";
3
+ //#region src/components/info-tooltip/InfoTooltip.tsx
4
+ function r({ content: r, position: i = "top" }) {
5
+ return /* @__PURE__ */ n("div", {
6
+ className: "relative inline-flex items-center group",
7
+ children: [/* @__PURE__ */ t("div", {
8
+ className: "w-3.5 h-3.5 rounded-full bg-primary flex items-center justify-center cursor-help hover:bg-primary-hover transition-colors",
9
+ children: /* @__PURE__ */ t("span", {
10
+ className: "text-[9px] font-bold text-fg-inverse",
11
+ children: "?"
12
+ })
13
+ }), /* @__PURE__ */ n("div", {
14
+ className: e("absolute z-floating px-3 py-2 bg-bg-tooltip text-fg-tooltip text-xs rounded-tooltip shadow-overlay opacity-0 invisible group-hover:opacity-100 group-hover:visible transition-all duration-200 pointer-events-none w-64 whitespace-normal", {
15
+ top: "bottom-full left-1/2 -translate-x-1/2 mb-2",
16
+ bottom: "top-full left-1/2 -translate-x-1/2 mt-2",
17
+ left: "right-full top-1/2 -translate-y-1/2 mr-2",
18
+ right: "left-full top-1/2 -translate-y-1/2 ml-2"
19
+ }[i]),
20
+ children: [r, /* @__PURE__ */ t("div", { className: e("absolute w-2 h-2 bg-bg-tooltip transform rotate-45", i === "top" ? "bottom-[-4px] left-1/2 -translate-x-1/2" : i === "bottom" ? "top-[-4px] left-1/2 -translate-x-1/2" : i === "left" ? "right-[-4px] top-1/2 -translate-y-1/2" : "left-[-4px] top-1/2 -translate-y-1/2") })]
21
+ })]
22
+ });
23
+ }
24
+ //#endregion
25
+ export { r as InfoTooltip };
@@ -0,0 +1,2 @@
1
+ export { InfoTooltip } from './InfoTooltip.js';
2
+ export type { InfoTooltipProps } from './InfoTooltip.js';
@@ -0,0 +1 @@
1
+ const e=require("./Input.cjs"),t=require("./decimal-validation.cjs");let n=require("react"),r=require("react/jsx-runtime");function i(e){return e==null?``:String(e)}var a=(0,n.forwardRef)(({value:a,defaultValue:o,onChange:s,decimalPlaces:c=2,allowNegative:l=!1,emitEmpty:u=!1,min:d,max:f,onBlur:p,...m},h)=>{let g=a!==void 0,[_,v]=(0,n.useState)(()=>i(a??o)),[y,b]=(0,n.useState)(()=>i(a??o));(0,n.useEffect)(()=>{if(g){let e=i(a);v(e),b(e)}},[g,a]);let x=e=>{let n=t.validateDecimalDraft(e,{decimalPlaces:c,allowNegative:l,min:d,max:f});n!==`reject`&&(v(e),n===`empty`?u&&s?.(e):n===`value`&&(b(e),s?.(e)))};return(0,r.jsx)(e.Input,{...m,ref:h,type:`text`,inputMode:`decimal`,value:_,onChange:e=>x(e.target.value),onBlur:e=>{_!==y&&v(y),p?.(e)}})});a.displayName=`DecimalInput`,exports.DecimalInput=a;
@@ -0,0 +1,18 @@
1
+ import { InputProps } from './types.js';
2
+ export interface DecimalInputProps extends Omit<InputProps, "value" | "defaultValue" | "onChange" | "type"> {
3
+ value?: string | number | null;
4
+ defaultValue?: string | number | null;
5
+ onChange?: (value: string) => void;
6
+ /** 허용할 소수 자릿수. 0 이상의 유한한 정수로 지정한다. 기본 2. */
7
+ decimalPlaces?: number;
8
+ /** 음수 입력 허용. 기본 false. */
9
+ allowNegative?: boolean;
10
+ /** 빈 값을 onChange로 전달할지 여부. 기본 false. */
11
+ emitEmpty?: boolean;
12
+ min?: number;
13
+ max?: number;
14
+ }
15
+ /** 소수 입력을 문자열로 전달한다. 범위 밖이지만 완성 가능한 접두사는 임시로 유지하고
16
+ * 포커스를 잃으면 마지막 유효 값으로 복원한다. 빈 값도 전달하려면 emitEmpty를 켠다.
17
+ * Input의 variant는 필수이며 소수점 자릿수와 범위는 호출부에서 지정한다. */
18
+ export declare const DecimalInput: import('react').ForwardRefExoticComponent<DecimalInputProps & import('react').RefAttributes<HTMLInputElement>>;
@@ -0,0 +1,40 @@
1
+ import { Input as e } from "./Input.esm.js";
2
+ import { validateDecimalDraft as t } from "./decimal-validation.esm.js";
3
+ import { forwardRef as n, useEffect as r, useState as i } from "react";
4
+ import { jsx as a } from "react/jsx-runtime";
5
+ //#region src/components/input/DecimalInput.tsx
6
+ function o(e) {
7
+ return e == null ? "" : String(e);
8
+ }
9
+ var s = n(({ value: n, defaultValue: s, onChange: c, decimalPlaces: l = 2, allowNegative: u = !1, emitEmpty: d = !1, min: f, max: p, onBlur: m, ...h }, g) => {
10
+ let _ = n !== void 0, [v, y] = i(() => o(n ?? s)), [b, x] = i(() => o(n ?? s));
11
+ r(() => {
12
+ if (_) {
13
+ let e = o(n);
14
+ y(e), x(e);
15
+ }
16
+ }, [_, n]);
17
+ let S = (e) => {
18
+ let n = t(e, {
19
+ decimalPlaces: l,
20
+ allowNegative: u,
21
+ min: f,
22
+ max: p
23
+ });
24
+ n !== "reject" && (y(e), n === "empty" ? d && c?.(e) : n === "value" && (x(e), c?.(e)));
25
+ };
26
+ return /* @__PURE__ */ a(e, {
27
+ ...h,
28
+ ref: g,
29
+ type: "text",
30
+ inputMode: "decimal",
31
+ value: v,
32
+ onChange: (e) => S(e.target.value),
33
+ onBlur: (e) => {
34
+ v !== b && y(b), m?.(e);
35
+ }
36
+ });
37
+ });
38
+ s.displayName = "DecimalInput";
39
+ //#endregion
40
+ export { s as DecimalInput };