@bysages/solid 0.4.3 → 0.5.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 (315) hide show
  1. package/README.md +2 -2
  2. package/dist/ai-NX47X8sz.mjs +365 -0
  3. package/dist/ai-prompt-input-CEnnpkgi.mjs +486 -0
  4. package/dist/{ai-response-CJ-uEAgj.mjs → ai-response-BM_DVIDY.mjs} +25 -27
  5. package/dist/{chevron-BHQrYKPM.mjs → chevron-DGKPHc2O.mjs} +2 -3
  6. package/dist/components/accordion/index.d.mts +1 -2
  7. package/dist/components/accordion/index.mjs +9 -16
  8. package/dist/components/affix/index.d.mts +1 -3
  9. package/dist/components/affix/index.mjs +19 -18
  10. package/dist/components/ai/index.d.mts +95 -2
  11. package/dist/components/ai/index.mjs +7 -69
  12. package/dist/components/ai-action/index.d.mts +0 -2
  13. package/dist/components/ai-action/index.mjs +4 -5
  14. package/dist/components/ai-attachments/index.d.mts +0 -2
  15. package/dist/components/ai-attachments/index.mjs +39 -52
  16. package/dist/components/ai-message/index.d.mts +2 -15
  17. package/dist/components/ai-message/index.mjs +18 -15
  18. package/dist/components/ai-prompt-input/index.d.mts +19 -15
  19. package/dist/components/ai-prompt-input/index.mjs +1 -168
  20. package/dist/components/ai-reasoning/index.d.mts +0 -2
  21. package/dist/components/ai-reasoning/index.mjs +8 -13
  22. package/dist/components/ai-response/index.d.mts +1 -3
  23. package/dist/components/ai-response/index.mjs +1 -2
  24. package/dist/components/ai-source/index.d.mts +0 -2
  25. package/dist/components/ai-source/index.mjs +25 -26
  26. package/dist/components/ai-suggestion/index.d.mts +0 -2
  27. package/dist/components/ai-suggestion/index.mjs +3 -4
  28. package/dist/components/ai-tool/index.d.mts +2 -25
  29. package/dist/components/ai-tool/index.mjs +75 -40
  30. package/dist/components/alert/index.d.mts +1 -2
  31. package/dist/components/alert/index.mjs +38 -33
  32. package/dist/components/angle-slider/index.d.mts +1 -2
  33. package/dist/components/angle-slider/index.mjs +6 -9
  34. package/dist/components/aspect-ratio/index.d.mts +1 -3
  35. package/dist/components/aspect-ratio/index.mjs +18 -17
  36. package/dist/components/autocomplete/index.d.mts +1 -2
  37. package/dist/components/autocomplete/index.mjs +6 -8
  38. package/dist/components/avatar/index.d.mts +17 -6
  39. package/dist/components/avatar/index.mjs +66 -10
  40. package/dist/components/avatar-group/index.d.mts +1 -3
  41. package/dist/components/avatar-group/index.mjs +15 -14
  42. package/dist/components/back-top/index.d.mts +1 -3
  43. package/dist/components/back-top/index.mjs +29 -34
  44. package/dist/components/badge/index.d.mts +1 -3
  45. package/dist/components/badge/index.mjs +18 -17
  46. package/dist/components/banner/index.d.mts +18 -3
  47. package/dist/components/banner/index.mjs +108 -31
  48. package/dist/components/bento/index.d.mts +1 -3
  49. package/dist/components/bento/index.mjs +30 -31
  50. package/dist/components/block-ui/index.d.mts +1 -3
  51. package/dist/components/block-ui/index.mjs +30 -33
  52. package/dist/components/breadcrumb/index.d.mts +15 -3
  53. package/dist/components/breadcrumb/index.mjs +56 -12
  54. package/dist/components/browser/index.d.mts +1 -3
  55. package/dist/components/browser/index.mjs +50 -51
  56. package/dist/components/button/index.d.mts +1 -3
  57. package/dist/components/button/index.mjs +31 -30
  58. package/dist/components/button-group/index.d.mts +1 -3
  59. package/dist/components/button-group/index.mjs +21 -20
  60. package/dist/components/calendar/index.d.mts +0 -2
  61. package/dist/components/calendar/index.mjs +73 -116
  62. package/dist/components/card/index.d.mts +1 -3
  63. package/dist/components/card/index.mjs +3 -4
  64. package/dist/components/carousel/index.d.mts +1 -2
  65. package/dist/components/carousel/index.mjs +6 -7
  66. package/dist/components/cascade-select/index.d.mts +1 -3
  67. package/dist/components/cascade-select/index.mjs +127 -167
  68. package/dist/components/checkbox/index.d.mts +1 -2
  69. package/dist/components/checkbox/index.mjs +7 -10
  70. package/dist/components/checkbox-group/index.d.mts +1 -2
  71. package/dist/components/checkbox-group/index.mjs +9 -12
  72. package/dist/components/chip/index.d.mts +1 -3
  73. package/dist/components/chip/index.mjs +22 -25
  74. package/dist/components/client-only/index.d.mts +0 -2
  75. package/dist/components/client-only/index.mjs +2 -3
  76. package/dist/components/clipboard/index.d.mts +1 -2
  77. package/dist/components/clipboard/index.mjs +10 -17
  78. package/dist/components/collapsible/index.d.mts +1 -2
  79. package/dist/components/collapsible/index.mjs +7 -14
  80. package/dist/components/collection/index.mjs +1 -2
  81. package/dist/components/color-picker/index.d.mts +5 -2
  82. package/dist/components/color-picker/index.mjs +69 -39
  83. package/dist/components/combobox/index.d.mts +1 -2
  84. package/dist/components/combobox/index.mjs +9 -14
  85. package/dist/components/command/index.d.mts +1 -2
  86. package/dist/components/command/index.mjs +63 -80
  87. package/dist/components/comment/index.d.mts +1 -3
  88. package/dist/components/comment/index.mjs +64 -80
  89. package/dist/components/config-provider/index.d.mts +1 -3
  90. package/dist/components/config-provider/index.mjs +10 -13
  91. package/dist/components/container/index.d.mts +1 -3
  92. package/dist/components/container/index.mjs +18 -17
  93. package/dist/components/data-view/index.d.mts +1 -3
  94. package/dist/components/data-view/index.mjs +81 -90
  95. package/dist/components/date-input/index.d.mts +1 -2
  96. package/dist/components/date-input/index.mjs +6 -9
  97. package/dist/components/date-picker/index.d.mts +1 -2
  98. package/dist/components/date-picker/index.mjs +11 -16
  99. package/dist/components/deferred-content/index.d.mts +1 -3
  100. package/dist/components/deferred-content/index.mjs +24 -25
  101. package/dist/components/descriptions/index.d.mts +1 -2
  102. package/dist/components/descriptions/index.mjs +40 -39
  103. package/dist/components/dialog/index.d.mts +11 -2
  104. package/dist/components/dialog/index.mjs +78 -40
  105. package/dist/components/dock/index.d.mts +1 -3
  106. package/dist/components/dock/index.mjs +29 -30
  107. package/dist/components/download-trigger/index.d.mts +0 -2
  108. package/dist/components/download-trigger/index.mjs +2 -3
  109. package/dist/components/drawer/index.d.mts +1 -2
  110. package/dist/components/drawer/index.mjs +9 -18
  111. package/dist/components/dynamic-input/index.d.mts +1 -3
  112. package/dist/components/dynamic-input/index.mjs +73 -77
  113. package/dist/components/editable/index.d.mts +1 -2
  114. package/dist/components/editable/index.mjs +7 -10
  115. package/dist/components/ellipsis/index.d.mts +1 -3
  116. package/dist/components/ellipsis/index.mjs +21 -20
  117. package/dist/components/empty/index.d.mts +1 -3
  118. package/dist/components/empty/index.mjs +3 -4
  119. package/dist/components/field/index.d.mts +1 -2
  120. package/dist/components/field/index.mjs +4 -5
  121. package/dist/components/fieldset/index.d.mts +1 -2
  122. package/dist/components/fieldset/index.mjs +6 -9
  123. package/dist/components/file-upload/index.d.mts +1 -2
  124. package/dist/components/file-upload/index.mjs +6 -7
  125. package/dist/components/float-button/index.d.mts +25 -3
  126. package/dist/components/float-button/index.mjs +108 -39
  127. package/dist/components/floating-panel/index.d.mts +1 -2
  128. package/dist/components/floating-panel/index.mjs +10 -21
  129. package/dist/components/focus-trap/index.d.mts +0 -2
  130. package/dist/components/focus-trap/index.mjs +2 -3
  131. package/dist/components/form/index.d.mts +0 -2
  132. package/dist/components/form/index.mjs +42 -58
  133. package/dist/components/format/index.d.mts +1 -3
  134. package/dist/components/format/index.mjs +1 -2
  135. package/dist/components/frame/index.d.mts +1 -2
  136. package/dist/components/frame/index.mjs +3 -4
  137. package/dist/components/grid/index.d.mts +1 -3
  138. package/dist/components/grid/index.mjs +23 -22
  139. package/dist/components/highlight/index.d.mts +1 -3
  140. package/dist/components/highlight/index.mjs +2 -3
  141. package/dist/components/hover-card/index.d.mts +1 -2
  142. package/dist/components/hover-card/index.mjs +12 -27
  143. package/dist/components/icon/index.d.mts +1 -3
  144. package/dist/components/icon/index.mjs +35 -36
  145. package/dist/components/image/index.d.mts +1 -3
  146. package/dist/components/image/index.mjs +48 -52
  147. package/dist/components/image-cropper/index.d.mts +1 -2
  148. package/dist/components/image-cropper/index.mjs +5 -6
  149. package/dist/components/image-viewer/index.d.mts +1 -1
  150. package/dist/components/image-viewer/index.mjs +1 -2
  151. package/dist/components/input/index.d.mts +1 -3
  152. package/dist/components/input/index.mjs +1 -2
  153. package/dist/components/input-group/index.d.mts +1 -2
  154. package/dist/components/input-group/index.mjs +19 -16
  155. package/dist/components/json-tree-view/index.d.mts +1 -2
  156. package/dist/components/json-tree-view/index.mjs +5 -6
  157. package/dist/components/kbd/index.d.mts +1 -3
  158. package/dist/components/kbd/index.mjs +12 -11
  159. package/dist/components/layout/index.d.mts +1 -2
  160. package/dist/components/layout/index.mjs +92 -84
  161. package/dist/components/link/index.d.mts +1 -3
  162. package/dist/components/link/index.mjs +15 -15
  163. package/dist/components/list/index.d.mts +1 -2
  164. package/dist/components/list/index.mjs +57 -61
  165. package/dist/components/listbox/index.d.mts +1 -2
  166. package/dist/components/listbox/index.mjs +8 -11
  167. package/dist/components/marquee/index.d.mts +1 -2
  168. package/dist/components/marquee/index.mjs +7 -8
  169. package/dist/components/masonry/index.d.mts +1 -3
  170. package/dist/components/masonry/index.mjs +19 -18
  171. package/dist/components/media-player/index.d.mts +1 -1
  172. package/dist/components/media-player/index.mjs +1 -2
  173. package/dist/components/mentions/index.d.mts +2 -2
  174. package/dist/components/mentions/index.mjs +1 -3
  175. package/dist/components/menu/index.d.mts +1 -2
  176. package/dist/components/menu/index.mjs +8 -17
  177. package/dist/components/menubar/index.d.mts +1 -2
  178. package/dist/components/menubar/index.mjs +66 -72
  179. package/dist/components/meter/index.d.mts +1 -2
  180. package/dist/components/meter/index.mjs +42 -43
  181. package/dist/components/navigation-menu/index.d.mts +1 -2
  182. package/dist/components/navigation-menu/index.mjs +7 -12
  183. package/dist/components/number-input/index.d.mts +1 -2
  184. package/dist/components/number-input/index.mjs +7 -10
  185. package/dist/components/order-list/index.d.mts +1 -3
  186. package/dist/components/order-list/index.mjs +86 -101
  187. package/dist/components/page-header/index.d.mts +1 -3
  188. package/dist/components/page-header/index.mjs +3 -4
  189. package/dist/components/pagination/index.d.mts +1 -2
  190. package/dist/components/pagination/index.mjs +31 -42
  191. package/dist/components/password-input/index.d.mts +1 -2
  192. package/dist/components/password-input/index.mjs +6 -7
  193. package/dist/components/pin-input/index.d.mts +1 -2
  194. package/dist/components/pin-input/index.mjs +6 -9
  195. package/dist/components/popconfirm/index.d.mts +2 -3
  196. package/dist/components/popconfirm/index.mjs +15 -23
  197. package/dist/components/popover/index.d.mts +2 -26
  198. package/dist/components/popover/index.mjs +10 -21
  199. package/dist/components/presence/index.d.mts +0 -2
  200. package/dist/components/presence/index.mjs +2 -3
  201. package/dist/components/progress/index.d.mts +1 -2
  202. package/dist/components/progress/index.mjs +14 -26
  203. package/dist/components/progress-group/index.d.mts +1 -3
  204. package/dist/components/progress-group/index.mjs +60 -68
  205. package/dist/components/qr-code/index.d.mts +1 -2
  206. package/dist/components/qr-code/index.mjs +5 -8
  207. package/dist/components/radio-group/index.d.mts +1 -2
  208. package/dist/components/radio-group/index.mjs +6 -9
  209. package/dist/components/rating-group/index.d.mts +1 -2
  210. package/dist/components/rating-group/index.mjs +7 -10
  211. package/dist/components/result/index.d.mts +1 -2
  212. package/dist/components/result/index.mjs +28 -29
  213. package/dist/components/scroll-area/index.d.mts +8 -3
  214. package/dist/components/scroll-area/index.mjs +19 -11
  215. package/dist/components/segment-group/index.d.mts +1 -2
  216. package/dist/components/segment-group/index.mjs +5 -8
  217. package/dist/components/select/index.d.mts +1 -1
  218. package/dist/components/select/index.mjs +1 -2
  219. package/dist/components/separator/index.d.mts +1 -3
  220. package/dist/components/separator/index.mjs +21 -20
  221. package/dist/components/signature-pad/index.d.mts +1 -2
  222. package/dist/components/signature-pad/index.mjs +7 -10
  223. package/dist/components/skeleton/index.d.mts +1 -3
  224. package/dist/components/skeleton/index.mjs +12 -11
  225. package/dist/components/slider/index.d.mts +1 -2
  226. package/dist/components/slider/index.mjs +6 -9
  227. package/dist/components/spinner/index.d.mts +1 -3
  228. package/dist/components/spinner/index.mjs +20 -19
  229. package/dist/components/split-button/index.d.mts +1 -2
  230. package/dist/components/split-button/index.mjs +92 -94
  231. package/dist/components/splitter/index.d.mts +1 -2
  232. package/dist/components/splitter/index.mjs +5 -8
  233. package/dist/components/spotlight/index.d.mts +1 -3
  234. package/dist/components/spotlight/index.mjs +22 -23
  235. package/dist/components/stack/index.d.mts +1 -3
  236. package/dist/components/stack/index.mjs +24 -23
  237. package/dist/components/stat/index.d.mts +1 -2
  238. package/dist/components/stat/index.mjs +15 -14
  239. package/dist/components/steps/index.d.mts +0 -2
  240. package/dist/components/steps/index.mjs +10 -17
  241. package/dist/components/swap/index.d.mts +1 -2
  242. package/dist/components/swap/index.mjs +5 -6
  243. package/dist/components/switch/index.d.mts +1 -2
  244. package/dist/components/switch/index.mjs +6 -9
  245. package/dist/components/table/index.d.mts +0 -2
  246. package/dist/components/table/index.mjs +233 -320
  247. package/dist/components/tabs/index.d.mts +8 -12
  248. package/dist/components/tabs/index.mjs +83 -34
  249. package/dist/components/tag/index.d.mts +1 -2
  250. package/dist/components/tag/index.mjs +46 -70
  251. package/dist/components/tags-input/index.d.mts +1 -2
  252. package/dist/components/tags-input/index.mjs +7 -10
  253. package/dist/components/terminal/index.d.mts +3 -3
  254. package/dist/components/terminal/index.mjs +61 -56
  255. package/dist/components/textarea/index.d.mts +1 -3
  256. package/dist/components/textarea/index.mjs +10 -11
  257. package/dist/components/timeline/index.d.mts +1 -2
  258. package/dist/components/timeline/index.mjs +15 -14
  259. package/dist/components/timer/index.d.mts +1 -2
  260. package/dist/components/timer/index.mjs +5 -6
  261. package/dist/components/toast/index.d.mts +0 -2
  262. package/dist/components/toast/index.mjs +5 -6
  263. package/dist/components/toc/index.d.mts +1 -1
  264. package/dist/components/toc/index.mjs +1 -2
  265. package/dist/components/toggle/index.d.mts +1 -2
  266. package/dist/components/toggle/index.mjs +5 -6
  267. package/dist/components/toggle-group/index.d.mts +1 -2
  268. package/dist/components/toggle-group/index.mjs +11 -16
  269. package/dist/components/toolbar/index.d.mts +1 -3
  270. package/dist/components/toolbar/index.mjs +27 -31
  271. package/dist/components/tooltip/index.d.mts +1 -2
  272. package/dist/components/tooltip/index.mjs +7 -16
  273. package/dist/components/tour/index.d.mts +0 -2
  274. package/dist/components/tour/index.mjs +11 -16
  275. package/dist/components/transfer/index.d.mts +1 -2
  276. package/dist/components/transfer/index.mjs +115 -126
  277. package/dist/components/tree-select/index.d.mts +2 -3
  278. package/dist/components/tree-select/index.mjs +24 -33
  279. package/dist/components/tree-view/index.d.mts +10 -4
  280. package/dist/components/tree-view/index.mjs +32 -23
  281. package/dist/components/typography/index.d.mts +2 -3
  282. package/dist/components/typography/index.mjs +4 -4
  283. package/dist/components/user/index.d.mts +1 -3
  284. package/dist/components/user/index.mjs +40 -57
  285. package/dist/components/virtual-list/index.d.mts +1 -3
  286. package/dist/components/virtual-list/index.mjs +39 -45
  287. package/dist/components/watermark/index.d.mts +1 -3
  288. package/dist/components/watermark/index.mjs +15 -22
  289. package/dist/{element-dGIhOTJ6.mjs → element-liigPBUh.mjs} +1 -2
  290. package/dist/{family-Cmd8HEyK.mjs → family-B5HtE0on.mjs} +1 -2
  291. package/dist/generative/index.d.mts +0 -2
  292. package/dist/generative/index.mjs +240 -248
  293. package/dist/{icon-DTqmJCd5.mjs → icon-DQqYA2fO.mjs} +11 -17
  294. package/dist/{id-2ygNzPHF.mjs → id-DGvz-2rQ.mjs} +1 -2
  295. package/dist/{image-viewer-19s75Hz_.mjs → image-viewer-TEia4PaY.mjs} +73 -101
  296. package/dist/{index-BU5U5w04.d.mts → index-B4WyTngM.d.mts} +0 -4
  297. package/dist/index-BRvSfkKs.d.mts +25 -0
  298. package/dist/{index-DhripUtf.d.mts → index-CTsFsYdA.d.mts} +0 -4
  299. package/dist/index-CutrHCzU.d.mts +153 -0
  300. package/dist/{index-wW28BYf1.d.mts → index-CwmZdzxT.d.mts} +0 -8
  301. package/dist/index-DK7YgaAU.d.mts +37 -0
  302. package/dist/index-Dms00480.d.mts +115 -0
  303. package/dist/{index-ID48LCMU.d.mts → index-Dv6mwzIr.d.mts} +3 -7
  304. package/dist/index.d.mts +17 -17
  305. package/dist/index.mjs +12 -12
  306. package/dist/{input-BL3N3L8g.mjs → input-2xfPP-7Z.mjs} +11 -13
  307. package/dist/{media-player-yF7KVUxM.mjs → media-player-LHnTiSiN.mjs} +248 -259
  308. package/dist/mentions-CvY9IGzc.mjs +438 -0
  309. package/dist/{select-DI7pFspF.mjs → select-NaNlrYUT.mjs} +72 -96
  310. package/dist/{toc-DRHr8_eD.mjs → toc-RnPG3w7q.mjs} +5 -7
  311. package/dist/{use-component-messages-C4SCVYjD.mjs → use-component-messages-DS9ppb4C.mjs} +1 -2
  312. package/package.json +13 -13
  313. package/dist/index-DEArHiFI.d.mts +0 -104
  314. package/dist/index-DVc1L_zt.d.mts +0 -10435
  315. package/dist/mentions-DKUG7eHt.mjs +0 -279
