novo-elements 5.4.0 → 5.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/novo-elements.umd.js +12 -3
- package/bundles/novo-elements.umd.js.map +1 -1
- package/bundles/novo-elements.umd.min.js +1 -1
- package/bundles/novo-elements.umd.min.js.map +1 -1
- package/elements/form/FieldInteractionApi.d.ts +2 -1
- package/elements/form/Form.scss +5 -0
- package/elements/form/NovoFormControl.d.ts +1 -0
- package/elements/form/controls/BaseControl.d.ts +1 -0
- package/esm2015/elements/form/Control.js +2 -2
- package/esm2015/elements/form/ControlGroup.js +3 -3
- package/esm2015/elements/form/FieldInteractionApi.js +8 -1
- package/esm2015/elements/form/NovoFormControl.js +1 -1
- package/esm2015/elements/form/controls/BaseControl.js +3 -1
- package/fesm2015/novo-elements.js +12 -3
- package/fesm2015/novo-elements.js.map +1 -1
- package/novo-elements.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -30487,6 +30487,7 @@
|
|
|
30487
30487
|
function ControlConfig() {
|
|
30488
30488
|
this.isEmbedded = false;
|
|
30489
30489
|
this.isInlineEmbedded = false;
|
|
30490
|
+
this.highlighted = false;
|
|
30490
30491
|
}
|
|
30491
30492
|
return ControlConfig;
|
|
30492
30493
|
}());
|
|
@@ -30535,6 +30536,7 @@
|
|
|
30535
30536
|
_this.startDate = config.startDate;
|
|
30536
30537
|
_this.endDate = config.endDate;
|
|
30537
30538
|
_this.restrictFieldInteractions = !!config.restrictFieldInteractions;
|
|
30539
|
+
_this.highlighted = !!config.highlighted;
|
|
30538
30540
|
if (!Helpers.isEmpty(config.warning)) {
|
|
30539
30541
|
_this.warning = config.warning;
|
|
30540
30542
|
}
|
|
@@ -32697,6 +32699,13 @@
|
|
|
32697
32699
|
this.triggerEvent({ controlKey: key, prop: 'required', value: required }, otherForm);
|
|
32698
32700
|
}
|
|
32699
32701
|
};
|
|
32702
|
+
FieldInteractionApi.prototype.highlight = function (key, isHighlighted, otherForm) {
|
|
32703
|
+
var control = this.getControl(key, otherForm);
|
|
32704
|
+
if (control && !control.restrictFieldInteractions) {
|
|
32705
|
+
control.highlighted = isHighlighted;
|
|
32706
|
+
this.triggerEvent({ controlKey: key, prop: 'highlight', value: isHighlighted }, otherForm);
|
|
32707
|
+
}
|
|
32708
|
+
};
|
|
32700
32709
|
FieldInteractionApi.prototype.hide = function (key, clearValue, otherForm) {
|
|
32701
32710
|
if (clearValue === void 0) { clearValue = true; }
|
|
32702
32711
|
var control = this.getControl(key, otherForm);
|
|
@@ -33818,7 +33827,7 @@
|
|
|
33818
33827
|
NovoControlElement.decorators = [
|
|
33819
33828
|
{ type: core.Component, args: [{
|
|
33820
33829
|
selector: 'novo-control',
|
|
33821
|
-
template: "\n <div class=\"novo-control-container\" [hidden]=\"form.controls[control.key].hidden || form.controls[control.key].type === 'hidden' || form.controls[control.key].controlType === 'hidden'\">\n <!--Encrypted Field-->\n <span [tooltip]=\"labels.encryptedFieldTooltip\" [tooltipPosition]=\"'right'\"><i [hidden]=\"!form.controls[control.key].encrypted\"\n class=\"bhi-lock\"></i></span>\n <!--Label (for horizontal)-->\n <label [attr.for]=\"control.key\" *ngIf=\"form.layout !== 'vertical' && form.controls[control.key].label && !condensed\" [ngClass]=\"{'encrypted': form.controls[control.key].encrypted }\">\n {{ form.controls[control.key].label }}\n </label>\n <div class=\"novo-control-outer-container\">\n <!--Label (for vertical)-->\n <label\n *ngIf=\"form.layout === 'vertical' && form.controls[control.key].label && !condensed\"\n class=\"novo-control-label\"\n [attr.for]=\"control.key\"\n [class.novo-control-empty]=\"!hasValue\"\n [class.novo-control-focused]=\"focused\"\n [class.novo-control-filled]=\"hasValue\"\n [class.novo-control-always-active]=\"alwaysActive || form.controls[control.key].placeholder\"\n [class.novo-control-extra-spacing]=\"requiresExtraSpacing\">\n {{ form.controls[control.key].label }}\n </label>\n <div class=\"novo-control-inner-container\" [class.required]=\"form.controls[control.key].required && !form.controls[control.key].readOnly\">\n <div class=\"novo-control-inner-input-container\" [class.novo-control-filled]=\"hasValue\" [class.novo-control-empty]=\"!hasValue\">\n <!--Required Indicator-->\n <i [hidden]=\"!form.controls[control.key].required || form.controls[control.key].readOnly\"\n class=\"required-indicator {{ form.controls[control.key].controlType }}\"\n [ngClass]=\"{'bhi-circle': !isValid, 'bhi-check': isValid}\" *ngIf=\"!condensed || form.controls[control.key].required\">\n </i>\n <!--Form Controls-->\n <div class=\"novo-control-input {{ form.controls[control.key].controlType }}\" [attr.data-automation-id]=\"control.key\" [class.control-disabled]=\"form.controls[control.key].disabled\">\n <!--TODO prefix/suffix on the control-->\n <ng-container *ngIf=\"templates\">\n <ng-container *ngTemplateOutlet=\"templates[form.controls[control.key].controlType]; context: templateContext\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templates || loading\">\n <div class=\"novo-control-input-container novo-control-input-with-label\">\n <input type=\"text\"/>\n </div>\n </ng-container>\n </div>\n </div>\n <!--Error Message-->\n <div class=\"field-message {{ form.controls[control.key].controlType }}\" *ngIf=\"!condensed\" [class.has-tip]=\"form.controls[control.key].tipWell\" [ngClass]=\"showErrorState || showMaxLengthMetMessage ? 'error-shown' : 'error-hidden'\">\n <div class=\"messages\" [ngClass]=\"showMessages ? 'count-shown messages-shown' : 'count-hidden messages-hidden'\">\n <span class=\"error-text\" *ngIf=\"showFieldMessage\"></span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.required && form.controls[control.key].controlType !== 'address'\">{{ form.controls[control.key].label | uppercase }} {{ labels.isRequired }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.minlength\">{{ form.controls[control.key].label | uppercase }} {{ labels.minLength }} {{ form.controls[control.key].minlength }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && maxLengthMet && focused && !errors?.maxlength && form.controls[control.key].controlType !== 'picker'\">{{ labels.maxlengthMet(form.controls[control.key].maxlength) }}</span>\n <span class=\"error-text\" *ngIf=\"errors?.maxlength && focused && !errors?.maxlengthFields\">{{ labels.invalidMaxlength(form.controls[control.key].maxlength) }}</span>\n <span class=\"error-text\" *ngIf=\"maxLengthMet && form.controls[control.key].controlType === 'picker'\">{{ labels.maxRecordsReached }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.invalidEmail\">{{ form.controls[control.key].label | uppercase }} {{ labels.invalidEmail }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && (errors?.integerTooLarge || errors?.doubleTooLarge)\">{{ form.controls[control.key].label | uppercase }} {{ labels.isTooLarge }}</span>\n <span *ngIf=\"isDirty && errors?.minYear\">{{ form.controls[control.key].label | uppercase }} {{ labels.notValidYear }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && (errors?.custom)\">{{ errors.custom }}</span>\n <span class=\"error-text\" *ngIf=\"errors?.maxlength && errors?.maxlengthFields && maxlengthErrorField && focused\">\n {{ labels.invalidMaxlengthWithField(control.config[maxlengthErrorField]?.label, control.config[maxlengthErrorField]?.maxlength) }}\n </span>\n <span class=\"error-text\" *ngIf=\"isDirty && maxlengthMetField && focused && !errors?.maxlengthFields?.includes(maxlengthMetField)\">\n {{ labels.maxlengthMetWithField(control.config[maxlengthMetField]?.label, control.config[maxlengthMetField]?.maxlength) }}\n </span>\n <span *ngIf=\"isDirty && errors?.invalidAddress\">\n <span class=\"error-text\" *ngFor=\"let invalidAddressField of errors?.invalidAddressFields\">{{ invalidAddressField | uppercase }} {{ labels.isRequired }} </span>\n </span>\n <!--Field Hint-->\n <span class=\"description\" *ngIf=\"form.controls[control.key].description\">\n {{ form.controls[control.key].description }}\n </span>\n <span class=\"warning-text\" *ngIf=\"form.controls[control.key].warning\">{{ form.controls[control.key].warning }}</span>\n\n </div>\n <span class=\"character-count\" [class.error]=\"((errors?.maxlength && !errors?.maxlengthFields) || (errors?.maxlength && errors?.maxlengthFields && errors.maxlengthFields.includes(focusedField)))\" *ngIf=\"showCount && form.controls[control.key].controlType !== 'picker'\">{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span>\n <span class=\"record-count\" [class.zero-count]=\"itemCount === 0\" [class.row-picker]=\"form.controls[this.control.key].config.columns\" *ngIf=\"showCount && form.controls[control.key].controlType === 'picker'\">{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span>\n </div>\n <!--Tip Wel-->\n <novo-tip-well *ngIf=\"form.controls[control.key].tipWell\" [name]=\"control.key\" [tip]=\"form.controls[control.key]?.tipWell?.tip\" [icon]=\"form.controls[control.key]?.tipWell?.icon\" [button]=\"form.controls[control.key]?.tipWell?.button\" [sanitize]=\"form.controls[control.key]?.tipWell?.sanitize\"></novo-tip-well>\n </div>\n <i *ngIf=\"form.controls[control.key].fieldInteractionloading\" class=\"loading\">\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\"\n x=\"0px\" y=\"0px\" width=\"18.2px\" height=\"18.5px\" viewBox=\"0 0 18.2 18.5\" style=\"enable-background:new 0 0 18.2 18.5;\"\n xml:space=\"preserve\">\n <style type=\"text/css\">\n .spinner { fill:#FFFFFF; }\n </style>\n <path class=\"spinner\" d=\"M9.2,18.5C4.1,18.5,0,14.4,0,9.2S4.1,0,9.2,0c0.9,0,1.9,0.1,2.7,0.4c0.8,0.2,1.2,1.1,1,1.9\n c-0.2,0.8-1.1,1.2-1.9,1C10.5,3.1,9.9,3,9.2,3C5.8,3,3,5.8,3,9.2s2.8,6.2,6.2,6.2c2.8,0,5.3-1.9,6-4.7c0.2-0.8,1-1.3,1.8-1.1\n c0.8,0.2,1.3,1,1.1,1.8C17.1,15.7,13.4,18.5,9.2,18.5z\"/>\n </svg>\n </i>\n </div>\n </div>\n ",
|
|
33830
|
+
template: "\n <div class=\"novo-control-container\" [hidden]=\"form.controls[control.key].hidden || form.controls[control.key].type === 'hidden' || form.controls[control.key].controlType === 'hidden'\">\n <!--Encrypted Field-->\n <span [tooltip]=\"labels.encryptedFieldTooltip\" [tooltipPosition]=\"'right'\"><i [hidden]=\"!form.controls[control.key].encrypted\"\n class=\"bhi-lock\"></i></span>\n <!--Label (for horizontal)-->\n <label [attr.for]=\"control.key\" *ngIf=\"form.layout !== 'vertical' && form.controls[control.key].label && !condensed\" [ngClass]=\"{'encrypted': form.controls[control.key].encrypted }\">\n {{ form.controls[control.key].label }}\n </label>\n <div class=\"novo-control-outer-container\">\n <!--Label (for vertical)-->\n <label\n *ngIf=\"form.layout === 'vertical' && form.controls[control.key].label && !condensed\"\n class=\"novo-control-label\"\n [attr.for]=\"control.key\"\n [class.novo-control-empty]=\"!hasValue\"\n [class.novo-control-focused]=\"focused\"\n [class.novo-control-filled]=\"hasValue\"\n [class.novo-control-always-active]=\"alwaysActive || form.controls[control.key].placeholder\"\n [class.novo-control-extra-spacing]=\"requiresExtraSpacing\">\n {{ form.controls[control.key].label }}\n </label>\n <div class=\"novo-control-inner-container\" [class.required]=\"form.controls[control.key].required && !form.controls[control.key].readOnly\">\n <div class=\"novo-control-inner-input-container\" [class.novo-control-filled]=\"hasValue\" [class.novo-control-empty]=\"!hasValue\">\n <!--Required Indicator-->\n <i [hidden]=\"!form.controls[control.key].required || form.controls[control.key].readOnly\"\n class=\"required-indicator {{ form.controls[control.key].controlType }}\"\n [ngClass]=\"{'bhi-circle': !isValid, 'bhi-check': isValid}\" *ngIf=\"!condensed || form.controls[control.key].required\">\n </i>\n <!--Form Controls-->\n <div class=\"novo-control-input {{ form.controls[control.key].controlType }}\" [attr.data-automation-id]=\"control.key\" [class.control-disabled]=\"form.controls[control.key].disabled\" [class.highlighted]=\"form.controls[control.key].highlighted\">\n <!--TODO prefix/suffix on the control-->\n <ng-container *ngIf=\"templates\">\n <ng-container *ngTemplateOutlet=\"templates[form.controls[control.key].controlType]; context: templateContext\"></ng-container>\n </ng-container>\n <ng-container *ngIf=\"!templates || loading\">\n <div class=\"novo-control-input-container novo-control-input-with-label\">\n <input type=\"text\"/>\n </div>\n </ng-container>\n </div>\n </div>\n <!--Error Message-->\n <div class=\"field-message {{ form.controls[control.key].controlType }}\" *ngIf=\"!condensed\" [class.has-tip]=\"form.controls[control.key].tipWell\" [ngClass]=\"showErrorState || showMaxLengthMetMessage ? 'error-shown' : 'error-hidden'\">\n <div class=\"messages\" [ngClass]=\"showMessages ? 'count-shown messages-shown' : 'count-hidden messages-hidden'\">\n <span class=\"error-text\" *ngIf=\"showFieldMessage\"></span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.required && form.controls[control.key].controlType !== 'address'\">{{ form.controls[control.key].label | uppercase }} {{ labels.isRequired }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.minlength\">{{ form.controls[control.key].label | uppercase }} {{ labels.minLength }} {{ form.controls[control.key].minlength }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && maxLengthMet && focused && !errors?.maxlength && form.controls[control.key].controlType !== 'picker'\">{{ labels.maxlengthMet(form.controls[control.key].maxlength) }}</span>\n <span class=\"error-text\" *ngIf=\"errors?.maxlength && focused && !errors?.maxlengthFields\">{{ labels.invalidMaxlength(form.controls[control.key].maxlength) }}</span>\n <span class=\"error-text\" *ngIf=\"maxLengthMet && form.controls[control.key].controlType === 'picker'\">{{ labels.maxRecordsReached }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && errors?.invalidEmail\">{{ form.controls[control.key].label | uppercase }} {{ labels.invalidEmail }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && (errors?.integerTooLarge || errors?.doubleTooLarge)\">{{ form.controls[control.key].label | uppercase }} {{ labels.isTooLarge }}</span>\n <span *ngIf=\"isDirty && errors?.minYear\">{{ form.controls[control.key].label | uppercase }} {{ labels.notValidYear }}</span>\n <span class=\"error-text\" *ngIf=\"isDirty && (errors?.custom)\">{{ errors.custom }}</span>\n <span class=\"error-text\" *ngIf=\"errors?.maxlength && errors?.maxlengthFields && maxlengthErrorField && focused\">\n {{ labels.invalidMaxlengthWithField(control.config[maxlengthErrorField]?.label, control.config[maxlengthErrorField]?.maxlength) }}\n </span>\n <span class=\"error-text\" *ngIf=\"isDirty && maxlengthMetField && focused && !errors?.maxlengthFields?.includes(maxlengthMetField)\">\n {{ labels.maxlengthMetWithField(control.config[maxlengthMetField]?.label, control.config[maxlengthMetField]?.maxlength) }}\n </span>\n <span *ngIf=\"isDirty && errors?.invalidAddress\">\n <span class=\"error-text\" *ngFor=\"let invalidAddressField of errors?.invalidAddressFields\">{{ invalidAddressField | uppercase }} {{ labels.isRequired }} </span>\n </span>\n <!--Field Hint-->\n <span class=\"description\" *ngIf=\"form.controls[control.key].description\">\n {{ form.controls[control.key].description }}\n </span>\n <span class=\"warning-text\" *ngIf=\"form.controls[control.key].warning\">{{ form.controls[control.key].warning }}</span>\n\n </div>\n <span class=\"character-count\" [class.error]=\"((errors?.maxlength && !errors?.maxlengthFields) || (errors?.maxlength && errors?.maxlengthFields && errors.maxlengthFields.includes(focusedField)))\" *ngIf=\"showCount && form.controls[control.key].controlType !== 'picker'\">{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span>\n <span class=\"record-count\" [class.zero-count]=\"itemCount === 0\" [class.row-picker]=\"form.controls[this.control.key].config.columns\" *ngIf=\"showCount && form.controls[control.key].controlType === 'picker'\">{{ itemCount }}/{{ maxLength || form.controls[control.key].maxlength }}</span>\n </div>\n <!--Tip Wel-->\n <novo-tip-well *ngIf=\"form.controls[control.key].tipWell\" [name]=\"control.key\" [tip]=\"form.controls[control.key]?.tipWell?.tip\" [icon]=\"form.controls[control.key]?.tipWell?.icon\" [button]=\"form.controls[control.key]?.tipWell?.button\" [sanitize]=\"form.controls[control.key]?.tipWell?.sanitize\"></novo-tip-well>\n </div>\n <i *ngIf=\"form.controls[control.key].fieldInteractionloading\" class=\"loading\">\n <svg version=\"1.1\"\n xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" xmlns:a=\"http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/\"\n x=\"0px\" y=\"0px\" width=\"18.2px\" height=\"18.5px\" viewBox=\"0 0 18.2 18.5\" style=\"enable-background:new 0 0 18.2 18.5;\"\n xml:space=\"preserve\">\n <style type=\"text/css\">\n .spinner { fill:#FFFFFF; }\n </style>\n <path class=\"spinner\" d=\"M9.2,18.5C4.1,18.5,0,14.4,0,9.2S4.1,0,9.2,0c0.9,0,1.9,0.1,2.7,0.4c0.8,0.2,1.2,1.1,1,1.9\n c-0.2,0.8-1.1,1.2-1.9,1C10.5,3.1,9.9,3,9.2,3C5.8,3,3,5.8,3,9.2s2.8,6.2,6.2,6.2c2.8,0,5.3-1.9,6-4.7c0.2-0.8,1-1.3,1.8-1.1\n c0.8,0.2,1.3,1,1.1,1.8C17.1,15.7,13.4,18.5,9.2,18.5z\"/>\n </svg>\n </i>\n </div>\n </div>\n ",
|
|
33822
33831
|
host: {
|
|
33823
33832
|
'[class]': 'form.controls[control.key].controlType',
|
|
33824
33833
|
'[attr.data-control-type]': 'form.controls[control.key].controlType',
|
|
@@ -33985,8 +33994,6 @@
|
|
|
33985
33994
|
}
|
|
33986
33995
|
else {
|
|
33987
33996
|
this.form.addControl(this.key, this.fb.array([nestedFormGroup]));
|
|
33988
|
-
// Ensure that field interaction changes for nested forms originating from outside the form will be reflected in the nested elements
|
|
33989
|
-
nestedFormGroup.fieldInteractionEvents.subscribe(this.onFieldInteractionEvent.bind(this));
|
|
33990
33997
|
}
|
|
33991
33998
|
this.disabledArray.push({
|
|
33992
33999
|
edit: true,
|
|
@@ -33998,6 +34005,8 @@
|
|
|
33998
34005
|
}
|
|
33999
34006
|
this.currentIndex++;
|
|
34000
34007
|
this.assignIndexes();
|
|
34008
|
+
// Ensure that field interaction changes for nested forms originating from outside the form will be reflected in the nested elements
|
|
34009
|
+
nestedFormGroup.fieldInteractionEvents.subscribe(this.onFieldInteractionEvent.bind(this));
|
|
34001
34010
|
this.ref.markForCheck();
|
|
34002
34011
|
};
|
|
34003
34012
|
/**
|