From a548d13931d4c28960f9a9c9a99334af772fde05 Mon Sep 17 00:00:00 2001 From: Bram Kragten Date: Sat, 1 Apr 2023 18:46:52 +0200 Subject: [PATCH] Allow partial open of sidebar --- src/components/ha-drawer.ts | 3 +++ src/external_app/external_app_entrypoint.ts | 5 ++++- src/external_app/external_messaging.ts | 1 + src/layouts/home-assistant-main.ts | 8 +++++++- 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/components/ha-drawer.ts b/src/components/ha-drawer.ts index dd1a6d99be..3ab5e7f284 100644 --- a/src/components/ha-drawer.ts +++ b/src/components/ha-drawer.ts @@ -11,6 +11,9 @@ export class HaDrawer extends DrawerBase { .mdc-drawer { top: 0; } + .mdc-drawer--modal.mdc-drawer--open { + left: min(0px, var(--drawer-modal-left-offset)); + } `, ]; } diff --git a/src/external_app/external_app_entrypoint.ts b/src/external_app/external_app_entrypoint.ts index e39ca5b566..f993fe98ca 100644 --- a/src/external_app/external_app_entrypoint.ts +++ b/src/external_app/external_app_entrypoint.ts @@ -53,7 +53,10 @@ const handleExternalMessage = ( result: null, }); } else if (msg.command === "sidebar/show") { - fireEvent(hassMainEl, "hass-toggle-menu", { open: true }); + fireEvent(hassMainEl, "hass-toggle-menu", { + open: true, + screenPercentage: msg.data?.screenPercentage, + }); bus.fireMessage({ id: msg.id, type: "result", diff --git a/src/external_app/external_messaging.ts b/src/external_app/external_messaging.ts index 3cc58ffcee..ce893cef87 100644 --- a/src/external_app/external_messaging.ts +++ b/src/external_app/external_messaging.ts @@ -131,6 +131,7 @@ interface EMIncomingMessageShowSidebar { id: number; type: "command"; command: "sidebar/show"; + data?: { screenPercentage: number }; } export type EMIncomingMessageCommands = diff --git a/src/layouts/home-assistant-main.ts b/src/layouts/home-assistant-main.ts index c0a116163a..9edad200c8 100644 --- a/src/layouts/home-assistant-main.ts +++ b/src/layouts/home-assistant-main.ts @@ -19,7 +19,9 @@ import "./partial-panel-resolver"; declare global { // for fire event interface HASSDomEvents { - "hass-toggle-menu": undefined | { open?: boolean }; + "hass-toggle-menu": + | undefined + | { open?: boolean; screenPercentage?: number }; "hass-edit-sidebar": EditSideBarEvent; "hass-show-notifications": undefined; } @@ -120,6 +122,10 @@ export class HomeAssistantMain extends LitElement { } if (this._sidebarNarrow) { this._drawerOpen = ev.detail?.open ?? !this._drawerOpen; + const offset = ev.detail?.screenPercentage + ? -256 + screen.width * (ev.detail.screenPercentage / 100) + : 0; + this.style.setProperty("--drawer-modal-left-offset", `${offset}px`); } else { fireEvent(this, "hass-dock-sidebar", { dock: ev.detail?.open