@@ -1,279 +0,0 @@
1
- import { n as withSelfRoot, t as defineFamily } from "./family-Cmd8HEyK.mjs";
2
- import { t as useElementId } from "./id-2ygNzPHF.mjs";
3
- import { Popover as Popover$1 } from "./components/popover/index.mjs";
4
- import { createComponent, delegateEvents, effect, insert, memo, mergeProps, setAttribute, spread, template } from "@solidjs/web";
5
- import { injectComponentStyle } from "@bysages/core/styling";
6
- import { For, createSignal, splitProps } from "solid-js";
7
- import { Field } from "@ark-ui/solid/field";
8
- import { Portal } from "solid-js/web";
9
- import { Popover } from "@ark-ui/solid/popover";
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 an accessor because hosts wrap it
14
- * differently (a bare textarea, a field's own part).
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] = createSignal(false);
21
- const [matches, setMatches] = createSignal([]);
22
- const [active, setActive] = createSignal(0);
23
- const [anchorIndex, setAnchorIndex] = createSignal(0);
24
- const [caretIndex, setCaretIndex] = createSignal(0);
25
- const closePopup = () => {
26
- setPopupOpen(false);
27
- setMatches([]);
28
- };
29
- const detect = () => {
30
- const text = handlers.getText();
31
- const caret = textarea()?.selectionStart ?? text.length;
32
- setCaretIndex(caret);
33
- const head = text.slice(0, caret);
34
- const char = options().trigger ?? "@";
35
- const anchor = head.lastIndexOf(char);
36
- const token = anchor === -1 ? "" : head.slice(anchor + char.length);
37
- if (anchor === -1 || /\s/.test(token)) {
38
- closePopup();
39
- return;
40
- }
41
- const found = options().items.filter((entry) => entry.label.toLowerCase().startsWith(token.toLowerCase()));
42
- setMatches(found);
43
- setActive(0);
44
- setAnchorIndex(anchor);
45
- setPopupOpen(found.length > 0);
46
- };
47
- const insert = (entry) => {
48
- const text = handlers.getText();
49
- const char = options().trigger ?? "@";
50
- const next = text.slice(0, anchorIndex()) + char + entry.label + " " + text.slice(caretIndex());
51
- handlers.setText(next);
52
- closePopup();
53
- queueMicrotask(() => {
54
- const el = textarea();
55
- if (!el) return;
56
- const caret = anchorIndex() + char.length + entry.label.length + 1;
57
- el.focus();
58
- el.setSelectionRange(caret, caret);
59
- });
60
- };
61
- /** Feed the field's input events through here — the vessel watches
62
- * the text as it lands, from the element itself. */
63
- const onInput = () => detect();
64
- /** Arrows move, Enter inserts, Escape dismisses. Answers `true` when
65
- * the vessel consumed the key. */
66
- const onKeydown = (event) => {
67
- if (!popupOpen() || matches().length === 0) return false;
68
- if (event.key === "ArrowDown") {
69
- event.preventDefault();
70
- setActive((active() + 1) % matches().length);
71
- } else if (event.key === "ArrowUp") {
72
- event.preventDefault();
73
- setActive((active() - 1 + matches().length) % matches().length);
74
- } else if (event.key === "Enter") {
75
- event.preventDefault();
76
- insert(matches()[active()]);
77
- } else if (event.key === "Escape") closePopup();
78
- else return false;
79
- return true;
80
- };
81
- return {
82
- open: popupOpen,
83
- matches,
84
- active,
85
- setActive,
86
- insert,
87
- close: closePopup,
88
- onInput,
89
- onKeydown
90
- };
91
- }
92
- //#endregion
93
- //#region src/components/mentions/index.tsx
94
- var _tmpl$ = /* @__PURE__ */ template(`<div>`);
95
- var _tmpl$2 = /* @__PURE__ */ template(`<div role=option tabindex=-1 data-scope=mentions data-part=option>`);
96
- /** The vessel: the candidates themselves as a floating card. A host can
97
- * render its field through the Anchor; the rectangle fallback keeps the
98
- * textarea in the host's own anatomy. Shares the detection state with
99
- * the host through `useMentions`. */
100
- const MentionsVessel = withSelfRoot(function MentionsVessel(props) {
101
- injectComponentStyle("mentions");
102
- const id = useElementId("mentions-vessel");
103
- return createComponent(Popover.Root, {
104
- get id() {
105
- return id();
106
- },
107
- get open() {
108
- return props.open ?? false;
109
- },
110
- onOpenChange: (details) => props.onOpenChange?.(details.open),
111
- get positioning() {
112
- return props.children ? { placement: "bottom-start" } : {
113
- placement: "bottom-start",
114
- getAnchorRect: () => props.anchor?.getBoundingClientRect() ?? null
115
- };
116
- },
117
- get children() {
118
- return [memo(() => {
119
- return memo(() => {
120
- return !!props.children;
121
- })() ? createComponent(Popover.Anchor, { asChild: (anchorProps) => typeof props.children === "function" ? props.children(anchorProps()) : props.children }) : null;
122
- }), createComponent(Portal, { get children() {
123
- return createComponent(Popover.Positioner, { get children() {
124
- return createComponent(Popover.Content, { asChild: (contentProps) => (() => {
125
- var _el$ = _tmpl$();
126
- spread(_el$, [contentProps, {
127
- role: "listbox",
128
- "data-scope": "mentions",
129
- "data-part": "popup",
130
- get "data-size"() {
131
- return props.size ?? "md";
132
- }
133
- }], true);
134
- insert(_el$, createComponent(For, {
135
- get each() {
136
- return props.matches ?? [];
137
- },
138
- children: (entry, index) => (() => {
139
- var _el$2 = _tmpl$2();
140
- _el$2._$$keydown = (event) => {
141
- if (event.key !== "Enter" && event.key !== " ") return;
142
- event.preventDefault();
143
- props.onInsert?.(entry);
144
- };
145
- _el$2._$$click = () => props.onInsert?.(entry);
146
- _el$2._$$mousedown = (event) => event.preventDefault();
147
- _el$2.addEventListener("mouseenter", () => props.onActiveChange?.(index()));
148
- insert(_el$2, () => {
149
- return entry.label;
150
- });
151
- effect(() => {
152
- return {
153
- e: index() === (props.active ?? 0),
154
- t: index() === (props.active ?? 0) ? "" : void 0
155
- };
156
- }, ({ e, t }, _p$) => {
157
- e !== _p$?.e && setAttribute(_el$2, "aria-selected", e);
158
- t !== _p$?.t && setAttribute(_el$2, "data-active", t);
159
- });
160
- return _el$2;
161
- })()
162
- }));
163
- return _el$;
164
- })() });
165
- } });
166
- } })];
167
- }
168
- });
169
- });
170
- /**
171
- * @-mentions: a plain textarea that, when the text before the caret ends
172
- * with the trigger character followed by a token, offers the matching
173
- * candidates in a small anchored vessel; choosing one replaces the token
174
- * with `trigger + label` and hands the whole text back through
175
- * `onValueChange`. Arrows move, Enter inserts, Escape dismisses.
176
- *
177
- * The field is the shared `Textarea` — field wiring (label ids, the
178
- * invalid state) rides on it for free — and the vessel anchors to the
179
- * field as a whole (popover machinery), not to the caret coordinates;
180
- * caret-precise positioning would need a second positioning system for
181
- * no practical gain at typical field sizes. Composers that keep their
182
- * own field anatomy (the AI prompt input) skip this shell and wire
183
- * `useMentions` plus `MentionsVessel` themselves.
184
- */
185
- function MentionsImpl(props) {
186
- const [own, rest] = splitProps(props, [
187
- "items",
188
- "value",
189
- "trigger",
190
- "placeholder",
191
- "autoresize",
192
- "invalid",
193
- "size",
194
- "onValueChange"
195
- ]);
196
- const [internal, setInternal] = createSignal("");
197
- const [fieldEl, setFieldEl] = createSignal(null);
198
- const value = () => own.value ?? internal();
199
- const mentions = useMentions(() => ({
200
- items: own.items ?? [],
201
- trigger: own.trigger
202
- }), fieldEl, {
203
- getText: () => fieldEl()?.value ?? value(),
204
- setText: (next) => {
205
- setInternal(next);
206
- own.onValueChange?.(next);
207
- }
208
- });
209
- const onInput = () => {
210
- const node = fieldEl();
211
- if (!node) return;
212
- setInternal(node.value);
213
- own.onValueChange?.(node.value);
214
- mentions.onInput();
215
- };
216
- const field = (anchorProps) => createComponent(Field.Textarea, mergeProps(anchorProps, {
217
- ref: (node) => setFieldEl(node),
218
- get autoresize() {
219
- return own.autoresize ?? false;
220
- },
221
- get "aria-invalid"() {
222
- return own.invalid ? "true" : void 0;
223
- },
224
- rows: 3,
225
- get placeholder() {
226
- return own.placeholder;
227
- },
228
- get value() {
229
- return value();
230
- },
231
- onInput,
232
- onKeyDown: (event) => {
233
- mentions.onKeydown(event);
234
- },
235
- "data-scope": "mentions",
236
- "data-part": "textarea"
237
- }));
238
- var _el$3 = _tmpl$();
239
- spread(_el$3, [rest, {
240
- "data-scope": "mentions",
241
- "data-part": "root",
242
- get "data-size"() {
243
- return own.size ?? "md";
244
- }
245
- }], true);
246
- insert(_el$3, createComponent(MentionsVessel, {
247
- get open() {
248
- return mentions.open();
249
- },
250
- get matches() {
251
- return mentions.matches();
252
- },
253
- get active() {
254
- return mentions.active();
255
- },
256
- get size() {
257
- return own.size ?? "md";
258
- },
259
- get onInsert() {
260
- return mentions.insert;
261
- },
262
- get onActiveChange() {
263
- return mentions.setActive;
264
- },
265
- onOpenChange: (open) => {
266
- if (!open) mentions.close();
267
- },
268
- children: field
269
- }));
270
- return _el$3;
271
- }
272
- const Mentions = defineFamily(MentionsImpl, Popover$1);
273
- delegateEvents([
274
- "mousedown",
275
- "click",
276
- "keydown"
277
- ]);
278
- //#endregion
279
- export { MentionsVessel as n, useMentions as r, Mentions as t };