Quantity Input
<gstock-quantity-input>
|
GstockQuantityInput
Tamaño
Utilice el atributo de size para cambiar el tamaño del componente.
<gstock-quantity-input size="small"></gstock-quantity-input>
<gstock-quantity-input size="medium"></gstock-quantity-input>
<gstock-quantity-input size="large"></gstock-quantity-input>
Marcador de posición
Utilice el atributo placeholder para agregar un marcador de posición.
<gstock-quantity-input placeholder="Enter value..."></gstock-quantity-input>
Deshabilitado
Utilice el atributo disabled para deshabilitar el componente.
<gstock-quantity-input disabled="disabled" value="10"></gstock-quantity-input>
Solo lectura
Utilice el atributo readonly para permitir leer el valor y no
modificarlo.
<gstock-quantity-input readonly="readonly" value="10"></gstock-quantity-input>
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-quantity-input label="Label:" help-text="This is a test help-text."></gstock-quantity-input>
Para utilizar HTML personalizado en las etiquetas y textos de ayuda, utilice los
slots label y help-text.
<gstock-quantity-input>
<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-quantity-input>
Formato numérico
Utilice el atributo number-format para cambiar el formato del número.
De forma predeterminada, el formato del número es #,###.## y este
atributo acepta los siguientes formatos:
<gstock-quantity-input number-format="#.###,##" value="1234.56"></gstock-quantity-input>
<gstock-quantity-input number-format="#,###.##" value="1234.56"></gstock-quantity-input>
<gstock-quantity-input number-format="# ###.##" value="1234.56"></gstock-quantity-input>
<gstock-quantity-input number-format="# ###,##" value="1234.56"></gstock-quantity-input>
Mínimo / Máximo
Utilice los atributos min y max para definir el valor
mínimo y máximo.
<gstock-quantity-input placeholder="Min 5 / Max 10" min="5" max="10"></gstock-quantity-input>
Valores negativos
Utilice el atributo allow-negative para permitir valores negativos. Por
defecto, el componente acepta solo valores positivos.
<gstock-quantity-input allow-negative="allow-negative"></gstock-quantity-input>
Decimales
Utilice el atributo decimals para definir el número de decimales.
<gstock-quantity-input value="1.23456789" decimals="5"></gstock-quantity-input>
Incrementar / Decrementar
Utiliza el atributo step para definir el valor que se incrementa o
decrementa cuando se presiona el botón correspondiente.
<gstock-quantity-input step="10"></gstock-quantity-input>
Eventos
Evento Change
Utilice el evento gstock-change-event para observar cuándo se modificó
el valor. Para emitir este evento, cambie un valor en el componente.
-
Value:
-
Display Label:
-
Emitted Events:
-
Validity:
- Validation Message:
-
Check Validity:
-
Report Validity:
<gstock-quantity-input label="Change Event"></gstock-quantity-input>
<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>
<li>
<span class="output__key">Emitted Events: </span>
<code class="output__value emitted-events"></code>
</li>
<li>
<span class="output__key">Validity: </span>
<code class="output__value validity"></code>
</li>
<li>
<span class="output__key">Validation Message: </span>
<code class="output__value validation-message"></code>
</li>
<li>
<span class="output__key">Check Validity: </span>
<code class="output__value check-validity"></code>
</li>
<li>
<span class="output__key">Report Validity: </span>
<code class="output__value report-validity"></code>
</li>
</ul>
<script type="module">
const quantityInput = document.querySelector('gstock-quantity-input');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
const emittedEvents = document.querySelector('.output__value.emitted-events');
const validity = document.querySelector('.output__value.validity');
const validationMessage = document.querySelector('.output__value.validation-message');
const checkValidity = document.querySelector('.output__value.check-validity');
const reportValidity = document.querySelector('.output__value.report-validity');
await Promise.all([
customElements.whenDefined('gstock-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
const emittedEventsList = [];
value.innerText = quantityInput.value;
displayLabel.innerText = quantityInput.displayLabel;
validity.innerText = JSON.stringify(quantityInput.validity, undefined, 2);
validationMessage.innerText = quantityInput.validationMessage;
checkValidity.innerText = quantityInput.checkValidity();
reportValidity.innerText = quantityInput.reportValidity();
quantityInput.addEventListener('gstock-change-event', event => {
console.info('Emitted event', event);
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayLabel;
emittedEvents.innerText = emittedEventsList.length;
validity.innerText = JSON.stringify(target.validity, undefined, 2);
validationMessage.innerText = target.validationMessage;
checkValidity.innerText = target.checkValidity();
reportValidity.innerText = target.reportValidity();
});
});
</script>
Evento Input
Utilice el evento gstock-input-event para observar cuándo se ingresó el
valor. Para emitir este evento, introduce un valor en el componente.
-
Value:
-
Display Label:
-
Emitted Events:
-
Validity:
- Validation Message:
-
Check Validity:
-
Report Validity:
<gstock-quantity-input label="Input Event" number-format="#.###,##"></gstock-quantity-input>
<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>
<li>
<span class="output__key">Emitted Events: </span>
<code class="output__value emitted-events"></code>
</li>
<li>
<span class="output__key">Validity: </span>
<code class="output__value validity"></code>
</li>
<li>
<span class="output__key">Validation Message: </span>
<code class="output__value validation-message"></code>
</li>
<li>
<span class="output__key">Check Validity: </span>
<code class="output__value check-validity"></code>
</li>
<li>
<span class="output__key">Report Validity: </span>
<code class="output__value report-validity"></code>
</li>
</ul>
<script type="module">
const quantityInput = document.querySelector('gstock-quantity-input');
const value = document.querySelector('.output__value.value');
const displayLabel = document.querySelector('.output__value.display-label');
const emittedEvents = document.querySelector('.output__value.emitted-events');
const validity = document.querySelector('.output__value.validity');
const validationMessage = document.querySelector('.output__value.validation-message');
const checkValidity = document.querySelector('.output__value.check-validity');
const reportValidity = document.querySelector('.output__value.report-validity');
await Promise.all([
customElements.whenDefined('gstock-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
const emittedEventsList = [];
value.innerText = quantityInput.value;
displayLabel.innerText = quantityInput.displayLabel;
validity.innerText = JSON.stringify(quantityInput.validity, undefined, 2);
validationMessage.innerText = quantityInput.validationMessage;
checkValidity.innerText = quantityInput.checkValidity();
reportValidity.innerText = quantityInput.reportValidity();
quantityInput.addEventListener('gstock-input-event', async event => {
console.info('Emitted event', event);
emittedEventsList.push({
...event,
});
const target = event.target;
value.innerText = target.value;
displayLabel.innerText = target.displayLabel;
emittedEvents.innerText = emittedEventsList.length;
validity.innerText = JSON.stringify(target.validity, undefined, 2);
validationMessage.innerText = target.validationMessage;
checkValidity.innerText = target.checkValidity();
reportValidity.innerText = target.reportValidity();
});
});
</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-quantity-input
number-format="#.###,##"
name="test"
label="Required field:"
required="required"
help-text="The form will not be submitted if a required field is incomplete."></gstock-quantity-input>
<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-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const data = Object.fromEntries(new FormData(event.target));
alert(`The field are valid!\n\n${JSON.stringify(data, undefined, 2)}`);
});
});
</script>
<style>
gstock-button {
margin-top: var(--gstock-legacy-spacing-8);
}
</style>
Errores de validación personalizados
Para crear un error de validación personalizado, pase un string que no esté vacío al
método setCustomValidity().
Esto anulará cualquier restricción de validación existente. Para que el componente
vuelva a ser válido, vuelva a llamar a setCustomValidity() con un
string vacío.
<form>
<gstock-quantity-input
name="test"
label="Value:"
required="required"
help-text="Type the number '123' to make the component valid"></gstock-quantity-input>
<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 quantityInput = form.querySelector('gstock-quantity-input');
await Promise.all([
customElements.whenDefined('gstock-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const data = Object.fromEntries(new FormData(event.target));
alert(`The field are valid!\n\n${JSON.stringify(data, undefined, 2)}`);
});
quantityInput.addEventListener('gstock-input-event', event => {
const target = event.target;
if (target.value === '123') {
target.setCustomValidity('');
} else {
target.setCustomValidity("You must type '123' before sending!");
}
});
});
</script>
<style>
gstock-button {
margin-top: var(--gstock-legacy-spacing-8);
}
</style>
Estilos de validación
Utilice el atributo validity-styles para aplicar estilos de validación.
Estos estilos se aplican únicamente después de una interacción del usuario.
<form>
<gstock-quantity-input
name="test"
label="Value:"
help-text="This field is required."
autocomplete="off"
thousandsseparator=","
decimalseparator="."
required="required"
validity-styles="validity-styles"></gstock-quantity-input>
<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-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
form.addEventListener('submit', event => {
event.preventDefault();
const data = Object.fromEntries(new FormData(event.target));
alert(`The field are valid!\n\n${JSON.stringify(data, undefined, 2)}`);
});
});
</script>
<style>
gstock-button {
margin-top: var(--gstock-legacy-spacing-8);
}
</style>
Validación en línea
Para desactivar los mensajes de error de los navegadores, debe cancelar el evento
gstock-invalid-event. Luego, puede aplicar sus propios errores de
validación en línea.
<form>
<gstock-quantity-input
name="test"
label="Value:"
help-text="This field is required."
autocomplete="off"
required="required"
validity-styles="validity-styles"></gstock-quantity-input>
<div id="error-message" aria-live="polite" hidden="hidden"></div>
<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 errorMessage = document.querySelector('#error-message');
await Promise.all([
customElements.whenDefined('gstock-button'),
customElements.whenDefined('gstock-quantity-input'),
]).then(() => {
form.addEventListener(
'gstock-invalid-event',
event => {
event.preventDefault();
errorMessage.textContent = `Error: ${event.target.validationMessage}`;
errorMessage.hidden = false;
event.target.focus();
},
{
capture: true,
},
);
form.addEventListener('submit', event => {
event.preventDefault();
errorMessage.hidden = true;
errorMessage.textContent = '';
setTimeout(() => {
const data = Object.fromEntries(new FormData(event.target));
alert(`The field are valid!\n\n${JSON.stringify(data, undefined, 2)}`);
}, 50);
});
form.addEventListener('reset', () => {
errorMessage.hidden = true;
errorMessage.textContent = '';
});
});
</script>
<style>
#error-message {
margin-block: var(--gstock-legacy-spacing-4);
}
gstock-button {
margin-top: var(--gstock-legacy-spacing-8);
}
</style>