mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-18 11:36:36 +00:00
Merge bd570780db
into 174ed3af10
This commit is contained in:
commit
9000dde59e
4 changed files with 43 additions and 42 deletions
|
@ -2,23 +2,34 @@
|
|||
/** Specify the id for the main element */
|
||||
export let id = "main-content";
|
||||
|
||||
import { isSideNavCollapsed, isSideNavRail } from "./navStore";
|
||||
|
||||
/**
|
||||
* By default, the `SideNav` applies a left margin of `3rem` to `Content`
|
||||
* if it's a sibling component (e.g., .bx--side-nav ~ .bx--content).
|
||||
*
|
||||
* We manually unset the left margin if the `SideNav`
|
||||
* is collapsed and if it's not the `rail` variant.
|
||||
*/
|
||||
$: unsetLeftMargin = $isSideNavCollapsed && !$isSideNavRail;
|
||||
import { Grid, Row, Column } from "../Grid";
|
||||
import {
|
||||
shouldRenderHamburgerMenu,
|
||||
isPersistentHamburgerMenu,
|
||||
} from "./navStore";
|
||||
</script>
|
||||
|
||||
<main
|
||||
id="{id}"
|
||||
class:bx--content="{true}"
|
||||
{...$$restProps}
|
||||
style="{unsetLeftMargin ? 'margin-left: 0;' : ''} {$$restProps.style}"
|
||||
<div
|
||||
style="padding: 3em; display: flex; flex-direction: column; align-items: center;"
|
||||
>
|
||||
<slot />
|
||||
</main>
|
||||
<div style="position: relative; width: 100%; z-index: 0;">
|
||||
<main
|
||||
id="{id}"
|
||||
class:bx--content="{true}"
|
||||
{...$$restProps}
|
||||
style="{`height: 100%; margin: 0px; width: 100%; ${$$restProps.style}`}"
|
||||
>
|
||||
<Grid>
|
||||
<Row>
|
||||
<Column
|
||||
lg="{$shouldRenderHamburgerMenu && !$isPersistentHamburgerMenu
|
||||
? { span: 13, offset: 3 }
|
||||
: {}}"
|
||||
>
|
||||
<slot />
|
||||
</Column>
|
||||
</Row>
|
||||
</Grid>
|
||||
</main>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -63,11 +63,15 @@
|
|||
|
||||
import Close from "../icons/Close.svelte";
|
||||
import Menu from "../icons/Menu.svelte";
|
||||
import { shouldRenderHamburgerMenu } from "./navStore";
|
||||
import {
|
||||
shouldRenderHamburgerMenu,
|
||||
isPersistentHamburgerMenu,
|
||||
} from "./navStore";
|
||||
import HamburgerMenu from "./HamburgerMenu.svelte";
|
||||
|
||||
let winWidth = undefined;
|
||||
|
||||
$: $isPersistentHamburgerMenu = persistentHamburgerMenu;
|
||||
$: isSideNavOpen =
|
||||
expandedByDefault &&
|
||||
winWidth >= expansionBreakpoint &&
|
||||
|
|
|
@ -20,31 +20,15 @@
|
|||
/** Set to `true` to toggle the expanded state */
|
||||
export let isOpen = false;
|
||||
|
||||
/**
|
||||
* The window width (px) at which the SideNav is expanded and the hamburger menu is hidden
|
||||
* 1056 represents the "large" breakpoint in pixels from the Carbon Design System:
|
||||
* small: 320
|
||||
* medium: 672
|
||||
* large: 1056
|
||||
* x-large: 1312
|
||||
* max: 1584
|
||||
*/
|
||||
export let expansionBreakpoint = 1056;
|
||||
|
||||
import { onMount, createEventDispatcher } from "svelte";
|
||||
import {
|
||||
shouldRenderHamburgerMenu,
|
||||
isSideNavCollapsed,
|
||||
isSideNavRail,
|
||||
} from "./navStore";
|
||||
import { shouldRenderHamburgerMenu } from "./navStore";
|
||||
|
||||
const dispatch = createEventDispatcher();
|
||||
|
||||
let winWidth = undefined;
|
||||
let railIsOpen = false;
|
||||
|
||||
$: dispatch(isOpen ? "open" : "close");
|
||||
$: $isSideNavCollapsed = !isOpen;
|
||||
$: $isSideNavRail = rail;
|
||||
|
||||
onMount(() => {
|
||||
shouldRenderHamburgerMenu.set(true);
|
||||
|
@ -68,14 +52,18 @@
|
|||
></div>
|
||||
{/if}
|
||||
<nav
|
||||
on:mouseenter="{() => {
|
||||
if (rail) railIsOpen = true;
|
||||
}}"
|
||||
on:mouseleave="{() => {
|
||||
if (railIsOpen) railIsOpen = false;
|
||||
}}"
|
||||
aria-hidden="{!isOpen}"
|
||||
aria-label="{ariaLabel}"
|
||||
class:bx--side-nav__navigation="{true}"
|
||||
class:bx--side-nav="{true}"
|
||||
class:bx--side-nav--ux="{true}"
|
||||
class:bx--side-nav--expanded="{rail && winWidth >= expansionBreakpoint
|
||||
? false
|
||||
: isOpen}"
|
||||
class:bx--side-nav--expanded="{isOpen || railIsOpen}"
|
||||
class:bx--side-nav--collapsed="{!isOpen && !rail}"
|
||||
class:bx--side-nav--rail="{rail}"
|
||||
{...$$restProps}
|
||||
|
|
|
@ -2,6 +2,4 @@ import { writable } from "svelte/store";
|
|||
|
||||
export const shouldRenderHamburgerMenu = writable(false);
|
||||
|
||||
export const isSideNavCollapsed = writable(false);
|
||||
|
||||
export const isSideNavRail = writable(false);
|
||||
export const isPersistentHamburgerMenu = writable(false);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue