UNPKG

@rxap/forms

Version:

This package provides a set of tools and directives to simplify working with Angular forms, including reactive forms, custom validators, and form directives for handling loading, submitting, and error states. It offers decorators for defining forms and co

449 lines (365 loc) 16.9 kB
<!doctype html> <html class="no-js" lang=""> <head> <meta charset="utf-8"> <meta http-equiv="x-ua-compatible" content="ie=edge"> <title>angular-forms</title> <meta name="description" content=""> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="icon" type="image/x-icon" href="../images/favicon.ico"> <link rel="stylesheet" href="../styles/style.css"> <link rel="stylesheet" href="../styles/dark.css"> </head> <body> <script> // Blocking script to avoid flickering dark mode // Dark mode toggle button var useDark = window.matchMedia('(prefers-color-scheme: dark)'); var darkModeState = useDark.matches; var $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input'); var $darkModeToggles = document.querySelectorAll('.dark-mode-switch'); var darkModeStateLocal = localStorage.getItem('compodoc_darkmode-state'); function checkToggle(check) { for (var i = 0; i < $darkModeToggleSwitchers.length; i++) { $darkModeToggleSwitchers[i].checked = check; } } function toggleDarkMode(state) { if (window.localStorage) { localStorage.setItem('compodoc_darkmode-state', state); } checkToggle(state); const hasClass = document.body.classList.contains('dark'); if (state) { for (var i = 0; i < $darkModeToggles.length; i++) { $darkModeToggles[i].classList.add('dark'); } if (!hasClass) { document.body.classList.add('dark'); } } else { for (var i = 0; i < $darkModeToggles.length; i++) { $darkModeToggles[i].classList.remove('dark'); } if (hasClass) { document.body.classList.remove('dark'); } } } useDark.addEventListener('change', function (evt) { toggleDarkMode(evt.matches); }); if (darkModeStateLocal) { darkModeState = darkModeStateLocal === 'true'; } toggleDarkMode(darkModeState); </script> <div class="navbar navbar-default navbar-fixed-top d-md-none p-0"> <div class="d-flex"> <a href="../" class="navbar-brand">angular-forms</a> <button type="button" class="btn btn-default btn-menu ion-ios-menu" id="btn-menu"></button> </div> </div> <div class="xs-menu menu" id="mobile-menu"> <div id="book-search-input" role="search"><input type="text" placeholder="Type to search"></div> <compodoc-menu></compodoc-menu> </div> <div class="container-fluid main"> <div class="row main"> <div class="d-none d-md-block menu"> <compodoc-menu mode="normal"></compodoc-menu> </div> <!-- START CONTENT --> <div class="content interface"> <div class="content-data"> <ol class="breadcrumb"> <li class="breadcrumb-item">Interfaces</li> <li class="breadcrumb-item" > AbstractControlOptions</li> </ol> <ul class="nav nav-tabs" role="tablist"> <li class="nav-item"> <a href="#info" class="nav-link" class="nav-link active" role="tab" id="info-tab" data-bs-toggle="tab" data-link="info">Info</a> </li> <li class="nav-item"> <a href="#source" class="nav-link" role="tab" id="source-tab" data-bs-toggle="tab" data-link="source">Source</a> </li> </ul> <div class="tab-content"> <div class="tab-pane fade active in" id="info"> <p class="comment"> <h3>File</h3> </p> <p class="comment"> <code>src/lib/types.ts</code> </p> <p class="comment"> <h3>Extends</h3> </p> <p class="comment"> <code><a href="../interfaces/AbstractControlOptions.html" target="_self" >NgAbstractControlOptions</a></code> </p> <section data-compodoc="block-index"> <h3 id="index">Index</h3> <table class="table table-sm table-bordered index-table"> <tbody> <tr> <td class="col-md-4"> <h6><b>Properties</b></h6> </td> </tr> <tr> <td class="col-md-4"> <ul class="index-list"> <li> <span class="modifier">Optional</span> <a href="#asyncValidators" > asyncValidators </a> </li> <li> <span class="modifier">Optional</span> <a href="#validators" > validators </a> </li> </ul> </td> </tr> </tbody> </table> </section> <section data-compodoc="block-properties"> <h3 id="inputs">Properties</h3> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="asyncValidators"></a> <span class="name "><b>asyncValidators</b> <a href="#asyncValidators"> <span class="icon ion-ios-link"></span> </a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>asyncValidators: <code>AsyncValidatorFn&lt;T | E&gt; | AsyncValidatorFn&lt;T, E&gt;[] | null</code> </code> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>AsyncValidatorFn&lt;T | E&gt; | AsyncValidatorFn&lt;T, E&gt;[] | null</code> </td> </tr> <tr> <td class="col-md-4"> <i>Optional</i> </td> </tr> </tbody> </table> <table class="table table-sm table-bordered"> <tbody> <tr> <td class="col-md-4"> <a name="validators"></a> <span class="name "><b>validators</b> <a href="#validators"> <span class="icon ion-ios-link"></span> </a> </span> </td> </tr> <tr> <td class="col-md-4"> <code>validators: <code>ValidatorFn&lt;T | E&gt; | ValidatorFn&lt;T, E&gt;[] | null</code> </code> </td> </tr> <tr> <td class="col-md-4"> <i>Type : </i> <code>ValidatorFn&lt;T | E&gt; | ValidatorFn&lt;T, E&gt;[] | null</code> </td> </tr> <tr> <td class="col-md-4"> <i>Optional</i> </td> </tr> </tbody> </table> </section> </div> <div class="tab-pane fade tab-source-code" id="source"> <pre class="line-numbers compodoc-sourcecode"><code class="language-typescript">import { AbstractControl as NgAbstractControl, AbstractControlOptions as NgAbstractControlOptions, ValidationErrors as NgValidationErrors, } from &#x27;@angular/forms&#x27;; import { Observable, Subject, } from &#x27;rxjs&#x27;; import { RxapFormArray } from &#x27;./form-array&#x27;; import { RxapFormControl } from &#x27;./form-control&#x27;; import { RxapFormGroup } from &#x27;./form-group&#x27;; import { FormDefinition } from &#x27;./model&#x27;; export type ValidationErrors&lt;T &#x3D; NgValidationErrors&gt; &#x3D; T; export type ValidatorFn&lt;T &#x3D; any, E &#x3D; any&gt; &#x3D; (control: AbstractControl&lt;T&gt;) &#x3D;&gt; ValidationErrors&lt;E&gt; | null; export type AsyncValidatorFn&lt;T &#x3D; any, E &#x3D; any&gt; &#x3D; ( control: AbstractControl&lt;T&gt;, ) &#x3D;&gt; Promise&lt;ValidationErrors&lt;E&gt; | null&gt; | Observable&lt;ValidationErrors&lt;E&gt; | null&gt;; export interface AbstractControlOptions&lt;T &#x3D; any, E extends NgValidationErrors &#x3D; any&gt; extends NgAbstractControlOptions { validators?: ValidatorFn&lt;T, E&gt; | ValidatorFn&lt;T, E&gt;[] | null; asyncValidators?: AsyncValidatorFn&lt;T, E&gt; | AsyncValidatorFn&lt;T, E&gt;[] | null; } export type ValidatorOrOpts &#x3D; ValidatorFn | ValidatorFn[] | AbstractControlOptions | null; export type AsyncValidator &#x3D; AsyncValidatorFn | AsyncValidatorFn[] | null; export type Validator &#x3D; ValidatorFn | ValidatorFn[]; export interface ControlOptions { onlySelf?: boolean; emitEvent?: boolean; emitModelToViewChange?: boolean; emitViewToModelChange?: boolean; initial?: boolean; /** * used in the RxapFormArray patchValue method. * * true - if the value has not a control with any index. The control is created * false - default behavior */ coerce?: boolean; /** * used in the RxapFormArray patchValue method. * * true - the length of the control array is limited by the length of the value. * false - default behavior * * example with strict &#x3D; true * * current from array controls: [ 0: {}, 1: {}, 2: {} ] * * patch value A: [ 0: {}, 1: {}, 2: {} ] * result: [ 0: {}, 1: {}, 2: {} ] * * path value B: [ 0: {}, 1: {} ] * result: [ 0: {}, 1: {} ] * */ strict?: boolean; } export type ControlEventOptions &#x3D; Pick&lt;ControlOptions, &#x27;emitEvent&#x27; | &#x27;onlySelf&#x27; | &#x27;coerce&#x27; | &#x27;strict&#x27;&gt;; export type OnlySelf &#x3D; Pick&lt;ControlOptions, &#x27;onlySelf&#x27;&gt;; export type EmitEvent &#x3D; Pick&lt;ControlOptions, &#x27;emitEvent&#x27;&gt;; export type ControlPath &#x3D; Array&lt;string | number&gt; | string; export type ControlState &#x3D; &#x27;VALID&#x27; | &#x27;INVALID&#x27; | &#x27;PENDING&#x27; | &#x27;DISABLED&#x27;; export interface AbstractControl&lt;T &#x3D; any&gt; extends NgAbstractControl { value: T; controlId?: string; fullControlPath?: string; rxapFormDefinition?: FormDefinition; readonly?: boolean; stateChanges?: Subject&lt;any&gt;; } export type ExtractStrings&lt;T&gt; &#x3D; Extract&lt;keyof T, string&gt;; export interface NgValidatorsErrors { required: true; email: true; pattern: { requiredPattern: string; actualValue: string }; minlength: { requiredLength: number; actualLength: number }; maxlength: { requiredLength: number; actualLength: number }; min: { min: number; actual: number }; max: { max: number; actual: number }; } export interface BoxedValue&lt;T&gt; { value: T; disabled?: boolean; } export type OrBoxedValue&lt;T&gt; &#x3D; T | BoxedValue&lt;T&gt; | (() &#x3D;&gt; T); type ArrayType&lt;T&gt; &#x3D; T extends Array&lt;infer R&gt; ? R : any; export type KeyValueControls&lt;T&gt; &#x3D; { [K in keyof T]: T[K] extends RxapFormControl&lt;T[K]&gt; ? RxapFormControl&lt;T[K]&gt; : T[K] extends RxapFormGroup&lt;T[K]&gt; ? RxapFormGroup&lt;T[K]&gt; : T[K] extends RxapFormArray&lt;ArrayType&lt;T[K]&gt;&gt; ? RxapFormArray&lt;ArrayType&lt;T[K]&gt;&gt; : AbstractControl&lt;T[K]&gt;; }; export type ExtractAbstractControl&lt;T, U&gt; &#x3D; T extends KeyValueControls&lt;any&gt; ? { [K in keyof U]: AbstractControl&lt;U[K]&gt; } : T; </code></pre> </div> </div> </div><div class="search-results"> <div class="has-results"> <h1 class="search-results-title"><span class='search-results-count'></span> results matching "<span class='search-query'></span>"</h1> <ul class="search-results-list"></ul> </div> <div class="no-results"> <h1 class="search-results-title">No results matching "<span class='search-query'></span>"</h1> </div> </div> </div> <!-- END CONTENT --> </div> </div> <label class="dark-mode-switch"> <input type="checkbox"> <span class="slider"> <svg class="slider-icon" viewBox="0 0 24 24" fill="none" height="20" stroke="#000" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" width="20" xmlns="http://www.w3.org/2000/svg"> <path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"></path> </svg> </span> </label> <script> var COMPODOC_CURRENT_PAGE_DEPTH = 1; var COMPODOC_CURRENT_PAGE_CONTEXT = 'interface'; var COMPODOC_CURRENT_PAGE_URL = 'AbstractControlOptions.html'; var MAX_SEARCH_RESULTS = 15; </script> <script> $darkModeToggleSwitchers = document.querySelectorAll('.dark-mode-switch input'); checkToggle(darkModeState); if ($darkModeToggleSwitchers.length > 0) { for (var i = 0; i < $darkModeToggleSwitchers.length; i++) { $darkModeToggleSwitchers[i].addEventListener('change', function (event) { darkModeState = !darkModeState; toggleDarkMode(darkModeState); }); } } </script> <script src="../js/libs/custom-elements.min.js"></script> <script src="../js/libs/lit-html.js"></script> <script src="../js/menu-wc.js" defer></script> <script nomodule src="../js/menu-wc_es5.js" defer></script> <script src="../js/libs/bootstrap-native.js"></script> <script src="../js/libs/es6-shim.min.js"></script> <script src="../js/libs/EventDispatcher.js"></script> <script src="../js/libs/promise.min.js"></script> <script src="../js/libs/zepto.min.js"></script> <script src="../js/compodoc.js"></script> <script src="../js/tabs.js"></script> <script src="../js/menu.js"></script> <script src="../js/libs/clipboard.min.js"></script> <script src="../js/libs/prism.js"></script> <script src="../js/sourceCode.js"></script> <script src="../js/search/search.js"></script> <script src="../js/search/lunr.min.js"></script> <script src="../js/search/search-lunr.js"></script> <script src="../js/search/search_index.js"></script> <script src="../js/lazy-load-graphs.js"></script> </body> </html>