@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,183 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { ChevronDown as t } from "../../node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js";
3
+ import { ChevronLeft as n } from "../../node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js";
4
+ import { ChevronRight as r } from "../../node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js";
5
+ import { AnimatedHeight as i } from "../animated-height/AnimatedHeight.esm.js";
6
+ import { PickerSheet as a, usePickerMobile as o } from "./PickerSheet.esm.js";
7
+ import { useMemo as s, useState as c } from "react";
8
+ import { Fragment as l, jsx as u, jsxs as d } from "react/jsx-runtime";
9
+ import { autoUpdate as f, flip as p, offset as m, shift as h, useClick as g, useDismiss as _, useFloating as v, useInteractions as y, useRole as b } from "@floating-ui/react";
10
+ import { addMonths as x, eachDayOfInterval as S, endOfMonth as C, endOfWeek as w, format as T, isSameDay as E, isSameMonth as D, isValid as O, parseISO as k, startOfMonth as A, startOfWeek as j, subMonths as M } from "date-fns";
11
+ import { ko as N } from "date-fns/locale";
12
+ //#region src/components/date-picker/date-picker.tsx
13
+ var P = 24;
14
+ function F({ children: e, value: t, onApply: n, disabled: r, disableMobileSheet: i }) {
15
+ let [s, x] = c(!1), { useSheet: S } = o(i), { refs: C, floatingStyles: w, context: T } = v({
16
+ open: s,
17
+ onOpenChange: (e) => {
18
+ r || x(e);
19
+ },
20
+ placement: "bottom-start",
21
+ whileElementsMounted: f,
22
+ middleware: [
23
+ m(8),
24
+ p({ fallbackAxisSideDirection: "start" }),
25
+ h({ padding: 8 })
26
+ ]
27
+ }), { getReferenceProps: E, getFloatingProps: D } = y([
28
+ g(T, { enabled: !r }),
29
+ _(T),
30
+ b(T, { role: "dialog" })
31
+ ]), O = (e) => {
32
+ n(e), x(!1);
33
+ };
34
+ return /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u("span", {
35
+ ref: C.setReference,
36
+ ...E(),
37
+ className: "inline-flex",
38
+ children: e
39
+ }), /* @__PURE__ */ u(a, {
40
+ isOpen: s,
41
+ onClose: () => x(!1),
42
+ useSheet: S,
43
+ context: T,
44
+ setFloating: C.setFloating,
45
+ floatingStyles: w,
46
+ getFloatingProps: D,
47
+ desktopClassName: "z-floating w-80 rounded-2xl border border-border-subtle bg-bg-surface text-fg-default p-6 shadow-tooltip",
48
+ children: /* @__PURE__ */ u(I, {
49
+ initialValue: t,
50
+ onApply: O,
51
+ onClose: () => x(!1)
52
+ })
53
+ })] });
54
+ }
55
+ function I({ initialValue: e, onApply: t, onClose: n }) {
56
+ let r = z(e), [i, a] = c(r), [o, s] = c(r ?? /* @__PURE__ */ new Date());
57
+ return /* @__PURE__ */ d(l, { children: [/* @__PURE__ */ u(L, {
58
+ month: o,
59
+ onMonthChange: s,
60
+ onPrev: () => s(M(o, 1)),
61
+ onNext: () => s(x(o, 1)),
62
+ selected: i,
63
+ onDayClick: (e) => a(e)
64
+ }), /* @__PURE__ */ d("div", {
65
+ className: "mt-6 flex items-center justify-end gap-2",
66
+ children: [/* @__PURE__ */ u("button", {
67
+ type: "button",
68
+ onClick: n,
69
+ className: "cursor-pointer rounded-full bg-bg-subtle px-5 py-2 text-sm font-semibold text-fg-muted transition-colors hover:bg-bg-muted",
70
+ children: "닫기"
71
+ }), /* @__PURE__ */ u("button", {
72
+ type: "button",
73
+ onClick: () => {
74
+ if (!i) {
75
+ n();
76
+ return;
77
+ }
78
+ t(T(i, "yyyy-MM-dd"));
79
+ },
80
+ className: "cursor-pointer rounded-full bg-primary px-5 py-2 text-sm font-semibold text-fg-inverse transition-opacity hover:opacity-90",
81
+ children: "적용"
82
+ })]
83
+ })] });
84
+ }
85
+ function L({ month: n, onMonthChange: r, onPrev: a, onNext: o, selected: l, onDayClick: f }) {
86
+ let [p, m] = c(!1), h = s(() => S({
87
+ start: j(A(n), { weekStartsOn: 0 }),
88
+ end: w(C(n), { weekStartsOn: 0 })
89
+ }), [n]), g = s(() => {
90
+ let e = [];
91
+ for (let t = -24; t <= P; t++) e.push(x(A(/* @__PURE__ */ new Date()), t));
92
+ return e;
93
+ }, []);
94
+ return /* @__PURE__ */ d("div", {
95
+ className: "mx-auto flex w-full max-w-75 flex-col sm:w-65",
96
+ children: [
97
+ /* @__PURE__ */ d("div", {
98
+ className: "mb-4 flex items-center justify-between",
99
+ children: [
100
+ /* @__PURE__ */ u(R, {
101
+ direction: "left",
102
+ onClick: a
103
+ }),
104
+ /* @__PURE__ */ d("div", {
105
+ className: "relative flex flex-1 justify-center",
106
+ children: [/* @__PURE__ */ d("button", {
107
+ type: "button",
108
+ onClick: () => m((e) => !e),
109
+ className: "flex cursor-pointer items-center gap-1 rounded px-3 py-1.5 text-sm font-semibold text-fg-default transition-colors hover:bg-bg-subtle",
110
+ children: [T(n, "yyyy. MM."), /* @__PURE__ */ u(t, { className: "h-3.5 w-3.5 text-fg-subtle" })]
111
+ }), p && /* @__PURE__ */ u("div", {
112
+ className: "scrollbar-brand absolute top-full z-20 mt-1 max-h-60 w-35 overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface py-1 shadow-overlay",
113
+ children: g.map((t) => /* @__PURE__ */ u("button", {
114
+ type: "button",
115
+ onClick: () => {
116
+ r(t), m(!1);
117
+ },
118
+ className: e("w-full cursor-pointer bg-bg-surface px-4 py-2 text-left text-sm transition-colors", D(t, n) ? "bg-bg-muted font-semibold text-fg-default" : "text-fg-muted hover:bg-bg-subtle"),
119
+ children: T(t, "yyyy. MM.")
120
+ }, t.toISOString()))
121
+ })]
122
+ }),
123
+ /* @__PURE__ */ u(R, {
124
+ direction: "right",
125
+ onClick: o
126
+ })
127
+ ]
128
+ }),
129
+ /* @__PURE__ */ u("div", {
130
+ className: "mb-2 grid grid-cols-7",
131
+ children: [
132
+ "일",
133
+ "월",
134
+ "화",
135
+ "수",
136
+ "목",
137
+ "금",
138
+ "토"
139
+ ].map((e) => /* @__PURE__ */ u("div", {
140
+ className: "py-1 text-center text-xs font-medium text-fg-subtle",
141
+ children: e
142
+ }, e))
143
+ }),
144
+ /* @__PURE__ */ u(i, { children: /* @__PURE__ */ u("div", {
145
+ className: "grid grid-cols-7 gap-y-1",
146
+ children: h.map((t) => {
147
+ let i = D(t, n), a = !!(l && E(t, l));
148
+ return /* @__PURE__ */ d("button", {
149
+ type: "button",
150
+ onClick: () => {
151
+ i || r(t), f(t);
152
+ },
153
+ className: "group relative flex h-9 cursor-pointer items-center justify-center text-sm",
154
+ "aria-label": T(t, "yyyy년 M월 d일", { locale: N }),
155
+ children: [a && /* @__PURE__ */ u("span", {
156
+ className: "absolute left-1/2 top-1/2 h-9 w-9 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary",
157
+ "aria-hidden": !0
158
+ }), /* @__PURE__ */ u("span", {
159
+ className: e("relative z-10", !i && "text-fg-disabled", i && !a && "text-fg-default", a && "font-bold text-fg-inverse"),
160
+ children: T(t, "d")
161
+ })]
162
+ }, t.toISOString());
163
+ })
164
+ }) })
165
+ ]
166
+ });
167
+ }
168
+ function R({ direction: e, onClick: t }) {
169
+ return /* @__PURE__ */ u("button", {
170
+ type: "button",
171
+ onClick: t,
172
+ className: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border-subtle text-fg-muted transition-colors hover:bg-bg-subtle",
173
+ "aria-label": e === "left" ? "이전 달" : "다음 달",
174
+ children: /* @__PURE__ */ u(e === "left" ? n : r, { className: "h-4 w-4" })
175
+ });
176
+ }
177
+ function z(e) {
178
+ if (!e) return null;
179
+ let t = k(e);
180
+ return O(t) ? t : null;
181
+ }
182
+ //#endregion
183
+ export { F as DatePicker, I as DatePickerBody };
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs"),t=require("../../node_modules/lucide-react/dist/esm/icons/chevron-down.cjs"),n=require("../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),r=require("../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),i=require("./PickerSheet.cjs");let a=require("react"),o=require("react/jsx-runtime"),s=require("@floating-ui/react"),c=require("date-fns"),l=require("date-fns/locale");var u=24;function d({children:e,value:t,onApply:n,disabled:r,disableMobileSheet:c}){let[l,u]=(0,a.useState)(!1),{isMobile:d,useSheet:p}=i.usePickerMobile(c),{refs:m,floatingStyles:h,context:g}=(0,s.useFloating)({open:l,onOpenChange:e=>{r||u(e)},placement:`bottom-start`,whileElementsMounted:s.autoUpdate,middleware:[(0,s.offset)(8),(0,s.flip)({fallbackAxisSideDirection:`start`}),(0,s.shift)({padding:8})]}),{getReferenceProps:_,getFloatingProps:v}=(0,s.useInteractions)([(0,s.useClick)(g,{enabled:!r}),(0,s.useDismiss)(g),(0,s.useRole)(g,{role:`dialog`})]),y=e=>{n(e),u(!1)};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`span`,{ref:m.setReference,..._(),className:`inline-flex`,children:e}),(0,o.jsx)(i.PickerSheet,{isOpen:l,onClose:()=>u(!1),useSheet:p,context:g,setFloating:m.setFloating,floatingStyles:h,getFloatingProps:v,desktopClassName:`z-floating rounded-2xl border border-border-subtle bg-bg-surface text-fg-default p-6 shadow-tooltip`,children:(0,o.jsx)(f,{value:t,isMobile:d,onApply:y,onClose:()=>u(!1)})})]})}function f({value:e,isMobile:t,onApply:n,onClose:r}){let i=h(e?.from),s=h(e?.to),[l,u]=(0,a.useState)(i),[d,f]=(0,a.useState)(s),[m,g]=(0,a.useState)(i??new Date),_=(0,c.addMonths)(m,1),v=e=>{if(!l||l&&d){u(e),f(null);return}if((0,c.isBefore)(e,l)){u(e),f(null);return}f(e)},y=(0,o.jsxs)(`div`,{className:`mt-6 flex items-center justify-end gap-2`,children:[(0,o.jsx)(`button`,{type:`button`,onClick:r,className:`cursor-pointer rounded-full bg-bg-subtle px-5 py-2 text-sm font-semibold text-fg-muted transition-colors hover:bg-bg-muted`,children:`닫기`}),(0,o.jsx)(`button`,{type:`button`,onClick:()=>{if(!l){r();return}n({from:(0,c.format)(l,`yyyy-MM-dd`),to:(0,c.format)(d??l,`yyyy-MM-dd`)})},className:`cursor-pointer rounded-full bg-primary px-5 py-2 text-sm font-semibold text-fg-inverse transition-opacity hover:opacity-90`,children:`적용`})]});return t?(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(`div`,{className:`flex justify-center`,children:(0,o.jsx)(p,{month:m,onMonthChange:g,onPrev:()=>g((0,c.subMonths)(m,1)),onNext:()=>g((0,c.addMonths)(m,1)),showPrev:!0,showNext:!0,rangeFrom:l,rangeTo:d,onDayClick:v})}),y]}):(0,o.jsxs)(o.Fragment,{children:[(0,o.jsxs)(`div`,{className:`flex items-stretch gap-8`,children:[(0,o.jsx)(p,{month:m,onMonthChange:g,onPrev:()=>g((0,c.subMonths)(m,1)),showPrev:!0,rangeFrom:l,rangeTo:d,onDayClick:v}),(0,o.jsx)(`div`,{className:`w-px bg-border-subtle`}),(0,o.jsx)(p,{month:_,onMonthChange:e=>g((0,c.subMonths)(e,1)),onNext:()=>g((0,c.addMonths)(m,1)),showNext:!0,rangeFrom:l,rangeTo:d,onDayClick:v})]}),y]})}function p({month:n,onMonthChange:r,onPrev:i,onNext:s,showPrev:d,showNext:f,rangeFrom:p,rangeTo:h,onDayClick:g}){let[_,v]=(0,a.useState)(!1),y=(0,a.useMemo)(()=>(0,c.eachDayOfInterval)({start:(0,c.startOfWeek)((0,c.startOfMonth)(n),{weekStartsOn:0}),end:(0,c.endOfWeek)((0,c.endOfMonth)(n),{weekStartsOn:0})}),[n]),b=(0,a.useMemo)(()=>{let e=[];for(let t=-24;t<=u;t++)e.push((0,c.addMonths)((0,c.startOfMonth)(new Date),t));return e},[]);return(0,o.jsxs)(`div`,{className:`flex w-full max-w-[300px] flex-col sm:w-[260px]`,children:[(0,o.jsxs)(`div`,{className:`mb-4 flex items-center justify-between`,children:[(0,o.jsx)(m,{direction:`left`,onClick:i,visible:!!d}),(0,o.jsxs)(`div`,{className:`relative flex flex-1 justify-center`,children:[(0,o.jsxs)(`button`,{type:`button`,onClick:()=>v(e=>!e),className:`flex cursor-pointer items-center gap-1 rounded px-3 py-1.5 text-sm font-semibold text-fg-default transition-colors hover:bg-bg-subtle`,children:[(0,c.format)(n,`yyyy. MM.`),(0,o.jsx)(t.ChevronDown,{className:`h-3.5 w-3.5 text-fg-subtle`})]}),_&&(0,o.jsx)(`div`,{className:`scrollbar-brand absolute top-full z-20 mt-1 max-h-[240px] w-[140px] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface py-1 shadow-overlay`,children:b.map(t=>(0,o.jsx)(`button`,{type:`button`,onClick:()=>{r(t),v(!1)},className:e.cn(`w-full cursor-pointer bg-bg-surface px-4 py-2 text-left text-sm transition-colors`,(0,c.isSameMonth)(t,n)?`bg-bg-muted font-semibold text-fg-default`:`text-fg-muted hover:bg-bg-subtle`),children:(0,c.format)(t,`yyyy. MM.`)},t.toISOString()))})]}),(0,o.jsx)(m,{direction:`right`,onClick:s,visible:!!f})]}),(0,o.jsx)(`div`,{className:`mb-2 grid grid-cols-7`,children:[`일`,`월`,`화`,`수`,`목`,`금`,`토`].map(e=>(0,o.jsx)(`div`,{className:`py-1 text-center text-xs font-medium text-fg-subtle`,children:e},e))}),(0,o.jsx)(`div`,{className:`grid grid-cols-7 gap-y-1`,children:y.map(t=>{let i=(0,c.isSameMonth)(t,n),a=!!(p&&(0,c.isSameDay)(t,p)),s=!!(h&&(0,c.isSameDay)(t,h)),u=!!p&&!!h&&(0,c.isAfter)(t,p)&&(0,c.isBefore)(t,h),d=a||s,f=u||s&&!!p,m=u||a&&!!h;return(0,o.jsxs)(`button`,{type:`button`,onClick:()=>{i||r(t),g(t)},className:`group relative flex h-9 cursor-pointer items-center justify-center text-sm`,"aria-label":(0,c.format)(t,`yyyy년 M월 d일`,{locale:l.ko}),children:[f&&(0,o.jsx)(`span`,{className:`absolute inset-y-0 left-0 right-1/2 bg-bg-muted`,"aria-hidden":!0}),m&&(0,o.jsx)(`span`,{className:`absolute inset-y-0 left-1/2 right-0 bg-bg-muted`,"aria-hidden":!0}),d&&(0,o.jsx)(`span`,{className:`absolute left-1/2 top-1/2 h-9 w-9 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary`,"aria-hidden":!0}),(0,o.jsx)(`span`,{className:e.cn(`relative z-10`,!i&&`text-fg-disabled`,i&&!d&&`text-fg-default`,d&&`font-bold text-fg-inverse`),children:(0,c.format)(t,`d`)})]},t.toISOString())})})]})}function m({direction:e,onClick:t,visible:i}){let a=e===`left`?n.ChevronLeft:r.ChevronRight;return i?(0,o.jsx)(`button`,{type:`button`,onClick:t,className:`flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border-subtle text-fg-muted transition-colors hover:bg-bg-subtle`,"aria-label":e===`left`?`이전 달`:`다음 달`,children:(0,o.jsx)(a,{className:`h-4 w-4`})}):(0,o.jsx)(`div`,{className:`w-8`})}function h(e){if(!e)return null;let t=(0,c.parseISO)(e);return(0,c.isValid)(t)?t:null}exports.DateRangePicker=d;
@@ -9,6 +9,8 @@ interface DateRangePickerProps {
9
9
  value?: DateRange;
10
10
  onApply: (range: DateRange) => void;
11
11
  disabled?: boolean;
12
+ /** 이미 바텀시트 안에 있으면 모바일에서도 popover로 표시한다. Modal에서는 생략 시 자동 적용되며, false를 명시하면 시트를 유지한다. */
13
+ disableMobileSheet?: boolean;
12
14
  }
13
15
  /**
14
16
  * 날짜 범위 선택 popover.
@@ -17,5 +19,5 @@ interface DateRangePickerProps {
17
19
  * 모바일에선 바텀시트로 풀스크린 전환(트리거 위치 계산 무시) + 단일 캘린더.
18
20
  * 데스크탑은 두 달 가로 배치.
19
21
  */
20
- export declare function DateRangePicker({ children, value, onApply, disabled, }: DateRangePickerProps): import("react").JSX.Element;
22
+ export declare function DateRangePicker({ children, value, onApply, disabled, disableMobileSheet, }: DateRangePickerProps): import("react").JSX.Element;
21
23
  export {};
@@ -0,0 +1,238 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { ChevronDown as t } from "../../node_modules/lucide-react/dist/esm/icons/chevron-down.esm.js";
3
+ import { ChevronLeft as n } from "../../node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js";
4
+ import { ChevronRight as r } from "../../node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js";
5
+ import { PickerSheet as i, usePickerMobile as a } from "./PickerSheet.esm.js";
6
+ import { useMemo as o, useState as s } from "react";
7
+ import { Fragment as c, jsx as l, jsxs as u } from "react/jsx-runtime";
8
+ import { autoUpdate as d, flip as f, offset as p, shift as m, useClick as h, useDismiss as g, useFloating as _, useInteractions as v, useRole as y } from "@floating-ui/react";
9
+ import { addMonths as b, eachDayOfInterval as x, endOfMonth as S, endOfWeek as C, format as w, isAfter as T, isBefore as E, isSameDay as D, isSameMonth as O, isValid as k, parseISO as A, startOfMonth as j, startOfWeek as M, subMonths as N } from "date-fns";
10
+ import { ko as P } from "date-fns/locale";
11
+ //#region src/components/date-picker/date-range-picker.tsx
12
+ var F = 24;
13
+ function I({ children: e, value: t, onApply: n, disabled: r, disableMobileSheet: o }) {
14
+ let [b, x] = s(!1), { isMobile: S, useSheet: C } = a(o), { refs: w, floatingStyles: T, context: E } = _({
15
+ open: b,
16
+ onOpenChange: (e) => {
17
+ r || x(e);
18
+ },
19
+ placement: "bottom-start",
20
+ whileElementsMounted: d,
21
+ middleware: [
22
+ p(8),
23
+ f({ fallbackAxisSideDirection: "start" }),
24
+ m({ padding: 8 })
25
+ ]
26
+ }), { getReferenceProps: D, getFloatingProps: O } = v([
27
+ h(E, { enabled: !r }),
28
+ g(E),
29
+ y(E, { role: "dialog" })
30
+ ]), k = (e) => {
31
+ n(e), x(!1);
32
+ };
33
+ return /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("span", {
34
+ ref: w.setReference,
35
+ ...D(),
36
+ className: "inline-flex",
37
+ children: e
38
+ }), /* @__PURE__ */ l(i, {
39
+ isOpen: b,
40
+ onClose: () => x(!1),
41
+ useSheet: C,
42
+ context: E,
43
+ setFloating: w.setFloating,
44
+ floatingStyles: T,
45
+ getFloatingProps: O,
46
+ desktopClassName: "z-floating rounded-2xl border border-border-subtle bg-bg-surface text-fg-default p-6 shadow-tooltip",
47
+ children: /* @__PURE__ */ l(L, {
48
+ value: t,
49
+ isMobile: S,
50
+ onApply: k,
51
+ onClose: () => x(!1)
52
+ })
53
+ })] });
54
+ }
55
+ function L({ value: e, isMobile: t, onApply: n, onClose: r }) {
56
+ let i = B(e?.from), a = B(e?.to), [o, d] = s(i), [f, p] = s(a), [m, h] = s(i ?? /* @__PURE__ */ new Date()), g = b(m, 1), _ = (e) => {
57
+ if (!o || o && f) {
58
+ d(e), p(null);
59
+ return;
60
+ }
61
+ if (E(e, o)) {
62
+ d(e), p(null);
63
+ return;
64
+ }
65
+ p(e);
66
+ }, v = /* @__PURE__ */ u("div", {
67
+ className: "mt-6 flex items-center justify-end gap-2",
68
+ children: [/* @__PURE__ */ l("button", {
69
+ type: "button",
70
+ onClick: r,
71
+ className: "cursor-pointer rounded-full bg-bg-subtle px-5 py-2 text-sm font-semibold text-fg-muted transition-colors hover:bg-bg-muted",
72
+ children: "닫기"
73
+ }), /* @__PURE__ */ l("button", {
74
+ type: "button",
75
+ onClick: () => {
76
+ if (!o) {
77
+ r();
78
+ return;
79
+ }
80
+ n({
81
+ from: w(o, "yyyy-MM-dd"),
82
+ to: w(f ?? o, "yyyy-MM-dd")
83
+ });
84
+ },
85
+ className: "cursor-pointer rounded-full bg-primary px-5 py-2 text-sm font-semibold text-fg-inverse transition-opacity hover:opacity-90",
86
+ children: "적용"
87
+ })]
88
+ });
89
+ return t ? /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ l("div", {
90
+ className: "flex justify-center",
91
+ children: /* @__PURE__ */ l(R, {
92
+ month: m,
93
+ onMonthChange: h,
94
+ onPrev: () => h(N(m, 1)),
95
+ onNext: () => h(b(m, 1)),
96
+ showPrev: !0,
97
+ showNext: !0,
98
+ rangeFrom: o,
99
+ rangeTo: f,
100
+ onDayClick: _
101
+ })
102
+ }), v] }) : /* @__PURE__ */ u(c, { children: [/* @__PURE__ */ u("div", {
103
+ className: "flex items-stretch gap-8",
104
+ children: [
105
+ /* @__PURE__ */ l(R, {
106
+ month: m,
107
+ onMonthChange: h,
108
+ onPrev: () => h(N(m, 1)),
109
+ showPrev: !0,
110
+ rangeFrom: o,
111
+ rangeTo: f,
112
+ onDayClick: _
113
+ }),
114
+ /* @__PURE__ */ l("div", { className: "w-px bg-border-subtle" }),
115
+ /* @__PURE__ */ l(R, {
116
+ month: g,
117
+ onMonthChange: (e) => h(N(e, 1)),
118
+ onNext: () => h(b(m, 1)),
119
+ showNext: !0,
120
+ rangeFrom: o,
121
+ rangeTo: f,
122
+ onDayClick: _
123
+ })
124
+ ]
125
+ }), v] });
126
+ }
127
+ function R({ month: n, onMonthChange: r, onPrev: i, onNext: a, showPrev: c, showNext: d, rangeFrom: f, rangeTo: p, onDayClick: m }) {
128
+ let [h, g] = s(!1), _ = o(() => x({
129
+ start: M(j(n), { weekStartsOn: 0 }),
130
+ end: C(S(n), { weekStartsOn: 0 })
131
+ }), [n]), v = o(() => {
132
+ let e = [];
133
+ for (let t = -24; t <= F; t++) e.push(b(j(/* @__PURE__ */ new Date()), t));
134
+ return e;
135
+ }, []);
136
+ return /* @__PURE__ */ u("div", {
137
+ className: "flex w-full max-w-[300px] flex-col sm:w-[260px]",
138
+ children: [
139
+ /* @__PURE__ */ u("div", {
140
+ className: "mb-4 flex items-center justify-between",
141
+ children: [
142
+ /* @__PURE__ */ l(z, {
143
+ direction: "left",
144
+ onClick: i,
145
+ visible: !!c
146
+ }),
147
+ /* @__PURE__ */ u("div", {
148
+ className: "relative flex flex-1 justify-center",
149
+ children: [/* @__PURE__ */ u("button", {
150
+ type: "button",
151
+ onClick: () => g((e) => !e),
152
+ className: "flex cursor-pointer items-center gap-1 rounded px-3 py-1.5 text-sm font-semibold text-fg-default transition-colors hover:bg-bg-subtle",
153
+ children: [w(n, "yyyy. MM."), /* @__PURE__ */ l(t, { className: "h-3.5 w-3.5 text-fg-subtle" })]
154
+ }), h && /* @__PURE__ */ l("div", {
155
+ className: "scrollbar-brand absolute top-full z-20 mt-1 max-h-[240px] w-[140px] overflow-y-auto rounded-lg border border-border-subtle bg-bg-surface py-1 shadow-overlay",
156
+ children: v.map((t) => /* @__PURE__ */ l("button", {
157
+ type: "button",
158
+ onClick: () => {
159
+ r(t), g(!1);
160
+ },
161
+ className: e("w-full cursor-pointer bg-bg-surface px-4 py-2 text-left text-sm transition-colors", O(t, n) ? "bg-bg-muted font-semibold text-fg-default" : "text-fg-muted hover:bg-bg-subtle"),
162
+ children: w(t, "yyyy. MM.")
163
+ }, t.toISOString()))
164
+ })]
165
+ }),
166
+ /* @__PURE__ */ l(z, {
167
+ direction: "right",
168
+ onClick: a,
169
+ visible: !!d
170
+ })
171
+ ]
172
+ }),
173
+ /* @__PURE__ */ l("div", {
174
+ className: "mb-2 grid grid-cols-7",
175
+ children: [
176
+ "일",
177
+ "월",
178
+ "화",
179
+ "수",
180
+ "목",
181
+ "금",
182
+ "토"
183
+ ].map((e) => /* @__PURE__ */ l("div", {
184
+ className: "py-1 text-center text-xs font-medium text-fg-subtle",
185
+ children: e
186
+ }, e))
187
+ }),
188
+ /* @__PURE__ */ l("div", {
189
+ className: "grid grid-cols-7 gap-y-1",
190
+ children: _.map((t) => {
191
+ let i = O(t, n), a = !!(f && D(t, f)), o = !!(p && D(t, p)), s = !!f && !!p && T(t, f) && E(t, p), c = a || o, d = s || o && !!f, h = s || a && !!p;
192
+ return /* @__PURE__ */ u("button", {
193
+ type: "button",
194
+ onClick: () => {
195
+ i || r(t), m(t);
196
+ },
197
+ className: "group relative flex h-9 cursor-pointer items-center justify-center text-sm",
198
+ "aria-label": w(t, "yyyy년 M월 d일", { locale: P }),
199
+ children: [
200
+ d && /* @__PURE__ */ l("span", {
201
+ className: "absolute inset-y-0 left-0 right-1/2 bg-bg-muted",
202
+ "aria-hidden": !0
203
+ }),
204
+ h && /* @__PURE__ */ l("span", {
205
+ className: "absolute inset-y-0 left-1/2 right-0 bg-bg-muted",
206
+ "aria-hidden": !0
207
+ }),
208
+ c && /* @__PURE__ */ l("span", {
209
+ className: "absolute left-1/2 top-1/2 h-9 w-9 -translate-x-1/2 -translate-y-1/2 rounded-full bg-primary",
210
+ "aria-hidden": !0
211
+ }),
212
+ /* @__PURE__ */ l("span", {
213
+ className: e("relative z-10", !i && "text-fg-disabled", i && !c && "text-fg-default", c && "font-bold text-fg-inverse"),
214
+ children: w(t, "d")
215
+ })
216
+ ]
217
+ }, t.toISOString());
218
+ })
219
+ })
220
+ ]
221
+ });
222
+ }
223
+ function z({ direction: e, onClick: t, visible: i }) {
224
+ return i ? /* @__PURE__ */ l("button", {
225
+ type: "button",
226
+ onClick: t,
227
+ className: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border-subtle text-fg-muted transition-colors hover:bg-bg-subtle",
228
+ "aria-label": e === "left" ? "이전 달" : "다음 달",
229
+ children: /* @__PURE__ */ l(e === "left" ? n : r, { className: "h-4 w-4" })
230
+ }) : /* @__PURE__ */ l("div", { className: "w-8" });
231
+ }
232
+ function B(e) {
233
+ if (!e) return null;
234
+ let t = A(e);
235
+ return k(t) ? t : null;
236
+ }
237
+ //#endregion
238
+ export { I as DateRangePicker };
@@ -0,0 +1,5 @@
1
+ export { DateRangePicker } from './date-range-picker.js';
2
+ export type { DateRange } from './date-range-picker.js';
3
+ export { DatePicker, DatePickerBody } from './date-picker.js';
4
+ export { MonthPicker } from './month-picker.js';
5
+ export type { MonthValue } from './month-picker.js';
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs"),t=require("../../node_modules/lucide-react/dist/esm/icons/chevron-left.cjs"),n=require("../../node_modules/lucide-react/dist/esm/icons/chevron-right.cjs"),r=require("./PickerSheet.cjs");let i=require("react"),a=require("react/jsx-runtime"),o=require("@floating-ui/react");function s({children:e,value:t,onChange:n,disabled:s,disableMobileSheet:l}){let[u,d]=(0,i.useState)(!1),{useSheet:f}=r.usePickerMobile(l),{refs:p,floatingStyles:m,context:h}=(0,o.useFloating)({open:u,onOpenChange:e=>{s||d(e)},placement:`bottom-start`,whileElementsMounted:o.autoUpdate,middleware:[(0,o.offset)(8),(0,o.flip)({fallbackAxisSideDirection:`start`}),(0,o.shift)({padding:8})]}),{getReferenceProps:g,getFloatingProps:_}=(0,o.useInteractions)([(0,o.useClick)(h,{enabled:!s}),(0,o.useDismiss)(h),(0,o.useRole)(h,{role:`dialog`})]),v=e=>{n(e),d(!1)},y=new Date,[b,x]=(0,i.useState)(t?.year??y.getFullYear()),S=(0,a.jsx)(c,{year:b,onYearChange:x,selectedYear:t?.year,selectedMonth:t?.month,currentYear:y.getFullYear(),currentMonth:y.getMonth()+1,onSelect:e=>v({year:b,month:e})});return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(`span`,{ref:p.setReference,...g(),className:`inline-flex`,children:e}),(0,a.jsx)(r.PickerSheet,{isOpen:u,onClose:()=>d(!1),useSheet:f,context:h,setFloating:p.setFloating,floatingStyles:m,getFloatingProps:_,desktopClassName:`z-floating w-70 rounded-2xl border border-border-subtle bg-bg-surface text-fg-default p-5 shadow-tooltip`,children:S})]})}function c({year:t,onYearChange:n,selectedYear:r,selectedMonth:i,currentYear:o,currentMonth:s,onSelect:c}){let u=Array.from({length:12},(e,t)=>t+1);return(0,a.jsxs)(`div`,{className:`flex flex-col`,children:[(0,a.jsxs)(`div`,{className:`mb-4 flex items-center justify-between`,children:[(0,a.jsx)(l,{direction:`left`,onClick:()=>n(t-1)}),(0,a.jsxs)(`div`,{className:`flex-1 text-center text-sm font-semibold text-fg-default`,children:[t,`년`]}),(0,a.jsx)(l,{direction:`right`,onClick:()=>n(t+1)})]}),(0,a.jsx)(`div`,{className:`grid grid-cols-4 gap-2`,children:u.map(n=>{let l=r===t&&i===n;return(0,a.jsxs)(`button`,{type:`button`,onClick:()=>c(n),className:e.cn(`h-10 cursor-pointer rounded-lg text-sm transition-colors`,l?`bg-primary font-bold text-fg-inverse`:t===o&&n===s?`bg-bg-muted font-semibold text-fg-default`:`text-fg-default hover:bg-bg-subtle`),"aria-label":`${t}년 ${n}월`,"aria-pressed":l,children:[n,`월`]},n)})})]})}function l({direction:e,onClick:r}){return(0,a.jsx)(`button`,{type:`button`,onClick:r,className:`flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border-subtle text-fg-muted transition-colors hover:bg-bg-subtle`,"aria-label":e===`left`?`이전 해`:`다음 해`,children:(0,a.jsx)(e===`left`?t.ChevronLeft:n.ChevronRight,{className:`h-4 w-4`})})}exports.MonthPicker=s;
@@ -12,6 +12,7 @@ interface MonthPickerProps {
12
12
  /**
13
13
  * true면 모바일에서도 바텀시트 대신 popover로 뜬다. 이미 바텀시트(SearchBox 필터 등) 안에
14
14
  * 있을 때 시트가 겹치는 걸 막는다.
15
+ * 생략하면 Modal 안에서는 자동으로 popover를 쓰며, false를 명시하면 바텀시트를 유지한다.
15
16
  */
16
17
  disableMobileSheet?: boolean;
17
18
  }
