diff --git a/COMPONENT_INDEX.md b/COMPONENT_INDEX.md index 53cd8425..6c36a84d 100644 --- a/COMPONENT_INDEX.md +++ b/COMPONENT_INDEX.md @@ -1197,7 +1197,9 @@ export interface DropdownItem { ### Slots -None. +| Slot name | Default | Props | Fallback | +| :-------- | :------ | :--------------------------------------------------- | :-------------------------------- | +| -- | Yes | { item: DropdownItem; index: number; } | {itemToString(item)} | ### Events diff --git a/docs/src/COMPONENT_API.json b/docs/src/COMPONENT_API.json index 33067a10..c54d901a 100644 --- a/docs/src/COMPONENT_API.json +++ b/docs/src/COMPONENT_API.json @@ -3318,7 +3318,14 @@ } ], "moduleExports": [], - "slots": [], + "slots": [ + { + "name": "__default__", + "default": true, + "fallback": "{itemToString(item)}", + "slot_props": "{ item: DropdownItem; index: number; }" + } + ], "events": [ { "type": "dispatched", diff --git a/docs/src/pages/components/Dropdown.svx b/docs/src/pages/components/Dropdown.svx index d93ce89b..095002bb 100644 --- a/docs/src/pages/components/Dropdown.svx +++ b/docs/src/pages/components/Dropdown.svx @@ -19,6 +19,12 @@ components: ["Dropdown", "DropdownSkeleton"] {id: "1", text: "Email"}, {id: "2", text: "Fax"}]}" /> +### Custom slot + +Override the default slot to customize the display of each item. Access the item and index through the `let:` directive. + + + ### Hidden label + import { Dropdown } from "carbon-components-svelte"; + + + +
+ {item.text} +
+
+ id: {item.id} - index: + {index} +
+
+ + diff --git a/src/Dropdown/Dropdown.svelte b/src/Dropdown/Dropdown.svelte index 3d31b85d..113806b7 100644 --- a/src/Dropdown/Dropdown.svelte +++ b/src/Dropdown/Dropdown.svelte @@ -4,6 +4,7 @@ * @typedef {string} DropdownItemText * @typedef {{ id: DropdownItemId; text: DropdownItemText; }} DropdownItem * @event {{ selectedId: DropdownItemId, selectedItem: DropdownItem }} select + * @slot {{ item: DropdownItem; index: number; }} */ /** @@ -256,7 +257,9 @@ highlightedIndex = i; }}" > - {itemToString(item)} + + {itemToString(item)} + {/each} diff --git a/tests/Dropdown.test.svelte b/tests/Dropdown.test.svelte index 0908838d..fea2ee86 100644 --- a/tests/Dropdown.test.svelte +++ b/tests/Dropdown.test.svelte @@ -14,7 +14,12 @@ on:select="{(e) => { console.log(e.detail.selectedId); }}" -/> + let:item + let:index +> + {item.id} + {index} +