Autocomplete
<gstock-autocomplete>
|
GstockAutocomplete
<gstock-autocomplete>
<gstock-option value="1">Option 1</gstock-option>
<gstock-option value="3">Option 2</gstock-option>
<gstock-option value="13">Option 3</gstock-option>
</gstock-autocomplete>
Tamaño
Utilice el atributo de size para cambiar el tamaño del componente.
<gstock-autocomplete size="small" placeholder="Small">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete size="medium" placeholder="Medium">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete size="large" placeholder="Large">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Marcador de posición
Utilice el atributo placeholder para agregar un marcador de posición.
<gstock-autocomplete placeholder="This is a placeholder...">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Deshabilitado
Utilice el atributo disabled para deshabilitar el componente.
<gstock-autocomplete placeholder="This autocomplete is disabled" disabled>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Solo lectura
Utilice el atributo readonly para permitir leer el valor y no
modificarlo.
<gstock-autocomplete readonly value="option-2">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Etiqueta y texto de ayuda
Utilice el atributo label y help-text para añadir una
etiqueta y texto de ayuda al componente y sea más accesible.
<gstock-autocomplete label="Label:" help-text="This is a test help-text.">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Para utilizar HTML personalizado en las etiquetas y textos de ayuda, utilice los
slots label y help-text.
<gstock-autocomplete>
<label slot="label" style="display: inline-flex; gap: 4px">
<gstock-icon name="edit" size="small"></gstock-icon> Custom label:
</label>
<span slot="help-text"> Custom help-text with a <a href="#label-and-help-text">link</a>. </span>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Clearable
Use the clearable attribute to add a clear button when the autocomplete
has content.
<gstock-autocomplete value="option-1" clearable>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Prefix and suffix
Use the prefix and suffix attributes to add icons.
<gstock-autocomplete placeholder="Small" size="small" prefix="search" suffix="star" style="margin-bottom: 1rem">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete placeholder="Medium" size="medium" prefix="search" suffix="star" style="margin-bottom: 1rem">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete placeholder="Large" size="large" prefix="search" suffix="star" style="margin-bottom: 1rem">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
For custom prefixes and suffixes with HTML, use the prefix and
suffix slots.
<gstock-autocomplete placeholder="Small" size="small" style="margin-bottom: 1rem">
<gstock-icon name="search" slot="prefix"></gstock-icon>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete placeholder="Medium" size="medium" style="margin-bottom: 1rem">
<gstock-icon name="search" slot="prefix"></gstock-icon>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<gstock-autocomplete placeholder="Large" size="large" style="margin-bottom: 1rem">
<gstock-icon name="search" slot="prefix"></gstock-icon>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Grouping
<gstock-autocomplete>
<gstock-group-label>Section 1</gstock-group-label>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
<gstock-divider></gstock-divider>
<gstock-group-label>Section 2</gstock-group-label>
<gstock-option value="option-4">Option 4</gstock-option>
<gstock-option value="option-5">Option 5</gstock-option>
<gstock-option value="option-6">Option 6</gstock-option>
</gstock-autocomplete>
Multiple
<gstock-autocomplete
label="Select multiple options:"
value="option-1 option-2"
multiple
clearable>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
<gstock-option value="option-4">Option 4</gstock-option>
<gstock-option value="option-5">Option 5</gstock-option>
<gstock-option value="option-6">Option 6</gstock-option>
<gstock-option value="option-7">Option 7</gstock-option>
</gstock-autocomplete>
<br />
<gstock-autocomplete
label="Disabled multiple options:"
value="option-1 option-2"
multiple
disabled>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
<gstock-option value="option-4">Option 4</gstock-option>
<gstock-option value="option-5">Option 5</gstock-option>
<gstock-option value="option-6">Option 6</gstock-option>
<gstock-option value="option-7">Option 7</gstock-option>
</gstock-autocomplete>
Placement
Use the placement attribute to placement of the autocomplete listbox.
Allow placements are top and bottom.
<gstock-autocomplete placement="top" placeholder="Top placement set in autocomplete listbox">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
Filterable
Use the filterable attribute to filter options.
<gstock-autocomplete clearable filterable label="Color" placeholder="Filter color...">
<gstock-option value="red">Red</gstock-option>
<gstock-option value="orange">Orange</gstock-option>
<gstock-option value="yellow">Yellow</gstock-option>
<gstock-option value="green">Green</gstock-option>
<gstock-option value="blue">Blue</gstock-option>
<gstock-option value="indigo">Indigo</gstock-option>
<gstock-option value="violet">Violet</gstock-option>
<gstock-option value="black">Black</gstock-option>
<gstock-option value="white">White</gstock-option>
<gstock-option value="gray">Gray</gstock-option>
<gstock-option value="magenta">Magenta</gstock-option>
<gstock-option value="cyan">Cyan</gstock-option>
<gstock-option value="magenta">Magenta</gstock-option>
<gstock-option value="lime">Lime</gstock-option>
<gstock-option value="teal">Teal</gstock-option>
<gstock-option value="purple">Purple</gstock-option>
<gstock-option value="maroon">Maroon</gstock-option>
<gstock-option value="navy">Navy</gstock-option>
<gstock-option value="olive">Olive</gstock-option>
<gstock-option value="silver">Silver</gstock-option>
<gstock-option value="gold">Gold</gstock-option>
<gstock-option value="brown">Brown</gstock-option>
</gstock-autocomplete>
Not found
By default, a message is showing when not found results.
<gstock-autocomplete clearable label="Color" placeholder="Select a color...">
</gstock-autocomplete>
<gstock-autocomplete clearable filterable label="Color" placeholder="Filter color...">
</gstock-autocomplete>
Use the not-found slot to custom the informative message when not found
results.
<gstock-autocomplete clearable filterable label="Color" placeholder="Filter color...">
<div class="not-found" slot="not-found">
<gstock-icon name="alert-triangle"></gstock-icon> Custom Not Found Results!
</div>
</gstock-autocomplete>
<style>
.not-found {
padding: var(--gstock-legacy-spacing-2) var(--gstock-legacy-spacing-3);
gap: var(--gstock-legacy-spacing-3);
display: inline-flex;
align-items: center;
}
</style>
Dynamic options
Use the gstock-input-event event to handle dynamically the options.
-
Value:
-
Display Label:
<gstock-autocomplete clearable label="Dog Breed" placeholder="Search dog breed...">
</gstock-autocomplete>
<ul class="output">
<li><span class="output__key">Value: </span><code class="output__value value"></code></li>
<li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>
<script type="module">
const autocomplete = document.querySelector('gstock-autocomplete');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
const search = (query) => {
while (autocomplete.firstChild) {
autocomplete.removeChild(autocomplete.firstChild);
}
if (!query || !query.length) {
return;
}
let url = "https://api.thedogapi.com/v1/breeds/search";
if (query) {
url += `?q=${query}`;
}
autocomplete.helpText = "";
fetch(url, { method: "GET" })
.then((response) => response.json())
.then((json) => {
json?.forEach(dog => {
const option = document.createElement("gstock-option");
option.value = dog.id;
option.innerText = `${dog.name} (#${dog.id})`;
autocomplete.appendChild(option);
});
})
.catch((error) => {
autocomplete.helpText = `Error: ${error.message}`;
});
}
await Promise.all([customElements.whenDefined('gstock-autocomplete')]).then(() => {
value.innerText = autocomplete.value;
displayLabel.innerText = autocomplete.displayInput.value;
search();
autocomplete.addEventListener('gstock-input-event', event => {
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayInput.value;
search(target.displayInput.value);
});
});
</script>
Events
Change
Use the gstock-change-event event to observe when the value was
changed. To emit this event autocomplete a option from the list.
-
Value:
-
Display Label:
<gstock-autocomplete label="Change Event">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<ul class="output">
<li><span class="output__key">Value: </span><code class="output__value value"></code></li>
<li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>
<script type="module">
const autocomplete = document.querySelector('gstock-autocomplete');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
await Promise.all([customElements.whenDefined('gstock-autocomplete')]).then(() => {
value.innerText = autocomplete.value;
displayLabel.innerText = autocomplete.displayInput.value;
autocomplete.addEventListener('gstock-change-event', event => {
console.info("Emitted event", event);
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayInput.value;
});
});
</script>
Clear
Use the gstock-clear-event event to observe when the value was cleared.
To emit this event enable the clearable attribute and press the clear
button when the value is not empty.
-
Value:
-
Display Label:
<gstock-autocomplete label="Clear Event" value="option-2" clearable>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<ul class="output">
<li><span class="output__key">Value: </span><code class="output__value value"></code></li>
<li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>
<script type="module">
const autocomplete = document.querySelector('gstock-autocomplete');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
await Promise.all([customElements.whenDefined('gstock-autocomplete')]).then(() => {
value.innerText = autocomplete.value;
displayLabel.innerText = autocomplete.displayInput.value;
autocomplete.addEventListener('gstock-clear-event', event => {
console.info("Emitted event", event);
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayInput.value;
});
autocomplete.addEventListener('gstock-change-event', event => {
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayInput.value;
});
});
</script>
Input
Use the gstock-input-event event to observe when the value was
filtered. To emit this event enable the filterable attribute and enter
some text, the event will be issued every time that text changes.
-
Value:
-
Display Label:
<gstock-autocomplete label="Filter Event" filterable>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<ul class="output">
<li><span class="output__key">Value: </span><code class="output__value value"></code></li>
<li><span class="output__key">Display Label: </span><code class="output__value display-label"></code></li>
</ul>
<script type="module">
const autocomplete = document.querySelector('gstock-autocomplete');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
await Promise.all([customElements.whenDefined('gstock-autocomplete')]).then(() => {
value.innerText = autocomplete.value;
displayLabel.innerText = autocomplete.displayInput.value;
autocomplete.addEventListener('gstock-input-event', event => {
console.info("Emitted event", event);
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayInput.value;
});
});
</script>
Control de formulario
Este componente funciona con elementos estándar <form>.
Consulta la sección sobre
controles de formulario para obtener más
información sobre el envío de formularios y la validación del lado del cliente.
Campo obligatorio
Utilice el atributo required para que el valor del componente sea
obligatorio.
<form>
<gstock-autocomplete
name="name"
label="Required field:"
required
help-text="The form will not be submitted if a required field is incomplete.">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<br />
<gstock-button size="small" type="submit">Submit</gstock-button>
<gstock-button size="small" variant="outlined" type="reset">Reset</gstock-button>
</form>
<script type="module">
const form = document.querySelector('form');
await Promise.all([
customElements.whenDefined('gstock-autocomplete'),
customElements.whenDefined('gstock-button'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
alert(`The field is valid!\n\n${formData}`);
});
});
</script>
Custom error messages
To create a custom validation error, pass a non-empty string to the
setCustomValidity() method.
This will override any existing validation constraints. To make the autocomplete
valid again, call setCustomValidity() again with an empty string.
<form>
<gstock-autocomplete
label="Select the `gstock` option to make the autocomplete valid:"
required
help-text="The form will not be submitted when a custom validity is set and the browser will show a
validation error when the containing form is submitted.">
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="gstock">gstock</gstock-option>
<gstock-option value="option-3">Option 2</gstock-option>
</gstock-autocomplete>
<br />
<gstock-button size="small" type="submit">Submit</gstock-button>
<gstock-button size="small" variant="outlined" type="reset">Reset</gstock-button>
</form>
<script type="module">
const form = document.querySelector('form');
const autocomplete = form.querySelector('gstock-autocomplete');
await Promise.all([
customElements.whenDefined('gstock-autocomplete'),
customElements.whenDefined('gstock-button'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
alert(`The field is valid!\n\n${formData}`);
});
autocomplete.addEventListener('gstock-input-event', () => {
if (autocomplete.value === 'gstock') {
autocomplete.setCustomValidity('');
} else {
autocomplete.setCustomValidity("You must autocomplete 'gstock' before sending!");
}
});
});
</script>
Styling validation
Use the validity-styles attribute to apply validation styles. These
styles are applied only after a user interaction, such as typing or submitting.
<form>
<gstock-autocomplete
name="name"
label="Name:"
help-text="This field is required."
required
validity-styles>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<br />
<gstock-button size="small" type="submit">Submit</gstock-button>
<gstock-button size="small" variant="outlined" type="reset">Reset</gstock-button>
</form>
<script type="module">
const form = document.querySelector('form');
await Promise.all([
customElements.whenDefined('gstock-autocomplete'),
customElements.whenDefined('gstock-button'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
alert(`The field is valid!\n\n${formData}`);
});
});
</script>
Inline validation
To disable the browsers error messages, you need to cancel the
gstock-invalid-event event. Then you can apply your own inline
validation errors.
<form class="inline-validation">
<gstock-autocomplete
name="name"
label="Name:"
help-text="This field is required."
required
validity-styles>
<gstock-option value="option-1">Option 1</gstock-option>
<gstock-option value="option-2">Option 2</gstock-option>
<gstock-option value="option-3">Option 3</gstock-option>
</gstock-autocomplete>
<br />
<div class="error" aria-live="polite" hidden></div>
<br />
<gstock-button size="small" type="submit">Submit</gstock-button>
<gstock-button size="small" variant="outlined" type="reset">Reset</gstock-button>
</form>
<script type="module">
const form = document.querySelector('form');
const nameError = form.querySelector('.error');
await Promise.all([
customElements.whenDefined('gstock-autocomplete'),
customElements.whenDefined('gstock-button'),
]).then(() => {
form.addEventListener(
'gstock-invalid-event',
event => {
event.preventDefault();
nameError.textContent = `Error: ${event.target.validationMessage}`;
nameError.hidden = false;
event.target.focus();
},
{ capture: true },
);
form.addEventListener('submit', event => {
event.preventDefault();
nameError.hidden = true;
nameError.textContent = '';
setTimeout(() => {
const formData = JSON.stringify(Object.fromEntries(new FormData(form)));
alert(`The field is valid!\n\n${formData}`);
}, 50);
});
form.addEventListener('reset', () => {
nameError.hidden = true;
nameError.textContent = '';
});
});
</script>