angular2-json-schema-form
Version:
Angular JSON Schema Form builder
10,289 lines • 501 kB
JavaScript
import * as Ajv from 'ajv';
import * as _ from 'lodash';
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ComponentFactoryResolver, Directive, ElementRef, EventEmitter, Inject, Injectable, Input, NgModule, NgZone, Output, ViewChild, ViewContainerRef, forwardRef } from '@angular/core';
import { cloneDeep, filter, isEqual, map, uniqueId } from 'lodash';
import { FormArray, FormControl, FormGroup, FormsModule, NG_VALUE_ACCESSOR, ReactiveFormsModule } from '@angular/forms';
import * as Ajv from 'ajv';
import { DomSanitizer } from '@angular/platform-browser';
import { CommonModule } from '@angular/common';
import { FlexLayoutModule } from '@angular/flex-layout';
import { MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule, MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatExpansionModule, MatFormFieldModule, MatIconModule, MatInputModule, MatNativeDateModule, MatRadioModule, MatSelectModule, MatSlideToggleModule, MatSliderModule, MatStepperModule, MatTabsModule, MatTooltipModule } from '@angular/material';
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
// CommonJS / Node have global context exposed as "global" variable.
// We don't want to include the whole node.d.ts this this compilation unit so we'll just fake
// the global "global" var for now.
var __window = typeof window !== 'undefined' && window;
var __self = typeof self !== 'undefined' && typeof WorkerGlobalScope !== 'undefined' &&
self instanceof WorkerGlobalScope && self;
var __global = typeof commonjsGlobal !== 'undefined' && commonjsGlobal;
var _root = __window || __global || __self;
var root_1 = _root;
// Workaround Closure Compiler restriction: The body of a goog.module cannot use throw.
// This is needed when used with angular/tsickle which inserts a goog.module statement.
// Wrap in IIFE
(function () {
if (!_root) {
throw new Error('RxJS could not find any global context (window, self, global)');
}
})();
var root = {
root: root_1
};
function isFunction(x) {
return typeof x === 'function';
}
var isFunction_2 = isFunction;
var isFunction_1 = {
isFunction: isFunction_2
};
var isArray_1 = Array.isArray || (function (x) { return x && typeof x.length === 'number'; });
var isArray = {
isArray: isArray_1
};
function isObject(x) {
return x != null && typeof x === 'object';
}
var isObject_2 = isObject;
var isObject_1 = {
isObject: isObject_2
};
// typeof any so that it we don't have to cast when comparing a result to the error object
var errorObject_1 = { e: {} };
var errorObject = {
errorObject: errorObject_1
};
var tryCatchTarget;
function tryCatcher() {
try {
return tryCatchTarget.apply(this, arguments);
}
catch (e) {
errorObject.errorObject.e = e;
return errorObject.errorObject;
}
}
function tryCatch(fn) {
tryCatchTarget = fn;
return tryCatcher;
}
var tryCatch_2 = tryCatch;
var tryCatch_1 = {
tryCatch: tryCatch_2
};
var __extends = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* An error thrown when one or more errors have occurred during the
* `unsubscribe` of a {@link Subscription}.
*/
var UnsubscriptionError = (function (_super) {
__extends(UnsubscriptionError, _super);
function UnsubscriptionError(errors) {
_super.call(this);
this.errors = errors;
var err = Error.call(this, errors ?
errors.length + " errors occurred during unsubscription:\n " + errors.map(function (err, i) { return ((i + 1) + ") " + err.toString()); }).join('\n ') : '');
this.name = err.name = 'UnsubscriptionError';
this.stack = err.stack;
this.message = err.message;
}
return UnsubscriptionError;
}(Error));
var UnsubscriptionError_2 = UnsubscriptionError;
var UnsubscriptionError_1 = {
UnsubscriptionError: UnsubscriptionError_2
};
/**
* Represents a disposable resource, such as the execution of an Observable. A
* Subscription has one important method, `unsubscribe`, that takes no argument
* and just disposes the resource held by the subscription.
*
* Additionally, subscriptions may be grouped together through the `add()`
* method, which will attach a child Subscription to the current Subscription.
* When a Subscription is unsubscribed, all its children (and its grandchildren)
* will be unsubscribed as well.
*
* @class Subscription
*/
var Subscription = (function () {
/**
* @param {function(): void} [unsubscribe] A function describing how to
* perform the disposal of resources when the `unsubscribe` method is called.
*/
function Subscription(unsubscribe) {
/**
* A flag to indicate whether this Subscription has already been unsubscribed.
* @type {boolean}
*/
this.closed = false;
this._parent = null;
this._parents = null;
this._subscriptions = null;
if (unsubscribe) {
this._unsubscribe = unsubscribe;
}
}
/**
* Disposes the resources held by the subscription. May, for instance, cancel
* an ongoing Observable execution or cancel any other type of work that
* started when the Subscription was created.
* @return {void}
*/
Subscription.prototype.unsubscribe = function () {
var hasErrors = false;
var errors;
if (this.closed) {
return;
}
var _a = this, _parent = _a._parent, _parents = _a._parents, _unsubscribe = _a._unsubscribe, _subscriptions = _a._subscriptions;
this.closed = true;
this._parent = null;
this._parents = null;
// null out _subscriptions first so any child subscriptions that attempt
// to remove themselves from this subscription will noop
this._subscriptions = null;
var index = -1;
var len = _parents ? _parents.length : 0;
// if this._parent is null, then so is this._parents, and we
// don't have to remove ourselves from any parent subscriptions.
while (_parent) {
_parent.remove(this);
// if this._parents is null or index >= len,
// then _parent is set to null, and the loop exits
_parent = ++index < len && _parents[index] || null;
}
if (isFunction_1.isFunction(_unsubscribe)) {
var trial = tryCatch_1.tryCatch(_unsubscribe).call(this);
if (trial === errorObject.errorObject) {
hasErrors = true;
errors = errors || (errorObject.errorObject.e instanceof UnsubscriptionError_1.UnsubscriptionError ?
flattenUnsubscriptionErrors(errorObject.errorObject.e.errors) : [errorObject.errorObject.e]);
}
}
if (isArray.isArray(_subscriptions)) {
index = -1;
len = _subscriptions.length;
while (++index < len) {
var sub = _subscriptions[index];
if (isObject_1.isObject(sub)) {
var trial = tryCatch_1.tryCatch(sub.unsubscribe).call(sub);
if (trial === errorObject.errorObject) {
hasErrors = true;
errors = errors || [];
var err = errorObject.errorObject.e;
if (err instanceof UnsubscriptionError_1.UnsubscriptionError) {
errors = errors.concat(flattenUnsubscriptionErrors(err.errors));
}
else {
errors.push(err);
}
}
}
}
}
if (hasErrors) {
throw new UnsubscriptionError_1.UnsubscriptionError(errors);
}
};
/**
* Adds a tear down to be called during the unsubscribe() of this
* Subscription.
*
* If the tear down being added is a subscription that is already
* unsubscribed, is the same reference `add` is being called on, or is
* `Subscription.EMPTY`, it will not be added.
*
* If this subscription is already in an `closed` state, the passed
* tear down logic will be executed immediately.
*
* @param {TeardownLogic} teardown The additional logic to execute on
* teardown.
* @return {Subscription} Returns the Subscription used or created to be
* added to the inner subscriptions list. This Subscription can be used with
* `remove()` to remove the passed teardown logic from the inner subscriptions
* list.
*/
Subscription.prototype.add = function (teardown) {
if (!teardown || (teardown === Subscription.EMPTY)) {
return Subscription.EMPTY;
}
if (teardown === this) {
return this;
}
var subscription = teardown;
switch (typeof teardown) {
case 'function':
subscription = new Subscription(teardown);
case 'object':
if (subscription.closed || typeof subscription.unsubscribe !== 'function') {
return subscription;
}
else if (this.closed) {
subscription.unsubscribe();
return subscription;
}
else if (typeof subscription._addParent !== 'function' /* quack quack */) {
var tmp = subscription;
subscription = new Subscription();
subscription._subscriptions = [tmp];
}
break;
default:
throw new Error('unrecognized teardown ' + teardown + ' added to Subscription.');
}
var subscriptions = this._subscriptions || (this._subscriptions = []);
subscriptions.push(subscription);
subscription._addParent(this);
return subscription;
};
/**
* Removes a Subscription from the internal list of subscriptions that will
* unsubscribe during the unsubscribe process of this Subscription.
* @param {Subscription} subscription The subscription to remove.
* @return {void}
*/
Subscription.prototype.remove = function (subscription) {
var subscriptions = this._subscriptions;
if (subscriptions) {
var subscriptionIndex = subscriptions.indexOf(subscription);
if (subscriptionIndex !== -1) {
subscriptions.splice(subscriptionIndex, 1);
}
}
};
Subscription.prototype._addParent = function (parent) {
var _a = this, _parent = _a._parent, _parents = _a._parents;
if (!_parent || _parent === parent) {
// If we don't have a parent, or the new parent is the same as the
// current parent, then set this._parent to the new parent.
this._parent = parent;
}
else if (!_parents) {
// If there's already one parent, but not multiple, allocate an Array to
// store the rest of the parent Subscriptions.
this._parents = [parent];
}
else if (_parents.indexOf(parent) === -1) {
// Only add the new parent to the _parents list if it's not already there.
_parents.push(parent);
}
};
Subscription.EMPTY = (function (empty) {
empty.closed = true;
return empty;
}(new Subscription()));
return Subscription;
}());
var Subscription_2 = Subscription;
function flattenUnsubscriptionErrors(errors) {
return errors.reduce(function (errs, err) { return errs.concat((err instanceof UnsubscriptionError_1.UnsubscriptionError) ? err.errors : err); }, []);
}
var Subscription_1 = {
Subscription: Subscription_2
};
var empty = {
closed: true,
next: function (value) { },
error: function (err) { throw err; },
complete: function () { }
};
var Observer = {
empty: empty
};
var rxSubscriber = createCommonjsModule(function (module, exports) {
var Symbol = root.root.Symbol;
exports.rxSubscriber = (typeof Symbol === 'function' && typeof Symbol.for === 'function') ?
Symbol.for('rxSubscriber') : '@@rxSubscriber';
/**
* @deprecated use rxSubscriber instead
*/
exports.$$rxSubscriber = exports.rxSubscriber;
});
var rxSubscriber_1 = rxSubscriber.rxSubscriber;
var rxSubscriber_2 = rxSubscriber.$$rxSubscriber;
var __extends$1 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* Implements the {@link Observer} interface and extends the
* {@link Subscription} class. While the {@link Observer} is the public API for
* consuming the values of an {@link Observable}, all Observers get converted to
* a Subscriber, in order to provide Subscription-like capabilities such as
* `unsubscribe`. Subscriber is a common type in RxJS, and crucial for
* implementing operators, but it is rarely used as a public API.
*
* @class Subscriber<T>
*/
var Subscriber = (function (_super) {
__extends$1(Subscriber, _super);
/**
* @param {Observer|function(value: T): void} [destinationOrNext] A partially
* defined Observer or a `next` callback function.
* @param {function(e: ?any): void} [error] The `error` callback of an
* Observer.
* @param {function(): void} [complete] The `complete` callback of an
* Observer.
*/
function Subscriber(destinationOrNext, error, complete) {
_super.call(this);
this.syncErrorValue = null;
this.syncErrorThrown = false;
this.syncErrorThrowable = false;
this.isStopped = false;
switch (arguments.length) {
case 0:
this.destination = Observer.empty;
break;
case 1:
if (!destinationOrNext) {
this.destination = Observer.empty;
break;
}
if (typeof destinationOrNext === 'object') {
if (destinationOrNext instanceof Subscriber) {
this.syncErrorThrowable = destinationOrNext.syncErrorThrowable;
this.destination = destinationOrNext;
this.destination.add(this);
}
else {
this.syncErrorThrowable = true;
this.destination = new SafeSubscriber(this, destinationOrNext);
}
break;
}
default:
this.syncErrorThrowable = true;
this.destination = new SafeSubscriber(this, destinationOrNext, error, complete);
break;
}
}
Subscriber.prototype[rxSubscriber.rxSubscriber] = function () { return this; };
/**
* A static factory for a Subscriber, given a (potentially partial) definition
* of an Observer.
* @param {function(x: ?T): void} [next] The `next` callback of an Observer.
* @param {function(e: ?any): void} [error] The `error` callback of an
* Observer.
* @param {function(): void} [complete] The `complete` callback of an
* Observer.
* @return {Subscriber<T>} A Subscriber wrapping the (partially defined)
* Observer represented by the given arguments.
*/
Subscriber.create = function (next, error, complete) {
var subscriber = new Subscriber(next, error, complete);
subscriber.syncErrorThrowable = false;
return subscriber;
};
/**
* The {@link Observer} callback to receive notifications of type `next` from
* the Observable, with a value. The Observable may call this method 0 or more
* times.
* @param {T} [value] The `next` value.
* @return {void}
*/
Subscriber.prototype.next = function (value) {
if (!this.isStopped) {
this._next(value);
}
};
/**
* The {@link Observer} callback to receive notifications of type `error` from
* the Observable, with an attached {@link Error}. Notifies the Observer that
* the Observable has experienced an error condition.
* @param {any} [err] The `error` exception.
* @return {void}
*/
Subscriber.prototype.error = function (err) {
if (!this.isStopped) {
this.isStopped = true;
this._error(err);
}
};
/**
* The {@link Observer} callback to receive a valueless notification of type
* `complete` from the Observable. Notifies the Observer that the Observable
* has finished sending push-based notifications.
* @return {void}
*/
Subscriber.prototype.complete = function () {
if (!this.isStopped) {
this.isStopped = true;
this._complete();
}
};
Subscriber.prototype.unsubscribe = function () {
if (this.closed) {
return;
}
this.isStopped = true;
_super.prototype.unsubscribe.call(this);
};
Subscriber.prototype._next = function (value) {
this.destination.next(value);
};
Subscriber.prototype._error = function (err) {
this.destination.error(err);
this.unsubscribe();
};
Subscriber.prototype._complete = function () {
this.destination.complete();
this.unsubscribe();
};
Subscriber.prototype._unsubscribeAndRecycle = function () {
var _a = this, _parent = _a._parent, _parents = _a._parents;
this._parent = null;
this._parents = null;
this.unsubscribe();
this.closed = false;
this.isStopped = false;
this._parent = _parent;
this._parents = _parents;
return this;
};
return Subscriber;
}(Subscription_1.Subscription));
var Subscriber_2 = Subscriber;
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var SafeSubscriber = (function (_super) {
__extends$1(SafeSubscriber, _super);
function SafeSubscriber(_parentSubscriber, observerOrNext, error, complete) {
_super.call(this);
this._parentSubscriber = _parentSubscriber;
var next;
var context = this;
if (isFunction_1.isFunction(observerOrNext)) {
next = observerOrNext;
}
else if (observerOrNext) {
next = observerOrNext.next;
error = observerOrNext.error;
complete = observerOrNext.complete;
if (observerOrNext !== Observer.empty) {
context = Object.create(observerOrNext);
if (isFunction_1.isFunction(context.unsubscribe)) {
this.add(context.unsubscribe.bind(context));
}
context.unsubscribe = this.unsubscribe.bind(this);
}
}
this._context = context;
this._next = next;
this._error = error;
this._complete = complete;
}
SafeSubscriber.prototype.next = function (value) {
if (!this.isStopped && this._next) {
var _parentSubscriber = this._parentSubscriber;
if (!_parentSubscriber.syncErrorThrowable) {
this.__tryOrUnsub(this._next, value);
}
else if (this.__tryOrSetError(_parentSubscriber, this._next, value)) {
this.unsubscribe();
}
}
};
SafeSubscriber.prototype.error = function (err) {
if (!this.isStopped) {
var _parentSubscriber = this._parentSubscriber;
if (this._error) {
if (!_parentSubscriber.syncErrorThrowable) {
this.__tryOrUnsub(this._error, err);
this.unsubscribe();
}
else {
this.__tryOrSetError(_parentSubscriber, this._error, err);
this.unsubscribe();
}
}
else if (!_parentSubscriber.syncErrorThrowable) {
this.unsubscribe();
throw err;
}
else {
_parentSubscriber.syncErrorValue = err;
_parentSubscriber.syncErrorThrown = true;
this.unsubscribe();
}
}
};
SafeSubscriber.prototype.complete = function () {
var _this = this;
if (!this.isStopped) {
var _parentSubscriber = this._parentSubscriber;
if (this._complete) {
var wrappedComplete = function () { return _this._complete.call(_this._context); };
if (!_parentSubscriber.syncErrorThrowable) {
this.__tryOrUnsub(wrappedComplete);
this.unsubscribe();
}
else {
this.__tryOrSetError(_parentSubscriber, wrappedComplete);
this.unsubscribe();
}
}
else {
this.unsubscribe();
}
}
};
SafeSubscriber.prototype.__tryOrUnsub = function (fn, value) {
try {
fn.call(this._context, value);
}
catch (err) {
this.unsubscribe();
throw err;
}
};
SafeSubscriber.prototype.__tryOrSetError = function (parent, fn, value) {
try {
fn.call(this._context, value);
}
catch (err) {
parent.syncErrorValue = err;
parent.syncErrorThrown = true;
return true;
}
return false;
};
SafeSubscriber.prototype._unsubscribe = function () {
var _parentSubscriber = this._parentSubscriber;
this._context = null;
this._parentSubscriber = null;
_parentSubscriber.unsubscribe();
};
return SafeSubscriber;
}(Subscriber));
var Subscriber_1 = {
Subscriber: Subscriber_2
};
function toSubscriber(nextOrObserver, error, complete) {
if (nextOrObserver) {
if (nextOrObserver instanceof Subscriber_1.Subscriber) {
return nextOrObserver;
}
if (nextOrObserver[rxSubscriber.rxSubscriber]) {
return nextOrObserver[rxSubscriber.rxSubscriber]();
}
}
if (!nextOrObserver && !error && !complete) {
return new Subscriber_1.Subscriber(Observer.empty);
}
return new Subscriber_1.Subscriber(nextOrObserver, error, complete);
}
var toSubscriber_2 = toSubscriber;
var toSubscriber_1 = {
toSubscriber: toSubscriber_2
};
var observable = createCommonjsModule(function (module, exports) {
function getSymbolObservable(context) {
var $$observable;
var Symbol = context.Symbol;
if (typeof Symbol === 'function') {
if (Symbol.observable) {
$$observable = Symbol.observable;
}
else {
$$observable = Symbol('observable');
Symbol.observable = $$observable;
}
}
else {
$$observable = '@@observable';
}
return $$observable;
}
exports.getSymbolObservable = getSymbolObservable;
exports.observable = getSymbolObservable(root.root);
/**
* @deprecated use observable instead
*/
exports.$$observable = exports.observable;
});
var observable_1 = observable.getSymbolObservable;
var observable_2 = observable.observable;
var observable_3 = observable.$$observable;
/* tslint:disable:no-empty */
function noop() { }
var noop_2 = noop;
var noop_1 = {
noop: noop_2
};
/* tslint:enable:max-line-length */
function pipe() {
var fns = [];
for (var _i = 0; _i < arguments.length; _i++) {
fns[_i - 0] = arguments[_i];
}
return pipeFromArray(fns);
}
var pipe_2 = pipe;
/* @internal */
function pipeFromArray(fns) {
if (!fns) {
return noop_1.noop;
}
if (fns.length === 1) {
return fns[0];
}
return function piped(input) {
return fns.reduce(function (prev, fn) { return fn(prev); }, input);
};
}
var pipeFromArray_1 = pipeFromArray;
var pipe_1 = {
pipe: pipe_2,
pipeFromArray: pipeFromArray_1
};
/**
* A representation of any set of values over any amount of time. This is the most basic building block
* of RxJS.
*
* @class Observable<T>
*/
var Observable = (function () {
/**
* @constructor
* @param {Function} subscribe the function that is called when the Observable is
* initially subscribed to. This function is given a Subscriber, to which new values
* can be `next`ed, or an `error` method can be called to raise an error, or
* `complete` can be called to notify of a successful completion.
*/
function Observable(subscribe) {
this._isScalar = false;
if (subscribe) {
this._subscribe = subscribe;
}
}
/**
* Creates a new Observable, with this Observable as the source, and the passed
* operator defined as the new observable's operator.
* @method lift
* @param {Operator} operator the operator defining the operation to take on the observable
* @return {Observable} a new observable with the Operator applied
*/
Observable.prototype.lift = function (operator) {
var observable$$1 = new Observable();
observable$$1.source = this;
observable$$1.operator = operator;
return observable$$1;
};
/**
* Invokes an execution of an Observable and registers Observer handlers for notifications it will emit.
*
* <span class="informal">Use it when you have all these Observables, but still nothing is happening.</span>
*
* `subscribe` is not a regular operator, but a method that calls Observable's internal `subscribe` function. It
* might be for example a function that you passed to a {@link create} static factory, but most of the time it is
* a library implementation, which defines what and when will be emitted by an Observable. This means that calling
* `subscribe` is actually the moment when Observable starts its work, not when it is created, as it is often
* thought.
*
* Apart from starting the execution of an Observable, this method allows you to listen for values
* that an Observable emits, as well as for when it completes or errors. You can achieve this in two
* following ways.
*
* The first way is creating an object that implements {@link Observer} interface. It should have methods
* defined by that interface, but note that it should be just a regular JavaScript object, which you can create
* yourself in any way you want (ES6 class, classic function constructor, object literal etc.). In particular do
* not attempt to use any RxJS implementation details to create Observers - you don't need them. Remember also
* that your object does not have to implement all methods. If you find yourself creating a method that doesn't
* do anything, you can simply omit it. Note however, that if `error` method is not provided, all errors will
* be left uncaught.
*
* The second way is to give up on Observer object altogether and simply provide callback functions in place of its methods.
* This means you can provide three functions as arguments to `subscribe`, where first function is equivalent
* of a `next` method, second of an `error` method and third of a `complete` method. Just as in case of Observer,
* if you do not need to listen for something, you can omit a function, preferably by passing `undefined` or `null`,
* since `subscribe` recognizes these functions by where they were placed in function call. When it comes
* to `error` function, just as before, if not provided, errors emitted by an Observable will be thrown.
*
* Whatever style of calling `subscribe` you use, in both cases it returns a Subscription object.
* This object allows you to call `unsubscribe` on it, which in turn will stop work that an Observable does and will clean
* up all resources that an Observable used. Note that cancelling a subscription will not call `complete` callback
* provided to `subscribe` function, which is reserved for a regular completion signal that comes from an Observable.
*
* Remember that callbacks provided to `subscribe` are not guaranteed to be called asynchronously.
* It is an Observable itself that decides when these functions will be called. For example {@link of}
* by default emits all its values synchronously. Always check documentation for how given Observable
* will behave when subscribed and if its default behavior can be modified with a {@link Scheduler}.
*
* @example <caption>Subscribe with an Observer</caption>
* const sumObserver = {
* sum: 0,
* next(value) {
* console.log('Adding: ' + value);
* this.sum = this.sum + value;
* },
* error() { // We actually could just remove this method,
* }, // since we do not really care about errors right now.
* complete() {
* console.log('Sum equals: ' + this.sum);
* }
* };
*
* Rx.Observable.of(1, 2, 3) // Synchronously emits 1, 2, 3 and then completes.
* .subscribe(sumObserver);
*
* // Logs:
* // "Adding: 1"
* // "Adding: 2"
* // "Adding: 3"
* // "Sum equals: 6"
*
*
* @example <caption>Subscribe with functions</caption>
* let sum = 0;
*
* Rx.Observable.of(1, 2, 3)
* .subscribe(
* function(value) {
* console.log('Adding: ' + value);
* sum = sum + value;
* },
* undefined,
* function() {
* console.log('Sum equals: ' + sum);
* }
* );
*
* // Logs:
* // "Adding: 1"
* // "Adding: 2"
* // "Adding: 3"
* // "Sum equals: 6"
*
*
* @example <caption>Cancel a subscription</caption>
* const subscription = Rx.Observable.interval(1000).subscribe(
* num => console.log(num),
* undefined,
* () => console.log('completed!') // Will not be called, even
* ); // when cancelling subscription
*
*
* setTimeout(() => {
* subscription.unsubscribe();
* console.log('unsubscribed!');
* }, 2500);
*
* // Logs:
* // 0 after 1s
* // 1 after 2s
* // "unsubscribed!" after 2.5s
*
*
* @param {Observer|Function} observerOrNext (optional) Either an observer with methods to be called,
* or the first of three possible handlers, which is the handler for each value emitted from the subscribed
* Observable.
* @param {Function} error (optional) A handler for a terminal event resulting from an error. If no error handler is provided,
* the error will be thrown as unhandled.
* @param {Function} complete (optional) A handler for a terminal event resulting from successful completion.
* @return {ISubscription} a subscription reference to the registered handlers
* @method subscribe
*/
Observable.prototype.subscribe = function (observerOrNext, error, complete) {
var operator = this.operator;
var sink = toSubscriber_1.toSubscriber(observerOrNext, error, complete);
if (operator) {
operator.call(sink, this.source);
}
else {
sink.add(this.source || !sink.syncErrorThrowable ? this._subscribe(sink) : this._trySubscribe(sink));
}
if (sink.syncErrorThrowable) {
sink.syncErrorThrowable = false;
if (sink.syncErrorThrown) {
throw sink.syncErrorValue;
}
}
return sink;
};
Observable.prototype._trySubscribe = function (sink) {
try {
return this._subscribe(sink);
}
catch (err) {
sink.syncErrorThrown = true;
sink.syncErrorValue = err;
sink.error(err);
}
};
/**
* @method forEach
* @param {Function} next a handler for each value emitted by the observable
* @param {PromiseConstructor} [PromiseCtor] a constructor function used to instantiate the Promise
* @return {Promise} a promise that either resolves on observable completion or
* rejects with the handled error
*/
Observable.prototype.forEach = function (next, PromiseCtor) {
var _this = this;
if (!PromiseCtor) {
if (root.root.Rx && root.root.Rx.config && root.root.Rx.config.Promise) {
PromiseCtor = root.root.Rx.config.Promise;
}
else if (root.root.Promise) {
PromiseCtor = root.root.Promise;
}
}
if (!PromiseCtor) {
throw new Error('no Promise impl found');
}
return new PromiseCtor(function (resolve, reject) {
// Must be declared in a separate statement to avoid a RefernceError when
// accessing subscription below in the closure due to Temporal Dead Zone.
var subscription;
subscription = _this.subscribe(function (value) {
if (subscription) {
// if there is a subscription, then we can surmise
// the next handling is asynchronous. Any errors thrown
// need to be rejected explicitly and unsubscribe must be
// called manually
try {
next(value);
}
catch (err) {
reject(err);
subscription.unsubscribe();
}
}
else {
// if there is NO subscription, then we're getting a nexted
// value synchronously during subscription. We can just call it.
// If it errors, Observable's `subscribe` will ensure the
// unsubscription logic is called, then synchronously rethrow the error.
// After that, Promise will trap the error and send it
// down the rejection path.
next(value);
}
}, reject, resolve);
});
};
Observable.prototype._subscribe = function (subscriber) {
return this.source.subscribe(subscriber);
};
/**
* An interop point defined by the es7-observable spec https://github.com/zenparsing/es-observable
* @method Symbol.observable
* @return {Observable} this instance of the observable
*/
Observable.prototype[observable.observable] = function () {
return this;
};
/* tslint:enable:max-line-length */
/**
* Used to stitch together functional operators into a chain.
* @method pipe
* @return {Observable} the Observable result of all of the operators having
* been called in the order they were passed in.
*
* @example
*
* import { map, filter, scan } from 'rxjs/operators';
*
* Rx.Observable.interval(1000)
* .pipe(
* filter(x => x % 2 === 0),
* map(x => x + x),
* scan((acc, x) => acc + x)
* )
* .subscribe(x => console.log(x))
*/
Observable.prototype.pipe = function () {
var operations = [];
for (var _i = 0; _i < arguments.length; _i++) {
operations[_i - 0] = arguments[_i];
}
if (operations.length === 0) {
return this;
}
return pipe_1.pipeFromArray(operations)(this);
};
/* tslint:enable:max-line-length */
Observable.prototype.toPromise = function (PromiseCtor) {
var _this = this;
if (!PromiseCtor) {
if (root.root.Rx && root.root.Rx.config && root.root.Rx.config.Promise) {
PromiseCtor = root.root.Rx.config.Promise;
}
else if (root.root.Promise) {
PromiseCtor = root.root.Promise;
}
}
if (!PromiseCtor) {
throw new Error('no Promise impl found');
}
return new PromiseCtor(function (resolve, reject) {
var value;
_this.subscribe(function (x) { return value = x; }, function (err) { return reject(err); }, function () { return resolve(value); });
});
};
// HACK: Since TypeScript inherits static properties too, we have to
// fight against TypeScript here so Subject can have a different static create signature
/**
* Creates a new cold Observable by calling the Observable constructor
* @static true
* @owner Observable
* @method create
* @param {Function} subscribe? the subscriber function to be passed to the Observable constructor
* @return {Observable} a new cold observable
*/
Observable.create = function (subscribe) {
return new Observable(subscribe);
};
return Observable;
}());
var Observable_2 = Observable;
var Observable_1 = {
Observable: Observable_2
};
var __extends$2 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @extends {Ignored}
* @hide true
*/
var PromiseObservable = (function (_super) {
__extends$2(PromiseObservable, _super);
function PromiseObservable(promise, scheduler) {
_super.call(this);
this.promise = promise;
this.scheduler = scheduler;
}
/**
* Converts a Promise to an Observable.
*
* <span class="informal">Returns an Observable that just emits the Promise's
* resolved value, then completes.</span>
*
* Converts an ES2015 Promise or a Promises/A+ spec compliant Promise to an
* Observable. If the Promise resolves with a value, the output Observable
* emits that resolved value as a `next`, and then completes. If the Promise
* is rejected, then the output Observable emits the corresponding Error.
*
* @example <caption>Convert the Promise returned by Fetch to an Observable</caption>
* var result = Rx.Observable.fromPromise(fetch('http://myserver.com/'));
* result.subscribe(x => console.log(x), e => console.error(e));
*
* @see {@link bindCallback}
* @see {@link from}
*
* @param {PromiseLike<T>} promise The promise to be converted.
* @param {Scheduler} [scheduler] An optional IScheduler to use for scheduling
* the delivery of the resolved value (or the rejection).
* @return {Observable<T>} An Observable which wraps the Promise.
* @static true
* @name fromPromise
* @owner Observable
*/
PromiseObservable.create = function (promise, scheduler) {
return new PromiseObservable(promise, scheduler);
};
PromiseObservable.prototype._subscribe = function (subscriber) {
var _this = this;
var promise = this.promise;
var scheduler = this.scheduler;
if (scheduler == null) {
if (this._isScalar) {
if (!subscriber.closed) {
subscriber.next(this.value);
subscriber.complete();
}
}
else {
promise.then(function (value) {
_this.value = value;
_this._isScalar = true;
if (!subscriber.closed) {
subscriber.next(value);
subscriber.complete();
}
}, function (err) {
if (!subscriber.closed) {
subscriber.error(err);
}
})
.then(null, function (err) {
// escape the promise trap, throw unhandled errors
root.root.setTimeout(function () { throw err; });
});
}
}
else {
if (this._isScalar) {
if (!subscriber.closed) {
return scheduler.schedule(dispatchNext, 0, { value: this.value, subscriber: subscriber });
}
}
else {
promise.then(function (value) {
_this.value = value;
_this._isScalar = true;
if (!subscriber.closed) {
subscriber.add(scheduler.schedule(dispatchNext, 0, { value: value, subscriber: subscriber }));
}
}, function (err) {
if (!subscriber.closed) {
subscriber.add(scheduler.schedule(dispatchError, 0, { err: err, subscriber: subscriber }));
}
})
.then(null, function (err) {
// escape the promise trap, throw unhandled errors
root.root.setTimeout(function () { throw err; });
});
}
}
};
return PromiseObservable;
}(Observable_1.Observable));
var PromiseObservable_2 = PromiseObservable;
function dispatchNext(arg) {
var value = arg.value, subscriber = arg.subscriber;
if (!subscriber.closed) {
subscriber.next(value);
subscriber.complete();
}
}
function dispatchError(arg) {
var err = arg.err, subscriber = arg.subscriber;
if (!subscriber.closed) {
subscriber.error(err);
}
}
var PromiseObservable_1 = {
PromiseObservable: PromiseObservable_2
};
var fromPromise_1 = PromiseObservable_1.PromiseObservable.create;
// HACK: this is here for backward compatability
// TODO(benlesh): remove this in v6.
var toPromise_1 = Observable_1.Observable.prototype.toPromise;
function _executeValidators(control, validators, invert) {
if (invert === void 0) { invert = false; }
return validators.map(function (validator) { return validator(control, invert); });
}
function _executeAsyncValidators(control, validators, invert) {
if (invert === void 0) { invert = false; }
return validators.map(function (validator) { return validator(control, invert); });
}
function _mergeObjects() {
var objects = [];
for (var _i = 0; _i < arguments.length; _i++) {
objects[_i] = arguments[_i];
}
var mergedObject = {};
for (var _a = 0, objects_1 = objects; _a < objects_1.length; _a++) {
var currentObject = objects_1[_a];
if (isObject$1(currentObject)) {
for (var _b = 0, _c = Object.keys(currentObject); _b < _c.length; _b++) {
var key = _c[_b];
var currentValue = currentObject[key];
var mergedValue = mergedObject[key];
mergedObject[key] = !isDefined(mergedValue) ? currentValue :
key === 'not' && isBoolean(mergedValue, 'strict') &&
isBoolean(currentValue, 'strict') ? xor(mergedValue, currentValue) :
getType(mergedValue) === 'object' && getType(currentValue) === 'object' ?
_mergeObjects(mergedValue, currentValue) :
currentValue;
}
}
}
return mergedObject;
}
function _mergeErrors(arrayOfErrors) {
var mergedErrors = _mergeObjects.apply(void 0, arrayOfErrors);
return isEmpty(mergedErrors) ? null : mergedErrors;
}
function isDefined(value) {
return value !== undefined && value !== null;
}
function hasValue(value) {
return value !== undefined && value !== null && value !== '';
}
function isEmpty(value) {
if (isArray$2(value)) {
return !value.length;
}
if (isObject$1(value)) {
return !Object.keys(value).length;
}
return value === undefined || value === null || value === '';
}
function isString(value) {
return typeof value === 'string';
}
function isNumber(value, strict) {
if (strict === void 0) { strict = false; }
if (strict && typeof value !== 'number') {
return false;
}
return !isNaN(value) && value !== value / 0;
}
function isInteger(value, strict) {
if (strict === void 0) { strict = false; }
if (strict && typeof value !== 'number') {
return false;
}
return !isNaN(value) && value !== value / 0 && value % 1 === 0;
}
function isBoolean(value, option) {
if (option === void 0) { option = null; }
if (option === 'strict') {
return value === true || value === false;
}
if (option === true) {
return value === true || value === 1 || value === 'true' || value === '1';
}
if (option === false) {
return value === false || value === 0 || value === 'false' || value === '0';
}
return value === true || value === 1 || value === 'true' || value === '1' ||
value === false || value === 0 || value === 'false' || value === '0';
}
function isFunction$1(item) {
return typeof item === 'function';
}
function isObject$1(item) {
return item !== null && typeof item === 'object' &&
Object.prototype.toString.call(item) === '[object Object]';
}
function isArray$2(item) {
return Array.isArray(item) ||
Object.prototype.toString.call(item) === '[object Array]';
}
function isDate(item) {
return typeof item === 'object' &&
Object.prototype.toString.call(item) === '[object Date]';
}
function isMap(item) {
return typeof item === 'object' &&
Object.prototype.toString.call(item) === '[object Map]';
}
function isSet(item) {
return typeof item === 'object' &&
Object.prototype.toString.call(item) === '[object Set]';
}
function getType(value, strict) {
if (strict === void 0) { strict = false; }
if (!isDefined(value)) {
return 'null';
}
if (isArray$2(value)) {
return 'array';
}
if (isObject$1(value)) {
return 'object';
}
if (isBoolean(value, 'strict')) {
return 'boolean';
}
if (isInteger(value, strict)) {
return 'integer';
}
if (isNumber(value, strict)) {
return 'number';
}
if (isString(value) || (!strict && isDate(value))) {
return 'string';
}
return null;
}
function isType(value, type) {
switch (type) {
case 'string':
return isString(value) || isDate(value);
case 'number':
return isNumber(value);
case 'integer':
return isInteger(value);
case 'boolean':
return isBoolean(value);
case 'null':
return !hasValue(value);
default:
console.error("isType error: \"" + type + "\" is not a recognized type.");
return null;
}
}
function isPrimitive(value) {
return (isString(value) || isNumber(value) ||
isBoolean(value, 'strict') || value === null);
}
function toJavaScriptType(value, types, strictIntegers) {
if (strictIntegers === void 0) { strictIntegers = true; }
if (!isDefined(value)) {
return null;
}
if (isString(types)) {
types = [types];
}
if (strictIntegers && inArray('integer', types)) {
if (isInteger(value, 'strict')) {
return value;
}
if (isInteger(value)) {
return parseInt(value, 10);
}
}
if (inArray('number', types) || (!strictIntegers && inArray('integer', types))) {
if (isNumber(value, 'strict')) {
return value;
}
if (isNumber(value)) {
return parseFloat(value);
}
}
if (inArray('string', types)) {
if (isString(value)) {
return value;
}
if (isDate(value)) {
return value.toISOString().slice(0, 10);
}
if (isNumber(value)) {
return value.toString();
}
}
if (isDate(value) && (inArray('integer', types) || inArray('number', types))) {
return value.getTime();
}
if (inArray('boolean', types)) {
if (isBoolean(value, true)) {
return true;
}
if (isBoolean(value, false)) {
return false;
}
}
return null;
}
function toSchemaType(value, types) {
if (!isArray$2(types)) {
types = [types];
}
if (types.includes('null') && !hasValue(value)) {
return null;
}
if (types.includes('boolean') && !isBoolean(value, 'strict')) {
return value;
}
if (types.includes('integer')) {
var testValue = toJavaScriptType(value, 'integer');
if (testValue !== null) {
return +testValue;
}
}
if (types.includes('number')) {
var testValue = toJavaScriptType(value, 'number');
if (testValue !== null) {
return +testValue;
}
}
if ((isString(value) || isNumber(value, 'strict')) &&
types.includes('string')) {
return toJavaScriptType(value, 'string');
}
if (types.includes('boolean') && isBoolean(value)) {
return toJavaScriptType(value, 'boolean');
}
if (types.includes('string')) {
if (value === null) {
return '';
}
var testValue = toJavaScriptType(value, 'string');
if (testValue !== null) {
return testValue;
}
}
if ((types.includes('number') ||
types.includes('integer'))) {
if (value === true) {
return 1;
}
if (value === false || value === null || value === '') {
return 0;
}
}
if (types.includes('number')) {
var testValue = parseFloat(value);
if (!!testValue) {
return testValue;
}
}
if (types.includes('integer')) {
var testValue = parseInt(value, 10);
if (!!testValue) {
return testValue;
}
}
if (types.includes('boolean')) {
return !!value;
}
if ((types.includes('number') ||
types.includes('integer')) && !types.includes('null')) {
return 0;
}
}
function isPromise(object) {
return !!object && typeof object.then === 'function';
}
function isObservable(object) {
return !!object && typeof object.subscribe === 'function';
}
function _toPromise(object) {
return isPromise(object) ? object : toPromise_1.call(object);
}
function toObservable(object) {
var observable = isPromise(object) ? fromPromise_1(object) : object;
if (isObservable(observable)) {
return observable;
}
console.error('toObservable error: Expected validator to return Promise or Observable.');
return new Observable_2();
}
function inArray(item, array, allIn) {
if (allIn === void 0) { allIn = false; }
if (!isDefined(item) || !isArray$2(array)) {
return false;
}
return isArray$2(item) ?
item[allIn ? 'every' : 'some'](function (subItem) { return array.includes(subItem); }) :
array.includes(item);
}
function xor(value1, value2) {
return (!!value1 && !value2) || (!value1 && !!value2);
}
var __assign = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function addClasses(oldClasses, newClasses) {
var badType = function (i) { return !isSet(i) && !isArray$2(i) && !isString(i); };
if (badType(newClasses)) {
return oldClasses;
}
if (badType(oldClasses)) {
oldClasses = '';
}
var toSet = function (i) { return isSet(i) ? i : isArray$2(i) ? new Set(i) : new Set(i.split(' ')); };
var combinedSet = toSet(oldClasses);
var newSet = toSet(newClasses);
newSet.forEach(function (c) { return combinedSet.add(c); });
if (isSet(oldClasses)) {
return combinedSet;
}
if (isArray$2(oldClasses)) {
return Array.from(combinedSet);
}
return Array.from(combinedSet).join(' ');
}
function copy(object, errors) {
if (errors === void 0) { errors = false; }
if (typeof object !== 'object' || object === null) {
return object;
}
if (isMap(object)) {
return new Map(object);
}
if (isSet(object)) {
return new Set(object);
}
if (isArray$2(object)) {
return object.slice();
}
if (isObject$1(object)) {
return __assign({}, object);
}
if (errors) {
console.error('copy error: Object to copy must be a JavaScript object or value.');
}
return object;
}
function forEach(object, fn, recurse, rootObject, errors) {
if (recurse === void 0) { recurse = false; }
if (rootObject === void 0) { rootObject = object; }
if (errors === void 0) { errors = false; }
if (isEmpty(object)) {
return;
}
if ((isObject$1(object) || isArray$2(object)) && typeof fn === 'function') {
for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {
var key = _a[_i];
var value = object[key];
if (recurse === 'bottom-up' && (isObject$1(value) || isArray$2(value))) {
forEach(value, fn, recurse, rootObject);
}
fn(value, key, object, rootObject);
if (recurse === 'top-down' && (isObject$1(value) || isArray$2(value))) {
forEach(value, fn, recurse, rootObject);
}
}
}
if (errors) {
if (typeof fn !== 'function') {
console.error('forEach error: Iterator must be a function.');
console.error('function', fn);
}
if (!isObject$1(object) && !isArray$2(object)) {
console.error('forEach error: Input object must be an object or array.');
console.error('object', object);
}
}
}
function forEachCopy(object, fn, errors) {
if (errors === void 0) { errors = false; }
if (!hasValue(object)) {
return;
}
if ((isObject$1(object) || isArray$2(object)) && typeof fn !== 'function') {
var newObject = isArray$2(object) ? [] : {};
for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {
var key = _a[_i];
newObject[key] = fn(object[key], key, object);
}
return newObject;
}
if (errors) {
if (typeof fn !== 'function') {
console.error('forEachCopy error: Iterator must be a function.');
console.error('function', fn);
}
if (!isObject$1(object) && !isArray$2(object)) {
console.error('forEachCopy error: Input object must be an object or array.');
console.error('object', object);
}
}
}
function hasOwn(object, property) {
if (!object || !['number', 'string', 'symbol'].includes(typeof property) ||
(!isObject$1(object) && !isArray$2(object) && !isMap(object) && !isSet(object))) {
return false;
}
if (isMap(object) || isSet(object)) {
return object.has(property);
}
if (typeof property === 'number') {
if (isArray$2(object)) {
return object[property];
}
property = property + '';
}
return object.hasOwnProperty(property);
}
function mergeFilteredObject(targetObject, sourceObject, excludeKeys, keyFn, valFn) {
if (excludeKeys === void 0) { excludeKeys = []; }
if (keyFn === void 0) { keyFn = function (key) { return key; }; }
if (valFn === void 0) { valFn = function (val) { return val; }; }
if (!isObject$1(sourceObject)) {
return targetObject;
}
if (!isObject$1(targetObject)) {
targetObject = {};
}
for (var _i = 0, _a = Object.keys(sourceObject); _i < _a.length; _i++) {
var key = _a[_i];
if (!inArray(key, excludeKeys) && isDefined(sourceObject[key])) {
targetObject[keyFn(key)] = valFn(sourceObject[key]);
}
}
return targetObject;
}
function uniqueItems() {
var items = [];
for (var _i = 0; _i < arguments.length; _i++) {
items[_i] = arguments[_i];
}
var returnItems = [];
for (var _a = 0, items_1 = items; _a < items_1.length; _a++) {
var item = items_1[_a];
if (!returnItems.includes(item)) {
returnItems.push(item);
}
}
return returnItems;
}
function commonItems() {
var arrays = [];
for (var _i = 0; _i < arguments.length; _i++) {
arrays[_i] = arguments[_i];
}
var returnItems = null;
var _loop_1 = function (array) {
if (isString(array)) {
array = [array];
}
returnItems = returnItems === null ? array.slice() :
returnItems.filter(function (item) { return array.includes(item); });
if (!returnItems.length) {
return { value: [] };
}
};
for (var _a = 0, arrays_1 = arrays; _a < arrays_1.length; _a++) {
var array = arrays_1[_a];
var state_1 = _loop_1(array);
if (typeof state_1 === "object")
return state_1.value;
}
return returnItems;
}
function fixTitle(name) {
return name && toTitleCase(name.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/_/g, ' '));
}
function toTitleCase(input, forceWords) {
if (!isString(input)) {
return input;
}
var forceArray = ['a', 'an', 'and', 'as', 'at', 'but', 'by', 'en',
'for', 'if', 'in', 'nor', 'of', 'on', 'or', 'per', 'the', 'to', 'v', 'v.',
'vs', 'vs.', 'via'];
if (isString(forceWords)) {
forceWords = forceWords.split('|');
}
if (isArray$2(forceWords)) {
forceArray = forceArray.concat(forceWords);
}
var forceArrayLower = forceArray.map(function (w) { return w.toLowerCase(); });
var noInitialCase = input === input.toUpperCase() || input === input.toLowerCase();
var prevLastChar = '';
input = input.trim();
return input.replace(/[A-Za-z0-9\u00C0-\u00FF]+[^\s-]*/g, function (word, idx) {
if (!noInitialCase && word.slice(1).search(/[A-Z]|\../) !== -1) {
return word;
}
else {
var newWord = void 0;
var forceWord = forceArray[forceArrayLower.indexOf(word.toLowerCase())];
if (!forceWord) {
if (noInitialCase) {
if (word.slice(1).search(/\../) !== -1) {
newWord = word.toLowerCase();
}
else {
newWord = word[0].toUpperCase() + word.slice(1).toLowerCase();
}
}
else {
newWord = word[0].toUpperCase() + word.slice(1);
}
}
else if (forceWord === forceWord.toLowerCase() && (idx === 0 || idx + word.length === input.length ||
prevLastChar === ':' || input[idx - 1].search(/[^\s-]/) !== -1 ||
(input[idx - 1] !== '-' && input[idx + word.length] === '-'))) {
newWord = forceWord[0].toUpperCase() + forceWord.slice(1);
}
else {
newWord = forceWord;
}
prevLastChar = word.slice(-1);
return newWord;
}
});
}
var __assign$1 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var JsonPointer = (function () {
function JsonPointer() {
}
JsonPointer.get = function (object, pointer, startSlice, endSlice, getBoolean, errors) {
if (startSlice === void 0) { startSlice = 0; }
if (endSlice === void 0) { endSlice = null; }
if (getBoolean === void 0) { getBoolean = false; }
if (errors === void 0) { errors = false; }
if (object === null) {
return getBoolean ? false : undefined;
}
var keyArray = this.parse(pointer, errors);
if (typeof object === 'object' && keyArray !== null) {
var subObject = object;
if (startSlice >= keyArray.length || endSlice <= -keyArray.length) {
return object;
}
if (startSlice <= -keyArray.length) {
startSlice = 0;
}
if (!isDefined(endSlice) || endSlice >= keyArray.length) {
endSlice = keyArray.length;
}
keyArray = keyArray.slice(startSlice, endSlice);
for (var _i = 0, keyArray_1 = keyArray; _i < keyArray_1.length; _i++) {
var key = keyArray_1[_i];
if (key === '-' && isArray$2(subObject) && subObject.length) {
key = subObject.length - 1;
}
if (isMap(subObject) && subObject.has(key)) {
subObject = subObject.get(key);
}
else if (typeof subObject === 'object' && subObject !== null &&
hasOwn(subObject, key)) {
subObject = subObject[key];
}
else {
if (errors) {
console.error("get error: \"" + key + "\" key not found in object.");
console.error(pointer);
console.error(object);
}
return getBoolean ? false : undefined;
}
}
return getBoolean ? true : subObject;
}
if (errors && keyArray === null) {
console.error("get error: Invalid JSON Pointer: " + pointer);
}
if (errors && typeof object !== 'object') {
console.error('get error: Invalid object:');
console.error(object);
}
return getBoolean ? false : undefined;
};
JsonPointer.getCopy = function (object, pointer, startSlice, endSlice, getBoolean, errors) {
if (startSlice === void 0) { startSlice = 0; }
if (endSlice === void 0) { endSlice = null; }
if (getBoolean === void 0) { getBoolean = false; }
if (errors === void 0) { errors = false; }
var objectToCopy = this.get(object, pointer, startSlice, endSlice, getBoolean, errors);
return this.forEachDeepCopy(objectToCopy);
};
JsonPointer.getFirst = function (items, defaultValue, getCopy) {
if (defaultValue === void 0) { defaultValue = null; }
if (getCopy === void 0) { getCopy = false; }
if (isEmpty(items)) {
return;
}
if (isArray$2(items)) {
for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {
var item = items_1[_i];
if (isEmpty(item)) {
continue;
}
if (isArray$2(item) && item.length >= 2) {
if (isEmpty(item[0]) || isEmpty(item[1])) {
continue;
}
var value = getCopy ?
this.getCopy(item[0], item[1]) :
this.get(item[0], item[1]);
if (value) {
return value;
}
continue;
}
console.error('getFirst error: Input not in correct format.\n' +
'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');
return;
}
return defaultValue;
}
if (isMap(items)) {
for (var _a = 0, items_2 = items; _a < items_2.length; _a++) {
var _b = items_2[_a], object = _b[0], pointer = _b[1];
if (object === null || !this.isJsonPointer(pointer)) {
continue;
}
var value = getCopy ?
this.getCopy(object, pointer) :
this.get(object, pointer);
if (value) {
return value;
}
}
return defaultValue;
}
console.error('getFirst error: Input not in correct format.\n' +
'Should be: [ [ object1, pointer1 ], [ object 2, pointer2 ], etc... ]');
return defaultValue;
};
JsonPointer.getFirstCopy = function (items, defaultValue) {
if (defaultValue === void 0) { defaultValue = null; }
var firstCopy = this.getFirst(items, defaultValue, true);
return firstCopy;
};
JsonPointer.set = function (object, pointer, value, insert) {
if (insert === void 0) { insert = false; }
var keyArray = this.parse(pointer);
if (keyArray !== null && keyArray.length) {
var subObject = object;
for (var i = 0; i < keyArray.length - 1; ++i) {
var key = keyArray[i];
if (key === '-' && isArray$2(subObject)) {
key = subObject.length;
}
if (isMap(subObject) && subObject.has(key)) {
subObject = subObject.get(key);
}
else {
if (!hasOwn(subObject, key)) {
subObject[key] = (keyArray[i + 1].match(/^(\d+|-)$/)) ? [] : {};
}
subObject = subObject[key];
}
}
var lastKey = keyArray[keyArray.length - 1];
if (isArray$2(subObject) && lastKey === '-') {
subObject.push(value);
}
else if (insert && isArray$2(subObject) && !isNaN(+lastKey)) {
subObject.splice(lastKey, 0, value);
}
else if (isMap(subObject)) {
subObject.set(lastKey, value);
}
else {
subObject[lastKey] = value;
}
return object;
}
console.error("set error: Invalid JSON Pointer: " + pointer);
return object;
};
JsonPointer.setCopy = function (object, pointer, value, insert) {
if (insert === void 0) { insert = false; }
var keyArray = this.parse(pointer);
if (keyArray !== null) {
var newObject = copy(object);
var subObject = newObject;
for (var i = 0; i < keyArray.length - 1; ++i) {
var key = keyArray[i];
if (key === '-' && isArray$2(subObject)) {
key = subObject.length;
}
if (isMap(subObject) && subObject.has(key)) {
subObject.set(key, copy(subObject.get(key)));
subObject = subObject.get(key);
}
else {
if (!hasOwn(subObject, key)) {
subObject[key] = (keyArray[i + 1].match(/^(\d+|-)$/)) ? [] : {};
}
subObject[key] = copy(subObject[key]);
subObject = subObject[key];
}
}
var lastKey = keyArray[keyArray.length - 1];
if (isArray$2(subObject) && lastKey === '-') {
subObject.push(value);
}
else if (insert && isArray$2(subObject) && !isNaN(+lastKey)) {
subObject.splice(lastKey, 0, value);
}
else if (isMap(subObject)) {
subObject.set(lastKey, value);
}
else {
subObject[lastKey] = value;
}
return newObject;
}
console.error("setCopy error: Invalid JSON Pointer: " + pointer);
return object;
};
JsonPointer.insert = function (object, pointer, value) {
var updatedObject = this.set(object, pointer, value, true);
return updatedObject;
};
JsonPointer.insertCopy = function (object, pointer, value) {
var updatedObject = this.setCopy(object, pointer, value, true);
return updatedObject;
};
JsonPointer.remove = function (object, pointer) {
var keyArray = this.parse(pointer);
if (keyArray !== null && keyArray.length) {
var lastKey = keyArray.pop();
var parentObject = this.get(object, keyArray);
if (isArray$2(parentObject)) {
if (lastKey === '-') {
lastKey = parentObject.length - 1;
}
parentObject.splice(lastKey, 1);
}
else if (isObject$1(parentObject)) {
delete parentObject[lastKey];
}
return object;
}
console.error("remove error: Invalid JSON Pointer: " + pointer);
return object;
};
JsonPointer.has = function (object, pointer) {
var hasValue$$1 = this.get(object, pointer, 0, null, true);
return hasValue$$1;
};
JsonPointer.dict = function (object) {
var results = {};
this.forEachDeep(object, function (value, pointer) {
if (typeof value !== 'object') {
results[pointer] = value;
}
});
return results;
};
JsonPointer.forEachDeep = function (object, fn, bottomUp, pointer, rootObject) {
if (fn === void 0) { fn = function (v) { return v; }; }
if (bottomUp === void 0) { bottomUp = false; }
if (pointer === void 0) { pointer = ''; }
if (rootObject === void 0) { rootObject = object; }
if (typeof fn !== 'function') {
console.error("forEachDeep error: Iterator is not a function:", fn);
return;
}
if (!bottomUp) {
fn(object, pointer, rootObject);
}
if (isObject$1(object) || isArray$2(object)) {
for (var _i = 0, _a = Object.keys(object); _i < _a.length; _i++) {
var key = _a[_i];
var newPointer = pointer + '/' + this.escape(key);
this.forEachDeep(object[key], fn, bottomUp, newPointer, rootObject);
}
}
if (bottomUp) {
fn(object, pointer, rootObject);
}
};
JsonPointer.forEachDeepCopy = function (object, fn, bottomUp, pointer, rootObject) {
if (fn === void 0) { fn = function (v) { return v; }; }
if (bottomUp === void 0) { bottomUp = false; }
if (pointer === void 0) { pointer = ''; }
if (rootObject === void 0) { rootObject = object; }
if (typeof fn !== 'function') {
console.error("forEachDeepCopy error: Iterator is not a function:", fn);
return null;
}
if (isObject$1(object) || isArray$2(object)) {
var newObject = isArray$2(object) ? object.slice() : __assign$1({}, object);
if (!bottomUp) {
newObject = fn(newObject, pointer, rootObject);
}
for (var _i = 0, _a = Object.keys(newObject); _i < _a.length; _i++) {
var key = _a[_i];
var newPointer = pointer + '/' + this.escape(key);
newObject[key] = this.forEachDeepCopy(newObject[key], fn, bottomUp, newPointer, rootObject);
}
if (bottomUp) {
newObject = fn(newObject, pointer, rootObject);
}
return newObject;
}
else {
return fn(object, pointer, rootObject);
}
};
JsonPointer.escape = function (key) {
var escaped = key.toString().replace(/~/g, '~0').replace(/\//g, '~1');
return escaped;
};
JsonPointer.unescape = function (key) {
var unescaped = key.toString().replace(/~1/g, '/').replace(/~0/g, '~');
return unescaped;
};
JsonPointer.parse = function (pointer, errors) {
if (errors === void 0) { errors = false; }
if (!this.isJsonPointer(pointer)) {
if (errors) {
console.error("parse error: Invalid JSON Pointer: " + pointer);
}
return null;
}
if (isArray$2(pointer)) {
return pointer;
}
if (typeof pointer === 'string') {
if (pointer[0] === '#') {
pointer = pointer.slice(1);
}
if (pointer === '' || pointer === '/') {
return [];
}
return pointer.slice(1).split('/').map(this.unescape);
}
};
JsonPointer.compile = function (pointer, defaultValue, errors) {
var _this = this;
if (defaultValue === void 0) { defaultValue = ''; }
if (errors === void 0) { errors = false; }
if (pointer === '#') {
return '';
}
if (!this.isJsonPointer(pointer)) {
if (errors) {
console.error("compile error: Invalid JSON Pointer: " + pointer);
}
return null;
}
if (isArray$2(pointer)) {
if (pointer.length === 0) {
return '';
}
return '/' + pointer.map(function (key) { return key === '' ? defaultValue : _this.escape(key); }).join('/');
}
if (typeof pointer === 'string') {
if (pointer[0] === '#') {
pointer = pointer.slice(1);
}
return pointer;
}
};
JsonPointer.toKey = function (pointer, errors) {
if (errors === void 0) { errors = false; }
var keyArray = this.parse(pointer, errors);
if (keyArray === null) {
return null;
}
if (!keyArray.length) {
return '';
}
return keyArray[keyArray.length - 1];
};
JsonPointer.isJsonPointer = function (value) {
if (isArray$2(value)) {
return value.every(function (key) { return typeof key === 'string'; });
}
else if (isString(value)) {
if (value === '' || value === '#') {
return true;
}
if (value[0] === '/' || value.slice(0, 2) === '#/') {
return !/(~[^01]|~$)/g.test(value);
}
}
return false;
};
JsonPointer.isSubPointer = function (shortPointer, longPointer, trueIfMatching, errors) {
if (trueIfMatching === void 0) { trueIfMatching = false; }
if (errors === void 0) { errors = false; }
if (!this.isJsonPointer(shortPointer) || !this.isJsonPointer(longPointer)) {
if (errors) {
var invalid = '';
if (!this.isJsonPointer(shortPointer)) {
invalid += " 1: " + shortPointer;
}
if (!this.isJsonPointer(longPointer)) {
invalid += " 2: " + longPointer;
}
console.error("isSubPointer error: Invalid JSON Pointer " + invalid);
}
return;
}
shortPointer = this.compile(shortPointer, '', errors);
longPointer = this.compile(longPointer, '', errors);
return shortPointer === longPointer ? trueIfMatching :
shortPointer + "/" === longPointer.slice(0, shortPointer.length + 1);
};
JsonPointer.toIndexedPointer = function (genericPointer, indexArray, arrayMap) {
if (arrayMap === void 0) { arrayMap = null; }
if (this.isJsonPointer(genericPointer) && isArray$2(indexArray)) {
var indexedPointer_1 = this.compile(genericPointer);
if (isMap(arrayMap)) {
var arrayIndex_1 = 0;
return indexedPointer_1.replace(/\/\-(?=\/|$)/g, function (key, stringIndex) {
return arrayMap.has(indexedPointer_1.slice(0, stringIndex)) ?
'/' + indexArray[arrayIndex_1++] : key;
});
}
else {
for (var _i = 0, indexArray_1 = indexArray; _i < indexArray_1.length; _i++) {
var pointerIndex = indexArray_1[_i];
indexedPointer_1 = indexedPointer_1.replace('/-', '/' + pointerIndex);
}
return indexedPointer_1;
}
}
if (!this.isJsonPointer(genericPointer)) {
console.error("toIndexedPointer error: Invalid JSON Pointer: " + genericPointer);
}
if (!isArray$2(indexArray)) {
console.error("toIndexedPointer error: Invalid indexArray: " + indexArray);
}
};
JsonPointer.toGenericPointer = function (indexedPointer, arrayMap) {
if (arrayMap === void 0) { arrayMap = new Map(); }
if (this.isJsonPointer(indexedPointer) && isMap(arrayMap)) {
var pointerArray = this.parse(indexedPointer);
for (var i = 1; i < pointerArray.length; i++) {
var subPointer = this.compile(pointerArray.slice(0, i));
if (arrayMap.has(subPointer) &&
arrayMap.get(subPointer) <= +pointerArray[i]) {
pointerArray[i] = '-';
}
}
return this.compile(pointerArray);
}
if (!this.isJsonPointer(indexedPointer)) {
console.error("toGenericPointer error: invalid JSON Pointer: " + indexedPointer);
}
if (!isMap(arrayMap)) {
console.error("toGenericPointer error: invalid arrayMap: " + arrayMap);
}
};
JsonPointer.toControlPointer = function (dataPointer, formGroup, controlMustExist) {
if (controlMustExist === void 0) { controlMustExist = false; }
var dataPointerArray = this.parse(dataPointer);
var controlPointerArray = [];
var subGroup = formGroup;
if (dataPointerArray !== null) {
for (var _i = 0, dataPointerArray_1 = dataPointerArray; _i < dataPointerArray_1.length; _i++) {
var key = dataPointerArray_1[_i];
if (hasOwn(subGroup, 'controls')) {
controlPointerArray.push('controls');
subGroup = subGroup.controls;
}
if (isArray$2(subGroup) && (key === '-')) {
controlPointerArray.push((subGroup.length - 1).toString());
subGroup = subGroup[subGroup.length - 1];
}
else if (hasOwn(subGroup, key)) {
controlPointerArray.push(key);
subGroup = subGroup[key];
}
else if (controlMustExist) {
console.error("toControlPointer error: Unable to find \"" + key + "\" item in FormGroup.");
console.error(dataPointer);
console.error(formGroup);
return;
}
else {
controlPointerArray.push(key);
subGroup = { controls: {} };
}
}
return this.compile(controlPointerArray);
}
console.error("toControlPointer error: Invalid JSON Pointer: " + dataPointer);
};
JsonPointer.toSchemaPointer = function (dataPointer, schema) {
if (this.isJsonPointer(dataPointer) && typeof schema === 'object') {
var pointerArray = this.parse(dataPointer);
if (!pointerArray.length) {
return '';
}
var firstKey = pointerArray.shift();
if (schema.type === 'object' || schema.properties || schema.additionalProperties) {
if ((schema.properties || {})[firstKey]) {
return "/properties/" + this.escape(firstKey) +
this.toSchemaPointer(pointerArray, schema.properties[firstKey]);
}
else if (schema.additionalProperties) {
return '/additionalProperties' +
this.toSchemaPointer(pointerArray, schema.additionalProperties);
}
}
if ((schema.type === 'array' || schema.items) &&
(isNumber(firstKey) || firstKey === '-' || firstKey === '')) {
var arrayItem = firstKey === '-' || firstKey === '' ? 0 : +firstKey;
if (isArray$2(schema.items)) {
if (arrayItem < schema.items.length) {
return '/items/' + arrayItem +
this.toSchemaPointer(pointerArray, schema.items[arrayItem]);
}
else if (schema.additionalItems) {
return '/additionalItems' +
this.toSchemaPointer(pointerArray, schema.additionalItems);
}
}
else if (isObject$1(schema.items)) {
return '/items' + this.toSchemaPointer(pointerArray, schema.items);
}
else if (isObject$1(schema.additionalItems)) {
return '/additionalItems' +
this.toSchemaPointer(pointerArray, schema.additionalItems);
}
}
console.error("toSchemaPointer error: Data pointer " + dataPointer + " " +
("not compatible with schema " + schema));
return null;
}
if (!this.isJsonPointer(dataPointer)) {
console.error("toSchemaPointer error: Invalid JSON Pointer: " + dataPointer);
}
if (typeof schema !== 'object') {
console.error("toSchemaPointer error: Invalid JSON Schema: " + schema);
}
return null;
};
JsonPointer.toDataPointer = function (schemaPointer, schema, errors) {
if (errors === void 0) { errors = false; }
if (this.isJsonPointer(schemaPointer) && typeof schema === 'object' &&
this.has(schema, schemaPointer)) {
var pointerArray = this.parse(schemaPointer);
if (!pointerArray.length) {
return '';
}
var firstKey = pointerArray.shift();
if (firstKey === 'properties' ||
(firstKey === 'items' && isArray$2(schema.items))) {
var secondKey = pointerArray.shift();
var pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey][secondKey]);
return pointerSuffix === null ? null : '/' + secondKey + pointerSuffix;
}
else if (firstKey === 'additionalItems' ||
(firstKey === 'items' && isObject$1(schema.items))) {
var pointerSuffix = this.toDataPointer(pointerArray, schema[firstKey]);
return pointerSuffix === null ? null : '/-' + pointerSuffix;
}
else if (['allOf', 'anyOf', 'oneOf'].includes(firstKey)) {
var secondKey = pointerArray.shift();
return this.toDataPointer(pointerArray, schema[firstKey][secondKey]);
}
else if (firstKey === 'not') {
return this.toDataPointer(pointerArray, schema[firstKey]);
}
else if (['contains', 'definitions', 'dependencies', 'additionalItems',
'additionalProperties', 'patternProperties', 'propertyNames'].includes(firstKey)) {
if (errors) {
console.error("toDataPointer error: Ambiguous location");
}
}
return '';
}
if (errors) {
if (!this.isJsonPointer(schemaPointer)) {
console.error("toDataPointer error: Invalid JSON Pointer: " + schemaPointer);
}
if (typeof schema !== 'object') {
console.error("toDataPointer error: Invalid JSON Schema: " + schema);
}
if (typeof schema !== 'object') {
console.error("toDataPointer error: Pointer " + schemaPointer + " invalid for Schema: " + schema);
}
}
return null;
};
JsonPointer.parseObjectPath = function (path) {
if (isArray$2(path)) {
return path;
}
if (this.isJsonPointer(path)) {
return this.parse(path);
}
if (typeof path === 'string') {
var index = 0;
var parts = [];
while (index < path.length) {
var nextDot = path.indexOf('.', index);
var nextOB = path.indexOf('[', index);
if (nextDot === -1 && nextOB === -1) {
parts.push(path.slice(index));
index = path.length;
}
else if (nextDot !== -1 && (nextDot < nextOB || nextOB === -1)) {
parts.push(path.slice(index, nextDot));
index = nextDot + 1;
}
else {
if (nextOB > index) {
parts.push(path.slice(index, nextOB));
index = nextOB;
}
var quote = path.charAt(nextOB + 1);
if (quote === '"' || quote === "'") {
var nextCB = path.indexOf(quote + ']', nextOB);
while (nextCB !== -1 && path.charAt(nextCB - 1) === '\\') {
nextCB = path.indexOf(quote + ']', nextCB + 2);
}
if (nextCB === -1) {
nextCB = path.length;
}
parts.push(path.slice(index + 2, nextCB)
.replace(new RegExp('\\' + quote, 'g'), quote));
index = nextCB + 2;
}
else {
var nextCB = path.indexOf(']', nextOB);
if (nextCB === -1) {
nextCB = path.length;
}
parts.push(path.slice(index + 1, nextCB));
index = nextCB + 1;
}
if (path.charAt(index) === '.') {
index++;
}
}
}
return parts;
}
console.error('parseObjectPath error: Input object path must be a string.');
};
JsonPointer.decorators = [
{ type: Injectable },
];
JsonPointer.ctorParameters = function () { return []; };
return JsonPointer;
}());
var __extends$3 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @extends {Ignored}
* @hide true
*/
var EmptyObservable = (function (_super) {
__extends$3(EmptyObservable, _super);
function EmptyObservable(scheduler) {
_super.call(this);
this.scheduler = scheduler;
}
/**
* Creates an Observable that emits no items to the Observer and immediately
* emits a complete notification.
*
* <span class="informal">Just emits 'complete', and nothing else.
* </span>
*
* <img src="./img/empty.png" width="100%">
*
* This static operator is useful for creating a simple Observable that only
* emits the complete notification. It can be used for composing with other
* Observables, such as in a {@link mergeMap}.
*
* @example <caption>Emit the number 7, then complete.</caption>
* var result = Rx.Observable.empty().startWith(7);
* result.subscribe(x => console.log(x));
*
* @example <caption>Map and flatten only odd numbers to the sequence 'a', 'b', 'c'</caption>
* var interval = Rx.Observable.interval(1000);
* var result = interval.mergeMap(x =>
* x % 2 === 1 ? Rx.Observable.of('a', 'b', 'c') : Rx.Observable.empty()
* );
* result.subscribe(x => console.log(x));
*
* // Results in the following to the console:
* // x is equal to the count on the interval eg(0,1,2,3,...)
* // x will occur every 1000ms
* // if x % 2 is equal to 1 print abc
* // if x % 2 is not equal to 1 nothing will be output
*
* @see {@link create}
* @see {@link never}
* @see {@link of}
* @see {@link throw}
*
* @param {Scheduler} [scheduler] A {@link IScheduler} to use for scheduling
* the emission of the complete notification.
* @return {Observable} An "empty" Observable: emits only the complete
* notification.
* @static true
* @name empty
* @owner Observable
*/
EmptyObservable.create = function (scheduler) {
return new EmptyObservable(scheduler);
};
EmptyObservable.dispatch = function (arg) {
var subscriber = arg.subscriber;
subscriber.complete();
};
EmptyObservable.prototype._subscribe = function (subscriber) {
var scheduler = this.scheduler;
if (scheduler) {
return scheduler.schedule(EmptyObservable.dispatch, 0, { subscriber: subscriber });
}
else {
subscriber.complete();
}
};
return EmptyObservable;
}(Observable_1.Observable));
var EmptyObservable_2 = EmptyObservable;
var EmptyObservable_1 = {
EmptyObservable: EmptyObservable_2
};
var isArrayLike_1 = (function (x) { return x && typeof x.length === 'number'; });
var isArrayLike = {
isArrayLike: isArrayLike_1
};
function isPromise$1(value) {
return value && typeof value.subscribe !== 'function' && typeof value.then === 'function';
}
var isPromise_2 = isPromise$1;
var isPromise_1 = {
isPromise: isPromise_2
};
var iterator = createCommonjsModule(function (module, exports) {
function symbolIteratorPonyfill(root$$2) {
var Symbol = root$$2.Symbol;
if (typeof Symbol === 'function') {
if (!Symbol.iterator) {
Symbol.iterator = Symbol('iterator polyfill');
}
return Symbol.iterator;
}
else {
// [for Mozilla Gecko 27-35:](https://mzl.la/2ewE1zC)
var Set_1 = root$$2.Set;
if (Set_1 && typeof new Set_1()['@@iterator'] === 'function') {
return '@@iterator';
}
var Map_1 = root$$2.Map;
// required for compatability with es6-shim
if (Map_1) {
var keys = Object.getOwnPropertyNames(Map_1.prototype);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
// according to spec, Map.prototype[@@iterator] and Map.orototype.entries must be equal.
if (key !== 'entries' && key !== 'size' && Map_1.prototype[key] === Map_1.prototype['entries']) {
return key;
}
}
}
return '@@iterator';
}
}
exports.symbolIteratorPonyfill = symbolIteratorPonyfill;
exports.iterator = symbolIteratorPonyfill(root.root);
/**
* @deprecated use iterator instead
*/
exports.$$iterator = exports.iterator;
});
var iterator_1 = iterator.symbolIteratorPonyfill;
var iterator_2 = iterator.iterator;
var iterator_3 = iterator.$$iterator;
var __extends$4 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var InnerSubscriber = (function (_super) {
__extends$4(InnerSubscriber, _super);
function InnerSubscriber(parent, outerValue, outerIndex) {
_super.call(this);
this.parent = parent;
this.outerValue = outerValue;
this.outerIndex = outerIndex;
this.index = 0;
}
InnerSubscriber.prototype._next = function (value) {
this.parent.notifyNext(this.outerValue, value, this.outerIndex, this.index++, this);
};
InnerSubscriber.prototype._error = function (error) {
this.parent.notifyError(error, this);
this.unsubscribe();
};
InnerSubscriber.prototype._complete = function () {
this.parent.notifyComplete(this);
this.unsubscribe();
};
return InnerSubscriber;
}(Subscriber_1.Subscriber));
var InnerSubscriber_2 = InnerSubscriber;
var InnerSubscriber_1 = {
InnerSubscriber: InnerSubscriber_2
};
function subscribeToResult(outerSubscriber, result, outerValue, outerIndex) {
var destination = new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex);
if (destination.closed) {
return null;
}
if (result instanceof Observable_1.Observable) {
if (result._isScalar) {
destination.next(result.value);
destination.complete();
return null;
}
else {
destination.syncErrorThrowable = true;
return result.subscribe(destination);
}
}
else if (isArrayLike.isArrayLike(result)) {
for (var i = 0, len = result.length; i < len && !destination.closed; i++) {
destination.next(result[i]);
}
if (!destination.closed) {
destination.complete();
}
}
else if (isPromise_1.isPromise(result)) {
result.then(function (value) {
if (!destination.closed) {
destination.next(value);
destination.complete();
}
}, function (err) { return destination.error(err); })
.then(null, function (err) {
// Escaping the Promise trap: globally throw unhandled errors
root.root.setTimeout(function () { throw err; });
});
return destination;
}
else if (result && typeof result[iterator.iterator] === 'function') {
var iterator$$1 = result[iterator.iterator]();
do {
var item = iterator$$1.next();
if (item.done) {
destination.complete();
break;
}
destination.next(item.value);
if (destination.closed) {
break;
}
} while (true);
}
else if (result && typeof result[observable.observable] === 'function') {
var obs = result[observable.observable]();
if (typeof obs.subscribe !== 'function') {
destination.error(new TypeError('Provided object does not correctly implement Symbol.observable'));
}
else {
return obs.subscribe(new InnerSubscriber_1.InnerSubscriber(outerSubscriber, outerValue, outerIndex));
}
}
else {
var value = isObject_1.isObject(result) ? 'an invalid object' : "'" + result + "'";
var msg = ("You provided " + value + " where a stream was expected.")
+ ' You can provide an Observable, Promise, Array, or Iterable.';
destination.error(new TypeError(msg));
}
return null;
}
var subscribeToResult_2 = subscribeToResult;
var subscribeToResult_1 = {
subscribeToResult: subscribeToResult_2
};
var __extends$5 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var OuterSubscriber = (function (_super) {
__extends$5(OuterSubscriber, _super);
function OuterSubscriber() {
_super.apply(this, arguments);
}
OuterSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
this.destination.next(innerValue);
};
OuterSubscriber.prototype.notifyError = function (error, innerSub) {
this.destination.error(error);
};
OuterSubscriber.prototype.notifyComplete = function (innerSub) {
this.destination.complete();
};
return OuterSubscriber;
}(Subscriber_1.Subscriber));
var OuterSubscriber_2 = OuterSubscriber;
var OuterSubscriber_1 = {
OuterSubscriber: OuterSubscriber_2
};
var __extends$6 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @extends {Ignored}
* @hide true
*/
var ForkJoinObservable = (function (_super) {
__extends$6(ForkJoinObservable, _super);
function ForkJoinObservable(sources, resultSelector) {
_super.call(this);
this.sources = sources;
this.resultSelector = resultSelector;
}
/* tslint:enable:max-line-length */
/**
* Joins last values emitted by passed Observables.
*
* <span class="informal">Wait for Observables to complete and then combine last values they emitted.</span>
*
* <img src="./img/forkJoin.png" width="100%">
*
* `forkJoin` is an operator that takes any number of Observables which can be passed either as an array
* or directly as arguments. If no input Observables are provided, resulting stream will complete
* immediately.
*
* `forkJoin` will wait for all passed Observables to complete and then it will emit an array with last
* values from corresponding Observables. So if you pass `n` Observables to the operator, resulting
* array will have `n` values, where first value is the last thing emitted by the first Observable,
* second value is the last thing emitted by the second Observable and so on. That means `forkJoin` will
* not emit more than once and it will complete after that. If you need to emit combined values not only
* at the end of lifecycle of passed Observables, but also throughout it, try out {@link combineLatest}
* or {@link zip} instead.
*
* In order for resulting array to have the same length as the number of input Observables, whenever any of
* that Observables completes without emitting any value, `forkJoin` will complete at that moment as well
* and it will not emit anything either, even if it already has some last values from other Observables.
* Conversely, if there is an Observable that never completes, `forkJoin` will never complete as well,
* unless at any point some other Observable completes without emitting value, which brings us back to
* the previous case. Overall, in order for `forkJoin` to emit a value, all Observables passed as arguments
* have to emit something at least once and complete.
*
* If any input Observable errors at some point, `forkJoin` will error as well and all other Observables
* will be immediately unsubscribed.
*
* Optionally `forkJoin` accepts project function, that will be called with values which normally
* would land in emitted array. Whatever is returned by project function, will appear in output
* Observable instead. This means that default project can be thought of as a function that takes
* all its arguments and puts them into an array. Note that project function will be called only
* when output Observable is supposed to emit a result.
*
* @example <caption>Use forkJoin with operator emitting immediately</caption>
* const observable = Rx.Observable.forkJoin(
* Rx.Observable.of(1, 2, 3, 4),
* Rx.Observable.of(5, 6, 7, 8)
* );
* observable.subscribe(
* value => console.log(value),
* err => {},
* () => console.log('This is how it ends!')
* );
*
* // Logs:
* // [4, 8]
* // "This is how it ends!"
*
*
* @example <caption>Use forkJoin with operator emitting after some time</caption>
* const observable = Rx.Observable.forkJoin(
* Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete
* Rx.Observable.interval(500).take(4) // emit 0, 1, 2, 3 every half a second and complete
* );
* observable.subscribe(
* value => console.log(value),
* err => {},
* () => console.log('This is how it ends!')
* );
*
* // Logs:
* // [2, 3] after 3 seconds
* // "This is how it ends!" immediately after
*
*
* @example <caption>Use forkJoin with project function</caption>
* const observable = Rx.Observable.forkJoin(
* Rx.Observable.interval(1000).take(3), // emit 0, 1, 2 every second and complete
* Rx.Observable.interval(500).take(4), // emit 0, 1, 2, 3 every half a second and complete
* (n, m) => n + m
* );
* observable.subscribe(
* value => console.log(value),
* err => {},
* () => console.log('This is how it ends!')
* );
*
* // Logs:
* // 5 after 3 seconds
* // "This is how it ends!" immediately after
*
* @see {@link combineLatest}
* @see {@link zip}
*
* @param {...SubscribableOrPromise} sources Any number of Observables provided either as an array or as an arguments
* passed directly to the operator.
* @param {function} [project] Function that takes values emitted by input Observables and returns value
* that will appear in resulting Observable instead of default array.
* @return {Observable} Observable emitting either an array of last values emitted by passed Observables
* or value from project function.
* @static true
* @name forkJoin
* @owner Observable
*/
ForkJoinObservable.create = function () {
var sources = [];
for (var _i = 0; _i < arguments.length; _i++) {
sources[_i - 0] = arguments[_i];
}
if (sources === null || arguments.length === 0) {
return new EmptyObservable_1.EmptyObservable();
}
var resultSelector = null;
if (typeof sources[sources.length - 1] === 'function') {
resultSelector = sources.pop();
}
// if the first and only other argument besides the resultSelector is an array
// assume it's been called with `forkJoin([obs1, obs2, obs3], resultSelector)`
if (sources.length === 1 && isArray.isArray(sources[0])) {
sources = sources[0];
}
if (sources.length === 0) {
return new EmptyObservable_1.EmptyObservable();
}
return new ForkJoinObservable(sources, resultSelector);
};
ForkJoinObservable.prototype._subscribe = function (subscriber) {
return new ForkJoinSubscriber(subscriber, this.sources, this.resultSelector);
};
return ForkJoinObservable;
}(Observable_1.Observable));
var ForkJoinObservable_2 = ForkJoinObservable;
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var ForkJoinSubscriber = (function (_super) {
__extends$6(ForkJoinSubscriber, _super);
function ForkJoinSubscriber(destination, sources, resultSelector) {
_super.call(this, destination);
this.sources = sources;
this.resultSelector = resultSelector;
this.completed = 0;
this.haveValues = 0;
var len = sources.length;
this.total = len;
this.values = new Array(len);
for (var i = 0; i < len; i++) {
var source = sources[i];
var innerSubscription = subscribeToResult_1.subscribeToResult(this, source, null, i);
if (innerSubscription) {
innerSubscription.outerIndex = i;
this.add(innerSubscription);
}
}
}
ForkJoinSubscriber.prototype.notifyNext = function (outerValue, innerValue, outerIndex, innerIndex, innerSub) {
this.values[outerIndex] = innerValue;
if (!innerSub._hasValue) {
innerSub._hasValue = true;
this.haveValues++;
}
};
ForkJoinSubscriber.prototype.notifyComplete = function (innerSub) {
var destination = this.destination;
var _a = this, haveValues = _a.haveValues, resultSelector = _a.resultSelector, values = _a.values;
var len = values.length;
if (!innerSub._hasValue) {
destination.complete();
return;
}
this.completed++;
if (this.completed !== len) {
return;
}
if (haveValues === len) {
var value = resultSelector ? resultSelector.apply(this, values) : values;
destination.next(value);
}
destination.complete();
};
return ForkJoinSubscriber;
}(OuterSubscriber_1.OuterSubscriber));
var ForkJoinObservable_1 = {
ForkJoinObservable: ForkJoinObservable_2
};
var forkJoin_1 = ForkJoinObservable_1.ForkJoinObservable.create;
var __extends$7 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* Applies a given `project` function to each value emitted by the source
* Observable, and emits the resulting values as an Observable.
*
* <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
* it passes each source value through a transformation function to get
* corresponding output values.</span>
*
* <img src="./img/map.png" width="100%">
*
* Similar to the well known `Array.prototype.map` function, this operator
* applies a projection to each value and emits that projection in the output
* Observable.
*
* @example <caption>Map every click to the clientX position of that click</caption>
* var clicks = Rx.Observable.fromEvent(document, 'click');
* var positions = clicks.map(ev => ev.clientX);
* positions.subscribe(x => console.log(x));
*
* @see {@link mapTo}
* @see {@link pluck}
*
* @param {function(value: T, index: number): R} project The function to apply
* to each `value` emitted by the source Observable. The `index` parameter is
* the number `i` for the i-th emission that has happened since the
* subscription, starting from the number `0`.
* @param {any} [thisArg] An optional argument to define what `this` is in the
* `project` function.
* @return {Observable<R>} An Observable that emits the values from the source
* Observable transformed by the given `project` function.
* @method map
* @owner Observable
*/
function map$1(project, thisArg) {
return function mapOperation(source) {
if (typeof project !== 'function') {
throw new TypeError('argument is not a function. Are you looking for `mapTo()`?');
}
return source.lift(new MapOperator(project, thisArg));
};
}
var map_2 = map$1;
var MapOperator = (function () {
function MapOperator(project, thisArg) {
this.project = project;
this.thisArg = thisArg;
}
MapOperator.prototype.call = function (subscriber, source) {
return source.subscribe(new MapSubscriber(subscriber, this.project, this.thisArg));
};
return MapOperator;
}());
var MapOperator_1 = MapOperator;
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var MapSubscriber = (function (_super) {
__extends$7(MapSubscriber, _super);
function MapSubscriber(destination, project, thisArg) {
_super.call(this, destination);
this.project = project;
this.count = 0;
this.thisArg = thisArg || this;
}
// NOTE: This looks unoptimized, but it's actually purposefully NOT
// using try/catch optimizations.
MapSubscriber.prototype._next = function (value) {
var result;
try {
result = this.project.call(this.thisArg, value, this.count++);
}
catch (err) {
this.destination.error(err);
return;
}
this.destination.next(result);
};
return MapSubscriber;
}(Subscriber_1.Subscriber));
var map_1 = {
map: map_2,
MapOperator: MapOperator_1
};
/**
* Applies a given `project` function to each value emitted by the source
* Observable, and emits the resulting values as an Observable.
*
* <span class="informal">Like [Array.prototype.map()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map),
* it passes each source value through a transformation function to get
* corresponding output values.</span>
*
* <img src="./img/map.png" width="100%">
*
* Similar to the well known `Array.prototype.map` function, this operator
* applies a projection to each value and emits that projection in the output
* Observable.
*
* @example <caption>Map every click to the clientX position of that click</caption>
* var clicks = Rx.Observable.fromEvent(document, 'click');
* var positions = clicks.map(ev => ev.clientX);
* positions.subscribe(x => console.log(x));
*
* @see {@link mapTo}
* @see {@link pluck}
*
* @param {function(value: T, index: number): R} project The function to apply
* to each `value` emitted by the source Observable. The `index` parameter is
* the number `i` for the i-th emission that has happened since the
* subscription, starting from the number `0`.
* @param {any} [thisArg] An optional argument to define what `this` is in the
* `project` function.
* @return {Observable<R>} An Observable that emits the values from the source
* Observable transformed by the given `project` function.
* @method map
* @owner Observable
*/
function map$2(project, thisArg) {
return map_1.map(project, thisArg)(this);
}
var map_3 = map$2;
var jsonSchemaFormatTests = {
'date': /^\d\d\d\d-[0-1]\d-[0-3]\d$/,
'time': /^[0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
'date-time': /^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d(?::[0-5]\d)?(?:\.\d+)?(?:z|[+-]\d\d:\d\d)?$/i,
'email': /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i,
'hostname': /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i,
'ipv4': /^(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)$/,
'ipv6': /^\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(?:\.(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(?:%.+)?\s*$/i,
'uri': /^(?:[a-z][a-z0-9+-.]*)(?::|\/)\/?[^\s]*$/i,
'uri-reference': /^(?:(?:[a-z][a-z0-9+-.]*:)?\/\/)?[^\s]*$/i,
'uri-template': /^(?:(?:[^\x00-\x20"'<>%\\^`{|}]|%[0-9a-f]{2})|\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\*)?)*\})*$/i,
'url': /^(?:(?:http[s\u017F]?|ftp):\/\/)(?:(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+(?::(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?@)?(?:(?!10(?:\.[0-9]{1,3}){3})(?!127(?:\.[0-9]{1,3}){3})(?!169\.254(?:\.[0-9]{1,3}){2})(?!192\.168(?:\.[0-9]{1,3}){2})(?!172\.(?:1[6-9]|2[0-9]|3[01])(?:\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)(?:\.(?:(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+-?)*(?:[0-9KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])+)*(?:\.(?:(?:[KSa-z\xA1-\uD7FF\uE000-\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\/(?:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uD7FF\uE000-\uFEFE\uFF00-\uFFFF]|[\uD800-\uDBFF][\uDC00-\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF])*)?$/i,
'uuid': /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i,
'color': /^\s*(#(?:[\da-f]{3}){1,2}|rgb\((?:\d{1,3},\s*){2}\d{1,3}\)|rgba\((?:\d{1,3},\s*){3}\d*\.?\d+\)|hsl\(\d{1,3}(?:,\s*\d{1,3}%){2}\)|hsla\(\d{1,3}(?:,\s*\d{1,3}%){2},\s*\d*\.?\d+\))\s*$/gi,
'json-pointer': /^(?:\/(?:[^~/]|~0|~1)*)*$|^#(?:\/(?:[a-z0-9_\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i,
'relative-json-pointer': /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/,
'regex': function (str) {
if (/[^\\]\\Z/.test(str)) {
return false;
}
try {
return true;
}
catch (e) {
return false;
}
}
};
var JsonValidators = (function () {
function JsonValidators() {
}
JsonValidators.required = function (input) {
if (input === undefined) {
input = true;
}
switch (input) {
case true:
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (invert) {
return null;
}
return hasValue(control.value) ? null : { 'required': true };
};
case false:
return JsonValidators.nullValidator;
default:
return hasValue(input.value) ? null : { 'required': true };
}
};
JsonValidators.type = function (requiredType) {
if (!hasValue(requiredType)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = isArray$2(requiredType) ?
requiredType.some(function (type) { return isType(currentValue, type); }) :
isType(currentValue, requiredType);
return xor(isValid, invert) ?
null : { 'type': { requiredType: requiredType, currentValue: currentValue } };
};
};
JsonValidators.enum = function (allowedValues) {
if (!isArray$2(allowedValues)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isEqual$$1 = function (enumValue, inputValue) {
return enumValue === inputValue ||
(isNumber(enumValue) && +inputValue === +enumValue) ||
(isBoolean(enumValue, 'strict') &&
toJavaScriptType(inputValue, 'boolean') === enumValue) ||
(enumValue === null && !hasValue(inputValue)) ||
isEqual(enumValue, inputValue);
};
var isValid = isArray$2(currentValue) ?
currentValue.every(function (inputValue) {
return allowedValues.some(function (enumValue) {
return isEqual$$1(enumValue, inputValue);
});
}) :
allowedValues.some(function (enumValue) { return isEqual$$1(enumValue, currentValue); });
return xor(isValid, invert) ?
null : { 'enum': { allowedValues: allowedValues, currentValue: currentValue } };
};
};
JsonValidators.const = function (requiredValue) {
if (!hasValue(requiredValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isEqual$$1 = function (constValue, inputValue) {
return constValue === inputValue ||
isNumber(constValue) && +inputValue === +constValue ||
isBoolean(constValue, 'strict') &&
toJavaScriptType(inputValue, 'boolean') === constValue ||
constValue === null && !hasValue(inputValue);
};
var isValid = isEqual$$1(requiredValue, currentValue);
return xor(isValid, invert) ?
null : { 'const': { requiredValue: requiredValue, currentValue: currentValue } };
};
};
JsonValidators.minLength = function (minimumLength) {
if (!hasValue(minimumLength)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentLength = isString(control.value) ? control.value.length : 0;
var isValid = currentLength >= minimumLength;
return xor(isValid, invert) ?
null : { 'minLength': { minimumLength: minimumLength, currentLength: currentLength } };
};
};
JsonValidators.maxLength = function (maximumLength) {
if (!hasValue(maximumLength)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var currentLength = isString(control.value) ? control.value.length : 0;
var isValid = currentLength <= maximumLength;
return xor(isValid, invert) ?
null : { 'maxLength': { maximumLength: maximumLength, currentLength: currentLength } };
};
};
JsonValidators.pattern = function (pattern, wholeString) {
if (wholeString === void 0) { wholeString = false; }
if (!hasValue(pattern)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var regex;
var requiredPattern;
if (typeof pattern === 'string') {
requiredPattern = (wholeString) ? "^" + pattern + "$" : pattern;
regex = new RegExp(requiredPattern);
}
else {
requiredPattern = pattern.toString();
regex = pattern;
}
var currentValue = control.value;
var isValid = isString(currentValue) ? regex.test(currentValue) : false;
return xor(isValid, invert) ?
null : { 'pattern': { requiredPattern: requiredPattern, currentValue: currentValue } };
};
};
JsonValidators.format = function (requiredFormat) {
if (!hasValue(requiredFormat)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var isValid;
var currentValue = control.value;
if (isString(currentValue)) {
var formatTest = jsonSchemaFormatTests[requiredFormat];
if (typeof formatTest === 'object') {
isValid = formatTest.test(currentValue);
}
else if (typeof formatTest === 'function') {
isValid = formatTest(currentValue);
}
else {
console.error("format validator error: \"" + requiredFormat + "\" is not a recognized format.");
isValid = true;
}
}
else {
isValid = ['date', 'time', 'date-time'].includes(requiredFormat) &&
Object.prototype.toString.call(currentValue) === '[object Date]';
}
return xor(isValid, invert) ?
null : { 'format': { requiredFormat: requiredFormat, currentValue: currentValue } };
};
};
JsonValidators.minimum = function (minimumValue) {
if (!hasValue(minimumValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = !isNumber(currentValue) || currentValue >= minimumValue;
return xor(isValid, invert) ?
null : { 'minimum': { minimumValue: minimumValue, currentValue: currentValue } };
};
};
JsonValidators.exclusiveMinimum = function (exclusiveMinimumValue) {
if (!hasValue(exclusiveMinimumValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = !isNumber(currentValue) || +currentValue < exclusiveMinimumValue;
return xor(isValid, invert) ?
null : { 'exclusiveMinimum': { exclusiveMinimumValue: exclusiveMinimumValue, currentValue: currentValue } };
};
};
JsonValidators.maximum = function (maximumValue) {
if (!hasValue(maximumValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = !isNumber(currentValue) || +currentValue <= maximumValue;
return xor(isValid, invert) ?
null : { 'maximum': { maximumValue: maximumValue, currentValue: currentValue } };
};
};
JsonValidators.exclusiveMaximum = function (exclusiveMaximumValue) {
if (!hasValue(exclusiveMaximumValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = !isNumber(currentValue) || +currentValue < exclusiveMaximumValue;
return xor(isValid, invert) ?
null : { 'exclusiveMaximum': { exclusiveMaximumValue: exclusiveMaximumValue, currentValue: currentValue } };
};
};
JsonValidators.multipleOf = function (multipleOfValue) {
if (!hasValue(multipleOfValue)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentValue = control.value;
var isValid = isNumber(currentValue) &&
currentValue % multipleOfValue === 0;
return xor(isValid, invert) ?
null : { 'multipleOf': { multipleOfValue: multipleOfValue, currentValue: currentValue } };
};
};
JsonValidators.minProperties = function (minimumProperties) {
if (!hasValue(minimumProperties)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentProperties = Object.keys(control.value).length || 0;
var isValid = currentProperties >= minimumProperties;
return xor(isValid, invert) ?
null : { 'minProperties': { minimumProperties: minimumProperties, currentProperties: currentProperties } };
};
};
JsonValidators.maxProperties = function (maximumProperties) {
if (!hasValue(maximumProperties)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var currentProperties = Object.keys(control.value).length || 0;
var isValid = currentProperties <= maximumProperties;
return xor(isValid, invert) ?
null : { 'maxProperties': { maximumProperties: maximumProperties, currentProperties: currentProperties } };
};
};
JsonValidators.dependencies = function (dependencies) {
if (getType(dependencies) !== 'object' || isEmpty(dependencies)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var allErrors = _mergeObjects(forEachCopy(dependencies, function (value, requiringField) {
if (!hasValue(control.value[requiringField])) {
return null;
}
var requiringFieldErrors = {};
var requiredFields;
var properties = {};
if (getType(dependencies[requiringField]) === 'array') {
requiredFields = dependencies[requiringField];
}
else if (getType(dependencies[requiringField]) === 'object') {
requiredFields = dependencies[requiringField]['required'] || [];
properties = dependencies[requiringField]['properties'] || {};
}
for (var _i = 0, requiredFields_1 = requiredFields; _i < requiredFields_1.length; _i++) {
var requiredField = requiredFields_1[_i];
if (xor(!hasValue(control.value[requiredField]), invert)) {
requiringFieldErrors[requiredField] = { 'required': true };
}
}
requiringFieldErrors = _mergeObjects(requiringFieldErrors, forEachCopy(properties, function (requirements, requiredField) {
var requiredFieldErrors = _mergeObjects(forEachCopy(requirements, function (requirement, parameter) {
var validator = null;
if (requirement === 'maximum' || requirement === 'minimum') {
var exclusive = !!requirements['exclusiveM' + requirement.slice(1)];
validator = JsonValidators[requirement](parameter, exclusive);
}
else if (typeof JsonValidators[requirement] === 'function') {
validator = JsonValidators[requirement](parameter);
}
return !isDefined(validator) ?
null : validator(control.value[requiredField]);
}));
return isEmpty(requiredFieldErrors) ?
null : (_a = {}, _a[requiredField] = requiredFieldErrors, _a);
var _a;
}));
return isEmpty(requiringFieldErrors) ?
null : (_a = {}, _a[requiringField] = requiringFieldErrors, _a);
var _a;
}));
return isEmpty(allErrors) ? null : allErrors;
};
};
JsonValidators.minItems = function (minimumItems) {
if (!hasValue(minimumItems)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var currentItems = isArray$2(control.value) ? control.value.length : 0;
var isValid = currentItems >= minimumItems;
return xor(isValid, invert) ?
null : { 'minItems': { minimumItems: minimumItems, currentItems: currentItems } };
};
};
JsonValidators.maxItems = function (maximumItems) {
if (!hasValue(maximumItems)) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var currentItems = isArray$2(control.value) ? control.value.length : 0;
var isValid = currentItems <= maximumItems;
return xor(isValid, invert) ?
null : { 'maxItems': { maximumItems: maximumItems, currentItems: currentItems } };
};
};
JsonValidators.uniqueItems = function (unique) {
if (unique === void 0) { unique = true; }
if (!unique) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var sorted = control.value.slice().sort();
var duplicateItems = [];
for (var i = 1; i < sorted.length; i++) {
if (sorted[i - 1] === sorted[i] && duplicateItems.includes(sorted[i])) {
duplicateItems.push(sorted[i]);
}
}
var isValid = !duplicateItems.length;
return xor(isValid, invert) ?
null : { 'uniqueItems': { duplicateItems: duplicateItems } };
};
};
JsonValidators.contains = function (requiredItem) {
if (requiredItem === void 0) { requiredItem = true; }
if (!requiredItem) {
return JsonValidators.nullValidator;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value) || !isArray$2(control.value)) {
return null;
}
var currentItems = control.value;
var isValid = true;
return xor(isValid, invert) ?
null : { 'contains': { requiredItem: requiredItem, currentItems: currentItems } };
};
};
JsonValidators.nullValidator = function (control) {
return null;
};
JsonValidators.composeAnyOf = function (validators) {
if (!validators) {
return null;
}
var presentValidators = validators.filter(isDefined);
if (presentValidators.length === 0) {
return null;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var arrayOfErrors = _executeValidators(control, presentValidators, invert).filter(isDefined);
var isValid = validators.length > arrayOfErrors.length;
return xor(isValid, invert) ?
null : _mergeObjects.apply(void 0, arrayOfErrors.concat([{ 'anyOf': !invert }]));
};
};
JsonValidators.composeOneOf = function (validators) {
if (!validators) {
return null;
}
var presentValidators = validators.filter(isDefined);
if (presentValidators.length === 0) {
return null;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var arrayOfErrors = _executeValidators(control, presentValidators);
var validControls = validators.length - arrayOfErrors.filter(isDefined).length;
var isValid = validControls === 1;
if (xor(isValid, invert)) {
return null;
}
var arrayOfValids = _executeValidators(control, presentValidators, invert);
return _mergeObjects.apply(void 0, arrayOfErrors.concat(arrayOfValids, [{ 'oneOf': !invert }]));
};
};
JsonValidators.composeAllOf = function (validators) {
if (!validators) {
return null;
}
var presentValidators = validators.filter(isDefined);
if (presentValidators.length === 0) {
return null;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
var combinedErrors = _mergeErrors(_executeValidators(control, presentValidators, invert));
var isValid = combinedErrors === null;
return (xor(isValid, invert)) ?
null : _mergeObjects(combinedErrors, { 'allOf': !invert });
};
};
JsonValidators.composeNot = function (validator) {
if (!validator) {
return null;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
if (isEmpty(control.value)) {
return null;
}
var error = validator(control, !invert);
var isValid = error === null;
return (xor(isValid, invert)) ?
null : _mergeObjects(error, { 'not': !invert });
};
};
JsonValidators.compose = function (validators) {
if (!validators) {
return null;
}
var presentValidators = validators.filter(isDefined);
if (presentValidators.length === 0) {
return null;
}
return function (control, invert) {
if (invert === void 0) { invert = false; }
return _mergeErrors(_executeValidators(control, presentValidators, invert));
};
};
JsonValidators.composeAsync = function (validators) {
if (!validators) {
return null;
}
var presentValidators = validators.filter(isDefined);
if (presentValidators.length === 0) {
return null;
}
return function (control) {
var observables = _executeAsyncValidators(control, presentValidators).map(toObservable);
return map_3.call(forkJoin_1(observables), _mergeErrors);
};
};
JsonValidators.min = function (min) {
if (!hasValue(min)) {
return JsonValidators.nullValidator;
}
return function (control) {
if (isEmpty(control.value) || isEmpty(min)) {
return null;
}
var value = parseFloat(control.value);
var actual = control.value;
return isNaN(value) || value >= min ? null : { 'min': { min: min, actual: actual } };
};
};
JsonValidators.max = function (max) {
if (!hasValue(max)) {
return JsonValidators.nullValidator;
}
return function (control) {
if (isEmpty(control.value) || isEmpty(max)) {
return null;
}
var value = parseFloat(control.value);
var actual = control.value;
return isNaN(value) || value <= max ? null : { 'max': { max: max, actual: actual } };
};
};
JsonValidators.requiredTrue = function (control) {
if (!control) {
return JsonValidators.nullValidator;
}
return control.value === true ? null : { 'required': true };
};
JsonValidators.email = function (control) {
if (!control) {
return JsonValidators.nullValidator;
}
var EMAIL_REGEXP = /^(?=.{1,254}$)(?=.{1,64}@)[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+(\.[-!#$%&'*+/0-9=?A-Z^_`a-z{|}~]+)*@[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?(\.[A-Za-z0-9]([A-Za-z0-9-]{0,61}[A-Za-z0-9])?)*$/;
return EMAIL_REGEXP.test(control.value) ? null : { 'email': true };
};
return JsonValidators;
}());
var __assign$2 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function mergeSchemas() {
var schemas = [];
for (var _i = 0; _i < arguments.length; _i++) {
schemas[_i] = arguments[_i];
}
schemas = schemas.filter(function (schema) { return !isEmpty(schema); });
if (schemas.some(function (schema) { return !isObject$1(schema); })) {
return null;
}
var combinedSchema = {};
for (var _a = 0, schemas_1 = schemas; _a < schemas_1.length; _a++) {
var schema = schemas_1[_a];
var _loop_1 = function (key) {
var combinedValue = combinedSchema[key];
var schemaValue = schema[key];
if (!hasOwn(combinedSchema, key) || isEqual(combinedValue, schemaValue)) {
combinedSchema[key] = schemaValue;
}
else {
switch (key) {
case 'allOf':
if (isArray$2(combinedValue) && isArray$2(schemaValue)) {
combinedSchema.allOf = mergeSchemas.apply(void 0, combinedValue.concat(schemaValue));
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'additionalItems':
case 'additionalProperties':
case 'contains':
case 'propertyNames':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
combinedSchema[key] = mergeSchemas(combinedValue, schemaValue);
}
else if (key === 'additionalProperties' &&
(combinedValue === false || schemaValue === false)) {
combinedSchema.combinedSchema = false;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'anyOf':
case 'oneOf':
case 'enum':
if (isArray$2(combinedValue) && isArray$2(schemaValue)) {
combinedSchema[key] = combinedValue.filter(function (item1) {
return schemaValue.findIndex(function (item2) { return isEqual(item1, item2); }) > -1;
});
if (!combinedSchema[key].length) {
return { value: { allOf: schemas.slice() } };
}
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'definitions':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
var combinedObject = __assign$2({}, combinedValue);
for (var _i = 0, _a = Object.keys(schemaValue); _i < _a.length; _i++) {
var subKey = _a[_i];
if (!hasOwn(combinedObject, subKey) ||
isEqual(combinedObject[subKey], schemaValue[subKey])) {
combinedObject[subKey] = schemaValue[subKey];
}
else {
return { value: { allOf: schemas.slice() } };
}
}
combinedSchema.definitions = combinedObject;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'dependencies':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
var combinedObject = __assign$2({}, combinedValue);
for (var _b = 0, _c = Object.keys(schemaValue); _b < _c.length; _b++) {
var subKey = _c[_b];
if (!hasOwn(combinedObject, subKey) ||
isEqual(combinedObject[subKey], schemaValue[subKey])) {
combinedObject[subKey] = schemaValue[subKey];
}
else if (isArray$2(schemaValue[subKey]) && isArray$2(combinedObject[subKey])) {
combinedObject[subKey] = uniqueItems.apply(void 0, combinedObject[subKey].concat(schemaValue[subKey]));
}
else if ((isArray$2(schemaValue[subKey]) || isObject$1(schemaValue[subKey])) &&
(isArray$2(combinedObject[subKey]) || isObject$1(combinedObject[subKey]))) {
var required = isArray$2(combinedSchema.required) ?
combinedSchema.required : [];
var combinedDependency = isArray$2(combinedObject[subKey]) ?
{ required: uniqueItems.apply(void 0, required.concat([combinedObject[subKey]])) } :
combinedObject[subKey];
var schemaDependency = isArray$2(schemaValue[subKey]) ?
{ required: uniqueItems.apply(void 0, required.concat([schemaValue[subKey]])) } :
schemaValue[subKey];
combinedObject[subKey] =
mergeSchemas(combinedDependency, schemaDependency);
}
else {
return { value: { allOf: schemas.slice() } };
}
}
combinedSchema.dependencies = combinedObject;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'items':
if (isArray$2(combinedValue) && isArray$2(schemaValue)) {
combinedSchema.items = combinedValue.filter(function (item1) {
return schemaValue.findIndex(function (item2) { return isEqual(item1, item2); }) > -1;
});
if (!combinedSchema.items.length) {
return { value: { allOf: schemas.slice() } };
}
}
else if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
combinedSchema.items = mergeSchemas(combinedValue, schemaValue);
}
else if (isArray$2(combinedValue) && isObject$1(schemaValue)) {
combinedSchema.items =
combinedValue.map(function (item) { return mergeSchemas(item, schemaValue); });
}
else if (isObject$1(combinedValue) && isArray$2(schemaValue)) {
combinedSchema.items =
schemaValue.map(function (item) { return mergeSchemas(item, combinedValue); });
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'multipleOf':
if (isNumber(combinedValue) && isNumber(schemaValue)) {
var gcd_1 = function (x, y) { return !y ? x : gcd_1(y, x % y); };
var lcm = function (x, y) { return (x * y) / gcd_1(x, y); };
combinedSchema.multipleOf = lcm(combinedValue, schemaValue);
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'maximum':
case 'exclusiveMaximum':
case 'maxLength':
case 'maxItems':
case 'maxProperties':
if (isNumber(combinedValue) && isNumber(schemaValue)) {
combinedSchema[key] = Math.min(combinedValue, schemaValue);
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'minimum':
case 'exclusiveMinimum':
case 'minLength':
case 'minItems':
case 'minProperties':
if (isNumber(combinedValue) && isNumber(schemaValue)) {
combinedSchema[key] = Math.max(combinedValue, schemaValue);
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'not':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
var notAnyOf = [combinedValue, schemaValue]
.reduce(function (notAnyOfArray, notSchema) {
return isArray$2(notSchema.anyOf) &&
Object.keys(notSchema).length === 1 ? notAnyOfArray.concat(notSchema.anyOf) : notAnyOfArray.concat([notSchema]);
}, []);
combinedSchema.not = { anyOf: notAnyOf };
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'patternProperties':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
var combinedObject = __assign$2({}, combinedValue);
for (var _d = 0, _e = Object.keys(schemaValue); _d < _e.length; _d++) {
var subKey = _e[_d];
if (!hasOwn(combinedObject, subKey) ||
isEqual(combinedObject[subKey], schemaValue[subKey])) {
combinedObject[subKey] = schemaValue[subKey];
}
else if (isObject$1(schemaValue[subKey]) && isObject$1(combinedObject[subKey])) {
combinedObject[subKey] =
mergeSchemas(combinedObject[subKey], schemaValue[subKey]);
}
else {
return { value: { allOf: schemas.slice() } };
}
}
combinedSchema.patternProperties = combinedObject;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'properties':
if (isObject$1(combinedValue) && isObject$1(schemaValue)) {
var combinedObject_1 = __assign$2({}, combinedValue);
if (hasOwn(schemaValue, 'additionalProperties')) {
Object.keys(combinedValue)
.filter(function (combinedKey) { return !Object.keys(schemaValue).includes(combinedKey); })
.forEach(function (nonMatchingKey) {
if (schemaValue.additionalProperties === false) {
delete combinedObject_1[nonMatchingKey];
}
else if (isObject$1(schemaValue.additionalProperties)) {
combinedObject_1[nonMatchingKey] = mergeSchemas(combinedObject_1[nonMatchingKey], schemaValue.additionalProperties);
}
});
}
for (var _f = 0, _g = Object.keys(schemaValue); _f < _g.length; _f++) {
var subKey = _g[_f];
if (isEqual(combinedObject_1[subKey], schemaValue[subKey]) || (!hasOwn(combinedObject_1, subKey) &&
!hasOwn(combinedObject_1, 'additionalProperties'))) {
combinedObject_1[subKey] = schemaValue[subKey];
}
else if (!hasOwn(combinedObject_1, subKey) &&
hasOwn(combinedObject_1, 'additionalProperties')) {
if (isObject$1(combinedObject_1.additionalProperties)) {
combinedObject_1[subKey] = mergeSchemas(combinedObject_1.additionalProperties, schemaValue[subKey]);
}
}
else if (isObject$1(schemaValue[subKey]) &&
isObject$1(combinedObject_1[subKey])) {
combinedObject_1[subKey] =
mergeSchemas(combinedObject_1[subKey], schemaValue[subKey]);
}
else {
return { value: { allOf: schemas.slice() } };
}
}
combinedSchema.properties = combinedObject_1;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'required':
if (isArray$2(combinedValue) && isArray$2(schemaValue)) {
combinedSchema.required = uniqueItems.apply(void 0, combinedValue.concat(schemaValue));
}
else if (typeof schemaValue === 'boolean' &&
typeof combinedValue === 'boolean') {
combinedSchema.required = !!combinedValue || !!schemaValue;
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case '$schema':
case '$id':
case 'id':
break;
case 'title':
case 'description':
combinedSchema[key] = schemaValue;
break;
case 'type':
if ((isArray$2(schemaValue) || isString(schemaValue)) &&
(isArray$2(combinedValue) || isString(combinedValue))) {
var combinedTypes = commonItems(combinedValue, schemaValue);
if (!combinedTypes.length) {
return { value: { allOf: schemas.slice() } };
}
combinedSchema.type = combinedTypes.length > 1 ? combinedTypes : combinedTypes[0];
}
else {
return { value: { allOf: schemas.slice() } };
}
break;
case 'uniqueItems':
combinedSchema.uniqueItems = !!combinedValue || !!schemaValue;
break;
default: return { value: { allOf: schemas.slice() } };
}
}
};
for (var _b = 0, _c = Object.keys(schema); _b < _c.length; _b++) {
var key = _c[_b];
var state_1 = _loop_1(key);
if (typeof state_1 === "object")
return state_1.value;
}
}
return combinedSchema;
}
var __assign$3 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function buildSchemaFromLayout(layout) {
return;
}
function buildSchemaFromData(data, requireAllFields, isRoot) {
if (requireAllFields === void 0) { requireAllFields = false; }
if (isRoot === void 0) { isRoot = true; }
var newSchema = {};
var getFieldType = function (value) {
var fieldType = getType(value, 'strict');
return { integer: 'number', null: 'string' }[fieldType] || fieldType;
};
var buildSubSchema = function (value) {
return buildSchemaFromData(value, requireAllFields, false);
};
if (isRoot) {
newSchema.$schema = 'http://json-schema.org/draft-06/schema#';
}
newSchema.type = getFieldType(data);
if (newSchema.type === 'object') {
newSchema.properties = {};
if (requireAllFields) {
newSchema.required = [];
}
for (var _i = 0, _a = Object.keys(data); _i < _a.length; _i++) {
var key = _a[_i];
newSchema.properties[key] = buildSubSchema(data[key]);
if (requireAllFields) {
newSchema.required.push(key);
}
}
}
else if (newSchema.type === 'array') {
newSchema.items = data.map(buildSubSchema);
if ((new Set(data.map(getFieldType))).size === 1) {
newSchema.items = newSchema.items.reduce(function (a, b) { return (__assign$3({}, a, b)); }, {});
}
if (requireAllFields) {
newSchema.minItems = 1;
}
}
return newSchema;
}
function getFromSchema(schema, dataPointer, returnType) {
if (returnType === void 0) { returnType = 'schema'; }
var dataPointerArray = JsonPointer.parse(dataPointer);
if (dataPointerArray === null) {
console.error("getFromSchema error: Invalid JSON Pointer: " + dataPointer);
return null;
}
var subSchema = schema;
var schemaPointer = [];
var length = dataPointerArray.length;
if (returnType.slice(0, 6) === 'parent') {
dataPointerArray.length--;
}
for (var i = 0; i < length; ++i) {
var key = dataPointerArray[i];
var subSchemaFound = false;
if (typeof subSchema !== 'object') {
console.error("getFromSchema error: Unable to find \"" + key + "\" key in schema.");
console.error(schema);
console.error(dataPointer);
return null;
}
if (subSchema.type === 'array' && (!isNaN(key) || key === '-')) {
if (hasOwn(subSchema, 'items')) {
if (isObject$1(subSchema.items)) {
subSchemaFound = true;
subSchema = subSchema.items;
schemaPointer.push('items');
}
else if (isArray$2(subSchema.items)) {
if (!isNaN(key) && subSchema.items.length >= +key) {
subSchemaFound = true;
subSchema = subSchema.items[+key];
schemaPointer.push('items', key);
}
}
}
if (!subSchemaFound && isObject$1(subSchema.additionalItems)) {
subSchemaFound = true;
subSchema = subSchema.additionalItems;
schemaPointer.push('additionalItems');
}
else if (subSchema.additionalItems !== false) {
subSchemaFound = true;
subSchema = {};
schemaPointer.push('additionalItems');
}
}
else if (subSchema.type === 'object') {
if (isObject$1(subSchema.properties) && hasOwn(subSchema.properties, key)) {
subSchemaFound = true;
subSchema = subSchema.properties[key];
schemaPointer.push('properties', key);
}
else if (isObject$1(subSchema.additionalProperties)) {
subSchemaFound = true;
subSchema = subSchema.additionalProperties;
schemaPointer.push('additionalProperties');
}
else if (subSchema.additionalProperties !== false) {
subSchemaFound = true;
subSchema = {};
schemaPointer.push('additionalProperties');
}
}
if (!subSchemaFound) {
console.error("getFromSchema error: Unable to find \"" + key + "\" item in schema.");
console.error(schema);
console.error(dataPointer);
return;
}
}
return returnType.slice(-7) === 'Pointer' ? schemaPointer : subSchema;
}
function removeRecursiveReferences(pointer, recursiveRefMap, arrayMap) {
if (arrayMap === void 0) { arrayMap = new Map(); }
if (!pointer) {
return '';
}
var genericPointer = JsonPointer.toGenericPointer(JsonPointer.compile(pointer), arrayMap);
if (genericPointer.indexOf('/') === -1) {
return genericPointer;
}
var possibleReferences = true;
while (possibleReferences) {
possibleReferences = false;
recursiveRefMap.forEach(function (toPointer, fromPointer) {
if (JsonPointer.isSubPointer(toPointer, fromPointer)) {
while (JsonPointer.isSubPointer(fromPointer, genericPointer, true)) {
genericPointer = JsonPointer.toGenericPointer(toPointer + genericPointer.slice(fromPointer.length), arrayMap);
possibleReferences = true;
}
}
});
}
return genericPointer;
}
function getInputType(schema, layoutNode) {
if (layoutNode === void 0) { layoutNode = null; }
var controlType = JsonPointer.getFirst([
[schema, '/x-schema-form/type'],
[schema, '/x-schema-form/widget/component'],
[schema, '/x-schema-form/widget'],
[schema, '/widget/component'],
[schema, '/widget']
]);
if (isString(controlType)) {
return checkInlineType(controlType, schema, layoutNode);
}
var schemaType = schema.type;
if (schemaType) {
if (isArray$2(schemaType)) {
schemaType =
inArray('object', schemaType) && hasOwn(schema, 'properties') ? 'object' :
inArray('array', schemaType) && hasOwn(schema, 'items') ? 'array' :
inArray('array', schemaType) && hasOwn(schema, 'additionalItems') ? 'array' :
inArray('string', schemaType) ? 'string' :
inArray('number', schemaType) ? 'number' :
inArray('integer', schemaType) ? 'integer' :
inArray('boolean', schemaType) ? 'boolean' : 'unknown';
}
if (schemaType === 'boolean') {
return 'checkbox';
}
if (schemaType === 'object') {
if (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) {
return 'section';
}
if (hasOwn(schema, '$ref')) {
return '$ref';
}
}
if (schemaType === 'array') {
var itemsObject = JsonPointer.getFirst([
[schema, '/items'],
[schema, '/additionalItems']
]) || {};
return hasOwn(itemsObject, 'enum') && schema.maxItems !== 1 ?
checkInlineType('checkboxes', schema, layoutNode) : 'array';
}
if (schemaType === 'null') {
return 'none';
}
if (JsonPointer.has(layoutNode, '/options/titleMap') ||
hasOwn(schema, 'enum') || getTitleMapFromOneOf(schema, null, true)) {
return 'select';
}
if (schemaType === 'number' || schemaType === 'integer') {
return (schemaType === 'integer' || hasOwn(schema, 'multipleOf')) &&
hasOwn(schema, 'maximum') && hasOwn(schema, 'minimum') ? 'range' : schemaType;
}
if (schemaType === 'string') {
return {
'color': 'color',
'date': 'date',
'date-time': 'datetime-local',
'email': 'email',
'uri': 'url',
}[schema.format] || 'text';
}
}
if (hasOwn(schema, '$ref')) {
return '$ref';
}
if (isArray$2(schema.oneOf) || isArray$2(schema.anyOf)) {
return 'one-of';
}
console.error("getInputType error: Unable to determine input type for " + schemaType);
console.error('schema', schema);
if (layoutNode) {
console.error('layoutNode', layoutNode);
}
return 'none';
}
function checkInlineType(controlType, schema, layoutNode) {
if (layoutNode === void 0) { layoutNode = null; }
if (!isString(controlType) || (controlType.slice(0, 8) !== 'checkbox' && controlType.slice(0, 5) !== 'radio')) {
return controlType;
}
if (JsonPointer.getFirst([
[layoutNode, '/inline'],
[layoutNode, '/options/inline'],
[schema, '/inline'],
[schema, '/x-schema-form/inline'],
[schema, '/x-schema-form/options/inline'],
[schema, '/x-schema-form/widget/inline'],
[schema, '/x-schema-form/widget/component/inline'],
[schema, '/x-schema-form/widget/component/options/inline'],
[schema, '/widget/inline'],
[schema, '/widget/component/inline'],
[schema, '/widget/component/options/inline'],
]) === true) {
return controlType.slice(0, 5) === 'radio' ?
'radios-inline' : 'checkboxes-inline';
}
else {
return controlType;
}
}
function isInputRequired(schema, schemaPointer) {
if (!isObject$1(schema)) {
console.error('isInputRequired error: Input schema must be an object.');
return false;
}
var listPointerArray = JsonPointer.parse(schemaPointer);
if (isArray$2(listPointerArray)) {
if (!listPointerArray.length) {
return schema.required === true;
}
var keyName = listPointerArray.pop();
var nextToLastKey = listPointerArray[listPointerArray.length - 1];
if (['properties', 'additionalProperties', 'patternProperties', 'items', 'additionalItems']
.includes(nextToLastKey)) {
listPointerArray.pop();
}
var parentSchema = JsonPointer.get(schema, listPointerArray) || {};
if (isArray$2(parentSchema.required)) {
return parentSchema.required.includes(keyName);
}
if (parentSchema.type === 'array') {
return hasOwn(parentSchema, 'minItems') &&
isNumber(keyName) &&
+parentSchema.minItems > +keyName;
}
}
return false;
}
function updateInputOptions(layoutNode, schema, jsf) {
if (!isObject$1(layoutNode) || !isObject$1(layoutNode.options)) {
return;
}
var newOptions = {};
var fixUiKeys = function (key) { return key.slice(0, 3).toLowerCase() === 'ui:' ? key.slice(3) : key; };
mergeFilteredObject(newOptions, jsf.formOptions.defautWidgetOptions, [], fixUiKeys);
[[JsonPointer.get(schema, '/ui:widget/options'), []],
[JsonPointer.get(schema, '/ui:widget'), []],
[schema, [
'additionalProperties', 'additionalItems', 'properties', 'items',
'required', 'type', 'x-schema-form', '$ref'
]],
[JsonPointer.get(schema, '/x-schema-form/options'), []],
[JsonPointer.get(schema, '/x-schema-form'), ['items', 'options']],
[layoutNode, [
'_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',
'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'
]],
[layoutNode.options, []],
].forEach(function (_a) {
var object = _a[0], excludeKeys = _a[1];
return mergeFilteredObject(newOptions, object, excludeKeys, fixUiKeys);
});
if (!hasOwn(newOptions, 'titleMap')) {
var newTitleMap = null;
newTitleMap = getTitleMapFromOneOf(schema, newOptions.flatList);
if (newTitleMap) {
newOptions.titleMap = newTitleMap;
}
if (!hasOwn(newOptions, 'titleMap') && !hasOwn(newOptions, 'enum') && hasOwn(schema, 'items')) {
if (JsonPointer.has(schema, '/items/titleMap')) {
newOptions.titleMap = schema.items.titleMap;
}
else if (JsonPointer.has(schema, '/items/enum')) {
newOptions.enum = schema.items.enum;
if (!hasOwn(newOptions, 'enumNames') && JsonPointer.has(schema, '/items/enumNames')) {
newOptions.enumNames = schema.items.enumNames;
}
}
else if (JsonPointer.has(schema, '/items/oneOf')) {
newTitleMap = getTitleMapFromOneOf(schema.items, newOptions.flatList);
if (newTitleMap) {
newOptions.titleMap = newTitleMap;
}
}
}
}
if (schema.type === 'integer' && !hasValue(newOptions.multipleOf)) {
newOptions.multipleOf = 1;
}
if (JsonPointer.has(newOptions, '/autocomplete/source')) {
newOptions.typeahead = newOptions.autocomplete;
}
else if (JsonPointer.has(newOptions, '/tagsinput/source')) {
newOptions.typeahead = newOptions.tagsinput;
}
else if (JsonPointer.has(newOptions, '/tagsinput/typeahead/source')) {
newOptions.typeahead = newOptions.tagsinput.typeahead;
}
layoutNode.options = newOptions;
}
function getTitleMapFromOneOf(schema, flatList, validateOnly) {
if (schema === void 0) { schema = {}; }
if (flatList === void 0) { flatList = null; }
if (validateOnly === void 0) { validateOnly = false; }
var titleMap = null;
var oneOf = schema.oneOf || schema.anyOf || null;
if (isArray$2(oneOf) && oneOf.every(function (item) { return item.title; })) {
if (oneOf.every(function (item) { return isArray$2(item.enum) && item.enum.length === 1; })) {
if (validateOnly) {
return true;
}
titleMap = oneOf.map(function (item) { return ({ name: item.title, value: item.enum[0] }); });
}
else if (oneOf.every(function (item) { return item.const; })) {
if (validateOnly) {
return true;
}
titleMap = oneOf.map(function (item) { return ({ name: item.title, value: item.const }); });
}
if (flatList !== false && (titleMap || [])
.filter(function (title) { return ((title || {}).name || '').indexOf(': '); }).length > 1) {
var newTitleMap_1 = titleMap.map(function (title) {
var _a = title.name.split(/: (.+)/), group = _a[0], name = _a[1];
return group && name ? __assign$3({}, title, { group: group, name: name }) : title;
});
if (flatList === true || newTitleMap_1.some(function (title, index) {
return index &&
hasOwn(title, 'group') && title.group === newTitleMap_1[index - 1].group;
})) {
titleMap = newTitleMap_1;
}
}
}
return validateOnly ? false : titleMap;
}
function getControlValidators(schema) {
if (!isObject$1(schema)) {
return null;
}
var validators = {};
if (hasOwn(schema, 'type')) {
switch (schema.type) {
case 'string':
forEach(['pattern', 'format', 'minLength', 'maxLength'], function (prop) {
if (hasOwn(schema, prop)) {
validators[prop] = [schema[prop]];
}
});
break;
case 'number':
case 'integer':
forEach(['Minimum', 'Maximum'], function (ucLimit) {
var eLimit = 'exclusive' + ucLimit;
var limit = ucLimit.toLowerCase();
if (hasOwn(schema, limit)) {
var exclusive = hasOwn(schema, eLimit) && schema[eLimit] === true;
validators[limit] = [schema[limit], exclusive];
}
});
forEach(['multipleOf', 'type'], function (prop) {
if (hasOwn(schema, prop)) {
validators[prop] = [schema[prop]];
}
});
break;
case 'object':
forEach(['minProperties', 'maxProperties', 'dependencies'], function (prop) {
if (hasOwn(schema, prop)) {
validators[prop] = [schema[prop]];
}
});
break;
case 'array':
forEach(['minItems', 'maxItems', 'uniqueItems'], function (prop) {
if (hasOwn(schema, prop)) {
validators[prop] = [schema[prop]];
}
});
break;
}
}
if (hasOwn(schema, 'enum')) {
validators.enum = [schema.enum];
}
return validators;
}
function resolveSchemaReferences(schema, schemaRefLibrary, schemaRecursiveRefMap, dataRecursiveRefMap, arrayMap) {
if (!isObject$1(schema)) {
console.error('resolveSchemaReferences error: schema must be an object.');
return;
}
var refLinks = new Set();
var refMapSet = new Set();
var refMap = new Map();
var recursiveRefMap = new Map();
var refLibrary = {};
JsonPointer.forEachDeep(schema, function (subSchema, subSchemaPointer) {
if (hasOwn(subSchema, '$ref') && isString(subSchema['$ref'])) {
var refPointer = JsonPointer.compile(subSchema['$ref']);
refLinks.add(refPointer);
refMapSet.add(subSchemaPointer + '~~' + refPointer);
refMap.set(subSchemaPointer, refPointer);
}
});
refLinks.forEach(function (ref) { return refLibrary[ref] = getSubSchema(schema, ref); });
var checkRefLinks = true;
while (checkRefLinks) {
checkRefLinks = false;
Array.from(refMap).forEach(function (_a) {
var fromRef1 = _a[0], toRef1 = _a[1];
return Array.from(refMap)
.filter(function (_a) {
var fromRef2 = _a[0], toRef2 = _a[1];
return JsonPointer.isSubPointer(toRef1, fromRef2, true) &&
!JsonPointer.isSubPointer(toRef2, toRef1, true) &&
!refMapSet.has(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2);
})
.forEach(function (_a) {
var fromRef2 = _a[0], toRef2 = _a[1];
refMapSet.add(fromRef1 + fromRef2.slice(toRef1.length) + '~~' + toRef2);
checkRefLinks = true;
});
});
}
Array.from(refMapSet)
.map(function (refLink) { return refLink.split('~~'); })
.filter(function (_a) {
var fromRef = _a[0], toRef = _a[1];
return JsonPointer.isSubPointer(toRef, fromRef);
})
.forEach(function (_a) {
var fromRef = _a[0], toRef = _a[1];
return recursiveRefMap.set(fromRef, toRef);
});
Array.from(refMap)
.filter(function (_a) {
var fromRef1 = _a[0], toRef1 = _a[1];
return Array.from(recursiveRefMap.keys())
.every(function (fromRef2) { return !JsonPointer.isSubPointer(fromRef1, fromRef2, true); });
})
.forEach(function (_a) {
var fromRef1 = _a[0], toRef1 = _a[1];
return Array.from(recursiveRefMap)
.filter(function (_a) {
var fromRef2 = _a[0], toRef2 = _a[1];
return !recursiveRefMap.has(fromRef1 + fromRef2.slice(toRef1.length)) &&
JsonPointer.isSubPointer(toRef1, fromRef2, true) &&
!JsonPointer.isSubPointer(toRef1, fromRef1, true);
})
.forEach(function (_a) {
var fromRef2 = _a[0], toRef2 = _a[1];
return recursiveRefMap.set(fromRef1 + fromRef2.slice(toRef1.length), fromRef1 + toRef2.slice(toRef1.length));
});
});
var compiledSchema = __assign$3({}, schema);
delete compiledSchema.definitions;
compiledSchema =
getSubSchema(compiledSchema, '', refLibrary, recursiveRefMap);
JsonPointer.forEachDeep(compiledSchema, function (subSchema, subSchemaPointer) {
if (isString(subSchema['$ref'])) {
var refPointer = JsonPointer.compile(subSchema['$ref']);
if (!JsonPointer.isSubPointer(refPointer, subSchemaPointer, true)) {
refPointer = removeRecursiveReferences(subSchemaPointer, recursiveRefMap);
JsonPointer.set(compiledSchema, subSchemaPointer, { $ref: "#" + refPointer });
}
if (!hasOwn(schemaRefLibrary, 'refPointer')) {
schemaRefLibrary[refPointer] = !refPointer.length ? compiledSchema :
getSubSchema(compiledSchema, refPointer, schemaRefLibrary, recursiveRefMap);
}
if (!schemaRecursiveRefMap.has(subSchemaPointer)) {
schemaRecursiveRefMap.set(subSchemaPointer, refPointer);
}
var fromDataRef = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);
if (!dataRecursiveRefMap.has(fromDataRef)) {
var toDataRef = JsonPointer.toDataPointer(refPointer, compiledSchema);
dataRecursiveRefMap.set(fromDataRef, toDataRef);
}
}
if (subSchema.type === 'array' &&
(hasOwn(subSchema, 'items') || hasOwn(subSchema, 'additionalItems'))) {
var dataPointer = JsonPointer.toDataPointer(subSchemaPointer, compiledSchema);
if (!arrayMap.has(dataPointer)) {
var tupleItems = isArray$2(subSchema.items) ? subSchema.items.length : 0;
arrayMap.set(dataPointer, tupleItems);
}
}
}, true);
return compiledSchema;
}
function getSubSchema(schema, pointer, schemaRefLibrary, schemaRecursiveRefMap, usedPointers) {
if (schemaRefLibrary === void 0) { schemaRefLibrary = null; }
if (schemaRecursiveRefMap === void 0) { schemaRecursiveRefMap = null; }
if (usedPointers === void 0) { usedPointers = []; }
if (!schemaRefLibrary || !schemaRecursiveRefMap) {
return JsonPointer.getCopy(schema, pointer);
}
if (typeof pointer !== 'string') {
pointer = JsonPointer.compile(pointer);
}
usedPointers = usedPointers.concat([pointer]);
var newSchema = null;
if (pointer === '') {
newSchema = cloneDeep(schema);
}
else {
var shortPointer = removeRecursiveReferences(pointer, schemaRecursiveRefMap);
if (shortPointer !== pointer) {
usedPointers = usedPointers.concat([shortPointer]);
}
newSchema = JsonPointer.getFirstCopy([
[schemaRefLibrary, [shortPointer]],
[schema, pointer],
[schema, shortPointer]
]);
}
return JsonPointer.forEachDeepCopy(newSchema, function (subSchema, subPointer) {
if (isObject$1(subSchema)) {
if (isString(subSchema.$ref)) {
var refPointer_1 = JsonPointer.compile(subSchema.$ref);
if (refPointer_1.length && usedPointers.every(function (ptr) {
return !JsonPointer.isSubPointer(refPointer_1, ptr, true);
})) {
var refSchema = getSubSchema(schema, refPointer_1, schemaRefLibrary, schemaRecursiveRefMap, usedPointers);
if (Object.keys(subSchema).length === 1) {
return refSchema;
}
else {
var extraKeys = __assign$3({}, subSchema);
delete extraKeys.$ref;
return mergeSchemas(refSchema, extraKeys);
}
}
}
if (isArray$2(subSchema.allOf)) {
return combineAllOf(subSchema);
}
if (subSchema.type === 'array' && isArray$2(subSchema.required)) {
return fixRequiredArrayProperties(subSchema);
}
}
return subSchema;
}, true, pointer);
}
function combineAllOf(schema) {
if (!isObject$1(schema) || !isArray$2(schema.allOf)) {
return schema;
}
var mergedSchema = mergeSchemas.apply(void 0, schema.allOf);
if (Object.keys(schema).length > 1) {
var extraKeys = __assign$3({}, schema);
delete extraKeys.allOf;
mergedSchema = mergeSchemas(mergedSchema, extraKeys);
}
return mergedSchema;
}
function fixRequiredArrayProperties(schema) {
if (schema.type === 'array' && isArray$2(schema.required)) {
var itemsObject_1 = hasOwn(schema.items, 'properties') ? 'items' :
hasOwn(schema.additionalItems, 'properties') ? 'additionalItems' : null;
if (itemsObject_1 && !hasOwn(schema[itemsObject_1], 'required') && (hasOwn(schema[itemsObject_1], 'additionalProperties') ||
schema.required.every(function (key) { return hasOwn(schema[itemsObject_1].properties, key); }))) {
schema = cloneDeep(schema);
schema[itemsObject_1].required = schema.required;
delete schema.required;
}
}
return schema;
}
var __assign$4 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function convertSchemaToDraft6(schema, options) {
if (options === void 0) { options = {}; }
var draft = options.draft || null;
var changed = options.changed || false;
if (typeof schema !== 'object') {
return schema;
}
if (typeof schema.map === 'function') {
return schema.map(function (subSchema) { return convertSchemaToDraft6(subSchema, { changed: changed, draft: draft }); }).slice();
}
var newSchema = __assign$4({}, schema);
var simpleTypes = ['array', 'boolean', 'integer', 'null', 'number', 'object', 'string'];
if (typeof newSchema.$schema === 'string' &&
/http\:\/\/json\-schema\.org\/draft\-0\d\/schema\#/.test(newSchema.$schema)) {
draft = newSchema.$schema[30];
}
if (newSchema.contentEncoding) {
newSchema.media = { binaryEncoding: newSchema.contentEncoding };
delete newSchema.contentEncoding;
changed = true;
}
if (typeof newSchema.extends === 'object') {
newSchema.allOf = typeof newSchema.extends.map === 'function' ?
newSchema.extends.map(function (subSchema) { return convertSchemaToDraft6(subSchema, { changed: changed, draft: draft }); }) :
[convertSchemaToDraft6(newSchema.extends, { changed: changed, draft: draft })];
delete newSchema.extends;
changed = true;
}
if (newSchema.disallow) {
if (typeof newSchema.disallow === 'string') {
newSchema.not = { type: newSchema.disallow };
}
else if (typeof newSchema.disallow.map === 'function') {
newSchema.not = {
anyOf: newSchema.disallow
.map(function (type) { return typeof type === 'object' ? type : { type: type }; })
};
}
delete newSchema.disallow;
changed = true;
}
if (typeof newSchema.dependencies === 'object' &&
Object.keys(newSchema.dependencies)
.some(function (key) { return typeof newSchema.dependencies[key] === 'string'; })) {
newSchema.dependencies = __assign$4({}, newSchema.dependencies);
Object.keys(newSchema.dependencies)
.filter(function (key) { return typeof newSchema.dependencies[key] === 'string'; })
.forEach(function (key) { return newSchema.dependencies[key] = [newSchema.dependencies[key]]; });
changed = true;
}
if (typeof newSchema.maxDecimal === 'number') {
newSchema.multipleOf = 1 / Math.pow(10, newSchema.maxDecimal);
delete newSchema.divisibleBy;
changed = true;
if (!draft || draft === 2) {
draft = 1;
}
}
if (typeof newSchema.divisibleBy === 'number') {
newSchema.multipleOf = newSchema.divisibleBy;
delete newSchema.divisibleBy;
changed = true;
}
if (typeof newSchema.minimum === 'number' && newSchema.minimumCanEqual === false) {
newSchema.exclusiveMinimum = newSchema.minimum;
delete newSchema.minimum;
changed = true;
if (!draft) {
draft = 2;
}
}
else if (typeof newSchema.minimumCanEqual === 'boolean') {
delete newSchema.minimumCanEqual;
changed = true;
if (!draft) {
draft = 2;
}
}
if (typeof newSchema.minimum === 'number' && newSchema.exclusiveMinimum === true) {
newSchema.exclusiveMinimum = newSchema.minimum;
delete newSchema.minimum;
changed = true;
}
else if (typeof newSchema.exclusiveMinimum === 'boolean') {
delete newSchema.exclusiveMinimum;
changed = true;
}
if (typeof newSchema.maximum === 'number' && newSchema.maximumCanEqual === false) {
newSchema.exclusiveMaximum = newSchema.maximum;
delete newSchema.maximum;
changed = true;
if (!draft) {
draft = 2;
}
}
else if (typeof newSchema.maximumCanEqual === 'boolean') {
delete newSchema.maximumCanEqual;
changed = true;
if (!draft) {
draft = 2;
}
}
if (typeof newSchema.maximum === 'number' && newSchema.exclusiveMaximum === true) {
newSchema.exclusiveMaximum = newSchema.maximum;
delete newSchema.maximum;
changed = true;
}
else if (typeof newSchema.exclusiveMaximum === 'boolean') {
delete newSchema.exclusiveMaximum;
changed = true;
}
if (typeof newSchema.properties === 'object') {
var properties_1 = __assign$4({}, newSchema.properties);
var requiredKeys_1 = Array.isArray(newSchema.required) ?
new Set(newSchema.required) : new Set();
if (draft === 1 || draft === 2 ||
Object.keys(properties_1).some(function (key) { return properties_1[key].optional === true; })) {
Object.keys(properties_1)
.filter(function (key) { return properties_1[key].optional !== true; })
.forEach(function (key) { return requiredKeys_1.add(key); });
changed = true;
if (!draft) {
draft = 2;
}
}
if (Object.keys(properties_1).some(function (key) { return properties_1[key].required === true; })) {
Object.keys(properties_1)
.filter(function (key) { return properties_1[key].required === true; })
.forEach(function (key) { return requiredKeys_1.add(key); });
changed = true;
}
if (requiredKeys_1.size) {
newSchema.required = Array.from(requiredKeys_1);
}
if (Object.keys(properties_1).some(function (key) { return properties_1[key].requires; })) {
var dependencies_1 = typeof newSchema.dependencies === 'object' ? __assign$4({}, newSchema.dependencies) : {};
Object.keys(properties_1)
.filter(function (key) { return properties_1[key].requires; })
.forEach(function (key) {
return dependencies_1[key] =
typeof properties_1[key].requires === 'string' ?
[properties_1[key].requires] : properties_1[key].requires;
});
newSchema.dependencies = dependencies_1;
changed = true;
if (!draft) {
draft = 2;
}
}
newSchema.properties = properties_1;
}
if (typeof newSchema.optional === 'boolean') {
delete newSchema.optional;
changed = true;
if (!draft) {
draft = 2;
}
}
if (newSchema.requires) {
delete newSchema.requires;
}
if (typeof newSchema.required === 'boolean') {
delete newSchema.required;
}
if (typeof newSchema.id === 'string' && !newSchema.$id) {
if (newSchema.id.slice(-1) === '#') {
newSchema.id = newSchema.id.slice(0, -1);
}
newSchema.$id = newSchema.id + '-CONVERTED-TO-DRAFT-06#';
delete newSchema.id;
changed = true;
}
if (newSchema.type && (typeof newSchema.type.every === 'function' ?
!newSchema.type.every(function (type) { return simpleTypes.includes(type); }) :
!simpleTypes.includes(newSchema.type))) {
changed = true;
}
if (typeof newSchema.$schema === 'string' &&
/http\:\/\/json\-schema\.org\/draft\-0[1-4]\/schema\#/.test(newSchema.$schema)) {
newSchema.$schema = 'http://json-schema.org/draft-06/schema#';
changed = true;
}
else if (changed && typeof newSchema.$schema === 'string') {
var addToDescription = 'Converted to draft 6 from ' + newSchema.$schema;
if (typeof newSchema.description === 'string' && newSchema.description.length) {
newSchema.description += '\n' + addToDescription;
}
else {
newSchema.description = addToDescription;
}
delete newSchema.$schema;
}
if (newSchema.type && (typeof newSchema.type.every === 'function' ?
!newSchema.type.every(function (type) { return simpleTypes.includes(type); }) :
!simpleTypes.includes(newSchema.type))) {
if (newSchema.type.length === 1) {
newSchema.type = newSchema.type[0];
}
if (typeof newSchema.type === 'string') {
if (newSchema.type === 'any') {
newSchema.type = simpleTypes;
}
else {
delete newSchema.type;
}
}
else if (typeof newSchema.type === 'object') {
if (typeof newSchema.type.every === 'function') {
if (newSchema.type.every(function (type) { return typeof type === 'string'; })) {
newSchema.type = newSchema.type.some(function (type) { return type === 'any'; }) ?
newSchema.type = simpleTypes :
newSchema.type.filter(function (type) { return simpleTypes.includes(type); });
}
else if (newSchema.type.length > 1) {
var arrayKeys = ['additionalItems', 'items', 'maxItems', 'minItems', 'uniqueItems', 'contains'];
var numberKeys = ['multipleOf', 'maximum', 'exclusiveMaximum', 'minimum', 'exclusiveMinimum'];
var objectKeys = ['maxProperties', 'minProperties', 'required', 'additionalProperties',
'properties', 'patternProperties', 'dependencies', 'propertyNames'];
var stringKeys = ['maxLength', 'minLength', 'pattern', 'format'];
var filterKeys_1 = {
'array': numberKeys.concat(objectKeys, stringKeys),
'integer': arrayKeys.concat(objectKeys, stringKeys),
'number': arrayKeys.concat(objectKeys, stringKeys),
'object': arrayKeys.concat(numberKeys, stringKeys),
'string': arrayKeys.concat(numberKeys, objectKeys),
'all': arrayKeys.concat(numberKeys, objectKeys, stringKeys),
};
var anyOf = [];
var _loop_1 = function (type) {
var newType = typeof type === 'string' ? { type: type } : __assign$4({}, type);
Object.keys(newSchema)
.filter(function (key) {
return !newType.hasOwnProperty(key) &&
!(filterKeys_1[newType.type] || filterKeys_1.all).concat(['type', 'default']).includes(key);
})
.forEach(function (key) { return newType[key] = newSchema[key]; });
anyOf.push(newType);
};
for (var _i = 0, _a = newSchema.type; _i < _a.length; _i++) {
var type = _a[_i];
_loop_1(type);
}
newSchema = newSchema.hasOwnProperty('default') ?
{ anyOf: anyOf, default: newSchema.default } : { anyOf: anyOf };
}
else {
var typeSchema = newSchema.type;
delete newSchema.type;
Object.assign(newSchema, typeSchema);
}
}
}
else {
delete newSchema.type;
}
}
Object.keys(newSchema)
.filter(function (key) { return typeof newSchema[key] === 'object'; })
.forEach(function (key) {
if (['definitions', 'dependencies', 'properties', 'patternProperties']
.includes(key) && typeof newSchema[key].map !== 'function') {
var newKey_1 = {};
Object.keys(newSchema[key]).forEach(function (subKey) {
return newKey_1[subKey] =
convertSchemaToDraft6(newSchema[key][subKey], { changed: changed, draft: draft });
});
newSchema[key] = newKey_1;
}
else if (['items', 'additionalItems', 'additionalProperties',
'allOf', 'anyOf', 'oneOf', 'not'].includes(key)) {
newSchema[key] = convertSchemaToDraft6(newSchema[key], { changed: changed, draft: draft });
}
else {
var clone_1 = function (object) {
return typeof clone_1 !== 'object' ? object :
typeof object.map === 'function' ? object.map(function (item) { return clone_1(item); }).slice() :
Object.keys(object).reduce(function (objClone, objKey) {
return Object.assign(objClone, (_a = {}, _a[objKey] = clone_1(object[objKey]), _a));
var _a;
}, {});
};
newSchema[key] = clone_1(newSchema[key]);
}
});
return newSchema;
}
var __assign$5 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function buildFormGroupTemplate(jsf, nodeValue, setValues, schemaPointer, dataPointer, templatePointer) {
if (nodeValue === void 0) { nodeValue = null; }
if (setValues === void 0) { setValues = true; }
if (schemaPointer === void 0) { schemaPointer = ''; }
if (dataPointer === void 0) { dataPointer = ''; }
if (templatePointer === void 0) { templatePointer = ''; }
var schema = JsonPointer.get(jsf.schema, schemaPointer);
if (setValues) {
if (!isDefined(nodeValue) && (jsf.formOptions.setSchemaDefaults === true ||
(jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues)))) {
nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');
}
}
else {
nodeValue = null;
}
var schemaType = JsonPointer.get(schema, '/type');
var controlType = (hasOwn(schema, 'properties') || hasOwn(schema, 'additionalProperties')) &&
schemaType === 'object' ? 'FormGroup' :
(hasOwn(schema, 'items') || hasOwn(schema, 'additionalItems')) &&
schemaType === 'array' ? 'FormArray' :
!schemaType && hasOwn(schema, '$ref') ? '$ref' : 'FormControl';
var shortDataPointer = removeRecursiveReferences(dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap);
if (!jsf.dataMap.has(shortDataPointer)) {
jsf.dataMap.set(shortDataPointer, new Map());
}
var nodeOptions = jsf.dataMap.get(shortDataPointer);
if (!nodeOptions.has('schemaType')) {
nodeOptions.set('schemaPointer', schemaPointer);
nodeOptions.set('schemaType', schema.type);
if (schema.format) {
nodeOptions.set('schemaFormat', schema.format);
if (!schema.type) {
nodeOptions.set('schemaType', 'string');
}
}
if (controlType) {
nodeOptions.set('templatePointer', templatePointer);
nodeOptions.set('templateType', controlType);
}
}
var controls;
var validators = getControlValidators(schema);
switch (controlType) {
case 'FormGroup':
controls = {};
if (hasOwn(schema, 'ui:order') || hasOwn(schema, 'properties')) {
var propertyKeys_1 = schema['ui:order'] || Object.keys(schema.properties);
if (propertyKeys_1.includes('*') && !hasOwn(schema.properties, '*')) {
var unnamedKeys = Object.keys(schema.properties)
.filter(function (key) { return !propertyKeys_1.includes(key); });
for (var i = propertyKeys_1.length - 1; i >= 0; i--) {
if (propertyKeys_1[i] === '*') {
propertyKeys_1.splice.apply(propertyKeys_1, [i, 1].concat(unnamedKeys));
}
}
}
propertyKeys_1
.filter(function (key) {
return hasOwn(schema.properties, key) ||
hasOwn(schema, 'additionalProperties');
})
.forEach(function (key) {
return controls[key] = buildFormGroupTemplate(jsf, JsonPointer.get(nodeValue, [key]), setValues, schemaPointer + (hasOwn(schema.properties, key) ?
'/properties/' + key : '/additionalProperties'), dataPointer + '/' + key, templatePointer + '/controls/' + key);
});
jsf.formOptions.fieldsRequired = setRequiredFields(schema, controls);
}
return { controlType: controlType, controls: controls, validators: validators };
case 'FormArray':
controls = [];
var minItems = Math.max(schema.minItems || 0, nodeOptions.get('minItems') || 0);
var maxItems = Math.min(schema.maxItems || 1000, nodeOptions.get('maxItems') || 1000);
var additionalItemsPointer = null;
if (isArray$2(schema.items)) {
var tupleItems = nodeOptions.get('tupleItems') ||
(isArray$2(schema.items) ? Math.min(schema.items.length, maxItems) : 0);
for (var i = 0; i < tupleItems; i++) {
if (i < minItems) {
controls.push(buildFormGroupTemplate(jsf, isArray$2(nodeValue) ? nodeValue[i] : nodeValue, setValues, schemaPointer + '/items/' + i, dataPointer + '/' + i, templatePointer + '/controls/' + i));
}
else {
var schemaRefPointer = removeRecursiveReferences(schemaPointer + '/items/' + i, jsf.schemaRecursiveRefMap);
var itemRefPointer = removeRecursiveReferences(shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap);
var itemRecursive = itemRefPointer !== shortDataPointer + '/' + i;
if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {
jsf.templateRefLibrary[itemRefPointer] = null;
jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(jsf, null, setValues, schemaRefPointer, itemRefPointer, templatePointer + '/controls/' + i);
}
controls.push(isArray$2(nodeValue) ?
buildFormGroupTemplate(jsf, nodeValue[i], setValues, schemaPointer + '/items/' + i, dataPointer + '/' + i, templatePointer + '/controls/' + i) :
itemRecursive ?
null : cloneDeep(jsf.templateRefLibrary[itemRefPointer]));
}
}
if (schema.items.length < maxItems && isObject$1(schema.additionalItems)) {
additionalItemsPointer = schemaPointer + '/additionalItems';
}
}
else {
additionalItemsPointer = schemaPointer + '/items';
}
if (additionalItemsPointer) {
var schemaRefPointer = removeRecursiveReferences(additionalItemsPointer, jsf.schemaRecursiveRefMap);
var itemRefPointer = removeRecursiveReferences(shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap);
var itemRecursive = itemRefPointer !== shortDataPointer + '/-';
if (!hasOwn(jsf.templateRefLibrary, itemRefPointer)) {
jsf.templateRefLibrary[itemRefPointer] = null;
jsf.templateRefLibrary[itemRefPointer] = buildFormGroupTemplate(jsf, null, setValues, schemaRefPointer, itemRefPointer, templatePointer + '/controls/-');
}
var itemOptions = nodeOptions;
if (!itemRecursive || hasOwn(validators, 'required')) {
var arrayLength = Math.min(Math.max(itemRecursive ? 0 :
(itemOptions.get('tupleItems') + itemOptions.get('listItems')) || 0, isArray$2(nodeValue) ? nodeValue.length : 0), maxItems);
for (var i = controls.length; i < arrayLength; i++) {
controls.push(isArray$2(nodeValue) ?
buildFormGroupTemplate(jsf, nodeValue[i], setValues, schemaRefPointer, dataPointer + '/-', templatePointer + '/controls/-') :
itemRecursive ?
null : cloneDeep(jsf.templateRefLibrary[itemRefPointer]));
}
}
}
return { controlType: controlType, controls: controls, validators: validators };
case '$ref':
var schemaRef = JsonPointer.compile(schema.$ref);
var dataRef = JsonPointer.toDataPointer(schemaRef, schema);
var refPointer = removeRecursiveReferences(dataRef, jsf.dataRecursiveRefMap, jsf.arrayMap);
if (refPointer && !hasOwn(jsf.templateRefLibrary, refPointer)) {
jsf.templateRefLibrary[refPointer] = null;
var newTemplate = buildFormGroupTemplate(jsf, setValues, setValues, schemaRef);
if (newTemplate) {
jsf.templateRefLibrary[refPointer] = newTemplate;
}
else {
delete jsf.templateRefLibrary[refPointer];
}
}
return null;
case 'FormControl':
var value = {
value: setValues && isPrimitive(nodeValue) ? nodeValue : null,
disabled: nodeOptions.get('disabled') || false
};
return { controlType: controlType, value: value, validators: validators };
default:
return null;
}
}
function buildFormGroup(template) {
var validatorFns = [];
var validatorFn = null;
if (hasOwn(template, 'validators')) {
forEach(template.validators, function (parameters, validator) {
if (typeof JsonValidators[validator] === 'function') {
validatorFns.push(JsonValidators[validator].apply(null, parameters));
}
});
if (validatorFns.length &&
inArray(template.controlType, ['FormGroup', 'FormArray'])) {
validatorFn = validatorFns.length > 1 ?
JsonValidators.compose(validatorFns) : validatorFns[0];
}
}
if (hasOwn(template, 'controlType')) {
switch (template.controlType) {
case 'FormGroup':
var groupControls_1 = {};
forEach(template.controls, function (controls, key) {
var newControl = buildFormGroup(controls);
if (newControl) {
groupControls_1[key] = newControl;
}
});
return new FormGroup(groupControls_1, validatorFn);
case 'FormArray':
return new FormArray(filter(map(template.controls, function (controls) { return buildFormGroup(controls); })), validatorFn);
case 'FormControl':
return new FormControl(template.value, validatorFns);
}
}
return null;
}
function setRequiredFields(schema, formControlTemplate) {
var fieldsRequired = false;
if (hasOwn(schema, 'required') && !isEmpty(schema.required)) {
fieldsRequired = true;
var requiredArray = isArray$2(schema.required) ? schema.required : [schema.required];
requiredArray = forEach(requiredArray, function (key) { return JsonPointer.set(formControlTemplate, '/' + key + '/validators/required', []); });
}
return fieldsRequired;
}
function formatFormData(formData, dataMap, recursiveRefMap, arrayMap, returnEmptyFields, fixErrors) {
if (returnEmptyFields === void 0) { returnEmptyFields = false; }
if (fixErrors === void 0) { fixErrors = false; }
if (formData === null || typeof formData !== 'object') {
return formData;
}
var formattedData = isArray$2(formData) ? [] : {};
JsonPointer.forEachDeep(formData, function (value, dataPointer) {
if (returnEmptyFields && isArray$2(value)) {
JsonPointer.set(formattedData, dataPointer, []);
}
else if (returnEmptyFields && isObject$1(value) && !isDate(value)) {
JsonPointer.set(formattedData, dataPointer, {});
}
else {
var genericPointer_1 = JsonPointer.has(dataMap, [dataPointer, 'schemaType']) ? dataPointer :
removeRecursiveReferences(dataPointer, recursiveRefMap, arrayMap);
if (JsonPointer.has(dataMap, [genericPointer_1, 'schemaType'])) {
var schemaType = dataMap.get(genericPointer_1).get('schemaType');
if (schemaType === 'null') {
JsonPointer.set(formattedData, dataPointer, null);
}
else if ((hasValue(value) || returnEmptyFields) &&
inArray(schemaType, ['string', 'integer', 'number', 'boolean'])) {
var newValue = (fixErrors || (value === null && returnEmptyFields)) ?
toSchemaType(value, schemaType) : toJavaScriptType(value, schemaType);
if (isDefined(newValue) || returnEmptyFields) {
JsonPointer.set(formattedData, dataPointer, newValue);
}
}
else if (schemaType === 'object' && !returnEmptyFields) {
(dataMap.get(genericPointer_1).get('required') || []).forEach(function (key) {
var keySchemaType = dataMap.get(genericPointer_1 + "/" + key).get('schemaType');
if (keySchemaType === 'array') {
JsonPointer.set(formattedData, dataPointer + "/" + key, []);
}
else if (keySchemaType === 'object') {
JsonPointer.set(formattedData, dataPointer + "/" + key, {});
}
});
}
if (dataMap.get(genericPointer_1).get('schemaFormat') === 'date-time') {
if (/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d:[0-5]\d(?:\.\d+)?$/i.test(value)) {
JsonPointer.set(formattedData, dataPointer, value + "Z");
}
else if (/^\d\d\d\d-[0-1]\d-[0-3]\d[t\s][0-2]\d:[0-5]\d$/i.test(value)) {
JsonPointer.set(formattedData, dataPointer, value + ":00Z");
}
else if (fixErrors && /^\d\d\d\d-[0-1]\d-[0-3]\d$/i.test(value)) {
JsonPointer.set(formattedData, dataPointer, value + ":00:00:00Z");
}
}
}
else if (typeof value !== 'object' || isDate(value) ||
(value === null && returnEmptyFields)) {
console.error('formatFormData error: ' +
("Schema type not found for form value at " + genericPointer_1));
console.error('dataMap', dataMap);
console.error('recursiveRefMap', recursiveRefMap);
console.error('genericPointer', genericPointer_1);
}
}
});
return formattedData;
}
function getControl(formGroup, dataPointer, returnGroup) {
if (returnGroup === void 0) { returnGroup = false; }
if (!isObject$1(formGroup) || !JsonPointer.isJsonPointer(dataPointer)) {
if (!JsonPointer.isJsonPointer(dataPointer)) {
if (typeof dataPointer === 'string') {
var formControl = formGroup.get(dataPointer);
if (formControl) {
return formControl;
}
}
console.error("getControl error: Invalid JSON Pointer: " + dataPointer);
}
if (!isObject$1(formGroup)) {
console.error("getControl error: Invalid formGroup: " + formGroup);
}
return null;
}
var dataPointerArray = JsonPointer.parse(dataPointer);
if (returnGroup) {
dataPointerArray = dataPointerArray.slice(0, -1);
}
if (typeof formGroup.get === 'function' &&
dataPointerArray.every(function (key) { return key.indexOf('.') === -1; })) {
var formControl = formGroup.get(dataPointerArray.join('.'));
if (formControl) {
return formControl;
}
}
var subGroup = formGroup;
for (var _i = 0, dataPointerArray_1 = dataPointerArray; _i < dataPointerArray_1.length; _i++) {
var key = dataPointerArray_1[_i];
if (hasOwn(subGroup, 'controls')) {
subGroup = subGroup.controls;
}
if (isArray$2(subGroup) && (key === '-')) {
subGroup = subGroup[subGroup.length - 1];
}
else if (hasOwn(subGroup, key)) {
subGroup = subGroup[key];
}
else {
console.error("getControl error: Unable to find \"" + key + "\" item in FormGroup.");
console.error(dataPointer);
console.error(formGroup);
return;
}
}
return subGroup;
}
var __assign$6 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
function buildLayout(jsf, widgetLibrary) {
var hasSubmitButton = !JsonPointer.get(jsf, '/formOptions/addSubmit');
var formLayout = mapLayout(jsf.layout, function (layoutItem, index, layoutPointer) {
var newNode = {
_id: uniqueId(),
options: {},
};
if (isObject$1(layoutItem)) {
Object.assign(newNode, layoutItem);
Object.keys(newNode)
.filter(function (option) {
return !inArray(option, [
'_id', '$ref', 'arrayItem', 'arrayItemType', 'dataPointer', 'dataType',
'items', 'key', 'name', 'options', 'recursiveReference', 'type', 'widget'
]);
})
.forEach(function (option) {
newNode.options[option] = newNode[option];
delete newNode[option];
});
if (!hasOwn(newNode, 'type') && isString(newNode.widget)) {
newNode.type = newNode.widget;
delete newNode.widget;
}
if (!hasOwn(newNode.options, 'title')) {
if (hasOwn(newNode.options, 'legend')) {
newNode.options.title = newNode.options.legend;
delete newNode.options.legend;
}
}
if (!hasOwn(newNode.options, 'validationMessages')) {
if (hasOwn(newNode.options, 'errorMessages')) {
newNode.options.validationMessages = newNode.options.errorMessages;
delete newNode.options.errorMessages;
}
else if (hasOwn(newNode.options, 'validationMessage')) {
if (typeof newNode.options.validationMessage === 'string') {
newNode.options.validationMessages = newNode.options.validationMessage;
}
else {
newNode.options.validationMessages = {};
Object.keys(newNode.options.validationMessage).forEach(function (key) {
var code = key + '';
var newKey = code === '0' ? 'type' :
code === '1' ? 'enum' :
code === '100' ? 'multipleOf' :
code === '101' ? 'minimum' :
code === '102' ? 'exclusiveMinimum' :
code === '103' ? 'maximum' :
code === '104' ? 'exclusiveMaximum' :
code === '200' ? 'minLength' :
code === '201' ? 'maxLength' :
code === '202' ? 'pattern' :
code === '300' ? 'minProperties' :
code === '301' ? 'maxProperties' :
code === '302' ? 'required' :
code === '304' ? 'dependencies' :
code === '400' ? 'minItems' :
code === '401' ? 'maxItems' :
code === '402' ? 'uniqueItems' :
code === '500' ? 'format' : code + '';
newNode.options.validationMessages[newKey] = newNode.options.validationMessage[key];
});
}
delete newNode.options.validationMessage;
}
}
}
else if (JsonPointer.isJsonPointer(layoutItem)) {
newNode.dataPointer = layoutItem;
}
else if (isString(layoutItem)) {
newNode.key = layoutItem;
}
else {
console.error('buildLayout error: Form layout element not recognized:');
console.error(layoutItem);
return null;
}
var nodeSchema = null;
if (!hasOwn(newNode, 'dataPointer')) {
if (hasOwn(newNode, 'key')) {
newNode.dataPointer = newNode.key === '*' ? newNode.key :
JsonPointer.compile(JsonPointer.parseObjectPath(newNode.key), '-');
delete newNode.key;
}
else if (hasOwn(newNode, 'type') && newNode.type.slice(-5) === 'array') {
var findDataPointer_1 = function (items) {
if (items === null || typeof items !== 'object') {
return;
}
if (hasOwn(items, 'dataPointer')) {
return items.dataPointer;
}
if (isArray$2(items.items)) {
for (var _i = 0, _a = items.items; _i < _a.length; _i++) {
var item = _a[_i];
if (hasOwn(item, 'dataPointer') && item.dataPointer.indexOf('/-') !== -1) {
return item.dataPointer;
}
if (hasOwn(item, 'items')) {
var searchItem = findDataPointer_1(item);
if (searchItem) {
return searchItem;
}
}
}
}
};
var childDataPointer = findDataPointer_1(newNode);
if (childDataPointer) {
newNode.dataPointer =
childDataPointer.slice(0, childDataPointer.lastIndexOf('/-'));
}
}
}
if (hasOwn(newNode, 'dataPointer')) {
if (newNode.dataPointer === '*') {
return buildLayoutFromSchema(jsf, widgetLibrary, jsf.formValues);
}
var nodeValue = JsonPointer.get(jsf.formValues, newNode.dataPointer.replace(/\/-/g, '/1'));
newNode.dataPointer =
JsonPointer.toGenericPointer(newNode.dataPointer, jsf.arrayMap);
var LastKey = JsonPointer.toKey(newNode.dataPointer);
if (!newNode.name && isString(LastKey) && LastKey !== '-') {
newNode.name = LastKey;
}
var shortDataPointer = removeRecursiveReferences(newNode.dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap);
var recursive_1 = !shortDataPointer.length ||
shortDataPointer !== newNode.dataPointer;
var schemaPointer = void 0;
if (!jsf.dataMap.has(shortDataPointer)) {
jsf.dataMap.set(shortDataPointer, new Map());
}
var nodeDataMap = jsf.dataMap.get(shortDataPointer);
if (nodeDataMap.has('schemaPointer')) {
schemaPointer = nodeDataMap.get('schemaPointer');
}
else {
schemaPointer = JsonPointer.toSchemaPointer(shortDataPointer, jsf.schema);
nodeDataMap.set('schemaPointer', schemaPointer);
}
nodeDataMap.set('disabled', !!newNode.options.disabled);
nodeSchema = JsonPointer.get(jsf.schema, schemaPointer);
if (nodeSchema) {
if (!hasOwn(newNode, 'type')) {
newNode.type = getInputType(nodeSchema, newNode);
}
else if (!widgetLibrary.hasWidget(newNode.type)) {
var oldWidgetType = newNode.type;
newNode.type = getInputType(nodeSchema, newNode);
console.error("error: widget type \"" + oldWidgetType + "\" " +
("not found in library. Replacing with \"" + newNode.type + "\"."));
}
else {
newNode.type = checkInlineType(newNode.type, nodeSchema, newNode);
}
if (nodeSchema.type === 'object' && isArray$2(nodeSchema.required)) {
nodeDataMap.set('required', nodeSchema.required);
}
newNode.dataType =
nodeSchema.type || (hasOwn(nodeSchema, '$ref') ? '$ref' : null);
updateInputOptions(newNode, nodeSchema, jsf);
if (newNode.type === 'checkboxes' && hasOwn(nodeSchema, 'items')) {
updateInputOptions(newNode, nodeSchema.items, jsf);
}
else if (newNode.dataType === 'array') {
newNode.options.maxItems = Math.min(nodeSchema.maxItems || 1000, newNode.options.maxItems || 1000);
newNode.options.minItems = Math.max(nodeSchema.minItems || 0, newNode.options.minItems || 0);
newNode.options.listItems = Math.max(newNode.options.listItems || 0, isArray$2(nodeValue) ? nodeValue.length : 0);
newNode.options.tupleItems =
isArray$2(nodeSchema.items) ? nodeSchema.items.length : 0;
if (newNode.options.maxItems < newNode.options.tupleItems) {
newNode.options.tupleItems = newNode.options.maxItems;
newNode.options.listItems = 0;
}
else if (newNode.options.maxItems <
newNode.options.tupleItems + newNode.options.listItems) {
newNode.options.listItems =
newNode.options.maxItems - newNode.options.tupleItems;
}
else if (newNode.options.minItems >
newNode.options.tupleItems + newNode.options.listItems) {
newNode.options.listItems =
newNode.options.minItems - newNode.options.tupleItems;
}
if (!nodeDataMap.has('maxItems')) {
nodeDataMap.set('maxItems', newNode.options.maxItems);
nodeDataMap.set('minItems', newNode.options.minItems);
nodeDataMap.set('tupleItems', newNode.options.tupleItems);
nodeDataMap.set('listItems', newNode.options.listItems);
}
if (!jsf.arrayMap.has(shortDataPointer)) {
jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);
}
}
if (isInputRequired(jsf.schema, schemaPointer)) {
newNode.options.required = true;
jsf.fieldsRequired = true;
}
}
else {
updateInputOptions(newNode, {}, jsf);
}
if (!newNode.options.title && !/^\d+$/.test(newNode.name)) {
newNode.options.title = fixTitle(newNode.name);
}
if (hasOwn(newNode.options, 'copyValueTo')) {
if (typeof newNode.options.copyValueTo === 'string') {
newNode.options.copyValueTo = [newNode.options.copyValueTo];
}
if (isArray$2(newNode.options.copyValueTo)) {
newNode.options.copyValueTo = newNode.options.copyValueTo.map(function (item) {
return JsonPointer.compile(JsonPointer.parseObjectPath(item), '-');
});
}
}
newNode.widget = widgetLibrary.getWidget(newNode.type);
nodeDataMap.set('inputType', newNode.type);
nodeDataMap.set('widget', newNode.widget);
if (newNode.dataType === 'array' &&
(hasOwn(newNode, 'items') || hasOwn(newNode, 'additionalItems'))) {
var itemRefPointer_1 = removeRecursiveReferences(newNode.dataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap);
if (!jsf.dataMap.has(itemRefPointer_1)) {
jsf.dataMap.set(itemRefPointer_1, new Map());
}
jsf.dataMap.get(itemRefPointer_1).set('inputType', 'section');
if (newNode.items.length > 1) {
var arrayItemGroup = [];
for (var i = newNode.items.length - 1; i >= 0; i--) {
var subItem = newNode.items[i];
if (hasOwn(subItem, 'dataPointer') &&
subItem.dataPointer.slice(0, itemRefPointer_1.length) === itemRefPointer_1) {
var arrayItem = newNode.items.splice(i, 1)[0];
arrayItem.dataPointer = newNode.dataPointer + '/-' +
arrayItem.dataPointer.slice(itemRefPointer_1.length);
arrayItemGroup.unshift(arrayItem);
}
else {
subItem.arrayItem = true;
subItem.arrayItemType = 'list';
subItem.removable = newNode.options.removable !== false;
}
}
if (arrayItemGroup.length) {
newNode.items.push({
_id: uniqueId(),
arrayItem: true,
arrayItemType: newNode.options.tupleItems > newNode.items.length ?
'tuple' : 'list',
items: arrayItemGroup,
options: { removable: newNode.options.removable !== false, },
dataPointer: newNode.dataPointer + '/-',
type: 'section',
widget: widgetLibrary.getWidget('section'),
});
}
}
else {
newNode.items[0].arrayItem = true;
if (!newNode.items[0].dataPointer) {
newNode.items[0].dataPointer =
JsonPointer.toGenericPointer(itemRefPointer_1, jsf.arrayMap);
}
if (!JsonPointer.has(newNode, '/items/0/options/removable')) {
newNode.items[0].options.removable = true;
}
if (newNode.options.orderable === false) {
newNode.items[0].options.orderable = false;
}
newNode.items[0].arrayItemType =
newNode.options.tupleItems ? 'tuple' : 'list';
}
if (isArray$2(newNode.items)) {
var arrayListItems = newNode.items.filter(function (item) { return item.type !== '$ref'; }).length -
newNode.options.tupleItems;
if (arrayListItems > newNode.options.listItems) {
newNode.options.listItems = arrayListItems;
nodeDataMap.set('listItems', arrayListItems);
}
}
if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer_1)) {
jsf.layoutRefLibrary[itemRefPointer_1] =
cloneDeep(newNode.items[newNode.items.length - 1]);
if (recursive_1) {
jsf.layoutRefLibrary[itemRefPointer_1].recursiveReference = true;
}
forEach(jsf.layoutRefLibrary[itemRefPointer_1], function (item, key) {
if (hasOwn(item, '_id')) {
item._id = null;
}
if (recursive_1) {
if (hasOwn(item, 'dataPointer')) {
item.dataPointer = item.dataPointer.slice(itemRefPointer_1.length);
}
}
}, 'top-down');
}
if (!newNode.recursiveReference || newNode.options.required) {
var arrayLength = Math.min(Math.max(newNode.options.tupleItems + newNode.options.listItems, isArray$2(nodeValue) ? nodeValue.length : 0), newNode.options.maxItems);
for (var i = newNode.items.length; i < arrayLength; i++) {
newNode.items.push(getLayoutNode({
$ref: itemRefPointer_1,
dataPointer: newNode.dataPointer,
recursiveReference: newNode.recursiveReference,
}, jsf, widgetLibrary));
}
}
if (newNode.options.addable !== false &&
newNode.options.minItems < newNode.options.maxItems &&
(newNode.items[newNode.items.length - 1] || {}).type !== '$ref') {
var buttonText = 'Add';
if (newNode.options.title) {
if (/^add\b/i.test(newNode.options.title)) {
buttonText = newNode.options.title;
}
else {
buttonText += ' ' + newNode.options.title;
}
}
else if (newNode.name && !/^\d+$/.test(newNode.name)) {
if (/^add\b/i.test(newNode.name)) {
buttonText += ' ' + fixTitle(newNode.name);
}
else {
buttonText = fixTitle(newNode.name);
}
}
else {
var parentSchema = getFromSchema(jsf.schema, newNode.dataPointer, 'parentSchema');
if (hasOwn(parentSchema, 'title')) {
buttonText += ' to ' + parentSchema.title;
}
else {
var pointerArray = JsonPointer.parse(newNode.dataPointer);
buttonText += ' to ' + fixTitle(pointerArray[pointerArray.length - 2]);
}
}
newNode.items.push({
_id: uniqueId(),
arrayItem: true,
arrayItemType: 'list',
dataPointer: newNode.dataPointer + '/-',
options: {
listItems: newNode.options.listItems,
maxItems: newNode.options.maxItems,
minItems: newNode.options.minItems,
removable: false,
title: buttonText,
tupleItems: newNode.options.tupleItems,
},
recursiveReference: recursive_1,
type: '$ref',
widget: widgetLibrary.getWidget('$ref'),
$ref: itemRefPointer_1,
});
if (isString(JsonPointer.get(newNode, '/style/add'))) {
newNode.items[newNode.items.length - 1].options.fieldStyle =
newNode.style.add;
delete newNode.style.add;
if (isEmpty(newNode.style)) {
delete newNode.style;
}
}
}
}
else {
newNode.arrayItem = false;
}
}
else if (hasOwn(newNode, 'type') || hasOwn(newNode, 'items')) {
var parentType = JsonPointer.get(jsf.layout, layoutPointer, 0, -2).type;
if (!hasOwn(newNode, 'type')) {
newNode.type =
inArray(parentType, ['tabs', 'tabarray']) ? 'tab' : 'array';
}
newNode.arrayItem = parentType === 'array';
newNode.widget = widgetLibrary.getWidget(newNode.type);
updateInputOptions(newNode, {}, jsf);
}
if (newNode.type === 'submit') {
hasSubmitButton = true;
}
return newNode;
});
if (jsf.hasRootReference) {
var fullLayout = cloneDeep(formLayout);
if (fullLayout[fullLayout.length - 1].type === 'submit') {
fullLayout.pop();
}
jsf.layoutRefLibrary[''] = {
_id: null,
dataPointer: '',
dataType: 'object',
items: fullLayout,
name: '',
options: cloneDeep(jsf.formOptions.defautWidgetOptions),
recursiveReference: true,
required: false,
type: 'section',
widget: widgetLibrary.getWidget('section'),
};
}
if (!hasSubmitButton) {
formLayout.push({
_id: uniqueId(),
options: { title: 'Submit' },
type: 'submit',
widget: widgetLibrary.getWidget('submit'),
});
}
return formLayout;
}
function buildLayoutFromSchema(jsf, widgetLibrary, nodeValue, schemaPointer, dataPointer, arrayItem, arrayItemType, removable, forRefLibrary, dataPointerPrefix) {
if (nodeValue === void 0) { nodeValue = null; }
if (schemaPointer === void 0) { schemaPointer = ''; }
if (dataPointer === void 0) { dataPointer = ''; }
if (arrayItem === void 0) { arrayItem = false; }
if (arrayItemType === void 0) { arrayItemType = null; }
if (removable === void 0) { removable = null; }
if (forRefLibrary === void 0) { forRefLibrary = false; }
if (dataPointerPrefix === void 0) { dataPointerPrefix = ''; }
var schema = JsonPointer.get(jsf.schema, schemaPointer);
if (!hasOwn(schema, 'type') && !hasOwn(schema, '$ref') &&
!hasOwn(schema, 'x-schema-form')) {
return null;
}
var newNodeType = getInputType(schema);
if (!isDefined(nodeValue) && (jsf.formOptions.setSchemaDefaults === true ||
(jsf.formOptions.setSchemaDefaults === 'auto' && isEmpty(jsf.formValues)))) {
nodeValue = JsonPointer.get(jsf.schema, schemaPointer + '/default');
}
var newNode = {
_id: forRefLibrary ? null : uniqueId(),
arrayItem: arrayItem,
dataPointer: JsonPointer.toGenericPointer(dataPointer, jsf.arrayMap),
dataType: schema.type || (hasOwn(schema, '$ref') ? '$ref' : null),
options: {},
required: isInputRequired(jsf.schema, schemaPointer),
type: newNodeType,
widget: widgetLibrary.getWidget(newNodeType),
};
var lastDataKey = JsonPointer.toKey(newNode.dataPointer);
if (lastDataKey !== '-') {
newNode.name = lastDataKey;
}
if (newNode.arrayItem) {
newNode.arrayItemType = arrayItemType;
newNode.options.removable = removable !== false;
}
var shortDataPointer = removeRecursiveReferences(dataPointerPrefix + dataPointer, jsf.dataRecursiveRefMap, jsf.arrayMap);
var recursive = !shortDataPointer.length ||
shortDataPointer !== dataPointerPrefix + dataPointer;
if (!jsf.dataMap.has(shortDataPointer)) {
jsf.dataMap.set(shortDataPointer, new Map());
}
var nodeDataMap = jsf.dataMap.get(shortDataPointer);
if (!nodeDataMap.has('inputType')) {
nodeDataMap.set('schemaPointer', schemaPointer);
nodeDataMap.set('inputType', newNode.type);
nodeDataMap.set('widget', newNode.widget);
nodeDataMap.set('disabled', !!newNode.options.disabled);
}
updateInputOptions(newNode, schema, jsf);
if (!newNode.options.title && newNode.name && !/^\d+$/.test(newNode.name)) {
newNode.options.title = fixTitle(newNode.name);
}
if (newNode.dataType === 'object') {
if (isArray$2(schema.required) && !nodeDataMap.has('required')) {
nodeDataMap.set('required', schema.required);
}
if (isObject$1(schema.properties)) {
var newSection_1 = [];
var propertyKeys_1 = schema['ui:order'] || Object.keys(schema.properties);
if (propertyKeys_1.includes('*') && !hasOwn(schema.properties, '*')) {
var unnamedKeys = Object.keys(schema.properties)
.filter(function (key) { return !propertyKeys_1.includes(key); });
for (var i = propertyKeys_1.length - 1; i >= 0; i--) {
if (propertyKeys_1[i] === '*') {
propertyKeys_1.splice.apply(propertyKeys_1, [i, 1].concat(unnamedKeys));
}
}
}
propertyKeys_1
.filter(function (key) {
return hasOwn(schema.properties, key) ||
hasOwn(schema, 'additionalProperties');
})
.forEach(function (key) {
var keySchemaPointer = hasOwn(schema.properties, key) ?
'/properties/' + key : '/additionalProperties';
var innerItem = buildLayoutFromSchema(jsf, widgetLibrary, isObject$1(nodeValue) ? nodeValue[key] : null, schemaPointer + keySchemaPointer, dataPointer + '/' + key, false, null, null, forRefLibrary, dataPointerPrefix);
if (innerItem) {
if (isInputRequired(schema, '/' + key)) {
innerItem.options.required = true;
jsf.fieldsRequired = true;
}
newSection_1.push(innerItem);
}
});
if (dataPointer === '' && !forRefLibrary) {
newNode = newSection_1;
}
else {
newNode.items = newSection_1;
}
}
}
else if (newNode.dataType === 'array') {
newNode.items = [];
newNode.options.maxItems = Math.min(schema.maxItems || 1000, newNode.options.maxItems || 1000);
newNode.options.minItems = Math.max(schema.minItems || 0, newNode.options.minItems || 0);
if (!newNode.options.minItems && isInputRequired(jsf.schema, schemaPointer)) {
newNode.options.minItems = 1;
}
if (!hasOwn(newNode.options, 'listItems')) {
newNode.options.listItems = 1;
}
newNode.options.tupleItems = isArray$2(schema.items) ? schema.items.length : 0;
if (newNode.options.maxItems <= newNode.options.tupleItems) {
newNode.options.tupleItems = newNode.options.maxItems;
newNode.options.listItems = 0;
}
else if (newNode.options.maxItems <
newNode.options.tupleItems + newNode.options.listItems) {
newNode.options.listItems = newNode.options.maxItems - newNode.options.tupleItems;
}
else if (newNode.options.minItems >
newNode.options.tupleItems + newNode.options.listItems) {
newNode.options.listItems = newNode.options.minItems - newNode.options.tupleItems;
}
if (!nodeDataMap.has('maxItems')) {
nodeDataMap.set('maxItems', newNode.options.maxItems);
nodeDataMap.set('minItems', newNode.options.minItems);
nodeDataMap.set('tupleItems', newNode.options.tupleItems);
nodeDataMap.set('listItems', newNode.options.listItems);
}
if (!jsf.arrayMap.has(shortDataPointer)) {
jsf.arrayMap.set(shortDataPointer, newNode.options.tupleItems);
}
removable = newNode.options.removable !== false;
var additionalItemsSchemaPointer = null;
if (isArray$2(schema.items)) {
newNode.items = [];
for (var i = 0; i < newNode.options.tupleItems; i++) {
var newItem = void 0;
var itemRefPointer = removeRecursiveReferences(shortDataPointer + '/' + i, jsf.dataRecursiveRefMap, jsf.arrayMap);
var itemRecursive = !itemRefPointer.length ||
itemRefPointer !== shortDataPointer + '/' + i;
if (removable && i >= newNode.options.minItems) {
if (!hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {
jsf.layoutRefLibrary[itemRefPointer] = null;
jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(jsf, widgetLibrary, isArray$2(nodeValue) ? nodeValue[i] : null, schemaPointer + '/items/' + i, itemRecursive ? '' : dataPointer + '/' + i, true, 'tuple', true, true, itemRecursive ? dataPointer + '/' + i : '');
if (itemRecursive) {
jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;
}
}
newItem = getLayoutNode({
$ref: itemRefPointer,
dataPointer: dataPointer + '/' + i,
recursiveReference: itemRecursive,
}, jsf, widgetLibrary, isArray$2(nodeValue) ? nodeValue[i] : null);
}
else {
newItem = buildLayoutFromSchema(jsf, widgetLibrary, isArray$2(nodeValue) ? nodeValue[i] : null, schemaPointer + '/items/' + i, dataPointer + '/' + i, true, 'tuple', false, forRefLibrary, dataPointerPrefix);
}
if (newItem) {
newNode.items.push(newItem);
}
}
if (isObject$1(schema.additionalItems)) {
additionalItemsSchemaPointer = schemaPointer + '/additionalItems';
}
}
else if (isObject$1(schema.items)) {
additionalItemsSchemaPointer = schemaPointer + '/items';
}
if (additionalItemsSchemaPointer) {
var itemRefPointer = removeRecursiveReferences(shortDataPointer + '/-', jsf.dataRecursiveRefMap, jsf.arrayMap);
var itemRecursive = !itemRefPointer.length ||
itemRefPointer !== shortDataPointer + '/-';
var itemSchemaPointer = removeRecursiveReferences(additionalItemsSchemaPointer, jsf.schemaRecursiveRefMap, jsf.arrayMap);
if (itemRefPointer.length && !hasOwn(jsf.layoutRefLibrary, itemRefPointer)) {
jsf.layoutRefLibrary[itemRefPointer] = null;
jsf.layoutRefLibrary[itemRefPointer] = buildLayoutFromSchema(jsf, widgetLibrary, null, itemSchemaPointer, itemRecursive ? '' : dataPointer + '/-', true, 'list', removable, true, itemRecursive ? dataPointer + '/-' : '');
if (itemRecursive) {
jsf.layoutRefLibrary[itemRefPointer].recursiveReference = true;
}
}
if (!itemRecursive || newNode.options.required) {
var arrayLength = Math.min(Math.max(itemRecursive ? 0 :
newNode.options.tupleItems + newNode.options.listItems, isArray$2(nodeValue) ? nodeValue.length : 0), newNode.options.maxItems);
if (newNode.items.length < arrayLength) {
for (var i = newNode.items.length; i < arrayLength; i++) {
newNode.items.push(getLayoutNode({
$ref: itemRefPointer,
dataPointer: dataPointer + '/-',
recursiveReference: itemRecursive,
}, jsf, widgetLibrary, isArray$2(nodeValue) ? nodeValue[i] : null));
}
}
}
if (newNode.options.addable !== false &&
newNode.options.minItems < newNode.options.maxItems &&
(newNode.items[newNode.items.length - 1] || {}).type !== '$ref') {
var buttonText = ((jsf.layoutRefLibrary[itemRefPointer] || {}).options || {}).title;
var prefix = buttonText ? 'Add ' : 'Add to ';
if (!buttonText) {
buttonText = schema.title || fixTitle(JsonPointer.toKey(dataPointer));
}
if (!/^add\b/i.test(buttonText)) {
buttonText = prefix + buttonText;
}
newNode.items.push({
_id: uniqueId(),
arrayItem: true,
arrayItemType: 'list',
dataPointer: newNode.dataPointer + '/-',
options: {
listItems: newNode.options.listItems,
maxItems: newNode.options.maxItems,
minItems: newNode.options.minItems,
removable: false,
title: buttonText,
tupleItems: newNode.options.tupleItems,
},
recursiveReference: itemRecursive,
type: '$ref',
widget: widgetLibrary.getWidget('$ref'),
$ref: itemRefPointer,
});
}
}
}
else if (newNode.dataType === '$ref') {
var schemaRef = JsonPointer.compile(schema.$ref);
var dataRef = JsonPointer.toDataPointer(schemaRef, jsf.schema);
var buttonText = '';
if (newNode.options.add) {
buttonText = newNode.options.add;
}
else if (newNode.name && !/^\d+$/.test(newNode.name)) {
buttonText =
(/^add\b/i.test(newNode.name) ? '' : 'Add ') + fixTitle(newNode.name);
}
else {
var parentSchema = JsonPointer.get(jsf.schema, schemaPointer, 0, -1);
if (hasOwn(parentSchema, 'title')) {
buttonText = 'Add to ' + parentSchema.title;
}
else {
var pointerArray = JsonPointer.parse(newNode.dataPointer);
buttonText = 'Add to ' + fixTitle(pointerArray[pointerArray.length - 2]);
}
}
Object.assign(newNode, {
recursiveReference: true,
widget: widgetLibrary.getWidget('$ref'),
$ref: dataRef,
});
Object.assign(newNode.options, {
removable: false,
title: buttonText,
});
if (isNumber(JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems)) {
newNode.options.maxItems =
JsonPointer.get(jsf.schema, schemaPointer, 0, -1).maxItems;
}
if (dataRef.length) {
if (!hasOwn(jsf.layoutRefLibrary, dataRef)) {
jsf.layoutRefLibrary[dataRef] = null;
var newLayout = buildLayoutFromSchema(jsf, widgetLibrary, null, schemaRef, '', newNode.arrayItem, newNode.arrayItemType, true, true, dataPointer);
if (newLayout) {
newLayout.recursiveReference = true;
jsf.layoutRefLibrary[dataRef] = newLayout;
}
else {
delete jsf.layoutRefLibrary[dataRef];
}
}
else if (!jsf.layoutRefLibrary[dataRef].recursiveReference) {
jsf.layoutRefLibrary[dataRef].recursiveReference = true;
}
}
}
return newNode;
}
function mapLayout(layout, fn, layoutPointer, rootLayout) {
if (layoutPointer === void 0) { layoutPointer = ''; }
if (rootLayout === void 0) { rootLayout = layout; }
var indexPad = 0;
var newLayout = [];
forEach(layout, function (item, index) {
var realIndex = +index + indexPad;
var newLayoutPointer = layoutPointer + '/' + realIndex;
var newNode = copy(item);
var itemsArray = [];
if (isObject$1(item)) {
if (hasOwn(item, 'tabs')) {
item.items = item.tabs;
delete item.tabs;
}
if (hasOwn(item, 'items')) {
itemsArray = isArray$2(item.items) ? item.items : [item.items];
}
}
if (itemsArray.length) {
newNode.items = mapLayout(itemsArray, fn, newLayoutPointer + '/items', rootLayout);
}
newNode = fn(newNode, realIndex, newLayoutPointer, rootLayout);
if (!isDefined(newNode)) {
indexPad--;
}
else {
if (isArray$2(newNode)) {
indexPad += newNode.length - 1;
}
newLayout = newLayout.concat(newNode);
}
});
return newLayout;
}
function getLayoutNode(refNode, jsf, widgetLibrary, nodeValue) {
if (widgetLibrary === void 0) { widgetLibrary = null; }
if (nodeValue === void 0) { nodeValue = null; }
if (refNode.recursiveReference && widgetLibrary) {
var newLayoutNode = cloneDeep(refNode);
if (!newLayoutNode.options) {
newLayoutNode.options = {};
}
Object.assign(newLayoutNode, {
recursiveReference: true,
widget: widgetLibrary.getWidget('$ref'),
});
Object.assign(newLayoutNode.options, {
removable: false,
title: 'Add ' + newLayoutNode.$ref,
});
return newLayoutNode;
}
else {
var newLayoutNode = jsf.layoutRefLibrary[refNode.$ref];
if (isDefined(nodeValue)) {
newLayoutNode = buildLayoutFromSchema(jsf, widgetLibrary, nodeValue, JsonPointer.toSchemaPointer(refNode.$ref, jsf.schema), refNode.$ref, newLayoutNode.arrayItem, newLayoutNode.arrayItemType, newLayoutNode.options.removable, false);
}
else {
newLayoutNode = cloneDeep(newLayoutNode);
JsonPointer.forEachDeep(newLayoutNode, function (subNode, pointer) {
if (hasOwn(subNode, '_id')) {
subNode._id = uniqueId();
}
if (refNode.recursiveReference && hasOwn(subNode, 'dataPointer')) {
subNode.dataPointer = refNode.dataPointer + subNode.dataPointer;
}
});
}
return newLayoutNode;
}
}
function buildTitleMap(titleMap, enumList, fieldRequired, flatList) {
if (fieldRequired === void 0) { fieldRequired = true; }
if (flatList === void 0) { flatList = true; }
var newTitleMap = [];
var hasEmptyValue = false;
if (titleMap) {
if (isArray$2(titleMap)) {
if (enumList) {
for (var _i = 0, _a = Object.keys(titleMap); _i < _a.length; _i++) {
var i = _a[_i];
if (isObject$1(titleMap[i])) {
var value = titleMap[i].value;
if (enumList.includes(value)) {
var name_1 = titleMap[i].name;
newTitleMap.push({ name: name_1, value: value });
if (value === undefined || value === null) {
hasEmptyValue = true;
}
}
}
else if (isString(titleMap[i])) {
if (i < enumList.length) {
var name_2 = titleMap[i];
var value = enumList[i];
newTitleMap.push({ name: name_2, value: value });
if (value === undefined || value === null) {
hasEmptyValue = true;
}
}
}
}
}
else {
newTitleMap = titleMap;
if (!fieldRequired) {
hasEmptyValue = !!newTitleMap
.filter(function (i) { return i.value === undefined || i.value === null; })
.length;
}
}
}
else if (enumList) {
for (var _b = 0, _c = Object.keys(enumList); _b < _c.length; _b++) {
var i = _c[_b];
var value = enumList[i];
if (hasOwn(titleMap, value)) {
var name_3 = titleMap[value];
newTitleMap.push({ name: name_3, value: value });
if (value === undefined || value === null) {
hasEmptyValue = true;
}
}
}
}
else {
for (var _d = 0, _e = Object.keys(titleMap); _d < _e.length; _d++) {
var value = _e[_d];
var name_4 = titleMap[value];
newTitleMap.push({ name: name_4, value: value });
if (value === undefined || value === null) {
hasEmptyValue = true;
}
}
}
}
else if (enumList) {
for (var _f = 0, _g = Object.keys(enumList); _f < _g.length; _f++) {
var i = _g[_f];
var name_5 = enumList[i];
var value = enumList[i];
newTitleMap.push({ name: name_5, value: value });
if (value === undefined || value === null) {
hasEmptyValue = true;
}
}
}
else {
newTitleMap = [{ name: 'True', value: true }, { name: 'False', value: false }];
}
if (newTitleMap.some(function (title) { return hasOwn(title, 'group'); })) {
hasEmptyValue = false;
if (flatList) {
newTitleMap = newTitleMap.reduce(function (groupTitleMap, title) {
if (hasOwn(title, 'group')) {
if (isArray$2(title.items)) {
groupTitleMap = groupTitleMap.concat(title.items.map(function (item) {
return (__assign$6({}, item, { name: title.group + ": " + item.name }));
}));
if (title.items.some(function (item) { return item.value === undefined || item.value === null; })) {
hasEmptyValue = true;
}
}
if (hasOwn(title, 'name') && hasOwn(title, 'value')) {
title.name = title.group + ": " + title.name;
delete title.group;
groupTitleMap.push(title);
if (title.value === undefined || title.value === null) {
hasEmptyValue = true;
}
}
}
else {
groupTitleMap.push(title);
if (title.value === undefined || title.value === null) {
hasEmptyValue = true;
}
}
return groupTitleMap;
}, []);
}
else {
newTitleMap = newTitleMap.reduce(function (groupTitleMap, title) {
if (hasOwn(title, 'group')) {
if (title.group !== (groupTitleMap[groupTitleMap.length - 1] || {}).group) {
groupTitleMap.push({ group: title.group, items: title.items || [] });
}
if (hasOwn(title, 'name') && hasOwn(title, 'value')) {
groupTitleMap[groupTitleMap.length - 1].items
.push({ name: title.name, value: title.value });
if (title.value === undefined || title.value === null) {
hasEmptyValue = true;
}
}
}
else {
groupTitleMap.push(title);
if (title.value === undefined || title.value === null) {
hasEmptyValue = true;
}
}
return groupTitleMap;
}, []);
}
}
if (!fieldRequired && !hasEmptyValue) {
newTitleMap.unshift({ name: '<em>None</em>', value: null });
}
return newTitleMap;
}
function dateToString(date, options) {
if (options === void 0) { options = {}; }
var dateFormat = options.dateFormat || 'YYYY-MM-DD';
if (typeof date === 'string') {
date = stringToDate(date);
}
if (Object.prototype.toString.call(date) !== '[object Date]') {
return null;
}
var longMonths = ['January', 'February', 'March', 'April', 'May', 'June',
'July', 'August', 'September', 'October', 'November', 'December'];
var shortMonths = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
var longDays = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
var shortDays = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
return dateFormat
.replace(/YYYY/ig, date.getFullYear() + '')
.replace(/YY/ig, (date.getFullYear() + '').slice(-2))
.replace(/MMMM/ig, longMonths[date.getMonth()])
.replace(/MMM/ig, shortMonths[date.getMonth()])
.replace(/MM/ig, ('0' + (date.getMonth() + 1)).slice(-2))
.replace(/M/ig, (date.getMonth() + 1) + '')
.replace(/DDDD/ig, longDays[date.getDay()])
.replace(/DDD/ig, shortDays[date.getDay()])
.replace(/DD/ig, ('0' + date.getDate()).slice(-2))
.replace(/D/ig, date.getDate() + '')
.replace(/S/ig, ordinal(date.getDate()));
}
function ordinal(number) {
if (typeof number === 'number') {
number = number + '';
}
var last = number.slice(-1);
var nextToLast = number.slice(-2, 1);
return (nextToLast !== '1' && { '1': 'st', '2': 'nd', '3': 'rd' }[last]) || 'th';
}
function stringToDate(dateString) {
var getDate = findDate(dateString);
if (!getDate) {
return null;
}
var dateParts = [];
if (/^\d+[^\d]\d+[^\d]\d+$/.test(getDate)) {
dateParts = getDate.split(/[^\d]/).map(function (part) { return +part; });
}
else if (/^\d{8}$/.test(getDate)) {
dateParts = [+getDate.slice(0, 4), +getDate.slice(4, 6), +getDate.slice(6)];
}
var thisYear = +(new Date().getFullYear() + '').slice(-2);
if (dateParts[0] > 1000 && dateParts[0] < 2100 && dateParts[1] <= 12 && dateParts[2] <= 31) {
return new Date(dateParts[0], dateParts[1] - 1, dateParts[2]);
}
else if (dateParts[0] <= 12 && dateParts[1] <= 31 && dateParts[2] > 1000 && dateParts[2] < 2100) {
return new Date(dateParts[2], dateParts[0] - 1, dateParts[1]);
}
else if (dateParts[0] <= 12 && dateParts[1] <= 31 && dateParts[2] < 100) {
var year = (dateParts[2] <= thisYear ? 2000 : 1900) + dateParts[2];
return new Date(year, dateParts[0] - 1, dateParts[1]);
}
else if (dateParts[0] < 100 && dateParts[1] <= 12 && dateParts[2] <= 31) {
var year = (dateParts[0] <= thisYear ? 2000 : 1900) + dateParts[0];
return new Date(year, dateParts[1] - 1, dateParts[2]);
}
return null;
}
function findDate(text) {
if (!text) {
return null;
}
var foundDate;
foundDate = text.match(/(?:19|20)\d\d[-_\\\/\. ](?:0?\d|1[012])[-_\\\/\. ](?:[012]?\d|3[01])(?!\d)/);
if (foundDate) {
return foundDate[0];
}
foundDate = text.match(/(?:[012]?\d|3[01])[-_\\\/\. ](?:0?\d|1[012])[-_\\\/\. ](?:19|20)\d\d(?!\d)/);
if (foundDate) {
return foundDate[0];
}
foundDate = text.match(/^(?:[012]?\d|3[01])[-_\\\/\. ](?:0?\d|1[012])[-_\\\/\. ]\d\d(?!\d)/);
if (foundDate) {
return foundDate[0];
}
foundDate = text.match(/^\d\d[-_\\\/\. ](?:[012]?\d|3[01])[-_\\\/\. ](?:0?\d|1[012])(?!\d)/);
if (foundDate) {
return foundDate[0];
}
foundDate = text.match(/^(?:19|20)\d\d(?:0\d|1[012])(?:[012]\d|3[01])/);
if (foundDate) {
return foundDate[0];
}
}
var __extends$8 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* An error thrown when an action is invalid because the object has been
* unsubscribed.
*
* @see {@link Subject}
* @see {@link BehaviorSubject}
*
* @class ObjectUnsubscribedError
*/
var ObjectUnsubscribedError = (function (_super) {
__extends$8(ObjectUnsubscribedError, _super);
function ObjectUnsubscribedError() {
var err = _super.call(this, 'object unsubscribed');
this.name = err.name = 'ObjectUnsubscribedError';
this.stack = err.stack;
this.message = err.message;
}
return ObjectUnsubscribedError;
}(Error));
var ObjectUnsubscribedError_2 = ObjectUnsubscribedError;
var ObjectUnsubscribedError_1 = {
ObjectUnsubscribedError: ObjectUnsubscribedError_2
};
var __extends$9 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* We need this JSDoc comment for affecting ESDoc.
* @ignore
* @extends {Ignored}
*/
var SubjectSubscription = (function (_super) {
__extends$9(SubjectSubscription, _super);
function SubjectSubscription(subject, subscriber) {
_super.call(this);
this.subject = subject;
this.subscriber = subscriber;
this.closed = false;
}
SubjectSubscription.prototype.unsubscribe = function () {
if (this.closed) {
return;
}
this.closed = true;
var subject = this.subject;
var observers = subject.observers;
this.subject = null;
if (!observers || observers.length === 0 || subject.isStopped || subject.closed) {
return;
}
var subscriberIndex = observers.indexOf(this.subscriber);
if (subscriberIndex !== -1) {
observers.splice(subscriberIndex, 1);
}
};
return SubjectSubscription;
}(Subscription_1.Subscription));
var SubjectSubscription_2 = SubjectSubscription;
var SubjectSubscription_1 = {
SubjectSubscription: SubjectSubscription_2
};
var __extends$10 = (commonjsGlobal && commonjsGlobal.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
/**
* @class SubjectSubscriber<T>
*/
var SubjectSubscriber = (function (_super) {
__extends$10(SubjectSubscriber, _super);
function SubjectSubscriber(destination) {
_super.call(this, destination);
this.destination = destination;
}
return SubjectSubscriber;
}(Subscriber_1.Subscriber));
/**
* @class Subject<T>
*/
var Subject = (function (_super) {
__extends$10(Subject, _super);
function Subject() {
_super.call(this);
this.observers = [];
this.closed = false;
this.isStopped = false;
this.hasError = false;
this.thrownError = null;
}
Subject.prototype[rxSubscriber.rxSubscriber] = function () {
return new SubjectSubscriber(this);
};
Subject.prototype.lift = function (operator) {
var subject = new AnonymousSubject(this, this);
subject.operator = operator;
return subject;
};
Subject.prototype.next = function (value) {
if (this.closed) {
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
}
if (!this.isStopped) {
var observers = this.observers;
var len = observers.length;
var copy = observers.slice();
for (var i = 0; i < len; i++) {
copy[i].next(value);
}
}
};
Subject.prototype.error = function (err) {
if (this.closed) {
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
}
this.hasError = true;
this.thrownError = err;
this.isStopped = true;
var observers = this.observers;
var len = observers.length;
var copy = observers.slice();
for (var i = 0; i < len; i++) {
copy[i].error(err);
}
this.observers.length = 0;
};
Subject.prototype.complete = function () {
if (this.closed) {
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
}
this.isStopped = true;
var observers = this.observers;
var len = observers.length;
var copy = observers.slice();
for (var i = 0; i < len; i++) {
copy[i].complete();
}
this.observers.length = 0;
};
Subject.prototype.unsubscribe = function () {
this.isStopped = true;
this.closed = true;
this.observers = null;
};
Subject.prototype._trySubscribe = function (subscriber) {
if (this.closed) {
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
}
else {
return _super.prototype._trySubscribe.call(this, subscriber);
}
};
Subject.prototype._subscribe = function (subscriber) {
if (this.closed) {
throw new ObjectUnsubscribedError_1.ObjectUnsubscribedError();
}
else if (this.hasError) {
subscriber.error(this.thrownError);
return Subscription_1.Subscription.EMPTY;
}
else if (this.isStopped) {
subscriber.complete();
return Subscription_1.Subscription.EMPTY;
}
else {
this.observers.push(subscriber);
return new SubjectSubscription_1.SubjectSubscription(this, subscriber);
}
};
Subject.prototype.asObservable = function () {
var observable = new Observable_1.Observable();
observable.source = this;
return observable;
};
Subject.create = function (destination, source) {
return new AnonymousSubject(destination, source);
};
return Subject;
}(Observable_1.Observable));
var Subject_2 = Subject;
/**
* @class AnonymousSubject<T>
*/
var AnonymousSubject = (function (_super) {
__extends$10(AnonymousSubject, _super);
function AnonymousSubject(destination, source) {
_super.call(this);
this.destination = destination;
this.source = source;
}
AnonymousSubject.prototype.next = function (value) {
var destination = this.destination;
if (destination && destination.next) {
destination.next(value);
}
};
AnonymousSubject.prototype.error = function (err) {
var destination = this.destination;
if (destination && destination.error) {
this.destination.error(err);
}
};
AnonymousSubject.prototype.complete = function () {
var destination = this.destination;
if (destination && destination.complete) {
this.destination.complete();
}
};
AnonymousSubject.prototype._subscribe = function (subscriber) {
var source = this.source;
if (source) {
return this.source.subscribe(subscriber);
}
else {
return Subscription_1.Subscription.EMPTY;
}
};
return AnonymousSubject;
}(Subject));
var enValidationMessages = {
required: 'This field is required.',
minLength: 'Must be {{minimumLength}} characters or longer (current length: {{currentLength}})',
maxLength: 'Must be {{maximumLength}} characters or shorter (current length: {{currentLength}})',
pattern: 'Must match pattern: {{requiredPattern}}',
format: function (error) {
switch (error.requiredFormat) {
case 'date':
return 'Must be a date, like "2000-12-31"';
case 'time':
return 'Must be a time, like "16:20" or "03:14:15.9265"';
case 'date-time':
return 'Must be a date-time, like "2000-03-14T01:59" or "2000-03-14T01:59:26.535Z"';
case 'email':
return 'Must be an email address, like "name@example.com"';
case 'hostname':
return 'Must be a hostname, like "example.com"';
case 'ipv4':
return 'Must be an IPv4 address, like "127.0.0.1"';
case 'ipv6':
return 'Must be an IPv6 address, like "1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0"';
case 'url':
return 'Must be a url, like "http://www.example.com/page.html"';
case 'uuid':
return 'Must be a uuid, like "12345678-9ABC-DEF0-1234-56789ABCDEF0"';
case 'color':
return 'Must be a color, like "#FFFFFF" or "rgb(255, 255, 255)"';
case 'json-pointer':
return 'Must be a JSON Pointer, like "/pointer/to/something"';
case 'relative-json-pointer':
return 'Must be a relative JSON Pointer, like "2/pointer/to/something"';
case 'regex':
return 'Must be a regular expression, like "(1-)?\\d{3}-\\d{3}-\\d{4}"';
default:
return 'Must be a correctly formatted ' + error.requiredFormat;
}
},
minimum: 'Must be {{minimumValue}} or more',
exclusiveMinimum: 'Must be more than {{exclusiveMinimumValue}}',
maximum: 'Must be {{maximumValue}} or less',
exclusiveMaximum: 'Must be less than {{exclusiveMaximumValue}}',
multipleOf: function (error) {
if ((1 / error.multipleOfValue) % 10 === 0) {
var decimals = Math.log10(1 / error.multipleOfValue);
return "Must have " + decimals + " or fewer decimal places.";
}
else {
return "Must be a multiple of " + error.multipleOfValue + ".";
}
},
minProperties: 'Must have {{minimumProperties}} or more items (current items: {{currentProperties}})',
maxProperties: 'Must have {{maximumProperties}} or fewer items (current items: {{currentProperties}})',
minItems: 'Must have {{minimumItems}} or more items (current items: {{currentItems}})',
maxItems: 'Must have {{maximumItems}} or fewer items (current items: {{currentItems}})',
uniqueItems: 'All items must be unique',
};
var frValidationMessages = {
required: 'Est obligatoire.',
minLength: 'Doit avoir minimum {{minimumLength}} caractères (actuellement: {{currentLength}})',
maxLength: 'Doit avoir maximum {{maximumLength}} caractères (actuellement: {{currentLength}})',
pattern: 'Doit respecter: {{requiredPattern}}',
format: function (error) {
switch (error.requiredFormat) {
case 'date':
return 'Doit être une date, tel que "2000-12-31"';
case 'time':
return 'Doit être une heure, tel que "16:20" ou "03:14:15.9265"';
case 'date-time':
return 'Doit être une date et une heure, tel que "2000-03-14T01:59" ou "2000-03-14T01:59:26.535Z"';
case 'email':
return 'Doit être une adresse e-mail, tel que "name@example.com"';
case 'hostname':
return 'Doit être un nom de domaine, tel que "example.com"';
case 'ipv4':
return 'Doit être une adresse IPv4, tel que "127.0.0.1"';
case 'ipv6':
return 'Doit être une adresse IPv6, tel que "1234:5678:9ABC:DEF0:1234:5678:9ABC:DEF0"';
case 'url':
return 'Doit être une URL, tel que "http://www.example.com/page.html"';
case 'uuid':
return 'Doit être un UUID, tel que "12345678-9ABC-DEF0-1234-56789ABCDEF0"';
case 'color':
return 'Doit être une couleur, tel que "#FFFFFF" or "rgb(255, 255, 255)"';
case 'json-pointer':
return 'Doit être un JSON Pointer, tel que "/pointer/to/something"';
case 'relative-json-pointer':
return 'Doit être un relative JSON Pointer, tel que "2/pointer/to/something"';
case 'regex':
return 'Doit être une expression régulière, tel que "(1-)?\\d{3}-\\d{3}-\\d{4}"';
default:
return 'Doit être avoir le format correct: ' + error.requiredFormat;
}
},
minimum: 'Doit être supérieur à {{minimumValue}}',
exclusiveMinimum: 'Doit avoir minimum {{exclusiveMinimumValue}} charactères',
maximum: 'Doit être inférieur à {{maximumValue}}',
exclusiveMaximum: 'Doit avoir maximum {{exclusiveMaximumValue}} charactères',
multipleOf: function (error) {
if ((1 / error.multipleOfValue) % 10 === 0) {
var decimals = Math.log10(1 / error.multipleOfValue);
return "Doit comporter " + decimals + " ou moins de decimales.";
}
else {
return "Doit \u00EAtre un multiple de " + error.multipleOfValue + ".";
}
},
minProperties: 'Doit comporter au minimum {{minimumProperties}} éléments',
maxProperties: 'Doit comporter au maximum {{maximumProperties}} éléments',
minItems: 'Doit comporter au minimum {{minimumItems}} éléments',
maxItems: 'Doit comporter au maximum {{minimumItems}} éléments',
uniqueItems: 'Tous les éléments doivent être uniques',
};
var JsonSchemaFormService = (function () {
function JsonSchemaFormService() {
this.JsonFormCompatibility = false;
this.ReactJsonSchemaFormCompatibility = false;
this.AngularSchemaFormCompatibility = false;
this.tpldata = {};
this.ajvOptions = { allErrors: true, jsonPointers: true, unknownFormats: 'ignore' };
this.ajv = new Ajv(this.ajvOptions);
this.validateFormData = null;
this.formValues = {};
this.data = {};
this.schema = {};
this.layout = [];
this.formGroupTemplate = {};
this.formGroup = null;
this.framework = null;
this.validData = null;
this.isValid = null;
this.ajvErrors = null;
this.validationErrors = null;
this.dataErrors = new Map();
this.formValueSubscription = null;
this.dataChanges = new Subject_2();
this.isValidChanges = new Subject_2();
this.validationErrorChanges = new Subject_2();
this.arrayMap = new Map();
this.dataMap = new Map();
this.dataRecursiveRefMap = new Map();
this.schemaRecursiveRefMap = new Map();
this.schemaRefLibrary = {};
this.layoutRefLibrary = { '': null };
this.templateRefLibrary = {};
this.hasRootReference = false;
this.language = 'en-US';
this.defaultFormOptions = {
addSubmit: 'auto',
debug: false,
disableInvalidSubmit: true,
formDisabled: false,
formReadonly: false,
fieldsRequired: false,
framework: 'no-framework',
loadExternalAssets: false,
pristine: { errors: true, success: true },
supressPropertyTitles: false,
setSchemaDefaults: 'auto',
setLayoutDefaults: 'auto',
validateOnRender: 'auto',
widgets: {},
defautWidgetOptions: {
listItems: 1,
addable: true,
orderable: true,
removable: true,
enableErrorState: true,
enableSuccessState: true,
feedback: false,
feedbackOnRender: false,
notitle: false,
disabled: false,
readonly: false,
returnEmptyFields: true,
validationMessages: {}
},
};
this.setLanguage(this.language);
}
JsonSchemaFormService.prototype.setLanguage = function (language) {
if (language === void 0) { language = 'en-US'; }
this.language = language;
var validationMessages = language.slice(0, 2) === 'fr' ?
frValidationMessages : enValidationMessages;
this.defaultFormOptions.defautWidgetOptions.validationMessages =
cloneDeep(validationMessages);
};
JsonSchemaFormService.prototype.getData = function () { return this.data; };
JsonSchemaFormService.prototype.getSchema = function () { return this.schema; };
JsonSchemaFormService.prototype.getLayout = function () { return this.layout; };
JsonSchemaFormService.prototype.resetAllValues = function () {
this.JsonFormCompatibility = false;
this.ReactJsonSchemaFormCompatibility = false;
this.AngularSchemaFormCompatibility = false;
this.tpldata = {};
this.validateFormData = null;
this.formValues = {};
this.schema = {};
this.layout = [];
this.formGroupTemplate = {};
this.formGroup = null;
this.framework = null;
this.data = {};
this.validData = null;
this.isValid = null;
this.validationErrors = null;
this.arrayMap = new Map();
this.dataMap = new Map();
this.dataRecursiveRefMap = new Map();
this.schemaRecursiveRefMap = new Map();
this.layoutRefLibrary = {};
this.schemaRefLibrary = {};
this.templateRefLibrary = {};
this.formOptions = cloneDeep(this.defaultFormOptions);
};
JsonSchemaFormService.prototype.buildRemoteError = function (errors) {
var _this = this;
forEach(errors, function (value, key) {
if (key in _this.formGroup.controls) {
for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {
var error = value_1[_i];
var err = {};
err[error['code']] = error['message'];
_this.formGroup.get(key).setErrors(err, { emitEvent: true });
}
}
});
};
JsonSchemaFormService.prototype.validateData = function (newValue, updateSubscriptions) {
if (updateSubscriptions === void 0) { updateSubscriptions = true; }
this.data = formatFormData(newValue, this.dataMap, this.dataRecursiveRefMap, this.arrayMap, this.formOptions.returnEmptyFields);
this.isValid = this.validateFormData(this.data);
this.validData = this.isValid ? this.data : null;
var compileErrors = function (errors) {
var compiledErrors = {};
(errors || []).forEach(function (error) {
if (!compiledErrors[error.dataPath]) {
compiledErrors[error.dataPath] = [];
}
compiledErrors[error.dataPath].push(error.message);
});
return compiledErrors;
};
this.ajvErrors = this.validateFormData.errors;
this.validationErrors = compileErrors(this.validateFormData.errors);
if (updateSubscriptions) {
this.dataChanges.next(this.data);
this.isValidChanges.next(this.isValid);
this.validationErrorChanges.next(this.ajvErrors);
}
};
JsonSchemaFormService.prototype.buildFormGroupTemplate = function (formValues, setValues) {
if (formValues === void 0) { formValues = null; }
if (setValues === void 0) { setValues = true; }
this.formGroupTemplate = buildFormGroupTemplate(this, formValues, setValues);
};
JsonSchemaFormService.prototype.buildFormGroup = function () {
var _this = this;
this.formGroup = buildFormGroup(this.formGroupTemplate);
if (this.formGroup) {
this.compileAjvSchema();
this.validateData(this.formGroup.value);
if (this.formValueSubscription) {
this.formValueSubscription.unsubscribe();
}
this.formValueSubscription = this.formGroup.valueChanges
.subscribe(function (formValue) { return _this.validateData(formValue); });
}
};
JsonSchemaFormService.prototype.buildLayout = function (widgetLibrary) {
this.layout = buildLayout(this, widgetLibrary);
};
JsonSchemaFormService.prototype.setOptions = function (newOptions) {
if (isObject$1(newOptions)) {
var addOptions = cloneDeep(newOptions);
if (isObject$1(addOptions.defaultOptions)) {
Object.assign(this.formOptions.defautWidgetOptions, addOptions.defaultOptions);
delete addOptions.defaultOptions;
}
if (isObject$1(addOptions.defautWidgetOptions)) {
Object.assign(this.formOptions.defautWidgetOptions, addOptions.defautWidgetOptions);
delete addOptions.defautWidgetOptions;
}
Object.assign(this.formOptions, addOptions);
var globalDefaults_1 = this.formOptions.defautWidgetOptions;
['ErrorState', 'SuccessState']
.filter(function (suffix) { return hasOwn(globalDefaults_1, 'disable' + suffix); })
.forEach(function (suffix) {
globalDefaults_1['enable' + suffix] = !globalDefaults_1['disable' + suffix];
delete globalDefaults_1['disable' + suffix];
});
}
};
JsonSchemaFormService.prototype.compileAjvSchema = function () {
if (!this.validateFormData) {
if (Array.isArray(this.schema.properties['ui:order'])) {
this.schema['ui:order'] = this.schema.properties['ui:order'];
delete this.schema.properties['ui:order'];
}
this.ajv.removeSchema(this.schema);
this.validateFormData = this.ajv.compile(this.schema);
}
};
JsonSchemaFormService.prototype.buildSchemaFromData = function (data, requireAllFields) {
if (requireAllFields === void 0) { requireAllFields = false; }
if (data) {
return buildSchemaFromData(data, requireAllFields);
}
this.schema = buildSchemaFromData(this.formValues, requireAllFields);
};
JsonSchemaFormService.prototype.buildSchemaFromLayout = function (layout) {
if (layout) {
return buildSchemaFromLayout(layout);
}
this.schema = buildSchemaFromLayout(this.layout);
};
JsonSchemaFormService.prototype.setTpldata = function (newTpldata) {
if (newTpldata === void 0) { newTpldata = {}; }
this.tpldata = newTpldata;
};
JsonSchemaFormService.prototype.parseText = function (text, value, values, key) {
var _this = this;
if (text === void 0) { text = ''; }
if (value === void 0) { value = {}; }
if (values === void 0) { values = {}; }
if (key === void 0) { key = null; }
if (!text || !/{{.+?}}/.test(text)) {
return text;
}
return text.replace(/{{(.+?)}}/g, function () {
var a = [];
for (var _i = 0; _i < arguments.length; _i++) {
a[_i] = arguments[_i];
}
return _this.parseExpression(a[1], value, values, key, _this.tpldata);
});
};
JsonSchemaFormService.prototype.parseExpression = function (expression, value, values, key, tpldata) {
var _this = this;
if (expression === void 0) { expression = ''; }
if (value === void 0) { value = {}; }
if (values === void 0) { values = {}; }
if (key === void 0) { key = null; }
if (tpldata === void 0) { tpldata = null; }
if (typeof expression !== 'string') {
return '';
}
var index = typeof key === 'number' ? (key + 1) + '' : (key || '');
expression = expression.trim();
if ((expression[0] === "'" || expression[0] === '"') &&
expression[0] === expression[expression.length - 1] &&
expression.slice(1, expression.length - 1).indexOf(expression[0]) === -1) {
return expression.slice(1, expression.length - 1);
}
if (expression === 'idx' || expression === '$index') {
return index;
}
if (expression === 'value' && !hasOwn(values, 'value')) {
return value;
}
if (['"', "'", ' ', '||', '&&', '+'].every(function (delim) { return expression.indexOf(delim) === -1; })) {
var pointer = JsonPointer.parseObjectPath(expression);
return pointer[0] === 'value' && JsonPointer.has(value, pointer.slice(1)) ?
JsonPointer.get(value, pointer.slice(1)) :
pointer[0] === 'values' && JsonPointer.has(values, pointer.slice(1)) ?
JsonPointer.get(values, pointer.slice(1)) :
pointer[0] === 'tpldata' && JsonPointer.has(tpldata, pointer.slice(1)) ?
JsonPointer.get(tpldata, pointer.slice(1)) :
JsonPointer.has(values, pointer) ? JsonPointer.get(values, pointer) : '';
}
if (expression.indexOf('[idx]') > -1) {
expression = expression.replace(/\[idx\]/g, index);
}
if (expression.indexOf('[$index]') > -1) {
expression = expression.replace(/\[$index\]/g, index);
}
if (expression.indexOf('||') > -1) {
return expression.split('||').reduce(function (all, term) {
return all || _this.parseExpression(term, value, values, key, tpldata);
}, '');
}
if (expression.indexOf('&&') > -1) {
return expression.split('&&').reduce(function (all, term) {
return all && _this.parseExpression(term, value, values, key, tpldata);
}, ' ').trim();
}
if (expression.indexOf('+') > -1) {
return expression.split('+')
.map(function (term) { return _this.parseExpression(term, value, values, key, tpldata); })
.join('');
}
return '';
};
JsonSchemaFormService.prototype.setArrayItemTitle = function (parentCtx, childNode, index) {
if (parentCtx === void 0) { parentCtx = {}; }
if (childNode === void 0) { childNode = null; }
if (index === void 0) { index = null; }
var parentNode = parentCtx.layoutNode;
var parentValues = this.getFormControlValue(parentCtx);
var isArrayItem = (parentNode.type || '').slice(-5) === 'array' && isArray$2(parentValues);
var text = JsonPointer.getFirst(isArrayItem && childNode.type !== '$ref' ? [
[childNode, '/options/legend'],
[childNode, '/options/title'],
[parentNode, '/options/title'],
[parentNode, '/options/legend'],
] : [
[childNode, '/options/title'],
[childNode, '/options/legend'],
[parentNode, '/options/title'],
[parentNode, '/options/legend']
]);
if (!text) {
return text;
}
var childValue = isArray$2(parentValues) && index < parentValues.length ?
parentValues[index] : parentValues;
return this.parseText(text, childValue, parentValues, index);
};
JsonSchemaFormService.prototype.setItemTitle = function (ctx) {
return !ctx.options.title && /^(\d+|-)$/.test(ctx.layoutNode.name) ?
null :
this.parseText(ctx.options.title || toTitleCase(ctx.layoutNode.name), this.getFormControlValue(this), (this.getFormControlGroup(this) || {}).value, ctx.dataIndex[ctx.dataIndex.length - 1]);
};
JsonSchemaFormService.prototype.evaluateCondition = function (layoutNode, dataIndex) {
var arrayIndex = dataIndex && dataIndex[dataIndex.length - 1];
var result = true;
if (hasValue((layoutNode.options || {}).condition)) {
if (typeof layoutNode.options.condition === 'string') {
var pointer = layoutNode.options.condition;
if (hasValue(arrayIndex)) {
pointer = pointer.replace('[arrayIndex]', "[" + arrayIndex + "]");
}
pointer = JsonPointer.parseObjectPath(pointer);
result = !!JsonPointer.get(this.data, pointer);
if (!result && pointer[0] === 'model') {
result = !!JsonPointer.get({ model: this.data }, pointer);
}
}
else if (typeof layoutNode.options.condition === 'function') {
result = layoutNode.options.condition(this.data);
}
else if (typeof layoutNode.options.condition.functionBody === 'string') {
try {
var dynFn = new Function('model', 'arrayIndices', layoutNode.options.condition.functionBody);
result = dynFn(this.data, dataIndex);
}
catch (e) {
result = true;
console.error("condition functionBody errored out on evaluation: " + layoutNode.options.condition.functionBody);
}
}
}
return result;
};
JsonSchemaFormService.prototype.initializeControl = function (ctx, bind) {
var _this = this;
if (bind === void 0) { bind = true; }
if (!isObject$1(ctx)) {
return false;
}
if (isEmpty(ctx.options)) {
ctx.options = !isEmpty((ctx.layoutNode || {}).options) ?
ctx.layoutNode.options : cloneDeep(this.formOptions);
}
ctx.formControl = this.getFormControl(ctx);
ctx.boundControl = bind && !!ctx.formControl;
if (ctx.formControl) {
ctx.controlName = this.getFormControlName(ctx);
ctx.controlValue = ctx.formControl.value;
ctx.controlDisabled = ctx.formControl.disabled;
ctx.options.errorMessage = ctx.formControl.status === 'VALID' ? null :
this.formatErrors(ctx.formControl.errors, ctx.options.validationMessages);
ctx.options.showErrors = this.formOptions.validateOnRender === true ||
(this.formOptions.validateOnRender === 'auto' && hasValue(ctx.controlValue));
ctx.formControl.statusChanges.subscribe(function (status) {
return ctx.options.errorMessage = status === 'VALID' ? null :
_this.formatErrors(ctx.formControl.errors, ctx.options.validationMessages);
});
ctx.formControl.valueChanges.subscribe(function (value) {
if (!isEqual(ctx.controlValue, value)) {
ctx.controlValue = value;
}
});
}
else {
ctx.controlName = ctx.layoutNode.name;
ctx.controlValue = ctx.layoutNode.value || null;
var dataPointer = this.getDataPointer(ctx);
if (bind && dataPointer) {
console.error("warning: control \"" + dataPointer + "\" is not bound to the Angular FormGroup.");
}
}
return ctx.boundControl;
};
JsonSchemaFormService.prototype.formatErrors = function (errors, validationMessages) {
if (validationMessages === void 0) { validationMessages = {}; }
if (isEmpty(errors)) {
return null;
}
if (!isObject$1(validationMessages)) {
validationMessages = {};
}
var addSpaces = function (string) {
return string[0].toUpperCase() + (string.slice(1) || '')
.replace(/([a-z])([A-Z])/g, '$1 $2').replace(/_/g, ' ');
};
var formatError = function (error) {
return typeof error === 'object' ?
Object.keys(error).map(function (key) {
return error[key] === true ? addSpaces(key) :
error[key] === false ? 'Not ' + addSpaces(key) :
addSpaces(key) + ': ' + formatError(error[key]);
}).join(', ') :
addSpaces(error.toString());
};
return Object.keys(errors)
.filter(function (errorKey) { return errorKey !== 'required' || Object.keys(errors).length === 1; })
.map(function (errorKey) {
return typeof validationMessages === 'string' ? validationMessages :
typeof validationMessages[errorKey] === 'function' ?
validationMessages[errorKey](errors[errorKey]) :
typeof validationMessages[errorKey] === 'string' ?
!/{{.+?}}/.test(validationMessages[errorKey]) ?
validationMessages[errorKey] :
Object.keys(errors[errorKey])
.reduce(function (errorMessage, errorProperty) {
return errorMessage.replace(new RegExp('{{' + errorProperty + '}}', 'g'), errors[errorKey][errorProperty]);
}, validationMessages[errorKey]) :
addSpaces(errorKey) + ' Error: ' + formatError(errors[errorKey]);
}).join('<br>');
};
JsonSchemaFormService.prototype.updateValue = function (ctx, value) {
ctx.controlValue = value;
if (ctx.boundControl) {
ctx.formControl.setValue(value);
ctx.formControl.markAsDirty();
}
ctx.layoutNode.value = value;
if (isArray$2(ctx.options.copyValueTo)) {
for (var _i = 0, _a = ctx.options.copyValueTo; _i < _a.length; _i++) {
var item = _a[_i];
var targetControl = getControl(this.formGroup, item);
if (isObject$1(targetControl) && typeof targetControl.setValue === 'function') {
targetControl.setValue(value);
targetControl.markAsDirty();
}
}
}
};
JsonSchemaFormService.prototype.updateArrayCheckboxList = function (ctx, checkboxList) {
var formArray = this.getFormControl(ctx);
while (formArray.value.length) {
formArray.removeAt(0);
}
var refPointer = removeRecursiveReferences(ctx.layoutNode.dataPointer + '/-', this.dataRecursiveRefMap, this.arrayMap);
for (var _i = 0, checkboxList_1 = checkboxList; _i < checkboxList_1.length; _i++) {
var checkboxItem = checkboxList_1[_i];
if (checkboxItem.checked) {
var newFormControl = buildFormGroup(this.templateRefLibrary[refPointer]);
newFormControl.setValue(checkboxItem.value);
formArray.push(newFormControl);
}
}
formArray.markAsDirty();
};
JsonSchemaFormService.prototype.getFormControl = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) ||
ctx.layoutNode.type === '$ref') {
return null;
}
return getControl(this.formGroup, this.getDataPointer(ctx));
};
JsonSchemaFormService.prototype.getFormControlValue = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) ||
ctx.layoutNode.type === '$ref') {
return null;
}
var control = getControl(this.formGroup, this.getDataPointer(ctx));
return control ? control.value : null;
};
JsonSchemaFormService.prototype.getFormControlGroup = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer)) {
return null;
}
return getControl(this.formGroup, this.getDataPointer(ctx), true);
};
JsonSchemaFormService.prototype.getFormControlName = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) || !hasValue(ctx.dataIndex)) {
return null;
}
return JsonPointer.toKey(this.getDataPointer(ctx));
};
JsonSchemaFormService.prototype.getLayoutArray = function (ctx) {
return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -1);
};
JsonSchemaFormService.prototype.getParentNode = function (ctx) {
return JsonPointer.get(this.layout, this.getLayoutPointer(ctx), 0, -2);
};
JsonSchemaFormService.prototype.getDataPointer = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) || !hasValue(ctx.dataIndex)) {
return null;
}
return JsonPointer.toIndexedPointer(ctx.layoutNode.dataPointer, ctx.dataIndex, this.arrayMap);
};
JsonSchemaFormService.prototype.getLayoutPointer = function (ctx) {
if (!hasValue(ctx.layoutIndex)) {
return null;
}
return '/' + ctx.layoutIndex.join('/items/');
};
JsonSchemaFormService.prototype.isControlBound = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) || !hasValue(ctx.dataIndex)) {
return false;
}
var controlGroup = this.getFormControlGroup(ctx);
var name = this.getFormControlName(ctx);
return controlGroup ? hasOwn(controlGroup.controls, name) : false;
};
JsonSchemaFormService.prototype.addItem = function (ctx, name) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.$ref) ||
!hasValue(ctx.dataIndex) || !hasValue(ctx.layoutIndex)) {
return false;
}
var newFormGroup = buildFormGroup(this.templateRefLibrary[ctx.layoutNode.$ref]);
if (ctx.layoutNode.arrayItem) {
this.getFormControlGroup(ctx).push(newFormGroup);
}
else {
this.getFormControlGroup(ctx)
.addControl(name || this.getFormControlName(ctx), newFormGroup);
}
var newLayoutNode = getLayoutNode(ctx.layoutNode, this);
newLayoutNode.arrayItem = ctx.layoutNode.arrayItem;
if (ctx.layoutNode.arrayItemType) {
newLayoutNode.arrayItemType = ctx.layoutNode.arrayItemType;
}
else {
delete newLayoutNode.arrayItemType;
}
if (name) {
newLayoutNode.name = name;
newLayoutNode.dataPointer += '/' + JsonPointer.escape(name);
newLayoutNode.options.title = fixTitle(name);
}
JsonPointer.insert(this.layout, this.getLayoutPointer(ctx), newLayoutNode);
return true;
};
JsonSchemaFormService.prototype.moveArrayItem = function (ctx, oldIndex, newIndex) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) ||
!hasValue(ctx.dataIndex) || !hasValue(ctx.layoutIndex) ||
!isDefined(oldIndex) || !isDefined(newIndex) || oldIndex === newIndex) {
return false;
}
var formArray = this.getFormControlGroup(ctx);
var arrayItem = formArray.at(oldIndex);
formArray.removeAt(oldIndex);
formArray.insert(newIndex, arrayItem);
formArray.updateValueAndValidity();
var layoutArray = this.getLayoutArray(ctx);
layoutArray.splice(newIndex, 0, layoutArray.splice(oldIndex, 1)[0]);
return true;
};
JsonSchemaFormService.prototype.removeItem = function (ctx) {
if (!ctx.layoutNode || !isDefined(ctx.layoutNode.dataPointer) ||
!hasValue(ctx.dataIndex) || !hasValue(ctx.layoutIndex)) {
return false;
}
if (ctx.layoutNode.arrayItem) {
this.getFormControlGroup(ctx)
.removeAt(ctx.dataIndex[ctx.dataIndex.length - 1]);
}
else {
this.getFormControlGroup(ctx)
.removeControl(this.getFormControlName(ctx));
}
JsonPointer.remove(this.layout, this.getLayoutPointer(ctx));
return true;
};
JsonSchemaFormService.decorators = [
{ type: Injectable },
];
JsonSchemaFormService.ctorParameters = function () { return []; };
return JsonSchemaFormService;
}());
var OrderableDirective = (function () {
function OrderableDirective(elementRef, jsf, ngZone) {
this.elementRef = elementRef;
this.jsf = jsf;
this.ngZone = ngZone;
this.overParentElement = false;
this.overChildElement = false;
}
OrderableDirective.prototype.ngOnInit = function () {
var _this = this;
if (this.orderable && this.layoutNode && this.layoutIndex && this.dataIndex) {
this.element = this.elementRef.nativeElement;
this.element.draggable = true;
this.arrayLayoutIndex = 'move:' + this.layoutIndex.slice(0, -1).toString();
this.ngZone.runOutsideAngular(function () {
_this.element.addEventListener('dragstart', function (event) {
event.dataTransfer.effectAllowed = 'move';
var sourceArrayIndex = _this.dataIndex[_this.dataIndex.length - 1];
sessionStorage.setItem(_this.arrayLayoutIndex, sourceArrayIndex + '');
});
_this.element.addEventListener('dragover', function (event) {
if (event.preventDefault) {
event.preventDefault();
}
event.dataTransfer.dropEffect = 'move';
return false;
});
_this.element.addEventListener('dragenter', function (event) {
if (_this.overParentElement) {
return _this.overChildElement = true;
}
else {
_this.overParentElement = true;
}
var sourceArrayIndex = sessionStorage.getItem(_this.arrayLayoutIndex);
if (sourceArrayIndex !== null) {
if (_this.dataIndex[_this.dataIndex.length - 1] < +sourceArrayIndex) {
_this.element.classList.add('drag-target-top');
}
else if (_this.dataIndex[_this.dataIndex.length - 1] > +sourceArrayIndex) {
_this.element.classList.add('drag-target-bottom');
}
}
});
_this.element.addEventListener('dragleave', function (event) {
if (_this.overChildElement) {
_this.overChildElement = false;
}
else if (_this.overParentElement) {
_this.overParentElement = false;
}
var sourceArrayIndex = sessionStorage.getItem(_this.arrayLayoutIndex);
if (!_this.overParentElement && !_this.overChildElement && sourceArrayIndex !== null) {
_this.element.classList.remove('drag-target-top');
_this.element.classList.remove('drag-target-bottom');
}
});
_this.element.addEventListener('drop', function (event) {
_this.element.classList.remove('drag-target-top');
_this.element.classList.remove('drag-target-bottom');
var sourceArrayIndex = sessionStorage.getItem(_this.arrayLayoutIndex);
var destArrayIndex = _this.dataIndex[_this.dataIndex.length - 1];
if (sourceArrayIndex !== null && +sourceArrayIndex !== destArrayIndex) {
_this.jsf.moveArrayItem(_this, +sourceArrayIndex, destArrayIndex);
}
sessionStorage.removeItem(_this.arrayLayoutIndex);
return false;
});
});
}
};
OrderableDirective.decorators = [
{ type: Directive, args: [{
selector: '[orderable]',
},] },
];
OrderableDirective.ctorParameters = function () { return [
{ type: ElementRef, },
{ type: JsonSchemaFormService, },
{ type: NgZone, },
]; };
OrderableDirective.propDecorators = {
"orderable": [{ type: Input },],
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return OrderableDirective;
}());
var AddReferenceComponent = (function () {
function AddReferenceComponent(jsf) {
this.jsf = jsf;
}
AddReferenceComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
};
Object.defineProperty(AddReferenceComponent.prototype, "showAddButton", {
get: function () {
return !this.layoutNode.arrayItem ||
this.layoutIndex[this.layoutIndex.length - 1] < this.options.maxItems;
},
enumerable: true,
configurable: true
});
AddReferenceComponent.prototype.addItem = function (event) {
event.preventDefault();
this.jsf.addItem(this);
};
Object.defineProperty(AddReferenceComponent.prototype, "buttonText", {
get: function () {
var parent = {
dataIndex: this.dataIndex.slice(0, -1),
layoutIndex: this.layoutIndex.slice(0, -1),
layoutNode: this.jsf.getParentNode(this)
};
return parent.layoutNode.add ||
this.jsf.setArrayItemTitle(parent, this.layoutNode, this.itemCount);
},
enumerable: true,
configurable: true
});
AddReferenceComponent.decorators = [
{ type: Component, args: [{
selector: 'add-reference-widget',
template: "\n <button *ngIf=\"showAddButton\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"options?.readonly\"\n (click)=\"addItem($event)\">\n <span *ngIf=\"options?.icon\" [class]=\"options?.icon\"></span>\n <span *ngIf=\"options?.title\" [innerHTML]=\"buttonText\"></span>\n </button>",
changeDetection: ChangeDetectionStrategy.Default,
},] },
];
AddReferenceComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
AddReferenceComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return AddReferenceComponent;
}());
var OneOfComponent = (function () {
function OneOfComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
OneOfComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
OneOfComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
OneOfComponent.decorators = [
{ type: Component, args: [{
selector: 'one-of-widget',
template: "",
},] },
];
OneOfComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
OneOfComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return OneOfComponent;
}());
var ButtonComponent = (function () {
function ButtonComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
ButtonComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
ButtonComponent.prototype.updateValue = function (event) {
if (typeof this.options.onClick === 'function') {
this.options.onClick(event);
}
else {
this.jsf.updateValue(this, event.target.value);
}
};
ButtonComponent.decorators = [
{ type: Component, args: [{
selector: 'button-widget',
template: "\n <div\n [class]=\"options?.htmlClass || ''\">\n <button\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [name]=\"controlName\"\n [type]=\"layoutNode?.type\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n <span *ngIf=\"options?.icon || options?.title\"\n [class]=\"options?.icon\"\n [innerHTML]=\"options?.title\"></span>\n </button>\n </div>",
},] },
];
ButtonComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
ButtonComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return ButtonComponent;
}());
var CheckboxComponent = (function () {
function CheckboxComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.trueValue = true;
this.falseValue = false;
}
CheckboxComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (this.controlValue === null || this.controlValue === undefined) {
this.controlValue = this.options.title;
}
};
CheckboxComponent.prototype.updateValue = function (event) {
event.preventDefault();
this.jsf.updateValue(this, event.target.checked ? this.trueValue : this.falseValue);
};
Object.defineProperty(CheckboxComponent.prototype, "isChecked", {
get: function () {
return this.jsf.getFormControlValue(this) === this.trueValue;
},
enumerable: true,
configurable: true
});
CheckboxComponent.decorators = [
{ type: Component, args: [{
selector: 'checkbox-widget',
template: "\n <label\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.itemLabelHtmlClass || ''\">\n <input *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n type=\"checkbox\">\n <input *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [checked]=\"isChecked ? 'checked' : null\"\n [class]=\"(options?.fieldHtmlClass || '') + (isChecked ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [value]=\"controlValue\"\n type=\"checkbox\"\n (change)=\"updateValue($event)\">\n <span *ngIf=\"options?.title\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></span>\n </label>",
},] },
];
CheckboxComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
CheckboxComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return CheckboxComponent;
}());
var CheckboxesComponent = (function () {
function CheckboxesComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.checkboxList = [];
}
CheckboxesComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.layoutOrientation = (this.layoutNode.type === 'checkboxes-inline' ||
this.layoutNode.type === 'checkboxbuttons') ? 'horizontal' : 'vertical';
this.jsf.initializeControl(this);
this.checkboxList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, true);
if (this.boundControl) {
var formArray_1 = this.jsf.getFormControl(this);
this.checkboxList.forEach(function (checkboxItem) {
return checkboxItem.checked = formArray_1.value.includes(checkboxItem.value);
});
}
};
CheckboxesComponent.prototype.updateValue = function (event) {
for (var _i = 0, _a = this.checkboxList; _i < _a.length; _i++) {
var checkboxItem = _a[_i];
if (event.target.value === checkboxItem.value) {
checkboxItem.checked = event.target.checked;
}
}
if (this.boundControl) {
this.jsf.updateArrayCheckboxList(this, this.checkboxList);
}
};
CheckboxesComponent.decorators = [
{ type: Component, args: [{
selector: 'checkboxes-widget',
template: "\n <label *ngIf=\"options?.title\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n\n <!-- 'horizontal' = checkboxes-inline or checkboxbuttons -->\n <div *ngIf=\"layoutOrientation === 'horizontal'\" [class]=\"options?.htmlClass || ''\">\n <label *ngFor=\"let checkboxItem of checkboxList\"\n [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\">\n <input type=\"checkbox\"\n [attr.required]=\"options?.required\"\n [checked]=\"checkboxItem.checked\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n [name]=\"checkboxItem?.name\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [value]=\"checkboxItem.value\"\n (change)=\"updateValue($event)\">\n <span [innerHTML]=\"checkboxItem.name\"></span>\n </label>\n </div>\n\n <!-- 'vertical' = regular checkboxes -->\n <div *ngIf=\"layoutOrientation === 'vertical'\">\n <div *ngFor=\"let checkboxItem of checkboxList\" [class]=\"options?.htmlClass || ''\">\n <label\n [attr.for]=\"'control' + layoutNode?._id + '/' + checkboxItem.value\"\n [class]=\"(options?.itemLabelHtmlClass || '') + (checkboxItem.checked ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\">\n <input type=\"checkbox\"\n [attr.required]=\"options?.required\"\n [checked]=\"checkboxItem.checked\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"options?.name + '/' + checkboxItem.value\"\n [name]=\"checkboxItem?.name\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [value]=\"checkboxItem.value\"\n (change)=\"updateValue($event)\">\n <span [innerHTML]=\"checkboxItem?.name\"></span>\n </label>\n </div>\n </div>",
},] },
];
CheckboxesComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
CheckboxesComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return CheckboxesComponent;
}());
var FileComponent = (function () {
function FileComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
FileComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
FileComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
FileComponent.decorators = [
{ type: Component, args: [{
selector: 'file-widget',
template: "",
},] },
];
FileComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
FileComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return FileComponent;
}());
var InputComponent = (function () {
function InputComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.autoCompleteList = [];
}
InputComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
InputComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
InputComponent.decorators = [
{ type: Component, args: [{
selector: 'input-widget',
template: "\n <div [class]=\"options?.htmlClass || ''\">\n <label *ngIf=\"options?.title\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n <input *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [type]=\"layoutNode?.type\">\n <input *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [type]=\"layoutNode?.type\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\">\n <datalist *ngIf=\"options?.typeahead?.source\"\n [id]=\"'control' + layoutNode?._id + 'Autocomplete'\">\n <option *ngFor=\"let word of options?.typeahead?.source\" [value]=\"word\">\n </datalist>\n </div>",
},] },
];
InputComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
InputComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return InputComponent;
}());
var MessageComponent = (function () {
function MessageComponent(jsf) {
this.jsf = jsf;
this.message = null;
}
MessageComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.message = this.options.help || this.options.helpvalue ||
this.options.msg || this.options.message;
};
MessageComponent.decorators = [
{ type: Component, args: [{
selector: 'message-widget',
template: "\n <span *ngIf=\"message\"\n [class]=\"options?.labelHtmlClass || ''\"\n [innerHTML]=\"message\"></span>",
},] },
];
MessageComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MessageComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MessageComponent;
}());
var NoneComponent = (function () {
function NoneComponent() {
}
NoneComponent.decorators = [
{ type: Component, args: [{
selector: 'none-widget',
template: "",
},] },
];
NoneComponent.ctorParameters = function () { return []; };
NoneComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return NoneComponent;
}());
var NumberComponent = (function () {
function NumberComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.allowNegative = true;
this.allowDecimal = true;
this.allowExponents = false;
this.lastValidNumber = '';
}
NumberComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (this.layoutNode.dataType === 'integer') {
this.allowDecimal = false;
}
};
NumberComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
NumberComponent.decorators = [
{ type: Component, args: [{
selector: 'number-widget',
template: "\n <div [class]=\"options?.htmlClass || ''\">\n <label *ngIf=\"options?.title\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n <input *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.max]=\"options?.maximum\"\n [attr.min]=\"options?.minimum\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.required]=\"options?.required\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [title]=\"lastValidNumber\"\n [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\">\n <input *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.max]=\"options?.maximum\"\n [attr.min]=\"options?.minimum\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.required]=\"options?.required\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [title]=\"lastValidNumber\"\n [type]=\"layoutNode?.type === 'range' ? 'range' : 'number'\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\">\n <span *ngIf=\"layoutNode?.type === 'range'\" [innerHTML]=\"controlValue\"></span>\n </div>",
},] },
];
NumberComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
NumberComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return NumberComponent;
}());
var RadiosComponent = (function () {
function RadiosComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.layoutOrientation = 'vertical';
this.radiosList = [];
}
RadiosComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
if (this.layoutNode.type === 'radios-inline' ||
this.layoutNode.type === 'radiobuttons') {
this.layoutOrientation = 'horizontal';
}
this.radiosList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, true);
this.jsf.initializeControl(this);
};
RadiosComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
RadiosComponent.decorators = [
{ type: Component, args: [{
selector: 'radios-widget',
template: "\n <label *ngIf=\"options?.title\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n\n <!-- 'horizontal' = radios-inline or radiobuttons -->\n <div *ngIf=\"layoutOrientation === 'horizontal'\"\n [class]=\"options?.htmlClass || ''\">\n <label *ngFor=\"let radioItem of radiosList\"\n [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n [class]=\"(options?.itemLabelHtmlClass || '') +\n ((controlValue + '' === radioItem?.value + '') ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\">\n <input type=\"radio\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [checked]=\"radioItem?.value === controlValue\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n [name]=\"controlName\"\n [value]=\"radioItem?.value\"\n (change)=\"updateValue($event)\">\n <span [innerHTML]=\"radioItem?.name\"></span>\n </label>\n </div>\n\n <!-- 'vertical' = regular radios -->\n <div *ngIf=\"layoutOrientation !== 'horizontal'\">\n <div *ngFor=\"let radioItem of radiosList\"\n [class]=\"options?.htmlClass || ''\">\n <label\n [attr.for]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n [class]=\"(options?.itemLabelHtmlClass || '') +\n ((controlValue + '' === radioItem?.value + '') ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + (options?.style?.unselected || '')))\">\n <input type=\"radio\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [checked]=\"radioItem?.value === controlValue\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id + '/' + radioItem?.value\"\n [name]=\"controlName\"\n [value]=\"radioItem?.value\"\n (change)=\"updateValue($event)\">\n <span [innerHTML]=\"radioItem?.name\"></span>\n </label>\n </div>\n </div>",
},] },
];
RadiosComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
RadiosComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return RadiosComponent;
}());
var RootComponent = (function () {
function RootComponent(jsf) {
this.jsf = jsf;
this.isFlexItem = false;
}
RootComponent.prototype.isDraggable = function (node) {
return node.arrayItem && node.type !== '$ref' &&
node.arrayItemType === 'list' && this.isOrderable !== false;
};
RootComponent.prototype.getFlexAttribute = function (node, attribute) {
var index = ['flex-grow', 'flex-shrink', 'flex-basis'].indexOf(attribute);
return ((node.options || {}).flex || '').split(/\s+/)[index] ||
(node.options || {})[attribute] || ['1', '1', 'auto'][index];
};
RootComponent.prototype.showWidget = function (layoutNode) {
return this.jsf.evaluateCondition(layoutNode, this.dataIndex);
};
RootComponent.decorators = [
{ type: Component, args: [{
selector: 'root-widget',
template: "\n <div *ngFor=\"let layoutItem of layout; let i = index\"\n [class.form-flex-item]=\"isFlexItem\"\n [style.align-self]=\"(layoutItem.options || {})['align-self']\"\n [style.flex-basis]=\"getFlexAttribute(layoutItem, 'flex-basis')\"\n [style.flex-grow]=\"getFlexAttribute(layoutItem, 'flex-grow')\"\n [style.flex-shrink]=\"getFlexAttribute(layoutItem, 'flex-shrink')\"\n [style.order]=\"(layoutItem.options || {}).order\">\n <div\n [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\n [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n [layoutNode]=\"layoutItem\"\n [orderable]=\"isDraggable(layoutItem)\">\n <select-framework-widget *ngIf=\"showWidget(layoutItem)\"\n [dataIndex]=\"layoutItem?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\n [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n [layoutNode]=\"layoutItem\"></select-framework-widget>\n </div>\n </div>",
styles: ["\n [draggable=true] {\n transition: all 150ms cubic-bezier(.4, 0, .2, 1);\n }\n [draggable=true]:hover {\n cursor: move;\n box-shadow: 2px 2px 4px rgba(0, 0, 0, 0.2);\n position: relative; z-index: 10;\n margin-top: -1px;\n margin-left: -1px;\n margin-right: 1px;\n margin-bottom: 1px;\n }\n [draggable=true].drag-target-top {\n box-shadow: 0 -2px 0 #000;\n position: relative; z-index: 20;\n }\n [draggable=true].drag-target-bottom {\n box-shadow: 0 2px 0 #000;\n position: relative; z-index: 20;\n }\n "],
},] },
];
RootComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
RootComponent.propDecorators = {
"dataIndex": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"layout": [{ type: Input },],
"isOrderable": [{ type: Input },],
"isFlexItem": [{ type: Input },],
};
return RootComponent;
}());
var SectionComponent = (function () {
function SectionComponent(jsf) {
this.jsf = jsf;
this.expanded = true;
}
Object.defineProperty(SectionComponent.prototype, "sectionTitle", {
get: function () {
return this.options.notitle ? null : this.jsf.setItemTitle(this);
},
enumerable: true,
configurable: true
});
SectionComponent.prototype.ngOnInit = function () {
this.jsf.initializeControl(this);
this.options = this.layoutNode.options || {};
this.expanded = typeof this.options.expanded === 'boolean' ?
this.options.expanded : !this.options.expandable;
switch (this.layoutNode.type) {
case 'fieldset':
case 'array':
case 'tab':
case 'advancedfieldset':
case 'authfieldset':
case 'optionfieldset':
case 'selectfieldset':
this.containerType = 'fieldset';
break;
default:
this.containerType = 'div';
break;
}
};
SectionComponent.prototype.toggleExpanded = function () {
if (this.options.expandable) {
this.expanded = !this.expanded;
}
};
SectionComponent.prototype.getFlexAttribute = function (attribute) {
var flexActive = this.layoutNode.type === 'flex' ||
!!this.options.displayFlex ||
this.options.display === 'flex';
if (attribute !== 'flex' && !flexActive) {
return null;
}
switch (attribute) {
case 'is-flex':
return flexActive;
case 'display':
return flexActive ? 'flex' : 'initial';
case 'flex-direction':
case 'flex-wrap':
var index = ['flex-direction', 'flex-wrap'].indexOf(attribute);
return (this.options['flex-flow'] || '').split(/\s+/)[index] ||
this.options[attribute] || ['column', 'nowrap'][index];
case 'justify-content':
case 'align-items':
case 'align-content':
return this.options[attribute];
}
};
SectionComponent.decorators = [
{ type: Component, args: [{
selector: 'section-widget',
template: "\n <div *ngIf=\"containerType === 'div'\"\n [class]=\"options?.htmlClass || ''\"\n [class.expandable]=\"options?.expandable && !expanded\"\n [class.expanded]=\"options?.expandable && expanded\">\n <label *ngIf=\"sectionTitle\"\n class=\"legend\"\n [class]=\"options?.labelHtmlClass || ''\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></label>\n <root-widget *ngIf=\"expanded\"\n [dataIndex]=\"dataIndex\"\n [layout]=\"layoutNode.items\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [isOrderable]=\"options?.orderable\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\n </div>\n <fieldset *ngIf=\"containerType === 'fieldset'\"\n [class]=\"options?.htmlClass || ''\"\n [class.expandable]=\"options?.expandable && !expanded\"\n [class.expanded]=\"options?.expandable && expanded\"\n [disabled]=\"options?.readonly\">\n <legend *ngIf=\"sectionTitle\"\n class=\"legend\"\n [class]=\"options?.labelHtmlClass || ''\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></legend>\n <div *ngIf=\"options?.messageLocation !== 'bottom'\">\n <p *ngIf=\"options?.description\"\n class=\"help-block\"\n [class]=\"options?.labelHelpBlockClass || ''\"\n [innerHTML]=\"options?.description\"></p>\n </div>\n <root-widget *ngIf=\"expanded\"\n [dataIndex]=\"dataIndex\"\n [layout]=\"layoutNode.items\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [isOrderable]=\"options?.orderable\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"></root-widget>\n <div *ngIf=\"options?.messageLocation === 'bottom'\">\n <p *ngIf=\"options?.description\"\n class=\"help-block\"\n [class]=\"options?.labelHelpBlockClass || ''\"\n [innerHTML]=\"options?.description\"></p>\n </div>\n </fieldset>",
styles: ["\n .legend { font-weight: bold; }\n .expandable > legend:before, .expandable > label:before { content: '\u25B6'; padding-right: .3em; }\n .expanded > legend:before, .expanded > label:before { content: '\u25BC'; padding-right: .2em; }\n "],
},] },
];
SectionComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
SectionComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return SectionComponent;
}());
var SelectComponent = (function () {
function SelectComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.selectList = [];
this.isArray = isArray$2;
}
SelectComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.selectList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, !!this.options.required, !!this.options.flatList);
this.jsf.initializeControl(this);
};
SelectComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
SelectComponent.decorators = [
{ type: Component, args: [{
selector: 'select-widget',
template: "\n <div\n [class]=\"options?.htmlClass || ''\">\n <label *ngIf=\"options?.title\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n <select *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\">\n <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n <option *ngIf=\"!isArray(selectItem?.items)\"\n [value]=\"selectItem?.value\">\n <span [innerHTML]=\"selectItem?.name\"></span>\n </option>\n <optgroup *ngIf=\"isArray(selectItem?.items)\"\n [label]=\"selectItem?.group\">\n <option *ngFor=\"let subItem of selectItem.items\"\n [value]=\"subItem?.value\">\n <span [innerHTML]=\"subItem?.name\"></span>\n </option>\n </optgroup>\n </ng-template>\n </select>\n <select *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n (change)=\"updateValue($event)\">\n <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n <option *ngIf=\"!isArray(selectItem?.items)\"\n [selected]=\"selectItem?.value === controlValue\"\n [value]=\"selectItem?.value\">\n <span [innerHTML]=\"selectItem?.name\"></span>\n </option>\n <optgroup *ngIf=\"isArray(selectItem?.items)\"\n [label]=\"selectItem?.group\">\n <option *ngFor=\"let subItem of selectItem.items\"\n [attr.selected]=\"subItem?.value === controlValue\"\n [value]=\"subItem?.value\">\n <span [innerHTML]=\"subItem?.name\"></span>\n </option>\n </optgroup>\n </ng-template>\n </select>\n </div>",
},] },
];
SelectComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
SelectComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return SelectComponent;
}());
var SelectFrameworkComponent = (function () {
function SelectFrameworkComponent(componentFactory, jsf) {
this.componentFactory = componentFactory;
this.jsf = jsf;
this.newComponent = null;
}
SelectFrameworkComponent.prototype.ngOnInit = function () {
this.updateComponent();
};
SelectFrameworkComponent.prototype.ngOnChanges = function () {
this.updateComponent();
};
SelectFrameworkComponent.prototype.updateComponent = function () {
if (!this.newComponent && this.jsf.framework) {
this.newComponent = this.widgetContainer.createComponent(this.componentFactory.resolveComponentFactory(this.jsf.framework));
}
if (this.newComponent) {
for (var _i = 0, _a = ['layoutNode', 'layoutIndex', 'dataIndex']; _i < _a.length; _i++) {
var input = _a[_i];
this.newComponent.instance[input] = this[input];
}
}
};
SelectFrameworkComponent.decorators = [
{ type: Component, args: [{
selector: 'select-framework-widget',
template: "<div #widgetContainer></div>",
},] },
];
SelectFrameworkComponent.ctorParameters = function () { return [
{ type: ComponentFactoryResolver, },
{ type: JsonSchemaFormService, },
]; };
SelectFrameworkComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
"widgetContainer": [{ type: ViewChild, args: ['widgetContainer', { read: ViewContainerRef },] },],
};
return SelectFrameworkComponent;
}());
var SelectWidgetComponent = (function () {
function SelectWidgetComponent(componentFactory, jsf) {
this.componentFactory = componentFactory;
this.jsf = jsf;
this.newComponent = null;
}
SelectWidgetComponent.prototype.ngOnInit = function () {
this.updateComponent();
};
SelectWidgetComponent.prototype.ngOnChanges = function () {
this.updateComponent();
};
SelectWidgetComponent.prototype.updateComponent = function () {
if (!this.newComponent && (this.layoutNode || {}).widget) {
this.newComponent = this.widgetContainer.createComponent(this.componentFactory.resolveComponentFactory(this.layoutNode.widget));
}
if (this.newComponent) {
for (var _i = 0, _a = ['layoutNode', 'layoutIndex', 'dataIndex']; _i < _a.length; _i++) {
var input = _a[_i];
this.newComponent.instance[input] = this[input];
}
}
};
SelectWidgetComponent.decorators = [
{ type: Component, args: [{
selector: 'select-widget-widget',
template: "<div #widgetContainer></div>",
},] },
];
SelectWidgetComponent.ctorParameters = function () { return [
{ type: ComponentFactoryResolver, },
{ type: JsonSchemaFormService, },
]; };
SelectWidgetComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
"widgetContainer": [{ type: ViewChild, args: ['widgetContainer', { read: ViewContainerRef },] },],
};
return SelectWidgetComponent;
}());
var SubmitComponent = (function () {
function SubmitComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
SubmitComponent.prototype.ngOnInit = function () {
var _this = this;
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (hasOwn(this.options, 'disabled')) {
this.controlDisabled = this.options.disabled;
}
else if (this.jsf.formOptions.disableInvalidSubmit) {
this.controlDisabled = !this.jsf.isValid;
this.jsf.isValidChanges.subscribe(function (isValid) { return _this.controlDisabled = !isValid; });
}
if (this.controlValue === null || this.controlValue === undefined) {
this.controlValue = this.options.title;
}
};
SubmitComponent.prototype.updateValue = function (event) {
if (typeof this.options.onClick === 'function') {
this.options.onClick(event);
}
else {
this.jsf.updateValue(this, event.target.value);
}
};
SubmitComponent.decorators = [
{ type: Component, args: [{
selector: 'submit-widget',
template: "\n <div\n [class]=\"options?.htmlClass || ''\">\n <input\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [type]=\"layoutNode?.type\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n </div>",
},] },
];
SubmitComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
SubmitComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return SubmitComponent;
}());
var TabsComponent = (function () {
function TabsComponent(jsf) {
this.jsf = jsf;
this.selectedItem = 0;
this.showAddTab = true;
}
TabsComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.itemCount = this.layoutNode.items.length - 1;
this.updateControl();
};
TabsComponent.prototype.select = function (index) {
if (this.layoutNode.items[index].type === '$ref') {
this.itemCount = this.layoutNode.items.length;
this.jsf.addItem({
layoutNode: this.layoutNode.items[index],
layoutIndex: this.layoutIndex.concat(index),
dataIndex: this.dataIndex.concat(index)
});
this.updateControl();
}
this.selectedItem = index;
};
TabsComponent.prototype.updateControl = function () {
var lastItem = this.layoutNode.items[this.layoutNode.items.length - 1];
if (lastItem.type === '$ref' &&
this.itemCount >= (lastItem.options.maxItems || 1000)) {
this.showAddTab = false;
}
};
TabsComponent.prototype.setTabTitle = function (item, index) {
return this.jsf.setArrayItemTitle(this, item, index);
};
TabsComponent.decorators = [
{ type: Component, args: [{
selector: 'tabs-widget',
template: "\n <ul\n [class]=\"options?.labelHtmlClass || ''\">\n <li *ngFor=\"let item of layoutNode?.items; let i = index\"\n [class]=\"(options?.itemLabelHtmlClass || '') + (selectedItem === i ?\n (' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')) :\n (' ' + options?.style?.unselected))\"\n role=\"presentation\"\n data-tabs>\n <a *ngIf=\"showAddTab || item.type !== '$ref'\"\n [class]=\"'nav-link' + (selectedItem === i ? (' ' + options?.activeClass + ' ' + options?.style?.selected) :\n (' ' + options?.style?.unselected))\"\n [innerHTML]=\"setTabTitle(item, i)\"\n (click)=\"select(i)\"></a>\n </li>\n </ul>\n\n <div *ngFor=\"let layoutItem of layoutNode?.items; let i = index\"\n [class]=\"options?.htmlClass || ''\">\n\n <select-framework-widget *ngIf=\"selectedItem === i\"\n [class]=\"(options?.fieldHtmlClass || '') +\n ' ' + (options?.activeClass || '') +\n ' ' + (options?.style?.selected || '')\"\n [dataIndex]=\"layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex\"\n [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n [layoutNode]=\"layoutItem\"></select-framework-widget>\n\n </div>",
styles: [" a { cursor: pointer; } "],
},] },
];
TabsComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
TabsComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return TabsComponent;
}());
var TemplateComponent = (function () {
function TemplateComponent(componentFactory, jsf) {
this.componentFactory = componentFactory;
this.jsf = jsf;
this.newComponent = null;
}
TemplateComponent.prototype.ngOnInit = function () {
this.updateComponent();
};
TemplateComponent.prototype.ngOnChanges = function () {
this.updateComponent();
};
TemplateComponent.prototype.updateComponent = function () {
if (!this.newComponent && this.layoutNode.options.template) {
this.newComponent = this.widgetContainer.createComponent(this.componentFactory.resolveComponentFactory(this.layoutNode.options.template));
}
if (this.newComponent) {
for (var _i = 0, _a = ['layoutNode', 'layoutIndex', 'dataIndex']; _i < _a.length; _i++) {
var input = _a[_i];
this.newComponent.instance[input] = this[input];
}
}
};
TemplateComponent.decorators = [
{ type: Component, args: [{
selector: 'template-widget',
template: "<div #widgetContainer></div>",
},] },
];
TemplateComponent.ctorParameters = function () { return [
{ type: ComponentFactoryResolver, },
{ type: JsonSchemaFormService, },
]; };
TemplateComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
"widgetContainer": [{ type: ViewChild, args: ['widgetContainer', { read: ViewContainerRef },] },],
};
return TemplateComponent;
}());
var TextareaComponent = (function () {
function TextareaComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
TextareaComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
TextareaComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
TextareaComponent.decorators = [
{ type: Component, args: [{
selector: 'textarea-widget',
template: "\n <div\n [class]=\"options?.htmlClass || ''\">\n <label *ngIf=\"options?.title\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n <textarea *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"></textarea>\n <textarea *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [attr.placeholder]=\"options?.placeholder\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [class]=\"options?.fieldHtmlClass || ''\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\">{{controlValue}}</textarea>\n </div>",
},] },
];
TextareaComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
TextareaComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return TextareaComponent;
}());
var WidgetLibraryService = (function () {
function WidgetLibraryService() {
this.defaultWidget = 'text';
this.widgetLibrary = {
'none': NoneComponent,
'root': RootComponent,
'select-framework': SelectFrameworkComponent,
'select-widget': SelectWidgetComponent,
'$ref': AddReferenceComponent,
'email': 'text',
'integer': 'number',
'number': NumberComponent,
'password': 'text',
'search': 'text',
'tel': 'text',
'text': InputComponent,
'url': 'text',
'color': 'text',
'date': 'text',
'datetime': 'text',
'datetime-local': 'text',
'month': 'text',
'range': 'number',
'time': 'text',
'week': 'text',
'checkbox': CheckboxComponent,
'file': FileComponent,
'hidden': 'text',
'image': 'text',
'radio': 'radios',
'reset': 'submit',
'submit': SubmitComponent,
'button': ButtonComponent,
'select': SelectComponent,
'textarea': TextareaComponent,
'checkboxes': CheckboxesComponent,
'checkboxes-inline': 'checkboxes',
'checkboxbuttons': 'checkboxes',
'radios': RadiosComponent,
'radios-inline': 'radios',
'radiobuttons': 'radios',
'section': SectionComponent,
'div': 'section',
'fieldset': 'section',
'flex': 'section',
'one-of': OneOfComponent,
'array': 'section',
'tabarray': 'tabs',
'tab': 'section',
'tabs': TabsComponent,
'message': MessageComponent,
'help': 'message',
'msg': 'message',
'html': 'message',
'template': TemplateComponent,
'advancedfieldset': 'section',
'authfieldset': 'section',
'optionfieldset': 'one-of',
'selectfieldset': 'one-of',
'conditional': 'section',
'actions': 'section',
'tagsinput': 'section',
'updown': 'number',
'date-time': 'datetime-local',
'alt-datetime': 'datetime-local',
'alt-date': 'date',
'wizard': 'section',
'textline': 'text',
};
this.registeredWidgets = {};
this.frameworkWidgets = {};
this.activeWidgets = {};
this.setActiveWidgets();
}
WidgetLibraryService.prototype.setActiveWidgets = function () {
this.activeWidgets = Object.assign({}, this.widgetLibrary, this.frameworkWidgets, this.registeredWidgets);
for (var _i = 0, _a = Object.keys(this.activeWidgets); _i < _a.length; _i++) {
var widgetName = _a[_i];
var widget = this.activeWidgets[widgetName];
if (typeof widget === 'string') {
var usedAliases = [];
while (typeof widget === 'string' && !usedAliases.includes(widget)) {
usedAliases.push(widget);
widget = this.activeWidgets[widget];
}
if (typeof widget !== 'string') {
this.activeWidgets[widgetName] = widget;
}
}
}
return true;
};
WidgetLibraryService.prototype.setDefaultWidget = function (type) {
if (!this.hasWidget(type)) {
return false;
}
this.defaultWidget = type;
return true;
};
WidgetLibraryService.prototype.hasWidget = function (type, widgetSet) {
if (widgetSet === void 0) { widgetSet = 'activeWidgets'; }
if (!type || typeof type !== 'string') {
return false;
}
return hasOwn(this[widgetSet], type);
};
WidgetLibraryService.prototype.hasDefaultWidget = function (type) {
return this.hasWidget(type, 'widgetLibrary');
};
WidgetLibraryService.prototype.registerWidget = function (type, widget) {
if (!type || !widget || typeof type !== 'string') {
return false;
}
this.registeredWidgets[type] = widget;
return this.setActiveWidgets();
};
WidgetLibraryService.prototype.unRegisterWidget = function (type) {
if (!hasOwn(this.registeredWidgets, type)) {
return false;
}
delete this.registeredWidgets[type];
return this.setActiveWidgets();
};
WidgetLibraryService.prototype.unRegisterAllWidgets = function (unRegisterFrameworkWidgets) {
if (unRegisterFrameworkWidgets === void 0) { unRegisterFrameworkWidgets = true; }
this.registeredWidgets = {};
if (unRegisterFrameworkWidgets) {
this.frameworkWidgets = {};
}
return this.setActiveWidgets();
};
WidgetLibraryService.prototype.registerFrameworkWidgets = function (widgets) {
if (widgets === null || typeof widgets !== 'object') {
widgets = {};
}
this.frameworkWidgets = widgets;
return this.setActiveWidgets();
};
WidgetLibraryService.prototype.unRegisterFrameworkWidgets = function () {
if (Object.keys(this.frameworkWidgets).length) {
this.frameworkWidgets = {};
return this.setActiveWidgets();
}
return false;
};
WidgetLibraryService.prototype.getWidget = function (type, widgetSet) {
if (widgetSet === void 0) { widgetSet = 'activeWidgets'; }
if (this.hasWidget(type, widgetSet)) {
return this[widgetSet][type];
}
else if (this.hasWidget(this.defaultWidget, widgetSet)) {
return this[widgetSet][this.defaultWidget];
}
else {
return null;
}
};
WidgetLibraryService.prototype.getAllWidgets = function () {
return {
widgetLibrary: this.widgetLibrary,
registeredWidgets: this.registeredWidgets,
frameworkWidgets: this.frameworkWidgets,
activeWidgets: this.activeWidgets,
};
};
WidgetLibraryService.decorators = [
{ type: Injectable },
];
WidgetLibraryService.ctorParameters = function () { return []; };
return WidgetLibraryService;
}());
var Framework = (function () {
function Framework() {
this.widgets = {};
this.stylesheets = [];
this.scripts = [];
}
Framework.decorators = [
{ type: Injectable },
];
Framework.ctorParameters = function () { return []; };
return Framework;
}());
var FrameworkLibraryService = (function () {
function FrameworkLibraryService(frameworks, widgetLibrary) {
var _this = this;
this.frameworks = frameworks;
this.widgetLibrary = widgetLibrary;
this.activeFramework = null;
this.loadExternalAssets = false;
this.frameworkLibrary = {};
this.frameworks.forEach(function (framework) {
return _this.frameworkLibrary[framework.name] = framework;
});
this.defaultFramework = this.frameworks[0].name;
this.setFramework(this.defaultFramework);
}
FrameworkLibraryService.prototype.setLoadExternalAssets = function (loadExternalAssets) {
if (loadExternalAssets === void 0) { loadExternalAssets = true; }
this.loadExternalAssets = !!loadExternalAssets;
};
FrameworkLibraryService.prototype.setFramework = function (framework, loadExternalAssets) {
if (framework === void 0) { framework = this.defaultFramework; }
if (loadExternalAssets === void 0) { loadExternalAssets = this.loadExternalAssets; }
this.activeFramework =
typeof framework === 'string' && this.hasFramework(framework) ?
this.frameworkLibrary[framework] :
typeof framework === 'object' && hasOwn(framework, 'framework') ?
framework :
this.frameworkLibrary[this.defaultFramework];
return this.registerFrameworkWidgets(this.activeFramework);
};
FrameworkLibraryService.prototype.registerFrameworkWidgets = function (framework) {
return hasOwn(framework, 'widgets') ?
this.widgetLibrary.registerFrameworkWidgets(framework.widgets) :
this.widgetLibrary.unRegisterFrameworkWidgets();
};
FrameworkLibraryService.prototype.hasFramework = function (type) {
return hasOwn(this.frameworkLibrary, type);
};
FrameworkLibraryService.prototype.getFramework = function () {
if (!this.activeFramework) {
this.setFramework('default', true);
}
return this.activeFramework.framework;
};
FrameworkLibraryService.prototype.getFrameworkWidgets = function () {
return this.activeFramework.widgets || {};
};
FrameworkLibraryService.prototype.getFrameworkStylesheets = function (load) {
if (load === void 0) { load = this.loadExternalAssets; }
return (load && this.activeFramework.stylesheets) || [];
};
FrameworkLibraryService.prototype.getFrameworkScripts = function (load) {
if (load === void 0) { load = this.loadExternalAssets; }
return (load && this.activeFramework.scripts) || [];
};
FrameworkLibraryService.decorators = [
{ type: Injectable },
];
FrameworkLibraryService.ctorParameters = function () { return [
{ type: Array, decorators: [{ type: Inject, args: [Framework,] },] },
{ type: WidgetLibraryService, decorators: [{ type: Inject, args: [WidgetLibraryService,] },] },
]; };
return FrameworkLibraryService;
}());
var JSON_SCHEMA_FORM_VALUE_ACCESSOR = {
provide: NG_VALUE_ACCESSOR,
useExisting: forwardRef(function () { return JsonSchemaFormComponent; }),
multi: true,
};
var JsonSchemaFormComponent = (function () {
function JsonSchemaFormComponent(changeDetector, frameworkLibrary, widgetLibrary, jsf, sanitizer) {
this.changeDetector = changeDetector;
this.frameworkLibrary = frameworkLibrary;
this.widgetLibrary = widgetLibrary;
this.jsf = jsf;
this.sanitizer = sanitizer;
this.formValueSubscription = null;
this.formInitialized = false;
this.objectWrap = false;
this.previousInputs = {
schema: null, layout: null, data: null, options: null, framework: null,
widgets: null, form: null, model: null, JSONSchema: null, UISchema: null,
formData: null, loadExternalAssets: null, debug: null,
};
this.onChanges = new EventEmitter();
this.onSubmit = new EventEmitter();
this.isValid = new EventEmitter();
this.validationErrors = new EventEmitter();
this.formSchema = new EventEmitter();
this.formLayout = new EventEmitter();
this.dataChange = new EventEmitter();
this.modelChange = new EventEmitter();
this.formDataChange = new EventEmitter();
this.ngModelChange = new EventEmitter();
}
Object.defineProperty(JsonSchemaFormComponent.prototype, "value", {
get: function () {
return this.objectWrap ? this.jsf.data['1'] : this.jsf.data;
},
set: function (value) {
this.setFormValues(value, false);
},
enumerable: true,
configurable: true
});
Object.defineProperty(JsonSchemaFormComponent.prototype, "stylesheets", {
get: function () {
var stylesheets = this.frameworkLibrary.getFrameworkStylesheets();
var load = this.sanitizer.bypassSecurityTrustResourceUrl;
return stylesheets.map(function (stylesheet) { return load(stylesheet); });
},
enumerable: true,
configurable: true
});
Object.defineProperty(JsonSchemaFormComponent.prototype, "scripts", {
get: function () {
var scripts = this.frameworkLibrary.getFrameworkScripts();
var load = this.sanitizer.bypassSecurityTrustResourceUrl;
return scripts.map(function (script) { return load(script); });
},
enumerable: true,
configurable: true
});
JsonSchemaFormComponent.prototype.ngOnInit = function () {
this.updateForm();
};
JsonSchemaFormComponent.prototype.ngOnChanges = function () {
this.updateForm();
};
JsonSchemaFormComponent.prototype.writeValue = function (value) {
this.setFormValues(value, false);
if (!this.formValuesInput) {
this.formValuesInput = 'ngModel';
}
};
JsonSchemaFormComponent.prototype.registerOnChange = function (fn) {
this.onChange = fn;
};
JsonSchemaFormComponent.prototype.registerOnTouched = function (fn) {
this.onTouched = fn;
};
JsonSchemaFormComponent.prototype.setDisabledState = function (isDisabled) {
if (this.jsf.formOptions.formDisabled !== !!isDisabled) {
this.jsf.formOptions.formDisabled = !!isDisabled;
this.initializeForm();
}
};
JsonSchemaFormComponent.prototype.updateForm = function () {
var _this = this;
if (!this.formInitialized || !this.formValuesInput ||
(this.language && this.language !== this.jsf.language)) {
this.initializeForm();
}
else {
if (this.language && this.language !== this.jsf.language) {
this.jsf.setLanguage(this.language);
}
var changedInput = Object.keys(this.previousInputs)
.filter(function (input) { return _this.previousInputs[input] !== _this[input]; });
var resetFirst = true;
if (changedInput.length === 1 && changedInput[0] === 'form' &&
this.formValuesInput.startsWith('form.')) {
changedInput = Object.keys(this.previousInputs.form || {})
.filter(function (key) { return !isEqual(_this.previousInputs.form[key], _this.form[key]); })
.map(function (key) { return "form." + key; });
resetFirst = false;
}
if (changedInput.length === 1 && changedInput[0] === this.formValuesInput) {
if (this.formValuesInput.indexOf('.') === -1) {
this.setFormValues(this[this.formValuesInput], resetFirst);
}
else {
var _a = this.formValuesInput.split('.'), input = _a[0], key = _a[1];
this.setFormValues(this[input][key], resetFirst);
}
}
else if (changedInput.length) {
this.initializeForm();
if (this.onChange) {
this.onChange(this.jsf.formValues);
}
if (this.onTouched) {
this.onTouched(this.jsf.formValues);
}
}
Object.keys(this.previousInputs)
.filter(function (input) { return _this.previousInputs[input] !== _this[input]; })
.forEach(function (input) { return _this.previousInputs[input] = _this[input]; });
}
};
JsonSchemaFormComponent.prototype.setFormValues = function (formValues, resetFirst) {
if (resetFirst === void 0) { resetFirst = true; }
if (formValues) {
var newFormValues = this.objectWrap ? formValues['1'] : formValues;
if (!this.jsf.formGroup) {
this.jsf.formValues = formValues;
this.activateForm();
}
else if (resetFirst) {
this.jsf.formGroup.reset();
}
if (this.jsf.formGroup) {
this.jsf.formGroup.patchValue(newFormValues);
}
if (this.onChange) {
this.onChange(newFormValues);
}
if (this.onTouched) {
this.onTouched(newFormValues);
}
}
else {
this.jsf.formGroup.reset();
}
};
JsonSchemaFormComponent.prototype.submitForm = function () {
var validData = this.jsf.validData;
this.onSubmit.emit(this.objectWrap ? validData['1'] : validData);
};
JsonSchemaFormComponent.prototype.initializeForm = function () {
if (this.schema || this.layout || this.data || this.form || this.model ||
this.JSONSchema || this.UISchema || this.formData || this.ngModel ||
this.jsf.data) {
this.jsf.resetAllValues();
this.initializeOptions();
this.initializeSchema();
this.initializeLayout();
this.initializeData();
this.activateForm();
if (this.debug || this.jsf.formOptions.debug) {
var vars = [];
this.debugOutput = vars.map(function (v) { return JSON.stringify(v, null, 2); }).join('\n');
}
this.formInitialized = true;
}
};
JsonSchemaFormComponent.prototype.initializeOptions = function () {
if (this.language && this.language !== this.jsf.language) {
this.jsf.setLanguage(this.language);
}
this.jsf.setOptions({ debug: !!this.debug });
var loadExternalAssets = this.loadExternalAssets || false;
var framework = this.framework || 'default';
if (isObject$1(this.options)) {
this.jsf.setOptions(this.options);
loadExternalAssets = this.options.loadExternalAssets || loadExternalAssets;
framework = this.options.framework || framework;
}
if (isObject$1(this.form) && isObject$1(this.form.options)) {
this.jsf.setOptions(this.form.options);
loadExternalAssets = this.form.options.loadExternalAssets || loadExternalAssets;
framework = this.form.options.framework || framework;
}
if (isObject$1(this.widgets)) {
this.jsf.setOptions({ widgets: this.widgets });
}
this.frameworkLibrary.setLoadExternalAssets(loadExternalAssets);
this.frameworkLibrary.setFramework(framework);
this.jsf.framework = this.frameworkLibrary.getFramework();
if (isObject$1(this.jsf.formOptions.widgets)) {
for (var _i = 0, _a = Object.keys(this.jsf.formOptions.widgets); _i < _a.length; _i++) {
var widget = _a[_i];
this.widgetLibrary.registerWidget(widget, this.jsf.formOptions.widgets[widget]);
}
}
if (isObject$1(this.form) && isObject$1(this.form.tpldata)) {
this.jsf.setTpldata(this.form.tpldata);
}
};
JsonSchemaFormComponent.prototype.initializeSchema = function () {
if (isObject$1(this.schema)) {
this.jsf.AngularSchemaFormCompatibility = true;
this.jsf.schema = cloneDeep(this.schema);
}
else if (hasOwn(this.form, 'schema') && isObject$1(this.form.schema)) {
this.jsf.schema = cloneDeep(this.form.schema);
}
else if (isObject$1(this.JSONSchema)) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
this.jsf.schema = cloneDeep(this.JSONSchema);
}
else if (hasOwn(this.form, 'JSONSchema') && isObject$1(this.form.JSONSchema)) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
this.jsf.schema = cloneDeep(this.form.JSONSchema);
}
else if (hasOwn(this.form, 'properties') && isObject$1(this.form.properties)) {
this.jsf.schema = cloneDeep(this.form);
}
else if (isObject$1(this.form)) {
}
if (!isEmpty(this.jsf.schema)) {
if (inArray('object', this.jsf.schema.type)) {
this.jsf.schema.type = 'object';
}
if (hasOwn(this.jsf.schema, 'type') && this.jsf.schema.type !== 'object') {
this.jsf.schema = {
'type': 'object',
'properties': { 1: this.jsf.schema }
};
this.objectWrap = true;
}
else if (!hasOwn(this.jsf.schema, 'type')) {
if (isObject$1(this.jsf.schema.properties) ||
isObject$1(this.jsf.schema.patternProperties) ||
isObject$1(this.jsf.schema.additionalProperties)) {
this.jsf.schema.type = 'object';
}
else {
this.jsf.JsonFormCompatibility = true;
this.jsf.schema = {
'type': 'object',
'properties': this.jsf.schema
};
}
}
this.jsf.schema = convertSchemaToDraft6(this.jsf.schema);
this.jsf.compileAjvSchema();
this.jsf.schema = resolveSchemaReferences(this.jsf.schema, this.jsf.schemaRefLibrary, this.jsf.schemaRecursiveRefMap, this.jsf.dataRecursiveRefMap, this.jsf.arrayMap);
if (hasOwn(this.jsf.schemaRefLibrary, '')) {
this.jsf.hasRootReference = true;
}
}
};
JsonSchemaFormComponent.prototype.initializeData = function () {
if (hasValue(this.data)) {
this.jsf.formValues = cloneDeep(this.data);
this.formValuesInput = 'data';
}
else if (hasValue(this.model)) {
this.jsf.AngularSchemaFormCompatibility = true;
this.jsf.formValues = cloneDeep(this.model);
this.formValuesInput = 'model';
}
else if (hasValue(this.ngModel)) {
this.jsf.AngularSchemaFormCompatibility = true;
this.jsf.formValues = cloneDeep(this.ngModel);
this.formValuesInput = 'ngModel';
}
else if (isObject$1(this.form) && hasValue(this.form.value)) {
this.jsf.JsonFormCompatibility = true;
this.jsf.formValues = cloneDeep(this.form.value);
this.formValuesInput = 'form.value';
}
else if (isObject$1(this.form) && hasValue(this.form.data)) {
this.jsf.formValues = cloneDeep(this.form.data);
this.formValuesInput = 'form.data';
}
else if (hasValue(this.formData)) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
this.formValuesInput = 'formData';
}
else if (hasOwn(this.form, 'formData') && hasValue(this.form.formData)) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
this.jsf.formValues = cloneDeep(this.form.formData);
this.formValuesInput = 'form.formData';
}
else {
this.formValuesInput = null;
}
};
JsonSchemaFormComponent.prototype.initializeLayout = function () {
var _this = this;
var fixJsonFormOptions = function (layout) {
if (isObject$1(layout) || isArray$2(layout)) {
forEach(layout, function (value, key) {
if (hasOwn(value, 'options') && isObject$1(value.options)) {
value.titleMap = value.options;
delete value.options;
}
}, 'top-down');
}
return layout;
};
if (isArray$2(this.layout)) {
this.jsf.layout = cloneDeep(this.layout);
}
else if (isArray$2(this.form)) {
this.jsf.AngularSchemaFormCompatibility = true;
this.jsf.layout = cloneDeep(this.form);
}
else if (this.form && isArray$2(this.form.form)) {
this.jsf.JsonFormCompatibility = true;
this.jsf.layout = fixJsonFormOptions(cloneDeep(this.form.form));
}
else if (this.form && isArray$2(this.form.layout)) {
this.jsf.layout = cloneDeep(this.form.layout);
}
else {
this.jsf.layout = ['*'];
}
var alternateLayout = null;
if (isObject$1(this.UISchema)) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
alternateLayout = cloneDeep(this.UISchema);
}
else if (hasOwn(this.form, 'UISchema')) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
alternateLayout = cloneDeep(this.form.UISchema);
}
else if (hasOwn(this.form, 'uiSchema')) {
this.jsf.ReactJsonSchemaFormCompatibility = true;
alternateLayout = cloneDeep(this.form.uiSchema);
}
else if (hasOwn(this.form, 'customFormItems')) {
this.jsf.JsonFormCompatibility = true;
alternateLayout = fixJsonFormOptions(cloneDeep(this.form.customFormItems));
}
if (alternateLayout) {
JsonPointer.forEachDeep(alternateLayout, function (value, pointer) {
var schemaPointer = pointer
.replace(/\//g, '/properties/')
.replace(/\/properties\/items\/properties\//g, '/items/properties/')
.replace(/\/properties\/titleMap\/properties\//g, '/titleMap/properties/');
if (hasValue(value) && hasValue(pointer)) {
var key = JsonPointer.toKey(pointer);
var groupPointer = (JsonPointer.parse(schemaPointer) || []).slice(0, -2);
var itemPointer = void 0;
if (key.toLowerCase() === 'ui:order') {
itemPointer = groupPointer.concat(['ui:order']);
}
else {
if (key.slice(0, 3).toLowerCase() === 'ui:') {
key = key.slice(3);
}
itemPointer = groupPointer.concat(['x-schema-form', key]);
}
if (JsonPointer.has(_this.jsf.schema, groupPointer) &&
!JsonPointer.has(_this.jsf.schema, itemPointer)) {
JsonPointer.set(_this.jsf.schema, itemPointer, value);
}
}
});
}
};
JsonSchemaFormComponent.prototype.activateForm = function () {
var _this = this;
if (isEmpty(this.jsf.schema)) {
if (!isEmpty(this.jsf.formValues)) {
this.jsf.buildSchemaFromData();
}
}
if (!isEmpty(this.jsf.schema)) {
this.jsf.compileAjvSchema();
this.jsf.buildLayout(this.widgetLibrary);
this.jsf.buildFormGroupTemplate(this.jsf.formValues);
this.jsf.buildFormGroup();
}
if (this.jsf.formGroup) {
if (!isEmpty(this.jsf.formValues) &&
this.jsf.formOptions.setSchemaDefaults !== true &&
this.jsf.formOptions.setLayoutDefaults !== true) {
this.setFormValues(this.jsf.formValues);
}
this.jsf.dataChanges.subscribe(function (data) {
_this.onChanges.emit(_this.objectWrap ? data['1'] : data);
if (_this.formValuesInput && _this.formValuesInput.indexOf('.') === -1) {
_this[_this.formValuesInput + "Change"].emit(_this.objectWrap ? data['1'] : data);
}
});
this.jsf.formGroup.statusChanges.subscribe(function () { return _this.changeDetector.markForCheck(); });
this.jsf.isValidChanges.subscribe(function (isValid) { return _this.isValid.emit(isValid); });
this.jsf.validationErrorChanges.subscribe(function (err) { return _this.validationErrors.emit(err); });
this.formSchema.emit(this.jsf.schema);
this.formLayout.emit(this.jsf.layout);
this.onChanges.emit(this.objectWrap ? this.jsf.data['1'] : this.jsf.data);
var validateOnRender_1 = JsonPointer.get(this.jsf, '/formOptions/validateOnRender');
if (validateOnRender_1) {
var touchAll_1 = function (control) {
if (validateOnRender_1 === true || hasValue(control.value)) {
control.markAsTouched();
}
Object.keys(control.controls || {})
.forEach(function (key) { return touchAll_1(control.controls[key]); });
};
touchAll_1(this.jsf.formGroup);
this.isValid.emit(this.jsf.isValid);
this.validationErrors.emit(this.jsf.ajvErrors);
}
}
};
JsonSchemaFormComponent.decorators = [
{ type: Component, args: [{
selector: 'json-schema-form',
template: "\n <div *ngFor=\"let stylesheet of stylesheets\">\n <link rel=\"stylesheet\" [href]=\"stylesheet\">\n </div>\n <div *ngFor=\"let script of scripts\">\n <script type=\"text/javascript\" [src]=\"script\"></script>\n </div>\n <form class=\"json-schema-form\" (ngSubmit)=\"submitForm()\">\n <root-widget [layout]=\"jsf?.layout\"></root-widget>\n </form>\n <div *ngIf=\"debug || jsf?.formOptions?.debug\">\n Debug output: <pre>{{debugOutput}}</pre>\n </div>",
changeDetection: ChangeDetectionStrategy.OnPush,
providers: [JsonSchemaFormService, JSON_SCHEMA_FORM_VALUE_ACCESSOR],
},] },
];
JsonSchemaFormComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: FrameworkLibraryService, },
{ type: WidgetLibraryService, },
{ type: JsonSchemaFormService, },
{ type: DomSanitizer, },
]; };
JsonSchemaFormComponent.propDecorators = {
"schema": [{ type: Input },],
"layout": [{ type: Input },],
"data": [{ type: Input },],
"options": [{ type: Input },],
"framework": [{ type: Input },],
"widgets": [{ type: Input },],
"form": [{ type: Input },],
"model": [{ type: Input },],
"JSONSchema": [{ type: Input },],
"UISchema": [{ type: Input },],
"formData": [{ type: Input },],
"ngModel": [{ type: Input },],
"language": [{ type: Input },],
"loadExternalAssets": [{ type: Input },],
"debug": [{ type: Input },],
"value": [{ type: Input },],
"onChanges": [{ type: Output },],
"onSubmit": [{ type: Output },],
"isValid": [{ type: Output },],
"validationErrors": [{ type: Output },],
"formSchema": [{ type: Output },],
"formLayout": [{ type: Output },],
"dataChange": [{ type: Output },],
"modelChange": [{ type: Output },],
"formDataChange": [{ type: Output },],
"ngModelChange": [{ type: Output },],
};
return JsonSchemaFormComponent;
}());
var HiddenComponent = (function () {
function HiddenComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
HiddenComponent.prototype.ngOnInit = function () {
this.jsf.initializeControl(this);
};
HiddenComponent.decorators = [
{ type: Component, args: [{
selector: 'hidden-widget',
template: "\n <input *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n type=\"hidden\">\n <input *ngIf=\"!boundControl\"\n [disabled]=\"controlDisabled\"\n [name]=\"controlName\"\n [id]=\"'control' + layoutNode?._id\"\n type=\"hidden\"\n [value]=\"controlValue\">",
},] },
];
HiddenComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
HiddenComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return HiddenComponent;
}());
var TabComponent = (function () {
function TabComponent(jsf) {
this.jsf = jsf;
}
TabComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
};
TabComponent.decorators = [
{ type: Component, args: [{
selector: 'tab-widget',
template: "\n <div [class]=\"options?.htmlClass || ''\">\n <root-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layout]=\"layoutNode.items\"></root-widget>\n </div>",
},] },
];
TabComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
TabComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return TabComponent;
}());
var BASIC_WIDGETS = [
AddReferenceComponent, OneOfComponent, ButtonComponent, CheckboxComponent,
CheckboxesComponent, FileComponent, HiddenComponent, InputComponent,
MessageComponent, NoneComponent, NumberComponent, RadiosComponent,
RootComponent, SectionComponent, SelectComponent, SelectFrameworkComponent,
SelectWidgetComponent, SubmitComponent, TabComponent, TabsComponent,
TemplateComponent, TextareaComponent
];
var WidgetLibraryModule = (function () {
function WidgetLibraryModule() {
}
WidgetLibraryModule.forRoot = function () {
return {
ngModule: WidgetLibraryModule,
providers: [JsonSchemaFormService]
};
};
WidgetLibraryModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, FormsModule, ReactiveFormsModule],
declarations: BASIC_WIDGETS.concat([OrderableDirective]),
exports: BASIC_WIDGETS.concat([OrderableDirective]),
entryComponents: BASIC_WIDGETS.slice(),
providers: [JsonSchemaFormService]
},] },
];
WidgetLibraryModule.ctorParameters = function () { return []; };
return WidgetLibraryModule;
}());
var NoFrameworkComponent = (function () {
function NoFrameworkComponent() {
}
NoFrameworkComponent.decorators = [
{ type: Component, args: [{
selector: 'no-framework',
template: "\n <select-widget-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"layoutNode\"></select-widget-widget>",
},] },
];
NoFrameworkComponent.ctorParameters = function () { return []; };
NoFrameworkComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return NoFrameworkComponent;
}());
var __extends$11 = (undefined && undefined.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var NoFramework = (function (_super) {
__extends$11(NoFramework, _super);
function NoFramework() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'no-framework';
_this.framework = NoFrameworkComponent;
return _this;
}
NoFramework.decorators = [
{ type: Injectable },
];
NoFramework.ctorParameters = function () { return []; };
return NoFramework;
}(Framework));
var NoFrameworkModule = (function () {
function NoFrameworkModule() {
}
NoFrameworkModule.forRoot = function () {
return {
ngModule: NoFrameworkModule,
providers: [
{ provide: Framework, useClass: NoFramework, multi: true }
]
};
};
NoFrameworkModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, WidgetLibraryModule],
declarations: [NoFrameworkComponent],
exports: [NoFrameworkComponent],
entryComponents: [NoFrameworkComponent]
},] },
];
NoFrameworkModule.ctorParameters = function () { return []; };
return NoFrameworkModule;
}());
var JsonSchemaFormModule = (function () {
function JsonSchemaFormModule() {
}
JsonSchemaFormModule.forRoot = function () {
var frameworks = [];
for (var _i = 0; _i < arguments.length; _i++) {
frameworks[_i] = arguments[_i];
}
var loadFrameworks = frameworks.length ?
frameworks.map(function (framework) { return framework.forRoot().providers[0]; }) :
[{ provide: Framework, useClass: NoFramework, multi: true }];
return {
ngModule: JsonSchemaFormModule,
providers: [
JsonSchemaFormService, FrameworkLibraryService, WidgetLibraryService
].concat(loadFrameworks)
};
};
JsonSchemaFormModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule, FormsModule, ReactiveFormsModule,
WidgetLibraryModule, NoFrameworkModule
],
declarations: [JsonSchemaFormComponent],
exports: [JsonSchemaFormComponent, WidgetLibraryModule]
},] },
];
JsonSchemaFormModule.ctorParameters = function () { return []; };
return JsonSchemaFormModule;
}());
var FlexLayoutRootComponent = (function () {
function FlexLayoutRootComponent(jsf) {
this.jsf = jsf;
this.isFlexItem = false;
}
FlexLayoutRootComponent.prototype.removeItem = function (item) {
this.jsf.removeItem(item);
};
FlexLayoutRootComponent.prototype.getFlexAttribute = function (node, attribute) {
var index = ['flex-grow', 'flex-shrink', 'flex-basis'].indexOf(attribute);
return ((node.options || {}).flex || '').split(/\s+/)[index] ||
(node.options || {})[attribute] || ['1', '1', 'auto'][index];
};
FlexLayoutRootComponent.prototype.showWidget = function (layoutNode) {
return this.jsf.evaluateCondition(layoutNode, this.dataIndex);
};
FlexLayoutRootComponent.decorators = [
{ type: Component, args: [{
selector: 'flex-layout-root-widget',
template: "\n <div *ngFor=\"let layoutNode of layout; let i = index\"\n [class.form-flex-item]=\"isFlexItem\"\n [style.flex-grow]=\"getFlexAttribute(layoutNode, 'flex-grow')\"\n [style.flex-shrink]=\"getFlexAttribute(layoutNode, 'flex-shrink')\"\n [style.flex-basis]=\"getFlexAttribute(layoutNode, 'flex-basis')\"\n [style.align-self]=\"(layoutNode?.options || {})['align-self']\"\n [style.order]=\"layoutNode?.options?.order\"\n [fxFlex]=\"layoutNode?.options?.fxFlex\"\n [fxFlexOrder]=\"layoutNode?.options?.fxFlexOrder\"\n [fxFlexOffset]=\"layoutNode?.options?.fxFlexOffset\"\n [fxFlexAlign]=\"layoutNode?.options?.fxFlexAlign\">\n <select-framework-widget *ngIf=\"showWidget(layoutNode)\"\n [dataIndex]=\"layoutNode?.arrayItem ? (dataIndex || []).concat(i) : (dataIndex || [])\"\n [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n [layoutNode]=\"layoutNode\"></select-framework-widget>\n <div>",
changeDetection: ChangeDetectionStrategy.Default,
},] },
];
FlexLayoutRootComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
FlexLayoutRootComponent.propDecorators = {
"dataIndex": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"layout": [{ type: Input },],
"isFlexItem": [{ type: Input },],
};
return FlexLayoutRootComponent;
}());
var FlexLayoutSectionComponent = (function () {
function FlexLayoutSectionComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.expanded = true;
this.containerType = 'div';
}
Object.defineProperty(FlexLayoutSectionComponent.prototype, "sectionTitle", {
get: function () {
return this.options.notitle ? null : this.jsf.setItemTitle(this);
},
enumerable: true,
configurable: true
});
FlexLayoutSectionComponent.prototype.ngOnInit = function () {
this.jsf.initializeControl(this);
this.options = this.layoutNode.options || {};
this.expanded = typeof this.options.expanded === 'boolean' ?
this.options.expanded : !this.options.expandable;
switch (this.layoutNode.type) {
case 'section':
case 'array':
case 'fieldset':
case 'advancedfieldset':
case 'authfieldset':
case 'optionfieldset':
case 'selectfieldset':
this.containerType = 'fieldset';
break;
case 'card':
this.containerType = 'card';
break;
case 'expansion-panel':
this.containerType = 'expansion-panel';
break;
default:
this.containerType = 'div';
}
};
FlexLayoutSectionComponent.prototype.toggleExpanded = function () {
if (this.options.expandable) {
this.expanded = !this.expanded;
}
};
FlexLayoutSectionComponent.prototype.getFlexAttribute = function (attribute) {
var flexActive = this.layoutNode.type === 'flex' ||
!!this.options.displayFlex ||
this.options.display === 'flex';
switch (attribute) {
case 'is-flex':
return flexActive;
case 'display':
return flexActive ? 'flex' : 'initial';
case 'flex-direction':
case 'flex-wrap':
var index = ['flex-direction', 'flex-wrap'].indexOf(attribute);
return (this.options['flex-flow'] || '').split(/\s+/)[index] ||
this.options[attribute] || ['column', 'nowrap'][index];
case 'justify-content':
case 'align-items':
case 'align-content':
return this.options[attribute];
}
};
FlexLayoutSectionComponent.decorators = [
{ type: Component, args: [{
selector: 'flex-layout-section-widget',
template: "\n <div *ngIf=\"containerType === 'div'\"\n [class]=\"options?.htmlClass || ''\"\n [class.expandable]=\"options?.expandable && !expanded\"\n [class.expanded]=\"options?.expandable && expanded\">\n <label *ngIf=\"sectionTitle\"\n [class]=\"'legend ' + (options?.labelHtmlClass || '')\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></label>\n <flex-layout-root-widget *ngIf=\"expanded\"\n [layout]=\"layoutNode.items\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [fxLayout]=\"options?.fxLayout\"\n [fxLayoutWrap]=\"options?.fxLayoutWrap\"\n [fxLayoutGap]=\"options?.fxLayoutGap\"\n [fxLayoutAlign]=\"options?.fxLayoutAlign\"\n [attr.fxFlexFill]=\"options?.fxLayoutAlign\"></flex-layout-root-widget>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </div>\n\n <fieldset *ngIf=\"containerType === 'fieldset'\"\n [class]=\"options?.htmlClass || ''\"\n [class.expandable]=\"options?.expandable && !expanded\"\n [class.expanded]=\"options?.expandable && expanded\"\n [disabled]=\"options?.readonly\">\n <legend *ngIf=\"sectionTitle\"\n [class]=\"'legend ' + (options?.labelHtmlClass || '')\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></legend>\n <flex-layout-root-widget *ngIf=\"expanded\"\n [layout]=\"layoutNode.items\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [fxLayout]=\"options?.fxLayout\"\n [fxLayoutWrap]=\"options?.fxLayoutWrap\"\n [fxLayoutGap]=\"options?.fxLayoutGap\"\n [fxLayoutAlign]=\"options?.fxLayoutAlign\"\n [attr.fxFlexFill]=\"options?.fxLayoutAlign\"></flex-layout-root-widget>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </fieldset>\n\n <mat-card *ngIf=\"containerType === 'card'\"\n [class]=\"options?.htmlClass || ''\"\n [class.expandable]=\"options?.expandable && !expanded\"\n [class.expanded]=\"options?.expandable && expanded\">\n <mat-card-header *ngIf=\"sectionTitle\">\n <legend\n [class]=\"'legend ' + (options?.labelHtmlClass || '')\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></legend>\n </mat-card-header>\n <mat-card-content *ngIf=\"expanded\">\n <fieldset [disabled]=\"options?.readonly\">\n <flex-layout-root-widget *ngIf=\"expanded\"\n [layout]=\"layoutNode.items\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [fxLayout]=\"options?.fxLayout\"\n [fxLayoutWrap]=\"options?.fxLayoutWrap\"\n [fxLayoutGap]=\"options?.fxLayoutGap\"\n [fxLayoutAlign]=\"options?.fxLayoutAlign\"\n [attr.fxFlexFill]=\"options?.fxLayoutAlign\"></flex-layout-root-widget>\n </fieldset>\n </mat-card-content>\n <mat-card-footer>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </mat-card-footer>\n </mat-card>\n\n <mat-expansion-panel *ngIf=\"containerType === 'expansion-panel'\"\n [expanded]=\"expanded\"\n [hideToggle]=\"!options?.expandable\">\n <mat-expansion-panel-header>\n <mat-panel-title>\n <legend *ngIf=\"sectionTitle\"\n [class]=\"options?.labelHtmlClass\"\n [innerHTML]=\"sectionTitle\"\n (click)=\"toggleExpanded()\"></legend>\n </mat-panel-title>\n </mat-expansion-panel-header>\n <fieldset [disabled]=\"options?.readonly\">\n <flex-layout-root-widget *ngIf=\"expanded\"\n [layout]=\"layoutNode.items\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [isFlexItem]=\"getFlexAttribute('is-flex')\"\n [class.form-flex-column]=\"getFlexAttribute('flex-direction') === 'column'\"\n [class.form-flex-row]=\"getFlexAttribute('flex-direction') === 'row'\"\n [style.display]=\"getFlexAttribute('display')\"\n [style.flex-direction]=\"getFlexAttribute('flex-direction')\"\n [style.flex-wrap]=\"getFlexAttribute('flex-wrap')\"\n [style.justify-content]=\"getFlexAttribute('justify-content')\"\n [style.align-items]=\"getFlexAttribute('align-items')\"\n [style.align-content]=\"getFlexAttribute('align-content')\"\n [fxLayout]=\"options?.fxLayout\"\n [fxLayoutWrap]=\"options?.fxLayoutWrap\"\n [fxLayoutGap]=\"options?.fxLayoutGap\"\n [fxLayoutAlign]=\"options?.fxLayoutAlign\"\n [attr.fxFlexFill]=\"options?.fxLayoutAlign\"></flex-layout-root-widget>\n </fieldset>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </mat-expansion-panel>",
styles: ["\n fieldset { border: 0; margin: 0; padding: 0; }\n .legend { font-weight: bold; }\n .expandable > .legend:before { content: '\u25B6'; padding-right: .3em; }\n .expanded > .legend:before { content: '\u25BC'; padding-right: .2em; }\n "],
},] },
];
FlexLayoutSectionComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
FlexLayoutSectionComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return FlexLayoutSectionComponent;
}());
var MaterialAddReferenceComponent = (function () {
function MaterialAddReferenceComponent(jsf) {
this.jsf = jsf;
}
MaterialAddReferenceComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
};
Object.defineProperty(MaterialAddReferenceComponent.prototype, "showAddButton", {
get: function () {
return !this.layoutNode.arrayItem ||
this.layoutIndex[this.layoutIndex.length - 1] < this.options.maxItems;
},
enumerable: true,
configurable: true
});
MaterialAddReferenceComponent.prototype.addItem = function (event) {
event.preventDefault();
this.jsf.addItem(this);
};
Object.defineProperty(MaterialAddReferenceComponent.prototype, "buttonText", {
get: function () {
var parent = {
dataIndex: this.dataIndex.slice(0, -1),
layoutIndex: this.layoutIndex.slice(0, -1),
layoutNode: this.jsf.getParentNode(this),
};
return parent.layoutNode.add ||
this.jsf.setArrayItemTitle(parent, this.layoutNode, this.itemCount);
},
enumerable: true,
configurable: true
});
MaterialAddReferenceComponent.decorators = [
{ type: Component, args: [{
selector: 'material-add-reference-widget',
template: "\n <section [class]=\"options?.htmlClass || ''\" align=\"end\">\n <button mat-raised-button *ngIf=\"showAddButton\"\n [color]=\"options?.color || 'accent'\"\n [disabled]=\"options?.readonly\"\n (click)=\"addItem($event)\">\n <span *ngIf=\"options?.icon\" [class]=\"options?.icon\"></span>\n <span *ngIf=\"options?.title\" [innerHTML]=\"buttonText\"></span>\n </button>\n </section>",
changeDetection: ChangeDetectionStrategy.Default,
},] },
];
MaterialAddReferenceComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialAddReferenceComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialAddReferenceComponent;
}());
var MaterialOneOfComponent = (function () {
function MaterialOneOfComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialOneOfComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
MaterialOneOfComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialOneOfComponent.decorators = [
{ type: Component, args: [{
selector: 'material-one-of-widget',
template: "",
},] },
];
MaterialOneOfComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialOneOfComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialOneOfComponent;
}());
var MaterialButtonComponent = (function () {
function MaterialButtonComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialButtonComponent.prototype.ngOnInit = function () {
var _this = this;
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (hasOwn(this.options, 'disabled')) {
this.controlDisabled = this.options.disabled;
}
else if (this.jsf.formOptions.disableInvalidSubmit) {
this.controlDisabled = !this.jsf.isValid;
this.jsf.isValidChanges.subscribe(function (isValid) { return _this.controlDisabled = !isValid; });
}
};
MaterialButtonComponent.prototype.updateValue = function (event) {
if (typeof this.options.onClick === 'function') {
this.options.onClick(event);
}
else {
this.jsf.updateValue(this, event.target.value);
}
};
MaterialButtonComponent.decorators = [
{ type: Component, args: [{
selector: 'material-button-widget',
template: "\n <div class=\"button-row\" [class]=\"options?.htmlClass || ''\">\n <button mat-raised-button\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [color]=\"options?.color || 'primary'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [type]=\"layoutNode?.type\"\n [value]=\"controlValue\"\n (click)=\"updateValue($event)\">\n <mat-icon *ngIf=\"options?.icon\" class=\"mat-24\">{{options?.icon}}</mat-icon>\n <span *ngIf=\"options?.title\" [innerHTML]=\"options?.title\"></span>\n </button>\n </div>",
styles: [" button { margin-top: 10px; } "],
},] },
];
MaterialButtonComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialButtonComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialButtonComponent;
}());
var MaterialButtonGroupComponent = (function () {
function MaterialButtonGroupComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.radiosList = [];
this.vertical = false;
}
MaterialButtonGroupComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.radiosList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, true);
this.jsf.initializeControl(this);
};
MaterialButtonGroupComponent.prototype.updateValue = function (value) {
this.options.showErrors = true;
this.jsf.updateValue(this, value);
};
MaterialButtonGroupComponent.decorators = [
{ type: Component, args: [{
selector: 'material-button-group-widget',
template: "\n <div>\n <div *ngIf=\"options?.title\">\n <label\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n </div>\n <mat-button-toggle-group\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [name]=\"controlName\"\n [value]=\"controlValue\"\n [vertical]=\"!!options.vertical\">\n <mat-button-toggle *ngFor=\"let radioItem of radiosList\"\n [id]=\"'control' + layoutNode?._id + '/' + radioItem?.name\"\n [value]=\"radioItem?.value\"\n (click)=\"updateValue(radioItem?.value)\">\n <span [innerHTML]=\"radioItem?.name\"></span>\n </mat-button-toggle>\n </mat-button-toggle-group>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </div>",
styles: [" mat-error { font-size: 75%; } "],
},] },
];
MaterialButtonGroupComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialButtonGroupComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialButtonGroupComponent;
}());
var MaterialCheckboxComponent = (function () {
function MaterialCheckboxComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.trueValue = true;
this.falseValue = false;
this.showSlideToggle = false;
}
MaterialCheckboxComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this, !this.options.readonly);
if (this.controlValue === null || this.controlValue === undefined) {
this.controlValue = false;
this.jsf.updateValue(this, this.falseValue);
}
if (this.layoutNode.type === 'slide-toggle' ||
this.layoutNode.format === 'slide-toggle') {
this.showSlideToggle = true;
}
};
MaterialCheckboxComponent.prototype.updateValue = function (event) {
this.options.showErrors = true;
this.jsf.updateValue(this, event.checked ? this.trueValue : this.falseValue);
};
Object.defineProperty(MaterialCheckboxComponent.prototype, "isChecked", {
get: function () {
return this.jsf.getFormControlValue(this) === this.trueValue;
},
enumerable: true,
configurable: true
});
MaterialCheckboxComponent.decorators = [
{ type: Component, args: [{
selector: 'material-checkbox-widget',
template: "\n <mat-checkbox *ngIf=\"boundControl && !showSlideToggle\"\n [formControl]=\"formControl\"\n align=\"left\"\n [color]=\"options?.color || 'primary'\"\n [id]=\"'control' + layoutNode?._id\"\n labelPosition=\"after\"\n [name]=\"controlName\"\n (blur)=\"options.showErrors = true\">\n <span *ngIf=\"options?.title\"\n class=\"checkbox-name\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></span>\n </mat-checkbox>\n <mat-checkbox *ngIf=\"!boundControl && !showSlideToggle\"\n align=\"left\"\n [color]=\"options?.color || 'primary'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n labelPosition=\"after\"\n [name]=\"controlName\"\n [checked]=\"isChecked\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue($event)\">\n <span *ngIf=\"options?.title\"\n class=\"checkbox-name\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></span>\n </mat-checkbox>\n <mat-slide-toggle *ngIf=\"boundControl && showSlideToggle\"\n [formControl]=\"formControl\"\n align=\"left\"\n [color]=\"options?.color || 'primary'\"\n [id]=\"'control' + layoutNode?._id\"\n labelPosition=\"after\"\n [name]=\"controlName\"\n (blur)=\"options.showErrors = true\">\n <span *ngIf=\"options?.title\"\n class=\"checkbox-name\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></span>\n </mat-slide-toggle>\n <mat-slide-toggle *ngIf=\"!boundControl && showSlideToggle\"\n align=\"left\"\n [color]=\"options?.color || 'primary'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n labelPosition=\"after\"\n [name]=\"controlName\"\n [checked]=\"isChecked\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue($event)\">\n <span *ngIf=\"options?.title\"\n class=\"checkbox-name\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></span>\n </mat-slide-toggle>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n .checkbox-name { white-space: nowrap; }\n mat-error { font-size: 75%; }\n "],
},] },
];
MaterialCheckboxComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialCheckboxComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialCheckboxComponent;
}());
var MaterialCheckboxesComponent = (function () {
function MaterialCheckboxesComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.horizontalList = false;
this.checkboxList = [];
}
MaterialCheckboxesComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.horizontalList = this.layoutNode.type === 'checkboxes-inline' ||
this.layoutNode.type === 'checkboxbuttons';
this.jsf.initializeControl(this);
this.checkboxList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, true);
if (this.boundControl) {
var formArray = this.jsf.getFormControl(this);
for (var _i = 0, _a = this.checkboxList; _i < _a.length; _i++) {
var checkboxItem = _a[_i];
checkboxItem.checked = formArray.value.includes(checkboxItem.value);
}
}
};
Object.defineProperty(MaterialCheckboxesComponent.prototype, "allChecked", {
get: function () {
return this.checkboxList.filter(function (t) { return t.checked; }).length === this.checkboxList.length;
},
enumerable: true,
configurable: true
});
Object.defineProperty(MaterialCheckboxesComponent.prototype, "someChecked", {
get: function () {
var checkedItems = this.checkboxList.filter(function (t) { return t.checked; }).length;
return checkedItems > 0 && checkedItems < this.checkboxList.length;
},
enumerable: true,
configurable: true
});
MaterialCheckboxesComponent.prototype.updateValue = function () {
this.options.showErrors = true;
if (this.boundControl) {
this.jsf.updateArrayCheckboxList(this, this.checkboxList);
}
};
MaterialCheckboxesComponent.prototype.updateAllValues = function (event) {
this.options.showErrors = true;
this.checkboxList.forEach(function (t) { return t.checked = event.checked; });
this.updateValue();
};
MaterialCheckboxesComponent.decorators = [
{ type: Component, args: [{
selector: 'material-checkboxes-widget',
template: "\n <div>\n <mat-checkbox type=\"checkbox\"\n [checked]=\"allChecked\"\n [color]=\"options?.color || 'primary'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [indeterminate]=\"someChecked\"\n [name]=\"options?.name\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateAllValues($event)\">\n <span class=\"checkbox-name\" [innerHTML]=\"options?.name\"></span>\n </mat-checkbox>\n <label *ngIf=\"options?.title\"\n class=\"title\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n <ul class=\"checkbox-list\" [class.horizontal-list]=\"horizontalList\">\n <li *ngFor=\"let checkboxItem of checkboxList\"\n [class]=\"options?.htmlClass || ''\">\n <mat-checkbox type=\"checkbox\"\n [(ngModel)]=\"checkboxItem.checked\"\n [color]=\"options?.color || 'primary'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [name]=\"checkboxItem?.name\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue()\">\n <span class=\"checkbox-name\" [innerHTML]=\"checkboxItem?.name\"></span>\n </mat-checkbox>\n </li>\n </ul>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </div>",
styles: ["\n .title { font-weight: bold; }\n .checkbox-list { list-style-type: none; }\n .horizontal-list > li { display: inline-block; margin-right: 10px; zoom: 1; }\n .checkbox-name { white-space: nowrap; }\n mat-error { font-size: 75%; }\n "],
},] },
];
MaterialCheckboxesComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialCheckboxesComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialCheckboxesComponent;
}());
var MaterialChipListComponent = (function () {
function MaterialChipListComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialChipListComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
MaterialChipListComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialChipListComponent.decorators = [
{ type: Component, args: [{
selector: 'material-chip-list-widget',
template: "",
},] },
];
MaterialChipListComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialChipListComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialChipListComponent;
}());
var MaterialDatepickerComponent = (function () {
function MaterialDatepickerComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.autoCompleteList = [];
}
MaterialDatepickerComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this, !this.options.readonly);
this.setControlDate(this.controlValue);
if (!this.options.notitle && !this.options.description && this.options.placeholder) {
this.options.description = this.options.placeholder;
}
};
MaterialDatepickerComponent.prototype.ngOnChanges = function () {
this.setControlDate(this.controlValue);
};
MaterialDatepickerComponent.prototype.setControlDate = function (dateString) {
this.dateValue = stringToDate(dateString);
};
MaterialDatepickerComponent.prototype.updateValue = function (event) {
this.options.showErrors = true;
this.jsf.updateValue(this, dateToString(event, this.options));
};
MaterialDatepickerComponent.decorators = [
{ type: Component, args: [{
selector: 'material-datepicker-widget',
template: "\n <mat-form-field [style.width]=\"'100%'\">\n <span matPrefix *ngIf=\"options?.prefix || options?.fieldAddonLeft\"\n [innerHTML]=\"options?.prefix || options?.fieldAddonLeft\"></span>\n <input matInput *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [id]=\"'control' + layoutNode?._id\"\n [max]=\"options?.maximum\"\n [matDatepicker]=\"picker\"\n [min]=\"options?.minimum\"\n [name]=\"controlName\"\n [placeholder]=\"options?.title\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n (blur)=\"options.showErrors = true\">\n <input matInput *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n [max]=\"options?.maximum\"\n [matDatepicker]=\"picker\"\n [min]=\"options?.minimum\"\n [name]=\"controlName\"\n [placeholder]=\"options?.title\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [value]=\"dateValue\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue($event)\"\n (input)=\"updateValue($event)\">\n <span matSuffix *ngIf=\"options?.suffix || options?.fieldAddonRight\"\n [innerHTML]=\"options?.suffix || options?.fieldAddonRight\"></span>\n <mat-hint *ngIf=\"options?.description && (!options?.showErrors || !options?.errorMessage)\"\n align=\"end\" [innerHTML]=\"options?.description\"></mat-hint>\n <mat-datepicker-toggle matSuffix [for]=\"picker\"></mat-datepicker-toggle>\n </mat-form-field>\n <mat-datepicker #picker\n (selectedChanged)=\"updateValue($event)\"></mat-datepicker>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n mat-error { font-size: 75%; margin-top: -1rem; margin-bottom: 0.5rem; }\n ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-flex\n .mat-form-field-infix { width: initial; }\n "],
},] },
];
MaterialDatepickerComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialDatepickerComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialDatepickerComponent;
}());
var MaterialFileComponent = (function () {
function MaterialFileComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialFileComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
MaterialFileComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialFileComponent.decorators = [
{ type: Component, args: [{
selector: 'material-file-widget',
template: "",
},] },
];
MaterialFileComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialFileComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialFileComponent;
}());
var MaterialInputComponent = (function () {
function MaterialInputComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.autoCompleteList = [];
}
MaterialInputComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (!this.options.notitle && !this.options.description && this.options.placeholder) {
this.options.description = this.options.placeholder;
}
};
MaterialInputComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialInputComponent.decorators = [
{ type: Component, args: [{
selector: 'material-input-widget',
template: "\n <mat-form-field\n [class]=\"options?.htmlClass || ''\"\n [floatPlaceholder]=\"options?.floatPlaceholder || (options?.notitle ? 'never' : 'auto')\"\n [style.width]=\"'100%'\">\n <span matPrefix *ngIf=\"options?.prefix || options?.fieldAddonLeft\"\n [innerHTML]=\"options?.prefix || options?.fieldAddonLeft\"></span>\n <input matInput *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [type]=\"layoutNode?.type\"\n (blur)=\"options.showErrors = true\">\n <input matInput *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [type]=\"layoutNode?.type\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\"\n (blur)=\"options.showErrors = true\">\n <span matSuffix *ngIf=\"options?.suffix || options?.fieldAddonRight\"\n [innerHTML]=\"options?.suffix || options?.fieldAddonRight\"></span>\n <mat-hint *ngIf=\"options?.description && (!options?.showErrors || !options?.errorMessage)\"\n align=\"end\" [innerHTML]=\"options?.description\"></mat-hint>\n <mat-autocomplete *ngIf=\"options?.typeahead?.source\">\n <mat-option *ngFor=\"let word of options?.typeahead?.source\"\n [value]=\"word\">{{word}}</mat-option>\n </mat-autocomplete>\n </mat-form-field>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n mat-error { font-size: 75%; margin-top: -1rem; margin-bottom: 0.5rem; }\n ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-flex\n .mat-form-field-infix { width: initial; }\n "],
},] },
];
MaterialInputComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialInputComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialInputComponent;
}());
var MaterialNumberComponent = (function () {
function MaterialNumberComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.allowNegative = true;
this.allowDecimal = true;
this.allowExponents = false;
this.lastValidNumber = '';
}
MaterialNumberComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (this.layoutNode.dataType === 'integer') {
this.allowDecimal = false;
}
if (!this.options.notitle && !this.options.description && this.options.placeholder) {
this.options.description = this.options.placeholder;
}
};
MaterialNumberComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialNumberComponent.decorators = [
{ type: Component, args: [{
selector: 'material-number-widget',
template: "\n <mat-form-field\n [class]=\"options?.htmlClass || ''\"\n [floatPlaceholder]=\"options?.floatPlaceholder || (options?.notitle ? 'never' : 'auto')\"\n [style.width]=\"'100%'\">\n <span matPrefix *ngIf=\"options?.prefix || options?.fieldAddonLeft\"\n [innerHTML]=\"options?.prefix || options?.fieldAddonLeft\"></span>\n <input matInput *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.max]=\"options?.maximum\"\n [attr.min]=\"options?.minimum\"\n [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [type]=\"'number'\"\n (blur)=\"options.showErrors = true\">\n <input matInput *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.max]=\"options?.maximum\"\n [attr.min]=\"options?.minimum\"\n [attr.step]=\"options?.multipleOf || options?.step || 'any'\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [type]=\"'number'\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\"\n (blur)=\"options.showErrors = true\">\n <span matSuffix *ngIf=\"options?.suffix || options?.fieldAddonRight\"\n [innerHTML]=\"options?.suffix || options?.fieldAddonRight\"></span>\n <mat-hint *ngIf=\"layoutNode?.type === 'range'\" align=\"start\"\n [innerHTML]=\"controlValue\"></mat-hint>\n <mat-hint *ngIf=\"options?.description && (!options?.showErrors || !options?.errorMessage)\"\n align=\"end\" [innerHTML]=\"options?.description\"></mat-hint>\n </mat-form-field>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n mat-error { font-size: 75%; margin-top: -1rem; margin-bottom: 0.5rem; }\n ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-flex\n .mat-form-field-infix { width: initial; }\n "],
},] },
];
MaterialNumberComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialNumberComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialNumberComponent;
}());
var MaterialRadiosComponent = (function () {
function MaterialRadiosComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.flexDirection = 'column';
this.radiosList = [];
}
MaterialRadiosComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
if (this.layoutNode.type === 'radios-inline') {
this.flexDirection = 'row';
}
this.radiosList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, true);
this.jsf.initializeControl(this, !this.options.readonly);
};
MaterialRadiosComponent.prototype.updateValue = function (value) {
this.options.showErrors = true;
this.jsf.updateValue(this, value);
};
MaterialRadiosComponent.decorators = [
{ type: Component, args: [{
selector: 'material-radios-widget',
template: "\n <div>\n <div *ngIf=\"options?.title\">\n <label\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [style.display]=\"options?.notitle ? 'none' : ''\"\n [innerHTML]=\"options?.title\"></label>\n </div>\n <mat-radio-group *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [style.flex-direction]=\"flexDirection\"\n [name]=\"controlName\"\n (blur)=\"options.showErrors = true\">\n <mat-radio-button *ngFor=\"let radioItem of radiosList\"\n [id]=\"'control' + layoutNode?._id + '/' + radioItem?.name\"\n [value]=\"radioItem?.value\">\n <span [innerHTML]=\"radioItem?.name\"></span>\n </mat-radio-button>\n </mat-radio-group>\n <mat-radio-group *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.readonly]=\"options?.readonly ? 'readonly' : null\"\n [attr.required]=\"options?.required\"\n [style.flex-direction]=\"flexDirection\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [name]=\"controlName\"\n [value]=\"controlValue\">\n <mat-radio-button *ngFor=\"let radioItem of radiosList\"\n [id]=\"'control' + layoutNode?._id + '/' + radioItem?.name\"\n [value]=\"radioItem?.value\"\n (click)=\"updateValue(radioItem?.value)\">\n <span [innerHTML]=\"radioItem?.name\"></span>\n </mat-radio-button>\n </mat-radio-group>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>\n </div>",
styles: ["\n mat-radio-group { display: inline-flex; }\n mat-radio-button { margin: 2px; }\n mat-error { font-size: 75%; }\n "]
},] },
];
MaterialRadiosComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialRadiosComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialRadiosComponent;
}());
var MaterialSelectComponent = (function () {
function MaterialSelectComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.selectList = [];
this.isArray = isArray$2;
}
MaterialSelectComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.selectList = buildTitleMap(this.options.titleMap || this.options.enumNames, this.options.enum, !!this.options.required, !!this.options.flatList);
this.jsf.initializeControl(this, !this.options.readonly);
if (!this.options.notitle && !this.options.description && this.options.placeholder) {
this.options.description = this.options.placeholder;
}
};
MaterialSelectComponent.prototype.updateValue = function (event) {
this.options.showErrors = true;
this.jsf.updateValue(this, event.value);
};
MaterialSelectComponent.decorators = [
{ type: Component, args: [{
selector: 'material-select-widget',
template: "\n <mat-form-field\n [class]=\"options?.htmlClass || ''\"\n [floatPlaceholder]=\"options?.floatPlaceholder || (options?.notitle ? 'never' : 'auto')\"\n [style.width]=\"'100%'\">\n <span matPrefix *ngIf=\"options?.prefix || options?.fieldAddonLeft\"\n [innerHTML]=\"options?.prefix || options?.fieldAddonLeft\"></span>\n <mat-select *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.name]=\"controlName\"\n [id]=\"'control' + layoutNode?._id\"\n [multiple]=\"options?.multiple\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n (blur)=\"options.showErrors = true\">\n <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n <mat-option *ngIf=\"!isArray(selectItem?.items)\"\n [value]=\"selectItem?.value\">\n <span [innerHTML]=\"selectItem?.name\"></span>\n </mat-option>\n <mat-optgroup *ngIf=\"isArray(selectItem?.items)\"\n [label]=\"selectItem?.group\">\n <mat-option *ngFor=\"let subItem of selectItem.items\"\n [value]=\"subItem?.value\">\n <span [innerHTML]=\"subItem?.name\"></span>\n </mat-option>\n </mat-optgroup>\n </ng-template>\n </mat-select>\n <mat-select *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.name]=\"controlName\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n [multiple]=\"options?.multiple\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [required]=\"options?.required\"\n [style.width]=\"'100%'\"\n [value]=\"controlValue\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue($event)\">\n <ng-template ngFor let-selectItem [ngForOf]=\"selectList\">\n <mat-option *ngIf=\"!isArray(selectItem?.items)\"\n [attr.selected]=\"selectItem?.value === controlValue\"\n [value]=\"selectItem?.value\">\n <span [innerHTML]=\"selectItem?.name\"></span>\n </mat-option>\n <mat-optgroup *ngIf=\"isArray(selectItem?.items)\"\n [label]=\"selectItem?.group\">\n <mat-option *ngFor=\"let subItem of selectItem.items\"\n [attr.selected]=\"subItem?.value === controlValue\"\n [value]=\"subItem?.value\">\n <span [innerHTML]=\"subItem?.name\"></span>\n </mat-option>\n </mat-optgroup>\n </ng-template>\n </mat-select>\n <span matSuffix *ngIf=\"options?.suffix || options?.fieldAddonRight\"\n [innerHTML]=\"options?.suffix || options?.fieldAddonRight\"></span>\n <mat-hint *ngIf=\"options?.description && (!options?.showErrors || !options?.errorMessage)\"\n align=\"end\" [innerHTML]=\"options?.description\"></mat-hint>\n </mat-form-field>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n mat-error { font-size: 75%; margin-top: -1rem; margin-bottom: 0.5rem; }\n ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-flex\n .mat-form-field-infix { width: initial; }\n "],
},] },
];
MaterialSelectComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialSelectComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialSelectComponent;
}());
var MaterialSliderComponent = (function () {
function MaterialSliderComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
this.allowNegative = true;
this.allowDecimal = true;
this.allowExponents = false;
this.lastValidNumber = '';
}
MaterialSliderComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this, !this.options.readonly);
};
MaterialSliderComponent.prototype.updateValue = function (event) {
this.options.showErrors = true;
this.jsf.updateValue(this, event.value);
};
MaterialSliderComponent.decorators = [
{ type: Component, args: [{
selector: 'material-slider-widget',
template: "\n <mat-slider thumbLabel *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [id]=\"'control' + layoutNode?._id\"\n [max]=\"options?.maximum\"\n [min]=\"options?.minimum\"\n [step]=\"options?.multipleOf || options?.step || 'any'\"\n [style.width]=\"'100%'\"\n (blur)=\"options.showErrors = true\"></mat-slider>\n <mat-slider thumbLabel *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [disabled]=\"controlDisabled || options?.readonly\"\n [id]=\"'control' + layoutNode?._id\"\n [max]=\"options?.maximum\"\n [min]=\"options?.minimum\"\n [step]=\"options?.multipleOf || options?.step || 'any'\"\n [style.width]=\"'100%'\"\n [value]=\"controlValue\"\n (blur)=\"options.showErrors = true\"\n (change)=\"updateValue($event)\"></mat-slider>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: [" mat-error { font-size: 75%; } "],
},] },
];
MaterialSliderComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialSliderComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialSliderComponent;
}());
var MaterialStepperComponent = (function () {
function MaterialStepperComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialStepperComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
};
MaterialStepperComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialStepperComponent.decorators = [
{ type: Component, args: [{
selector: 'material-stepper-widget',
template: "",
},] },
];
MaterialStepperComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialStepperComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialStepperComponent;
}());
var MaterialTabsComponent = (function () {
function MaterialTabsComponent(jsf) {
this.jsf = jsf;
this.selectedItem = 0;
this.showAddTab = true;
}
MaterialTabsComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.itemCount = this.layoutNode.items.length - 1;
this.updateControl();
};
MaterialTabsComponent.prototype.select = function (index) {
if (this.layoutNode.items[index].type === '$ref') {
this.jsf.addItem({
layoutNode: this.layoutNode.items[index],
layoutIndex: this.layoutIndex.concat(index),
dataIndex: this.dataIndex.concat(index)
});
this.updateControl();
}
this.selectedItem = index;
};
MaterialTabsComponent.prototype.updateControl = function () {
this.itemCount = this.layoutNode.items.length - 1;
var lastItem = this.layoutNode.items[this.layoutNode.items.length - 1];
this.showAddTab = lastItem.type === '$ref' &&
this.itemCount < (lastItem.options.maxItems || 1000);
};
MaterialTabsComponent.prototype.setTabTitle = function (item, index) {
return this.jsf.setArrayItemTitle(this, item, index);
};
MaterialTabsComponent.decorators = [
{ type: Component, args: [{
selector: 'material-tabs-widget',
template: "\n <nav mat-tab-nav-bar\n [attr.aria-label]=\"options?.label || options?.title || ''\"\n [style.width]=\"'100%'\">\n <a mat-tab-link *ngFor=\"let item of layoutNode?.items; let i = index\"\n [active]=\"selectedItem === i\"\n (click)=\"select(i)\">\n <span *ngIf=\"showAddTab || item.type !== '$ref'\"\n [innerHTML]=\"setTabTitle(item, i)\"></span>\n </a>\n </nav>\n <div *ngFor=\"let layoutItem of layoutNode?.items; let i = index\"\n [class]=\"options?.htmlClass || ''\">\n <select-framework-widget *ngIf=\"selectedItem === i\"\n [class]=\"(options?.fieldHtmlClass || '') + ' ' + (options?.activeClass || '') + ' ' + (options?.style?.selected || '')\"\n [dataIndex]=\"layoutNode?.dataType === 'array' ? (dataIndex || []).concat(i) : dataIndex\"\n [layoutIndex]=\"(layoutIndex || []).concat(i)\"\n [layoutNode]=\"layoutItem\"></select-framework-widget>\n </div>",
styles: [" a { cursor: pointer; } "],
},] },
];
MaterialTabsComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialTabsComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialTabsComponent;
}());
var MaterialTextareaComponent = (function () {
function MaterialTextareaComponent(jsf) {
this.jsf = jsf;
this.controlDisabled = false;
this.boundControl = false;
}
MaterialTextareaComponent.prototype.ngOnInit = function () {
this.options = this.layoutNode.options || {};
this.jsf.initializeControl(this);
if (!this.options.notitle && !this.options.description && this.options.placeholder) {
this.options.description = this.options.placeholder;
}
};
MaterialTextareaComponent.prototype.updateValue = function (event) {
this.jsf.updateValue(this, event.target.value);
};
MaterialTextareaComponent.decorators = [
{ type: Component, args: [{
selector: 'material-textarea-widget',
template: "\n <mat-form-field\n [class]=\"options?.htmlClass || ''\"\n [floatPlaceholder]=\"options?.floatPlaceholder || (options?.notitle ? 'never' : 'auto')\"\n [style.width]=\"'100%'\">\n <span matPrefix *ngIf=\"options?.prefix || options?.fieldAddonLeft\"\n [innerHTML]=\"options?.prefix || options?.fieldAddonLeft\"></span>\n <textarea matInput *ngIf=\"boundControl\"\n [formControl]=\"formControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [required]=\"options?.required\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [style.width]=\"'100%'\"\n (blur)=\"options.showErrors = true\"></textarea>\n <textarea matInput *ngIf=\"!boundControl\"\n [attr.aria-describedby]=\"'control' + layoutNode?._id + 'Status'\"\n [attr.list]=\"'control' + layoutNode?._id + 'Autocomplete'\"\n [attr.maxlength]=\"options?.maxLength\"\n [attr.minlength]=\"options?.minLength\"\n [attr.pattern]=\"options?.pattern\"\n [required]=\"options?.required\"\n [disabled]=\"controlDisabled\"\n [id]=\"'control' + layoutNode?._id\"\n [name]=\"controlName\"\n [placeholder]=\"options?.notitle ? options?.placeholder : options?.title\"\n [readonly]=\"options?.readonly ? 'readonly' : null\"\n [style.width]=\"'100%'\"\n [value]=\"controlValue\"\n (input)=\"updateValue($event)\"\n (blur)=\"options.showErrors = true\"></textarea>\n <span matSuffix *ngIf=\"options?.suffix || options?.fieldAddonRight\"\n [innerHTML]=\"options?.suffix || options?.fieldAddonRight\"></span>\n <mat-hint *ngIf=\"options?.description && (!options?.showErrors || !options?.errorMessage)\"\n align=\"end\" [innerHTML]=\"options?.description\"></mat-hint>\n </mat-form-field>\n <mat-error *ngIf=\"options?.showErrors && options?.errorMessage\"\n [innerHTML]=\"options?.errorMessage\"></mat-error>",
styles: ["\n mat-error { font-size: 75%; margin-top: -1rem; margin-bottom: 0.5rem; }\n ::ng-deep mat-form-field .mat-form-field-wrapper .mat-form-field-flex\n .mat-form-field-infix { width: initial; }\n "],
},] },
];
MaterialTextareaComponent.ctorParameters = function () { return [
{ type: JsonSchemaFormService, },
]; };
MaterialTextareaComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialTextareaComponent;
}());
var __assign$7 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var MaterialDesignFrameworkComponent = (function () {
function MaterialDesignFrameworkComponent(changeDetector, jsf) {
this.changeDetector = changeDetector;
this.jsf = jsf;
this.frameworkInitialized = false;
this.formControl = null;
this.parentArray = null;
this.isOrderable = false;
this.dynamicTitle = null;
}
Object.defineProperty(MaterialDesignFrameworkComponent.prototype, "showRemoveButton", {
get: function () {
if (!this.layoutNode || !this.widgetOptions.removable ||
this.widgetOptions.readonly || this.layoutNode.type === '$ref') {
return false;
}
if (this.layoutNode.recursiveReference) {
return true;
}
if (!this.layoutNode.arrayItem || !this.parentArray) {
return false;
}
return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
this.layoutNode.arrayItemType === 'list' ? true :
this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
},
enumerable: true,
configurable: true
});
MaterialDesignFrameworkComponent.prototype.ngOnInit = function () {
this.initializeFramework();
};
MaterialDesignFrameworkComponent.prototype.ngOnChanges = function () {
if (!this.frameworkInitialized) {
this.initializeFramework();
}
if (this.dynamicTitle) {
this.updateTitle();
}
};
MaterialDesignFrameworkComponent.prototype.initializeFramework = function () {
if (this.layoutNode) {
this.options = cloneDeep(this.layoutNode.options || {});
this.widgetLayoutNode = __assign$7({}, this.layoutNode, { options: cloneDeep(this.layoutNode.options || {}) });
this.widgetOptions = this.widgetLayoutNode.options;
this.formControl = this.jsf.getFormControl(this);
if (isDefined(this.widgetOptions.minimum) &&
isDefined(this.widgetOptions.maximum) &&
this.widgetOptions.multipleOf >= 1) {
this.layoutNode.type = 'range';
}
if (!['$ref', 'advancedfieldset', 'authfieldset', 'button', 'card',
'checkbox', 'expansion-panel', 'help', 'message', 'msg', 'section',
'submit', 'tabarray', 'tabs'].includes(this.layoutNode.type) &&
/{{.+?}}/.test(this.widgetOptions.title || '')) {
this.dynamicTitle = this.widgetOptions.title;
this.updateTitle();
}
if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
this.parentArray = this.jsf.getParentNode(this);
if (this.parentArray) {
this.isOrderable =
this.parentArray.type.slice(0, 3) !== 'tab' &&
this.layoutNode.arrayItemType === 'list' &&
!this.widgetOptions.readonly &&
this.parentArray.options.orderable;
}
}
this.frameworkInitialized = true;
}
else {
this.options = {};
}
};
MaterialDesignFrameworkComponent.prototype.updateTitle = function () {
this.widgetLayoutNode.options.title = this.jsf.parseText(this.dynamicTitle, this.jsf.getFormControlValue(this), this.jsf.getFormControlGroup(this).value, this.dataIndex[this.dataIndex.length - 1]);
};
MaterialDesignFrameworkComponent.prototype.removeItem = function () {
this.jsf.removeItem(this);
};
MaterialDesignFrameworkComponent.decorators = [
{ type: Component, args: [{
selector: 'material-design-framework',
template: "\n <div\n [class.array-item]=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"\n [orderable]=\"isOrderable\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\">\n <svg *ngIf=\"showRemoveButton\"\n xmlns=\"http://www.w3.org/2000/svg\"\n height=\"18\" width=\"18\" viewBox=\"0 0 24 24\"\n class=\"close-button\"\n (click)=\"removeItem()\">\n <path d=\"M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41z\"/>\n </svg>\n <select-widget-widget\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"\n [layoutNode]=\"widgetLayoutNode\"></select-widget-widget>\n </div>\n <div class=\"spacer\" *ngIf=\"widgetLayoutNode?.arrayItem && widgetLayoutNode?.type !== '$ref'\"></div>",
styles: ["\n .array-item {\n border-radius: 2px;\n box-shadow: 0 3px 1px -2px rgba(0,0,0,.2),\n 0 2px 2px 0 rgba(0,0,0,.14),\n 0 1px 5px 0 rgba(0,0,0,.12);\n padding: 6px;\n position: relative;\n transition: all 280ms cubic-bezier(.4, 0, .2, 1);\n }\n .close-button {\n cursor: pointer;\n position: absolute;\n top: 6px;\n right: 6px;\n fill: rgba(0,0,0,.4);\n visibility: hidden;\n z-index: 500;\n }\n .close-button:hover { fill: rgba(0,0,0,.8); }\n .array-item:hover > .close-button { visibility: visible; }\n .spacer { margin: 6px 0; }\n [draggable=true]:hover {\n box-shadow: 0 5px 5px -3px rgba(0,0,0,.2),\n 0 8px 10px 1px rgba(0,0,0,.14),\n 0 3px 14px 2px rgba(0,0,0,.12);\n cursor: move;\n z-index: 10;\n }\n [draggable=true].drag-target-top {\n box-shadow: 0 -2px 0 #000;\n position: relative; z-index: 20;\n }\n [draggable=true].drag-target-bottom {\n box-shadow: 0 2px 0 #000;\n position: relative; z-index: 20;\n }\n "],
},] },
];
MaterialDesignFrameworkComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: JsonSchemaFormService, },
]; };
MaterialDesignFrameworkComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return MaterialDesignFrameworkComponent;
}());
var __extends$12 = (undefined && undefined.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var MaterialDesignFramework = (function (_super) {
__extends$12(MaterialDesignFramework, _super);
function MaterialDesignFramework() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'material-design';
_this.framework = MaterialDesignFrameworkComponent;
_this.stylesheets = [
'//fonts.googleapis.com/icon?family=Material+Icons',
'//fonts.googleapis.com/css?family=Roboto:300,400,500,700',
];
_this.widgets = {
'root': FlexLayoutRootComponent,
'section': FlexLayoutSectionComponent,
'$ref': MaterialAddReferenceComponent,
'button': MaterialButtonComponent,
'button-group': MaterialButtonGroupComponent,
'checkbox': MaterialCheckboxComponent,
'checkboxes': MaterialCheckboxesComponent,
'chip-list': MaterialChipListComponent,
'date': MaterialDatepickerComponent,
'file': MaterialFileComponent,
'number': MaterialNumberComponent,
'one-of': MaterialOneOfComponent,
'radios': MaterialRadiosComponent,
'select': MaterialSelectComponent,
'slider': MaterialSliderComponent,
'stepper': MaterialStepperComponent,
'tabs': MaterialTabsComponent,
'text': MaterialInputComponent,
'textarea': MaterialTextareaComponent,
'alt-date': 'date',
'any-of': 'one-of',
'card': 'section',
'color': 'text',
'expansion-panel': 'section',
'hidden': 'none',
'image': 'none',
'integer': 'number',
'radiobuttons': 'button-group',
'range': 'slider',
'submit': 'button',
'tagsinput': 'chip-list',
'wizard': 'stepper',
};
return _this;
}
MaterialDesignFramework.decorators = [
{ type: Injectable },
];
MaterialDesignFramework.ctorParameters = function () { return []; };
return MaterialDesignFramework;
}(Framework));
var MATERIAL_FRAMEWORK_COMPONENTS = [
FlexLayoutRootComponent, FlexLayoutSectionComponent,
MaterialAddReferenceComponent, MaterialOneOfComponent,
MaterialButtonComponent, MaterialButtonGroupComponent,
MaterialCheckboxComponent, MaterialCheckboxesComponent,
MaterialChipListComponent, MaterialDatepickerComponent,
MaterialFileComponent, MaterialInputComponent, MaterialNumberComponent,
MaterialRadiosComponent, MaterialSelectComponent, MaterialSliderComponent,
MaterialStepperComponent, MaterialTabsComponent, MaterialTextareaComponent,
MaterialDesignFrameworkComponent
];
var ANGULAR_MATERIAL_MODULES = [
MatAutocompleteModule, MatButtonModule, MatButtonToggleModule, MatCardModule,
MatCheckboxModule, MatChipsModule, MatDatepickerModule, MatExpansionModule,
MatFormFieldModule, MatIconModule, MatInputModule, MatNativeDateModule,
MatRadioModule, MatSelectModule, MatSliderModule, MatSlideToggleModule,
MatStepperModule, MatTabsModule, MatTooltipModule,
];
var MaterialDesignFrameworkModule = (function () {
function MaterialDesignFrameworkModule() {
}
MaterialDesignFrameworkModule.forRoot = function () {
return {
ngModule: MaterialDesignFrameworkModule,
providers: [
{ provide: Framework, useClass: MaterialDesignFramework, multi: true }
]
};
};
MaterialDesignFrameworkModule.decorators = [
{ type: NgModule, args: [{
imports: [
CommonModule, FormsModule, ReactiveFormsModule, FlexLayoutModule
].concat(ANGULAR_MATERIAL_MODULES, [
WidgetLibraryModule
]),
declarations: MATERIAL_FRAMEWORK_COMPONENTS.slice(),
exports: MATERIAL_FRAMEWORK_COMPONENTS.slice(),
entryComponents: MATERIAL_FRAMEWORK_COMPONENTS.slice()
},] },
];
MaterialDesignFrameworkModule.ctorParameters = function () { return []; };
return MaterialDesignFrameworkModule;
}());
var __assign$8 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var Bootstrap3FrameworkComponent = (function () {
function Bootstrap3FrameworkComponent(changeDetector, jsf) {
this.changeDetector = changeDetector;
this.jsf = jsf;
this.frameworkInitialized = false;
this.formControl = null;
this.debugOutput = '';
this.debug = '';
this.parentArray = null;
this.isOrderable = false;
}
Object.defineProperty(Bootstrap3FrameworkComponent.prototype, "showRemoveButton", {
get: function () {
if (!this.options.removable || this.options.readonly ||
this.layoutNode.type === '$ref') {
return false;
}
if (this.layoutNode.recursiveReference) {
return true;
}
if (!this.layoutNode.arrayItem || !this.parentArray) {
return false;
}
return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
this.layoutNode.arrayItemType === 'list' ? true :
this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
},
enumerable: true,
configurable: true
});
Bootstrap3FrameworkComponent.prototype.ngOnInit = function () {
this.initializeFramework();
if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
this.parentArray = this.jsf.getParentNode(this);
if (this.parentArray) {
this.isOrderable = this.layoutNode.arrayItemType === 'list' &&
!this.options.readonly && this.parentArray.options.orderable;
}
}
};
Bootstrap3FrameworkComponent.prototype.ngOnChanges = function () {
if (!this.frameworkInitialized) {
this.initializeFramework();
}
};
Bootstrap3FrameworkComponent.prototype.initializeFramework = function () {
var _this = this;
if (this.layoutNode) {
this.options = cloneDeep(this.layoutNode.options);
this.widgetLayoutNode = __assign$8({}, this.layoutNode, { options: cloneDeep(this.layoutNode.options) });
this.widgetOptions = this.widgetLayoutNode.options;
this.formControl = this.jsf.getFormControl(this);
this.options.isInputWidget = inArray(this.layoutNode.type, [
'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',
'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',
'image', 'integer', 'month', 'number', 'password', 'radio',
'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',
'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'
]);
this.options.title = this.setTitle();
this.options.htmlClass =
addClasses(this.options.htmlClass, 'schema-form-' + this.layoutNode.type);
if (this.layoutNode.type !== 'flex') {
this.options.htmlClass =
this.layoutNode.type === 'array' ?
addClasses(this.options.htmlClass, 'list-group') :
this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?
addClasses(this.options.htmlClass, 'list-group-item') :
addClasses(this.options.htmlClass, 'form-group');
}
this.widgetOptions.htmlClass = '';
this.options.labelHtmlClass =
addClasses(this.options.labelHtmlClass, 'control-label');
this.widgetOptions.activeClass =
addClasses(this.widgetOptions.activeClass, 'active');
this.options.fieldAddonLeft =
this.options.fieldAddonLeft || this.options.prepend;
this.options.fieldAddonRight =
this.options.fieldAddonRight || this.options.append;
if (this.options.title && this.layoutNode.type !== 'tab' &&
!this.options.notitle && this.options.required &&
!this.options.title.includes('*')) {
this.options.title += ' <strong class="text-danger">*</strong>';
}
switch (this.layoutNode.type) {
case 'checkbox':
case 'checkboxes':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'checkbox');
break;
case 'checkboxes-inline':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'checkbox');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'checkbox-inline');
break;
case 'radio':
case 'radios':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'radio');
break;
case 'radios-inline':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'radio');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'radio-inline');
break;
case 'checkboxbuttons':
case 'radiobuttons':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'btn-group');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'btn');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, this.options.style || 'btn-default');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'sr-only');
break;
case 'button':
case 'submit':
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'btn');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, this.options.style || 'btn-info');
break;
case 'array':
case 'fieldset':
case 'section':
case 'conditional':
case 'advancedfieldset':
case 'authfieldset':
case 'selectfieldset':
case 'optionfieldset':
this.options.messageLocation = 'top';
break;
case 'tabarray':
case 'tabs':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'tab-content');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'tab-pane');
this.widgetOptions.labelHtmlClass = addClasses(this.widgetOptions.labelHtmlClass, 'nav nav-tabs');
break;
case '$ref':
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'btn pull-right');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, this.options.style || 'btn-default');
this.options.icon = 'glyphicon glyphicon-plus';
break;
default:
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'form-control');
}
if (this.formControl) {
this.updateHelpBlock(this.formControl.status);
this.formControl.statusChanges.subscribe(function (status) { return _this.updateHelpBlock(status); });
if (this.options.debug) {
var vars = [];
this.debugOutput = map(vars, function (thisVar) { return JSON.stringify(thisVar, null, 2); }).join('\n');
}
}
this.frameworkInitialized = true;
}
};
Bootstrap3FrameworkComponent.prototype.updateHelpBlock = function (status) {
this.options.helpBlock = status === 'INVALID' &&
this.options.enableErrorState && this.formControl.errors &&
(this.formControl.dirty || this.options.feedbackOnRender) ?
this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :
this.options.description || this.options.help || null;
};
Bootstrap3FrameworkComponent.prototype.setTitle = function () {
switch (this.layoutNode.type) {
case 'button':
case 'checkbox':
case 'section':
case 'help':
case 'msg':
case 'submit':
case 'message':
case 'tabarray':
case 'tabs':
case '$ref':
return null;
case 'advancedfieldset':
this.widgetOptions.expandable = true;
this.widgetOptions.title = 'Advanced options';
return null;
case 'authfieldset':
this.widgetOptions.expandable = true;
this.widgetOptions.title = 'Authentication settings';
return null;
case 'fieldset':
this.widgetOptions.title = this.options.title;
return null;
default:
this.widgetOptions.title = null;
return this.jsf.setItemTitle(this);
}
};
Bootstrap3FrameworkComponent.prototype.removeItem = function () {
this.jsf.removeItem(this);
};
Bootstrap3FrameworkComponent.decorators = [
{ type: Component, args: [{
selector: 'bootstrap-3-framework',
template: "\n <div\n [class]=\"options?.htmlClass || ''\"\n [class.has-feedback]=\"options?.feedback && options?.isInputWidget &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.has-error]=\"options?.enableErrorState && formControl?.errors &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.has-success]=\"options?.enableSuccessState && !formControl?.errors &&\n (formControl?.dirty || options?.feedbackOnRender)\">\n\n <button *ngIf=\"showRemoveButton\"\n class=\"close pull-right\"\n type=\"button\"\n (click)=\"removeItem()\">\n <span aria-hidden=\"true\">×</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <div *ngIf=\"options?.messageLocation === 'top'\">\n <p *ngIf=\"options?.helpBlock\"\n class=\"help-block\"\n [innerHTML]=\"options?.helpBlock\"></p>\n </div>\n\n <label *ngIf=\"options?.title && layoutNode?.type !== 'tab'\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [class.sr-only]=\"options?.notitle\"\n [innerHTML]=\"options?.title\"></label>\n <p *ngIf=\"layoutNode?.type === 'submit' && jsf?.formOptions?.fieldsRequired\">\n <strong class=\"text-danger\">*</strong> = required fields\n </p>\n <div [class.input-group]=\"options?.fieldAddonLeft || options?.fieldAddonRight\">\n <span *ngIf=\"options?.fieldAddonLeft\"\n class=\"input-group-addon\"\n [innerHTML]=\"options?.fieldAddonLeft\"></span>\n\n <select-widget-widget\n [layoutNode]=\"widgetLayoutNode\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"></select-widget-widget>\n\n <span *ngIf=\"options?.fieldAddonRight\"\n class=\"input-group-addon\"\n [innerHTML]=\"options?.fieldAddonRight\"></span>\n </div>\n\n <span *ngIf=\"options?.feedback && options?.isInputWidget &&\n !options?.fieldAddonRight && !layoutNode.arrayItem &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.glyphicon-ok]=\"options?.enableSuccessState && !formControl?.errors\"\n [class.glyphicon-remove]=\"options?.enableErrorState && formControl?.errors\"\n aria-hidden=\"true\"\n class=\"form-control-feedback glyphicon\"></span>\n <div *ngIf=\"options?.messageLocation !== 'top'\">\n <p *ngIf=\"options?.helpBlock\"\n class=\"help-block\"\n [innerHTML]=\"options?.helpBlock\"></p>\n </div>\n </div>\n\n <div *ngIf=\"debug && debugOutput\">debug: <pre>{{debugOutput}}</pre></div>\n ",
styles: ["\n :host /deep/ .list-group-item .form-control-feedback { top: 40; }\n :host /deep/ .checkbox,\n :host /deep/ .radio { margin-top: 0; margin-bottom: 0; }\n :host /deep/ .checkbox-inline,\n :host /deep/ .checkbox-inline + .checkbox-inline,\n :host /deep/ .checkbox-inline + .radio-inline,\n :host /deep/ .radio-inline,\n :host /deep/ .radio-inline + .radio-inline,\n :host /deep/ .radio-inline + .checkbox-inline { margin-left: 0; margin-right: 10px; }\n :host /deep/ .checkbox-inline:last-child,\n :host /deep/ .radio-inline:last-child { margin-right: 0; }\n :host /deep/ .ng-invalid.ng-touched { border: 1px solid #f44336; }\n "],
},] },
];
Bootstrap3FrameworkComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: JsonSchemaFormService, },
]; };
Bootstrap3FrameworkComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return Bootstrap3FrameworkComponent;
}());
var __extends$13 = (undefined && undefined.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var Bootstrap3Framework = (function (_super) {
__extends$13(Bootstrap3Framework, _super);
function Bootstrap3Framework() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'bootstrap-3';
_this.framework = Bootstrap3FrameworkComponent;
_this.stylesheets = [
'//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css',
'//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css',
];
_this.scripts = [
'//ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js',
'//ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js',
'//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js',
];
return _this;
}
Bootstrap3Framework.decorators = [
{ type: Injectable },
];
Bootstrap3Framework.ctorParameters = function () { return []; };
return Bootstrap3Framework;
}(Framework));
var Bootstrap3FrameworkModule = (function () {
function Bootstrap3FrameworkModule() {
}
Bootstrap3FrameworkModule.forRoot = function () {
return {
ngModule: Bootstrap3FrameworkModule,
providers: [
{ provide: Framework, useClass: Bootstrap3Framework, multi: true }
]
};
};
Bootstrap3FrameworkModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, WidgetLibraryModule],
declarations: [Bootstrap3FrameworkComponent],
exports: [Bootstrap3FrameworkComponent],
entryComponents: [Bootstrap3FrameworkComponent]
},] },
];
Bootstrap3FrameworkModule.ctorParameters = function () { return []; };
return Bootstrap3FrameworkModule;
}());
var __assign$9 = (undefined && undefined.__assign) || Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
var Bootstrap4FrameworkComponent = (function () {
function Bootstrap4FrameworkComponent(changeDetector, jsf) {
this.changeDetector = changeDetector;
this.jsf = jsf;
this.frameworkInitialized = false;
this.formControl = null;
this.debugOutput = '';
this.debug = '';
this.parentArray = null;
this.isOrderable = false;
}
Object.defineProperty(Bootstrap4FrameworkComponent.prototype, "showRemoveButton", {
get: function () {
if (!this.options.removable || this.options.readonly ||
this.layoutNode.type === '$ref') {
return false;
}
if (this.layoutNode.recursiveReference) {
return true;
}
if (!this.layoutNode.arrayItem || !this.parentArray) {
return false;
}
return this.parentArray.items.length - 1 <= this.parentArray.options.minItems ? false :
this.layoutNode.arrayItemType === 'list' ? true :
this.layoutIndex[this.layoutIndex.length - 1] === this.parentArray.items.length - 2;
},
enumerable: true,
configurable: true
});
Bootstrap4FrameworkComponent.prototype.ngOnInit = function () {
this.initializeFramework();
if (this.layoutNode.arrayItem && this.layoutNode.type !== '$ref') {
this.parentArray = this.jsf.getParentNode(this);
if (this.parentArray) {
this.isOrderable = this.layoutNode.arrayItemType === 'list' &&
!this.options.readonly && this.parentArray.options.orderable;
}
}
};
Bootstrap4FrameworkComponent.prototype.ngOnChanges = function () {
if (!this.frameworkInitialized) {
this.initializeFramework();
}
};
Bootstrap4FrameworkComponent.prototype.initializeFramework = function () {
var _this = this;
if (this.layoutNode) {
this.options = cloneDeep(this.layoutNode.options);
this.widgetLayoutNode = __assign$9({}, this.layoutNode, { options: cloneDeep(this.layoutNode.options) });
this.widgetOptions = this.widgetLayoutNode.options;
this.formControl = this.jsf.getFormControl(this);
this.options.isInputWidget = inArray(this.layoutNode.type, [
'button', 'checkbox', 'checkboxes-inline', 'checkboxes', 'color',
'date', 'datetime-local', 'datetime', 'email', 'file', 'hidden',
'image', 'integer', 'month', 'number', 'password', 'radio',
'radiobuttons', 'radios-inline', 'radios', 'range', 'reset', 'search',
'select', 'submit', 'tel', 'text', 'textarea', 'time', 'url', 'week'
]);
this.options.title = this.setTitle();
this.options.htmlClass =
addClasses(this.options.htmlClass, 'schema-form-' + this.layoutNode.type);
this.options.htmlClass =
this.layoutNode.type === 'array' ?
addClasses(this.options.htmlClass, 'list-group') :
this.layoutNode.arrayItem && this.layoutNode.type !== '$ref' ?
addClasses(this.options.htmlClass, 'list-group-item') :
addClasses(this.options.htmlClass, 'form-group');
this.widgetOptions.htmlClass = '';
this.options.labelHtmlClass =
addClasses(this.options.labelHtmlClass, 'control-label');
this.widgetOptions.activeClass =
addClasses(this.widgetOptions.activeClass, 'active');
this.options.fieldAddonLeft =
this.options.fieldAddonLeft || this.options.prepend;
this.options.fieldAddonRight =
this.options.fieldAddonRight || this.options.append;
if (this.options.title && this.layoutNode.type !== 'tab' &&
!this.options.notitle && this.options.required &&
!this.options.title.includes('*')) {
this.options.title += ' <strong class="text-danger">*</strong>';
}
switch (this.layoutNode.type) {
case 'checkbox':
case 'checkboxes':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'checkbox');
break;
case 'checkboxes-inline':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'checkbox');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'checkbox-inline');
break;
case 'radio':
case 'radios':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'radio');
break;
case 'radios-inline':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'radio');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'radio-inline');
break;
case 'checkboxbuttons':
case 'radiobuttons':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'btn-group');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, 'btn');
this.widgetOptions.itemLabelHtmlClass = addClasses(this.widgetOptions.itemLabelHtmlClass, this.options.style || 'btn-default');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'sr-only');
break;
case 'button':
case 'submit':
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'btn');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, this.options.style || 'btn-info');
break;
case 'array':
case 'fieldset':
case 'section':
case 'conditional':
case 'advancedfieldset':
case 'authfieldset':
case 'selectfieldset':
case 'optionfieldset':
this.options.messageLocation = 'top';
break;
case 'tabarray':
case 'tabs':
this.widgetOptions.htmlClass = addClasses(this.widgetOptions.htmlClass, 'tab-content');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'tab-pane');
this.widgetOptions.labelHtmlClass = addClasses(this.widgetOptions.labelHtmlClass, 'nav nav-tabs');
break;
case '$ref':
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'btn pull-right');
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, this.options.style || 'btn-default');
this.options.icon = 'glyphicon glyphicon-plus';
break;
default:
this.widgetOptions.fieldHtmlClass = addClasses(this.widgetOptions.fieldHtmlClass, 'form-control');
}
if (this.formControl) {
this.updateHelpBlock(this.formControl.status);
this.formControl.statusChanges.subscribe(function (status) { return _this.updateHelpBlock(status); });
if (this.options.debug) {
var vars = [];
this.debugOutput = map(vars, function (thisVar) { return JSON.stringify(thisVar, null, 2); }).join('\n');
}
}
this.frameworkInitialized = true;
}
};
Bootstrap4FrameworkComponent.prototype.updateHelpBlock = function (status) {
this.options.helpBlock = status === 'INVALID' &&
this.options.enableErrorState && this.formControl.errors &&
(this.formControl.dirty || this.options.feedbackOnRender) ?
this.jsf.formatErrors(this.formControl.errors, this.options.validationMessages) :
this.options.description || this.options.help || null;
};
Bootstrap4FrameworkComponent.prototype.setTitle = function () {
switch (this.layoutNode.type) {
case 'button':
case 'checkbox':
case 'section':
case 'help':
case 'msg':
case 'submit':
case 'message':
case 'tabarray':
case 'tabs':
case '$ref':
return null;
case 'advancedfieldset':
this.widgetOptions.expandable = true;
this.widgetOptions.title = 'Advanced options';
return null;
case 'authfieldset':
this.widgetOptions.expandable = true;
this.widgetOptions.title = 'Authentication settings';
return null;
case 'fieldset':
this.widgetOptions.title = this.options.title;
return null;
default:
this.widgetOptions.title = null;
return this.jsf.setItemTitle(this);
}
};
Bootstrap4FrameworkComponent.prototype.removeItem = function () {
this.jsf.removeItem(this);
};
Bootstrap4FrameworkComponent.decorators = [
{ type: Component, args: [{
selector: 'bootstrap-4-framework',
template: "\n <div\n [class]=\"options?.htmlClass || ''\"\n [class.has-feedback]=\"options?.feedback && options?.isInputWidget &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.has-error]=\"options?.enableErrorState && formControl?.errors &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.has-success]=\"options?.enableSuccessState && !formControl?.errors &&\n (formControl?.dirty || options?.feedbackOnRender)\">\n\n <button *ngIf=\"showRemoveButton\"\n class=\"close pull-right\"\n type=\"button\"\n (click)=\"removeItem()\">\n <span aria-hidden=\"true\">×</span>\n <span class=\"sr-only\">Close</span>\n </button>\n <div *ngIf=\"options?.messageLocation === 'top'\">\n <p *ngIf=\"options?.helpBlock\"\n class=\"help-block\"\n [innerHTML]=\"options?.helpBlock\"></p>\n </div>\n\n <label *ngIf=\"options?.title && layoutNode?.type !== 'tab'\"\n [attr.for]=\"'control' + layoutNode?._id\"\n [class]=\"options?.labelHtmlClass || ''\"\n [class.sr-only]=\"options?.notitle\"\n [innerHTML]=\"options?.title\"></label>\n <p *ngIf=\"layoutNode?.type === 'submit' && jsf?.formOptions?.fieldsRequired\">\n <strong class=\"text-danger\">*</strong> = required fields\n </p>\n <div [class.input-group]=\"options?.fieldAddonLeft || options?.fieldAddonRight\">\n <span *ngIf=\"options?.fieldAddonLeft\"\n class=\"input-group-addon\"\n [innerHTML]=\"options?.fieldAddonLeft\"></span>\n\n <select-widget-widget\n [layoutNode]=\"widgetLayoutNode\"\n [dataIndex]=\"dataIndex\"\n [layoutIndex]=\"layoutIndex\"></select-widget-widget>\n\n <span *ngIf=\"options?.fieldAddonRight\"\n class=\"input-group-addon\"\n [innerHTML]=\"options?.fieldAddonRight\"></span>\n </div>\n\n <span *ngIf=\"options?.feedback && options?.isInputWidget &&\n !options?.fieldAddonRight && !layoutNode.arrayItem &&\n (formControl?.dirty || options?.feedbackOnRender)\"\n [class.glyphicon-ok]=\"options?.enableSuccessState && !formControl?.errors\"\n [class.glyphicon-remove]=\"options?.enableErrorState && formControl?.errors\"\n aria-hidden=\"true\"\n class=\"form-control-feedback glyphicon\"></span>\n <div *ngIf=\"options?.messageLocation !== 'top'\">\n <p *ngIf=\"options?.helpBlock\"\n class=\"help-block\"\n [innerHTML]=\"options?.helpBlock\"></p>\n </div>\n </div>\n\n <div *ngIf=\"debug && debugOutput\">debug: <pre>{{debugOutput}}</pre></div>\n ",
styles: ["\n :host /deep/ .list-group-item .form-control-feedback { top: 40px; }\n :host /deep/ .checkbox,\n :host /deep/ .radio { margin-top: 0; margin-bottom: 0; }\n :host /deep/ .checkbox-inline,\n :host /deep/ .checkbox-inline + .checkbox-inline,\n :host /deep/ .checkbox-inline + .radio-inline,\n :host /deep/ .radio-inline,\n :host /deep/ .radio-inline + .radio-inline,\n :host /deep/ .radio-inline + .checkbox-inline { margin-left: 0; margin-right: 10px; }\n :host /deep/ .checkbox-inline:last-child,\n :host /deep/ .radio-inline:last-child { margin-right: 0; }\n :host /deep/ .ng-invalid.ng-touched { border: 1px solid #f44336; }\n "],
},] },
];
Bootstrap4FrameworkComponent.ctorParameters = function () { return [
{ type: ChangeDetectorRef, },
{ type: JsonSchemaFormService, },
]; };
Bootstrap4FrameworkComponent.propDecorators = {
"layoutNode": [{ type: Input },],
"layoutIndex": [{ type: Input },],
"dataIndex": [{ type: Input },],
};
return Bootstrap4FrameworkComponent;
}());
var __extends$14 = (undefined && undefined.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var Bootstrap4Framework = (function (_super) {
__extends$14(Bootstrap4Framework, _super);
function Bootstrap4Framework() {
var _this = _super !== null && _super.apply(this, arguments) || this;
_this.name = 'bootstrap-4';
_this.framework = Bootstrap4FrameworkComponent;
_this.stylesheets = [
'//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css'
];
_this.scripts = [
'//code.jquery.com/jquery-3.2.1.slim.min.js',
'//cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js',
'//maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js',
];
return _this;
}
Bootstrap4Framework.decorators = [
{ type: Injectable },
];
Bootstrap4Framework.ctorParameters = function () { return []; };
return Bootstrap4Framework;
}(Framework));
var Bootstrap4FrameworkModule = (function () {
function Bootstrap4FrameworkModule() {
}
Bootstrap4FrameworkModule.forRoot = function () {
return {
ngModule: Bootstrap4FrameworkModule,
providers: [
{ provide: Framework, useClass: Bootstrap4Framework, multi: true }
]
};
};
Bootstrap4FrameworkModule.decorators = [
{ type: NgModule, args: [{
imports: [CommonModule, WidgetLibraryModule],
declarations: [Bootstrap4FrameworkComponent],
exports: [Bootstrap4FrameworkComponent],
entryComponents: [Bootstrap4FrameworkComponent]
},] },
];
Bootstrap4FrameworkModule.ctorParameters = function () { return []; };
return Bootstrap4FrameworkModule;
}());
export { MATERIAL_FRAMEWORK_COMPONENTS as ɵd, ANGULAR_MATERIAL_MODULES as ɵb, JSON_SCHEMA_FORM_VALUE_ACCESSOR as ɵa, BASIC_WIDGETS as ɵc, _executeValidators, _executeAsyncValidators, _mergeObjects, _mergeErrors, isDefined, hasValue, isEmpty, isString, isNumber, isInteger, isBoolean, isFunction$1 as isFunction, isObject$1 as isObject, isArray$2 as isArray, isDate, isMap, isSet, isPromise, isObservable, getType, isType, isPrimitive, toJavaScriptType, toSchemaType, _toPromise, toObservable, inArray, xor, addClasses, copy, forEach, forEachCopy, hasOwn, mergeFilteredObject, uniqueItems, commonItems, fixTitle, toTitleCase, JsonPointer, JsonValidators, buildSchemaFromLayout, buildSchemaFromData, getFromSchema, removeRecursiveReferences, getInputType, checkInlineType, isInputRequired, updateInputOptions, getTitleMapFromOneOf, getControlValidators, resolveSchemaReferences, getSubSchema, combineAllOf, fixRequiredArrayProperties, convertSchemaToDraft6, mergeSchemas, buildFormGroupTemplate, buildFormGroup, formatFormData, getControl, setRequiredFields, buildLayout, buildLayoutFromSchema, mapLayout, getLayoutNode, buildTitleMap, dateToString, stringToDate, findDate, OrderableDirective, JsonSchemaFormComponent, JsonSchemaFormService, JsonSchemaFormModule, WidgetLibraryService, WidgetLibraryModule, AddReferenceComponent, OneOfComponent, ButtonComponent, CheckboxComponent, CheckboxesComponent, FileComponent, HiddenComponent, InputComponent, MessageComponent, NoneComponent, NumberComponent, RadiosComponent, RootComponent, SectionComponent, SelectComponent, SelectFrameworkComponent, SelectWidgetComponent, SubmitComponent, TabComponent, TabsComponent, TemplateComponent, TextareaComponent, FrameworkLibraryService, Framework, NoFramework, NoFrameworkComponent, NoFrameworkModule, MaterialDesignFramework, FlexLayoutRootComponent, FlexLayoutSectionComponent, MaterialAddReferenceComponent, MaterialOneOfComponent, MaterialButtonComponent, MaterialButtonGroupComponent, MaterialCheckboxComponent, MaterialCheckboxesComponent, MaterialChipListComponent, MaterialDatepickerComponent, MaterialFileComponent, MaterialInputComponent, MaterialNumberComponent, MaterialRadiosComponent, MaterialSelectComponent, MaterialSliderComponent, MaterialStepperComponent, MaterialTabsComponent, MaterialTextareaComponent, MaterialDesignFrameworkComponent, MaterialDesignFrameworkModule, Bootstrap3Framework, Bootstrap3FrameworkComponent, Bootstrap3FrameworkModule, Bootstrap4Framework, Bootstrap4FrameworkComponent, Bootstrap4FrameworkModule };