@bysages/react 0.2.2 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (293) hide show
  1. package/README.md +16 -2
  2. package/dist/ai-response-jZy-0Tvv.mjs +127 -0
  3. package/dist/chevron-BeHvt46K.mjs +17 -0
  4. package/dist/components/accordion/index.d.mts +7 -0
  5. package/dist/components/accordion/index.mjs +10 -0
  6. package/dist/components/affix/index.d.mts +20 -0
  7. package/dist/components/affix/index.mjs +18 -0
  8. package/dist/components/ai/index.d.mts +2 -0
  9. package/dist/components/ai/index.mjs +65 -0
  10. package/dist/components/ai-action/index.d.mts +14 -0
  11. package/dist/components/ai-action/index.mjs +18 -0
  12. package/dist/components/ai-attachments/index.d.mts +19 -0
  13. package/dist/components/ai-attachments/index.mjs +106 -0
  14. package/dist/components/ai-message/index.d.mts +11 -0
  15. package/dist/components/ai-message/index.mjs +15 -0
  16. package/dist/components/ai-prompt-input/index.d.mts +47 -0
  17. package/dist/components/ai-prompt-input/index.mjs +135 -0
  18. package/dist/components/ai-reasoning/index.d.mts +13 -0
  19. package/dist/components/ai-reasoning/index.mjs +19 -0
  20. package/dist/components/ai-response/index.d.mts +22 -0
  21. package/dist/components/ai-response/index.mjs +2 -0
  22. package/dist/components/ai-source/index.d.mts +17 -0
  23. package/dist/components/ai-source/index.mjs +27 -0
  24. package/dist/components/ai-suggestion/index.d.mts +13 -0
  25. package/dist/components/ai-suggestion/index.mjs +16 -0
  26. package/dist/components/ai-tool/index.d.mts +21 -0
  27. package/dist/components/ai-tool/index.mjs +36 -0
  28. package/dist/components/alert/index.d.mts +23 -0
  29. package/dist/components/alert/index.mjs +80 -0
  30. package/dist/components/angle-slider/index.d.mts +16 -0
  31. package/dist/components/angle-slider/index.mjs +21 -0
  32. package/dist/components/aspect-ratio/index.d.mts +10 -0
  33. package/dist/components/aspect-ratio/index.mjs +17 -0
  34. package/dist/components/autocomplete/index.d.mts +21 -0
  35. package/dist/components/autocomplete/index.mjs +35 -0
  36. package/dist/components/avatar/index.d.mts +23 -0
  37. package/dist/components/avatar/index.mjs +15 -0
  38. package/dist/components/avatar-group/index.d.mts +11 -0
  39. package/dist/components/avatar-group/index.mjs +15 -0
  40. package/dist/components/back-top/index.d.mts +29 -0
  41. package/dist/components/back-top/index.mjs +82 -0
  42. package/dist/components/badge/index.d.mts +10 -0
  43. package/dist/components/badge/index.mjs +15 -0
  44. package/dist/components/banner/index.d.mts +31 -0
  45. package/dist/components/banner/index.mjs +63 -0
  46. package/dist/components/bento/index.d.mts +26 -0
  47. package/dist/components/bento/index.mjs +41 -0
  48. package/dist/components/block-ui/index.d.mts +12 -0
  49. package/dist/components/block-ui/index.mjs +24 -0
  50. package/dist/components/breadcrumb/index.d.mts +32 -0
  51. package/dist/components/breadcrumb/index.mjs +35 -0
  52. package/dist/components/browser/index.d.mts +23 -0
  53. package/dist/components/browser/index.mjs +70 -0
  54. package/dist/components/button/index.d.mts +19 -0
  55. package/dist/components/button/index.mjs +29 -0
  56. package/dist/components/button-group/index.d.mts +24 -0
  57. package/dist/components/button-group/index.mjs +25 -0
  58. package/dist/components/calendar/index.d.mts +17 -0
  59. package/dist/components/calendar/index.mjs +96 -0
  60. package/dist/components/card/index.d.mts +46 -0
  61. package/dist/components/card/index.mjs +44 -0
  62. package/dist/components/carousel/index.d.mts +9 -0
  63. package/dist/components/carousel/index.mjs +12 -0
  64. package/dist/components/cascade-select/index.d.mts +31 -0
  65. package/dist/components/cascade-select/index.mjs +229 -0
  66. package/dist/components/checkbox/index.d.mts +16 -0
  67. package/dist/components/checkbox/index.mjs +21 -0
  68. package/dist/components/checkbox-group/index.d.mts +28 -0
  69. package/dist/components/checkbox-group/index.mjs +65 -0
  70. package/dist/components/chip/index.d.mts +12 -0
  71. package/dist/components/chip/index.mjs +17 -0
  72. package/dist/components/client-only/index.d.mts +2 -0
  73. package/dist/components/client-only/index.mjs +2 -0
  74. package/dist/components/clipboard/index.d.mts +17 -0
  75. package/dist/components/clipboard/index.mjs +17 -0
  76. package/dist/components/collapsible/index.d.mts +7 -0
  77. package/dist/components/collapsible/index.mjs +10 -0
  78. package/dist/components/collection/index.d.mts +2 -0
  79. package/dist/components/collection/index.mjs +2 -0
  80. package/dist/components/color-picker/index.d.mts +20 -0
  81. package/dist/components/color-picker/index.mjs +25 -0
  82. package/dist/components/combobox/index.d.mts +17 -0
  83. package/dist/components/combobox/index.mjs +18 -0
  84. package/dist/components/command/index.d.mts +43 -0
  85. package/dist/components/command/index.mjs +137 -0
  86. package/dist/components/comment/index.d.mts +17 -0
  87. package/dist/components/comment/index.mjs +47 -0
  88. package/dist/components/config-provider/index.d.mts +46 -0
  89. package/dist/components/config-provider/index.mjs +41 -0
  90. package/dist/components/container/index.d.mts +13 -0
  91. package/dist/components/container/index.mjs +15 -0
  92. package/dist/components/data-view/index.d.mts +18 -0
  93. package/dist/components/data-view/index.mjs +64 -0
  94. package/dist/components/date-input/index.d.mts +17 -0
  95. package/dist/components/date-input/index.mjs +21 -0
  96. package/dist/components/date-picker/index.d.mts +19 -0
  97. package/dist/components/date-picker/index.mjs +23 -0
  98. package/dist/components/deferred-content/index.d.mts +16 -0
  99. package/dist/components/deferred-content/index.mjs +34 -0
  100. package/dist/components/descriptions/index.d.mts +33 -0
  101. package/dist/components/descriptions/index.mjs +50 -0
  102. package/dist/components/dialog/index.d.mts +9 -0
  103. package/dist/components/dialog/index.mjs +11 -0
  104. package/dist/components/dock/index.d.mts +25 -0
  105. package/dist/components/dock/index.mjs +51 -0
  106. package/dist/components/download-trigger/index.d.mts +2 -0
  107. package/dist/components/download-trigger/index.mjs +2 -0
  108. package/dist/components/drawer/index.d.mts +9 -0
  109. package/dist/components/drawer/index.mjs +12 -0
  110. package/dist/components/dynamic-input/index.d.mts +28 -0
  111. package/dist/components/dynamic-input/index.mjs +83 -0
  112. package/dist/components/editable/index.d.mts +16 -0
  113. package/dist/components/editable/index.mjs +17 -0
  114. package/dist/components/ellipsis/index.d.mts +10 -0
  115. package/dist/components/ellipsis/index.mjs +19 -0
  116. package/dist/components/empty/index.d.mts +28 -0
  117. package/dist/components/empty/index.mjs +32 -0
  118. package/dist/components/field/index.d.mts +8 -0
  119. package/dist/components/field/index.mjs +11 -0
  120. package/dist/components/fieldset/index.d.mts +7 -0
  121. package/dist/components/fieldset/index.mjs +10 -0
  122. package/dist/components/file-upload/index.d.mts +18 -0
  123. package/dist/components/file-upload/index.mjs +23 -0
  124. package/dist/components/float-button/index.d.mts +59 -0
  125. package/dist/components/float-button/index.mjs +90 -0
  126. package/dist/components/floating-panel/index.d.mts +9 -0
  127. package/dist/components/floating-panel/index.mjs +12 -0
  128. package/dist/components/focus-trap/index.d.mts +2 -0
  129. package/dist/components/focus-trap/index.mjs +2 -0
  130. package/dist/components/form/index.d.mts +2 -0
  131. package/dist/components/form/index.mjs +67 -0
  132. package/dist/components/format/index.d.mts +9 -0
  133. package/dist/components/format/index.mjs +10 -0
  134. package/dist/components/frame/index.d.mts +10 -0
  135. package/dist/components/frame/index.mjs +12 -0
  136. package/dist/components/grid/index.d.mts +13 -0
  137. package/dist/components/grid/index.mjs +31 -0
  138. package/dist/components/highlight/index.d.mts +7 -0
  139. package/dist/components/highlight/index.mjs +11 -0
  140. package/dist/components/hover-card/index.d.mts +7 -0
  141. package/dist/components/hover-card/index.mjs +10 -0
  142. package/dist/components/icon/index.d.mts +24 -0
  143. package/dist/components/icon/index.mjs +26 -0
  144. package/dist/components/image/index.d.mts +17 -0
  145. package/dist/components/image/index.mjs +57 -0
  146. package/dist/components/image-cropper/index.d.mts +8 -0
  147. package/dist/components/image-cropper/index.mjs +11 -0
  148. package/dist/components/image-viewer/index.d.mts +18 -0
  149. package/dist/components/image-viewer/index.mjs +110 -0
  150. package/dist/components/input/index.d.mts +19 -0
  151. package/dist/components/input/index.mjs +2 -0
  152. package/dist/components/input-group/index.d.mts +17 -0
  153. package/dist/components/input-group/index.mjs +31 -0
  154. package/dist/components/json-tree-view/index.d.mts +7 -0
  155. package/dist/components/json-tree-view/index.mjs +10 -0
  156. package/dist/components/kbd/index.d.mts +6 -0
  157. package/dist/components/kbd/index.mjs +14 -0
  158. package/dist/components/layout/index.d.mts +63 -0
  159. package/dist/components/layout/index.mjs +133 -0
  160. package/dist/components/link/index.d.mts +10 -0
  161. package/dist/components/link/index.mjs +18 -0
  162. package/dist/components/list/index.d.mts +39 -0
  163. package/dist/components/list/index.mjs +66 -0
  164. package/dist/components/listbox/index.d.mts +18 -0
  165. package/dist/components/listbox/index.mjs +18 -0
  166. package/dist/components/marquee/index.d.mts +7 -0
  167. package/dist/components/marquee/index.mjs +10 -0
  168. package/dist/components/masonry/index.d.mts +11 -0
  169. package/dist/components/masonry/index.mjs +29 -0
  170. package/dist/components/mentions/index.d.mts +2 -0
  171. package/dist/components/mentions/index.mjs +2 -0
  172. package/dist/components/menu/index.d.mts +20 -0
  173. package/dist/components/menu/index.mjs +37 -0
  174. package/dist/components/menubar/index.d.mts +32 -0
  175. package/dist/components/menubar/index.mjs +35 -0
  176. package/dist/components/meter/index.d.mts +26 -0
  177. package/dist/components/meter/index.mjs +59 -0
  178. package/dist/components/navigation-menu/index.d.mts +8 -0
  179. package/dist/components/navigation-menu/index.mjs +11 -0
  180. package/dist/components/number-input/index.d.mts +16 -0
  181. package/dist/components/number-input/index.mjs +21 -0
  182. package/dist/components/order-list/index.d.mts +21 -0
  183. package/dist/components/order-list/index.mjs +162 -0
  184. package/dist/components/page-header/index.d.mts +32 -0
  185. package/dist/components/page-header/index.mjs +34 -0
  186. package/dist/components/pagination/index.d.mts +18 -0
  187. package/dist/components/pagination/index.mjs +23 -0
  188. package/dist/components/password-input/index.d.mts +16 -0
  189. package/dist/components/password-input/index.mjs +21 -0
  190. package/dist/components/pin-input/index.d.mts +15 -0
  191. package/dist/components/pin-input/index.mjs +20 -0
  192. package/dist/components/popconfirm/index.d.mts +20 -0
  193. package/dist/components/popconfirm/index.mjs +44 -0
  194. package/dist/components/popover/index.d.mts +8 -0
  195. package/dist/components/popover/index.mjs +11 -0
  196. package/dist/components/presence/index.d.mts +2 -0
  197. package/dist/components/presence/index.mjs +2 -0
  198. package/dist/components/progress/index.d.mts +16 -0
  199. package/dist/components/progress/index.mjs +21 -0
  200. package/dist/components/progress-group/index.d.mts +22 -0
  201. package/dist/components/progress-group/index.mjs +56 -0
  202. package/dist/components/qr-code/index.d.mts +8 -0
  203. package/dist/components/qr-code/index.mjs +11 -0
  204. package/dist/components/radio-group/index.d.mts +16 -0
  205. package/dist/components/radio-group/index.mjs +21 -0
  206. package/dist/components/rating-group/index.d.mts +16 -0
  207. package/dist/components/rating-group/index.mjs +21 -0
  208. package/dist/components/result/index.d.mts +31 -0
  209. package/dist/components/result/index.mjs +59 -0
  210. package/dist/components/scroll-area/index.d.mts +7 -0
  211. package/dist/components/scroll-area/index.mjs +10 -0
  212. package/dist/components/segment-group/index.d.mts +18 -0
  213. package/dist/components/segment-group/index.mjs +20 -0
  214. package/dist/components/select/index.d.mts +2 -0
  215. package/dist/components/select/index.mjs +2 -0
  216. package/dist/components/separator/index.d.mts +11 -0
  217. package/dist/components/separator/index.mjs +16 -0
  218. package/dist/components/signature-pad/index.d.mts +8 -0
  219. package/dist/components/signature-pad/index.mjs +11 -0
  220. package/dist/components/skeleton/index.d.mts +7 -0
  221. package/dist/components/skeleton/index.mjs +13 -0
  222. package/dist/components/slider/index.d.mts +16 -0
  223. package/dist/components/slider/index.mjs +21 -0
  224. package/dist/components/spinner/index.d.mts +9 -0
  225. package/dist/components/spinner/index.mjs +36 -0
  226. package/dist/components/split-button/index.d.mts +36 -0
  227. package/dist/components/split-button/index.mjs +71 -0
  228. package/dist/components/splitter/index.d.mts +7 -0
  229. package/dist/components/splitter/index.mjs +10 -0
  230. package/dist/components/spotlight/index.d.mts +12 -0
  231. package/dist/components/spotlight/index.mjs +33 -0
  232. package/dist/components/stack/index.d.mts +11 -0
  233. package/dist/components/stack/index.mjs +32 -0
  234. package/dist/components/stat/index.d.mts +29 -0
  235. package/dist/components/stat/index.mjs +37 -0
  236. package/dist/components/steps/index.d.mts +19 -0
  237. package/dist/components/steps/index.mjs +24 -0
  238. package/dist/components/swap/index.d.mts +8 -0
  239. package/dist/components/swap/index.mjs +11 -0
  240. package/dist/components/switch/index.d.mts +16 -0
  241. package/dist/components/switch/index.mjs +21 -0
  242. package/dist/components/table/index.d.mts +79 -0
  243. package/dist/components/table/index.mjs +688 -0
  244. package/dist/components/tabs/index.d.mts +20 -0
  245. package/dist/components/tabs/index.mjs +24 -0
  246. package/dist/components/tags-input/index.d.mts +17 -0
  247. package/dist/components/tags-input/index.mjs +22 -0
  248. package/dist/components/terminal/index.d.mts +17 -0
  249. package/dist/components/terminal/index.mjs +65 -0
  250. package/dist/components/textarea/index.d.mts +14 -0
  251. package/dist/components/textarea/index.mjs +20 -0
  252. package/dist/components/timeline/index.d.mts +26 -0
  253. package/dist/components/timeline/index.mjs +40 -0
  254. package/dist/components/timer/index.d.mts +8 -0
  255. package/dist/components/timer/index.mjs +11 -0
  256. package/dist/components/toast/index.d.mts +11 -0
  257. package/dist/components/toast/index.mjs +13 -0
  258. package/dist/components/toc/index.d.mts +7 -0
  259. package/dist/components/toc/index.mjs +10 -0
  260. package/dist/components/toggle/index.d.mts +7 -0
  261. package/dist/components/toggle/index.mjs +10 -0
  262. package/dist/components/toggle-group/index.d.mts +15 -0
  263. package/dist/components/toggle-group/index.mjs +20 -0
  264. package/dist/components/toolbar/index.d.mts +17 -0
  265. package/dist/components/toolbar/index.mjs +29 -0
  266. package/dist/components/tooltip/index.d.mts +7 -0
  267. package/dist/components/tooltip/index.mjs +10 -0
  268. package/dist/components/tour/index.d.mts +11 -0
  269. package/dist/components/tour/index.mjs +13 -0
  270. package/dist/components/transfer/index.d.mts +23 -0
  271. package/dist/components/transfer/index.mjs +154 -0
  272. package/dist/components/tree-select/index.d.mts +28 -0
  273. package/dist/components/tree-select/index.mjs +157 -0
  274. package/dist/components/tree-view/index.d.mts +19 -0
  275. package/dist/components/tree-view/index.mjs +18 -0
  276. package/dist/components/typography/index.d.mts +32 -0
  277. package/dist/components/typography/index.mjs +34 -0
  278. package/dist/components/user/index.d.mts +20 -0
  279. package/dist/components/user/index.mjs +42 -0
  280. package/dist/components/virtual-list/index.d.mts +17 -0
  281. package/dist/components/virtual-list/index.mjs +52 -0
  282. package/dist/components/watermark/index.d.mts +16 -0
  283. package/dist/components/watermark/index.mjs +80 -0
  284. package/dist/index-CsfxYv6J.d.mts +10383 -0
  285. package/dist/index-DFN9F5Zt.d.mts +42 -0
  286. package/dist/index-Uefyw7Im.d.mts +108 -0
  287. package/dist/index-uPyYiWaL.d.mts +1813 -0
  288. package/dist/index.d.mts +141 -15446
  289. package/dist/index.mjs +141 -4871
  290. package/dist/input-2oezH-dY.mjs +58 -0
  291. package/dist/mentions-DMIBCBOd.mjs +181 -0
  292. package/dist/select-D1xiT1oJ.mjs +68 -0
  293. package/package.json +103 -9
@@ -0,0 +1,58 @@
1
+ import { injectComponentStyle } from "@bysages/core";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { forwardRef } from "react";
4
+ import { useFieldContext } from "@ark-ui/react/field";
5
+ //#region src/components/input/mask.ts
6
+ function accepts(slot, ch) {
7
+ if (slot === "9") return /\d/.test(ch);
8
+ if (slot === "a") return /[a-zA-Z]/.test(ch);
9
+ return /[\da-zA-Z]/.test(ch);
10
+ }
11
+ /** Apply the entry mask: `9` takes a digit, `a` a letter, `*` either;
12
+ * every other character is literal. A literal already typed is consumed,
13
+ * not duplicated; a literal met out of place holds the walk and lets its
14
+ * own slot claim it — so deleting through the middle reflows the shape
15
+ * instead of corrupting it. */
16
+ function applyMask(raw, mask) {
17
+ const literals = new Set(mask.split("").filter((s) => s !== "9" && s !== "a" && s !== "*"));
18
+ let out = "";
19
+ let at = 0;
20
+ slots: for (const slot of mask) {
21
+ if (at >= raw.length) break;
22
+ if (slot === "9" || slot === "a" || slot === "*") {
23
+ let ch = raw[at];
24
+ while (ch !== void 0 && !accepts(slot, ch)) {
25
+ if (literals.has(ch)) continue slots;
26
+ at += 1;
27
+ ch = raw[at];
28
+ }
29
+ if (ch === void 0) break;
30
+ out += ch;
31
+ at += 1;
32
+ } else if (raw[at] === slot) {
33
+ at += 1;
34
+ out += slot;
35
+ } else out += slot;
36
+ }
37
+ return out;
38
+ }
39
+ //#endregion
40
+ //#region src/components/input/index.tsx
41
+ const Input = forwardRef(function Input({ value, size = "md", invalid = false, mask, onValueChange, ...rest }, ref) {
42
+ injectComponentStyle("input");
43
+ const field = useFieldContext();
44
+ const fieldProps = field?.getInputProps() ?? {};
45
+ return /* @__PURE__ */ jsx("input", {
46
+ ...fieldProps,
47
+ ...rest,
48
+ ...value !== void 0 ? { value } : {},
49
+ "data-scope": "input",
50
+ "data-part": "root",
51
+ "data-size": size,
52
+ ref,
53
+ "data-invalid": invalid || field?.invalid ? "" : void 0,
54
+ onChange: (event) => onValueChange?.(mask ? applyMask(event.target.value, mask) : event.target.value)
55
+ });
56
+ });
57
+ //#endregion
58
+ export { Input as t };
@@ -0,0 +1,181 @@
1
+ import { Field } from "./components/field/index.mjs";
2
+ import { injectComponentStyle } from "@bysages/core";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ import { useRef, useState } from "react";
5
+ import { Popover } from "@ark-ui/react/popover";
6
+ import { Portal } from "@ark-ui/react/portal";
7
+ //#region src/components/mentions/use-mentions.ts
8
+ /** The @-detection machinery behind a mention field: watch the caret,
9
+ * offer the matching candidates, and answer for the keys that drive
10
+ * them. The field element arrives as a getter because hosts wrap it
11
+ * differently (a bare textarea, a field part's ref).
12
+ *
13
+ * `onKeydown` answers whether the vessel consumed the key, so a host
14
+ * with its own Enter semantics — a composer that sends — can yield to
15
+ * the candidates first and act only when the vessel stands down. */
16
+ function useMentions(options, textarea, handlers) {
17
+ const [popupOpen, setPopupOpen] = useState(false);
18
+ const [matches, setMatches] = useState([]);
19
+ const [active, setActive] = useState(0);
20
+ const anchorIndex = useRef(0);
21
+ const caretIndex = useRef(0);
22
+ const resolve = () => typeof options === "function" ? options() : options;
23
+ const closePopup = () => {
24
+ setPopupOpen(false);
25
+ setMatches([]);
26
+ };
27
+ const detect = () => {
28
+ const text = handlers.getText();
29
+ const caret = textarea()?.selectionStart ?? text.length;
30
+ caretIndex.current = caret;
31
+ const head = text.slice(0, caret);
32
+ const char = resolve().trigger ?? "@";
33
+ const anchor = head.lastIndexOf(char);
34
+ const token = anchor === -1 ? "" : head.slice(anchor + char.length);
35
+ if (anchor === -1 || /\s/.test(token)) {
36
+ closePopup();
37
+ return;
38
+ }
39
+ const found = resolve().items.filter((entry) => entry.label.toLowerCase().startsWith(token.toLowerCase()));
40
+ setMatches(found);
41
+ setActive(0);
42
+ anchorIndex.current = anchor;
43
+ setPopupOpen(found.length > 0);
44
+ };
45
+ const insert = (entry) => {
46
+ const text = handlers.getText();
47
+ const char = resolve().trigger ?? "@";
48
+ const next = text.slice(0, anchorIndex.current) + char + entry.label + " " + text.slice(caretIndex.current);
49
+ handlers.setText(next);
50
+ closePopup();
51
+ setTimeout(() => {
52
+ const el = textarea();
53
+ if (!el) return;
54
+ const caret = anchorIndex.current + char.length + entry.label.length + 1;
55
+ el.focus();
56
+ el.setSelectionRange(caret, caret);
57
+ }, 0);
58
+ };
59
+ /** Feed the field's input events through here — the vessel watches
60
+ * the text as it lands, from the element itself. */
61
+ const onInput = () => detect();
62
+ /** Arrows move, Enter inserts, Escape dismisses. Answers `true` when
63
+ * the vessel consumed the key. */
64
+ const onKeydown = (event) => {
65
+ if (!popupOpen || matches.length === 0) return false;
66
+ if (event.key === "ArrowDown") {
67
+ event.preventDefault();
68
+ setActive((current) => (current + 1) % matches.length);
69
+ } else if (event.key === "ArrowUp") {
70
+ event.preventDefault();
71
+ setActive((current) => (current - 1 + matches.length) % matches.length);
72
+ } else if (event.key === "Enter") {
73
+ event.preventDefault();
74
+ insert(matches[active]);
75
+ } else if (event.key === "Escape") closePopup();
76
+ else return false;
77
+ return true;
78
+ };
79
+ return {
80
+ open: popupOpen,
81
+ matches,
82
+ active,
83
+ setActive,
84
+ insert,
85
+ close: closePopup,
86
+ onInput,
87
+ onKeydown
88
+ };
89
+ }
90
+ //#endregion
91
+ //#region src/components/mentions/index.tsx
92
+ /** The vessel: the candidates themselves as a floating card. The anchor
93
+ * is virtual — a live rectangle off the host's field — so a host keeps
94
+ * its own anatomy (the textarea rides where the host puts it) and the
95
+ * vessel still points at the right place. Shares the detection state
96
+ * with the host through `useMentions`. */
97
+ function MentionsVessel({ size = "md", open = false, matches = [], active = 0, anchor = null, onInsert, onActiveChange, onOpenChange }) {
98
+ injectComponentStyle("mentions");
99
+ return /* @__PURE__ */ jsx(Popover.Root, {
100
+ open,
101
+ onOpenChange: (details) => onOpenChange?.(details.open),
102
+ positioning: {
103
+ placement: "bottom-start",
104
+ getAnchorRect: () => anchor?.getBoundingClientRect() ?? null
105
+ },
106
+ children: /* @__PURE__ */ jsx(Portal, { children: /* @__PURE__ */ jsx(Popover.Positioner, { children: /* @__PURE__ */ jsx(Popover.Content, {
107
+ asChild: true,
108
+ children: /* @__PURE__ */ jsx("div", {
109
+ "data-scope": "mentions",
110
+ "data-part": "popup",
111
+ "data-size": size,
112
+ children: matches.map((entry, index) => /* @__PURE__ */ jsx("div", {
113
+ "data-scope": "mentions",
114
+ "data-part": "option",
115
+ "data-active": index === active ? "" : void 0,
116
+ onMouseEnter: () => onActiveChange?.(index),
117
+ onMouseDown: (event) => event.preventDefault(),
118
+ onClick: () => onInsert?.(entry),
119
+ children: entry.label
120
+ }, entry.value))
121
+ })
122
+ }) }) })
123
+ });
124
+ }
125
+ function Mentions({ items = [], value, trigger = "@", placeholder, autoresize = false, invalid = false, size = "md", onValueChange, children, ...rest }) {
126
+ const [internal, setInternal] = useState("");
127
+ const fieldRef = useRef(null);
128
+ const el = () => fieldRef.current;
129
+ const current = value ?? internal;
130
+ const mentions = useMentions({
131
+ items,
132
+ trigger
133
+ }, el, {
134
+ getText: () => el()?.value ?? current,
135
+ setText: (next) => {
136
+ setInternal(next);
137
+ onValueChange?.(next);
138
+ }
139
+ });
140
+ const handleChange = (event) => {
141
+ const node = event.currentTarget;
142
+ setInternal(node.value);
143
+ onValueChange?.(node.value);
144
+ mentions.onInput();
145
+ };
146
+ return /* @__PURE__ */ jsxs("div", {
147
+ ...rest,
148
+ "data-scope": "mentions",
149
+ "data-part": "root",
150
+ "data-size": size,
151
+ children: [
152
+ /* @__PURE__ */ jsx(Field.Textarea, {
153
+ ref: fieldRef,
154
+ autoresize,
155
+ rows: 3,
156
+ placeholder,
157
+ value: current,
158
+ onChange: handleChange,
159
+ onKeyDown: (event) => mentions.onKeydown(event),
160
+ "data-invalid": invalid || void 0,
161
+ "data-scope": "mentions",
162
+ "data-part": "textarea"
163
+ }),
164
+ /* @__PURE__ */ jsx(MentionsVessel, {
165
+ size,
166
+ open: mentions.open,
167
+ matches: mentions.matches,
168
+ active: mentions.active,
169
+ anchor: el(),
170
+ onInsert: mentions.insert,
171
+ onActiveChange: mentions.setActive,
172
+ onOpenChange: (open) => {
173
+ if (!open) mentions.close();
174
+ }
175
+ }),
176
+ children
177
+ ]
178
+ });
179
+ }
180
+ //#endregion
181
+ export { MentionsVessel as n, useMentions as r, Mentions as t };
@@ -0,0 +1,68 @@
1
+ import { injectComponentStyle } from "@bysages/core";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import { useFieldContext } from "@ark-ui/react/field";
4
+ import { Select } from "@ark-ui/react/select";
5
+ //#region src/components/select/native.tsx
6
+ function NativeSelect({ value, options, size = "md", invalid = false, placeholder, disabled = false, onValueChange, ...rest }) {
7
+ injectComponentStyle("select");
8
+ const field = useFieldContext();
9
+ const fieldProps = field?.getInputProps() ?? {};
10
+ const empty = value == null || value === "";
11
+ const off = disabled || field?.disabled;
12
+ return /* @__PURE__ */ jsxs("span", {
13
+ ...rest,
14
+ "data-scope": "select",
15
+ "data-part": "native-root",
16
+ "data-size": size,
17
+ "data-invalid": invalid || field?.invalid ? "" : void 0,
18
+ "data-disabled": off ? "" : void 0,
19
+ "data-placeholder-shown": empty ? "" : void 0,
20
+ children: [/* @__PURE__ */ jsxs("select", {
21
+ ...fieldProps,
22
+ value: value ?? "",
23
+ "data-scope": "select",
24
+ "data-part": "native",
25
+ disabled: off || void 0,
26
+ onChange: (event) => onValueChange?.(event.target.value),
27
+ children: [placeholder ? /* @__PURE__ */ jsx("option", {
28
+ value: "",
29
+ disabled: true,
30
+ hidden: empty ? void 0 : true,
31
+ children: placeholder
32
+ }) : null, options.map((option) => /* @__PURE__ */ jsx("option", {
33
+ value: option.value,
34
+ disabled: option.disabled,
35
+ children: option.label
36
+ }, option.value))]
37
+ }), /* @__PURE__ */ jsx("svg", {
38
+ "data-scope": "select",
39
+ "data-part": "native-icon",
40
+ viewBox: "0 0 16 16",
41
+ "aria-hidden": "true",
42
+ children: /* @__PURE__ */ jsx("path", {
43
+ d: "M4 6l4 4 4-4",
44
+ fill: "none",
45
+ stroke: "currentColor",
46
+ strokeWidth: 1.5,
47
+ strokeLinecap: "round",
48
+ strokeLinejoin: "round"
49
+ })
50
+ })]
51
+ });
52
+ }
53
+ //#endregion
54
+ //#region src/components/select/index.tsx
55
+ function SelectRoot(props) {
56
+ const { size = "md", ...rest } = props;
57
+ return /* @__PURE__ */ jsx(Select.Root, {
58
+ ...rest,
59
+ "data-size": size
60
+ });
61
+ }
62
+ const Select$1 = {
63
+ ...Select,
64
+ Root: SelectRoot
65
+ };
66
+ injectComponentStyle("select");
67
+ //#endregion
68
+ export { NativeSelect as n, Select$1 as t };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bysages/react",
3
- "version": "0.2.2",
3
+ "version": "0.3.0",
4
4
  "description": "By Sages Elements components for React — styled by the paper-and-ink design tokens",
5
5
  "keywords": [
6
6
  "accessible",
@@ -32,42 +32,136 @@
32
32
  "dist"
33
33
  ],
34
34
  "type": "module",
35
+ "sideEffects": [
36
+ "./dist/components/accordion/index.mjs",
37
+ "./dist/components/ai/index.mjs",
38
+ "./dist/components/alert/index.mjs",
39
+ "./dist/components/angle-slider/index.mjs",
40
+ "./dist/components/avatar/index.mjs",
41
+ "./dist/components/banner/index.mjs",
42
+ "./dist/components/breadcrumb/index.mjs",
43
+ "./dist/components/button-group/index.mjs",
44
+ "./dist/components/card/index.mjs",
45
+ "./dist/components/carousel/index.mjs",
46
+ "./dist/components/checkbox/index.mjs",
47
+ "./dist/components/clipboard/index.mjs",
48
+ "./dist/components/collapsible/index.mjs",
49
+ "./dist/components/color-picker/index.mjs",
50
+ "./dist/components/combobox/index.mjs",
51
+ "./dist/components/date-input/index.mjs",
52
+ "./dist/components/date-picker/index.mjs",
53
+ "./dist/components/dialog/index.mjs",
54
+ "./dist/components/drawer/index.mjs",
55
+ "./dist/components/editable/index.mjs",
56
+ "./dist/components/empty/index.mjs",
57
+ "./dist/components/field/index.mjs",
58
+ "./dist/components/fieldset/index.mjs",
59
+ "./dist/components/file-upload/index.mjs",
60
+ "./dist/components/float-button/index.mjs",
61
+ "./dist/components/floating-panel/index.mjs",
62
+ "./dist/components/highlight/index.mjs",
63
+ "./dist/components/hover-card/index.mjs",
64
+ "./dist/components/image-cropper/index.mjs",
65
+ "./dist/components/input-group/index.mjs",
66
+ "./dist/components/json-tree-view/index.mjs",
67
+ "./dist/components/layout/index.mjs",
68
+ "./dist/components/list/index.mjs",
69
+ "./dist/components/listbox/index.mjs",
70
+ "./dist/components/marquee/index.mjs",
71
+ "./dist/components/menu/index.mjs",
72
+ "./dist/components/meter/index.mjs",
73
+ "./dist/components/navigation-menu/index.mjs",
74
+ "./dist/components/number-input/index.mjs",
75
+ "./dist/components/page-header/index.mjs",
76
+ "./dist/components/pagination/index.mjs",
77
+ "./dist/components/password-input/index.mjs",
78
+ "./dist/components/pin-input/index.mjs",
79
+ "./dist/components/popover/index.mjs",
80
+ "./dist/components/progress/index.mjs",
81
+ "./dist/components/qr-code/index.mjs",
82
+ "./dist/components/radio-group/index.mjs",
83
+ "./dist/components/rating-group/index.mjs",
84
+ "./dist/components/scroll-area/index.mjs",
85
+ "./dist/components/segment-group/index.mjs",
86
+ "./dist/components/select/index.mjs",
87
+ "./dist/components/signature-pad/index.mjs",
88
+ "./dist/components/slider/index.mjs",
89
+ "./dist/components/splitter/index.mjs",
90
+ "./dist/components/stat/index.mjs",
91
+ "./dist/components/steps/index.mjs",
92
+ "./dist/components/swap/index.mjs",
93
+ "./dist/components/switch/index.mjs",
94
+ "./dist/components/tabs/index.mjs",
95
+ "./dist/components/tags-input/index.mjs",
96
+ "./dist/components/timeline/index.mjs",
97
+ "./dist/components/timer/index.mjs",
98
+ "./dist/components/toast/index.mjs",
99
+ "./dist/components/toc/index.mjs",
100
+ "./dist/components/toggle/index.mjs",
101
+ "./dist/components/toggle-group/index.mjs",
102
+ "./dist/components/tooltip/index.mjs",
103
+ "./dist/components/tour/index.mjs",
104
+ "./dist/components/tree-view/index.mjs",
105
+ "./dist/components/typography/index.mjs"
106
+ ],
35
107
  "main": "dist/index.mjs",
