@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,20 +1,21 @@
1
1
  import { Range, Transforms } from "slate";
2
2
  import { convertTextToSlate } from "../utils/slate-converters.js";
3
3
  const withMentions = (editor) => {
4
- const { isInline, isVoid, insertData } = editor;
5
- editor.isInline = (element) => {
4
+ const customEditor = editor;
5
+ const { isInline, isVoid, insertData } = customEditor;
6
+ customEditor.isInline = (element) => {
6
7
  return element.type === "mention" ? true : isInline(element);
7
8
  };
8
- editor.isVoid = (element) => {
9
+ customEditor.isVoid = (element) => {
9
10
  return element.type === "mention" ? true : isVoid(element);
10
11
  };
11
- editor.insertData = (data) => {
12
+ customEditor.insertData = (data) => {
12
13
  const text = data.getData("text/plain");
13
14
  const mentionRegex = /\{\{#([^}]+?)(?:\.text)?#\}\}/;
14
15
  if (text && mentionRegex.test(text)) {
15
16
  const nodes = convertTextToSlate(text);
16
- if (editor.selection && Range.isExpanded(editor.selection)) {
17
- Transforms.delete(editor);
17
+ if (customEditor.selection && Range.isExpanded(customEditor.selection)) {
18
+ Transforms.delete(customEditor);
18
19
  }
19
20
  if (nodes.length === 1) {
20
21
  const paragraph = nodes[0];
@@ -22,14 +23,14 @@ const withMentions = (editor) => {
22
23
  for (const child of paragraph.children) {
23
24
  const childNode = child;
24
25
  if (childNode.type === "mention") {
25
- Transforms.insertNodes(editor, child);
26
+ Transforms.insertNodes(customEditor, child);
26
27
  } else if (typeof childNode.text === "string") {
27
- Transforms.insertText(editor, childNode.text);
28
+ Transforms.insertText(customEditor, childNode.text);
28
29
  }
29
30
  }
30
31
  }
31
32
  } else {
32
- Transforms.insertNodes(editor, nodes);
33
+ Transforms.insertNodes(customEditor, nodes);
33
34
  }
34
35
  return;
35
36
  }
@@ -1,74 +1,115 @@
1
- import { debounce } from "lodash-es";
2
- import { useRef, useState, useEffect, useMemo, useCallback } from "react";
1
+ import { useRef, useState, useEffect, useCallback } from "react";
3
2
  import { Editor, Transforms } from "slate";
4
3
  import { ReactEditor } from "slate-react";
5
4
  import { parseTextWithMentions, extractTextWithMentions } from "../utils/text-extraction.js";
6
5
  import { extractMentionContext } from "../utils/context-extraction.js";
7
6
  const useContextInput = ({ value, onChange, editor, autoFocus }) => {
8
7
  const isUpdatingRef = useRef(false);
8
+ const emptyParagraph = [
9
+ { type: "paragraph", children: [{ text: "" }] }
10
+ ];
9
11
  const [slateValue, setSlateValue] = useState(() => {
10
- if (value == null ? void 0 : value.text) {
11
- return parseTextWithMentions(value.text, value.mentions || []);
12
+ if ((value == null ? void 0 : value.text) != null && value.text !== "") {
13
+ try {
14
+ return parseTextWithMentions(value.text, value.mentions || []);
15
+ } catch {
16
+ return emptyParagraph;
17
+ }
12
18
  }
13
- return [{ type: "paragraph", children: [{ text: "" }] }];
19
+ return emptyParagraph;
14
20
  });
21
+ const autoFocusTimeoutRef = useRef(null);
15
22
  useEffect(() => {
16
23
  if (!editor || !value || isUpdatingRef.current) {
17
24
  return;
18
25
  }
19
- const newSlateValue = value.text ? parseTextWithMentions(value.text, value.mentions || []) : [{ type: "paragraph", children: [{ text: "" }] }];
26
+ let newSlateValue;
27
+ try {
28
+ newSlateValue = value.text != null && value.text !== "" ? parseTextWithMentions(value.text, value.mentions || []) : emptyParagraph;
29
+ } catch {
30
+ newSlateValue = emptyParagraph;
31
+ }
20
32
  const currentText = extractTextWithMentions(editor.children).text;
21
33
  if (currentText !== value.text) {
22
- Editor.withoutNormalizing(editor, () => {
23
- editor.children = newSlateValue;
24
- const endPoint = Editor.end(editor, []);
25
- Transforms.select(editor, endPoint);
26
- editor.onChange();
27
- });
28
- if (autoFocus) {
29
- setTimeout(() => {
30
- ReactEditor.focus(editor);
31
- }, 0);
34
+ try {
35
+ Editor.withoutNormalizing(editor, () => {
36
+ editor.children = newSlateValue;
37
+ let endPoint;
38
+ try {
39
+ endPoint = Editor.end(editor, []);
40
+ } catch {
41
+ endPoint = { path: [0, 0], offset: 0 };
42
+ }
43
+ Transforms.select(editor, endPoint);
44
+ editor.onChange();
45
+ });
46
+ if (autoFocus) {
47
+ if (autoFocusTimeoutRef.current) {
48
+ clearTimeout(autoFocusTimeoutRef.current);
49
+ }
50
+ autoFocusTimeoutRef.current = setTimeout(() => {
51
+ try {
52
+ ReactEditor.focus(editor);
53
+ } catch {
54
+ }
55
+ }, 0);
56
+ }
57
+ setSlateValue(newSlateValue);
58
+ } catch {
32
59
  }
33
- setSlateValue(newSlateValue);
34
60
  }
35
61
  }, [value, editor, autoFocus]);
36
- const debouncedOnChange = useMemo(
37
- () => debounce((newValue) => {
38
- onChange == null ? void 0 : onChange(newValue);
39
- }, 100),
40
- [onChange]
41
- );
62
+ useEffect(() => {
63
+ return () => {
64
+ if (autoFocusTimeoutRef.current) {
65
+ clearTimeout(autoFocusTimeoutRef.current);
66
+ }
67
+ if (debounceTimerRef.current) {
68
+ clearTimeout(debounceTimerRef.current);
69
+ }
70
+ };
71
+ }, []);
72
+ const debounceTimerRef = useRef(null);
73
+ const pendingValueRef = useRef(null);
42
74
  const handleChange = useCallback(
43
75
  (newValue) => {
44
76
  isUpdatingRef.current = true;
45
77
  setSlateValue(newValue);
46
- const { text, mentionsData } = extractTextWithMentions(newValue);
47
- const mentions = [];
48
- for (const { element, startIndex, endIndex } of mentionsData) {
49
- const context = extractMentionContext(text, startIndex, endIndex);
50
- mentions.push({
51
- item: {
52
- id: element.mentionId,
53
- type: element.mentionType,
54
- label: element.mentionLabel,
55
- metadata: element.mentionData
56
- },
57
- startIndex,
58
- endIndex,
59
- text: element.mentionLabel,
60
- context: {
61
- fullContext: context.fullContext,
62
- mentionText: context.mentionText
63
- }
64
- });
78
+ pendingValueRef.current = newValue;
79
+ if (debounceTimerRef.current) {
80
+ clearTimeout(debounceTimerRef.current);
65
81
  }
66
- debouncedOnChange({ text, mentions });
67
- setTimeout(() => {
82
+ debounceTimerRef.current = setTimeout(() => {
83
+ const valueToProcess = pendingValueRef.current;
84
+ if (!valueToProcess || !onChange) {
85
+ isUpdatingRef.current = false;
86
+ return;
87
+ }
88
+ const { text, mentionsData } = extractTextWithMentions(valueToProcess);
89
+ const mentions = [];
90
+ for (const { element, startIndex, endIndex } of mentionsData) {
91
+ const context = extractMentionContext(text, startIndex, endIndex);
92
+ mentions.push({
93
+ item: {
94
+ id: element.mentionId,
95
+ type: element.mentionType,
96
+ label: element.mentionLabel,
97
+ metadata: element.mentionData
98
+ },
99
+ startIndex,
100
+ endIndex,
101
+ text: element.mentionLabel,
102
+ context: {
103
+ fullContext: context.fullContext,
104
+ mentionText: context.mentionText
105
+ }
106
+ });
107
+ }
108
+ onChange({ text, mentions });
68
109
  isUpdatingRef.current = false;
69
- }, 0);
110
+ }, 100);
70
111
  },
71
- [debouncedOnChange]
112
+ [onChange]
72
113
  );
73
114
  return {
74
115
  slateValue,
@@ -1,12 +1,16 @@
1
1
  import { Range } from 'slate';
2
- import { MentionItem, MentionTrigger } from '../types';
2
+ import { ContextMentionItemProps, ContextMentionTrigger } from '../types';
3
3
  import { ContextEditor } from '../types/editor';
4
4
  export interface MentionSearchState {
5
5
  index: number;
6
6
  isSearching: boolean;
7
7
  loading: boolean;
8
+ position: {
9
+ x: number;
10
+ y: number;
11
+ } | null;
8
12
  query: string;
9
- suggestions: MentionItem[];
13
+ suggestions: ContextMentionItemProps[];
10
14
  target: Range | null;
11
15
  trigger: string;
12
16
  }
@@ -14,18 +18,15 @@ export interface UseMentionsProps {
14
18
  editor: ContextEditor;
15
19
  maxSuggestions?: number;
16
20
  mentionPrefix?: string;
17
- onMentionSelect?: (mention: MentionItem, trigger: string) => void;
21
+ onMentionSelect?: (mention: ContextMentionItemProps, trigger: string) => void;
18
22
  onSearchClose?: () => void;
19
- triggers: MentionTrigger[];
23
+ triggers: ContextMentionTrigger[];
20
24
  }
21
25
  export declare function useMentions({ editor, triggers, maxSuggestions, mentionPrefix, onMentionSelect, onSearchClose, }: UseMentionsProps): {
22
26
  searchState: MentionSearchState;
23
- insertMention: (mention: MentionItem) => void;
24
- handleKeyDown: (event: React.KeyboardEvent) => boolean;
25
- getSuggestionPosition: () => {
26
- x: number;
27
- y: number;
28
- } | null;
27
+ checkMentionSearch: () => void;
28
+ insertMention: (mention: ContextMentionItemProps) => void;
29
+ handleKeyDown: (event: import('react').KeyboardEvent<Element>) => boolean;
29
30
  closeMentionSearch: () => void;
30
31
  selectMention: (index: number) => void;
31
32
  selectNextMention: () => void;
@@ -1,6 +1,7 @@
1
- import { useState, useMemo, useCallback, useEffect } from "react";
1
+ import { useState, useMemo, useRef, useEffect } from "react";
2
2
  import { Range, Editor, Transforms } from "slate";
3
3
  import { ReactEditor } from "slate-react";
4
+ import { useEventCallback } from "usehooks-ts";
4
5
  import { insertWithSmartSpacing } from "../utils/mention-spacing.js";
5
6
  function useMentions({
6
7
  editor,
@@ -17,7 +18,8 @@ function useMentions({
17
18
  target: null,
18
19
  index: 0,
19
20
  suggestions: [],
20
- loading: false
21
+ loading: false,
22
+ position: null
21
23
  });
22
24
  const triggerMap = useMemo(() => {
23
25
  const map = /* @__PURE__ */ new Map();
@@ -26,29 +28,44 @@ function useMentions({
26
28
  });
27
29
  return map;
28
30
  }, [triggers]);
29
- const searchMentions = useCallback(
30
- async (query, trigger, triggerConfig) => {
31
- setSearchState((prev) => ({ ...prev, loading: true }));
32
- try {
33
- const results = await triggerConfig.onSearch(query, trigger);
34
- const limitedResults = results.slice(0, maxSuggestions);
35
- setSearchState((prev) => ({
36
- ...prev,
37
- suggestions: limitedResults,
38
- loading: false
39
- }));
40
- } catch (error) {
41
- console.error("Failed to search mentions:", error);
42
- setSearchState((prev) => ({
43
- ...prev,
44
- suggestions: [],
45
- loading: false
46
- }));
31
+ const searchTimeoutRef = useRef(null);
32
+ useEffect(() => {
33
+ return () => {
34
+ if (searchTimeoutRef.current) {
35
+ clearTimeout(searchTimeoutRef.current);
36
+ }
37
+ };
38
+ }, []);
39
+ const searchMentions = useEventCallback(
40
+ (query, trigger, triggerConfig) => {
41
+ if (searchTimeoutRef.current) {
42
+ clearTimeout(searchTimeoutRef.current);
47
43
  }
48
- },
49
- [maxSuggestions]
44
+ searchTimeoutRef.current = setTimeout(async () => {
45
+ setSearchState((prev) => ({ ...prev, loading: true }));
46
+ try {
47
+ const results = await triggerConfig.onSearch(query, trigger);
48
+ const limitedResults = results.slice(0, maxSuggestions);
49
+ setSearchState((prev) => ({
50
+ ...prev,
51
+ suggestions: limitedResults,
52
+ loading: false
53
+ }));
54
+ } catch (error) {
55
+ console.error("Failed to search mentions:", error);
56
+ setSearchState((prev) => ({
57
+ ...prev,
58
+ suggestions: [],
59
+ loading: false
60
+ }));
61
+ }
62
+ }, 150);
63
+ }
50
64
  );
51
- const checkMentionSearch = useCallback(() => {
65
+ const checkMentionSearch = useEventCallback(() => {
66
+ if (triggers.length === 0) {
67
+ return;
68
+ }
52
69
  const { selection } = editor;
53
70
  if (!selection || !Range.isCollapsed(selection)) {
54
71
  setSearchState((prev) => {
@@ -112,12 +129,23 @@ function useMentions({
112
129
  }
113
130
  }
114
131
  const target = Editor.range(editor, triggerPoint, start);
132
+ let position = null;
133
+ try {
134
+ const domRange = ReactEditor.toDOMRange(editor, target);
135
+ const rect = domRange.getBoundingClientRect();
136
+ position = {
137
+ x: rect.left,
138
+ y: rect.bottom + 4
139
+ };
140
+ } catch {
141
+ }
115
142
  setSearchState((prev) => ({
116
143
  ...prev,
117
144
  isSearching: true,
118
145
  trigger: triggerChar,
119
146
  query: queryText,
120
147
  target,
148
+ position,
121
149
  index: 0
122
150
  }));
123
151
  searchMentions(queryText, triggerChar, triggerConfig);
@@ -130,95 +158,76 @@ function useMentions({
130
158
  }
131
159
  return prev;
132
160
  });
133
- }, [editor, searchMentions, triggerMap]);
134
- const insertMention = useCallback(
135
- (mention) => {
136
- const { target, trigger } = searchState;
137
- if (!target) return;
138
- Transforms.select(editor, target);
139
- Transforms.delete(editor);
140
- insertWithSmartSpacing(editor, () => {
141
- const mentionElement = {
142
- type: "mention",
143
- mentionType: mention.type,
144
- mentionId: mention.id,
145
- mentionLabel: mention.label,
146
- mentionPrefix,
147
- mentionData: mention.metadata,
148
- children: [{ text: "" }]
149
- };
150
- Transforms.insertNodes(editor, mentionElement);
151
- Transforms.move(editor);
152
- });
153
- setSearchState((prev) => ({ ...prev, isSearching: false }));
154
- onMentionSelect == null ? void 0 : onMentionSelect(mention, trigger);
155
- onSearchClose == null ? void 0 : onSearchClose();
156
- ReactEditor.focus(editor);
157
- },
158
- [editor, searchState, onMentionSelect, onSearchClose]
159
- );
160
- const handleKeyDown = useCallback(
161
- (event) => {
162
- if (!searchState.isSearching || searchState.suggestions.length === 0) {
163
- return false;
164
- }
165
- const { suggestions, index } = searchState;
166
- switch (event.key) {
167
- case "ArrowDown":
168
- event.preventDefault();
169
- setSearchState((prev) => ({
170
- ...prev,
171
- index: (prev.index + 1) % suggestions.length
172
- }));
173
- return true;
174
- case "ArrowUp":
175
- event.preventDefault();
176
- setSearchState((prev) => ({
177
- ...prev,
178
- index: prev.index === 0 ? suggestions.length - 1 : prev.index - 1
179
- }));
180
- return true;
181
- case "Tab":
182
- case "Enter": {
183
- event.preventDefault();
184
- const selectedMention = suggestions[index];
185
- if (selectedMention) {
186
- insertMention(selectedMention);
187
- }
188
- return true;
189
- }
190
- case "Escape":
191
- event.preventDefault();
192
- setSearchState((prev) => ({ ...prev, isSearching: false }));
193
- return true;
161
+ });
162
+ const insertMention = useEventCallback((mention) => {
163
+ const { target, trigger } = searchState;
164
+ if (!target) return;
165
+ Transforms.select(editor, target);
166
+ Transforms.delete(editor);
167
+ insertWithSmartSpacing(editor, () => {
168
+ const mentionElement = {
169
+ type: "mention",
170
+ mentionType: mention.type,
171
+ mentionId: mention.id,
172
+ mentionLabel: mention.label,
173
+ mentionPrefix,
174
+ mentionData: mention.metadata,
175
+ children: [{ text: "" }]
176
+ };
177
+ Transforms.insertNodes(editor, mentionElement);
178
+ Transforms.move(editor);
179
+ });
180
+ const currentSelection = editor.selection;
181
+ setSearchState((prev) => ({ ...prev, isSearching: false }));
182
+ onMentionSelect == null ? void 0 : onMentionSelect(mention, trigger);
183
+ onSearchClose == null ? void 0 : onSearchClose();
184
+ requestAnimationFrame(() => {
185
+ if (currentSelection) {
186
+ Transforms.select(editor, currentSelection);
194
187
  }
188
+ ReactEditor.focus(editor);
189
+ });
190
+ });
191
+ const handleKeyDown = useEventCallback((event) => {
192
+ if (!searchState.isSearching || searchState.suggestions.length === 0) {
195
193
  return false;
196
- },
197
- [searchState, insertMention]
198
- );
199
- const getSuggestionPosition = useCallback(() => {
200
- if (!searchState.isSearching || !searchState.target) {
201
- return null;
202
194
  }
203
- try {
204
- const domRange = ReactEditor.toDOMRange(editor, searchState.target);
205
- const rect = domRange.getBoundingClientRect();
206
- return {
207
- x: rect.left,
208
- y: rect.bottom + window.scrollY + 4
209
- // 添加4px间距
210
- };
211
- } catch {
212
- return null;
195
+ const { suggestions, index } = searchState;
196
+ switch (event.key) {
197
+ case "ArrowDown":
198
+ event.preventDefault();
199
+ setSearchState((prev) => ({
200
+ ...prev,
201
+ index: (prev.index + 1) % suggestions.length
202
+ }));
203
+ return true;
204
+ case "ArrowUp":
205
+ event.preventDefault();
206
+ setSearchState((prev) => ({
207
+ ...prev,
208
+ index: prev.index === 0 ? suggestions.length - 1 : prev.index - 1
209
+ }));
210
+ return true;
211
+ case "Tab":
212
+ case "Enter": {
213
+ event.preventDefault();
214
+ const selectedMention = suggestions[index];
215
+ if (selectedMention) {
216
+ insertMention(selectedMention);
217
+ }
218
+ return true;
219
+ }
220
+ case "Escape":
221
+ event.preventDefault();
222
+ setSearchState((prev) => ({ ...prev, isSearching: false }));
223
+ return true;
213
224
  }
214
- }, [editor, searchState.isSearching, searchState.target]);
215
- useEffect(() => {
216
- if (triggers.length === 0) {
217
- return;
225
+ return false;
226
+ });
227
+ const closeMentionSearch = useEventCallback(() => {
228
+ if (searchTimeoutRef.current) {
229
+ clearTimeout(searchTimeoutRef.current);
218
230
  }
219
- checkMentionSearch();
220
- }, [checkMentionSearch, triggers.length]);
221
- const closeMentionSearch = useCallback(() => {
222
231
  setSearchState({
223
232
  isSearching: false,
224
233
  trigger: "",
@@ -226,33 +235,43 @@ function useMentions({
226
235
  target: null,
227
236
  index: 0,
228
237
  suggestions: [],
229
- loading: false
238
+ loading: false,
239
+ position: null
230
240
  });
231
- }, []);
241
+ });
242
+ const selectMention = useEventCallback((index) => {
243
+ const mention = searchState.suggestions[index];
244
+ if (mention) {
245
+ insertMention(mention);
246
+ }
247
+ });
248
+ const selectNextMention = useEventCallback(() => {
249
+ setSearchState((prev) => {
250
+ if (prev.suggestions.length === 0) return prev;
251
+ return {
252
+ ...prev,
253
+ index: (prev.index + 1) % prev.suggestions.length
254
+ };
255
+ });
256
+ });
257
+ const selectPreviousMention = useEventCallback(() => {
258
+ setSearchState((prev) => {
259
+ if (prev.suggestions.length === 0) return prev;
260
+ return {
261
+ ...prev,
262
+ index: prev.index === 0 ? prev.suggestions.length - 1 : prev.index - 1
263
+ };
264
+ });
265
+ });
232
266
  return {
233
267
  searchState,
268
+ checkMentionSearch,
234
269
  insertMention,
235
270
  handleKeyDown,
236
- getSuggestionPosition,
237
271
  closeMentionSearch,
238
- selectMention: (index) => {
239
- const mention = searchState.suggestions[index];
240
- if (mention) {
241
- insertMention(mention);
242
- }
243
- },
244
- selectNextMention: () => {
245
- setSearchState((prev) => ({
246
- ...prev,
247
- index: (prev.index + 1) % prev.suggestions.length
248
- }));
249
- },
250
- selectPreviousMention: () => {
251
- setSearchState((prev) => ({
252
- ...prev,
253
- index: prev.index === 0 ? prev.suggestions.length - 1 : prev.index - 1
254
- }));
255
- }
272
+ selectMention,
273
+ selectNextMention,
274
+ selectPreviousMention
256
275
  };
257
276
  }
258
277
  export {
@@ -1,6 +1,5 @@
1
1
  export { ContextInput } from './context-input';
2
- export * from './components';
3
- export * from './hooks';
4
- export * from './utils';
5
- export type * from './types';
6
- export { contextInputTv } from './tv';
2
+ export { InsertMentionsButton, CopyButton } from './components';
3
+ export { useContextInput, useMentions, useContextInputEditor } from './hooks';
4
+ export { shouldInsertSpaceBefore, shouldInsertSpaceAfter, insertSpaceBeforeIfNeeded, insertSpaceAfterIfNeeded, insertWithSmartSpacing, convertSlateToText, convertTextToSlate, convertTextToSlateWithResolver, extractTextWithMentions, parseTextWithMentions, extractMentionContext, } from './utils';
5
+ export type { ContextInputProps, ContextInputValue, ContextMentionElement, ContextInputRef, ContextMentionProps, ContextMentionItemProps, ContextMentionTrigger, } from './types';
@@ -1,11 +1,11 @@
1
1
  import { ComponentType } from 'react';
2
2
  import { RenderElementProps } from 'slate-react';
3
- export interface MentionProps extends RenderElementProps {
3
+ export interface ContextMentionProps extends RenderElementProps {
4
4
  mentionPrefix?: string;
5
5
  renderMention?: (mention: MentionMatch) => React.ReactNode;
6
6
  variant?: "default" | "light" | "dark" | "reset";
7
7
  }
8
- export interface MentionItem {
8
+ export interface ContextMentionItemProps {
9
9
  description?: string;
10
10
  id: string;
11
11
  label: string;
@@ -19,7 +19,7 @@ export interface MentionMatch {
19
19
  mentionText: string;
20
20
  };
21
21
  endIndex: number;
22
- item: MentionItem;
22
+ item: ContextMentionItemProps;
23
23
  startIndex: number;
24
24
  text: string;
25
25
  }
@@ -27,12 +27,12 @@ export interface ContextInputValue {
27
27
  mentions: MentionMatch[];
28
28
  text: string;
29
29
  }
30
- export interface MentionTrigger {
30
+ export interface ContextMentionTrigger {
31
31
  allowSpaceInQuery?: boolean;
32
32
  char: string;
33
33
  mentionRegex?: RegExp;
34
- onSearch: (query: string, char: string) => Promise<MentionItem[]> | MentionItem[];
35
- renderItem?: (item: MentionItem, isSelected: boolean) => React.ReactNode;
34
+ onSearch: (query: string, char: string) => Promise<ContextMentionItemProps[]> | ContextMentionItemProps[];
35
+ renderItem?: (item: ContextMentionItemProps, isSelected: boolean) => React.ReactNode;
36
36
  }
37
37
  export interface ContextInputProps {
38
38
  afterElement?: React.ReactNode;
@@ -40,7 +40,7 @@ export interface ContextInputProps {
40
40
  beforeElement?: React.ReactNode;
41
41
  children?: React.ReactNode;
42
42
  className?: string;
43
- customMentionComponent?: ComponentType<MentionProps>;
43
+ customMentionComponent?: ComponentType<ContextMentionProps>;
44
44
  disabled?: boolean;
45
45
  maxLength?: number;
46
46
  maxSuggestions?: number;
@@ -53,15 +53,15 @@ export interface ContextInputProps {
53
53
  onCompositionStart?: (event: React.CompositionEvent) => void;
54
54
  onFocus?: () => void;
55
55
  onKeyDown?: (event: React.KeyboardEvent) => void;
56
- onMentionSelect?: (mention: MentionItem, trigger: string) => void;
56
+ onMentionSelect?: (mention: ContextMentionItemProps, trigger: string) => void;
57
57
  placeholder?: string;
58
58
  readOnly?: boolean;
59
59
  renderMention?: (mention: MentionMatch) => React.ReactNode;
60
- renderSuggestion?: (item: MentionItem, isSelected: boolean) => React.ReactNode;
60
+ renderSuggestion?: (item: ContextMentionItemProps, isSelected: boolean) => React.ReactNode;
61
61
  root?: HTMLElement | null;
62
62
  size?: "default" | "large";
63
63
  suggestionListClassName?: string;
64
- triggers?: MentionTrigger[];
64
+ triggers?: ContextMentionTrigger[];
65
65
  value?: ContextInputValue;
66
66
  variant?: "default" | "light" | "dark" | "reset";
67
67
  }
@@ -69,11 +69,11 @@ export interface ContextMentionElement {
69
69
  children: [{
70
70
  text: "";
71
71
  }];
72
- mentionData?: MentionItem["metadata"];
72
+ mentionData?: ContextMentionItemProps["metadata"];
73
73
  mentionId: string;
74
74
  mentionLabel: string;
75
75
  mentionPrefix?: string;
76
- mentionType: MentionItem["type"];
76
+ mentionType: ContextMentionItemProps["type"];
77
77
  type: "mention";
78
78
  }
79
79
  export interface ContextParagraphElement {