@bysages/react 0.4.4 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (314) hide show
  1. package/dist/ai-B0o-dsAf.mjs +309 -0
  2. package/dist/ai-prompt-input-Cl9ulICF.mjs +401 -0
  3. package/dist/{ai-response-CjjjprMY.mjs → ai-response-DTxdL5rX.mjs} +9 -11
  4. package/dist/{chevron-BA7kV9m7.mjs → chevron-DnImlNip.mjs} +2 -3
  5. package/dist/components/accordion/index.d.mts +1 -2
  6. package/dist/components/accordion/index.mjs +3 -4
  7. package/dist/components/affix/index.d.mts +1 -2
  8. package/dist/components/affix/index.mjs +2 -3
  9. package/dist/components/ai/index.d.mts +107 -2
  10. package/dist/components/ai/index.mjs +7 -82
  11. package/dist/components/ai-action/index.d.mts +0 -2
  12. package/dist/components/ai-action/index.mjs +2 -3
  13. package/dist/components/ai-attachments/index.d.mts +0 -2
  14. package/dist/components/ai-attachments/index.mjs +4 -5
  15. package/dist/components/ai-message/index.d.mts +2 -14
  16. package/dist/components/ai-message/index.mjs +5 -4
  17. package/dist/components/ai-prompt-input/index.d.mts +14 -18
  18. package/dist/components/ai-prompt-input/index.mjs +1 -126
  19. package/dist/components/ai-reasoning/index.d.mts +0 -2
  20. package/dist/components/ai-reasoning/index.mjs +3 -4
  21. package/dist/components/ai-response/index.d.mts +1 -3
  22. package/dist/components/ai-response/index.mjs +1 -2
  23. package/dist/components/ai-source/index.d.mts +0 -2
  24. package/dist/components/ai-source/index.mjs +2 -3
  25. package/dist/components/ai-suggestion/index.d.mts +0 -2
  26. package/dist/components/ai-suggestion/index.mjs +2 -3
  27. package/dist/components/ai-tool/index.d.mts +2 -24
  28. package/dist/components/ai-tool/index.mjs +46 -14
  29. package/dist/components/alert/index.d.mts +1 -2
  30. package/dist/components/alert/index.mjs +2 -3
  31. package/dist/components/angle-slider/index.d.mts +1 -2
  32. package/dist/components/angle-slider/index.mjs +2 -3
  33. package/dist/components/aspect-ratio/index.d.mts +1 -2
  34. package/dist/components/aspect-ratio/index.mjs +2 -3
  35. package/dist/components/autocomplete/index.d.mts +5 -3
  36. package/dist/components/autocomplete/index.mjs +12 -10
  37. package/dist/components/avatar/index.d.mts +1 -2
  38. package/dist/components/avatar/index.mjs +2 -3
  39. package/dist/components/avatar-group/index.d.mts +1 -2
  40. package/dist/components/avatar-group/index.mjs +2 -3
  41. package/dist/components/back-top/index.d.mts +1 -2
  42. package/dist/components/back-top/index.mjs +3 -4
  43. package/dist/components/badge/index.d.mts +1 -2
  44. package/dist/components/badge/index.mjs +2 -3
  45. package/dist/components/banner/index.d.mts +1 -2
  46. package/dist/components/banner/index.mjs +3 -4
  47. package/dist/components/bento/index.d.mts +1 -3
  48. package/dist/components/bento/index.mjs +1 -2
  49. package/dist/components/block-ui/index.d.mts +1 -2
  50. package/dist/components/block-ui/index.mjs +2 -3
  51. package/dist/components/breadcrumb/index.d.mts +1 -2
  52. package/dist/components/breadcrumb/index.mjs +2 -3
  53. package/dist/components/browser/index.d.mts +1 -3
  54. package/dist/components/browser/index.mjs +1 -2
  55. package/dist/components/button/index.d.mts +1 -2
  56. package/dist/components/button/index.mjs +2 -3
  57. package/dist/components/button-group/index.d.mts +1 -2
  58. package/dist/components/button-group/index.mjs +1 -2
  59. package/dist/components/calendar/index.d.mts +1 -2
  60. package/dist/components/calendar/index.mjs +3 -4
  61. package/dist/components/card/index.d.mts +1 -3
  62. package/dist/components/card/index.mjs +1 -2
  63. package/dist/components/carousel/index.d.mts +1 -2
  64. package/dist/components/carousel/index.mjs +3 -4
  65. package/dist/components/cascade-select/index.d.mts +5 -3
  66. package/dist/components/cascade-select/index.mjs +42 -40
  67. package/dist/components/checkbox/index.d.mts +1 -2
  68. package/dist/components/checkbox/index.mjs +3 -4
  69. package/dist/components/checkbox-group/index.d.mts +1 -2
  70. package/dist/components/checkbox-group/index.mjs +3 -4
  71. package/dist/components/chip/index.d.mts +1 -2
  72. package/dist/components/chip/index.mjs +2 -3
  73. package/dist/components/client-only/index.d.mts +0 -2
  74. package/dist/components/client-only/index.mjs +2 -3
  75. package/dist/components/clipboard/index.d.mts +1 -2
  76. package/dist/components/clipboard/index.mjs +3 -4
  77. package/dist/components/collapsible/index.d.mts +1 -2
  78. package/dist/components/collapsible/index.mjs +3 -4
  79. package/dist/components/collection/index.mjs +1 -2
  80. package/dist/components/color-picker/index.d.mts +10 -3
  81. package/dist/components/color-picker/index.mjs +39 -33
  82. package/dist/components/combobox/index.d.mts +10 -3
  83. package/dist/components/combobox/index.mjs +17 -12
  84. package/dist/components/command/index.d.mts +5 -3
  85. package/dist/components/command/index.mjs +74 -72
  86. package/dist/components/comment/index.d.mts +1 -2
  87. package/dist/components/comment/index.mjs +2 -3
  88. package/dist/components/config-provider/index.d.mts +1 -2
  89. package/dist/components/config-provider/index.mjs +2 -3
  90. package/dist/components/container/index.d.mts +1 -2
  91. package/dist/components/container/index.mjs +2 -3
  92. package/dist/components/data-view/index.d.mts +1 -2
  93. package/dist/components/data-view/index.mjs +3 -4
  94. package/dist/components/date-input/index.d.mts +0 -2
  95. package/dist/components/date-input/index.mjs +2 -3
  96. package/dist/components/date-picker/index.d.mts +9 -3
  97. package/dist/components/date-picker/index.mjs +30 -25
  98. package/dist/components/deferred-content/index.d.mts +1 -2
  99. package/dist/components/deferred-content/index.mjs +2 -3
  100. package/dist/components/descriptions/index.d.mts +1 -2
  101. package/dist/components/descriptions/index.mjs +2 -3
  102. package/dist/components/dialog/index.d.mts +49 -5
  103. package/dist/components/dialog/index.mjs +67 -20
  104. package/dist/components/dock/index.d.mts +1 -3
  105. package/dist/components/dock/index.mjs +1 -2
  106. package/dist/components/download-trigger/index.d.mts +0 -2
  107. package/dist/components/download-trigger/index.mjs +2 -3
  108. package/dist/components/drawer/index.d.mts +20 -5
  109. package/dist/components/drawer/index.mjs +21 -16
  110. package/dist/components/dynamic-input/index.d.mts +1 -2
  111. package/dist/components/dynamic-input/index.mjs +5 -6
  112. package/dist/components/editable/index.d.mts +1 -2
  113. package/dist/components/editable/index.mjs +3 -4
  114. package/dist/components/ellipsis/index.d.mts +1 -2
  115. package/dist/components/ellipsis/index.mjs +2 -3
  116. package/dist/components/empty/index.d.mts +1 -3
  117. package/dist/components/empty/index.mjs +1 -2
  118. package/dist/components/field/index.d.mts +1 -2
  119. package/dist/components/field/index.mjs +2 -3
  120. package/dist/components/fieldset/index.d.mts +1 -2
  121. package/dist/components/fieldset/index.mjs +2 -3
  122. package/dist/components/file-upload/index.d.mts +1 -2
  123. package/dist/components/file-upload/index.mjs +3 -4
  124. package/dist/components/float-button/index.d.mts +1 -2
  125. package/dist/components/float-button/index.mjs +3 -4
  126. package/dist/components/floating-panel/index.d.mts +20 -5
  127. package/dist/components/floating-panel/index.mjs +37 -32
  128. package/dist/components/focus-trap/index.d.mts +0 -2
  129. package/dist/components/focus-trap/index.mjs +2 -3
  130. package/dist/components/form/index.d.mts +0 -2
  131. package/dist/components/form/index.mjs +2 -3
  132. package/dist/components/format/index.d.mts +1 -3
  133. package/dist/components/format/index.mjs +1 -2
  134. package/dist/components/frame/index.d.mts +1 -3
  135. package/dist/components/frame/index.mjs +3 -4
  136. package/dist/components/grid/index.d.mts +1 -2
  137. package/dist/components/grid/index.mjs +2 -3
  138. package/dist/components/highlight/index.d.mts +1 -3
  139. package/dist/components/highlight/index.mjs +2 -3
  140. package/dist/components/hover-card/index.d.mts +18 -5
  141. package/dist/components/hover-card/index.mjs +16 -11
  142. package/dist/components/icon/index.d.mts +1 -2
  143. package/dist/components/icon/index.mjs +2 -3
  144. package/dist/components/image/index.d.mts +1 -2
  145. package/dist/components/image/index.mjs +3 -4
  146. package/dist/components/image-cropper/index.d.mts +1 -2
  147. package/dist/components/image-cropper/index.mjs +2 -3
  148. package/dist/components/image-viewer/index.d.mts +1 -1
  149. package/dist/components/image-viewer/index.mjs +1 -2
  150. package/dist/components/input/index.d.mts +1 -3
  151. package/dist/components/input/index.mjs +1 -2
  152. package/dist/components/input-group/index.d.mts +1 -3
  153. package/dist/components/input-group/index.mjs +1 -2
  154. package/dist/components/json-tree-view/index.d.mts +1 -2
  155. package/dist/components/json-tree-view/index.mjs +3 -4
  156. package/dist/components/kbd/index.d.mts +1 -2
  157. package/dist/components/kbd/index.mjs +2 -3
  158. package/dist/components/layout/index.d.mts +1 -2
  159. package/dist/components/layout/index.mjs +19 -15
  160. package/dist/components/link/index.d.mts +1 -2
  161. package/dist/components/link/index.mjs +2 -3
  162. package/dist/components/list/index.d.mts +1 -2
  163. package/dist/components/list/index.mjs +1 -2
  164. package/dist/components/listbox/index.d.mts +0 -2
  165. package/dist/components/listbox/index.mjs +3 -4
  166. package/dist/components/marquee/index.d.mts +1 -2
  167. package/dist/components/marquee/index.mjs +2 -3
  168. package/dist/components/masonry/index.d.mts +1 -2
  169. package/dist/components/masonry/index.mjs +2 -3
  170. package/dist/components/media-player/index.d.mts +1 -1
  171. package/dist/components/media-player/index.mjs +1 -2
  172. package/dist/components/mentions/index.d.mts +2 -2
  173. package/dist/components/mentions/index.mjs +1 -2
  174. package/dist/components/menu/index.d.mts +11 -4
  175. package/dist/components/menu/index.mjs +15 -10
  176. package/dist/components/menubar/index.d.mts +5 -3
  177. package/dist/components/menubar/index.mjs +14 -12
  178. package/dist/components/meter/index.d.mts +1 -3
  179. package/dist/components/meter/index.mjs +1 -2
  180. package/dist/components/navigation-menu/index.d.mts +10 -3
  181. package/dist/components/navigation-menu/index.mjs +9 -4
  182. package/dist/components/number-input/index.d.mts +1 -2
  183. package/dist/components/number-input/index.mjs +3 -4
  184. package/dist/components/order-list/index.d.mts +1 -2
  185. package/dist/components/order-list/index.mjs +4 -5
  186. package/dist/components/page-header/index.d.mts +1 -3
  187. package/dist/components/page-header/index.mjs +1 -2
  188. package/dist/components/pagination/index.d.mts +3 -4
  189. package/dist/components/pagination/index.mjs +3 -4
  190. package/dist/components/password-input/index.d.mts +1 -2
  191. package/dist/components/password-input/index.mjs +3 -4
  192. package/dist/components/pin-input/index.d.mts +1 -2
  193. package/dist/components/pin-input/index.mjs +2 -3
  194. package/dist/components/popconfirm/index.d.mts +6 -4
  195. package/dist/components/popconfirm/index.mjs +33 -31
  196. package/dist/components/popover/index.d.mts +1 -1
  197. package/dist/components/popover/index.mjs +23 -18
  198. package/dist/components/presence/index.d.mts +0 -2
  199. package/dist/components/presence/index.mjs +2 -3
  200. package/dist/components/progress/index.d.mts +1 -2
  201. package/dist/components/progress/index.mjs +2 -3
  202. package/dist/components/progress-group/index.d.mts +1 -2
  203. package/dist/components/progress-group/index.mjs +2 -3
  204. package/dist/components/qr-code/index.d.mts +1 -2
  205. package/dist/components/qr-code/index.mjs +2 -3
  206. package/dist/components/radio-group/index.d.mts +1 -2
  207. package/dist/components/radio-group/index.mjs +2 -3
  208. package/dist/components/rating-group/index.d.mts +1 -2
  209. package/dist/components/rating-group/index.mjs +3 -4
  210. package/dist/components/result/index.d.mts +1 -2
  211. package/dist/components/result/index.mjs +2 -3
  212. package/dist/components/scroll-area/index.d.mts +8 -3
  213. package/dist/components/scroll-area/index.mjs +7 -6
  214. package/dist/components/segment-group/index.d.mts +1 -2
  215. package/dist/components/segment-group/index.mjs +2 -3
  216. package/dist/components/select/index.d.mts +1 -1
  217. package/dist/components/select/index.mjs +1 -2
  218. package/dist/components/separator/index.d.mts +1 -2
  219. package/dist/components/separator/index.mjs +2 -3
  220. package/dist/components/signature-pad/index.d.mts +1 -2
  221. package/dist/components/signature-pad/index.mjs +3 -4
  222. package/dist/components/skeleton/index.d.mts +1 -2
  223. package/dist/components/skeleton/index.mjs +2 -3
  224. package/dist/components/slider/index.d.mts +1 -2
  225. package/dist/components/slider/index.mjs +2 -3
  226. package/dist/components/spinner/index.d.mts +1 -2
  227. package/dist/components/spinner/index.mjs +3 -4
  228. package/dist/components/split-button/index.d.mts +5 -3
  229. package/dist/components/split-button/index.mjs +16 -14
  230. package/dist/components/splitter/index.d.mts +1 -2
  231. package/dist/components/splitter/index.mjs +2 -3
  232. package/dist/components/spotlight/index.d.mts +1 -2
  233. package/dist/components/spotlight/index.mjs +2 -3
  234. package/dist/components/stack/index.d.mts +1 -2
  235. package/dist/components/stack/index.mjs +2 -3
  236. package/dist/components/stat/index.d.mts +1 -3
  237. package/dist/components/stat/index.mjs +1 -2
  238. package/dist/components/steps/index.d.mts +0 -2
  239. package/dist/components/steps/index.mjs +2 -3
  240. package/dist/components/swap/index.d.mts +1 -2
  241. package/dist/components/swap/index.mjs +3 -4
  242. package/dist/components/switch/index.d.mts +1 -2
  243. package/dist/components/switch/index.mjs +2 -3
  244. package/dist/components/table/index.d.mts +21 -3
  245. package/dist/components/table/index.mjs +28 -14
  246. package/dist/components/tabs/index.d.mts +9 -3
  247. package/dist/components/tabs/index.mjs +36 -8
  248. package/dist/components/tag/index.d.mts +1 -2
  249. package/dist/components/tag/index.mjs +3 -4
  250. package/dist/components/tags-input/index.d.mts +1 -2
  251. package/dist/components/tags-input/index.mjs +3 -4
  252. package/dist/components/terminal/index.d.mts +4 -3
  253. package/dist/components/terminal/index.mjs +8 -7
  254. package/dist/components/textarea/index.d.mts +1 -2
  255. package/dist/components/textarea/index.mjs +2 -3
  256. package/dist/components/timeline/index.d.mts +1 -2
  257. package/dist/components/timeline/index.mjs +1 -2
  258. package/dist/components/timer/index.d.mts +1 -2
  259. package/dist/components/timer/index.mjs +2 -3
  260. package/dist/components/toast/index.d.mts +0 -2
  261. package/dist/components/toast/index.mjs +4 -5
  262. package/dist/components/toc/index.d.mts +1 -2
  263. package/dist/components/toc/index.mjs +2 -3
  264. package/dist/components/toggle/index.d.mts +1 -2
  265. package/dist/components/toggle/index.mjs +2 -3
  266. package/dist/components/toggle-group/index.d.mts +1 -2
  267. package/dist/components/toggle-group/index.mjs +3 -4
  268. package/dist/components/toolbar/index.d.mts +1 -2
  269. package/dist/components/toolbar/index.mjs +2 -3
  270. package/dist/components/tooltip/index.d.mts +18 -5
  271. package/dist/components/tooltip/index.mjs +10 -5
  272. package/dist/components/tour/index.d.mts +20 -5
  273. package/dist/components/tour/index.mjs +18 -13
  274. package/dist/components/transfer/index.d.mts +1 -2
  275. package/dist/components/transfer/index.mjs +5 -6
  276. package/dist/components/tree-select/index.d.mts +6 -4
  277. package/dist/components/tree-select/index.mjs +43 -41
  278. package/dist/components/tree-view/index.d.mts +15 -5
  279. package/dist/components/tree-view/index.mjs +30 -12
  280. package/dist/components/typography/index.d.mts +9 -7
  281. package/dist/components/typography/index.mjs +10 -3
  282. package/dist/components/user/index.d.mts +1 -2
  283. package/dist/components/user/index.mjs +2 -3
  284. package/dist/components/virtual-list/index.d.mts +1 -2
  285. package/dist/components/virtual-list/index.mjs +2 -3
  286. package/dist/components/watermark/index.d.mts +1 -2
  287. package/dist/components/watermark/index.mjs +2 -3
  288. package/dist/{family-DE_GQeeM.mjs → family-Co1YsN4N.mjs} +1 -2
  289. package/dist/floating-BhcDRgnx.d.mts +7 -0
  290. package/dist/floating-CMR7cvmA.mjs +33 -0
  291. package/dist/generative/index.d.mts +0 -2
  292. package/dist/generative/index.mjs +28 -53
  293. package/dist/{icon-Cri0-7-x.mjs → icon-C9udWCyz.mjs} +1 -2
  294. package/dist/{id-C37UYLwJ.mjs → id-Ctic_3o8.mjs} +1 -2
  295. package/dist/{image-viewer-D4FuYrk6.mjs → image-viewer-BPTApdoP.mjs} +50 -52
  296. package/dist/index-CEYybyEQ.d.mts +163 -0
  297. package/dist/index-CjO4Ggf0.d.mts +115 -0
  298. package/dist/{index-BcRdWGY-.d.mts → index-DIZEFqJM.d.mts} +0 -8
  299. package/dist/{index-D_iKc2Uw.d.mts → index-DZ2S5rMj.d.mts} +10 -6
  300. package/dist/index-j02dTkfc.d.mts +37 -0
  301. package/dist/index-lCsvE2Vl.d.mts +37 -0
  302. package/dist/{index-Dj8S4eyJ.d.mts → index-n9VlNO7D.d.mts} +4 -5
  303. package/dist/index.d.mts +13 -13
  304. package/dist/index.mjs +10 -10
  305. package/dist/{input-BDpQ0e6G.mjs → input-YRjehBhU.mjs} +3 -5
  306. package/dist/{media-player-C0WcjVI-.mjs → media-player-DxG0EYz7.mjs} +7 -12
  307. package/dist/mentions-B59tQDPt.mjs +341 -0
  308. package/dist/{messages-1jJWtaYU.mjs → messages-B6n0lVyt.mjs} +1 -2
  309. package/dist/{select-D_soVdWK.mjs → select-BLFqfeVw.mjs} +24 -20
  310. package/package.json +17 -17
  311. package/dist/index-B4twHAQC.d.mts +0 -10456
  312. package/dist/index-Bbg4heDO.d.mts +0 -113
  313. package/dist/index-Eu-Bttta.d.mts +0 -24
  314. package/dist/mentions-BwnyvdXz.mjs +0 -213
