mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-18 11:36:36 +00:00
feat(breadcrumb): support overflow menu
This commit is contained in:
parent
e26ff3bc8f
commit
079f758a3c
3 changed files with 39 additions and 1 deletions
|
@ -6,6 +6,8 @@ components: ["Breadcrumb", "BreadcrumbItem"]
|
||||||
import {
|
import {
|
||||||
Breadcrumb,
|
Breadcrumb,
|
||||||
BreadcrumbItem,
|
BreadcrumbItem,
|
||||||
|
OverflowMenu,
|
||||||
|
OverflowMenuItem
|
||||||
} from "carbon-components-svelte";
|
} from "carbon-components-svelte";
|
||||||
import Preview from "../../components/Preview.svelte";
|
import Preview from "../../components/Preview.svelte";
|
||||||
</script>
|
</script>
|
||||||
|
@ -27,6 +29,20 @@ See the [Breadcrumbs recipe](/recipes/Breadcrumbs) for a reusable breadcrumbs co
|
||||||
<BreadcrumbItem href="/profile" isCurrentPage>Profile</BreadcrumbItem>
|
<BreadcrumbItem href="/profile" isCurrentPage>Profile</BreadcrumbItem>
|
||||||
</Breadcrumb>
|
</Breadcrumb>
|
||||||
|
|
||||||
|
### Overflow menu
|
||||||
|
|
||||||
|
<Breadcrumb>
|
||||||
|
<BreadcrumbItem href="/">Home</BreadcrumbItem>
|
||||||
|
<BreadcrumbItem href="/api">API documentation</BreadcrumbItem>
|
||||||
|
<BreadcrumbItem>
|
||||||
|
<OverflowMenu>
|
||||||
|
<OverflowMenuItem href="/api/data" text="Data" />
|
||||||
|
<OverflowMenuItem href="/api/data/latest" text="Latest" />
|
||||||
|
</OverflowMenu>
|
||||||
|
</BreadcrumbItem>
|
||||||
|
<BreadcrumbItem href="/api/data/latest/usage" isCurrentPage>Usage</BreadcrumbItem>
|
||||||
|
</Breadcrumb>
|
||||||
|
|
||||||
### Skeleton
|
### Skeleton
|
||||||
|
|
||||||
<Breadcrumb noTrailingSlash skeleton count={3} />
|
<Breadcrumb noTrailingSlash skeleton count={3} />
|
|
@ -13,6 +13,10 @@
|
||||||
export let isCurrentPage = false;
|
export let isCurrentPage = false;
|
||||||
|
|
||||||
import Link from "../Link/Link.svelte";
|
import Link from "../Link/Link.svelte";
|
||||||
|
|
||||||
|
import { setContext } from "svelte";
|
||||||
|
|
||||||
|
setContext("BreadcrumbItem", {});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<li
|
<li
|
||||||
|
|
|
@ -54,11 +54,19 @@
|
||||||
/** Obtain a reference to the overflow menu element */
|
/** Obtain a reference to the overflow menu element */
|
||||||
export let menuRef = null;
|
export let menuRef = null;
|
||||||
|
|
||||||
import { createEventDispatcher, setContext, afterUpdate } from "svelte";
|
import {
|
||||||
|
createEventDispatcher,
|
||||||
|
getContext,
|
||||||
|
setContext,
|
||||||
|
afterUpdate,
|
||||||
|
} from "svelte";
|
||||||
import { writable } from "svelte/store";
|
import { writable } from "svelte/store";
|
||||||
import OverflowMenuVertical16 from "carbon-icons-svelte/lib/OverflowMenuVertical16/OverflowMenuVertical16.svelte";
|
import OverflowMenuVertical16 from "carbon-icons-svelte/lib/OverflowMenuVertical16/OverflowMenuVertical16.svelte";
|
||||||
|
import OverflowMenuHorizontal16 from "carbon-icons-svelte/lib/OverflowMenuHorizontal16/OverflowMenuHorizontal16.svelte";
|
||||||
|
|
||||||
import { formatStyle } from "./formatStyle";
|
import { formatStyle } from "./formatStyle";
|
||||||
|
|
||||||
|
const ctxBreadcrumbItem = getContext("BreadcrumbItem");
|
||||||
const dispatch = createEventDispatcher();
|
const dispatch = createEventDispatcher();
|
||||||
const items = writable([]);
|
const items = writable([]);
|
||||||
const currentId = writable(undefined);
|
const currentId = writable(undefined);
|
||||||
|
@ -68,6 +76,10 @@
|
||||||
let buttonWidth = undefined;
|
let buttonWidth = undefined;
|
||||||
let onMountAfterUpdate = true;
|
let onMountAfterUpdate = true;
|
||||||
|
|
||||||
|
$: if (ctxBreadcrumbItem) {
|
||||||
|
icon = OverflowMenuHorizontal16;
|
||||||
|
}
|
||||||
|
|
||||||
setContext("OverflowMenu", {
|
setContext("OverflowMenu", {
|
||||||
focusedId,
|
focusedId,
|
||||||
add: ({ id, text, primaryFocus }) => {
|
add: ({ id, text, primaryFocus }) => {
|
||||||
|
@ -123,6 +135,11 @@
|
||||||
} else if (direction === "bottom") {
|
} else if (direction === "bottom") {
|
||||||
menuRef.style.top = height + "px";
|
menuRef.style.top = height + "px";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (ctxBreadcrumbItem) {
|
||||||
|
menuRef.style.top = height + 10 + "px";
|
||||||
|
menuRef.style.left = -11 + "px";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!open) {
|
if (!open) {
|
||||||
|
@ -218,6 +235,7 @@
|
||||||
class:bx--overflow-menu-options--light="{light}"
|
class:bx--overflow-menu-options--light="{light}"
|
||||||
class:bx--overflow-menu-options--sm="{size === 'sm'}"
|
class:bx--overflow-menu-options--sm="{size === 'sm'}"
|
||||||
class:bx--overflow-menu-options--xl="{size === 'xl'}"
|
class:bx--overflow-menu-options--xl="{size === 'xl'}"
|
||||||
|
class:bx--breadcrumb-menu-options="{!!ctxBreadcrumbItem}"
|
||||||
class:menuOptionsClass
|
class:menuOptionsClass
|
||||||
>
|
>
|
||||||
<slot />
|
<slot />
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue