Files
Stackq/node_modules/bits-ui/dist/bits/navigation-menu/components/navigation-menu-item.svelte
T
eewing cf73cd3b4c INIT
2026-02-17 14:10:16 -06:00

40 lines
917 B
Svelte

<script lang="ts">
import { boxWith, mergeProps } from "svelte-toolbelt";
import type { NavigationMenuItemProps } from "../types.js";
import { NavigationMenuItemState } from "../navigation-menu.svelte.js";
import { createId } from "../../../internal/create-id.js";
const uid = $props.id();
const defaultId = createId(uid);
let {
id = defaultId,
value = defaultId,
ref = $bindable(null),
child,
children,
openOnHover = true,
...restProps
}: NavigationMenuItemProps = $props();
const itemState = NavigationMenuItemState.create({
id: boxWith(() => id),
ref: boxWith(
() => ref,
(v) => (ref = v)
),
value: boxWith(() => value),
openOnHover: boxWith(() => openOnHover),
});
const mergedProps = $derived(mergeProps(restProps, itemState.props));
</script>
{#if child}
{@render child({ props: mergedProps })}
{:else}
<li {...mergedProps}>
{@render children?.()}
</li>
{/if}