36
108
  "types": "dist/index.d.mts",
37
109
  "exports": {
38
110
  ".": {
39
111
  "types": "./dist/index.d.mts",
40
112
  "import": "./dist/index.mjs"
113
+ },
114
+ "./generative": {
115
+ "types": "./dist/generative/index.d.mts",
116
+ "import": "./dist/generative/index.mjs"
41
117
  }
42
118
  },
43
119
  "dependencies": {
44
120
  "@ark-ui/react": "5.39.2",
45
- "@tanstack/markdown": "0.0.15",
121
+ "@tanstack/markdown": "1.0.0",
122
+ "@tanstack/react-form": "1.33.5",
46
123
  "@tanstack/react-table": "9.2.4",
47
124
  "@tanstack/react-virtual": "3.14.13",
48
125
  "@zag-js/cascade-select": "1.44.0",
49
126
  "@zag-js/react": "1.44.0",
50
- "@bysages/core": "0.2.2",
51
- "@bysages/icons": "0.2.2"
127
+ "@bysages/core": "0.3.0",
128
+ "@bysages/icons": "0.3.0"
52
129
  },
53
130
  "devDependencies": {
54
- "@storybook/addon-a11y": "10.6.0",
55
- "@storybook/react-vite": "10.6.0",
131
+ "@json-render/core": "0.21.0",
132
+ "@json-render/react": "0.21.0",
133
+ "@storybook/addon-a11y": "10.6.1",
134
+ "@storybook/react-vite": "10.6.1",
56
135
  "@types/react": "19.3.0",
57
136
  "@types/react-dom": "19.3.0",
58
- "ai": "7.0.107",
137
+ "ai": "7.0.126",
59
138
  "react": "19.3.0",
60
139
  "react-dom": "19.3.0",
61
- "storybook": "10.6.0",
140
+ "storybook": "10.6.1",
62
141
  "zod": "4.6.5"
63
142
  },
64
143
  "peerDependencies": {
144
+ "@json-render/core": "^0.21.0",
145
+ "@json-render/react": "^0.21.0",
65
146
  "react": ">=18",
66
- "react-dom": ">=18"
147
+ "react-dom": ">=18",
148
+ "zod": "^4.0"
149
+ },
150
+ "peerDependenciesMeta": {
151
+ "@json-render/core": {
152
+ "optional": true
153
+ },
154
+ "@json-render/react": {
155
+ "optional": true
156
+ },
157
+ "zod": {
158
+ "optional": true
159
+ }
67
160
  },
68
161
  "scripts": {
69
162
  "dev": "storybook dev -p 6006",
70
163
  "build": "vp pack",
164
+ "build:workbench": "storybook build -o ../../docs/public/storybook/react",
71
165
  "release": "basis publish"
72
166
  }
73
167
  }