mirror of
https://github.com/carbon-design-system/carbon-components-svelte.git
synced 2025-09-16 02:41:05 +00:00
Fixes https://github.com/carbon-design-system/carbon-icons-svelte/issues/207 `carbon-icons-svelte@13` and `carbon-pictograms-svelte@13` now only support TypeScript for Svelte 4/5. The new `Component` type is incompatible with the `icon` prop in `carbon-components-svelte`, causing a type error with Svelte 5, as `typeof SvelteComponent` doesn't match the new `Component` type. Since `Component` isn't available in Svelte 3/4, this PR changes the `icon` prop type to `any` for compatibility across Svelte 3, 4, and 5.
59 lines
1.3 KiB
Svelte
59 lines
1.3 KiB
Svelte
<script>
|
|
/** Set to `true` to toggle the expanded state */
|
|
export let expanded = false;
|
|
|
|
/**
|
|
* Specify the text
|
|
* @type {string}
|
|
*/
|
|
export let text = undefined;
|
|
|
|
/**
|
|
* Specify the icon to render
|
|
* @type {any}
|
|
*/
|
|
export let icon = undefined;
|
|
|
|
/** Obtain a reference to the HTML button element */
|
|
export let ref = null;
|
|
|
|
import ChevronDown from "../icons/ChevronDown.svelte";
|
|
</script>
|
|
|
|
<li class:bx--side-nav__item={true} class:bx--side-nav__item--icon={icon}>
|
|
<button
|
|
type="button"
|
|
bind:this={ref}
|
|
aria-expanded={expanded}
|
|
class:bx--side-nav__submenu={true}
|
|
{...$$restProps}
|
|
on:click
|
|
on:click={() => {
|
|
expanded = !expanded;
|
|
}}
|
|
>
|
|
{#if $$slots.icon || icon}
|
|
<div class:bx--side-nav__icon={true}>
|
|
<slot name="icon">
|
|
<svelte:component this={icon} />
|
|
</slot>
|
|
</div>
|
|
{/if}
|
|
<span class:bx--side-nav__submenu-title={true}>{text}</span>
|
|
<div
|
|
class:bx--side-nav__icon={true}
|
|
class:bx--side-nav__icon--small={true}
|
|
class:bx--side-nav__submenu-chevron={true}
|
|
>
|
|
<ChevronDown />
|
|
</div>
|
|
</button>
|
|
<!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->
|
|
<ul
|
|
role="menu"
|
|
class:bx--side-nav__menu={true}
|
|
style:max-height={expanded ? "none" : undefined}
|
|
>
|
|
<slot />
|
|
</ul>
|
|
</li>
|