import { DistributeHorizontallyIcon, DistributeVerticallyIcon, } from "../components/icons"; import { ToolButton } from "../components/ToolButton"; import { distributeElements, Distribution } from "../disitrubte"; import { getNonDeletedElements } from "../element"; import { ExcalidrawElement } from "../element/types"; import { t } from "../i18n"; import { CODES } from "../keys"; import { getSelectedElements, isSomeElementSelected } from "../scene"; import { AppState } from "../types"; import { arrayToMap, getShortcutKey } from "../utils"; import { register } from "./register"; const enableActionGroup = ( elements: readonly ExcalidrawElement[], appState: AppState, ) => getSelectedElements(getNonDeletedElements(elements), appState).length > 1; const distributeSelectedElements = ( elements: readonly ExcalidrawElement[], appState: Readonly, distribution: Distribution, ) => { const selectedElements = getSelectedElements( getNonDeletedElements(elements), appState, ); const updatedElements = distributeElements(selectedElements, distribution); const updatedElementsMap = arrayToMap(updatedElements); return elements.map( (element) => updatedElementsMap.get(element.id) || element, ); }; export const distributeHorizontally = register({ name: "distributeHorizontally", perform: (elements, appState) => { return { appState, elements: distributeSelectedElements(elements, appState, { space: "between", axis: "x", }), commitToHistory: true, }; }, keyTest: (event) => event.altKey && event.code === CODES.H, PanelComponent: ({ elements, appState, updateData }) => (