component Collapse { outputs { toggle(payload: { index: number; item: string | number | boolean | null | object; open: boolean; openIndexes: number[] }) open(payload: { index: number; item: string | number | boolean | null | object }) close(payload: { index: number; item: string | number | boolean | null | object }) } props { size: string = "default" color: string = "primary" items: unknown[] = [] multiple: boolean = false mode: string = "panel" initialOpenIndexes: unknown[] = [] ariaLabel: string = "Collapsible content" class: string = "" } state openIndexes = initialOpenIndexes functions { shared function isOpen(index) { return openIndexes.includes(index) } client function toggleItem(index, item, opening) { if (item.disabled) { return } opening = !isOpen(index) if (opening) { if (multiple) { openIndexes = openIndexes.concat(index) } else { openIndexes = [index] } output.open({ index: index, item: item }) } else { openIndexes = openIndexes.filter((openIndex) => openIndex !== index) output.close({ index: index, item: item }) } output.toggle({ index: index, item: item, open: opening, openIndexes: openIndexes }) } } view {
{#each items as item, index}
{#if mode === "inline" && item.preview}

{item.preview}

{/if}
{#if item.title}

{item.title}

{/if} {#if item.content}

{item.content}

{/if} {#if item.links && item.links.length} {/if}
{/each}
} }