b602294f1d
On mobile the side panel covers the page, but the page header stays mounted underneath. Its command menu button (`⌘K`, the `⋮` icon) sits at the same coordinates as the panel's own close button, so the two icons render on top of each other. Measured on a 390x844 viewport with the AI chat open: - `Command Menu` button at `x=346, y=8, 32x32` - `Close side panel` button at `x=358, y=14, 24x24` `SidePanelToggleButton` already hid itself for the command menu and search pages, but the AI chat pages (`AskAI`, `ViewPreviousAiChats`) are not in `COMMAND_MENU_SIDE_PANEL_PAGES`, so the button stayed and overlapped. ## Change Hide the button on mobile whenever the side panel is open, rather than enumerating pages — the header is not reachable behind a full-screen panel either way. Layout customization mode is the exception and keeps it: `alignWithSidePanelTopBar` deliberately repositions the button into the side panel top bar there, so that path is preserved. Desktop is unaffected. ## Testing Three cases added to `SidePanelToggleButton.test.tsx` (hidden on mobile with the panel open, kept on mobile in layout customization mode, kept on desktop with the AI chat open); the `useIsMobile` mock is now switchable per test. All 10 tests pass. Verified in the browser at 390x844: with the AI chat open only `Close side panel` remains in the top bar, and the button reappears once the panel is closed. --- _Generated by [Claude Code](https://claude.ai/code/session_018gcsCQbuTMsyFWv874p25Q)_ <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/23471?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
90 lines
2.7 KiB
HTML
90 lines
2.7 KiB
HTML
<!doctype html>
|
|
<html lang="en" translate="no" class="light">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
|
|
<link
|
|
rel="icon"
|
|
type="image/x-icon"
|
|
href="/images/icons/android/android-launchericon-48-48.png"
|
|
data-rh="true"
|
|
/>
|
|
<link rel="apple-touch-icon" href="/images/icons/ios/192.png" />
|
|
<link rel="manifest" href="/manifest.json" />
|
|
|
|
<meta name="theme-color" content="#000000" />
|
|
<meta name="description" content="A modern open-source CRM" />
|
|
<meta
|
|
property="og:image"
|
|
content="https://raw.githubusercontent.com/twentyhq/twenty/main/docs/static/img/social-card.png"
|
|
/>
|
|
<meta property="og:description" content="A modern open-source CRM" />
|
|
<meta property="og:title" content="Twenty" />
|
|
<meta name="twitter:card" content="summary_large_image" />
|
|
<meta
|
|
name="twitter:image"
|
|
content="https://raw.githubusercontent.com/twentyhq/twenty/main/docs/static/img/social-card.png"
|
|
/>
|
|
|
|
<meta name="twitter:description" content="A modern open-source CRM" />
|
|
<meta name="twitter:title" content="Twenty" />
|
|
<title>Twenty</title>
|
|
<!-- BEGIN: Twenty Config -->
|
|
<script id="twenty-env-config">
|
|
window._env_ = {
|
|
// This will be overwritten
|
|
};
|
|
</script>
|
|
<!-- END: Twenty Config -->
|
|
|
|
<meta
|
|
name="viewport"
|
|
content="width=device-width, initial-scale=1.0, interactive-widget=resizes-content"
|
|
/>
|
|
<script type="module">
|
|
const disableInputAutoZoom = () => {
|
|
const viewportMetadata = document.querySelector('meta[name=viewport]');
|
|
|
|
if (viewportMetadata !== null) {
|
|
viewportMetadata.setAttribute(
|
|
'content',
|
|
'width=device-width, initial-scale=1.0, maximum-scale=1.0, interactive-widget=resizes-content',
|
|
);
|
|
}
|
|
};
|
|
|
|
const isIOS = /iPad|iPhone/.test(navigator.userAgent);
|
|
if (isIOS) {
|
|
disableInputAutoZoom();
|
|
}
|
|
</script>
|
|
<style>
|
|
:root {
|
|
/* THEME_DARK.background.secondary */
|
|
--theme-dark-background-secondary: #1b1b1b;
|
|
/* THEME_LIGHT.background.secondary */
|
|
--theme-light-background-secondary: #fcfcfc;
|
|
}
|
|
|
|
@media (prefers-color-scheme: dark) {
|
|
html,
|
|
body {
|
|
background-color: var(--theme-dark-background-secondary);
|
|
}
|
|
}
|
|
|
|
@media (prefers-color-scheme: light) {
|
|
html,
|
|
body {
|
|
background-color: var(--theme-light-background-secondary);
|
|
}
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<noscript>You need to enable JavaScript to run this app.</noscript>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/index.tsx"></script>
|
|
</body>
|
|
</html>
|