diff --git a/.changeset/young-seals-love.md b/.changeset/young-seals-love.md new file mode 100644 index 000000000..61a95dcb6 --- /dev/null +++ b/.changeset/young-seals-love.md @@ -0,0 +1,5 @@ +--- +"nostrudel": minor +--- + +Rebuild stream view layout diff --git a/src/components/magic-textarea.tsx b/src/components/magic-textarea.tsx index 085b26423..4e9f3c281 100644 --- a/src/components/magic-textarea.tsx +++ b/src/components/magic-textarea.tsx @@ -1,8 +1,9 @@ -import React from "react"; -import { Image, Textarea, TextareaProps } from "@chakra-ui/react"; +import React, { TextareaHTMLAttributes } from "react"; +import { Image, Input, InputProps, Textarea, TextareaProps } from "@chakra-ui/react"; import ReactTextareaAutocomplete, { ItemComponentProps, TextareaProps as ReactTextareaAutocompleteProps, + TriggerType, } from "@webscopeio/react-textarea-autocomplete"; import "@webscopeio/react-textarea-autocomplete/style.css"; import { nip19 } from "nostr-tools"; @@ -70,35 +71,59 @@ const Loading: ReactTextareaAutocompleteProps< React.TextareaHTMLAttributes >["loadingComponent"] = ({ data }) =>
Loading
; -export default function MagicTextArea({ ...props }: TextareaProps) { +function useAutocompleteTriggers() { const emojis = useContextEmojis(); const getDirectory = useUserDirectoryContext(); + const triggers: TriggerType = { + ":": { + dataProvider: (token: string) => { + return matchSorter(emojis, token.trim(), { keys: ["keywords"] }).slice(0, 10); + }, + component: Item, + output, + }, + "@": { + dataProvider: async (token: string) => { + const dir = getUsersFromDirectory(await getDirectory()); + return matchSorter(dir, token.trim(), { keys: ["names"] }).slice(0, 10); + }, + component: Item, + output, + }, + }; + + return triggers; +} + +export function MagicInput({ ...props }: InputProps) { + const triggers = useAutocompleteTriggers(); + return ( -