import type { CSSResultGroup, PropertyValues } from 'lit'; import SynergyElement from '../../internal/synergy-element.js'; import type SynInput from '../input/input.component.js'; import SynAlert from '../alert/alert.component.js'; import SynTooltip from '../tooltip/tooltip.component.js'; /** * @summary Validate provides form field validation messages in a unified way. * It does this by using [the native browser validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation) * and showing the validation message in a consistent, user defined way. * @documentation https://synergy-design-system.github.io/?path=/docs/components-syn-validate--docs * @dependency syn-alert * @dependency syn-tooltip * * @slot - The form field that should be validated. * Avoid slotting in more than one element, as subsequent ones will be ignored. * * @csspart base - The component's base wrapper. * @csspart input-wrapper - The container that wraps the form field. * * @csspart alert - The syn-alert that is shown when the variant is set to "inline". * @csspart alert__base - The container that wraps the alert. * @csspart alert__message - The container that wraps the alert message. * @csspart alert__icon - The container that wraps the alert icon. * * @csspart tooltip - The syn-tooltip that is shown when the variant is set to "tooltip". * @csspart tooltip__base - The container that wraps the tooltip. * @csspart tooltip__popup - The container that wraps the tooltip popup. * @csspart tooltip__arrow - The container that wraps the tooltip arrow. * @csspart tooltip__body - The container that wraps the tooltip body. */ export default class SynValidate extends SynergyElement { static styles: CSSResultGroup; static dependencies: { 'syn-alert': typeof SynAlert; 'syn-tooltip': typeof SynTooltip; }; controller: AbortController; observer: MutationObserver; sizeObserver: MutationObserver; private slottedChildren; private tooltipElement?; validationMessage: string; eagerFirstMount: boolean; isInternalTriggeredInvalid: boolean; isValid: boolean; alertSize?: SynInput['size']; hasFocus: boolean; /** * The variant that should be used to show validation alerts. * * The following variants are supported: * - **native** (default): Uses the native browser validation, usually a browser tooltip. * - **tooltip**: Show the validation message as a tooltip using a ``. * - **inline**: Show the validation message underneath the element, using a `` */ variant: 'native' | 'tooltip' | 'inline'; /** Do not show the error icon when using the inline variant validation */ hideIcon: boolean; /** * Defines the events that trigger the validation. * `invalid` will always automatically be included. * You may also use the `live` keyword to validate on every input change. * `live` will make sure to listen to the `invalid`, `input` and `blur` events. * * Please have a look at the [documentation for native form validation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation) * and [the use of form invalid events](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement/invalid_event) for further information. * * @example ```html * * * * * * * * * ``` */ on: string; /** * Custom validation message to be displayed when the input is invalid. * Will override the default browser validation message. * Set to an empty string to reset the validation message. */ customValidationMessage: string; /** * Set this to true to validate the input immediately when it is rendered. * Best used with a `variant` of `inline`. * When setting eager, the input will not be focused automatically. * * When using a `variant` of `native` the browser will focus * the last eager field as it is using a tooltip. * In this case it is better to just provide one eager field. */ eager: boolean; handleListenerChange(): void; handleEagerChange(): Promise; handleCustomValidationMessageChange(): void; /** * Returns the validity state of the input component. * `true` for valid and `false` for invalid. */ getValidity(): boolean; /** * Get the input element to validate. Defined as the first slotted element * @returns The input element or undefined if not found */ private getInput; private setAlertSize; /** * Get the event names to listen for. * If the input is a synergy element, will use syn- prefixes. * @returns The event names to listen for */ private getUsedEventNames; /** * Update the events on the input element. */ private updateEvents; /** * #851: Get the validation message that should be displayed to the user. * Prioritizes customValidationMessage over the internal validationMessage state. * This is needed because frameworks may clear the internal validation message on * dynamically rendered elements, but the customValidationMessage is still valid. */ private getDisplayValidationMessage; private setValidationMessage; /** * Set the custom validation message to the input. This will make sure to either: * - use the custom message if one is set or * - use the default message if the custom message is empty */ private setCustomValidationMessage; /** * Set the validation message from the input element * @param e The event that was received */ private internalRevalidate; /** * Handle focus/blur events for tooltip variant */ private handleInputFocus; private handleInputBlur; /** * Handle the blur event during validation */ private handleFocus; /** * Triggers a validation run, showing the validation message if needed. */ private validate; firstUpdated(changedProperties: PropertyValues): Promise; connectedCallback(): void; disconnectedCallback(): void; updated(changedProperties: PropertyValues): void; private renderInlineValidation; render(): import("lit").TemplateResult<1>; }