mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-18 19:46: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 */
|
/** Specify the id for the main element */
|
||||||
export let id = "main-content";
|
export let id = "main-content";
|
||||||
|
|
||||||
import { isSideNavCollapsed, isSideNavRail } from "./navStore";
|
import { Grid, Row, Column } from "../Grid";
|
||||||
|
import {
|
||||||
/**
|
shouldRenderHamburgerMenu,
|
||||||
* By default, the `SideNav` applies a left margin of `3rem` to `Content`
|
isPersistentHamburgerMenu,
|
||||||
* if it's a sibling component (e.g., .bx--side-nav ~ .bx--content).
|
} from "./navStore";
|
||||||
*
|
|
||||||
* We manually unset the left margin if the `SideNav`
|
|
||||||
* is collapsed and if it's not the `rail` variant.
|
|
||||||
*/
|
|
||||||
$: unsetLeftMargin = $isSideNavCollapsed && !$isSideNavRail;
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<div
|
||||||
|
style="padding: 3em; display: flex; flex-direction: column; align-items: center;"
|
||||||
|
>
|
||||||
|
<div style="position: relative; width: 100%; z-index: 0;">
|
||||||
<main
|
<main
|
||||||
id="{id}"
|
id="{id}"
|
||||||
class:bx--content="{true}"
|
class:bx--content="{true}"
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
style="{unsetLeftMargin ? 'margin-left: 0;' : ''} {$$restProps.style}"
|
style="{`height: 100%; margin: 0px; width: 100%; ${$$restProps.style}`}"
|
||||||
|
>
|
||||||
|
<Grid>
|
||||||
|
<Row>
|
||||||
|
<Column
|
||||||
|
lg="{$shouldRenderHamburgerMenu && !$isPersistentHamburgerMenu
|
||||||
|
? { span: 13, offset: 3 }
|
||||||
|
: {}}"
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
|
</Column>
|
||||||
|
</Row>
|
||||||
|
</Grid>
|
||||||
</main>
|
</main>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
|
@ -63,11 +63,15 @@
|
||||||
|
|
||||||
import Close from "../icons/Close.svelte";
|
import Close from "../icons/Close.svelte";
|
||||||
import Menu from "../icons/Menu.svelte";
|
import Menu from "../icons/Menu.svelte";
|
||||||
import { shouldRenderHamburgerMenu } from "./navStore";
|
import {
|
||||||
|
shouldRenderHamburgerMenu,
|
||||||
|
isPersistentHamburgerMenu,
|
||||||
|
} from "./navStore";
|
||||||
import HamburgerMenu from "./HamburgerMenu.svelte";
|
import HamburgerMenu from "./HamburgerMenu.svelte";
|
||||||
|
|
||||||
let winWidth = undefined;
|
let winWidth = undefined;
|
||||||
|
|
||||||
|
$: $isPersistentHamburgerMenu = persistentHamburgerMenu;
|
||||||
$: isSideNavOpen =
|
$: isSideNavOpen =
|
||||||
expandedByDefault &&
|
expandedByDefault &&
|
||||||
winWidth >= expansionBreakpoint &&
|
winWidth >= expansionBreakpoint &&
|
||||||
|
|
|
@ -20,31 +20,15 @@
|
||||||
/** Set to `true` to toggle the expanded state */
|
/** Set to `true` to toggle the expanded state */
|
||||||
export let isOpen = false;
|
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 { onMount, createEventDispatcher } from "svelte";
|
||||||
import {
|
import { shouldRenderHamburgerMenu } from "./navStore";
|
||||||
shouldRenderHamburgerMenu,
|
|
||||||
isSideNavCollapsed,
|
|
||||||
isSideNavRail,
|
|
||||||
} from "./navStore";
|
|
||||||
|
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
|
|
||||||
let winWidth = undefined;
|
let winWidth = undefined;
|
||||||
|
let railIsOpen = false;
|
||||||
|
|
||||||
$: dispatch(isOpen ? "open" : "close");
|
$: dispatch(isOpen ? "open" : "close");
|
||||||
$: $isSideNavCollapsed = !isOpen;
|
|
||||||
$: $isSideNavRail = rail;
|
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
shouldRenderHamburgerMenu.set(true);
|
shouldRenderHamburgerMenu.set(true);
|
||||||
|
@ -68,14 +52,18 @@
|
||||||
></div>
|
></div>
|
||||||
{/if}
|
{/if}
|
||||||
<nav
|
<nav
|
||||||
|
on:mouseenter="{() => {
|
||||||
|
if (rail) railIsOpen = true;
|
||||||
|
}}"
|
||||||
|
on:mouseleave="{() => {
|
||||||
|
if (railIsOpen) railIsOpen = false;
|
||||||
|
}}"
|
||||||
aria-hidden="{!isOpen}"
|
aria-hidden="{!isOpen}"
|
||||||
aria-label="{ariaLabel}"
|
aria-label="{ariaLabel}"
|
||||||
class:bx--side-nav__navigation="{true}"
|
class:bx--side-nav__navigation="{true}"
|
||||||
class:bx--side-nav="{true}"
|
class:bx--side-nav="{true}"
|
||||||
class:bx--side-nav--ux="{true}"
|
class:bx--side-nav--ux="{true}"
|
||||||
class:bx--side-nav--expanded="{rail && winWidth >= expansionBreakpoint
|
class:bx--side-nav--expanded="{isOpen || railIsOpen}"
|
||||||
? false
|
|
||||||
: isOpen}"
|
|
||||||
class:bx--side-nav--collapsed="{!isOpen && !rail}"
|
class:bx--side-nav--collapsed="{!isOpen && !rail}"
|
||||||
class:bx--side-nav--rail="{rail}"
|
class:bx--side-nav--rail="{rail}"
|
||||||
{...$$restProps}
|
{...$$restProps}
|
||||||
|
|
|
@ -2,6 +2,4 @@ import { writable } from "svelte/store";
|
||||||
|
|
||||||
export const shouldRenderHamburgerMenu = writable(false);
|
export const shouldRenderHamburgerMenu = writable(false);
|
||||||
|
|
||||||
export const isSideNavCollapsed = writable(false);
|
export const isPersistentHamburgerMenu = writable(false);
|
||||||
|
|
||||||
export const isSideNavRail = writable(false);
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue