diff --git a/packages/excalidraw/components/App.tsx b/packages/excalidraw/components/App.tsx index 9d7067331a..97efe1e725 100644 --- a/packages/excalidraw/components/App.tsx +++ b/packages/excalidraw/components/App.tsx @@ -2355,6 +2355,8 @@ class App extends React.Component { "excalidraw--allow-browser-zoom": !this.isInteractionEnabled() && this.isBrowserZoomEnabled(), "excalidraw--ui-hidden": !this.isDefaultUIEnabled(), + "excalidraw--viewport-status-label": + !!this.props.viewportStatusFrame?.label, })} style={{ ["--ui-pointerEvents" as any]: shouldBlockPointerEvents diff --git a/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.scss b/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.scss index e18984c1d3..cf1c62984e 100644 --- a/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.scss +++ b/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.scss @@ -4,7 +4,7 @@ inset: 0; box-sizing: border-box; pointer-events: none; - border: 2px solid; + border: 4px solid; z-index: 9999; } @@ -18,20 +18,46 @@ background-color: var(--color-primary-hover); color: var(--color-primary-light); - padding: 0.25rem 0.5rem; border-radius: 0.5rem; font-size: 0.75rem; display: flex; - gap: 0.5rem; align-items: center; + overflow: hidden; + } + + .viewport-status-frame__badge--clickable { + cursor: pointer; + + &:active { + transform: translateX(-50%) scale(0.96); + } + } + + .viewport-status-frame__badge-action { + position: absolute; + inset: 0; + margin: 0; + border: 0; + padding: 0; + background: transparent; + cursor: inherit; + + &:focus-visible { + outline: 2px solid currentColor; + outline-offset: -2px; + border-radius: 0.5rem; + } } .viewport-status-frame__badge-label { + position: relative; display: flex; align-items: center; gap: 0.25rem; + padding: 0.25rem 0.5rem; white-space: pre-wrap; line-height: 1; + pointer-events: none; } .viewport-status-frame__badge-icon { @@ -48,6 +74,8 @@ all: unset; cursor: pointer; border-radius: 0.25rem; + margin-right: 0.5rem; + position: relative; &:hover { background-color: var(--color-primary-darker); diff --git a/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.tsx b/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.tsx index d54cb9794d..c8a95b6657 100644 --- a/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.tsx +++ b/packages/excalidraw/components/ViewportStatusFrame/ViewportStatusFrame.tsx @@ -1,3 +1,7 @@ +import { useId } from "react"; + +import clsx from "clsx"; + import { t } from "../../i18n"; import { CloseIcon } from "../icons"; @@ -11,6 +15,15 @@ interface ViewportStatusFrameProps { const ViewportStatusFrame = ({ status }: ViewportStatusFrameProps) => { const { border, label } = status; + const labelId = useId(); + const labelContent = label && ( + <> + {label.icon && ( + {label.icon} + )} + {label.label} + + ); return ( <> @@ -22,20 +35,28 @@ const ViewportStatusFrame = ({ status }: ViewportStatusFrameProps) => { )} {label && (
-
- {label.icon && ( - - {label.icon} - - )} - {label.label} + {label.onClick && ( +