diff --git a/packages/select-rich/src/LionSelectInvoker.js b/packages/select-rich/src/LionSelectInvoker.js
index 190ed14be..46fa71b4b 100644
--- a/packages/select-rich/src/LionSelectInvoker.js
+++ b/packages/select-rich/src/LionSelectInvoker.js
@@ -68,7 +68,15 @@ export class LionSelectInvoker extends LionButton {
}
return this.selectedElement.textContent;
}
- return ``;
+ return this._noSelectionTemplate();
+ }
+
+ /**
+ * To be overriden for a placeholder, used when `hasNoDefaultSelected` is true on the select rich
+ */
+ // eslint-disable-next-line class-methods-use-this
+ _noSelectionTemplate() {
+ return html``;
}
_beforeTemplate() {
diff --git a/packages/select-rich/src/LionSelectRich.js b/packages/select-rich/src/LionSelectRich.js
index 02c2bfc96..1ec984d95 100644
--- a/packages/select-rich/src/LionSelectRich.js
+++ b/packages/select-rich/src/LionSelectRich.js
@@ -79,6 +79,17 @@ export class LionSelectRich extends ScopedElementsMixin(
type: String,
attribute: 'interaction-mode',
},
+
+ /**
+ * When setting this to true, on initial render, no option will be selected.
+ * It it advisable to override `_noSelectionTemplate` method in the select-invoker
+ * to render some kind of placeholder initially
+ */
+ hasNoDefaultSelected: {
+ type: Boolean,
+ reflect: true,
+ attribute: 'has-no-default-selected',
+ },
};
}
@@ -184,6 +195,7 @@ export class LionSelectRich extends ScopedElementsMixin(
// for interaction states
this._listboxActiveDescendant = null;
this.__hasInitialSelectedFormElement = false;
+ this.hasNoDefaultSelected = false;
this._repropagationRole = 'choice-group'; // configures FormControlMixin
this.__setupEventListeners();
this.__initInteractionStates();
@@ -335,7 +347,11 @@ export class LionSelectRich extends ScopedElementsMixin(
}
// the first elements checked by default
- if (!this.__hasInitialSelectedFormElement && (!child.disabled || this.disabled)) {
+ if (
+ !this.hasNoDefaultSelected &&
+ !this.__hasInitialSelectedFormElement &&
+ (!child.disabled || this.disabled)
+ ) {
child.active = true;
child.checked = true;
this.__hasInitialSelectedFormElement = true;
diff --git a/packages/select-rich/stories/index.stories.mdx b/packages/select-rich/stories/index.stories.mdx
index 9b0d8c7bc..46b94bc4b 100644
--- a/packages/select-rich/stories/index.stories.mdx
+++ b/packages/select-rich/stories/index.stories.mdx
@@ -462,6 +462,51 @@ console.log(`checkedIndex: ${selectEl.checkedIndex}`); // 0
console.log(`checkedValue: ${selectEl.checkedValue}`); // 'red'
```
+### No default selection
+
+If you want to set a placeholder option with something like 'Please select', you can of course do this, the same way you would do it in a native select.
+
+Simply put an option with a modelValue that is `null`.
+
+```html
+