@@ -0,0 +1,103 @@
1
+ import { cn as e } from "../../lib/utils.esm.js";
2
+ import { ChevronLeft as t } from "../../node_modules/lucide-react/dist/esm/icons/chevron-left.esm.js";
3
+ import { ChevronRight as n } from "../../node_modules/lucide-react/dist/esm/icons/chevron-right.esm.js";
4
+ import { PickerSheet as r, usePickerMobile as i } from "./PickerSheet.esm.js";
5
+ import { useState as a } from "react";
6
+ import { Fragment as o, jsx as s, jsxs as c } from "react/jsx-runtime";
7
+ import { autoUpdate as l, flip as u, offset as d, shift as f, useClick as p, useDismiss as m, useFloating as h, useInteractions as g, useRole as _ } from "@floating-ui/react";
8
+ //#region src/components/date-picker/month-picker.tsx
9
+ function v({ children: e, value: t, onChange: n, disabled: v, disableMobileSheet: b }) {
10
+ let [x, S] = a(!1), { useSheet: C } = i(b), { refs: w, floatingStyles: T, context: E } = h({
11
+ open: x,
12
+ onOpenChange: (e) => {
13
+ v || S(e);
14
+ },
15
+ placement: "bottom-start",
16
+ whileElementsMounted: l,
17
+ middleware: [
18
+ d(8),
19
+ u({ fallbackAxisSideDirection: "start" }),
20
+ f({ padding: 8 })
21
+ ]
22
+ }), { getReferenceProps: D, getFloatingProps: O } = g([
23
+ p(E, { enabled: !v }),
24
+ m(E),
25
+ _(E, { role: "dialog" })
26
+ ]), k = (e) => {
27
+ n(e), S(!1);
28
+ }, A = /* @__PURE__ */ new Date(), [j, M] = a(t?.year ?? A.getFullYear()), N = /* @__PURE__ */ s(y, {
29
+ year: j,
30
+ onYearChange: M,
31
+ selectedYear: t?.year,
32
+ selectedMonth: t?.month,
33
+ currentYear: A.getFullYear(),
34
+ currentMonth: A.getMonth() + 1,
35
+ onSelect: (e) => k({
36
+ year: j,
37
+ month: e
38
+ })
39
+ });
40
+ return /* @__PURE__ */ c(o, { children: [/* @__PURE__ */ s("span", {
41
+ ref: w.setReference,
42
+ ...D(),
43
+ className: "inline-flex",
44
+ children: e
45
+ }), /* @__PURE__ */ s(r, {
46
+ isOpen: x,
47
+ onClose: () => S(!1),
48
+ useSheet: C,
49
+ context: E,
50
+ setFloating: w.setFloating,
51
+ floatingStyles: T,
52
+ getFloatingProps: O,
53
+ desktopClassName: "z-floating w-70 rounded-2xl border border-border-subtle bg-bg-surface text-fg-default p-5 shadow-tooltip",
54
+ children: N
55
+ })] });
56
+ }
57
+ function y({ year: t, onYearChange: n, selectedYear: r, selectedMonth: i, currentYear: a, currentMonth: o, onSelect: l }) {
58
+ let u = Array.from({ length: 12 }, (e, t) => t + 1);
59
+ return /* @__PURE__ */ c("div", {
60
+ className: "flex flex-col",
61
+ children: [/* @__PURE__ */ c("div", {
62
+ className: "mb-4 flex items-center justify-between",
63
+ children: [
64
+ /* @__PURE__ */ s(b, {
65
+ direction: "left",
66
+ onClick: () => n(t - 1)
67
+ }),
68
+ /* @__PURE__ */ c("div", {
69
+ className: "flex-1 text-center text-sm font-semibold text-fg-default",
70
+ children: [t, "년"]
71
+ }),
72
+ /* @__PURE__ */ s(b, {
73
+ direction: "right",
74
+ onClick: () => n(t + 1)
75
+ })
76
+ ]
77
+ }), /* @__PURE__ */ s("div", {
78
+ className: "grid grid-cols-4 gap-2",
79
+ children: u.map((n) => {
80
+ let s = r === t && i === n;
81
+ return /* @__PURE__ */ c("button", {
82
+ type: "button",
83
+ onClick: () => l(n),
84
+ className: e("h-10 cursor-pointer rounded-lg text-sm transition-colors", s ? "bg-primary font-bold text-fg-inverse" : t === a && n === o ? "bg-bg-muted font-semibold text-fg-default" : "text-fg-default hover:bg-bg-subtle"),
85
+ "aria-label": `${t}년 ${n}월`,
86
+ "aria-pressed": s,
87
+ children: [n, "월"]
88
+ }, n);
89
+ })
90
+ })]
91
+ });
92
+ }
93
+ function b({ direction: e, onClick: r }) {
94
+ return /* @__PURE__ */ s("button", {
95
+ type: "button",
96
+ onClick: r,
97
+ className: "flex h-8 w-8 cursor-pointer items-center justify-center rounded-md border border-border-subtle text-fg-muted transition-colors hover:bg-bg-subtle",
98
+ "aria-label": e === "left" ? "이전 해" : "다음 해",
99
+ children: /* @__PURE__ */ s(e === "left" ? t : n, { className: "h-4 w-4" })
100
+ });
101
+ }
102
+ //#endregion
103
+ export { v as MonthPicker };
@@ -0,0 +1 @@
1
+ const e=require("../../lib/utils.cjs"),t=require("../../hooks/useMediaQuery.cjs"),n=require("../../hooks/useScrollLock.cjs"),r=require("../../hooks/useFocusTrap.cjs"),i=require("../../lib/overlay-stack.cjs"),a=require("../../lib/Portal.cjs"),o=require("../modal/ModalFocusTrapContext.cjs");let s=require("react"),c=require("react/jsx-runtime"),l=require("motion/react");function u({open:u,onClose:d,title:f,dismissible:p=!0,trapFocus:m=!0,onExitComplete:h,widthPx:g=480,className:_,children:v}){let y=t.useIsMobile(),b={width:g,maxWidth:`100vw`},x=(0,s.useId)(),S=(0,s.useId)(),C=(0,l.useDragControls)(),w=(0,l.useReducedMotion)(),[T,E]=(0,s.useState)(null),{context:D,isTop:O}=o.useModalSubViews(u,m,x);(0,s.useLayoutEffect)(()=>{T&&(T.inert=!u)},[T,u]);let k=(e,t)=>{p&&(t.offset.y>100||t.velocity.y>500)&&d()};(0,s.useEffect)(()=>{if(u)return i.overlayStack.push(x),()=>{i.overlayStack.pop(x)}},[u,x]),n.useScrollLock(u),r.useFocusTrap(T,{enabled:u,trapFocus:m,canTrap:O}),(0,s.useEffect)(()=>{let e=e=>{e.key!==`Escape`||!p||O()&&d()};return u&&window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[u,d,p,O]);let A=(0,c.jsxs)(a.Portal,{children:[(0,c.jsx)(l.AnimatePresence,{children:u&&(0,c.jsx)(l.motion.div,{initial:{opacity:0},animate:{opacity:1},exit:{opacity:0},transition:{duration:w?0:.2},onClick:()=>{!p||!O()||d()},className:`fixed inset-0 z-overlay bg-bg-overlay`},`drawer-backdrop`)}),(0,c.jsx)(l.AnimatePresence,{onExitComplete:h,children:u&&(0,c.jsxs)(l.motion.div,{ref:E,role:`dialog`,"aria-modal":`true`,"aria-labelledby":f?S:void 0,tabIndex:-1,initial:y?{y:`100%`}:{x:`100%`},animate:y?{y:0}:{x:0},exit:y?{y:`100%`,transition:{duration:w?0:.2,ease:[.4,0,1,1]}}:{x:`100%`},transition:w?{duration:0}:y?{type:`spring`,damping:38,stiffness:320}:{type:`spring`,damping:30,stiffness:280},drag:y&&p?`y`:!1,dragListener:!1,dragControls:C,dragConstraints:{top:0,bottom:0},dragElastic:{top:0,bottom:.4},onDragEnd:k,className:e.cn(`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`,_),style:y?void 0:b,children:[(0,c.jsx)(`div`,{className:e.cn(`flex justify-center pt-2 pb-1 cursor-grab touch-none active:cursor-grabbing sm:hidden`,!p&&`pointer-events-none opacity-0`),onPointerDown:e=>{p&&C.start(e)},children:(0,c.jsx)(`div`,{className:`h-1 w-10 rounded-full bg-bg-handle`})}),f&&(0,c.jsxs)(`div`,{className:`flex items-center justify-between border-b border-border-subtle px-4 py-3`,children:[(0,c.jsx)(`h3`,{id:S,className:`text-base font-semibold text-fg-default sm:text-lg`,children:f}),(0,c.jsx)(`button`,{type:`button`,onClick:d,disabled:!p,className:e.cn(`rounded-control-medium p-1 text-fg-muted hover:text-fg-default`,!p&&`pointer-events-none opacity-0`),"aria-label":`닫기`,children:(0,c.jsx)(`svg`,{className:`h-5 w-5`,fill:`none`,stroke:`currentColor`,viewBox:`0 0 24 24`,children:(0,c.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,strokeWidth:2,d:`M6 18L18 6M6 6l12 12`})})})]}),(0,c.jsx)(`div`,{className:`flex-1 overflow-auto`,children:v})]},`drawer-sheet`)})]});return(0,c.jsx)(o.ModalFocusTrapContext.Provider,{value:D,children:A})}exports.Drawer=u;
@@ -0,0 +1,45 @@
1
+ export interface DrawerProps {
2
+ open: boolean;
3
+ onClose: () => void;
4
+ title?: string;
5
+ /** false면 ESC, 백드롭, 닫기 버튼과 바텀시트 드래그로 닫히지 않는다. @default true */
6
+ dismissible?: boolean;
7
+ /**
8
+ * false면 Tab 가두기, 배경 포커스 복귀와 레이어·토스트 제거로 body에 유실된 포커스 복구를 끈다.
9
+ * 초기 포커스와 닫힐 때의 복원 규칙은 유지한다 —
10
+ * 닫는 시점에 포커스가 시트·부유 레이어 안이거나 body이면 열기 직전 요소로 복원하고,
11
+ * 소비자가 배경의 다른 요소로 옮겨 둔 포커스는 그대로 둔다.
12
+ * 안에 둔 ModalSubView에도 같은 설정이 적용된다. @default true
13
+ */
14
+ trapFocus?: boolean;
15
+ /** 닫힘 모션이 끝난 뒤 호출한다. open을 false로 바꾸지 않고 컴포넌트를 언마운트하면 호출되지 않는다. */
16
+ onExitComplete?: () => void;
17
+ /** 데스크탑(sm+) 드로어 폭(px). 기본 480. 모바일은 무관 (바텀시트). */
18
+ widthPx?: number;
19
+ /**
20
+ * 시트(패널) 루트에 병합되는 클래스. 인스턴스별로 배경·여백 등을 덮을 때 쓴다.
21
+ * `cn`(tailwind-merge)으로 병합되어 같은 속성은 이 값이 이긴다. 백드롭에는 적용되지 않는다.
22
+ */
23
+ className?: string;
24
+ children: React.ReactNode;
25
+ }
26
+ /**
27
+ * 데스크탑(`sm`+)에서는 화면 우측에서 슬라이드 인 하는 사이드 드로어,
28
+ * 모바일에서는 화면 하단에서 올라오는 bottom-sheet으로 동작.
29
+ * 열리면 첫 tabbable(제목과 활성 닫기 버튼이 있으면 닫기 버튼)에 포커스하며, 다른 필드는 `autoFocus`를 준다.
30
+ *
31
+ * 모바일 분기·드래그-다운 닫기·바텀시트 하단 틈 방지 패턴은 Modal과 동일.
32
+ *
33
+ * **레이어드 오버레이**: ESC/백드롭은 `overlayStack`에서 자신이 top일 때만 반응한다.
34
+ * ActionToast나 열린 ModalSubView가 위에 떠 있으면 자동으로 양보된다.
35
+ *
36
+ * **포커스 트랩**: `aria-controls`로 연결된 Floating UI 포털 또는 `data-focus-trap-layer`가
37
+ * 붙은 포털만 부유 레이어로 인정한다. 연결을 알 수 없는 포털의 Tab은 드로어로 돌아오므로
38
+ * 해당 포털에 표식을 붙이거나 `trapFocus={false}`를 사용한다. 표식은 문서 전체에서 찾으므로
39
+ * 현재 트랩에 편입할 포털에만 붙인다. `role="dialog"` + `aria-modal="true"`인 포털(서드파티
40
+ * 다이얼로그 등)은 표식이 있어도 편입하지 않으므로 `trapFocus={false}`를 사용한다.
41
+ * 액션 토스트가 top이면 트랩은 양보하며, 그동안에는 Tab이 드로어 밖으로 나갈 수 있다
42
+ * (`backdrop: false` 알림성 토스트 포함). Tab으로 드로어 밖에 떨어진 포커스는 고리로 되돌리고,
43
+ * 마우스로 옮긴 포커스는 건드리지 않는다.
44
+ */
45
+ export declare function Drawer({ open, onClose, title, dismissible, trapFocus, onExitComplete, widthPx, className, children, }: DrawerProps): import("react").JSX.Element;