@rxap/form-system
Version:
This package provides a set of directives, decorators, mixins, and validators to simplify the creation of dynamic forms in Angular applications. It offers features such as automatic control creation, data source integration, component customization, and h
1,109 lines (904 loc) • 43.3 kB
HTML
<html class="no-js" lang="">
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="ie=edge">
<title>angular-form-system</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-form-system</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 directive">
<div class="content-data">
<ol class="breadcrumb">
<li class="breadcrumb-item">Directives</li>
<li class="breadcrumb-item" >FormSystemControlDirective</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/form-system-control.directive.ts</code>
</p>
<p class="comment">
<h3>Extends</h3>
</p>
<p class="comment">
<code><a href="../classes/ExtractDataSourcesMixin.html" target="_self" >ExtractDataSourcesMixin</a></code>
<code>ControlValueAccessor</code>
<code>OnInit</code>
</p>
<p class="comment">
<h3>Implements</h3>
</p>
<p class="comment">
<code>ControlValueAccessor</code>
<code>OnInit</code>
</p>
<section data-compodoc="block-metadata">
<h3>Metadata</h3>
<table class="table table-sm table-hover metadata">
<tbody>
<tr>
<td class="col-md-3">Selector</td>
<td class="col-md-9"><code>[rxapFormSystemControl]</code></td>
</tr>
<tr>
<td class="col-md-3">Standalone</td>
<td class="col-md-9"><code>true</code></td>
</tr>
</tbody>
</table>
</section>
<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">Protected</span>
<a href="#componentRef" >componentRef</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#control" >control</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Methods</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<span class="modifier">Public</span>
<a href="#registerOnChange" >registerOnChange</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#registerOnTouched" >registerOnTouched</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#setDisabledState" >setDisabledState</a>
</li>
<li>
<span class="modifier">Public</span>
<a href="#writeValue" >writeValue</a>
</li>
<li>
<span class="modifier">Protected</span>
<a href="#extractDataSources" >extractDataSources</a>
</li>
</ul>
</td>
</tr>
<tr>
<td class="col-md-4">
<h6><b>Inputs</b></h6>
</td>
</tr>
<tr>
<td class="col-md-4">
<ul class="index-list">
<li>
<a href="#controlId" >controlId</a>
</li>
</ul>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-constructor">
<h3 id="constructor">Constructor</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<code>constructor(parent: ControlContainer, cfr: ComponentFactoryResolver, viewContainerRef: ViewContainerRef, dataSourceLoader: DataSourceLoader, injector: Injector)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="54" class="link-to-prism">src/lib/form-system-control.directive.ts:54</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div>
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>parent</td>
<td>
<code>ControlContainer</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>cfr</td>
<td>
<code>ComponentFactoryResolver</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>viewContainerRef</td>
<td>
<code>ViewContainerRef</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>dataSourceLoader</td>
<td>
<code>DataSourceLoader</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>injector</td>
<td>
<code>Injector</code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-inputs">
<h3 id="inputs">Inputs</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="controlId"></a>
<b>controlId</b>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Required : </i> <b>true</b>
</td>
</tr>
<tr>
<td class="col-md-2" colspan="2">
<div class="io-line">Defined in <a href="" data-line="50" class="link-to-prism">src/lib/form-system-control.directive.ts:50</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description"><p>Defines the form control id</p>
</div>
</td>
</tr>
</tbody>
</table>
</section>
<section data-compodoc="block-methods">
<h3 id="methods">
Methods
</h3>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="registerOnChange"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>registerOnChange</b></span>
<a href="#registerOnChange"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>registerOnChange(fn: (undefined) => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="85"
class="link-to-prism">src/lib/form-system-control.directive.ts:85</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>fn</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="registerOnTouched"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>registerOnTouched</b></span>
<a href="#registerOnTouched"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>registerOnTouched(fn: () => void)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="89"
class="link-to-prism">src/lib/form-system-control.directive.ts:89</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>fn</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/function" target="_blank" >function</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="setDisabledState"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>setDisabledState</b></span>
<a href="#setDisabledState"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>setDisabledState(isDisabled: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank">boolean</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="97"
class="link-to-prism">src/lib/form-system-control.directive.ts:97</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>isDisabled</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/boolean" target="_blank" >boolean</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="writeValue"></a>
<span class="name">
<span class="modifier">Public</span>
<span ><b>writeValue</b></span>
<a href="#writeValue"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>writeValue(value: <a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank">any</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="93"
class="link-to-prism">src/lib/form-system-control.directive.ts:93</a></div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>value</td>
<td>
<code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >any</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="https://www.typescriptlang.org/docs/handbook/basic-types.html" target="_blank" >void</a></code>
</div>
<div class="io-description">
</div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="extractDataSources"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>extractDataSources</b></span>
<a href="#extractDataSources"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<span class="modifier-icon icon ion-ios-reset"></span>
<code>extractDataSources(formDefinition: FormDefinition, controlId: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank">string</a>)</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Inherited from <code><a href="../classes/ExtractDataSourcesMixin.html" target="_self" >ExtractDataSourcesMixin</a></code>
</div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <code><a href="../classes/ExtractDataSourcesMixin.html#source" target="_self" >ExtractDataSourcesMixin:9</a></code>
</div>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-description">
<b>Parameters :</b>
<table class="params">
<thead>
<tr>
<td>Name</td>
<td>Type</td>
<td>Optional</td>
</tr>
</thead>
<tbody>
<tr>
<td>formDefinition</td>
<td>
<code>FormDefinition</code>
</td>
<td>
No
</td>
</tr>
<tr>
<td>controlId</td>
<td>
<code><a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/string" target="_blank" >string</a></code>
</td>
<td>
No
</td>
</tr>
</tbody>
</table>
</div>
<div class="io-description">
<b>Returns : </b> <code><a href="../interfaces/UseDataSourceValue.html" target="_self" >Map<string, UseDataSourceValue></a></code>
</div>
<div class="io-description">
</div>
</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="componentRef"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>componentRef</b></span>
<a href="#componentRef"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>ComponentRef<></code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="54" class="link-to-prism">src/lib/form-system-control.directive.ts:54</a></div>
</td>
</tr>
</tbody>
</table>
<table class="table table-sm table-bordered">
<tbody>
<tr>
<td class="col-md-4">
<a name="control"></a>
<span class="name">
<span class="modifier">Protected</span>
<span ><b>control</b></span>
<a href="#control"><span class="icon ion-ios-link"></span></a>
</span>
</td>
</tr>
<tr>
<td class="col-md-4">
<i>Type : </i> <code>RxapFormControl</code>
</td>
</tr>
<tr>
<td class="col-md-4">
<div class="io-line">Defined in <a href="" data-line="52" class="link-to-prism">src/lib/form-system-control.directive.ts:52</a></div>
</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 {
ComponentFactoryResolver,
ComponentRef,
Directive,
Inject,
INJECTOR,
Injector,
Input,
OnInit,
ViewContainerRef,
} from '@angular/core';
import {
Constructor,
Required,
} from '@rxap/utilities';
import {
ControlContainer,
ControlValueAccessor,
} from '@angular/forms';
import { RxapFormSystemError } from './error';
import {
FormDefinition,
RxapFormControl,
} from '@rxap/forms';
import { FormSystemMetadataKeys } from './decorators/metadata-keys';
import { ControlWithDataSource } from './control-with-data-source';
import {
DataSourceLoader,
PipeDataSource,
} from '@rxap/data-source';
import { Mixin } from '@rxap/mixin';
import { ExtractDataSourcesMixin } from './mixins/extract-data-sources.mixin';
import { map } from 'rxjs/operators';
import { getMetadata } from '@rxap/reflect-metadata';
export interface FormSystemControlDirective<T> extends ExtractDataSourcesMixin, ControlValueAccessor, OnInit {
}
@Mixin(ExtractDataSourcesMixin)
@Directive({
selector: '[rxapFormSystemControl]',
standalone: true,
})
export class FormSystemControlDirective<T> implements ControlValueAccessor, OnInit {
/**
* Defines the form control id
*/
@Input({ required: true })
public controlId!: string;
protected control!: RxapFormControl;
protected componentRef!: ComponentRef<ControlValueAccessor & Partial<ControlWithDataSource>>;
constructor(
@Inject(ControlContainer)
private readonly parent: ControlContainer,
@Inject(ComponentFactoryResolver)
private readonly cfr: ComponentFactoryResolver,
@Inject(ViewContainerRef)
private readonly viewContainerRef: ViewContainerRef,
@Inject(DataSourceLoader)
private readonly dataSourceLoader: DataSourceLoader,
@Inject(INJECTOR)
private readonly injector: Injector,
) {
}
public ngOnInit() {
this.control = this.extractControl();
const formDefinition = this.extractFormDefinition();
this.componentRef = this.createComponent(formDefinition);
this.setDataSources(formDefinition, this.componentRef.instance);
this.setComponentProperties(formDefinition, this.componentRef.instance);
this.viewContainerRef.insert(this.componentRef.hostView);
}
public registerOnChange(fn: (value: (any | null)) => void): void {
this.componentRef.instance.registerOnChange(fn);
}
public registerOnTouched(fn: () => void): void {
this.componentRef.instance.registerOnTouched(fn);
}
public writeValue(value: any): void {
this.componentRef.instance.writeValue(value);
}
public setDisabledState(isDisabled: boolean): void {
if (this.componentRef.instance.setDisabledState) {
this.componentRef.instance.setDisabledState(isDisabled);
}
}
private setDataSources(formDefinition: FormDefinition, component: Partial<ControlWithDataSource>): void {
if (!component.setDataSource) {
throw new RxapFormSystemError(
'The ControlWithDataSource interface is not implemented for the control component, but the control has defined data sources',
'',
);
}
const useDataSourceValueMap = this.extractDataSources(formDefinition, this.controlId);
for (const [ name, useDataSourceValue ] of useDataSourceValueMap.entries()) {
let dataSource = this.dataSourceLoader.load(useDataSourceValue.dataSource);
const settings = useDataSourceValue.settings;
if (settings?.transformer) {
dataSource = new PipeDataSource(dataSource, map(settings.transformer));
}
component.setDataSource(name, dataSource, useDataSourceValue.settings);
}
}
private setComponentProperties(formDefinition: FormDefinition, component: any) {
const componentProperties = this.extractComponentProperties(formDefinition);
for (const [ key, value ] of Object.entries(componentProperties)) {
Reflect.set(component, key, value);
}
}
private createComponent(formDefinition: FormDefinition): ComponentRef<ControlValueAccessor> {
const component = this.extractComponent(formDefinition);
const componentFactory = this.cfr.resolveComponentFactory(component);
return componentFactory.create(this.injector);
}
private extractControl(): RxapFormControl {
if (!this.parent.control) {
throw new RxapFormSystemError('The control property of ControlContainer is not defined', '');
}
const control = this.parent.control.get(this.controlId);
if (!control) {
throw new RxapFormSystemError('Could not find the control instance', '');
}
if (!(control instanceof RxapFormControl)) {
throw new RxapFormSystemError('The extracted control is not a RxapFormControl', '');
}
return control;
}
private extractFormDefinition(): FormDefinition {
const formDefinition = (this.control as any).rxapFormDefinition;
if (!formDefinition) {
throw new RxapFormSystemError('Could not find the form definition instance', '');
}
return formDefinition;
}
private extractComponent(formDefinition: FormDefinition): Constructor<ControlValueAccessor> {
const map = getMetadata<Map<string, Constructor<ControlValueAccessor>>>(
FormSystemMetadataKeys.COMPONENTS,
Object.getPrototypeOf(formDefinition),
);
if (!map) {
throw new RxapFormSystemError('Could not extract the use component map from the form definition instance', '');
}
if (!map.has(this.controlId)) {
throw new RxapFormSystemError('A use component definition does not exists in the form definition metadata', '');
}
return map.get(this.controlId)!;
}
private extractComponentProperties(formDefinition: FormDefinition): Record<string, any> {
const map = getMetadata<Map<string, Record<string, any>>>(
FormSystemMetadataKeys.COMPONENTS_PROPERTIES,
Object.getPrototypeOf(formDefinition),
);
if (!map) {
throw new RxapFormSystemError(
'Could not extract the use component properties map from the form definition instance',
'',
);
}
if (!map.has(this.controlId)) {
throw new RxapFormSystemError('A use component definition does not exists in the form definition metadata', '');
}
return map.get(this.controlId)!;
}
}
</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 = 'directive';
var COMPODOC_CURRENT_PAGE_URL = 'FormSystemControlDirective.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>