mirror of
https://github.com/excalidraw/excalidraw.git
synced 2025-05-03 10:00:07 -04:00
Some checks failed
Auto release excalidraw next / Auto-release-excalidraw-next (push) Failing after 2m36s
Build Docker image / build-docker (push) Failing after 6s
Cancel previous runs / cancel (push) Failing after 1s
Publish Docker / publish-docker (push) Failing after 31s
New Sentry production release / sentry (push) Failing after 2m3s
58 lines
1.8 KiB
TypeScript
58 lines
1.8 KiB
TypeScript
import { isEmbeddableElement } from "@excalidraw/element/typeChecks";
|
|
|
|
import { KEYS, getShortcutKey } from "@excalidraw/common";
|
|
|
|
import { ToolButton } from "../components/ToolButton";
|
|
import { getContextMenuLabel } from "../components/hyperlink/Hyperlink";
|
|
import { LinkIcon } from "../components/icons";
|
|
import { t } from "../i18n";
|
|
|
|
import { getSelectedElements } from "../scene";
|
|
import { CaptureUpdateAction } from "../store";
|
|
|
|
import { register } from "./register";
|
|
|
|
export const actionLink = register({
|
|
name: "hyperlink",
|
|
label: (elements, appState) => getContextMenuLabel(elements, appState),
|
|
icon: LinkIcon,
|
|
perform: (elements, appState) => {
|
|
if (appState.showHyperlinkPopup === "editor") {
|
|
return false;
|
|
}
|
|
|
|
return {
|
|
elements,
|
|
appState: {
|
|
...appState,
|
|
showHyperlinkPopup: "editor",
|
|
openMenu: null,
|
|
},
|
|
captureUpdate: CaptureUpdateAction.IMMEDIATELY,
|
|
};
|
|
},
|
|
trackEvent: { category: "hyperlink", action: "click" },
|
|
keyTest: (event) => event[KEYS.CTRL_OR_CMD] && event.key === KEYS.K,
|
|
predicate: (elements, appState) => {
|
|
const selectedElements = getSelectedElements(elements, appState);
|
|
return selectedElements.length === 1;
|
|
},
|
|
PanelComponent: ({ elements, appState, updateData }) => {
|
|
const selectedElements = getSelectedElements(elements, appState);
|
|
|
|
return (
|
|
<ToolButton
|
|
type="button"
|
|
icon={LinkIcon}
|
|
aria-label={t(getContextMenuLabel(elements, appState))}
|
|
title={`${
|
|
isEmbeddableElement(elements[0])
|
|
? t("labels.link.labelEmbed")
|
|
: t("labels.link.label")
|
|
} - ${getShortcutKey("CtrlOrCmd+K")}`}
|
|
onClick={() => updateData(null)}
|
|
selected={selectedElements.length === 1 && !!selectedElements[0].link}
|
|
/>
|
|
);
|
|
},
|
|
});
|