import { batch, createSignal, createUniqueId, onMount, type Component, type Setter, } from "solid-js"; import Scaffold from "../material/Scaffold"; import { Avatar, Button, IconButton, List, ListItemButton, ListItemIcon, ListItemSecondaryAction, ListItemText, Radio, Switch, Divider, } from "@suid/material"; import { ArrowDropDown, Public as PublicIcon, Send, People as PeopleIcon, ThreeP as ThreePIcon, ListAlt as ListAltIcon, } from "@suid/icons-material"; import type { Account } from "../accounts/stores"; import tootComposers from "./TootComposer.module.css"; import { makeEventListener } from "@solid-primitives/event-listener"; import BottomSheet from "../material/BottomSheet"; type TootVisibility = "public" | "unlisted" | "private" | "direct"; const TootVisibilityPickerDialog: Component<{ open?: boolean; onClose: () => void; visibility: TootVisibility; onVisibilityChange: (value: TootVisibility) => void; }> = (props) => { type Kind = "public" | "private" | "direct"; const kind = () => props.visibility === "public" || props.visibility === "unlisted" ? "public" : props.visibility; const setKind = (nv: Kind) => { if (nv == "public") { props.onVisibilityChange(discoverable() ? "public" : "unlisted"); } else { props.onVisibilityChange(nv); } }; const discoverable = () => { return props.visibility === "public"; }; const setDiscoverable = (setter: (v: boolean) => boolean) => { const nval = setter(discoverable()); props.onVisibilityChange(nval ? "public" : "unlisted"); // trigger change }; return ( } > setDiscoverable((x) => !x)} > ); }; const ReplyEditor: Component<{ profile: Account; replyToDisplayName: string; isTyping?: boolean onTypingChange: (value: boolean) => void }> = (props) => { let inputRef: HTMLTextAreaElement; const buttonId = createUniqueId(); const menuId = createUniqueId(); const typing = () => props.isTyping const setTyping = (v: boolean) => props.onTypingChange(v) const [visibility, setVisibility] = createSignal("public"); const [permPicker, setPermPicker] = createSignal(false); onMount(() => { makeEventListener(inputRef, "focus", () => setTyping(true)); }); const containerStyle = () => typing() || permPicker() ? { position: "sticky" as const, top: "var(--scaffold-topbar-height, 0)", bottom: "var(--safe-area-inset-bottom, 0)", "z-index": 2, } : undefined; const visibilityText = () => { switch (visibility()) { case "public": return "Discoverable"; case "unlisted": return "Public"; case "private": return "Only Followers"; case "direct": return "Only Mentions"; } }; return (
inputRef.focus()} >
setPermPicker(false)} visibility={visibility()} onVisibilityChange={setVisibility} />
); }; export default ReplyEditor;