@choice-ui/react 1.4.3 → 1.4.6

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 (459) hide show
  1. package/dist/components/alert-dialog/dist/index.d.ts +20 -41
  2. package/dist/components/alert-dialog/dist/index.js +497 -0
  3. package/dist/components/alert-dialog/src/alert-dialog.js +1 -1
  4. package/dist/components/alert-dialog/src/hooks/use-alert-dialog.d.ts +1 -1
  5. package/dist/components/alert-dialog/src/index.d.ts +4 -5
  6. package/dist/components/alert-dialog/src/types.d.ts +11 -11
  7. package/dist/components/avatar/dist/index.js +4 -4
  8. package/dist/components/avatar/src/avatar.js +4 -4
  9. package/dist/components/badge/src/badge.js +2 -2
  10. package/dist/components/badge/src/index.d.ts +2 -1
  11. package/dist/components/button/dist/index.js +4 -4
  12. package/dist/components/button/src/button.js +4 -4
  13. package/dist/components/calendar/dist/index.d.ts +296 -296
  14. package/dist/components/calendar/dist/index.js +57 -56
  15. package/dist/components/calendar/src/date-range-input/date-range-input.d.ts +5 -5
  16. package/dist/components/calendar/src/time-calendar/time-calendar.d.ts +3 -3
  17. package/dist/components/calendar/src/time-calendar/time-calendar.js +2 -2
  18. package/dist/components/calendar/src/time-input/time-input.d.ts +9 -9
  19. package/dist/components/calendar/src/time-input/time-input.js +4 -4
  20. package/dist/components/calendar/src/types.d.ts +165 -165
  21. package/dist/components/calendar/src/utils/constants.js +32 -31
  22. package/dist/components/calendar/src/utils/date-comparisons.d.ts +34 -34
  23. package/dist/components/calendar/src/utils/locale.d.ts +12 -12
  24. package/dist/components/calendar/src/utils/month.d.ts +3 -3
  25. package/dist/components/calendar/src/utils/month.js +1 -1
  26. package/dist/components/calendar/src/utils/parsers/month-names.js +3 -3
  27. package/dist/components/calendar/src/utils/parsers/numeric-utils.d.ts +20 -20
  28. package/dist/components/calendar/src/utils/parsers/numeric-utils.js +8 -8
  29. package/dist/components/calendar/src/utils/parsers/parsers.d.ts +17 -17
  30. package/dist/components/calendar/src/utils/parsers/parsers.js +2 -2
  31. package/dist/components/calendar/src/utils/parsers/prediction.d.ts +7 -7
  32. package/dist/components/calendar/src/utils/parsers/relative-dates.js +6 -6
  33. package/dist/components/calendar/src/utils/quarter.d.ts +13 -13
  34. package/dist/components/calendar/src/utils/quarter.js +6 -6
  35. package/dist/components/calendar/src/utils/time.d.ts +8 -8
  36. package/dist/components/calendar/src/utils/year.d.ts +3 -3
  37. package/dist/components/calendar/src/utils/year.js +3 -3
  38. package/dist/components/checkbox/dist/index.d.ts +1 -12
  39. package/dist/components/checkbox/dist/index.js +9 -9
  40. package/dist/components/checkbox/src/checkbox-label.js +2 -2
  41. package/dist/components/checkbox/src/checkbox.js +6 -5
  42. package/dist/components/checkbox/src/context.js +1 -1
  43. package/dist/components/checkbox/src/index.d.ts +0 -3
  44. package/dist/components/chip/dist/index.js +6 -6
  45. package/dist/components/chip/src/chip.js +6 -6
  46. package/dist/components/chip/src/index.d.ts +2 -1
  47. package/dist/components/chips-input/dist/index.js +270 -0
  48. package/dist/components/chips-input/src/index.d.ts +2 -1
  49. package/dist/components/code-block/dist/index.d.ts +14 -32
  50. package/dist/components/code-block/dist/index.js +211 -147
  51. package/dist/components/code-block/src/code-block.d.ts +8 -1
  52. package/dist/components/code-block/src/code-block.js +14 -3
  53. package/dist/components/code-block/src/components/code-block-code.js +31 -5
  54. package/dist/components/code-block/src/components/code-block-header.js +45 -10
  55. package/dist/components/code-block/src/index.d.ts +3 -9
  56. package/dist/components/combobox/dist/index.d.ts +21 -2
  57. package/dist/components/combobox/dist/index.js +16 -13
  58. package/dist/components/combobox/src/combobox-trigger.d.ts +1 -1
  59. package/dist/components/combobox/src/combobox-trigger.js +7 -4
  60. package/dist/components/combobox/src/combobox.d.ts +20 -1
  61. package/dist/components/combobox/src/combobox.js +10 -10
  62. package/dist/components/command/dist/index.d.ts +65 -4
  63. package/dist/components/command/src/command.js +6 -5
  64. package/dist/components/command/src/components/command-divider.d.ts +4 -1
  65. package/dist/components/command/src/components/command-group.d.ts +16 -1
  66. package/dist/components/command/src/components/command-group.js +56 -54
  67. package/dist/components/command/src/components/command-input.js +3 -3
  68. package/dist/components/command/src/components/command-item.d.ts +1 -1
  69. package/dist/components/command/src/components/command-item.js +117 -115
  70. package/dist/components/command/src/components/command-loading.d.ts +8 -0
  71. package/dist/components/command/src/components/command-loading.js +1 -1
  72. package/dist/components/command/src/context/create-command-context.js +1 -1
  73. package/dist/components/command/src/hooks/use-schedule-layout-effect.d.ts +1 -1
  74. package/dist/components/command/src/hooks/use-value.js +2 -2
  75. package/dist/components/command/src/index.d.ts +16 -8
  76. package/dist/components/command/src/tv.d.ts +30 -0
  77. package/dist/components/command/src/tv.js +10 -0
  78. package/dist/components/command/src/types.d.ts +8 -0
  79. package/dist/components/command/src/utils/constants.d.ts +1 -1
  80. package/dist/components/command/src/utils/constants.js +1 -1
  81. package/dist/components/command/src/utils/helpers.d.ts +0 -1
  82. package/dist/components/command/src/utils/helpers.js +1 -3
  83. package/dist/components/command/src/utils/index.d.ts +1 -0
  84. package/dist/components/comments/src/comment-input/components/comment-input-mention-popover.js +4 -2
  85. package/dist/components/comments/src/comments.js +1 -1
  86. package/dist/components/context-input/dist/index.d.ts +47 -251
  87. package/dist/components/context-input/src/components/mention-menu.d.ts +5 -4
  88. package/dist/components/context-input/src/components/mention-menu.js +19 -4
  89. package/dist/components/context-input/src/components/mention.d.ts +2 -2
  90. package/dist/components/context-input/src/components/slate-editor.js +4 -2
  91. package/dist/components/context-input/src/context-input.js +31 -16
  92. package/dist/components/context-input/src/extensions/with-mentions.d.ts +1 -1
  93. package/dist/components/context-input/src/extensions/with-mentions.js +10 -9
  94. package/dist/components/context-input/src/hooks/use-context-input.js +87 -46
  95. package/dist/components/context-input/src/hooks/use-mentions.d.ts +11 -10
  96. package/dist/components/context-input/src/hooks/use-mentions.js +147 -128
  97. package/dist/components/context-input/src/index.d.ts +4 -5
  98. package/dist/components/context-input/src/types.d.ts +12 -12
  99. package/dist/components/context-input/src/utils/mention-spacing.d.ts +16 -16
  100. package/dist/components/context-input/src/utils/slate-converters.d.ts +6 -6
  101. package/dist/components/context-input/src/utils/slate-converters.js +2 -2
  102. package/dist/components/context-input/src/utils/text-extraction.js +7 -1
  103. package/dist/components/context-menu/src/context-menu.js +10 -4
  104. package/dist/components/dialog/dist/index.js +1 -2
  105. package/dist/components/dialog/src/dialog.js +0 -1
  106. package/dist/components/dialog/src/hooks/use-floating-dialog.js +1 -1
  107. package/dist/components/dialog/src/index.d.ts +3 -2
  108. package/dist/components/dropdown/dist/index.d.ts +1 -2
  109. package/dist/components/dropdown/dist/index.js +23 -8
  110. package/dist/components/dropdown/src/dropdown.d.ts +1 -2
  111. package/dist/components/dropdown/src/dropdown.js +23 -8
  112. package/dist/components/emoji-picker/dist/index.d.ts +33 -1
  113. package/dist/components/emoji-picker/dist/index.js +3 -1
  114. package/dist/components/emoji-picker/src/emoji-picker.d.ts +1 -1
  115. package/dist/components/emoji-picker/src/emoji-picker.js +3 -1
  116. package/dist/components/emoji-picker/src/index.d.ts +3 -1
  117. package/dist/components/form/dist/index.d.ts +93 -98
  118. package/dist/components/form/src/adapters/base-adapter.d.ts +3 -3
  119. package/dist/components/form/src/adapters/checkbox-adapter.d.ts +1 -1
  120. package/dist/components/form/src/adapters/chips-input-adapter.d.ts +9 -0
  121. package/dist/components/form/src/adapters/chips-input-adapter.js +38 -0
  122. package/dist/components/form/src/adapters/index.d.ts +8 -7
  123. package/dist/components/form/src/adapters/input-adapter.d.ts +1 -1
  124. package/dist/components/form/src/adapters/multi-select-adapter.d.ts +1 -1
  125. package/dist/components/form/src/adapters/numeric-input-adapter.d.ts +1 -1
  126. package/dist/components/form/src/adapters/raido-group-adapter.d.ts +1 -7
  127. package/dist/components/form/src/adapters/range-adapter.d.ts +1 -7
  128. package/dist/components/form/src/adapters/segmented-adapter.d.ts +1 -7
  129. package/dist/components/form/src/adapters/select-adapter.d.ts +1 -1
  130. package/dist/components/form/src/adapters/switch-adapter.d.ts +1 -1
  131. package/dist/components/form/src/adapters/textarea-adapter.d.ts +1 -1
  132. package/dist/components/form/src/index.d.ts +18 -16
  133. package/dist/components/form/src/index.js +16 -13
  134. package/dist/components/form/src/types.d.ts +58 -51
  135. package/dist/components/hint/dist/index.d.ts +10 -54
  136. package/dist/components/hint/src/components/info-content.d.ts +3 -5
  137. package/dist/components/hint/src/components/info-content.js +14 -6
  138. package/dist/components/hint/src/components/info-trigger.d.ts +2 -3
  139. package/dist/components/hint/src/components/info-trigger.js +4 -2
  140. package/dist/components/hint/src/context/hint-context.d.ts +2 -0
  141. package/dist/components/hint/src/context/hint-context.js +1 -1
  142. package/dist/components/hint/src/hint.d.ts +7 -7
  143. package/dist/components/hint/src/hint.js +24 -29
  144. package/dist/components/hint/src/hooks/use-hint.d.ts +4 -2
  145. package/dist/components/hint/src/hooks/use-hint.js +12 -4
  146. package/dist/components/hint/src/index.d.ts +3 -3
  147. package/dist/components/hint/src/tv.d.ts +33 -0
  148. package/dist/components/hint/src/tv.js +11 -0
  149. package/dist/components/icon-button/dist/index.js +2 -2
  150. package/dist/components/icon-button/src/icon-button.js +2 -2
  151. package/dist/components/index.d.ts +3 -0
  152. package/dist/components/input/dist/index.js +4 -4
  153. package/dist/components/input/src/input.js +3 -3
  154. package/dist/components/input/src/tv.js +1 -1
  155. package/dist/components/kbd/dist/index.js +4 -4
  156. package/dist/components/kbd/src/kbd.js +4 -4
  157. package/dist/components/label/dist/index.js +3 -3
  158. package/dist/components/label/src/tv.js +3 -3
  159. package/dist/components/link-button/dist/index.js +3 -3
  160. package/dist/components/link-button/src/link-button.js +3 -3
  161. package/dist/components/list/src/components/list-content.js +2 -2
  162. package/dist/components/list/src/components/list-divider.js +3 -3
  163. package/dist/components/list/src/components/list-item.js +5 -5
  164. package/dist/components/list/src/components/list-label.js +2 -2
  165. package/dist/components/list/src/components/list-sub-trigger.js +4 -4
  166. package/dist/components/list/src/list.js +2 -2
  167. package/dist/components/md-input/dist/index.d.ts +8 -104
  168. package/dist/components/md-input/src/components/extensions/md-input-mention.d.ts +6 -4
  169. package/dist/components/md-input/src/components/extensions/md-input-mention.js +23 -6
  170. package/dist/components/md-input/src/components/md-input-container.js +1 -0
  171. package/dist/components/md-input/src/components/md-input-editor.js +4 -1
  172. package/dist/components/md-input/src/components/md-input-footer.js +5 -1
  173. package/dist/components/md-input/src/components/toolbar/default-actions.d.ts +2 -2
  174. package/dist/components/md-input/src/components/toolbar/toolbar-button.d.ts +1 -0
  175. package/dist/components/md-input/src/components/toolbar/toolbar-button.js +1 -7
  176. package/dist/components/md-input/src/components/toolbar/toolbar.d.ts +2 -2
  177. package/dist/components/md-input/src/hooks/use-markdown-mentions.d.ts +5 -4
  178. package/dist/components/md-input/src/hooks/use-markdown-mentions.js +31 -4
  179. package/dist/components/md-input/src/index.d.ts +1 -4
  180. package/dist/components/md-input/src/md-input.js +18 -14
  181. package/dist/components/md-input/src/tv.d.ts +3 -0
  182. package/dist/components/md-input/src/tv.js +2 -1
  183. package/dist/components/md-input/src/types.d.ts +18 -16
  184. package/dist/components/md-render/dist/index.d.ts +1 -4
  185. package/dist/components/md-render/dist/index.js +8 -9
  186. package/dist/components/md-render/src/components/markdown-components.js +3 -3
  187. package/dist/components/md-render/src/index.d.ts +0 -1
  188. package/dist/components/md-render/src/md-render.js +5 -4
  189. package/dist/components/md-render/src/tv.js +1 -1
  190. package/dist/components/menubar/dist/index.d.ts +50 -0
  191. package/dist/components/menubar/src/components/index.d.ts +3 -0
  192. package/dist/components/menubar/src/components/menubar-divider.d.ts +8 -0
  193. package/dist/components/menubar/src/components/menubar-divider.js +24 -0
  194. package/dist/components/menubar/src/components/menubar-item.d.ts +8 -0
  195. package/dist/components/menubar/src/components/menubar-item.js +195 -0
  196. package/dist/components/menubar/src/components/menubar-trigger.d.ts +8 -0
  197. package/dist/components/menubar/src/components/menubar-trigger.js +45 -0
  198. package/dist/components/menubar/src/context/index.d.ts +1 -0
  199. package/dist/components/menubar/src/context/menubar-context.d.ts +34 -0
  200. package/dist/components/menubar/src/context/menubar-context.js +13 -0
  201. package/dist/components/menubar/src/index.d.ts +3 -0
  202. package/dist/components/menubar/src/menubar.d.ts +22 -0
  203. package/dist/components/menubar/src/menubar.js +177 -0
  204. package/dist/components/menubar/src/tv.d.ts +108 -0
  205. package/dist/components/menubar/src/tv.js +72 -0
  206. package/dist/components/menubar/tsup.config.d.ts +2 -0
  207. package/dist/components/menus/dist/index.d.ts +144 -143
  208. package/dist/components/menus/dist/index.js +50 -49
  209. package/dist/components/menus/src/components/menu-button.js +2 -2
  210. package/dist/components/menus/src/components/menu-checkbox.d.ts +1 -2
  211. package/dist/components/menus/src/components/menu-checkbox.js +2 -2
  212. package/dist/components/menus/src/components/menu-divider.js +3 -3
  213. package/dist/components/menus/src/components/menu-item.js +5 -5
  214. package/dist/components/menus/src/components/menu-label.js +2 -2
  215. package/dist/components/menus/src/components/menu-scroll-arrow.d.ts +2 -2
  216. package/dist/components/menus/src/components/menu-scroll-arrow.js +13 -3
  217. package/dist/components/menus/src/components/menu-search.js +3 -3
  218. package/dist/components/menus/src/components/menu-trigger.js +4 -4
  219. package/dist/components/menus/src/context/menu-context-item.d.ts +6 -6
  220. package/dist/components/menus/src/context/menu-context-item.js +2 -2
  221. package/dist/components/menus/src/context/menu-context-sub-trigger.js +4 -19
  222. package/dist/components/menus/src/context/menu-context.d.ts +2 -2
  223. package/dist/components/menus/src/hooks/use-menu-base-refs.d.ts +12 -12
  224. package/dist/components/menus/src/hooks/use-menu-children.d.ts +16 -16
  225. package/dist/components/menus/src/hooks/use-menu-floating.d.ts +22 -22
  226. package/dist/components/menus/src/hooks/use-menu-refs.d.ts +8 -8
  227. package/dist/components/menus/src/hooks/use-menu-refs.js +2 -2
  228. package/dist/components/menus/src/hooks/use-menu-scroll-height.d.ts +11 -11
  229. package/dist/components/menus/src/hooks/use-menu-scroll.d.ts +18 -18
  230. package/dist/components/menus/src/hooks/use-menu-selection.d.ts +21 -21
  231. package/dist/components/menus/src/hooks/use-menu-state.d.ts +11 -11
  232. package/dist/components/menus/src/hooks/use-menu-state.js +4 -4
  233. package/dist/components/menus/src/hooks/use-menu-touch.d.ts +11 -11
  234. package/dist/components/menus/src/hooks/use-menu-tree.d.ts +15 -15
  235. package/dist/components/menus/src/index.d.ts +5 -0
  236. package/dist/components/menus/src/menus.js +2 -2
  237. package/dist/components/menus/src/tv.d.ts +15 -0
  238. package/dist/components/menus/src/tv.js +8 -2
  239. package/dist/components/modal/dist/index.d.ts +3 -1
  240. package/dist/components/modal/dist/index.js +18 -11
  241. package/dist/components/modal/src/components/modal-content.js +2 -2
  242. package/dist/components/modal/src/components/modal-footer.js +2 -2
  243. package/dist/components/modal/src/components/modal-header.d.ts +3 -1
  244. package/dist/components/modal/src/components/modal-header.js +12 -5
  245. package/dist/components/modal/src/modal.js +2 -2
  246. package/dist/components/multi-select/dist/index.js +13 -11
  247. package/dist/components/multi-select/src/components/multi-select-trigger.js +8 -8
  248. package/dist/components/multi-select/src/multi-select.js +5 -3
  249. package/dist/components/numeric-input/dist/index.d.ts +10 -117
  250. package/dist/components/numeric-input/dist/index.js +18 -24
  251. package/dist/components/numeric-input/src/components/numeric-input-element.js +2 -2
  252. package/dist/components/numeric-input/src/components/numeric-input-menu-trigger.d.ts +1 -1
  253. package/dist/components/numeric-input/src/components/numeric-input-menu-trigger.js +2 -2
  254. package/dist/components/numeric-input/src/components/numeric-input-variable.d.ts +1 -2
  255. package/dist/components/numeric-input/src/components/numeric-input-variable.js +3 -3
  256. package/dist/components/numeric-input/src/hooks/use-input-interactions.d.ts +3 -3
  257. package/dist/components/numeric-input/src/hooks/use-numeric-input.d.ts +3 -3
  258. package/dist/components/numeric-input/src/hooks/use-numeric-value-processing.d.ts +3 -3
  259. package/dist/components/numeric-input/src/hooks/use-step-calculation.d.ts +6 -6
  260. package/dist/components/numeric-input/src/index.d.ts +5 -4
  261. package/dist/components/numeric-input/src/numeric-input.js +9 -9
  262. package/dist/components/numeric-input/src/utils/error-handler.d.ts +8 -8
  263. package/dist/components/numeric-input/src/utils/expression-evaluator.d.ts +11 -11
  264. package/dist/components/numeric-input/src/utils/input-parser.d.ts +8 -8
  265. package/dist/components/numeric-input/src/utils/numeric-value-processor.d.ts +6 -6
  266. package/dist/components/numeric-input/src/utils/pattern-parser.d.ts +7 -7
  267. package/dist/components/numeric-input/src/utils/value-comparator.d.ts +16 -16
  268. package/dist/components/numeric-input/src/utils/value-processor.d.ts +14 -14
  269. package/dist/components/pagination/src/components/pagination-items-per-page.js +1 -1
  270. package/dist/components/pagination/src/components/pagination-navigation.js +5 -5
  271. package/dist/components/pagination/src/components/pagination-root.js +3 -3
  272. package/dist/components/pagination/src/components/pagination-spinner.js +20 -19
  273. package/dist/components/pagination/src/context/index.d.ts +1 -0
  274. package/dist/components/popover/dist/index.d.ts +2 -4
  275. package/dist/components/popover/dist/index.js +25 -33
  276. package/dist/components/popover/src/components/popover-header.js +1 -1
  277. package/dist/components/popover/src/hooks/use-drag.d.ts +3 -3
  278. package/dist/components/popover/src/hooks/use-floating-popover.d.ts +0 -2
  279. package/dist/components/popover/src/hooks/use-floating-popover.js +16 -13
  280. package/dist/components/popover/src/index.d.ts +2 -1
  281. package/dist/components/popover/src/popover.d.ts +1 -2
  282. package/dist/components/popover/src/popover.js +11 -21
  283. package/dist/components/progress/src/index.d.ts +4 -2
  284. package/dist/components/radio/dist/index.d.ts +1 -17
  285. package/dist/components/radio/dist/index.js +7 -10
  286. package/dist/components/radio/src/context.js +1 -1
  287. package/dist/components/radio/src/index.d.ts +0 -4
  288. package/dist/components/radio/src/radio-label.js +2 -2
  289. package/dist/components/radio/src/radio.js +4 -4
  290. package/dist/components/range/dist/index.js +16 -16
  291. package/dist/components/range/src/index.d.ts +4 -2
  292. package/dist/components/range/src/range-tuple.js +10 -10
  293. package/dist/components/range/src/range.js +6 -6
  294. package/dist/components/rich-input/dist/index.d.ts +12 -366
  295. package/dist/components/rich-input/src/components/rich-input-editable-component.d.ts +2 -2
  296. package/dist/components/rich-input/src/components/rich-input-viewport.d.ts +2 -2
  297. package/dist/components/rich-input/src/hooks/use-editor-config.d.ts +1 -1
  298. package/dist/components/rich-input/src/hooks/use-editor-effects.js +3 -0
  299. package/dist/components/rich-input/src/hooks/use-floating-ui.js +1 -1
  300. package/dist/components/rich-input/src/hooks/use-keyboard-shortcuts.d.ts +9 -9
  301. package/dist/components/rich-input/src/hooks/use-rich-input.d.ts +2 -2
  302. package/dist/components/rich-input/src/hooks/use-rich-input.js +40 -17
  303. package/dist/components/rich-input/src/hooks/use-selection-events.js +1 -2
  304. package/dist/components/rich-input/src/index.d.ts +3 -5
  305. package/dist/components/rich-input/src/rich-input-base.js +1 -1
  306. package/dist/components/rich-input/src/utils/custom-options.js +1 -1
  307. package/dist/components/rich-input/src/utils/editor-utils.js +1 -1
  308. package/dist/components/rich-input/src/utils/markdown-to-slate.d.ts +2 -2
  309. package/dist/components/rich-input/src/utils/slate-to-markdown.d.ts +1 -1
  310. package/dist/components/rich-input/src/utils/slate-to-markdown.js +9 -0
  311. package/dist/components/scroll-area/dist/index.d.ts +19 -19
  312. package/dist/components/scroll-area/dist/index.js +24 -24
  313. package/dist/components/scroll-area/src/components/scroll-area-corner.js +2 -2
  314. package/dist/components/scroll-area/src/components/scroll-area-root.js +3 -3
  315. package/dist/components/scroll-area/src/components/scroll-area-scrollbar.js +2 -2
  316. package/dist/components/scroll-area/src/components/scroll-area-thumb.js +2 -2
  317. package/dist/components/scroll-area/src/hooks/use-scroll-performance-monitor.d.ts +6 -6
  318. package/dist/components/scroll-area/src/hooks/use-scroll-performance-monitor.js +3 -3
  319. package/dist/components/scroll-area/src/hooks/use-scroll-state-and-visibility.d.ts +1 -1
  320. package/dist/components/scroll-area/src/hooks/use-scroll-state-and-visibility.js +3 -3
  321. package/dist/components/scroll-area/src/hooks/use-scrollbar.d.ts +2 -2
  322. package/dist/components/scroll-area/src/hooks/use-thumb.d.ts +2 -2
  323. package/dist/components/scroll-area/src/tv.d.ts +18 -18
  324. package/dist/components/scroll-area/src/tv.js +12 -12
  325. package/dist/components/scroll-area/src/types.d.ts +8 -8
  326. package/dist/components/scroll-area/src/utils/index.d.ts +3 -3
  327. package/dist/components/search-input/dist/index.js +3 -3
  328. package/dist/components/search-input/src/index.d.ts +2 -1
  329. package/dist/components/search-input/src/search-input.js +3 -3
  330. package/dist/components/segmented/dist/index.js +5 -5
  331. package/dist/components/segmented/src/segmented-item.js +3 -3
  332. package/dist/components/segmented/src/segmented.js +2 -2
  333. package/dist/components/select/dist/index.js +4 -4
  334. package/dist/components/select/src/select.js +4 -4
  335. package/dist/components/separator/dist/index.d.ts +26 -0
  336. package/dist/components/separator/src/index.d.ts +2 -0
  337. package/dist/components/separator/src/separator.d.ts +22 -0
  338. package/dist/components/separator/src/separator.js +33 -0
  339. package/dist/components/separator/src/tv.d.ts +76 -0
  340. package/dist/components/separator/src/tv.js +25 -0
  341. package/dist/components/separator/tsup.config.d.ts +2 -0
  342. package/dist/components/skeleton/dist/index.d.ts +1 -28
  343. package/dist/components/skeleton/src/context/skeleton-context.js +1 -1
  344. package/dist/components/skeleton/src/hooks/use-skeleton.d.ts +1 -2
  345. package/dist/components/skeleton/src/hooks/use-skeleton.js +1 -1
  346. package/dist/components/skeleton/src/index.d.ts +1 -3
  347. package/dist/components/skeleton/src/skeleton.d.ts +0 -13
  348. package/dist/components/skeleton/src/skeleton.js +4 -6
  349. package/dist/components/skeleton/src/tv.d.ts +18 -12
  350. package/dist/components/skeleton/src/tv.js +10 -6
  351. package/dist/components/slot/dist/index.d.ts +10 -10
  352. package/dist/components/slot/dist/index.js +4 -2
  353. package/dist/components/slot/src/slot.d.ts +12 -12
  354. package/dist/components/slot/src/slot.js +6 -3
  355. package/dist/components/stackflow/src/context.js +1 -1
  356. package/dist/components/stackflow/src/index.d.ts +2 -1
  357. package/dist/components/switch/dist/index.d.ts +2 -2
  358. package/dist/components/switch/dist/index.js +6 -7
  359. package/dist/components/switch/src/index.d.ts +2 -1
  360. package/dist/components/switch/src/switch.js +6 -6
  361. package/dist/components/table/dist/index.d.ts +679 -0
  362. package/dist/components/table/index.d.ts +1 -0
  363. package/dist/components/table/src/components/column-resizer.d.ts +8 -0
  364. package/dist/components/table/src/components/column-resizer.js +58 -0
  365. package/dist/components/table/src/components/drag-guide.d.ts +6 -0
  366. package/dist/components/table/src/components/drag-guide.js +64 -0
  367. package/dist/components/table/src/components/index.d.ts +12 -0
  368. package/dist/components/table/src/components/resize-guide.d.ts +5 -0
  369. package/dist/components/table/src/components/resize-guide.js +25 -0
  370. package/dist/components/table/src/components/table-body.d.ts +6 -0
  371. package/dist/components/table/src/components/table-body.js +335 -0
  372. package/dist/components/table/src/components/table-cell.d.ts +6 -0
  373. package/dist/components/table/src/components/table-cell.js +89 -0
  374. package/dist/components/table/src/components/table-column.d.ts +5 -0
  375. package/dist/components/table/src/components/table-column.js +269 -0
  376. package/dist/components/table/src/components/table-empty.d.ts +8 -0
  377. package/dist/components/table/src/components/table-empty.js +10 -0
  378. package/dist/components/table/src/components/table-footer.d.ts +7 -0
  379. package/dist/components/table/src/components/table-footer.js +15 -0
  380. package/dist/components/table/src/components/table-header.d.ts +3 -0
  381. package/dist/components/table/src/components/table-header.js +88 -0
  382. package/dist/components/table/src/components/table-root.d.ts +3 -0
  383. package/dist/components/table/src/components/table-root.js +317 -0
  384. package/dist/components/table/src/components/table-row.d.ts +23 -0
  385. package/dist/components/table/src/components/table-row.js +166 -0
  386. package/dist/components/table/src/components/table-value.d.ts +6 -0
  387. package/dist/components/table/src/components/table-value.js +8 -0
  388. package/dist/components/table/src/context.d.ts +121 -0
  389. package/dist/components/table/src/context.js +63 -0
  390. package/dist/components/table/src/hooks/index.d.ts +4 -0
  391. package/dist/components/table/src/hooks/use-column-order.d.ts +26 -0
  392. package/dist/components/table/src/hooks/use-column-order.js +95 -0
  393. package/dist/components/table/src/hooks/use-column-resize.d.ts +17 -0
  394. package/dist/components/table/src/hooks/use-column-resize.js +75 -0
  395. package/dist/components/table/src/hooks/use-consecutive-selection-style.d.ts +12 -0
  396. package/dist/components/table/src/hooks/use-consecutive-selection-style.js +28 -0
  397. package/dist/components/table/src/hooks/use-table.d.ts +35 -0
  398. package/dist/components/table/src/hooks/use-table.js +245 -0
  399. package/dist/components/table/src/index.d.ts +4 -0
  400. package/dist/components/table/src/table.d.ts +88 -0
  401. package/dist/components/table/src/table.js +24 -0
  402. package/dist/components/table/src/tv.d.ts +176 -0
  403. package/dist/components/table/src/tv.js +97 -0
  404. package/dist/components/table/src/types.d.ts +292 -0
  405. package/dist/components/table/tsup.config.d.ts +2 -0
  406. package/dist/components/tabs/dist/index.js +4 -3
  407. package/dist/components/tabs/src/tabs.d.ts +2 -2
  408. package/dist/components/tabs/src/tabs.js +5 -4
  409. package/dist/components/text-field/dist/index.d.ts +1 -1
  410. package/dist/components/text-field/dist/index.js +10 -10
  411. package/dist/components/text-field/src/components/field-addon.d.ts +1 -2
  412. package/dist/components/text-field/src/index.d.ts +3 -1
  413. package/dist/components/text-field/src/text-field.js +10 -10
  414. package/dist/components/textarea/dist/index.d.ts +33 -5
  415. package/dist/components/textarea/dist/index.js +32 -7
  416. package/dist/components/textarea/src/components/autosize/index.d.ts +6 -1
  417. package/dist/components/textarea/src/components/autosize/index.js +31 -6
  418. package/dist/components/textarea/src/textarea.js +1 -1
  419. package/dist/components/textarea/src/types.d.ts +33 -5
  420. package/dist/components/toggle-button/dist/index.d.ts +26 -2
  421. package/dist/components/toggle-button/src/context.d.ts +11 -0
  422. package/dist/components/toggle-button/src/context.js +13 -0
  423. package/dist/components/toggle-button/src/index.d.ts +2 -0
  424. package/dist/components/toggle-button/src/toggle-button.js +4 -4
  425. package/dist/components/toggle-button/src/toggle-group.d.ts +26 -0
  426. package/dist/components/toggle-button/src/toggle-group.js +156 -0
  427. package/dist/components/toggle-button/src/tv.d.ts +67 -3
  428. package/dist/components/toggle-button/src/tv.js +45 -14
  429. package/dist/components/tooltip/dist/index.d.ts +10 -43
  430. package/dist/components/tooltip/dist/index.js +35 -33
  431. package/dist/components/tooltip/src/components/tooltip-arrow.js +1 -1
  432. package/dist/components/tooltip/src/components/tooltip-content.js +5 -4
  433. package/dist/components/tooltip/src/context/index.d.ts +1 -0
  434. package/dist/components/tooltip/src/hooks/use-tooltip.js +3 -3
  435. package/dist/components/tooltip/src/index.d.ts +2 -4
  436. package/dist/components/tooltip/src/tooltip.d.ts +7 -1
  437. package/dist/components/tooltip/src/tooltip.js +6 -1
  438. package/dist/components/tooltip/src/tv.js +1 -1
  439. package/dist/components/virtualized-grid/dist/index.d.ts +2 -2
  440. package/dist/components/virtualized-grid/src/use-item-pool.js +14 -26
  441. package/dist/components/virtualized-grid/src/use-virtualized-grid.d.ts +1 -1
  442. package/dist/components/virtualized-grid/src/use-virtualized-grid.js +14 -8
  443. package/dist/components/virtualized-grid/src/utility.d.ts +1 -1
  444. package/dist/components/virtualized-grid/src/utility.js +37 -31
  445. package/dist/components/virtualized-grid/src/virtualized-grid.js +27 -17
  446. package/dist/context/choice-ui-provider.d.ts +35 -0
  447. package/dist/context/choice-ui-provider.js +14 -0
  448. package/dist/context/index.d.ts +2 -0
  449. package/dist/index.d.ts +1 -0
  450. package/dist/index.js +53 -177
  451. package/package.json +1 -1
  452. package/dist/components/code-block/src/index.js +0 -15
  453. package/dist/components/rich-input/src/hooks/use-mouse-events.js +0 -113
  454. package/dist/components/rich-input/src/hooks/use-validation.js +0 -80
  455. package/dist/components/rich-input/src/utils/markdown-to-slate.js +0 -219
  456. /package/dist/components/command/src/{command-score.d.ts → utils/command-score.d.ts} +0 -0
  457. /package/dist/components/command/src/{command-score.js → utils/command-score.js} +0 -0
  458. /package/dist/components/pagination/src/{components → context}/pagination-context.d.ts +0 -0
  459. /package/dist/components/pagination/src/{components → context}/pagination-context.js +0 -0