@@ -1,113 +0,0 @@
1
- import { t as Popover } from "./index-Eu-Bttta.mjs";
2
- import { HTMLAttributes } from "react";
3
- //#region src/components/mentions/use-mentions.d.ts
4
- interface UseMentionsOptions {
5
- /** The candidates offered once the trigger character is typed. */
6
- items: MentionEntry[];
7
- /** The character that summons the candidates. */
8
- trigger?: string;
9
- }
10
- interface UseMentionsHandlers {
11
- /** The text the field holds right now — read at keystroke time, never
12
- * from a controlled prop that lags a render behind the caret. */
13
- getText: () => string;
14
- /** Writes the field's next text: a mention inserted at the token. */
15
- setText: (value: string) => void;
16
- }
17
- /** Whatever carries a key press — a native KeyboardEvent or a React
18
- * synthetic one; the detector only needs the key's name and the power
19
- * to hold the key back. */
20
- interface MentionKeyEvent {
21
- key: string;
22
- preventDefault: () => void;
23
- }
24
- /** The @-detection machinery behind a mention field: watch the caret,
25
- * offer the matching candidates, and answer for the keys that drive
26
- * them. The field element arrives as a getter because hosts wrap it
27
- * differently (a bare textarea, a field part's ref).
28
- *
29
- * `onKeydown` answers whether the vessel consumed the key, so a host
30
- * with its own Enter semantics — a composer that sends — can yield to
31
- * the candidates first and act only when the vessel stands down. */
32
- declare function useMentions(options: UseMentionsOptions | (() => UseMentionsOptions), textarea: () => HTMLTextAreaElement | null, handlers: UseMentionsHandlers): {
33
- open: boolean;
34
- matches: MentionEntry[];
35
- active: number;
36
- setActive: import("react").Dispatch<import("react").SetStateAction<number>>;
37
- insert: (entry: MentionEntry) => void;
38
- close: () => void;
39
- onInput: () => void;
40
- onKeydown: (event: MentionKeyEvent) => boolean;
41
- };
42
- //#endregion
43
- //#region src/components/mentions/index.d.ts
44
- interface MentionEntry {
45
- label: string;
46
- value: string;
47
- }
48
- interface MentionsVesselProps {
49
- id?: string;
50
- /** The host field's rung, so the rows keep the field's register. */
51
- size?: "sm" | "md" | "lg";
52
- /** Whether the candidates are up. */
53
- open?: boolean;
54
- /** The candidates on offer. */
55
- matches?: MentionEntry[];
56
- /** The keyboard's active row. */
57
- active?: number;
58
- /** The rectangle the vessel points at — the host's textarea. */
59
- anchor?: HTMLTextAreaElement | null;
60
- /** A candidate was chosen. */
61
- onInsert?: (entry: MentionEntry) => void;
62
- /** The pointer moved to a row. */
63
- onActiveChange?: (index: number) => void;
64
- /** The vessel was dismissed. */
65
- onOpenChange?: (open: boolean) => void;
66
- }
67
- /** The vessel: the candidates themselves as a floating card. The anchor
68
- * is virtual — a live rectangle off the host's field — so a host keeps
69
- * its own anatomy (the textarea rides where the host puts it) and the
70
- * vessel still points at the right place. Shares the detection state
71
- * with the host through `useMentions`. */
72
- declare function MentionsVesselImpl({ size, open, matches, active, anchor, onInsert, onActiveChange, onOpenChange, id }: MentionsVesselProps): import("react").JSX.Element;
73
- declare const MentionsVessel: typeof MentionsVesselImpl & {
74
- Root: typeof MentionsVesselImpl;
75
- };
76
- /**
77
- * @-mentions: a plain textarea that, when the text before the caret ends
78
- * with the trigger character followed by a token, offers the matching
79
- * candidates in a small anchored vessel; choosing one replaces the token
80
- * with `trigger + label` and hands the whole text back through
81
- * `onValueChange`. Arrows move, Enter inserts, Escape dismisses.
82
- *
83
- * The field is the shared `Field.Textarea` — field wiring (label ids,
84
- * the invalid state, autoresize) rides on it for free — and the vessel
85
- * anchors through the popover's own `Anchor` part wrapped around the
86
- * field, so the machine, not a local rectangle, points the popup at the
87
- * input. Composers that keep their own field anatomy (the AI prompt
88
- * input) skip this shell and wire `useMentions` plus `MentionsVessel`
89
- * themselves.
90
- */
91
- interface MentionsProps extends HTMLAttributes<HTMLDivElement> {
92
- /** The candidates offered once the trigger character is typed. */
93
- items?: MentionEntry[];
94
- /** The text held by the field. Supply it to control the field;
95
- * changes are reported via `onValueChange`. */
96
- value?: string;
97
- /** The character that summons the candidates. */
98
- trigger?: string;
99
- placeholder?: string;
100
- /** Let the field grow with its text instead of holding `rows`. */
101
- autoresize?: boolean;
102
- /** Standing alone, the field styles itself from this flag; inside a
103
- * `Field.Root` the field's own invalid state takes over. */
104
- invalid?: boolean;
105
- /** One rung of the control-height ladder for the resting field. */
106
- size?: "sm" | "md" | "lg";
107
- /** Reports the field's next text. */
108
- onValueChange?: (value: string) => void;
109
- }
110
- declare function MentionsImpl({ items, value, trigger, placeholder, autoresize, invalid, size, onValueChange, children, ...rest }: MentionsProps): import("react").JSX.Element;
111
- declare const Mentions: typeof MentionsImpl & typeof Popover;
112
- //#endregion
113
- export { MentionsVesselProps as a, useMentions as c, MentionsVessel as i, Mentions as n, UseMentionsHandlers as o, MentionsProps as r, UseMentionsOptions as s, MentionEntry as t };
@@ -1,24 +0,0 @@
1
- import { ReactNode } from "react";
2
- import { Popover } from "@ark-ui/react/popover";
3
- //#region src/components/popover/index.d.ts
4
- type PopoverPlacement = "top" | "top-start" | "top-end" | "bottom" | "bottom-start" | "bottom-end" | "left" | "left-start" | "left-end" | "right" | "right-start" | "right-end";
5
- interface PopoverFacadeProps {
6
- open?: boolean;
7
- defaultOpen?: boolean;
8
- trigger?: ReactNode;
9
- content?: string;
10
- label: string;
11
- description?: string;
12
- disabled?: boolean;
13
- placement?: PopoverPlacement;
14
- children?: ReactNode;
15
- onOpenChange?: (open: boolean) => void;
16
- }
17
- declare function PopoverFacade({ open, defaultOpen, trigger, content, label, description, disabled, placement, children, onOpenChange }: PopoverFacadeProps): import("react").JSX.Element;
18
- declare namespace PopoverFacade {
19
- var displayName: string;
20
- }
21
- type PopoverParts = typeof Popover;
22
- declare const Popover$1: typeof PopoverFacade & PopoverParts;
23
- //#endregion
24
- export { PopoverFacadeProps as n, Popover$1 as t };
@@ -1,213 +0,0 @@
1
- import { t as useElementId } from "./id-C37UYLwJ.mjs";
2
- import { t as withSelfRoot } from "./family-DE_GQeeM.mjs";
3
- import { Field } from "./components/field/index.mjs";
4
- import { Popover as Popover$1 } from "./components/popover/index.mjs";
5
- import { injectComponentStyle } from "@bysages/core/styling";
6
- import { jsx, jsxs } from "react/jsx-runtime";
7
- import { useRef, useState } from "react";
8
- import { Popover } from "@ark-ui/react/popover";
9
- import { Portal } from "@ark-ui/react/portal";
10
- //#region src/components/mentions/use-mentions.ts
11
- /** The @-detection machinery behind a mention field: watch the caret,
12
- * offer the matching candidates, and answer for the keys that drive
13
- * them. The field element arrives as a getter because hosts wrap it
14
- * differently (a bare textarea, a field part's ref).
15
- *
16
- * `onKeydown` answers whether the vessel consumed the key, so a host
17
- * with its own Enter semantics — a composer that sends — can yield to
18
- * the candidates first and act only when the vessel stands down. */
19
- function useMentions(options, textarea, handlers) {
20
- const [popupOpen, setPopupOpen] = useState(false);
21
- const [matches, setMatches] = useState([]);
22
- const [active, setActive] = useState(0);
23
- const anchorIndex = useRef(0);
24
- const caretIndex = useRef(0);
25
- const resolve = () => typeof options === "function" ? options() : options;
26
- const closePopup = () => {
27
- setPopupOpen(false);
28
- setMatches([]);
29
- };
30
- const detect = () => {
31
- const text = handlers.getText();
32
- const caret = textarea()?.selectionStart ?? text.length;
33
- caretIndex.current = caret;
34
- const head = text.slice(0, caret);
35
- const char = resolve().trigger ?? "@";
36
- const anchor = head.lastIndexOf(char);
37
- const token = anchor === -1 ? "" : head.slice(anchor + char.length);
38
- if (anchor === -1 || /\s/.test(token)) {
39
- closePopup();
40
- return;
41
- }
42
- const found = resolve().items.filter((entry) => entry.label.toLowerCase().startsWith(token.toLowerCase()));
43
- setMatches(found);
44
- setActive(0);
45
- anchorIndex.current = anchor;
46
- setPopupOpen(found.length > 0);
47
- };
48
- const insert = (entry) => {
49
- const text = handlers.getText();
50
- const char = resolve().trigger ?? "@";
51
- const next = text.slice(0, anchorIndex.current) + char + entry.label + " " + text.slice(caretIndex.current);
52
- handlers.setText(next);
53
- closePopup();
54
- setTimeout(() => {
55
- const el = textarea();
56
- if (!el) return;
57
- const caret = anchorIndex.current + char.length + entry.label.length + 1;
58
- el.focus();
59
- el.setSelectionRange(caret, caret);
60
- }, 0);
61
- };
62
- /** Feed the field's input events through here — the vessel watches
63
- * the text as it lands, from the element itself. */
64
- const onInput = () => detect();
65
- /** Arrows move, Enter inserts, Escape dismisses. Answers `true` when
66
- * the vessel consumed the key. */
67
- const onKeydown = (event) => {
68
- if (!popupOpen || matches.length === 0) return false;
69
- if (event.key === "ArrowDown") {
70
- event.preventDefault();
71
- setActive((current) => (current + 1) % matches.length);
72
- } else if (event.key === "ArrowUp") {
73
- event.preventDefault();
74
- setActive((current) => (current - 1 + matches.length) % matches.length);
75
- } else if (event.key === "Enter") {
76
- event.preventDefault();
77
- insert(matches[active]);
78
- } else if (event.key === "Escape") closePopup();
79
- else return false;
80
- return true;
81
- };
82
- return {
83
- open: popupOpen,
84
- matches,
85
- active,
86
- setActive,
87
- insert,
88
- close: closePopup,
89
- onInput,
90
- onKeydown
91
- };
92
- }
93
- //#endregion
94
- //#region src/components/mentions/index.tsx
95
- function MentionsPopup({ size, matches, active, onInsert, onActiveChange, ...rest }) {
96
- return /* @__PURE__ */ jsx("div", {
97
- ...rest,
98
- "data-scope": "mentions",
99
- "data-part": "popup",
100
- "data-size": size,
101
- role: "listbox",
102
- children: matches.map((entry, index) => /* @__PURE__ */ jsx("div", {
103
- role: "option",
104
- "aria-selected": index === active,
105
- tabIndex: -1,
106
- "data-scope": "mentions",
107
- "data-part": "option",
108
- "data-active": index === active ? "" : void 0,
109
- onMouseEnter: () => onActiveChange?.(index),
110
- onMouseDown: (event) => event.preventDefault(),
111
- onClick: () => onInsert?.(entry),
112
- onKeyDown: (event) => {
113
- if (event.key !== "Enter" && event.key !== " ") return;
114
- event.preventDefault();
115
- onInsert?.(entry);
116
- },
117
- children: entry.label
118
- }, entry.value))
119
- });
120
- }
121
- /** The vessel: the candidates themselves as a floating card. The anchor
122
- * is virtual — a live rectangle off the host's field — so a host keeps
123
- * its own anatomy (the textarea rides where the host puts it) and the
124
- * vessel still points at the right place. Shares the detection state
125
- * with the host through `useMentions`. */
126
- function MentionsVesselImpl({ size = "md", open = false, matches = [], active = 0, anchor = null, onInsert, onActiveChange, onOpenChange, id }) {
127
- injectComponentStyle("mentions");
128
- const hostId = useElementId("mentions", { id });
129
- return /* @__PURE__ */ jsx(Popover.Root, {
130
- id: `${hostId}:vessel`,
131
- open,
132
- onOpenChange: (details) => onOpenChange?.(details.open),
133
- positioning: {
134
- placement: "bottom-start",
135
- getAnchorRect: () => anchor?.getBoundingClientRect() ?? null
136
- },
137
- children: /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, { children: /* @__PURE__ */ jsx(Popover.Content, {
138
- asChild: true,
139
- children: /* @__PURE__ */ jsx(MentionsPopup, {
140
- size,
141
- matches,
142
- active,
143
- onInsert,
144
- onActiveChange
145
- })
146
- }) }) })
147
- });
148
- }
149
- const MentionsVessel = withSelfRoot(MentionsVesselImpl);
150
- function MentionsImpl({ items = [], value, trigger = "@", placeholder, autoresize = false, invalid = false, size = "md", onValueChange, children, ...rest }) {
151
- const hostId = useElementId("mentions", rest);
152
- const [internal, setInternal] = useState("");
153
- const fieldRef = useRef(null);
154
- const el = () => fieldRef.current;
155
- const current = value ?? internal;
156
- const mentions = useMentions({
157
- items,
158
- trigger
159
- }, el, {
160
- getText: () => el()?.value ?? current,
161
- setText: (next) => {
162
- setInternal(next);
163
- onValueChange?.(next);
164
- }
165
- });
166
- const handleChange = (event) => {
167
- const node = event.currentTarget;
168
- setInternal(node.value);
169
- onValueChange?.(node.value);
170
- mentions.onInput();
171
- };
172
- return /* @__PURE__ */ jsxs("div", {
173
- ...rest,
174
- "data-scope": "mentions",
175
- "data-part": "root",
176
- "data-size": size,
177
- children: [/* @__PURE__ */ jsxs(Popover.Root, {
178
- id: `${hostId}:vessel`,
179
- open: mentions.open,
180
- onOpenChange: (details) => {
181
- if (!details.open) mentions.close();
182
- },
183
- positioning: { placement: "bottom-start" },
184
- children: [/* @__PURE__ */ jsx(Popover.Anchor, {
185
- asChild: true,
186
- children: /* @__PURE__ */ jsx(Field.Textarea, {
187
- ref: fieldRef,
188
- autoresize,
189
- rows: 3,
190
- placeholder,
191
- value: current,
192
- onChange: handleChange,
193
- onKeyDown: (event) => mentions.onKeydown(event),
194
- "data-invalid": invalid || void 0,
195
- "data-scope": "mentions",
196
- "data-part": "textarea"
197
- })
198
- }), /* @__PURE__ */ jsx(Popover.Positioner, { children: /* @__PURE__ */ jsx(Popover.Content, {
199
- asChild: true,
200
- children: /* @__PURE__ */ jsx(MentionsPopup, {
201
- size,
202
- matches: mentions.matches,
203
- active: mentions.active,
204
- onInsert: mentions.insert,
205
- onActiveChange: mentions.setActive
206
- })
207
- }) })]
208
- }), children]
209
- });
210
- }
211
- const Mentions = Object.assign(MentionsImpl, Popover$1);
212
- //#endregion
213
- export { MentionsVessel as n, useMentions as r, Mentions as t };