import { useUIState } from "src/useUIState"; import { ToolbarButton } from "."; import { useCallback } from "react"; import { Fact, useEntity, useReplicache } from "src/replicache"; import { Props } from "components/Icons/Props"; export function TextAlignmentToolbar() { let focusedBlock = useUIState((s) => s.focusedEntity); let { rep } = useReplicache(); let alignment = useEntity( focusedBlock?.entityID || null, "block/text-alignment", )?.data.value; let setAlignment = useCallback( (alignment: Fact<"block/text-alignment">["data"]["value"]) => { let blocks = useUIState.getState().selectedBlocks; if (focusedBlock?.entityType === "page" || !focusedBlock) return null; rep?.mutate.assertFact( blocks.map((b) => ({ entity: b.value, attribute: "block/text-alignment", data: { type: "text-alignment-type-union", value: alignment }, })), ); }, [focusedBlock, rep], ); return ( <> setAlignment("left")} tooltipContent="Align Left" active={alignment === "left"} > setAlignment("center")} tooltipContent="Align Center" active={alignment === "center"} > setAlignment("right")} tooltipContent="Align Right" active={alignment === "right"} > setAlignment("justify")} tooltipContent="Align Justified" active={alignment === "justify"} > ); } export function TextAlignmentButton(props: { setToolbarState: (s: "text-alignment") => void; className?: string; }) { let focusedBlock = useUIState((s) => s.focusedEntity); let alignment = useEntity(focusedBlock?.entityID || null, "block/text-alignment")?.data .value || "left"; return ( Align} className={`${props.className}`} onClick={() => { props.setToolbarState("text-alignment"); }} > {alignment === "left" ? ( ) : alignment === "center" ? ( ) : alignment === "justify" ? ( ) : ( )} ); } export const AlignLeftSmall = (props: Props) => { return ( ); }; export const AlignCenterSmall = (props: Props) => { return ( ); }; export const AlignRightSmall = (props: Props) => { return ( ); }; export const AlignJustifiedSmall = (props: Props) => { return ( ); };