@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.
- package/dist/ai-B0o-dsAf.mjs +309 -0
- package/dist/ai-prompt-input-Cl9ulICF.mjs +401 -0
- package/dist/{ai-response-CjjjprMY.mjs → ai-response-DTxdL5rX.mjs} +9 -11
- package/dist/{chevron-BA7kV9m7.mjs → chevron-DnImlNip.mjs} +2 -3
- package/dist/components/accordion/index.d.mts +1 -2
- package/dist/components/accordion/index.mjs +3 -4
- package/dist/components/affix/index.d.mts +1 -2
- package/dist/components/affix/index.mjs +2 -3
- package/dist/components/ai/index.d.mts +107 -2
- package/dist/components/ai/index.mjs +7 -82
- package/dist/components/ai-action/index.d.mts +0 -2
- package/dist/components/ai-action/index.mjs +2 -3
- package/dist/components/ai-attachments/index.d.mts +0 -2
- package/dist/components/ai-attachments/index.mjs +4 -5
- package/dist/components/ai-message/index.d.mts +2 -14
- package/dist/components/ai-message/index.mjs +5 -4
- package/dist/components/ai-prompt-input/index.d.mts +14 -18
- package/dist/components/ai-prompt-input/index.mjs +1 -126
- package/dist/components/ai-reasoning/index.d.mts +0 -2
- package/dist/components/ai-reasoning/index.mjs +3 -4
- package/dist/components/ai-response/index.d.mts +1 -3
- package/dist/components/ai-response/index.mjs +1 -2
- package/dist/components/ai-source/index.d.mts +0 -2
- package/dist/components/ai-source/index.mjs +2 -3
- package/dist/components/ai-suggestion/index.d.mts +0 -2
- package/dist/components/ai-suggestion/index.mjs +2 -3
- package/dist/components/ai-tool/index.d.mts +2 -24
- package/dist/components/ai-tool/index.mjs +46 -14
- package/dist/components/alert/index.d.mts +1 -2
- package/dist/components/alert/index.mjs +2 -3
- package/dist/components/angle-slider/index.d.mts +1 -2
- package/dist/components/angle-slider/index.mjs +2 -3
- package/dist/components/aspect-ratio/index.d.mts +1 -2
- package/dist/components/aspect-ratio/index.mjs +2 -3
- package/dist/components/autocomplete/index.d.mts +5 -3
- package/dist/components/autocomplete/index.mjs +12 -10
- package/dist/components/avatar/index.d.mts +1 -2
- package/dist/components/avatar/index.mjs +2 -3
- package/dist/components/avatar-group/index.d.mts +1 -2
- package/dist/components/avatar-group/index.mjs +2 -3
- package/dist/components/back-top/index.d.mts +1 -2
- package/dist/components/back-top/index.mjs +3 -4
- package/dist/components/badge/index.d.mts +1 -2
- package/dist/components/badge/index.mjs +2 -3
- package/dist/components/banner/index.d.mts +1 -2
- package/dist/components/banner/index.mjs +3 -4
- package/dist/components/bento/index.d.mts +1 -3
- package/dist/components/bento/index.mjs +1 -2
- package/dist/components/block-ui/index.d.mts +1 -2
- package/dist/components/block-ui/index.mjs +2 -3
- package/dist/components/breadcrumb/index.d.mts +1 -2
- package/dist/components/breadcrumb/index.mjs +2 -3
- package/dist/components/browser/index.d.mts +1 -3
- package/dist/components/browser/index.mjs +1 -2
- package/dist/components/button/index.d.mts +1 -2
- package/dist/components/button/index.mjs +2 -3
- package/dist/components/button-group/index.d.mts +1 -2
- package/dist/components/button-group/index.mjs +1 -2
- package/dist/components/calendar/index.d.mts +1 -2
- package/dist/components/calendar/index.mjs +3 -4
- package/dist/components/card/index.d.mts +1 -3
- package/dist/components/card/index.mjs +1 -2
- package/dist/components/carousel/index.d.mts +1 -2
- package/dist/components/carousel/index.mjs +3 -4
- package/dist/components/cascade-select/index.d.mts +5 -3
- package/dist/components/cascade-select/index.mjs +42 -40
- package/dist/components/checkbox/index.d.mts +1 -2
- package/dist/components/checkbox/index.mjs +3 -4
- package/dist/components/checkbox-group/index.d.mts +1 -2
- package/dist/components/checkbox-group/index.mjs +3 -4
- package/dist/components/chip/index.d.mts +1 -2
- package/dist/components/chip/index.mjs +2 -3
- package/dist/components/client-only/index.d.mts +0 -2
- package/dist/components/client-only/index.mjs +2 -3
- package/dist/components/clipboard/index.d.mts +1 -2
- package/dist/components/clipboard/index.mjs +3 -4
- package/dist/components/collapsible/index.d.mts +1 -2
- package/dist/components/collapsible/index.mjs +3 -4
- package/dist/components/collection/index.mjs +1 -2
- package/dist/components/color-picker/index.d.mts +10 -3
- package/dist/components/color-picker/index.mjs +39 -33
- package/dist/components/combobox/index.d.mts +10 -3
- package/dist/components/combobox/index.mjs +17 -12
- package/dist/components/command/index.d.mts +5 -3
- package/dist/components/command/index.mjs +74 -72
- package/dist/components/comment/index.d.mts +1 -2
- package/dist/components/comment/index.mjs +2 -3
- package/dist/components/config-provider/index.d.mts +1 -2
- package/dist/components/config-provider/index.mjs +2 -3
- package/dist/components/container/index.d.mts +1 -2
- package/dist/components/container/index.mjs +2 -3
- package/dist/components/data-view/index.d.mts +1 -2
- package/dist/components/data-view/index.mjs +3 -4
- package/dist/components/date-input/index.d.mts +0 -2
- package/dist/components/date-input/index.mjs +2 -3
- package/dist/components/date-picker/index.d.mts +9 -3
- package/dist/components/date-picker/index.mjs +30 -25
- package/dist/components/deferred-content/index.d.mts +1 -2
- package/dist/components/deferred-content/index.mjs +2 -3
- package/dist/components/descriptions/index.d.mts +1 -2
- package/dist/components/descriptions/index.mjs +2 -3
- package/dist/components/dialog/index.d.mts +49 -5
- package/dist/components/dialog/index.mjs +67 -20
- package/dist/components/dock/index.d.mts +1 -3
- package/dist/components/dock/index.mjs +1 -2
- package/dist/components/download-trigger/index.d.mts +0 -2
- package/dist/components/download-trigger/index.mjs +2 -3
- package/dist/components/drawer/index.d.mts +20 -5
- package/dist/components/drawer/index.mjs +21 -16
- package/dist/components/dynamic-input/index.d.mts +1 -2
- package/dist/components/dynamic-input/index.mjs +5 -6
- package/dist/components/editable/index.d.mts +1 -2
- package/dist/components/editable/index.mjs +3 -4
- package/dist/components/ellipsis/index.d.mts +1 -2
- package/dist/components/ellipsis/index.mjs +2 -3
- package/dist/components/empty/index.d.mts +1 -3
- package/dist/components/empty/index.mjs +1 -2
- package/dist/components/field/index.d.mts +1 -2
- package/dist/components/field/index.mjs +2 -3
- package/dist/components/fieldset/index.d.mts +1 -2
- package/dist/components/fieldset/index.mjs +2 -3
- package/dist/components/file-upload/index.d.mts +1 -2
- package/dist/components/file-upload/index.mjs +3 -4
- package/dist/components/float-button/index.d.mts +1 -2
- package/dist/components/float-button/index.mjs +3 -4
- package/dist/components/floating-panel/index.d.mts +20 -5
- package/dist/components/floating-panel/index.mjs +37 -32
- package/dist/components/focus-trap/index.d.mts +0 -2
- package/dist/components/focus-trap/index.mjs +2 -3
- package/dist/components/form/index.d.mts +0 -2
- package/dist/components/form/index.mjs +2 -3
- package/dist/components/format/index.d.mts +1 -3
- package/dist/components/format/index.mjs +1 -2
- package/dist/components/frame/index.d.mts +1 -3
- package/dist/components/frame/index.mjs +3 -4
- package/dist/components/grid/index.d.mts +1 -2
- package/dist/components/grid/index.mjs +2 -3
- package/dist/components/highlight/index.d.mts +1 -3
- package/dist/components/highlight/index.mjs +2 -3
- package/dist/components/hover-card/index.d.mts +18 -5
- package/dist/components/hover-card/index.mjs +16 -11
- package/dist/components/icon/index.d.mts +1 -2
- package/dist/components/icon/index.mjs +2 -3
- package/dist/components/image/index.d.mts +1 -2
- package/dist/components/image/index.mjs +3 -4
- package/dist/components/image-cropper/index.d.mts +1 -2
- package/dist/components/image-cropper/index.mjs +2 -3
- package/dist/components/image-viewer/index.d.mts +1 -1
- package/dist/components/image-viewer/index.mjs +1 -2
- package/dist/components/input/index.d.mts +1 -3
- package/dist/components/input/index.mjs +1 -2
- package/dist/components/input-group/index.d.mts +1 -3
- package/dist/components/input-group/index.mjs +1 -2
- package/dist/components/json-tree-view/index.d.mts +1 -2
- package/dist/components/json-tree-view/index.mjs +3 -4
- package/dist/components/kbd/index.d.mts +1 -2
- package/dist/components/kbd/index.mjs +2 -3
- package/dist/components/layout/index.d.mts +1 -2
- package/dist/components/layout/index.mjs +19 -15
- package/dist/components/link/index.d.mts +1 -2
- package/dist/components/link/index.mjs +2 -3
- package/dist/components/list/index.d.mts +1 -2
- package/dist/components/list/index.mjs +1 -2
- package/dist/components/listbox/index.d.mts +0 -2
- package/dist/components/listbox/index.mjs +3 -4
- package/dist/components/marquee/index.d.mts +1 -2
- package/dist/components/marquee/index.mjs +2 -3
- package/dist/components/masonry/index.d.mts +1 -2
- package/dist/components/masonry/index.mjs +2 -3
- package/dist/components/media-player/index.d.mts +1 -1
- package/dist/components/media-player/index.mjs +1 -2
- package/dist/components/mentions/index.d.mts +2 -2
- package/dist/components/mentions/index.mjs +1 -2
- package/dist/components/menu/index.d.mts +11 -4
- package/dist/components/menu/index.mjs +15 -10
- package/dist/components/menubar/index.d.mts +5 -3
- package/dist/components/menubar/index.mjs +14 -12
- package/dist/components/meter/index.d.mts +1 -3
- package/dist/components/meter/index.mjs +1 -2
- package/dist/components/navigation-menu/index.d.mts +10 -3
- package/dist/components/navigation-menu/index.mjs +9 -4
- package/dist/components/number-input/index.d.mts +1 -2
- package/dist/components/number-input/index.mjs +3 -4
- package/dist/components/order-list/index.d.mts +1 -2
- package/dist/components/order-list/index.mjs +4 -5
- package/dist/components/page-header/index.d.mts +1 -3
- package/dist/components/page-header/index.mjs +1 -2
- package/dist/components/pagination/index.d.mts +3 -4
- package/dist/components/pagination/index.mjs +3 -4
- package/dist/components/password-input/index.d.mts +1 -2
- package/dist/components/password-input/index.mjs +3 -4
- package/dist/components/pin-input/index.d.mts +1 -2
- package/dist/components/pin-input/index.mjs +2 -3
- package/dist/components/popconfirm/index.d.mts +6 -4
- package/dist/components/popconfirm/index.mjs +33 -31
- package/dist/components/popover/index.d.mts +1 -1
- package/dist/components/popover/index.mjs +23 -18
- package/dist/components/presence/index.d.mts +0 -2
- package/dist/components/presence/index.mjs +2 -3
- package/dist/components/progress/index.d.mts +1 -2
- package/dist/components/progress/index.mjs +2 -3
- package/dist/components/progress-group/index.d.mts +1 -2
- package/dist/components/progress-group/index.mjs +2 -3
- package/dist/components/qr-code/index.d.mts +1 -2
- package/dist/components/qr-code/index.mjs +2 -3
- package/dist/components/radio-group/index.d.mts +1 -2
- package/dist/components/radio-group/index.mjs +2 -3
- package/dist/components/rating-group/index.d.mts +1 -2
- package/dist/components/rating-group/index.mjs +3 -4
- package/dist/components/result/index.d.mts +1 -2
- package/dist/components/result/index.mjs +2 -3
- package/dist/components/scroll-area/index.d.mts +8 -3
- package/dist/components/scroll-area/index.mjs +7 -6
- package/dist/components/segment-group/index.d.mts +1 -2
- package/dist/components/segment-group/index.mjs +2 -3
- package/dist/components/select/index.d.mts +1 -1
- package/dist/components/select/index.mjs +1 -2
- package/dist/components/separator/index.d.mts +1 -2
- package/dist/components/separator/index.mjs +2 -3
- package/dist/components/signature-pad/index.d.mts +1 -2
- package/dist/components/signature-pad/index.mjs +3 -4
- package/dist/components/skeleton/index.d.mts +1 -2
- package/dist/components/skeleton/index.mjs +2 -3
- package/dist/components/slider/index.d.mts +1 -2
- package/dist/components/slider/index.mjs +2 -3
- package/dist/components/spinner/index.d.mts +1 -2
- package/dist/components/spinner/index.mjs +3 -4
- package/dist/components/split-button/index.d.mts +5 -3
- package/dist/components/split-button/index.mjs +16 -14
- package/dist/components/splitter/index.d.mts +1 -2
- package/dist/components/splitter/index.mjs +2 -3
- package/dist/components/spotlight/index.d.mts +1 -2
- package/dist/components/spotlight/index.mjs +2 -3
- package/dist/components/stack/index.d.mts +1 -2
- package/dist/components/stack/index.mjs +2 -3
- package/dist/components/stat/index.d.mts +1 -3
- package/dist/components/stat/index.mjs +1 -2
- package/dist/components/steps/index.d.mts +0 -2
- package/dist/components/steps/index.mjs +2 -3
- package/dist/components/swap/index.d.mts +1 -2
- package/dist/components/swap/index.mjs +3 -4
- package/dist/components/switch/index.d.mts +1 -2
- package/dist/components/switch/index.mjs +2 -3
- package/dist/components/table/index.d.mts +21 -3
- package/dist/components/table/index.mjs +28 -14
- package/dist/components/tabs/index.d.mts +9 -3
- package/dist/components/tabs/index.mjs +36 -8
- package/dist/components/tag/index.d.mts +1 -2
- package/dist/components/tag/index.mjs +3 -4
- package/dist/components/tags-input/index.d.mts +1 -2
- package/dist/components/tags-input/index.mjs +3 -4
- package/dist/components/terminal/index.d.mts +4 -3
- package/dist/components/terminal/index.mjs +8 -7
- package/dist/components/textarea/index.d.mts +1 -2
- package/dist/components/textarea/index.mjs +2 -3
- package/dist/components/timeline/index.d.mts +1 -2
- package/dist/components/timeline/index.mjs +1 -2
- package/dist/components/timer/index.d.mts +1 -2
- package/dist/components/timer/index.mjs +2 -3
- package/dist/components/toast/index.d.mts +0 -2
- package/dist/components/toast/index.mjs +4 -5
- package/dist/components/toc/index.d.mts +1 -2
- package/dist/components/toc/index.mjs +2 -3
- package/dist/components/toggle/index.d.mts +1 -2
- package/dist/components/toggle/index.mjs +2 -3
- package/dist/components/toggle-group/index.d.mts +1 -2
- package/dist/components/toggle-group/index.mjs +3 -4
- package/dist/components/toolbar/index.d.mts +1 -2
- package/dist/components/toolbar/index.mjs +2 -3
- package/dist/components/tooltip/index.d.mts +18 -5
- package/dist/components/tooltip/index.mjs +10 -5
- package/dist/components/tour/index.d.mts +20 -5
- package/dist/components/tour/index.mjs +18 -13
- package/dist/components/transfer/index.d.mts +1 -2
- package/dist/components/transfer/index.mjs +5 -6
- package/dist/components/tree-select/index.d.mts +6 -4
- package/dist/components/tree-select/index.mjs +43 -41
- package/dist/components/tree-view/index.d.mts +15 -5
- package/dist/components/tree-view/index.mjs +30 -12
- package/dist/components/typography/index.d.mts +9 -7
- package/dist/components/typography/index.mjs +10 -3
- package/dist/components/user/index.d.mts +1 -2
- package/dist/components/user/index.mjs +2 -3
- package/dist/components/virtual-list/index.d.mts +1 -2
- package/dist/components/virtual-list/index.mjs +2 -3
- package/dist/components/watermark/index.d.mts +1 -2
- package/dist/components/watermark/index.mjs +2 -3
- package/dist/{family-DE_GQeeM.mjs → family-Co1YsN4N.mjs} +1 -2
- package/dist/floating-BhcDRgnx.d.mts +7 -0
- package/dist/floating-CMR7cvmA.mjs +33 -0
- package/dist/generative/index.d.mts +0 -2
- package/dist/generative/index.mjs +28 -53
- package/dist/{icon-Cri0-7-x.mjs → icon-C9udWCyz.mjs} +1 -2
- package/dist/{id-C37UYLwJ.mjs → id-Ctic_3o8.mjs} +1 -2
- package/dist/{image-viewer-D4FuYrk6.mjs → image-viewer-BPTApdoP.mjs} +50 -52
- package/dist/index-CEYybyEQ.d.mts +163 -0
- package/dist/index-CjO4Ggf0.d.mts +115 -0
- package/dist/{index-BcRdWGY-.d.mts → index-DIZEFqJM.d.mts} +0 -8
- package/dist/{index-D_iKc2Uw.d.mts → index-DZ2S5rMj.d.mts} +10 -6
- package/dist/index-j02dTkfc.d.mts +37 -0
- package/dist/index-lCsvE2Vl.d.mts +37 -0
- package/dist/{index-Dj8S4eyJ.d.mts → index-n9VlNO7D.d.mts} +4 -5
- package/dist/index.d.mts +13 -13
- package/dist/index.mjs +10 -10
- package/dist/{input-BDpQ0e6G.mjs → input-YRjehBhU.mjs} +3 -5
- package/dist/{media-player-C0WcjVI-.mjs → media-player-DxG0EYz7.mjs} +7 -12
- package/dist/mentions-B59tQDPt.mjs +341 -0
- package/dist/{messages-1jJWtaYU.mjs → messages-B6n0lVyt.mjs} +1 -2
- package/dist/{select-D_soVdWK.mjs → select-BLFqfeVw.mjs} +24 -20
- package/package.json +17 -17
- package/dist/index-B4twHAQC.d.mts +0 -10456
- package/dist/index-Bbg4heDO.d.mts +0 -113
- package/dist/index-Eu-Bttta.d.mts +0 -24
- 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 };
|