diff --git a/docs/src/pages/components/ComboBox.svx b/docs/src/pages/components/ComboBox.svx
index b63d1c67..204573bf 100644
--- a/docs/src/pages/components/ComboBox.svx
+++ b/docs/src/pages/components/ComboBox.svx
@@ -3,7 +3,7 @@
import { Button } from "carbon-components-svelte";
import Preview from "../../components/Preview.svelte";
let comboboxComponent
-
+ let selectedIndex = 1
### Default
@@ -25,7 +25,12 @@ items={[
{id: "2", text: "Fax"}
]} />
+### Reactive example
+
+
+
### Clear selection
+
+ import { ComboBox, Button } from "carbon-components-svelte";
+ let selectedIndex = 1;
+
+
+
+
+
+
diff --git a/src/ComboBox/ComboBox.svelte b/src/ComboBox/ComboBox.svelte
index 1227db29..1a02c276 100644
--- a/src/ComboBox/ComboBox.svelte
+++ b/src/ComboBox/ComboBox.svelte
@@ -110,7 +110,6 @@
let selectedId = undefined;
let selectedItem = undefined;
let inputValue = value;
- let prevInputValue = undefined;
let prevSelectedIndex = undefined;
let highlightedIndex = -1;
@@ -130,6 +129,7 @@
* @type {() => void}
*/
export function clear() {
+ prevSelectedIndex = undefined;
selectedIndex = -1;
highlightedIndex = -1;
highlightedId = undefined;
@@ -150,6 +150,10 @@
if (!selectedItem) {
selectedId = undefined;
selectedIndex = -1;
+ inputValue = "";
+ highlightedIndex = -1;
+ highlightedId = undefined;
+ prevSelectedIndex = undefined;
} else {
// programmatically set selectedIndex
inputValue = selectedItem.text;
@@ -157,18 +161,23 @@
}
});
- $: if (selectedIndex > -1 && prevSelectedIndex !== selectedIndex) {
- prevSelectedIndex = selectedIndex;
- if (filteredItems?.length === 1 && open) {
- selectedId = filteredItems[0].id;
- selectedItem = filteredItems[0];
- highlightedIndex = -1;
- highlightedId = undefined;
- } else {
- selectedId = items[selectedIndex].id;
- selectedItem = items[selectedIndex];
+ $: if (selectedIndex > -1) {
+ if (prevSelectedIndex !== selectedIndex) {
+ prevSelectedIndex = selectedIndex;
+ if (filteredItems?.length === 1 && open) {
+ selectedId = filteredItems[0].id;
+ selectedItem = filteredItems[0];
+ highlightedIndex = -1;
+ highlightedId = undefined;
+ } else {
+ selectedId = items[selectedIndex].id;
+ selectedItem = items[selectedIndex];
+ }
+ dispatch("select", { selectedId, selectedIndex, selectedItem });
}
- dispatch("select", { selectedId, selectedIndex, selectedItem });
+ } else {
+ prevSelectedIndex = selectedIndex;
+ selectedItem = undefined;
}
$: ariaLabel = $$props["aria-label"] || "Choose an item";