@pepperi/ngx-lib
Version:
Pepperi Angular Components and Services
624 lines • 119 kB
JavaScript
import { Injectable } from '@angular/core';
import { Validators } from '@angular/forms';
import { BehaviorSubject } from 'rxjs';
import { LAYOUT_TYPE, STYLE_TYPE } from './customization.model';
import * as i0 from "@angular/core";
import * as i1 from "../common/services/session.service";
import * as i2 from "@angular/forms";
export class CustomizationService {
constructor(sessionService, fb) {
this.sessionService = sessionService;
this.fb = fb;
this.hasCustomHomepage = null;
this.hasCustomHeader = null;
this.customHeaderHeight = CustomizationService.DEFAULT_HEADER_HEIGHT;
this.mainContHeight = 0;
this.footerHeight = new BehaviorSubject(0);
}
getValidatorsForField(required, readonly, disabled, maxFieldCharacters, type, isCheckbox = false, minValue = NaN, maxValue = NaN) {
const validators = [];
if (required && !readonly && !disabled) {
if (isCheckbox) {
validators.push(Validators.requiredTrue);
}
else {
validators.push(Validators.required);
}
}
else {
validators.push(Validators.nullValidator);
}
if (maxFieldCharacters > 0) {
validators.push(Validators.maxLength(maxFieldCharacters));
}
if (type === 'email') {
validators.push(Validators.pattern(/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/));
}
else if (type === 'phone') {
validators.push(Validators.pattern(/^[\d\.\-\+\(\)\*\#]+$/));
}
else if (type === 'int' || type === 'real') {
validators.push(Validators.pattern(/^[\.,\-\+\d]+$/));
if (!isNaN(minValue)) {
validators.push(Validators.min(minValue));
}
if (!isNaN(maxValue)) {
validators.push(Validators.max(maxValue));
}
}
return validators;
}
getDefaultFromGroup(key, value, required, readonly, disabled, maxFieldCharacters = 0, type = '', isCheckbox = false, withValidators = true, minValue = NaN, maxValue = NaN) {
const validators = withValidators ?
this.getValidatorsForField(required, readonly, disabled, maxFieldCharacters, type, isCheckbox, minValue, maxValue) : [];
const group = {};
group[key] = [{ value, disabled }, validators];
return this.fb.group(group);
}
getFormControl(form, fieldKey, parentFieldKey = null) {
let formControl = null;
if (form && form.controls) {
if (parentFieldKey === null) {
formControl = form.controls[fieldKey];
}
else {
formControl = form.controls[parentFieldKey].get(fieldKey);
}
}
return formControl;
}
updateFormFieldValue(form, fieldKey, value = '', parentFieldKey = null) {
const formControl = this.getFormControl(form, fieldKey, parentFieldKey);
if (formControl) {
formControl.setValue(value);
}
}
updateFormField(form, field, value = '', parentField = null) {
const formControl = this.getFormControl(form, field.key, parentField);
if (formControl) {
formControl.setValue(value);
// If disabled has changed.
if (formControl.disabled !== field.disabled) {
field.disabled ? formControl.disable() : formControl.enable();
const validators = this.getValidatorsForField(field.required, field.readonly, field.disabled, field.maxFieldCharacters, field.type, field.controlType === 'checkbox');
formControl.setValidators(validators);
}
}
}
calculateFormFieldHeight(withTitle = true, rowSpan = 1, standAlone = false) {
const themeVars = this.getThemeVariables();
const rowFieldHeight = this.getNumberThemeVariable(themeVars, CustomizationService.FORM_FIELD_HEIGHT_KEY);
const rowFieldTitleHeight = this.getNumberThemeVariable(themeVars, CustomizationService.FORM_FIELD_TITLE_HEIGHT_KEY);
const rowFieldSpacingBottom = this.getNumberThemeVariable(themeVars, CustomizationService.FORM_SPACEING_KEY);
let fieldHeight = 0;
if (rowSpan === 1) {
fieldHeight = (withTitle ? rowFieldTitleHeight : 0) + rowFieldHeight;
}
else {
const rowSpanCalc = withTitle ? rowSpan : rowSpan - 1;
fieldHeight =
rowSpan * rowFieldHeight +
rowSpanCalc * rowFieldTitleHeight +
(standAlone ? 0 : rowSpanCalc * rowFieldSpacingBottom);
}
return fieldHeight;
}
calculateCardRowsHeight(rowsCount = 1, withSpacing = true) {
const themeVars = this.getThemeVariables();
const cardFieldHeight = this.getNumberThemeVariable(themeVars, CustomizationService.CARD_FIELD_HEIGHT_KEY);
const cardFieldSpacing = this.getNumberThemeVariable(themeVars, CustomizationService.CARD_SPACEING_KEY);
const fieldHeight = rowsCount * cardFieldHeight + (rowsCount - 1) * (withSpacing ? cardFieldSpacing : 0);
return fieldHeight;
}
calculateTableRowsHeight(rowsCount = 1, withSpacing = true) {
const themeVars = this.getThemeVariables();
const tableFieldHeight = this.getNumberThemeVariable(themeVars, CustomizationService.TABLE_FIELD_HEIGHT_KEY);
const tableFieldSpacing = this.getNumberThemeVariable(themeVars, CustomizationService.TABLE_SPACEING_KEY);
const fieldHeight = rowsCount * (tableFieldHeight + (withSpacing ? tableFieldSpacing * 2 : 0));
return fieldHeight;
}
calculateFieldHeight(layoutType = LAYOUT_TYPE.PepperiForm, rowSpan, standAlone) {
let fieldHeight = 'inherit'; // Default for card (with no title)
if (layoutType === LAYOUT_TYPE.PepperiTable) {
fieldHeight = this.getThemeVariable(CustomizationService.TABLE_FIELD_HEIGHT_KEY);
}
else if (layoutType === LAYOUT_TYPE.PepperiCard) {
fieldHeight = this.calculateCardRowsHeight(rowSpan, !standAlone) + CustomizationService.REM_STRING;
}
else {
// PepperiForm
fieldHeight = this.calculateFormFieldHeight(false, rowSpan, standAlone) + CustomizationService.REM_STRING;
}
return fieldHeight;
}
getBrandingTheme() {
const themeObj = this.sessionService.getObject(CustomizationService.USER_THEME);
return (themeObj && themeObj.Theme) || 'default-theme'; // 'light-theme';
}
getDefaultThemeLayoutVariables(themeVars) {
// Declare default screen sizes.
themeVars['--pep-screen-max-size-2xs'] = '460' + CustomizationService.PX_STRING;
themeVars['--pep-screen-max-size-xs'] = '767' + CustomizationService.PX_STRING;
themeVars['--pep-screen-max-size-sm'] = '991' + CustomizationService.PX_STRING;
themeVars['--pep-screen-max-size-md'] = '1199' + CustomizationService.PX_STRING;
themeVars['--pep-screen-max-size-lg'] = '1366' + CustomizationService.PX_STRING;
themeVars['--pep-screen-max-size-xl'] = '1920' + CustomizationService.PX_STRING;
// Declare default top bar.
themeVars[CustomizationService.SIDE_BAR_WIDTH_KEY] = '16' + CustomizationService.REM_STRING;
// Declare default top bar.
themeVars[CustomizationService.TOP_BAR_SPACING_TOP_KEY] = '1.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.TOP_BAR_SPACING_BOTTOM_KEY] = '0.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.TOP_BAR_FIELD_HEIGHT_KEY] = '2.5' + CustomizationService.REM_STRING;
// Declare default footer.
themeVars[CustomizationService.FOOTER_BAR_SPACING_TOP_KEY] = '0.75' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FOOTER_BAR_SPACING_BOTTOM_KEY] = '1.25' + CustomizationService.REM_STRING;
}
getDefaultThemeBorderRadiusVariables(themeVars) {
themeVars[CustomizationService.BORDER_RADIUS_SM_KEY] = '0.125' + CustomizationService.REM_STRING;
themeVars[CustomizationService.BORDER_RADIUS_MD_KEY] = '0.25' + CustomizationService.REM_STRING;
themeVars[CustomizationService.BORDER_RADIUS_LG_KEY] = '0.5' + CustomizationService.REM_STRING;
}
getDefaultThemeSpacingVariables(themeVars) {
themeVars[CustomizationService.SPACING_SIZE_2XS_KEY] = '0.125' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_XS_KEY] = '0.25' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_SM_KEY] = '0.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_MD_KEY] = '0.75' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_LG_KEY] = '1' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_XL_KEY] = '1.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.SPACING_SIZE_2XL_KEY] = '2' + CustomizationService.REM_STRING;
}
getDefaultThemeFontsVariables(themeVars) {
// Title font family
themeVars[CustomizationService.FONT_FAMILY_TITLE_KEY] = 'Nexa';
// Body font family
themeVars[CustomizationService.FONT_FAMILY_BODY_KEY] = 'Inter';
// Font sizes
themeVars[CustomizationService.FONT_SIZE_2XS_KEY] = '0.625' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_XS_KEY] = '0.75' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_SM_KEY] = '0.875' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_MD_KEY] = '1' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_LG_KEY] = '1.125' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_XL_KEY] = '1.25' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FONT_SIZE_2XL_KEY] = '1.5' + CustomizationService.REM_STRING;
// Line height
themeVars[CustomizationService.LINE_HEIGHT_2XS_KEY] = '0.75' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_XS_KEY] = '1' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_SM_KEY] = '1.25' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_MD_KEY] = '1.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_LG_KEY] = '1.75' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_XL_KEY] = '2' + CustomizationService.REM_STRING;
themeVars[CustomizationService.LINE_HEIGHT_2XL_KEY] = '2.25' + CustomizationService.REM_STRING;
// Font weight
themeVars['--pep-font-weight-normal'] = 400;
themeVars['--pep-font-weight-bold'] = 600;
themeVars['--pep-font-weight-bolder'] = 800;
}
getDefaultThemeButtonsVariables(themeVars) {
themeVars['--pep-button-2xs-horizontal-spacing'] = '0.25' + CustomizationService.REM_STRING;
themeVars['--pep-button-2xs-min-width'] = '1' + CustomizationService.REM_STRING;
themeVars['--pep-button-2xs-height'] = '1' + CustomizationService.REM_STRING;
themeVars['--pep-button-2xs-font-size'] = 'var(' + CustomizationService.FONT_SIZE_2XS_KEY + ')';
// themeVars['--pep-button-2xs-icon-horizontal-spacing'] = '0.125' + CustomizationService.REM_STRING;
themeVars['--pep-button-xs-horizontal-spacing'] = '0.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-xs-min-width'] = '2' + CustomizationService.REM_STRING;
themeVars['--pep-button-xs-height'] = '1.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-xs-font-size'] = 'var(' + CustomizationService.FONT_SIZE_XS_KEY + ')';
// themeVars['--pep-button-xs-icon-horizontal-spacing'] = '0.25' + CustomizationService.REM_STRING;
themeVars['--pep-button-sm-horizontal-spacing'] = '0.75' + CustomizationService.REM_STRING;
themeVars['--pep-button-sm-min-width'] = '2' + CustomizationService.REM_STRING;
themeVars['--pep-button-sm-height'] = '2' + CustomizationService.REM_STRING;
themeVars['--pep-button-sm-font-size'] = 'var(' + CustomizationService.FONT_SIZE_SM_KEY + ')';
// themeVars['--pep-button-sm-icon-horizontal-spacing'] = '0.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-md-horizontal-spacing'] = '1' + CustomizationService.REM_STRING;
themeVars['--pep-button-md-min-width'] = '2.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-md-height'] = '2.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-md-font-size'] = 'var(' + CustomizationService.FONT_SIZE_MD_KEY + ')';
// themeVars['--pep-button-md-icon-horizontal-spacing'] = '0.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-lg-horizontal-spacing'] = '1' + CustomizationService.REM_STRING;
themeVars['--pep-button-lg-min-width'] = '3' + CustomizationService.REM_STRING;
themeVars['--pep-button-lg-height'] = '3' + CustomizationService.REM_STRING;
themeVars['--pep-button-lg-font-size'] = 'var(' + CustomizationService.FONT_SIZE_LG_KEY + ')';
// themeVars['--pep-button-lg-icon-horizontal-spacing'] = '0.75' + CustomizationService.REM_STRING;
themeVars['--pep-button-xl-horizontal-spacing'] = '1.5' + CustomizationService.REM_STRING;
themeVars['--pep-button-xl-min-width'] = '5' + CustomizationService.REM_STRING;
themeVars['--pep-button-xl-height'] = '4' + CustomizationService.REM_STRING;
themeVars['--pep-button-xl-font-size'] = 'var(' + CustomizationService.FONT_SIZE_XL_KEY + ')';
// themeVars['--pep-button-xl-icon-horizontal-spacing'] = '1' + CustomizationService.REM_STRING;
}
getSystemPrimaryInvertColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_INVERT_KEY + '-h'] = '255';
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_INVERT_KEY + '-s'] = '100%';
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_INVERT_KEY + '-l'] = '100%';
}
getSystemPrimaryColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-h'] = '0';
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-s'] = '0%';
themeVars[CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-l'] = '10%';
}
getSystemSuccessColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_SYSTEM_SUCCESS_KEY + '-h'] = '100';
themeVars[CustomizationService.COLOR_SYSTEM_SUCCESS_KEY + '-s'] = '100%';
themeVars[CustomizationService.COLOR_SYSTEM_SUCCESS_KEY + '-l'] = '25%';
}
getSystemCautionColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-h'] = '360';
themeVars[CustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-s'] = '100%';
themeVars[CustomizationService.COLOR_SYSTEM_CAUTION_KEY + '-l'] = '40%';
}
getUserPrimaryColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_USER_PRIMARY_KEY + '-h'] = '78';
themeVars[CustomizationService.COLOR_USER_PRIMARY_KEY + '-s'] = '87%';
themeVars[CustomizationService.COLOR_USER_PRIMARY_KEY + '-l'] = '27%';
}
getUserSecondaryColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_USER_SECONDARY_KEY + '-h'] = '77';
themeVars[CustomizationService.COLOR_USER_SECONDARY_KEY + '-s'] = '87%';
themeVars[CustomizationService.COLOR_USER_SECONDARY_KEY + '-l'] = '42%';
}
getWeakColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_WEAK_KEY + '-h'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-h)';
themeVars[CustomizationService.COLOR_WEAK_KEY + '-s'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-s)';
themeVars[CustomizationService.COLOR_WEAK_KEY + '-l'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-l)';
}
getRegularColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_REGULAR_KEY + '-h'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-h)';
themeVars[CustomizationService.COLOR_REGULAR_KEY + '-s'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-s)';
themeVars[CustomizationService.COLOR_REGULAR_KEY + '-l'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-l)';
}
getStrongColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_STRONG_KEY + '-h'] = 'var(' + CustomizationService.COLOR_USER_PRIMARY_KEY + '-h)';
themeVars[CustomizationService.COLOR_STRONG_KEY + '-s'] = 'var(' + CustomizationService.COLOR_USER_PRIMARY_KEY + '-s)';
themeVars[CustomizationService.COLOR_STRONG_KEY + '-l'] = 'var(' + CustomizationService.COLOR_USER_PRIMARY_KEY + '-l)';
}
getTextColorsVariables(themeVars) {
themeVars[CustomizationService.COLOR_TEXT_LINK_KEY + '-h'] = '207';
themeVars[CustomizationService.COLOR_TEXT_LINK_KEY + '-s'] = '76%';
themeVars[CustomizationService.COLOR_TEXT_LINK_KEY + '-l'] = '37%';
}
getDefaultThemeColorsVariables(themeVars) {
// System primary invert colors.
this.getSystemPrimaryInvertColorsVariables(themeVars);
// System primary colors.
this.getSystemPrimaryColorsVariables(themeVars);
// System success colors.
this.getSystemSuccessColorsVariables(themeVars);
// System caution colors.
this.getSystemCautionColorsVariables(themeVars);
// User primary colors.
this.getUserPrimaryColorsVariables(themeVars);
// User secondary colors.
this.getUserSecondaryColorsVariables(themeVars);
// Weak colors.
this.getWeakColorsVariables(themeVars);
// Regular colors.
this.getRegularColorsVariables(themeVars);
// Strong colors.
this.getStrongColorsVariables(themeVars);
// Text colors.
this.getTextColorsVariables(themeVars);
}
getDefaultThemeShadowsVariables(themeVars) {
const noneOffset = '0';
themeVars[CustomizationService.SHADOW_NONE_OFFSET_KEY] = noneOffset;
const xsOffset = '0 0.125rem 0.25rem 0';
themeVars[CustomizationService.SHADOW_XS_OFFSET_KEY] = xsOffset;
const smOffset = '0 0.25rem 0.5rem 0';
themeVars[CustomizationService.SHADOW_SM_OFFSET_KEY] = smOffset;
const mdOffset = '0 0.5rem 1rem 0';
themeVars[CustomizationService.SHADOW_MD_OFFSET_KEY] = mdOffset;
const lgOffset = '0 1rem 2rem 0';
themeVars[CustomizationService.SHADOW_LG_OFFSET_KEY] = lgOffset;
const xlOffset = '0 2rem 4rem 0';
themeVars[CustomizationService.SHADOW_XL_OFFSET_KEY] = xlOffset;
}
getDefaultThemeFormCustomizationVariables(themeVars) {
const formFieldSpacing = 1;
themeVars[CustomizationService.FORM_FIELD_HEIGHT_KEY] = '2.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FORM_FIELD_TITLE_HEIGHT_KEY] = '1.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.FORM_SPACEING_KEY] = formFieldSpacing + CustomizationService.REM_STRING;
themeVars[CustomizationService.FORM_FIELD_SPACEING_KEY] = formFieldSpacing + CustomizationService.REM_STRING;
}
getDefaultThemeCardCustomizationVariables(themeVars) {
themeVars[CustomizationService.CARD_FIELD_HEIGHT_KEY] = '1.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.CARD_SPACEING_KEY] = 'var(' + CustomizationService.SPACING_SIZE_XS_KEY + ')';
themeVars[CustomizationService.CARD_BORDER_RADIUS_KEY] = 'var(' + CustomizationService.BORDER_RADIUS_MD_KEY + ')';
themeVars[CustomizationService.CARD_SHADOW_OFFSET_KEY] = 'var(' + CustomizationService.SHADOW_MD_OFFSET_KEY + ')';
}
getDefaultThemeTableCustomizationVariables(themeVars) {
themeVars[CustomizationService.TABLE_FIELD_HEIGHT_KEY] = '2' + CustomizationService.REM_STRING;
themeVars[CustomizationService.TABLE_SPACEING_KEY] = '0.5' + CustomizationService.REM_STRING;
themeVars[CustomizationService.TABLE_BORDER_RADIUS_KEY] = 'var(' + CustomizationService.BORDER_RADIUS_MD_KEY + ')';
}
getDefaultThemeQSCustomizationVariables(themeVars) {
const qsState = STYLE_TYPE.Regular;
themeVars[CustomizationService.STYLE_QS_KEY] = qsState;
themeVars[CustomizationService.COLOR_QS_KEY + '-h'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-h)';
themeVars[CustomizationService.COLOR_QS_KEY + '-s'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-s)';
themeVars[CustomizationService.COLOR_QS_KEY + '-l'] = 'var(' + CustomizationService.COLOR_SYSTEM_PRIMARY_KEY + '-l)';
}
getDefaultThemeTopHeaderCustomizationVariables(themeVars) {
const topHeaderState = STYLE_TYPE.Strong;
themeVars[CustomizationService.STYLE_TOP_HEADER_KEY] = topHeaderState;
themeVars[CustomizationService.COLOR_TOP_HEADER_KEY + '-h'] = '';
themeVars[CustomizationService.COLOR_TOP_HEADER_KEY + '-s'] = '';
themeVars[CustomizationService.COLOR_TOP_HEADER_KEY + '-l'] = '';
}
getDefaultThemeVariables() {
const themeVars = {};
// Declare default layout.
this.getDefaultThemeLayoutVariables(themeVars);
// Declare default border radius.
this.getDefaultThemeBorderRadiusVariables(themeVars);
// Declare default spacing.
this.getDefaultThemeSpacingVariables(themeVars);
// Declare default fonts size & line height.
this.getDefaultThemeFontsVariables(themeVars);
// Declare default buttons.
this.getDefaultThemeButtonsVariables(themeVars);
// Declare default colors.
this.getDefaultThemeColorsVariables(themeVars);
// Declare default shadows.
this.getDefaultThemeShadowsVariables(themeVars);
// Declare default form customization.
this.getDefaultThemeFormCustomizationVariables(themeVars);
// Declare default card customization.
this.getDefaultThemeCardCustomizationVariables(themeVars);
// Declare default table customization.
this.getDefaultThemeTableCustomizationVariables(themeVars);
// Declare default qs customization.
this.getDefaultThemeQSCustomizationVariables(themeVars);
// Declare default top header customization.
this.getDefaultThemeTopHeaderCustomizationVariables(themeVars);
return themeVars;
}
getThemeVariables() {
const ret = this.getDefaultThemeVariables();
const themeVars = this.sessionService.getObject(CustomizationService.USER_THEME_VARIABLES);
// Override defaults.
if (themeVars) {
// tslint:disable-next-line: forin
for (const key in themeVars) {
ret[key] = themeVars[key];
}
}
return ret;
}
setThemeVariables(themeVariablesToSet = null) {
const themeVariables = this.getThemeVariables();
// Override defaults.
if (themeVariablesToSet) {
// tslint:disable-next-line: forin
for (const key in themeVariablesToSet) {
themeVariables[key] = themeVariablesToSet[key];
}
}
this.sessionService.setObject(CustomizationService.USER_THEME_VARIABLES, JSON.stringify(themeVariables));
// tslint:disable-next-line: forin
for (const key in themeVariables) {
document.documentElement.style.setProperty(key, themeVariables[key]);
}
}
getThemeVariable(key) {
const themeVars = this.getThemeVariables();
if (themeVars.hasOwnProperty(key)) {
return themeVars[key];
}
else {
return '';
}
}
getNumberThemeVariable(themeVars, key) {
if (themeVars && themeVars.hasOwnProperty(key)) {
// If it's reference to another key.
if (themeVars[key].indexOf('var(') === 0) {
key = themeVars[key].substr(4).split(')')[0];
}
const tmp = Number(themeVars[key].replace(CustomizationService.REM_STRING, ''));
return tmp;
}
else {
return 0;
}
}
setFooterHeight(height) {
const self = this;
if (this.footerHeight.getValue() !== height) {
// it is publishing this value to all the subscribers that have already subscribed to this message
setTimeout(() => self.footerHeight.next(height), 0);
}
document.documentElement.style.setProperty(CustomizationService.FOOTER_HEIGHT_KEY, height + CustomizationService.REM_STRING);
}
setDefaultFooterHeight() {
const themeVars = this.getThemeVariables();
const res = this.getNumberThemeVariable(themeVars, CustomizationService.FOOTER_BAR_SPACING_TOP_KEY) +
this.getNumberThemeVariable(themeVars, CustomizationService.FOOTER_BAR_SPACING_BOTTOM_KEY) +
this.getNumberThemeVariable(themeVars, CustomizationService.TOP_BAR_FIELD_HEIGHT_KEY);
this.setFooterHeight(res);
}
getTopBarHeight() {
const themeVars = this.getThemeVariables();
const res = this.getNumberThemeVariable(themeVars, CustomizationService.TOP_BAR_SPACING_TOP_KEY) +
this.getNumberThemeVariable(themeVars, CustomizationService.TOP_BAR_SPACING_BOTTOM_KEY) +
this.getNumberThemeVariable(themeVars, CustomizationService.TOP_BAR_FIELD_HEIGHT_KEY);
return res;
}
setOldUserTheme(res) {
// Added user theme.
const themeObj = {
Theme: res.Theme || 'default-theme',
};
this.sessionService.setObject(CustomizationService.USER_THEME, JSON.stringify(themeObj));
let spinnerColor;
let brandingFontColor;
if (this.isLightColor(res.BrandingMainColor)) {
spinnerColor = CustomizationService.DEFAULT_SPINNER_COLOR;
brandingFontColor = '#222';
}
else {
spinnerColor = res.BrandingMainColor;
brandingFontColor = CustomizationService.DEFAULT_BRANDING_COLOR;
}
const color = {
BrandingSecondaryColor: res.BrandingSecondaryColor,
BrandingMainColor: res.BrandingMainColor,
BrandingFontColor: brandingFontColor,
SpinnerColor: spinnerColor,
};
this.sessionService.setObject(CustomizationService.USER_COLOR, JSON.stringify(color));
this.hasCustomHeader = res.TopHeaderFiles && res.TopHeaderFiles.length > 0 && res.TopHeaderFiles[0] !== '' ? true : false;
this.hasCustomHomepage =
res.UserRole === 'Buyer' && res.TopHeaderFiles &&
res.TopHeaderFiles.length > 1 && res.TopHeaderFiles[1] !== '';
}
isLegacyColor() {
const h = document.documentElement.style.getPropertyValue(CustomizationService.COLOR_TOP_HEADER_KEY + '-h');
const s = document.documentElement.style.getPropertyValue(CustomizationService.COLOR_TOP_HEADER_KEY + '-s');
const l = document.documentElement.style.getPropertyValue(CustomizationService.COLOR_TOP_HEADER_KEY + '-l');
return !(h && s && l);
}
getLoadingSpinnerColor() {
let spinnerColor = '';
if (this.isLegacyColor()) {
const color = this.sessionService.getObject(CustomizationService.USER_COLOR);
if (color && color.SpinnerColor) {
spinnerColor = color.SpinnerColor;
}
else {
spinnerColor = CustomizationService.DEFAULT_SPINNER_COLOR;
}
}
return spinnerColor;
}
getBrandingMainColor() {
let brandingMainColor = '';
if (this.isLegacyColor()) {
const color = this.sessionService.getObject(CustomizationService.USER_COLOR);
if (color && color.BrandingMainColor) {
brandingMainColor = color.BrandingMainColor;
}
else {
brandingMainColor = CustomizationService.DEFAULT_BRANDING_COLOR;
}
}
return brandingMainColor;
}
isLightColor(hexColor) {
if (!hexColor) {
return;
}
let isBright = false;
let sum = 0;
const c = hexColor.replace(/^#/, '');
sum = parseInt(c[0] + c[1], 16);
sum += parseInt(c[2] + c[3], 16);
sum += parseInt(c[4] + c[5], 16);
if (sum > 382.6) {
// it's bright color
isBright = true;
}
return isBright;
}
}
CustomizationService.STAND_ALONE_FIELD_CLASS_NAME = 'pepperi-field';
CustomizationService.REM_STRING = 'rem';
CustomizationService.PX_STRING = 'px';
CustomizationService.USER_THEME = 'user_theme';
CustomizationService.USER_COLOR = 'user_color';
CustomizationService.USER_THEME_VARIABLES = 'user_theme_variables';
// Header height
CustomizationService.HEADER_HEIGHT_KEY = '--pep-header-height';
// Footer height
CustomizationService.FOOTER_HEIGHT_KEY = '--pep-footer-bar-height';
// Main container height
CustomizationService.MAIN_HEIGHT_KEY = '--pep-main-height';
// Colors variables keys
CustomizationService.COLOR_USER_PRIMARY_KEY = '--pep-color-user-primary';
CustomizationService.COLOR_USER_SECONDARY_KEY = '--pep-color-user-secondary';
CustomizationService.COLOR_SYSTEM_PRIMARY_INVERT_KEY = '--pep-color-system-primary-invert';
CustomizationService.COLOR_SYSTEM_PRIMARY_KEY = '--pep-color-system-primary';
CustomizationService.COLOR_TEXT_LINK_KEY = '--pep-color-text-link';
CustomizationService.COLOR_SYSTEM_CAUTION_KEY = '--pep-color-system-caution';
CustomizationService.COLOR_SYSTEM_SUCCESS_KEY = '--pep-color-system-success';
CustomizationService.COLOR_STRONG_KEY = '--pep-color-strong';
CustomizationService.COLOR_REGULAR_KEY = '--pep-color-regular';
CustomizationService.COLOR_WEAK_KEY = '--pep-color-weak';
// Top header variables keys
CustomizationService.COLOR_TOP_HEADER_KEY = '--pep-color-top-header';
CustomizationService.STYLE_TOP_HEADER_KEY = '--pep-style-top-header';
// QS variables keys
CustomizationService.COLOR_QS_KEY = '--pep-color-qs';
CustomizationService.STYLE_QS_KEY = '--pep-style-qs';
// Fonts variables keys
CustomizationService.FONT_FAMILY_TITLE_KEY = '--pep-font-family-title';
CustomizationService.FONT_FAMILY_BODY_KEY = '--pep-font-family-body';
// Border radius variables keys
CustomizationService.BORDER_RADIUS_KEY = '--pep-border-radius';
CustomizationService.BORDER_RADIUS_SM_KEY = CustomizationService.BORDER_RADIUS_KEY + '-sm';
CustomizationService.BORDER_RADIUS_MD_KEY = CustomizationService.BORDER_RADIUS_KEY + '-md';
CustomizationService.BORDER_RADIUS_LG_KEY = CustomizationService.BORDER_RADIUS_KEY + '-lg';
// Fonts variables keys
CustomizationService.FONT_SIZE_2XS_KEY = '--pep-font-size-2xs';
CustomizationService.FONT_SIZE_XS_KEY = '--pep-font-size-xs';
CustomizationService.FONT_SIZE_SM_KEY = '--pep-font-size-sm';
CustomizationService.FONT_SIZE_MD_KEY = '--pep-font-size-md';
CustomizationService.FONT_SIZE_LG_KEY = '--pep-font-size-lg';
CustomizationService.FONT_SIZE_XL_KEY = '--pep-font-size-xl';
CustomizationService.FONT_SIZE_2XL_KEY = '--pep-font-size-2xl';
// Line height variables keys
CustomizationService.LINE_HEIGHT_2XS_KEY = '--pep-line-height-2xs';
CustomizationService.LINE_HEIGHT_XS_KEY = '--pep-line-height-xs';
CustomizationService.LINE_HEIGHT_SM_KEY = '--pep-line-height-sm';
CustomizationService.LINE_HEIGHT_MD_KEY = '--pep-line-height-md';
CustomizationService.LINE_HEIGHT_LG_KEY = '--pep-line-height-lg';
CustomizationService.LINE_HEIGHT_XL_KEY = '--pep-line-height-xl';
CustomizationService.LINE_HEIGHT_2XL_KEY = '--pep-line-height-2xl';
// Shadows offset variables keys
CustomizationService.SHADOW_NONE_OFFSET_KEY = '--pep-shadow-none-offset';
CustomizationService.SHADOW_XS_OFFSET_KEY = '--pep-shadow-xs-offset';
CustomizationService.SHADOW_SM_OFFSET_KEY = '--pep-shadow-sm-offset';
CustomizationService.SHADOW_MD_OFFSET_KEY = '--pep-shadow-md-offset';
CustomizationService.SHADOW_LG_OFFSET_KEY = '--pep-shadow-lg-offset';
CustomizationService.SHADOW_XL_OFFSET_KEY = '--pep-shadow-xl-offset';
// Spacing variables keys
CustomizationService.SPACING_SIZE_2XS_KEY = '--pep-spacing-2xs';
CustomizationService.SPACING_SIZE_XS_KEY = '--pep-spacing-xs';
CustomizationService.SPACING_SIZE_SM_KEY = '--pep-spacing-sm';
CustomizationService.SPACING_SIZE_MD_KEY = '--pep-spacing-md';
CustomizationService.SPACING_SIZE_LG_KEY = '--pep-spacing-lg';
CustomizationService.SPACING_SIZE_XL_KEY = '--pep-spacing-xl';
CustomizationService.SPACING_SIZE_2XL_KEY = '--pep-spacing-2xl';
// Side bar variables keys
CustomizationService.SIDE_BAR_WIDTH_KEY = '--pep-side-bar-width';
// Top bar variables keys
CustomizationService.TOP_BAR_SPACING_TOP_KEY = '--pep-top-bar-spacing-top';
CustomizationService.TOP_BAR_SPACING_BOTTOM_KEY = '--pep-top-bar-spacing-bottom';
CustomizationService.TOP_BAR_FIELD_HEIGHT_KEY = '--pep-top-bar-field-height';
// Footer variables keys
CustomizationService.FOOTER_BAR_SPACING_TOP_KEY = '--pep-footer-bar-spacing-top';
CustomizationService.FOOTER_BAR_SPACING_BOTTOM_KEY = '--pep-footer-bar-spacing-bottom';
// Form variables keys
CustomizationService.FORM_FIELD_HEIGHT_KEY = '--pep-form-field-height';
CustomizationService.FORM_FIELD_TITLE_HEIGHT_KEY = '--pep-form-field-title-height';
CustomizationService.FORM_FIELD_SPACEING_KEY = '--pep-form-field-spacing';
CustomizationService.FORM_SPACEING_KEY = '--pep-form-spacing';
// Card variables keys
CustomizationService.CARD_FIELD_HEIGHT_KEY = '--pep-card-field-height';
CustomizationService.CARD_SPACEING_KEY = '--pep-card-spacing';
CustomizationService.CARD_SHADOW_OFFSET_KEY = '--pep-shadow-card-offset';
CustomizationService.CARD_BORDER_RADIUS_KEY = '--pep-card-border-radius';
// Table variables keys
CustomizationService.TABLE_FIELD_HEIGHT_KEY = '--pep-table-field-height';
CustomizationService.TABLE_SPACEING_KEY = '--pep-table-spacing';
CustomizationService.TABLE_BORDER_RADIUS_KEY = '--pep-table-border-radius';
CustomizationService.DEFAULT_HEADER_HEIGHT = 64; // Default
CustomizationService.DEFAULT_SPINNER_COLOR = '#78aa00';
CustomizationService.DEFAULT_BRANDING_COLOR = '#fff';
CustomizationService.ɵfac = function CustomizationService_Factory(t) { return new (t || CustomizationService)(i0.ɵɵinject(i1.SessionService), i0.ɵɵinject(i2.FormBuilder)); };
CustomizationService.ɵprov = i0.ɵɵdefineInjectable({ token: CustomizationService, factory: CustomizationService.ɵfac, providedIn: 'root' });
/*@__PURE__*/ (function () { i0.ɵsetClassMetadata(CustomizationService, [{
type: Injectable,
args: [{
providedIn: 'root',
}]
}], function () { return [{ type: i1.SessionService }, { type: i2.FormBuilder }]; }, null); })();
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWxpYi9zcmMvY29yZS9jdXN0b21pemF0aW9uL2N1c3RvbWl6YXRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBZSxVQUFVLEVBQTBCLE1BQU0sZ0JBQWdCLENBQUM7QUFDakYsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV2QyxPQUFPLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7O0FBS2hFLE1BQU0sT0FBTyxvQkFBb0I7SUEySDdCLFlBQ1ksY0FBOEIsRUFDL0IsRUFBZTtRQURkLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUMvQixPQUFFLEdBQUYsRUFBRSxDQUFhO1FBUm5CLHNCQUFpQixHQUFZLElBQUksQ0FBQztRQUNsQyxvQkFBZSxHQUFZLElBQUksQ0FBQztRQUNoQyx1QkFBa0IsR0FBRyxvQkFBb0IsQ0FBQyxxQkFBcUIsQ0FBQztRQUNoRSxtQkFBYyxHQUFHLENBQUMsQ0FBQztRQUNuQixpQkFBWSxHQUFHLElBQUksZUFBZSxDQUFTLENBQUMsQ0FBQyxDQUFDO0lBSXZCLENBQUM7SUFFL0IscUJBQXFCLENBQUMsUUFBaUIsRUFBRSxRQUFpQixFQUFFLFFBQWlCLEVBQ3ZELGtCQUEwQixFQUFFLElBQVksRUFBRSxVQUFVLEdBQUcsS0FBSyxFQUM1RCxRQUFRLEdBQUcsR0FBRyxFQUFFLFFBQVEsR0FBRyxHQUFHO1FBQ2hELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUV0QixJQUFJLFFBQVEsSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNwQyxJQUFJLFVBQVUsRUFBRTtnQkFDWixVQUFVLENBQUMsSUFB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