UNPKG

@pepperi/lib

Version:

This library was generated with [Angular CLI](https://github.com/angular/angular-cli) version 10.0.1.

624 lines 119 kB
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9taXphdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcGVwcGVyaS1saWIvc3JjL2NvcmUvY3VzdG9taXphdGlvbi9jdXN0b21pemF0aW9uLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQWUsVUFBVSxFQUEwQixNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFdkMsT0FBTyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7OztBQUtoRSxNQUFNLE9BQU8sb0JBQW9CO0lBMkg3QixZQUNZLGNBQThCLEVBQy9CLEVBQWU7UUFEZCxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDL0IsT0FBRSxHQUFGLEVBQUUsQ0FBYTtRQVJuQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFDbEMsb0JBQWUsR0FBWSxJQUFJLENBQUM7UUFDaEMsdUJBQWtCLEdBQUcsb0JBQW9CLENBQUMscUJBQXFCLENBQUM7UUFDaEUsbUJBQWMsR0FBRyxDQUFDLENBQUM7UUFDbkIsaUJBQVksR0FBRyxJQUFJLGVBQWUsQ0FBUyxDQUFDLENBQUMsQ0FBQztJQUl2QixDQUFDO0lBRS9CLHFCQUFxQixDQUFDLFFBQWlCLEVBQUUsUUFBaUIsRUFBRSxRQUFpQixFQUN2RCxrQkFBMEIsRUFBRSxJQUFZLEVBQUUsVUFBVSxHQUFHLEtBQUssRUFDNUQsUUFBUSxHQUFHLEdBQUcsRUFBRSxRQUFRLEdBQUcsR0FBRztRQUNoRCxNQUFNLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFFdEIsSUFBSSxRQUFRLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDcEMsSUFBSSxVQUFVLEVBQUU7Z0JBQ1osVUFBVSxDQUFD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