@@ -1,8 +1,7 @@
1
1
  import { HTMLProps, ReactNode } from 'react';
2
- interface FieldAddonProps extends HTMLProps<HTMLDivElement> {
2
+ export interface FieldAddonProps extends HTMLProps<HTMLDivElement> {
3
3
  children?: ReactNode;
4
4
  className?: string;
5
5
  placement?: "prefix" | "suffix";
6
6
  }
7
7
  export declare const FieldAddon: import('react').MemoExoticComponent<import('react').ForwardRefExoticComponent<Omit<FieldAddonProps, "ref"> & import('react').RefAttributes<HTMLDivElement>>>;
8
- export {};
@@ -1 +1,3 @@
1
- export * from './text-field';
1
+ export { TextField } from './text-field';
2
+ export type { TextFieldProps } from './text-field';
3
+ export type { FieldAddonProps } from './components';
@@ -11,23 +11,23 @@ const TextFieldContent = ({
11
11
  prefixNode,
12
12
  suffixNode,
13
13
  inputProps,
14
- styles,
14
+ tv,
15
15
  inputRef
16
- }) => /* @__PURE__ */ jsxs("div", { className: tcx(styles.root(), className), children: [
16
+ }) => /* @__PURE__ */ jsxs("div", { className: tcx(tv.root(), className), children: [
17
17
  prefixNode && cloneElement(prefixNode, {
18
- className: tcx(styles.prefix(), prefixNode.props.className)
18
+ className: tcx(tv.prefix(), prefixNode.props.className)
19
19
  }),
20
20
  /* @__PURE__ */ jsx(
21
21
  Input,
22
22
  {
23
23
  ref: inputRef,
24
24
  variant: "reset",
25
- className: styles.input(),
25
+ className: tv.input(),
26
26
  ...inputProps
27
27
  }
28
28
  ),
29
29
  suffixNode && cloneElement(suffixNode, {
30
- className: tcx(styles.suffix(), suffixNode.props.className)
30
+ className: tcx(tv.suffix(), suffixNode.props.className)
31
31
  })
32
32
  ] });
33
33
  const TextFieldBase = forwardRef((props, ref) => {
@@ -49,7 +49,7 @@ const TextFieldBase = forwardRef((props, ref) => {
49
49
  const suffixNode = suffixElements[0] || null;
50
50
  const labelNode = labelElements[0] || null;
51
51
  const descriptionNode = descriptionElements[0] || null;
52
- const styles = TextFieldTv({
52
+ const tv = TextFieldTv({
53
53
  variant,
54
54
  size,
55
55
  hasPrefix: !!prefixNode,
@@ -59,7 +59,7 @@ const TextFieldBase = forwardRef((props, ref) => {
59
59
  });
60
60
  const generatedId = useId();
61
61
  const uuid = props.id ?? generatedId;
62
- return labelNode || descriptionNode ? /* @__PURE__ */ jsxs("div", { className: tcx(styles.container(), className), children: [
62
+ return labelNode || descriptionNode ? /* @__PURE__ */ jsxs("div", { className: tcx(tv.container(), className), children: [
63
63
  labelNode && cloneElement(labelNode, {
64
64
  variant,
65
65
  disabled,
@@ -71,13 +71,13 @@ const TextFieldBase = forwardRef((props, ref) => {
71
71
  className,
72
72
  prefixNode,
73
73
  suffixNode,
74
- styles,
74
+ tv,
75
75
  inputRef: ref,
76
76
  inputProps: { ...rest, id: uuid, size, disabled }
77
77
  }
78
78
  ),
79
79
  descriptionNode && cloneElement(descriptionNode, {
80
- className: tcx(styles.description(), descriptionNode.props.className)
80
+ className: tcx(tv.description(), descriptionNode.props.className)
81
81
  })
82
82
  ] }) : /* @__PURE__ */ jsx(
83
83
  TextFieldContent,
@@ -85,7 +85,7 @@ const TextFieldBase = forwardRef((props, ref) => {
85
85
  className,
86
86
  prefixNode,
87
87
  suffixNode,
88
- styles,
88
+ tv,
89
89
  inputRef: ref,
90
90
  inputProps: { ...rest, id: uuid, size, disabled }
91
91
  }
@@ -2,32 +2,60 @@ import { HTMLProps, ReactNode, TextareaHTMLAttributes, HTMLAttributes } from 're
2
2
  import * as react from 'react';
3
3
 
4
4
  interface TextareaProps extends Omit<HTMLProps<HTMLTextAreaElement>, "value" | "onChange" | "size"> {
5
- /** Whether to allow newline characters when pressing Enter. Default is true */
5
+ /** Whether to allow newline characters when pressing Enter.
6
+ * @default true
7
+ */
6
8
  allowNewline?: boolean;
7
9
  children?: ReactNode;
8
10
  className?: string;
9
11
  contentRef?: React.RefObject<HTMLDivElement>;
12
+ /** Focus selection mode.
13
+ * @default "all"
14
+ */
10
15
  focusSelection?: "all" | "end" | "none";
11
- /** Line height in pixels for calculating textarea height. Default is 16 */
16
+ /** Line height in pixels for calculating textarea height.
17
+ * @default 16
18
+ */
12
19
  lineHeight?: number;
20
+ /** Maximum number of rows.
21
+ * @default undefined (no maximum)
22
+ */
13
23
  maxRows?: number;
24
+ /** Minimum number of rows.
25
+ * @default 3
26
+ */
14
27
  minRows?: number;
15
28
  onChange?: (value: string) => void;
16
29
  onIsEditingChange?: (isEditing: boolean) => void;
17
- /** Padding in pixels (top/bottom) for calculating textarea height. Default is 4 (py-1) */
30
+ /** Padding in pixels (top/bottom) for calculating textarea height.
31
+ * @default 4 (py-1)
32
+ */
18
33
  padding?: number;
34
+ /** Resize behavior mode.
35
+ * @default "auto"
36
+ */
19
37
  resize?: "auto" | "handle" | false;
20
38
  scrollRef?: React.RefObject<HTMLDivElement>;
21
39
  selected?: boolean;
22
40
  value?: string;
41
+ /** Visual style variant of the textarea.
42
+ * @default "default"
43
+ */
23
44
  variant?: "default" | "light" | "dark" | "reset";
24
45
  }
25
46
  interface TextareaContentProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "onChange" | "style"> {
26
- cacheMeasurements?: boolean;
27
47
  className?: string;
28
- /** 防抖延迟(毫秒),默认为 0(无防抖) */
48
+ /** Debounce delay (ms).
49
+ * @default 0 (no debounce)
50
+ */
29
51
  debounceMs?: number;
52
+ /** Maximum number of rows.
53
+ * @default undefined (no maximum)
54
+ */
30
55
  maxRows?: number;
56
+ /** Minimum number of rows.
57
+ * @default 3
58
+ */
31
59
  minRows?: number;
32
60
  onChange?: (value: string) => void;
33
61
  onHeightChange?: (height: number, meta: {
@@ -286,6 +286,24 @@ var useFontsLoadedListener = (listener) => {
286
286
  safeListener
287
287
  );
288
288
  };
289
+ function parsePx(value) {
290
+ if (typeof value === "number" && Number.isFinite(value)) return value;
291
+ if (typeof value !== "string") return void 0;
292
+ const trimmed = value.trim();
293
+ if (!trimmed.endsWith("px")) return void 0;
294
+ const num = Number(trimmed.slice(0, -2));
295
+ return Number.isFinite(num) ? num : void 0;
296
+ }
297
+ function estimateMinHeightPx(style, minRows) {
298
+ const row = parsePx(style == null ? void 0 : style.lineHeight) ?? 20;
299
+ const padding = parsePx(style == null ? void 0 : style.padding);
300
+ if (padding !== void 0) {
301
+ return Math.max(0, Math.ceil(row * minRows + padding * 2));
302
+ }
303
+ const pt = parsePx(style == null ? void 0 : style.paddingTop) ?? 0;
304
+ const pb = parsePx(style == null ? void 0 : style.paddingBottom) ?? 0;
305
+ return Math.max(0, Math.ceil(row * minRows + pt + pb));
306
+ }
289
307
  function useDebounce(func, delay) {
290
308
  const timeoutRef = useRef();
291
309
  const funcRef = useRef(func);
@@ -425,15 +443,22 @@ var TextareaAutosize = forwardRef(
425
443
  resizeTextarea();
426
444
  }, [style == null ? void 0 : style.lineHeight, style == null ? void 0 : style.padding, resizeTextarea]);
427
445
  const mergedStyle = useMemo(() => {
428
- if (!isBrowser) {
429
- const estimatedRowHeight = 20;
430
- const estimatedHeight = estimatedRowHeight * normalizedMinRows;
446
+ const minHeightPx = estimateMinHeightPx(style, normalizedMinRows);
447
+ const nextStyle = {
448
+ ...style ?? {},
449
+ minHeight: `${minHeightPx}px`
450
+ };
451
+ if (nextStyle.padding !== void 0) {
452
+ const { padding, ...rest } = nextStyle;
431
453
  return {
432
- ...style,
433
- minHeight: `${estimatedHeight}px`
454
+ ...rest,
455
+ paddingTop: padding,
456
+ paddingRight: padding,
457
+ paddingBottom: padding,
458
+ paddingLeft: padding
434
459
  };
435
460
  }
436
- return style;
461
+ return nextStyle;
437
462
  }, [style, normalizedMinRows]);
438
463
  return /* @__PURE__ */ jsx(
439
464
  "textarea",
@@ -718,7 +743,7 @@ var TextareaBase = forwardRef(
718
743
  ...baseTextareaProps,
719
744
  minRows,
720
745
  maxRows: void 0,
721
- // ScrollArea 中不限制 maxRows
746
+ // Do not constrain maxRows inside ScrollArea
722
747
  style: {
723
748
  lineHeight: `${lineHeight}px`,
724
749
  padding: `${padding}px`
@@ -2,13 +2,18 @@ import { default as React } from 'react';
2
2
  type TextareaProps = React.TextareaHTMLAttributes<HTMLTextAreaElement>;
3
3
  type Style = Omit<NonNullable<TextareaProps["style"]>, "maxHeight" | "minHeight"> & {
4
4
  height?: number;
5
+ /**
6
+ * To keep SSR/CSR consistent and stabilize the first paint, allow minHeight to be estimated internally.
7
+ * Note: the final height is still controlled by the autosize logic via `height`.
8
+ */
9
+ minHeight?: string | number;
5
10
  };
6
11
  export type TextareaHeightChangeMeta = {
7
12
  rowHeight: number;
8
13
  };
9
14
  export interface TextareaAutosizeProps extends Omit<TextareaProps, "style"> {
10
15
  cacheMeasurements?: boolean;
11
- /** 防抖延迟(毫秒),默认为 0(无防抖) */
16
+ /** Debounce delay (ms). Defaults to 0 (no debounce). */
12
17
  debounceMs?: number;
13
18
  maxRows?: number;
14
19
  minRows?: number;
@@ -5,6 +5,24 @@ import calculateNodeHeight from "./calculate-node-height.js";
5
5
  import getSizingData from "./get-sizing-data.js";
6
6
  import { useComposedRef, useFormResetListener, useWindowResizeListener, useFontsLoadedListener } from "./hooks.js";
7
7
  import { useIsomorphicLayoutEffect } from "usehooks-ts";
8
+ function parsePx(value) {
9
+ if (typeof value === "number" && Number.isFinite(value)) return value;
10
+ if (typeof value !== "string") return void 0;
11
+ const trimmed = value.trim();
12
+ if (!trimmed.endsWith("px")) return void 0;
13
+ const num = Number(trimmed.slice(0, -2));
14
+ return Number.isFinite(num) ? num : void 0;
15
+ }
16
+ function estimateMinHeightPx(style, minRows) {
17
+ const row = parsePx(style == null ? void 0 : style.lineHeight) ?? 20;
18
+ const padding = parsePx(style == null ? void 0 : style.padding);
19
+ if (padding !== void 0) {
20
+ return Math.max(0, Math.ceil(row * minRows + padding * 2));
21
+ }
22
+ const pt = parsePx(style == null ? void 0 : style.paddingTop) ?? 0;
23
+ const pb = parsePx(style == null ? void 0 : style.paddingBottom) ?? 0;
24
+ return Math.max(0, Math.ceil(row * minRows + pt + pb));
25
+ }
8
26
  function useDebounce(func, delay) {
9
27
  const timeoutRef = useRef();
10
28
  const funcRef = useRef(func);
@@ -144,15 +162,22 @@ const TextareaAutosize = forwardRef(
144
162
  resizeTextarea();
145
163
  }, [style == null ? void 0 : style.lineHeight, style == null ? void 0 : style.padding, resizeTextarea]);
146
164
  const mergedStyle = useMemo(() => {
147
- if (!isBrowser) {
148
- const estimatedRowHeight = 20;
149
- const estimatedHeight = estimatedRowHeight * normalizedMinRows;
165
+ const minHeightPx = estimateMinHeightPx(style, normalizedMinRows);
166
+ const nextStyle = {
167
+ ...style ?? {},
168
+ minHeight: `${minHeightPx}px`
169
+ };
170
+ if (nextStyle.padding !== void 0) {
171
+ const { padding, ...rest } = nextStyle;
150
172
  return {
151
- ...style,
152
- minHeight: `${estimatedHeight}px`
173
+ ...rest,
174
+ paddingTop: padding,
175
+ paddingRight: padding,
176
+ paddingBottom: padding,
177
+ paddingLeft: padding
153
178
  };
154
179
  }
155
- return style;
180
+ return nextStyle;
156
181
  }, [style, normalizedMinRows]);
157
182
  return /* @__PURE__ */ jsx(
158
183
  "textarea",
@@ -131,7 +131,7 @@ const TextareaBase = forwardRef(
131
131
  ...baseTextareaProps,
132
132
  minRows,
133
133
  maxRows: void 0,
134
- // ScrollArea 中不限制 maxRows
134
+ // Do not constrain maxRows inside ScrollArea
135
135
  style: {
136
136
  lineHeight: `${lineHeight}px`,
137
137
  padding: `${padding}px`
@@ -1,31 +1,59 @@
1
1
  import { HTMLProps, ReactNode, TextareaHTMLAttributes } from 'react';
2
2
  export interface TextareaProps extends Omit<HTMLProps<HTMLTextAreaElement>, "value" | "onChange" | "size"> {
3
- /** Whether to allow newline characters when pressing Enter. Default is true */
3
+ /** Whether to allow newline characters when pressing Enter.
4
+ * @default true
5
+ */
4
6
  allowNewline?: boolean;
5
7
  children?: ReactNode;
6
8
  className?: string;
7
9
  contentRef?: React.RefObject<HTMLDivElement>;
10
+ /** Focus selection mode.
11
+ * @default "all"
12
+ */
8
13
  focusSelection?: "all" | "end" | "none";
9
- /** Line height in pixels for calculating textarea height. Default is 16 */
14
+ /** Line height in pixels for calculating textarea height.
15
+ * @default 16
16
+ */
10
17
  lineHeight?: number;
18
+ /** Maximum number of rows.
19
+ * @default undefined (no maximum)
20
+ */
11
21
  maxRows?: number;
22
+ /** Minimum number of rows.
23
+ * @default 3
24
+ */
12
25
  minRows?: number;
13
26
  onChange?: (value: string) => void;
14
27
  onIsEditingChange?: (isEditing: boolean) => void;
15
- /** Padding in pixels (top/bottom) for calculating textarea height. Default is 4 (py-1) */
28
+ /** Padding in pixels (top/bottom) for calculating textarea height.
29
+ * @default 4 (py-1)
30
+ */
16
31
  padding?: number;
32
+ /** Resize behavior mode.
33
+ * @default "auto"
34
+ */
17
35
  resize?: "auto" | "handle" | false;
18
36
  scrollRef?: React.RefObject<HTMLDivElement>;
19
37
  selected?: boolean;
20
38
  value?: string;
39
+ /** Visual style variant of the textarea.
40
+ * @default "default"
41
+ */
21
42
  variant?: "default" | "light" | "dark" | "reset";
22
43
  }
23
44
  export interface TextareaContentProps extends Omit<TextareaHTMLAttributes<HTMLTextAreaElement>, "onChange" | "style"> {
24
- cacheMeasurements?: boolean;
25
45
  className?: string;
26
- /** 防抖延迟(毫秒),默认为 0(无防抖) */
46
+ /** Debounce delay (ms).
47
+ * @default 0 (no debounce)
48
+ */
27
49
  debounceMs?: number;
50
+ /** Maximum number of rows.
51
+ * @default undefined (no maximum)
52
+ */
28
53
  maxRows?: number;
54
+ /** Minimum number of rows.
55
+ * @default 3
56
+ */
29
57
  minRows?: number;
30
58
  onChange?: (value: string) => void;
31
59
  onHeightChange?: (height: number, meta: {
@@ -1,4 +1,4 @@
1
- import { HTMLProps } from 'react';
1
+ import { HTMLProps, ReactNode } from 'react';
2
2
  import { TooltipProps } from '../../tooltip/src';
3
3
  import * as react from 'react';
4
4
 
@@ -18,4 +18,28 @@ interface ToggleButtonProps extends Omit<HTMLProps<HTMLInputElement>, "value" |
18
18
  }
19
19
  declare const ToggleButton: react.ForwardRefExoticComponent<Omit<ToggleButtonProps, "ref"> & react.RefAttributes<HTMLInputElement>>;
20
20
 
21
- export { ToggleButton, type ToggleButtonProps };
21
+ interface ToggleGroupProps extends Omit<HTMLProps<HTMLDivElement>, "value" | "onChange" | "defaultValue"> {
22
+ children?: ReactNode;
23
+ defaultValue?: string[];
24
+ disabled?: boolean;
25
+ loopFocus?: boolean;
26
+ multiple?: boolean;
27
+ onChange?: (value: string[]) => void;
28
+ orientation?: "horizontal" | "vertical";
29
+ readOnly?: boolean;
30
+ value?: string[];
31
+ }
32
+ type ToggleGroupItemProps = Omit<ToggleButtonProps, "value" | "onChange"> & {
33
+ value: string;
34
+ };
35
+ declare const ToggleGroupItem: react.MemoExoticComponent<react.ForwardRefExoticComponent<Omit<ToggleGroupItemProps, "ref"> & react.RefAttributes<HTMLInputElement>>>;
36
+ interface ToggleGroupType {
37
+ (props: ToggleGroupProps & {
38
+ ref?: React.Ref<HTMLDivElement>;
39
+ }): JSX.Element;
40
+ Item: typeof ToggleGroupItem;
41
+ displayName?: string;
42
+ }
43
+ declare const ToggleGroup: ToggleGroupType;
44
+
45
+ export { ToggleButton, type ToggleButtonProps, ToggleGroup, type ToggleGroupProps };
@@ -0,0 +1,11 @@
1
+ export interface ToggleGroupContextType {
2
+ disabled?: boolean;
3
+ multiple?: boolean;
4
+ orientation?: "horizontal" | "vertical";
5
+ loopFocus?: boolean;
6
+ value: string[];
7
+ onChange: (value: string[]) => void;
8
+ readOnly?: boolean;
9
+ }
10
+ export declare const ToggleGroupContext: import('react').Context<ToggleGroupContextType | null>;
11
+ export declare function useToggleGroupContext(): ToggleGroupContextType;
@@ -0,0 +1,13 @@
1
+ import { createContext, useContext } from "react";
2
+ const ToggleGroupContext = createContext(null);
3
+ function useToggleGroupContext() {
4
+ const context = useContext(ToggleGroupContext);
5
+ if (!context) {
6
+ throw new Error("ToggleButton must be used within a ToggleGroup");
7
+ }
8
+ return context;
9
+ }
10
+ export {
11
+ ToggleGroupContext,
12
+ useToggleGroupContext
13
+ };
@@ -1,2 +1,4 @@
1
1
  export { ToggleButton } from './toggle-button';
2
2
  export type { ToggleButtonProps } from './toggle-button';
3
+ export { ToggleGroup } from './toggle-group';
4
+ export type { ToggleGroupProps } from './toggle-group';
@@ -26,7 +26,7 @@ const ToggleButton = forwardRef(
26
26
  } = props;
27
27
  const id = useId();
28
28
  const descriptionId = useId();
29
- const styles = toggleButtonTv({
29
+ const tv = toggleButtonTv({
30
30
  checked: value,
31
31
  disabled,
32
32
  variant,
@@ -38,7 +38,7 @@ const ToggleButton = forwardRef(
38
38
  const button = /* @__PURE__ */ jsxs(
39
39
  "div",
40
40
  {
41
- className: tcx(styles.root(), className),
41
+ className: tcx(tv.root(), className),
42
42
  role: "presentation",
43
43
  onContextMenu,
44
44
  children: [
@@ -48,7 +48,7 @@ const ToggleButton = forwardRef(
48
48
  {
49
49
  ref,
50
50
  id,
51
- className: styles.input(),
51
+ className: tv.input(),
52
52
  tabIndex: 0,
53
53
  type: "checkbox",
54
54
  checked: value,
@@ -70,7 +70,7 @@ const ToggleButton = forwardRef(
70
70
  {
71
71
  htmlFor: id,
72
72
  id: descriptionId,
73
- className: styles.label(),
73
+ className: tv.label(),
74
74
  onMouseDown: (e) => {
75
75
  if (readOnly) return;
76
76
  if (event === "mousedown") {
@@ -0,0 +1,26 @@
1
+ import { HTMLProps, ReactNode } from 'react';
2
+ import { ToggleButtonProps } from './toggle-button';
3
+ export interface ToggleGroupProps extends Omit<HTMLProps<HTMLDivElement>, "value" | "onChange" | "defaultValue"> {
4
+ children?: ReactNode;
5
+ defaultValue?: string[];
6
+ disabled?: boolean;
7
+ loopFocus?: boolean;
8
+ multiple?: boolean;
9
+ onChange?: (value: string[]) => void;
10
+ orientation?: "horizontal" | "vertical";
11
+ readOnly?: boolean;
12
+ value?: string[];
13
+ }
14
+ type ToggleGroupItemProps = Omit<ToggleButtonProps, "value" | "onChange"> & {
15
+ value: string;
16
+ };
17
+ declare const ToggleGroupItem: import('react').MemoExoticComponent<import('react').ForwardRefExoticComponent<Omit<ToggleGroupItemProps, "ref"> & import('react').RefAttributes<HTMLInputElement>>>;
18
+ interface ToggleGroupType {
19
+ (props: ToggleGroupProps & {
20
+ ref?: React.Ref<HTMLDivElement>;
21
+ }): JSX.Element;
22
+ Item: typeof ToggleGroupItem;
23
+ displayName?: string;
24
+ }
25
+ export declare const ToggleGroup: ToggleGroupType;
26
+ export {};
@@ -0,0 +1,156 @@
1
+ import { jsx } from "react/jsx-runtime";
2
+ import { memo, forwardRef, useState, useMemo, useRef, useCallback } from "react";
3
+ import { useEventCallback } from "usehooks-ts";
4
+ import { ToggleGroupContext, useToggleGroupContext } from "./context.js";
5
+ import { ToggleButton } from "./toggle-button.js";
6
+ import { toggleGroupTv } from "./tv.js";
7
+ import { tcx } from "../../../shared/utils/tcx/tcx.js";
8
+ const ToggleGroupItem = memo(
9
+ forwardRef(function ToggleGroupItem2(props, ref) {
10
+ const { value: itemValue, className, disabled, children, ...rest } = props;
11
+ const {
12
+ value: groupValue,
13
+ onChange,
14
+ disabled: groupDisabled,
15
+ readOnly: groupReadOnly,
16
+ multiple
17
+ } = useToggleGroupContext();
18
+ const isPressed = multiple ? groupValue.includes(itemValue) : groupValue[0] === itemValue;
19
+ const handleChange = useEventCallback((checked) => {
20
+ if (groupReadOnly) return;
21
+ if (multiple) {
22
+ const newValue = checked ? [...groupValue, itemValue] : groupValue.filter((v) => v !== itemValue);
23
+ onChange(newValue);
24
+ } else {
25
+ onChange(checked ? [itemValue] : []);
26
+ }
27
+ });
28
+ return /* @__PURE__ */ jsx(
29
+ ToggleButton,
30
+ {
31
+ value: isPressed,
32
+ active: isPressed,
33
+ disabled: disabled || groupDisabled,
34
+ readOnly: groupReadOnly,
35
+ onChange: handleChange,
36
+ className,
37
+ ...rest,
38
+ ref,
39
+ children
40
+ }
41
+ );
42
+ })
43
+ );
44
+ ToggleGroupItem.displayName = "ToggleGroup.Item";
45
+ const ToggleGroupBase = forwardRef(
46
+ function ToggleGroup2(props, ref) {
47
+ const {
48
+ className,
49
+ children,
50
+ defaultValue,
51
+ value: controlledValue,
52
+ onChange,
53
+ disabled = false,
54
+ readOnly = false,
55
+ multiple = false,
56
+ orientation = "horizontal",
57
+ loopFocus = true,
58
+ ...rest
59
+ } = props;
60
+ const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue || []);
61
+ const isControlled = controlledValue !== void 0;
62
+ const value = isControlled ? controlledValue : uncontrolledValue;
63
+ const handleChange = useEventCallback((newValue) => {
64
+ if (readOnly) return;
65
+ if (!isControlled) {
66
+ setUncontrolledValue(newValue);
67
+ }
68
+ onChange == null ? void 0 : onChange(newValue);
69
+ });
70
+ const contextValue = useMemo(
71
+ () => ({
72
+ value,
73
+ onChange: handleChange,
74
+ disabled,
75
+ readOnly,
76
+ multiple,
77
+ orientation,
78
+ loopFocus
79
+ }),
80
+ [value, handleChange, disabled, readOnly, multiple, orientation, loopFocus]
81
+ );
82
+ const containerRef = useRef(null);
83
+ const getItems = useCallback(() => {
84
+ if (!containerRef.current) return [];
85
+ return Array.from(
86
+ containerRef.current.querySelectorAll('input[type="checkbox"]')
87
+ );
88
+ }, []);
89
+ const handleKeyDown = useEventCallback((e) => {
90
+ var _a;
91
+ if (readOnly || disabled) return;
92
+ const items = getItems();
93
+ if (items.length === 0) return;
94
+ const currentIndex = items.findIndex((item) => item === document.activeElement);
95
+ if (currentIndex === -1) return;
96
+ let nextIndex = currentIndex;
97
+ if (orientation === "horizontal") {
98
+ if (e.key === "ArrowLeft") {
99
+ nextIndex = currentIndex > 0 ? currentIndex - 1 : loopFocus ? items.length - 1 : currentIndex;
100
+ e.preventDefault();
101
+ } else if (e.key === "ArrowRight") {
102
+ nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : loopFocus ? 0 : currentIndex;
103
+ e.preventDefault();
104
+ }
105
+ } else {
106
+ if (e.key === "ArrowUp") {
107
+ nextIndex = currentIndex > 0 ? currentIndex - 1 : loopFocus ? items.length - 1 : currentIndex;
108
+ e.preventDefault();
109
+ } else if (e.key === "ArrowDown") {
110
+ nextIndex = currentIndex < items.length - 1 ? currentIndex + 1 : loopFocus ? 0 : currentIndex;
111
+ e.preventDefault();
112
+ }
113
+ }
114
+ if (nextIndex !== currentIndex) {
115
+ (_a = items[nextIndex]) == null ? void 0 : _a.focus();
116
+ }
117
+ });
118
+ const tv = toggleGroupTv({
119
+ orientation,
120
+ disabled,
121
+ multiple
122
+ });
123
+ const setRefs = useCallback(
124
+ (node) => {
125
+ containerRef.current = node;
126
+ if (typeof ref === "function") {
127
+ ref(node);
128
+ } else if (ref && "current" in ref) {
129
+ ref.current = node;
130
+ }
131
+ },
132
+ [ref]
133
+ );
134
+ return /* @__PURE__ */ jsx(ToggleGroupContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsx(
135
+ "div",
136
+ {
137
+ ref: setRefs,
138
+ className: tcx(tv.root(), className),
139
+ role: "group",
140
+ "data-orientation": orientation,
141
+ "data-disabled": disabled ? "" : void 0,
142
+ "data-multiple": multiple ? "" : void 0,
143
+ onKeyDown: handleKeyDown,
144
+ ...rest,
145
+ children
146
+ }
147
+ ) });
148
+ }
149
+ );
150
+ const MemoizedToggleGroup = memo(ToggleGroupBase);
151
+ const ToggleGroup = MemoizedToggleGroup;
152
+ ToggleGroup.Item = ToggleGroupItem;
153
+ ToggleGroup.displayName = "ToggleGroup";
154
+ export {
155
+ ToggleGroup
156
+ };