{"version":3,"file":"4034.b5860fd44c8fa909b083.js","mappings":"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","sources":["webpack://shipley-du-lib/./common/js/du/appEnum/DeliverySchedule.ts","webpack://shipley-du-lib/./common/js/du/appEnum/PricePlanAttributeRegion.ts","webpack://shipley-du-lib/./common/js/du/appEnum/PropaneUsageCode.ts","webpack://shipley-du-lib/./common/js/du/appEnum/WorkflowInputValidation.ts","webpack://shipley-du-lib/./common/js/du/appEnum/WorkflowNodeType.ts","webpack://shipley-du-lib/./common/js/du/components/pricing/enums/WorryFreeRenewalOption.ts","webpack://shipley-du-lib/./common/js/du/components/utility/content/composables/executeContent.ts","webpack://shipley-du-lib/./common/js/du/components/utility/content/helper.ts","webpack://shipley-du-lib/./common/js/du/interfaces/attributes/MarketingAttribute.ts","webpack://shipley-du-lib/./common/js/du/interfaces/pricing/IPricingPlan.ts","webpack://shipley-du-lib/./common/js/du/interfaces/pricing/guidedPricing/pricing.ts","webpack://shipley-du-lib/./common/js/du/interfaces/pricing/service/ServiceContract.ts","webpack://shipley-du-lib/./common/js/du/interfaces/utility/Tooltip.ts","webpack://shipley-du-lib/./common/js/du/utility/analytics/GoogleAnalytics/interfaces/AnalyticsProduct.ts","webpack://shipley-du-lib/./common/js/du/utility/analytics/GoogleAnalytics/interfaces/Ga4AnalyticsProduct.ts","webpack://shipley-du-lib/./common/js/du/components/pricing/attributeListingBadge.vue?d3bb","webpack://shipley-du-lib/./common/js/du/components/pricing/attributeListingBadge.vue","webpack://shipley-du-lib/./common/js/du/components/pricing/attributeListingBadge.vue?d6b8","webpack://shipley-du-lib/./common/js/du/components/utility/content/embeddedContent.vue?660b","webpack://shipley-du-lib/./common/js/du/components/utility/content/embeddedContent.vue?b28e","webpack://shipley-du-lib/./common/js/du/components/utility/content/embeddedContent.vue","webpack://shipley-du-lib/./common/js/du/components/utility/skeletonBox.vue?6d48","webpack://shipley-du-lib/./common/js/du/components/utility/skeletonBox.vue","webpack://shipley-du-lib/./common/js/du/components/utility/skeletonBox.vue?456c","webpack://shipley-du-lib/./common/js/du/components/utility/tooltip.vue?bd64","webpack://shipley-du-lib/./common/js/du/components/utility/tooltip.vue","webpack://shipley-du-lib/./common/js/du/components/utility/tooltip.vue?8584"],"sourcesContent":["export enum DeliverySchedule {\r\n Automatic = \"A\",\r\n WillCall = \"W\",\r\n Scheduled = \"S\"\r\n}","export enum PricePlanAttributeRegion {\r\n\tUnknown = 0,\r\n\tFeature = 1,\r\n\tBenefit = 2\r\n}","export enum PropaneUsageCode {\r\n PrimaryHeating = \"MH\",\r\n HotWater = \"HW\",\r\n Cooking = \"CK\",\r\n ClothesDryer = \"CD\",\r\n SupplementalHeating = \"SH\",\r\n FireplaceGasLogs = \"GL\",\r\n PoolHeater = \"PH\",\r\n MobileHome = \"MHH\",\r\n Other = \"OTHER\"\r\n}","export enum WorkflowNodeInputValidation {\r\n ZipCode = 1,\r\n EmailAddress = 2,\r\n Gallons = 3,\r\n Decimal = 4,\r\n Integer = 5,\r\n ServiceContracts = 6,\r\n TankSize = 7,\r\n TankLocation = 8,\r\n PreBuyGallons = 9,\r\n TankOwnership = 10,\r\n DeliverySchedule = 11,\r\n WillCallGallons = 12,\r\n WorryFreeRenewal = 13,\r\n WillCallGallons_Pp = 14\r\n}\r\n","export enum WorkflowNodeType {\r\n Unknown,\r\n ActionInput = 1,\r\n BinaryChoiceButton = 2,\r\n MultiChoiceButton = 3,\r\n MultiChoiceDropdown = 4,\r\n Informational = 5,\r\n DynamicButtonAction = 6,\r\n Final = 7,\r\n FinalFallback = 8,\r\n ActionInputButton = 9,\r\n MultiSelectButton = 10,\r\n ExternalLink = 11,\r\n ErrorNode = 12,\r\n MaskNode = 13,\r\n}\r\n","export enum WorryFreeRenewalOption {\r\n Unknown = 0,\r\n RequireRenewal = 1,\r\n OptionalRenewal = 2,\r\n DisableRenewal = 3,\r\n}\r\n","import { hasScriptLoaded, hasLinkLoaded } from \"@utility/domUtils\";\r\n\r\nexport const useExecuteContent = () => {\r\n\r\n /**\r\n * execute script in sandbox iframe\r\n * @param scr\r\n * @param runAsync\r\n */\r\n const tryExecuteScript = (scr: string, runAsync: boolean): Promise<any> => {\r\n return new Promise<any>((resolve, reject) => {\r\n try {\r\n const dynamicFunc = new Function(scr);\r\n const result = dynamicFunc();\r\n resolve(result);\r\n } catch (ex) {\r\n reject(`Error executing script: ${ex}`);\r\n }\r\n });\r\n };\r\n\r\n /**\r\n * break apart script/multiple scripts into elements to extract the scripts and execute them\r\n * @param scr\r\n */\r\n const tryExecuteHtmlScript = (scr: string, documentTag: \"body\" | \"head\" = \"head\"): Promise<void> => {\r\n return new Promise((resolve, reject) => {\r\n const tempDiv = document.createElement(\"div\");\r\n tempDiv.innerHTML = scr;\r\n\r\n const scriptTags = tempDiv.querySelectorAll(\"script\");\r\n const linkTags = tempDiv.querySelectorAll(\"link\");\r\n const scriptPromises: Promise<void>[] = [];\r\n\r\n for (const scriptTag of scriptTags) {\r\n if (scriptTag.src) {\r\n if (hasScriptLoaded(scriptTag.src)) {\r\n console.log(`Script has already been loaded`);\r\n continue;\r\n }\r\n\r\n const scriptElement = document.createElement(\"script\");\r\n scriptElement.src = scriptTag.src;\r\n\r\n scriptPromises.push(\r\n new Promise<void>((resolve, reject) => {\r\n if (documentTag === \"body\") {\r\n document.body.appendChild(scriptElement);\r\n } else {\r\n document.head.appendChild(scriptElement);\r\n }\r\n })\r\n );\r\n } else {\r\n const scriptContent = scriptTag.textContent;\r\n if (scriptContent) {\r\n try {\r\n scriptPromises.push(tryExecuteScript(scriptContent, false));\r\n } catch (error) {\r\n console.error(\"Error executing script:\", error);\r\n reject(error);\r\n }\r\n }\r\n }\r\n }\r\n\r\n for (const linkTag of linkTags) {\r\n if (hasLinkLoaded(linkTag.href)) {\r\n console.log(`Link has already been loaded`);\r\n continue;\r\n }\r\n\r\n const linkElement = document.createElement(\"link\");\r\n\r\n // Preserve rel and href attributes\r\n linkElement.rel = linkTag.rel;\r\n linkElement.href = linkTag.href;\r\n\r\n document.head.appendChild(linkElement);\r\n scriptPromises.push(\r\n new Promise<void>((resolve, reject) => {\r\n linkElement.onload = () => resolve;\r\n linkElement.onerror = () => reject;\r\n })\r\n );\r\n }\r\n\r\n Promise.all(scriptPromises)\r\n .then(() => {\r\n tempDiv.remove();\r\n })\r\n .catch((error) => {\r\n tempDiv.remove();\r\n reject(error);\r\n }).finally(() => {\r\n resolve();\r\n });\r\n });\r\n };\r\n\r\n return {\r\n tryExecuteScript,\r\n tryExecuteHtmlScript\r\n };\r\n}","import { createNonRoutedApp } from '../../../AppStartup';\r\nimport { IEmbeddedContent } from '../../../interfaces/contentManager/IPageContentMapListingItem';\r\nimport { IContentWidget, IContentWidgetItem, IContentWidgetElement } from '../../../interfaces/contentManager/IContentWidget';\r\nimport SandboxContent from './embeddedContent.vue';\r\nimport HtmlContent from '../htmlContent.vue';\r\nimport { IHtmlContent } from '../../../interfaces/contentManager/IHtmlContent';\r\n\r\nexport const mountSandboxContent = (content: IContentWidgetItem, targetElement: Element) => {\r\n\r\n if (hasMountedDataAttribute(targetElement)) {\r\n //App has already been mounted, do not mount again\r\n return;\r\n }\r\n\r\n const app = createNonRoutedApp(SandboxContent, { embeddedContent: content.EmbeddedContent, htmlContent: content.HtmlContent?.HtmlContentHtml });\r\n app.mount(targetElement);\r\n setMountDataAttribute(targetElement);\r\n return;\r\n};\r\n\r\nexport const mountHtmlContent = (htmlContent: IHtmlContent, targetElement: Element) => {\r\n if (hasMountedDataAttribute(targetElement)) {\r\n //App has already been mounted, do not mount again\r\n return;\r\n }\r\n\r\n const app = createNonRoutedApp(HtmlContent, { htmlContent: htmlContent.HtmlContentHtml });\r\n app.mount(targetElement);\r\n setMountDataAttribute(targetElement);\r\n return;\r\n}\r\n\r\n\r\n/**\r\n * Mount a widget (HTML Contents and Embedded Contents)\r\n * **Use this if the embedded contents require the HTML content to be mounted first\r\n * @param widgets \r\n * @returns \r\n */\r\nexport const tryMountFullWidget = (widgets: IContentWidgetElement[]) => {\r\n\r\n //Invalid Widget - return\r\n if (widgets.length === 0) {\r\n return;\r\n }\r\n\r\n //Loop through our available Widgets, and mount the Html Content required before the Embedded Content\r\n for (const widget of widgets) {\r\n const elementWarnings: string[] = [];\r\n\r\n const $el: Element | undefined = document.querySelector(`#${widget.TargetElement}`) ?? document.querySelector(`.${widget.TargetElement}`) ?? undefined;\r\n if (!$el) {\r\n elementWarnings.push(`widget element warning(s): [${widget.TargetElement.id ?? widget.TargetElement.className ?? \"*unable to determine element*\"}]`);\r\n continue;\r\n }\r\n\r\n //Mount the HTML Content First\r\n if (widget.HtmlContent) {\r\n mountHtmlContent(widget.HtmlContent, widget.TargetElement);\r\n }\r\n\r\n //Loop through the Embedded Content and mount\r\n for (const embeddedContent of widget.EmbeddedContent) {\r\n const $el: Element | undefined = document.querySelector(`#${embeddedContent.HtmlEmbeddedContentTargetElement}`) ?? document.querySelector(`.${embeddedContent.HtmlEmbeddedContentTargetElement}`) ?? undefined;\r\n if (!$el) {\r\n elementWarnings.push(`embedded content element warning(s): [${widget.TargetElement.id ?? widget.TargetElement.className ?? \"*unable to determine element*\"}]`);\r\n continue;\r\n }\r\n mountSandboxContent({ EmbeddedContent: embeddedContent, HtmlContent: widget.HtmlContent }, $el);\r\n }\r\n\r\n if (elementWarnings.length > 0) {\r\n console.log(`🎯 :: loading content widget had warning(s) :: 🛠Could not find element(s) [${elementWarnings.join(', ')}] to mount embedded content. 🛠`);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Mount Embedded Content \r\n * *Use this if no HTML Content is required\r\n * @param embeddedContent \r\n */\r\nexport const tryMountSandboxContent = (embeddedContent: IEmbeddedContent[]) => {\r\n const elementWarnings: string[] = [];\r\n embeddedContent.forEach((x) => {\r\n if (!x.HtmlEmbeddedContentTargetElement) {\r\n return;\r\n }\r\n\r\n const $el: Element | undefined = document.querySelector(`#${x.HtmlEmbeddedContentTargetElement}`) ?? document.querySelector(`.${x.HtmlEmbeddedContentTargetElement}`) ?? undefined;\r\n if (!$el) {\r\n elementWarnings.push(x.HtmlEmbeddedContentTargetElement);\r\n return;\r\n }\r\n mountSandboxContent({ EmbeddedContent: x }, $el);\r\n });\r\n if (elementWarnings.length > 0) {\r\n console.log(`🎯 :: content loading warning(s) :: 🛠Could not find element(s) [${elementWarnings.join(', ')}] to mount embedded content. 🛠`);\r\n }\r\n};\r\n\r\n/**\r\n * Mount Widget Content - HTML Contents and Embedded Contents\r\n * **Use this if the embedded contents do not require the HTML content to be mounted first\r\n * @param widgets \r\n * @returns \r\n */\r\nexport const tryMountWidgetContent = (widgets: IContentWidget[]) => {\r\n if (widgets.length === 0) {\r\n return;\r\n }\r\n\r\n for (const widget of widgets) {\r\n const elementWarnings: string[] = [];\r\n for (const embeddedContent of widget.EmbeddedContent) {\r\n const $el: Element | undefined = document.querySelector(`#${embeddedContent.HtmlEmbeddedContentTargetElement}`) ?? document.querySelector(`.${embeddedContent.HtmlEmbeddedContentTargetElement}`) ?? undefined;\r\n if (!$el) {\r\n elementWarnings.push(embeddedContent.HtmlEmbeddedContentTargetElement);\r\n continue;\r\n }\r\n\r\n mountSandboxContent({ EmbeddedContent: embeddedContent, HtmlContent: widget.HtmlContent }, $el);\r\n }\r\n\r\n if (elementWarnings.length > 0) {\r\n console.log(`🎯 :: loading content widget had warning(s) :: 🛠Could not find element(s) [${elementWarnings.join(', ')}] to mount embedded content. 🛠`);\r\n }\r\n }\r\n};\r\n\r\nconst setMountDataAttribute = ($el: Element) => {\r\n if (!$el) {\r\n return;\r\n }\r\n\r\n $el.setAttribute(\"data-is-mounted\", \"true\");\r\n}\r\n\r\nconst hasMountedDataAttribute = ($el: Element) => $el && $el.getAttribute(\"data-is-mounted\") === \"true\";\r\n","import { PricePlanAttributeRegion } from \"../../appEnum/PricePlanAttributeRegion\";\r\nimport { IPricingPlan } from \"../../interfaces/pricing/IPricingPlan\";\r\nimport { IMarketingAttribute } from \"./IMarketingAttribute\";\r\nimport { IHtmlContent } from \"../../interfaces/contentManager/IHtmlContent\";\r\nimport { useContentStore } from \"@stores/contentStore\";\r\n\r\n/**\r\n * Use this function to check if an attribute should be shown (marketable)\r\n * @param marketingAttribute\r\n * @returns\r\n */\r\nexport function showAttribute(marketingAttribute: any, internalAttributeListing: boolean = false): boolean {\r\n //Either make sure attribute has available data and is available to market, or override to show internally only\r\n return (marketingAttribute.AvailableToMarket || internalAttributeListing) &&\r\n marketingAttribute.PricePlanAttributeMarketingDescription &&\r\n ((!marketingAttribute.AttributeEmptyValueDescription &&\r\n !marketingAttribute.AttributeHasValue &&\r\n !marketingAttribute.TemplateKeyValue) ||\r\n marketingAttribute.AttributeValueDisplay ||\r\n marketingAttribute.AttributeValue ||\r\n marketingAttribute.HtmlContentId ||\r\n marketingAttribute.ToolTipText)\r\n ? true\r\n : false;\r\n}\r\n\r\n/**\r\n * Main function to render Marketing Attribute description. Used in conjunction with price plan if there are any properties that need to be rendered\r\n * @param attribute\r\n * @param pricePlan\r\n * @returns\r\n */\r\nexport function RenderAttributeMarketingDescription(\r\n attribute: IMarketingAttribute,\r\n pricePlan: IPricingPlan\r\n): string | undefined {\r\n //set our template key for {{AttributeValue}} - if no value is present for AttributeValue, use AttributeCustom\r\n if (attribute.AttributeValueDisplay) {\r\n attribute.AttributeValue = attribute.AttributeValueDisplay;\r\n pricePlan.AttributeValue = attribute.AttributeValueDisplay;\r\n } else if (attribute.TemplateKeyValue) {\r\n //render the TemplateKeyValue from the price plan\r\n var keyValue = pricePlan[attribute.TemplateKeyValue];\r\n if (keyValue === 0 || !keyValue) {\r\n attribute.AttributeValue = null;\r\n } else {\r\n attribute.AttributeValue = _renderDescription(`{{${attribute.TemplateKeyValue}}}`, pricePlan);\r\n pricePlan.AttributeValue = attribute.AttributeValue;\r\n }\r\n } else {\r\n //reset\r\n pricePlan.AttributeValue = \"\";\r\n }\r\n\r\n //Render Template Key from Price Plan\r\n if (attribute.AttributeHasValue && attribute.TemplateKeyValue && !attribute.AttributeValue) {\r\n return _renderDescription(attribute.AttributeEmptyValueDescription, pricePlan);\r\n }\r\n\r\n //Render when no Value is present - Use Empty Value Description field, but Custom Value may be needed\r\n if (attribute.AttributeHasValue && !attribute.AttributeValue) {\r\n return _renderDescription(attribute.AttributeEmptyValueDescription, pricePlan);\r\n }\r\n\r\n //Render Custom value from attribute\r\n if (attribute.AttributeHasValue && attribute.AttributeValue) {\r\n return _renderDescription(attribute.PricePlanAttributeMarketingDescription, pricePlan);\r\n }\r\n\r\n //Just render Marketing Description when no custom value needed\r\n if (attribute.PricePlanAttributeMarketingDescription) {\r\n return _renderDescription(attribute.PricePlanAttributeMarketingDescription, pricePlan);\r\n }\r\n}\r\n\r\n/**\r\n * Renders Description\r\n * @param stringValue\r\n * @param obj\r\n * @returns\r\n */\r\nconst _renderDescription = (stringValue: string, obj: any): string | undefined => {\r\n const { renderHtmlTemplate } = useContentStore();\r\n return renderHtmlTemplate(stringValue, obj);\r\n};\r\n\r\n/**\r\n * Extract Region attributes from attribute list\r\n * @param marketingAttributes\r\n * @returns\r\n */\r\nexport function getContentAttributes(\r\n marketingAttributes: Array<IMarketingAttribute>,\r\n attributeRegion: PricePlanAttributeRegion\r\n): Array<IMarketingAttribute> {\r\n return SortAttributes(marketingAttributes as Array<IMarketingAttribute>, false).filter(\r\n (x) =>\r\n x.PricePlanAttributeRegion &&\r\n x.PricePlanAttributeRegion.PricePlanAttributeRegionEnum === attributeRegion\r\n );\r\n}\r\n\r\nexport function GetHtmlContents(\r\n marketingAttribute: Array<IMarketingAttribute>,\r\n htmlContents: Array<IHtmlContent>\r\n) {\r\n if (marketingAttribute && marketingAttribute.length > 0) {\r\n marketingAttribute.forEach((attribute) => {\r\n if (htmlContents) {\r\n attribute.htmlContent = htmlContents.find((h) => {\r\n return h.HtmlContentId === attribute.HtmlContentId;\r\n });\r\n }\r\n });\r\n }\r\n\r\n return marketingAttribute;\r\n}\r\n\r\nexport function RestrictAttributes(\r\n attributes: Array<IMarketingAttribute>,\r\n restrictions: Array<{ useRestriction: boolean; attribute: IMarketingAttribute }> | undefined\r\n) {\r\n //filter out attributes from restrictions\r\n if (restrictions && restrictions.length > 0) {\r\n for (const restrict of restrictions) {\r\n if (!restrict.useRestriction && restrict.attribute) {\r\n attributes = attributes.filter(\r\n (x) => x.PricePlanAttributeId !== restrict.attribute.PricePlanAttributeId\r\n );\r\n }\r\n }\r\n }\r\n\r\n return attributes;\r\n}\r\n\r\nexport function SortAttributes(\r\n attributes: Array<IMarketingAttribute>,\r\n desc: boolean = false\r\n): Array<IMarketingAttribute> {\r\n if (attributes && attributes.length > 0) {\r\n attributes = attributes.sort(function (a, b) {\r\n if (desc) {\r\n return b.SortOrder - a.SortOrder;\r\n }\r\n return a.SortOrder - b.SortOrder;\r\n });\r\n }\r\n return attributes;\r\n}\r\n\r\nexport function HasAttributeByName(attributes: Array<IMarketingAttribute>, attributeName: string): boolean {\r\n if (attributes && attributes.length > 0) {\r\n return attributes.some((x) => x.PricePlanAttributeName === attributeName);\r\n }\r\n return false;\r\n}\r\n","import { WorkflowNodeInputValidation as WorkflowNodeInputValidationEnum } from \"../../appEnum/WorkflowInputValidation\";\r\nimport { WorkflowNodeType as WorkflowNodeTypeEnum } from \"../../appEnum/WorkflowNodeType\";\r\nimport { DeliverySchedule } from \"../../appEnum/DeliverySchedule\";\r\nimport { TankOwnership } from \"../../appEnum/TankOwnership\";\r\nimport { TankSizeDefault } from \"../../interfaces/customer/TankSizeDefault\";\r\nimport { PropaneUsageCode } from \"../../appEnum/PropaneUsageCode\";\r\nimport { PricingTypeCode } from \"../../appEnum/PricingTypeCode\";\r\nimport { UnitOfMeasure } from \"../../appEnum/UnitOfMeasure\";\r\nimport { ProductCode } from \"../../appEnum/ProductCode\";\r\nimport { BrandType } from \"../../appEnum/BrandType\";\r\nimport { IServiceContract, ServiceContract } from \"./service/ServiceContract\";\r\nimport { IMarketingAttribute } from \"../attributes/IMarketingAttribute\";\r\nimport * as wf from \"../../components/workflow/interfaces/Workflow\";\r\nimport { IHtmlContent } from \"../contentManager/IHtmlContent\";\r\nimport { IPricePlan } from \"./IPricePlan\";\r\nimport IPriceTierAdjustments from \"./IPriceTierAdjustments\";\r\nimport { BaseProductTemplate } from \"./residentialPricing/IBaseProductTemplate\";\r\nimport { WorryFreeRenewalOption } from \"@components/pricing/enums/WorryFreeRenewalOption\";\r\nimport { NodeWorryFreeValidation } from \"@components/workflow/interfaces/WorkflowNodeInputValidation\";\r\n\r\nexport interface IPricingPlan extends IPricePlan {\r\n hasMarketingMaterial: boolean;\r\n IsOilPropane: boolean;\r\n MarketingHeading?: string;\r\n MarketingAttributes?: Array<IMarketingAttribute>;\r\n ChartHeader?: string;\r\n ChartFooter?: string;\r\n BaseProductTemplate?: BaseProductTemplate;\r\n EarlyTerminationFee?: number;\r\n PricePlanCode?: number;\r\n TermLengthMonths?: number;\r\n BrandType?: BrandType;\r\n UnitOfMeasure?: typeof UnitOfMeasure;\r\n UnitOfMeasureFormatted?: string;\r\n IsGreenPlan: boolean;\r\n IsGuaranteedSavingsPlan: boolean;\r\n IsEmployeePlan: boolean;\r\n ProductId: ProductCode;\r\n ProductCodeFormatted?: string;\r\n BrandTypeName?: string;\r\n PriceTypeFormatted?: string;\r\n PricingTypeCode?: PricingTypeCode;\r\n BudgetAvailable: boolean;\r\n InitialCharge?: number;\r\n MonthlyCharge?: number;\r\n UtilityCharge?: number;\r\n BestOffer: boolean;\r\n InviteOnly: boolean;\r\n PlanTypeName?: string;\r\n TosLink?: string;\r\n PriceToCompare?: number;\r\n PriceToCompareFormatted?: string;\r\n RegulatoryFee?: number;\r\n\r\n Price?: number;\r\n PriceDisplay?: string;\r\n PriceWithOffset?: number;\r\n PriceDisplayDollars?: string;\r\n PriceDisplayCents?: string;\r\n PromoPrice?: number;\r\n NumPriceDecimalPlacesDisplay?: number;\r\n\r\n HtmlContents?: string;\r\n FirstDeliveryPrice?: number;\r\n FirstFillText?: string;\r\n FirstDeliveryPriceWithOffset?: number;\r\n IsElectricNatGas: boolean;\r\n OilPriceText?: string;\r\n ZipCode?: string;\r\n AttributeValue?: any;\r\n\r\n PricePlanTieredPricing: IPriceTierAdjustments[];\r\n Active: boolean;\r\n StatusId: number;\r\n LifeTimeValue?: number;\r\n PrivateLinkOnly: boolean;\r\n FirstFillPriceAvailable: boolean;\r\n FirstFillPriceAddr: number;\r\n Sort: number;\r\n BonusRewardsPoints: number;\r\n WorryFreeRenewalOption?: WorryFreeRenewalOption;\r\n\r\n AvailableToSelfSignup: boolean;\r\n AvailableToNewAccount: boolean;\r\n AvailableToExistingAccount: boolean;\r\n AvailableToSOP: boolean;\r\n AvailableFixedRenewal: boolean;\r\n AvailableToRenewal: boolean;\r\n AvailableToGuidedExperience: boolean;\r\n}\r\n\r\nexport interface IProductPricePlans {\r\n ProductUtility?: Array<any>;\r\n ProductCode: ProductCode;\r\n BrandType: BrandType | undefined;\r\n PricePlans: any[] | undefined;\r\n SelectedPricePlan?: any | undefined;\r\n ContractTypes?: Array<ServiceContract> | void;\r\n SelectedContract?: ServiceContract;\r\n SelectedContractTypeIds?: Array<number>;\r\n BaseContractTypeIds?: Array<number>;\r\n ProductTankDefaults?: Array<TankSizeDefault>;\r\n PricingAvailableInZip: boolean;\r\n MaskedProductPricing: any;\r\n ReducePricePlan(\r\n node: wf.WorkflowNode,\r\n option: wf.WorkflowNodeChild,\r\n attributeId?: number,\r\n priceTypeCode?: PricingTypeCode,\r\n debug?: boolean\r\n ): void;\r\n UsePriceplan(\r\n node: wf.WorkflowNode,\r\n option: wf.WorkflowNodeChild,\r\n pricePlan: any,\r\n attributeId?: number,\r\n priceTypeCode?: PricingTypeCode\r\n ): boolean;\r\n PricePlanCanBeReduced(\r\n productPricePlan: ProductPricePlan,\r\n option: wf.WorkflowNodeChild,\r\n node: wf.WorkflowNode\r\n ): boolean;\r\n GetGallonAmountForPricePlan(nodeData?: wf.WorkflowData, useTankSize?: boolean): number;\r\n}\r\nexport class ProductPricePlan implements IProductPricePlans {\r\n constructor(obj: IProductPricePlans) {\r\n this.BaseContractTypeIds = [1, 3, 5];\r\n\r\n this.ProductUtility = obj.ProductUtility;\r\n this.ProductCode = obj.ProductCode;\r\n this.BrandType = obj.BrandType;\r\n this.PricePlans = obj.PricePlans;\r\n this.SelectedPricePlan = obj.SelectedPricePlan;\r\n this.SelectedContract = obj.SelectedContract;\r\n this.ContractTypes = obj.ContractTypes;\r\n this.SelectedContractTypeIds = obj.SelectedContractTypeIds;\r\n this.ProductTankDefaults = obj.ProductTankDefaults;\r\n this.PricingAvailableInZip = obj.PricingAvailableInZip;\r\n this.MaskedProductPricing = obj.MaskedProductPricing;\r\n }\r\n ProductUtility?: any[] | undefined;\r\n ProductCode!: any;\r\n BrandType!: BrandType | undefined;\r\n PricePlans!: any[] | undefined | never[];\r\n SelectedPricePlan?: any;\r\n SelectedContract?: ServiceContract;\r\n ContractTypes?: Array<ServiceContract> | void;\r\n BaseContractTypeIds?: Array<number>;\r\n SelectedContractTypeIds?: Array<number>;\r\n ProductTankDefaults?: Array<TankSizeDefault>;\r\n PricingAvailableInZip: boolean;\r\n MaskedProductPricing: any;\r\n\r\n public ReducePricePlan(\r\n node: wf.WorkflowNode,\r\n option: wf.WorkflowNodeChild,\r\n attributeId?: number,\r\n priceTypeCode?: PricingTypeCode,\r\n debug?: boolean\r\n ): void {\r\n if (\r\n this &&\r\n this.PricePlans &&\r\n this.PricePlans.length > 0 &&\r\n ((attributeId && attributeId > 0) || //Has Attribute Associated\r\n (priceTypeCode && priceTypeCode > 0) || //Has PriceType Associated\r\n node.SelectedOptionIsFinalNode(option))\r\n ) {\r\n const { PricePlans } = this;\r\n\r\n if (debug) {\r\n console.log(\r\n `Pre-filtered Price Plans - ${node.WorkflowNodeDescription} NodeId ${node.WorkflowNodeId} - PriceType ${priceTypeCode} - Attribute ${attributeId}`,\r\n PricePlans\r\n );\r\n }\r\n\r\n if (PricePlans.length > 1) {\r\n const pp = PricePlans.filter((p) => {\r\n if (this.UsePriceplan(node, option, p, attributeId, priceTypeCode)) {\r\n return p;\r\n }\r\n });\r\n\r\n if (pp && pp.length === 1) {\r\n const pricePlan = pp[0];\r\n\r\n switch (pricePlan.PricingTypeCode) {\r\n case PricingTypeCode.WillCallCashPrice:\r\n case PricingTypeCode.PreBuy:\r\n default:\r\n this.PricePlans = pp;\r\n this.SelectedPricePlan = pricePlan;\r\n break;\r\n }\r\n } else {\r\n this.PricePlans = pp;\r\n }\r\n } else if (PricePlans.length === 1) {\r\n this.PricePlans = PricePlans;\r\n this.SelectedPricePlan = PricePlans[0];\r\n }\r\n }\r\n\r\n if (debug) {\r\n console.log(\r\n `Filtered Price Plans - ${node.WorkflowNodeDescription} NodeId ${node.WorkflowNodeId} - PriceType ${priceTypeCode} - Attribute ${attributeId}`,\r\n this.PricePlans\r\n );\r\n }\r\n }\r\n\r\n /**\r\n * Determine if the Price Plan should be filtered or not\r\n * @param node\r\n * @param option\r\n * @param pricePlan\r\n * @param attributeId\r\n * @param priceTypeCode\r\n * @returns\r\n */\r\n\r\n public UsePriceplan(\r\n node: wf.WorkflowNode,\r\n option: wf.WorkflowNodeChild,\r\n pricePlan: any,\r\n attributeId?: number,\r\n priceTypeCode?: PricingTypeCode\r\n ): boolean {\r\n const intVal = parseInt(option.WorkflowNodeValue);\r\n const isInt = Number.isInteger(intVal);\r\n const hasAttribute = attributeId !== undefined && attributeId > 0;\r\n const hasPriceTypeCode = priceTypeCode && priceTypeCode > 0;\r\n const estimatedUsage = this.GetGallonAmountForPricePlan(node.NodeData);\r\n\r\n //Account for selecting BoGo if conditions met\r\n const hasAutoDeliverySchedule: boolean = node.NodeData.DeliverySchedule === DeliverySchedule.Automatic;\r\n const offerPropaneBogo: boolean =\r\n hasAutoDeliverySchedule &&\r\n node.NodeData?.ProductPricePlan?.ProductCode === ProductCode.Propane &&\r\n node.NodeData?.PropaneEstimatedUsages.some(\r\n (x) => x.EstimatedUsageCode === PropaneUsageCode.PrimaryHeating\r\n );\r\n const offerHeatingOilBogo: boolean =\r\n hasAutoDeliverySchedule && node.NodeData?.ProductId === ProductCode.HeatingOil;\r\n\r\n const HasAttributeMatch = (): boolean => {\r\n let isAttributeMatch: boolean = false;\r\n\r\n const isAttributeOnlyMatching = pricePlan.MarketingAttributes.some(\r\n (x) => x.PricePlanAttributeId === attributeId\r\n );\r\n const isAttributeAndValueMatching = (): boolean =>\r\n //Either the attribute is present and the value is 1 or the attribute is not present and the value is 0\r\n (intVal === 1 && isAttributeOnlyMatching) ||\r\n (intVal === 0 && pricePlan.MarketingAttributes.every((x) => x.PricePlanAttributeId !== attributeId));\r\n\r\n const hasWorryFreeRenewalOptInOptions = [\r\n WorryFreeRenewalOption.OptionalRenewal,\r\n WorryFreeRenewalOption.RequireRenewal,\r\n ].includes(pricePlan.WorryFreeRenewalOption);\r\n\r\n const hasWorryFreeRenewalOptInOptionsOnly =\r\n pricePlan.WorryFreeRenewalOption === WorryFreeRenewalOption.OptionalRenewal;\r\n\r\n if (hasAttribute && pricePlan.MarketingAttributes && pricePlan.MarketingAttributes.length > 0) {\r\n //Check for Worry Free Renewal Options in PricePlan and bounce off of Price Plan to make sure it is Available\r\n if (hasWorryFreeRenewalOptInOptions && isAttributeAndValueMatching()) {\r\n isAttributeMatch = true;\r\n } else if (hasWorryFreeRenewalOptInOptionsOnly && isAttributeOnlyMatching) {\r\n isAttributeMatch = true;\r\n } else {\r\n isAttributeMatch = isAttributeAndValueMatching();\r\n }\r\n }\r\n return isAttributeMatch;\r\n };\r\n\r\n //Bail out early for final workflow nodes\r\n if (\r\n node.SelectedOptionIsFinalNode(option) &&\r\n node.NodeData?.ProductPricePlan &&\r\n node.NodeData.ProductPricePlan.ProductCode === ProductCode.Propane\r\n ) {\r\n if (estimatedUsage > 0 && pricePlan.MinEstimatedUsage >= 0) {\r\n //get the right plan based on estimated usage, and matching price type code\r\n if (hasPriceTypeCode) {\r\n return (\r\n pricePlan.MinEstimatedUsage <= estimatedUsage &&\r\n (!pricePlan.MaxEstimatedUsage || pricePlan.MaxEstimatedUsage >= estimatedUsage) &&\r\n intVal === 1 &&\r\n pricePlan.PricingTypeCode === priceTypeCode &&\r\n ((offerPropaneBogo && pricePlan.HasBogoAdjustment) || !pricePlan.HasBogoAdjustment)\r\n );\r\n }\r\n\r\n //get the right plan based on estimated usage, and matching attribute\r\n if (hasAttribute) {\r\n return (\r\n pricePlan.HasBogoAdjustment === offerPropaneBogo &&\r\n pricePlan.MinEstimatedUsage <= estimatedUsage &&\r\n (!pricePlan.MaxEstimatedUsage || pricePlan.MaxEstimatedUsage >= estimatedUsage) &&\r\n ((intVal === 1 &&\r\n pricePlan.MarketingAttributes.some((x) => x.PricePlanAttributeId === attributeId)) ||\r\n (intVal === 0 &&\r\n pricePlan.MarketingAttributes.every((x) => x.PricePlanAttributeId !== attributeId)))\r\n );\r\n }\r\n }\r\n return false;\r\n } else if (\r\n node.SelectedOptionIsFinalNode(option) &&\r\n node.NodeData?.ProductPricePlan &&\r\n node.NodeData.ProductPricePlan.ProductCode === ProductCode.HeatingOil\r\n ) {\r\n //target final node with tank location, this is set up a bit weird and we just check for attribute\r\n if (\r\n node.WorkflowNodeInputValidation?.WorkflowNodeInputValidationEnum ===\r\n WorkflowNodeInputValidationEnum.TankLocation\r\n ) {\r\n return (\r\n hasAttribute &&\r\n ((offerHeatingOilBogo && pricePlan.HasBogoAdjustment) || !pricePlan.HasBogoAdjustment)\r\n );\r\n }\r\n }\r\n\r\n //Binary Choice - Yes/No - True / False\r\n if (isInt && node.WorkflowNodeType.WorkflowNodeTypeEnum === WorkflowNodeTypeEnum.BinaryChoiceButton) {\r\n if (hasPriceTypeCode) {\r\n return intVal === 1 && pricePlan.PricingTypeCode === priceTypeCode;\r\n }\r\n\r\n if (hasAttribute) {\r\n return HasAttributeMatch();\r\n }\r\n }\r\n\r\n //Use Price Type\r\n if (isInt && priceTypeCode && priceTypeCode > 0 && hasPriceTypeCode) {\r\n return (\r\n (intVal === 1 && pricePlan.PricingTypeCode === priceTypeCode) ||\r\n (intVal === 0 && pricePlan.PricingTypeCode !== priceTypeCode)\r\n );\r\n }\r\n\r\n //Use Node Value for Attribute Value\r\n if (isInt && attributeId && attributeId > 0 && option.WorkflowNodeValue) {\r\n return pricePlan.MarketingAttributes.some(\r\n (x) => x.PricePlanAttributeId === attributeId && x.TemplateValueRaw === option.WorkflowNodeValue\r\n );\r\n }\r\n\r\n return false;\r\n }\r\n\r\n //#endregion\r\n\r\n public GetGallonAmountForPricePlan = (nodeData?: wf.WorkflowData, useTankSize?: boolean): number => {\r\n if (nodeData) {\r\n if (useTankSize && nodeData.TankSize !== undefined) {\r\n return nodeData.TankSize.UsableSize;\r\n }\r\n if (nodeData.PropaneUsage() > 0) {\r\n return nodeData.PropaneUsage();\r\n }\r\n if (nodeData.WillCallGallons > 0) {\r\n return nodeData.WillCallGallons;\r\n }\r\n if (nodeData.PreBuyGallons > 0) {\r\n return nodeData.PreBuyGallons;\r\n }\r\n }\r\n return 0;\r\n };\r\n\r\n public PricePlanCanBeReduced = (\r\n productPricePlan: ProductPricePlan,\r\n option: wf.WorkflowNodeChild,\r\n node: wf.WorkflowNode\r\n ): boolean => {\r\n return (\r\n productPricePlan !== undefined &&\r\n productPricePlan.PricePlans !== undefined &&\r\n productPricePlan.PricePlans.length > 0 &&\r\n option &&\r\n ((option.AssociatedAttribute && option.AssociatedAttribute.PricePlanAttributeId > 0) ||\r\n (option.AssociatedPricingTypeCode !== undefined && option.AssociatedPricingTypeCode > 0) ||\r\n (option.WorkflowNextNode &&\r\n option.WorkflowNextNode.WorkflowNodeType &&\r\n option.WorkflowNextNode.WorkflowNodeType.WorkflowNodeTypeEnum === WorkflowNodeTypeEnum.Final))\r\n );\r\n };\r\n}\r\n","import { ProductPricePlan, IProductPricePlans } from \"../IPricingPlan\";\r\nimport { fetchData } from \"@utility/webServices\";\r\nimport { BrandType } from \"@appEnum/BrandType\";\r\nimport { ProductCode, GetProductCodeName } from \"@appEnum/ProductCode\";\r\nimport { ServiceContract } from \"../service/ServiceContract\";\r\nimport { GuidedPricePlan } from \"./GuidedPricePlan\";\r\n\r\nexport async function GetPricePlansByProduct(\r\n productId: ProductCode,\r\n brandTypeId: BrandType,\r\n pricePlans: any,\r\n zipCode?: string\r\n): Promise<any> {\r\n const rtn = new ProductPricePlan({\r\n PricePlans: [],\r\n ProductCode: productId,\r\n BrandType: brandTypeId,\r\n BaseContractTypeIds: [],\r\n ProductTankDefaults: [],\r\n PricingAvailableInZip: false,\r\n MaskeProductPricing: {},\r\n } as unknown as IProductPricePlans);\r\n rtn.ProductCode = productId;\r\n rtn.BrandType = brandTypeId;\r\n\r\n if (pricePlans) {\r\n switch (productId) {\r\n case ProductCode.HeatingOil:\r\n {\r\n if (pricePlans.HeatingOilPrices && pricePlans.HeatingOilPrices.length > 0) {\r\n rtn.PricePlans = pricePlans.HeatingOilPrices.filter((p) => {\r\n return p.BrandType === brandTypeId;\r\n });\r\n }\r\n\r\n if (pricePlans.HeatingOilTankDefaults) {\r\n rtn.ProductTankDefaults = pricePlans.HeatingOilTankDefaults;\r\n }\r\n }\r\n break;\r\n case ProductCode.Propane:\r\n {\r\n if (pricePlans.PropanePrices && pricePlans.PropanePrices.length > 0) {\r\n rtn.PricePlans = pricePlans.PropanePrices.filter((p) => {\r\n return p.BrandType === brandTypeId;\r\n });\r\n }\r\n\r\n if (pricePlans.PropaneTankDefaults) {\r\n rtn.ProductTankDefaults = pricePlans.PropaneTankDefaults;\r\n }\r\n }\r\n break;\r\n case ProductCode.NaturalGas:\r\n {\r\n if (pricePlans.NatGasUtilities && pricePlans.NatGasUtilities.length > 0) {\r\n rtn.ProductUtility = pricePlans.NatGasUtilities;\r\n }\r\n if (pricePlans.NatGasPrices && pricePlans.NatGasPrices.length > 0) {\r\n rtn.PricePlans = pricePlans.NatGasPrices.filter((p) => {\r\n return p.BrandType === brandTypeId;\r\n });\r\n }\r\n }\r\n break;\r\n case ProductCode.Electricity:\r\n {\r\n if (pricePlans.ElectricUtilities && pricePlans.ElectricUtilities.length > 0) {\r\n rtn.ProductUtility = pricePlans.ElectricUtilities;\r\n }\r\n if (pricePlans.ElectricityPrices && pricePlans.ElectricityPrices.length > 0) {\r\n rtn.PricePlans = pricePlans.ElectricityPrices.filter((p) => {\r\n return p.BrandType === brandTypeId;\r\n });\r\n }\r\n }\r\n break;\r\n case ProductCode.ServiceProduct:\r\n {\r\n if (pricePlans.ZipSupportsServiceContract) {\r\n //Get Service Contracts for this zip\r\n try {\r\n const contracts = await fetchData<Array<ServiceContract>>(\r\n `CustomerApplication/get-available-contract-types-by-zip`,\r\n {\r\n ZipCode: zipCode,\r\n BrandTypeId: brandTypeId,\r\n }\r\n );\r\n\r\n if (!rtn.ContractTypes) {\r\n rtn.ContractTypes = [];\r\n }\r\n if (contracts && contracts.length > 0) {\r\n const contractTypes: Array<ServiceContract> = [];\r\n contracts.forEach((x) => contractTypes.push(new ServiceContract(x)));\r\n rtn.ContractTypes = contractTypes;\r\n }\r\n } catch (err) {\r\n throw new Error(`Zipcode ${zipCode} does not support service contracts`);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n const maskedProductPricing = getMaskedPricePlans(pricePlans, productId, \"guided-experience\");\r\n\r\n if (\r\n (rtn && rtn.PricePlans && rtn.PricePlans.length > 0) ||\r\n (rtn.ContractTypes && rtn.ContractTypes.length > 0)\r\n ) {\r\n if (maskedProductPricing !== undefined) {\r\n rtn.MaskedProductPricing = maskedProductPricing;\r\n }\r\n\r\n rtn.PricingAvailableInZip = true;\r\n } else {\r\n console.error(\"Unable to find price plan for product\");\r\n }\r\n\r\n return rtn;\r\n}\r\n\r\nexport const getMaskedPricePlans = (pricePlans: any, productId: ProductCode, availability: string) => {\r\n const maskedProducts: any = pricePlans.MaskedPricePlanProducts;\r\n const key = GetProductCodeName(productId) ?? \"\";\r\n\r\n let maskedProduct = maskedProducts.hasOwnProperty(key) ? maskedProducts[key] : undefined;\r\n if (maskedProducts.hasOwnProperty(key)) {\r\n maskedProduct = maskedProducts[key].find((x) =>\r\n x.PricingAvailability.some((y) => y.PricingAvailabilityKey === availability)\r\n );\r\n }\r\n return maskedProduct ?? undefined;\r\n};\r\nexport async function GetPricePlansForUtility(\r\n utilityCode: string,\r\n pricePlans: any\r\n): Promise<Array<GuidedPricePlan>> {\r\n try {\r\n if (utilityCode && pricePlans && pricePlans.length > 0) {\r\n const pp: Array<GuidedPricePlan> = pricePlans.filter((pp) => {\r\n return pp.UtilityCode === utilityCode;\r\n });\r\n return pp;\r\n }\r\n throw \"Invalid utility code or priceplan\";\r\n } catch (error) {\r\n throw error;\r\n }\r\n}\r\n","import { IMarketingAttribute } from \"@interfaces/attributes/IMarketingAttribute\";\r\nimport { ProductCode } from \"../../../appEnum/ProductCode\";\r\nimport { IPricePlan } from \"../IPricePlan\";\r\n\r\ninterface IServiceContract extends IPricePlan {\r\n AddOnCoverage: boolean;\r\n AllEquipmentTypeIds: Array<EquipmentType>;\r\n AllowMonthlyBilling: boolean;\r\n AnnualBillingDiscount?: number;\r\n AsteaContractTemplateId?: number;\r\n BasePrice?: number;\r\n BaseProductTemplate?: Array<any>;\r\n BrandTypeId: number;\r\n CargasServiceContractId: number;\r\n ContractDescriptionOverride: string;\r\n ContractTemplateId: number;\r\n ContractTemplateName: string;\r\n ContractTypeId: number;\r\n ContractsPerSite: number;\r\n CoveredEquipmentTypeIds: Array<EquipmentType>;\r\n CsrReviewNewApplications: boolean;\r\n HeroImageAssetId?: number;\r\n IsPopular: boolean;\r\n RenderedHeroImageAssetUrl?: string;\r\n MaximumAllowed?: number;\r\n MaximumObjects: number;\r\n MarketingAttributes?: Array<IMarketingAttribute>;\r\n MinimumRequired: number;\r\n PlanHighlights: string;\r\n RequireInspection: boolean;\r\n RequiredEquipmentTypeIds: Array<EquipmentType>;\r\n RequiredStandaloneObjects: number;\r\n SortOrder: number;\r\n StandaloneCoverage: boolean;\r\n TextDescription: string;\r\n TosUrl: string;\r\n TotalCoveragePrice: number;\r\n EquipmentIsCovered(equipmentId: Array<number> | undefined): boolean;\r\n SetCoveredEquipment(equipmentId: number): void;\r\n IsBaseContract: boolean;\r\n IsTankProtectionPlan: boolean;\r\n MonthlyCost: number;\r\n MonthlyCostFormatted: string;\r\n UpfrontCost: number;\r\n UpfrontCostFormatted: string;\r\n ProductId: ProductCode;\r\n}\r\n\r\nclass ServiceContract implements IServiceContract {\r\n constructor(obj: IServiceContract) {\r\n this.AddOnCoverage = obj.AddOnCoverage;\r\n this.AllEquipmentTypeIds = obj.AllEquipmentTypeIds;\r\n this.AllowMonthlyBilling = obj.AllowMonthlyBilling;\r\n this.AnnualBillingDiscount = obj.AnnualBillingDiscount;\r\n this.AsteaContractTemplateId = obj.AsteaContractTemplateId;\r\n this.BaseProductTemplate = obj.BaseProductTemplate;\r\n this.BasePrice = obj.BasePrice;\r\n this.BrandTypeId = obj.BrandTypeId;\r\n this.CargasServiceContractId = obj.CargasServiceContractId;\r\n this.ContractDescriptionOverride = obj.ContractDescriptionOverride;\r\n this.ContractTemplateId = obj.ContractTemplateId;\r\n this.ContractTemplateName = obj.ContractTemplateName;\r\n this.ContractTypeId = obj.ContractTypeId;\r\n this.ContractsPerSite = obj.ContractsPerSite;\r\n\r\n this.CsrReviewNewApplications = obj.CsrReviewNewApplications;\r\n this.HeroImageAssetId = obj.HeroImageAssetId;\r\n this.IsPopular = obj.IsPopular;\r\n this.MaximumAllowed = obj.MaximumAllowed;\r\n this.MaximumObjects = obj.MaximumObjects;\r\n this.MinimumRequired = obj.MinimumRequired;\r\n this.PlanHighlights = obj.PlanHighlights;\r\n this.RequireInspection = obj.RequireInspection;\r\n this.RequiredEquipmentTypeIds = obj.RequiredEquipmentTypeIds;\r\n this.RequiredStandaloneObjects = obj.RequiredStandaloneObjects;\r\n this.SortOrder = obj.SortOrder;\r\n this.StandaloneCoverage = obj.StandaloneCoverage;\r\n this.TextDescription = obj.TextDescription;\r\n this.TosUrl = obj.TosUrl;\r\n this.TotalCoveragePrice = obj.TotalCoveragePrice;\r\n this.CoveredEquipmentTypeIds = obj.CoveredEquipmentTypeIds;\r\n\r\n this.IsBaseContract = obj.IsBaseContract;\r\n this.IsTankProtectionPlan = obj.IsTankProtectionPlan;\r\n this.MonthlyCost = obj.MonthlyCost;\r\n this.MonthlyCostFormatted = obj.MonthlyCostFormatted;\r\n this.UpfrontCost = obj.UpfrontCost;\r\n this.UpfrontCostFormatted = obj.UpfrontCostFormatted;\r\n this.ProductId = obj.ProductId;\r\n }\r\n\r\n AddOnCoverage: boolean;\r\n AllEquipmentTypeIds: Array<EquipmentType>;\r\n AllowMonthlyBilling: boolean;\r\n AnnualBillingDiscount?: number;\r\n AsteaContractTemplateId?: number;\r\n BaseProductTemplate?: Array<any>;\r\n BasePrice?: number;\r\n BrandTypeId: number;\r\n CargasServiceContractId: number;\r\n ContractDescriptionOverride: string;\r\n ContractTemplateId: number;\r\n ContractTemplateName: string;\r\n ContractTypeId: number;\r\n ContractsPerSite: number;\r\n CoveredEquipmentTypeIds: Array<EquipmentType>;\r\n CsrReviewNewApplications: boolean;\r\n HeroImageAssetId?: number;\r\n IsPopular: boolean;\r\n RenderedHeroImageAssetUrl?: string;\r\n MarketingAttributes?: Array<IMarketingAttribute>;\r\n MaximumAllowed?: number;\r\n MaximumObjects: number;\r\n MinimumRequired: number;\r\n PlanHighlights: string;\r\n RequireInspection: boolean;\r\n RequiredEquipmentTypeIds: Array<EquipmentType>;\r\n RequiredStandaloneObjects: number;\r\n SortOrder: number;\r\n StandaloneCoverage: boolean;\r\n TextDescription: string;\r\n TosUrl: string;\r\n TotalCoveragePrice: number;\r\n IsBaseContract: boolean;\r\n IsTankProtectionPlan: boolean;\r\n MonthlyCost: number;\r\n MonthlyCostFormatted: string;\r\n UpfrontCost: number;\r\n UpfrontCostFormatted: string;\r\n ProductId: ProductCode;\r\n\r\n public EquipmentIsCovered(equipmentId: Array<number> | undefined): boolean {\r\n if (this.RequiredEquipmentTypeIds && equipmentId) {\r\n return this.RequiredEquipmentTypeIds.map((x) => x.EquipmentTypeId).some((y) => equipmentId.includes(y));\r\n }\r\n return false;\r\n }\r\n public SetCoveredEquipment(equipments: number | number[] | EquipmentType[]): void {\r\n this.CoveredEquipmentTypeIds = [];\r\n\r\n //Parse Array - Number vs EquipmentType\r\n if (Array.isArray(equipments)) {\r\n //EquipmentType[] -- 😠javascript typechecking\r\n if (equipments.length > 0 && typeof equipments[0] === \"object\" && \"EquipmentTypeId\" in equipments[0]) {\r\n for (const equipment of equipments as EquipmentType[]) {\r\n if (this.EquipmentIsCovered([equipment.EquipmentTypeId])) {\r\n if (\r\n !this.CoveredEquipmentTypeIds.map((x) => x.EquipmentTypeId).includes(equipment.EquipmentTypeId)\r\n ) {\r\n this.CoveredEquipmentTypeIds.push(equipment);\r\n }\r\n }\r\n }\r\n return;\r\n }\r\n\r\n //Number[]\r\n if (this.EquipmentIsCovered(equipments as number[])) {\r\n for (const equipment of equipments) {\r\n const match = this.RequiredEquipmentTypeIds.find((x) => x.EquipmentTypeId === equipment);\r\n if (\r\n match &&\r\n !this.CoveredEquipmentTypeIds.map((x) => x.EquipmentTypeId).includes(equipment as number)\r\n ) {\r\n this.CoveredEquipmentTypeIds.push(match);\r\n }\r\n }\r\n return;\r\n }\r\n }\r\n\r\n //Parse Single Number\r\n if (this.EquipmentIsCovered([<number>equipments])) {\r\n const match = this.RequiredEquipmentTypeIds.find((x) => x.EquipmentTypeId === <number>equipments);\r\n if (match && !this.CoveredEquipmentTypeIds.map((x) => x.EquipmentTypeId).includes(<number>equipments)) {\r\n this.CoveredEquipmentTypeIds.push(match);\r\n }\r\n }\r\n }\r\n}\r\n\r\ndeclare interface IEquipmentType {\r\n EquipmentType: string;\r\n EquipmentTypeId: number;\r\n InstalledItem: boolean;\r\n Price: number;\r\n}\r\n\r\nclass EquipmentType {\r\n constructor(obj: IEquipmentType) {\r\n this.EquipmentTypeId = obj.EquipmentTypeId;\r\n this.EquipmentType = obj.EquipmentType;\r\n this.InstalledItem = obj.InstalledItem;\r\n this.Price = obj.Price;\r\n }\r\n\r\n EquipmentType: string;\r\n EquipmentTypeId: number;\r\n InstalledItem: boolean;\r\n Price: number;\r\n}\r\n\r\nconst newContractTemplateObj = () =>\r\n new ServiceContract({\r\n AddOnCoverage: false,\r\n AllEquipmentTypeIds: [],\r\n AllowMonthlyBilling: false,\r\n BrandTypeId: 0,\r\n CargasServiceContractId: 0,\r\n ContractDescriptionOverride: \"\",\r\n ContractTemplateId: 0,\r\n ContractTemplateName: \"\",\r\n ContractTypeId: 0,\r\n ContractsPerSite: 0,\r\n CoveredEquipmentTypeIds: [],\r\n CsrReviewNewApplications: false,\r\n IsPopular: false,\r\n MaximumObjects: 0,\r\n MinimumRequired: 0,\r\n PlanHighlights: \"\",\r\n RequireInspection: false,\r\n RequiredEquipmentTypeIds: [],\r\n RequiredStandaloneObjects: 0,\r\n SortOrder: 0,\r\n StandaloneCoverage: false,\r\n TextDescription: \"\",\r\n TosUrl: \"\",\r\n TotalCoveragePrice: 0,\r\n EquipmentIsCovered: (equipmentId: Array<number> | undefined): boolean => false,\r\n SetCoveredEquipment: (equipmentId: number): void => {},\r\n IsBaseContract: false,\r\n IsTankProtectionPlan: false,\r\n MonthlyCost: 0,\r\n MonthlyCostFormatted: \"\",\r\n UpfrontCost: 0,\r\n UpfrontCostFormatted: \"\",\r\n ProductId: ProductCode.Unknown,\r\n MarketingAttributes: [],\r\n });\r\n\r\nexport { IServiceContract, ServiceContract, IEquipmentType, EquipmentType, newContractTemplateObj };\r\n","import { floatPosition } from \"@compUtility/composables/floatedPosition\";\r\n\r\nexport interface ToolTip {\r\n position?: floatPosition;\r\n tooltipText?: string;\r\n cssClasses?: string;\r\n styles?: any;\r\n tooltipType?: TooltipType;\r\n autosizeWithContent?: boolean;\r\n showTrigger?: \"hover\" | \"click\" | \"manual\" | (\"hover\" | \"click\" | \"manual\")[];\r\n attachToCustomElementId?: string;\r\n}\r\n\r\nexport enum TooltipType {\r\n AnchorTooltip = 1,\r\n QuestionTooltipIcon = 2,\r\n WarningTooltipIcon = 3,\r\n InformationalTooltip = 4,\r\n}\r\n","/**\r\n * Base Class\r\n */\r\nexport class AnalyticProduct {\r\n public coupon?: string;\r\n public currency: string;\r\n public discount?: number;\r\n public quantity: number;\r\n public price: number;\r\n\r\n constructor(coupon?: string, discount?: number, quantity?: number, price?: number) {\r\n this.coupon = coupon;\r\n this.currency = \"USD\";\r\n this.discount = discount;\r\n this.quantity = quantity ?? 0;\r\n this.price = price ?? 0;\r\n }\r\n}\r\n\r\nexport class AnalyticsProduct extends AnalyticProduct {\r\n public name: string;\r\n public id: number;\r\n public list: string;\r\n public brand: string;\r\n public category: string;\r\n public postion?: number;\r\n\r\n public constructor(\r\n pricePlan: any,\r\n list: string | undefined,\r\n index?: number,\r\n discount?: number,\r\n coupon?: string,\r\n quantity?: number\r\n ) {\r\n super(coupon, discount, quantity ?? 1, pricePlan.Price);\r\n this.list = list ? list : \"GuidedExperienceEnrollment\";\r\n this.name = pricePlan.PricingPlanDescription ?? pricePlan.ProductCodeFormatted;\r\n this.id = pricePlan.PricingPlan;\r\n this.brand = pricePlan.UtilityCode ?? pricePlan.BrandTypeName;\r\n this.category = pricePlan.ProductCodeFormatted;\r\n this.postion = index !== undefined && index > 0 ? index : 1;\r\n }\r\n}\r\n","import { AnalyticProduct } from \"./AnalyticsProduct\";\r\n\r\n/**\r\n * Main AnalyticsProduct to be used for Google Analytics\r\n */\r\nexport class Ga4AnalyticsProduct extends AnalyticProduct {\r\n public item_id: string;\r\n public item_name: string;\r\n public item_brand: string;\r\n public item_category: string;\r\n public location_id: string;\r\n public list?: string;\r\n\r\n constructor(\r\n pricePlan: any,\r\n list?: string,\r\n index?: number,\r\n discount?: number,\r\n coupon?: string,\r\n quantity?: number\r\n ) {\r\n let pp = { ...pricePlan };\r\n //EL/NG products should use LTV instead of their price\r\n if (pp.LifeTimeValue > 0) {\r\n pp.Price = pp.LifeTimeValue;\r\n }\r\n\r\n if (pp.UtilityDescription) {\r\n pp.UtilityCode = pp.UtilityDescription;\r\n }\r\n\r\n super(coupon, discount, quantity ?? 1, pp.Price);\r\n this.item_id = pp.PricePlan;\r\n this.item_name = pp.MarketingHeading ?? pp.PricingPlanDescription ?? pp.ProductCodeFormatted;\r\n this.item_brand = pp.UtilityCode ?? pp.BrandTypeName;\r\n this.item_category = pp.ItemCategory ?? pp.ProductCodeFormatted;\r\n this.location_id = \"\";\r\n this.list = list;\r\n }\r\n}\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, unref as _unref, renderList as _renderList, Fragment as _Fragment, createVNode as _createVNode, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, toDisplayString as _toDisplayString } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n for: \"\"\n}\nconst _hoisted_2 = { key: 1 }\nconst _hoisted_3 = { key: 0 }\nconst _hoisted_4 = { key: 1 }\nconst _hoisted_5 = {\n key: 0,\n class: \"pr10\"\n}\nconst _hoisted_6 = { key: 1 }\nconst _hoisted_7 = { key: 2 }\nconst _hoisted_8 = { key: 2 }\nconst _hoisted_9 = {\n key: 0,\n class: \"m10\"\n}\nconst _hoisted_10 = {\n key: 1,\n for: \"\"\n}\nconst _hoisted_11 = { key: 2 }\nconst _hoisted_12 = { key: 0 }\nconst _hoisted_13 = { key: 1 }\nconst _hoisted_14 = {\n key: 0,\n class: \"pr10\"\n}\nconst _hoisted_15 = { key: 1 }\nconst _hoisted_16 = { key: 2 }\nconst _hoisted_17 = { key: 3 }\n\nimport { computed } from \"vue\";\r\nimport { boxBool, trueFalseString } from \"@utility/boolUtils\";\r\nimport { TooltipType } from \"@interfaces/utility/Tooltip\";\r\nimport * as ma from \"@interfaces/attributes/MarketingAttribute\";\r\nimport { PricePlanAttributeRegion } from \"@appEnum/PricePlanAttributeRegion\";\r\nimport { IPricePlan } from \"@interfaces/pricing/IPricePlan\";\r\nimport { IMarketingAttribute } from \"@interfaces/attributes/IMarketingAttribute\";\r\nimport AttributeHtmlContent from \"./attributeHtmlContent.vue\";\r\nimport AttributeTooltipContent from \"./attributeTooltipContent.vue\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'attributeListingBadge',\n props: {\n pricePlan: {},\n toggleAttribute: { type: Boolean, default: false },\n hideIcons: { type: Boolean, default: false },\n hideAttributeRegionIndicator: { type: Boolean, default: true },\n badge: { type: [Boolean, String], default: true },\n showInternal: { type: Boolean, default: false },\n variant: { default: \"normal\" },\n restrictAtrributeIds: { default: [] as number[] }\n },\n setup(__props: any) {\n\r\nconst props = __props;\r\n\r\nconst { hideIcons } = props;\r\nconst pricePlan = { ...props.pricePlan };\r\nconst MarketingAttributes = [...(pricePlan.MarketingAttributes ?? [])];\r\nconst contentClass = computed<string>(() => (!boxBool(props.badge) ? \"col-xs-6\" : \"\"));\r\n\r\nconst marketingAttributes =\r\n MarketingAttributes && MarketingAttributes.length > 0\r\n ? MarketingAttributes.filter((x) => {\r\n return (\r\n !props.restrictAtrributeIds.includes(x.PricePlanAttributeId) &&\r\n ma.showAttribute(x, props.showInternal)\r\n );\r\n })\r\n : [];\r\nconst primaryContentAttributes = ma.getContentAttributes(\r\n marketingAttributes,\r\n PricePlanAttributeRegion.Feature\r\n);\r\nconst secondaryContentAttributes = ma.getContentAttributes(\r\n marketingAttributes,\r\n PricePlanAttributeRegion.Benefit\r\n);\r\nconst RenderAttributeMarketingDescription = ma.RenderAttributeMarketingDescription;\r\nconst showAttribute = ma.showAttribute;\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n class: _normalizeClass([\r\n 'attribute-listing-wrapper',\r\n _ctx.$props.variant && _ctx.$props.variant !== 'normal' ? _ctx.$props.variant : '',\r\n ])\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"primary-content-wrapper\", contentClass.value])\n }, [\n (!_ctx.badge)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_1, \"Plan Details: \"))\n : _createCommentVNode(\"\", true),\n (_unref(primaryContentAttributes) && _unref(primaryContentAttributes).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_2, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(primaryContentAttributes), (a, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, [\n (a.HtmlContentId)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_3, [\n _createVNode(AttributeHtmlContent, {\n attribute: a,\n TooltipType: _unref(TooltipType).InformationalTooltip,\n contentText: _unref(RenderAttributeMarketingDescription)(a, pricePlan),\n PricePlanAttributeRegionIcon: a.PricePlanAttributeRegionIcon\n }, null, 8, [\"attribute\", \"TooltipType\", \"contentText\", \"PricePlanAttributeRegionIcon\"])\n ]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_4, [\n (a.PricePlanAttributeRegionIcon && !_unref(hideIcons))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_5, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", a.PricePlanAttributeRegionIcon])\n }, null, 2)\n ]))\n : _createCommentVNode(\"\", true),\n (!a.ToolTipText)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_6, _toDisplayString(_unref(RenderAttributeMarketingDescription)(a, pricePlan)), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_7, [\n _createVNode(AttributeTooltipContent, {\n attribute: a,\n pricePlan: pricePlan,\n tooltipType: _unref(TooltipType).QuestionTooltipIcon,\n tooltipText: _unref(RenderAttributeMarketingDescription)(a, pricePlan)\n }, null, 8, [\"attribute\", \"tooltipType\", \"tooltipText\"])\n ]))\n ]))\n ]))\n }), 128))\n ]))\n : (!_ctx.badge)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_8, \"Nothing to display\"))\n : _createCommentVNode(\"\", true)\n ], 2),\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"secondary-content-wrapper\", contentClass.value])\n }, [\n (!_ctx.hideAttributeRegionIndicator)\n ? (_openBlock(), _createElementBlock(\"hr\", _hoisted_9))\n : _createCommentVNode(\"\", true),\n (!_ctx.badge)\n ? (_openBlock(), _createElementBlock(\"label\", _hoisted_10, \"Plan Highlights: \"))\n : _createCommentVNode(\"\", true),\n (_unref(secondaryContentAttributes) && _unref(secondaryContentAttributes).length > 0)\n ? (_openBlock(), _createElementBlock(\"ul\", _hoisted_11, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_unref(secondaryContentAttributes), (a, index) => {\n return (_openBlock(), _createElementBlock(\"li\", { key: index }, [\n (a.HtmlContentId)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_12, [\n _createVNode(AttributeHtmlContent, {\n attribute: a,\n TooltipType: _unref(TooltipType).InformationalTooltip,\n contentText: _unref(RenderAttributeMarketingDescription)(a, pricePlan),\n PricePlanAttributeRegionIcon: a.PricePlanAttributeRegionIcon\n }, null, 8, [\"attribute\", \"TooltipType\", \"contentText\", \"PricePlanAttributeRegionIcon\"])\n ]))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_13, [\n (a.PricePlanAttributeRegionIcon && !_unref(hideIcons))\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_14, [\n _createElementVNode(\"i\", {\n class: _normalizeClass([\"fa\", a.PricePlanAttributeRegionIcon])\n }, null, 2)\n ]))\n : _createCommentVNode(\"\", true),\n (!a.ToolTipText)\n ? (_openBlock(), _createElementBlock(\"span\", _hoisted_15, _toDisplayString(_unref(RenderAttributeMarketingDescription)(a, pricePlan)), 1))\n : (_openBlock(), _createElementBlock(\"span\", _hoisted_16, [\n _createVNode(AttributeTooltipContent, {\n attribute: a,\n pricePlan: pricePlan,\n tooltipType: _unref(TooltipType).QuestionTooltipIcon,\n tooltipText: _unref(RenderAttributeMarketingDescription)(a, pricePlan)\n }, null, 8, [\"attribute\", \"tooltipType\", \"tooltipText\"])\n ]))\n ]))\n ]))\n }), 128))\n ]))\n : (!_ctx.badge)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_17, \"Nothing to display\"))\n : _createCommentVNode(\"\", true)\n ], 2)\n ], 2))\n}\n}\n\n})","<template>\r\n <div\r\n :class=\"[\r\n 'attribute-listing-wrapper',\r\n $props.variant && $props.variant !== 'normal' ? $props.variant : '',\r\n ]\"\r\n >\r\n <!-- Render Primary (Feature) Content -->\r\n <div\r\n class=\"primary-content-wrapper\"\r\n :class=\"contentClass\"\r\n >\r\n <label\r\n for=\"\"\r\n v-if=\"!badge\"\r\n >Plan Details:\r\n </label>\r\n <ul v-if=\"primaryContentAttributes && primaryContentAttributes.length > 0\">\r\n <li\r\n :key=\"index\"\r\n v-for=\"(a, index) in primaryContentAttributes\"\r\n >\r\n <span v-if=\"a.HtmlContentId\">\r\n <AttributeHtmlContent\r\n :attribute=\"a\"\r\n :TooltipType=\"TooltipType.InformationalTooltip\"\r\n :contentText=\"RenderAttributeMarketingDescription(a, pricePlan)\"\r\n :PricePlanAttributeRegionIcon=\"a.PricePlanAttributeRegionIcon\"\r\n />\r\n </span>\r\n <span v-else>\r\n <span\r\n v-if=\"a.PricePlanAttributeRegionIcon && !hideIcons\"\r\n class=\"pr10\"\r\n ><i\r\n class=\"fa\"\r\n :class=\"a.PricePlanAttributeRegionIcon\"\r\n ></i\r\n ></span>\r\n <span v-if=\"!a.ToolTipText\">{{ RenderAttributeMarketingDescription(a, pricePlan) }} </span>\r\n <span v-else>\r\n <AttributeTooltipContent\r\n :attribute=\"a\"\r\n :pricePlan=\"pricePlan\"\r\n :tooltipType=\"TooltipType.QuestionTooltipIcon\"\r\n :tooltipText=\"RenderAttributeMarketingDescription(a, pricePlan)\"\r\n />\r\n </span>\r\n </span>\r\n </li>\r\n </ul>\r\n <div v-else-if=\"!badge\">Nothing to display</div>\r\n </div>\r\n <!-- Render Secondary (Benefit) Content -->\r\n <div\r\n class=\"secondary-content-wrapper\"\r\n :class=\"contentClass\"\r\n >\r\n <hr\r\n v-if=\"!hideAttributeRegionIndicator\"\r\n class=\"m10\"\r\n />\r\n <label\r\n for=\"\"\r\n v-if=\"!badge\"\r\n >Plan Highlights:\r\n </label>\r\n <ul v-if=\"secondaryContentAttributes && secondaryContentAttributes.length > 0\">\r\n <li\r\n :key=\"index\"\r\n v-for=\"(a, index) in secondaryContentAttributes\"\r\n >\r\n <span v-if=\"a.HtmlContentId\">\r\n <AttributeHtmlContent\r\n :attribute=\"a\"\r\n :TooltipType=\"TooltipType.InformationalTooltip\"\r\n :contentText=\"RenderAttributeMarketingDescription(a, pricePlan)\"\r\n :PricePlanAttributeRegionIcon=\"a.PricePlanAttributeRegionIcon\"\r\n />\r\n </span>\r\n <span v-else\r\n ><span\r\n v-if=\"a.PricePlanAttributeRegionIcon && !hideIcons\"\r\n class=\"pr10\"\r\n ><i\r\n class=\"fa\"\r\n :class=\"a.PricePlanAttributeRegionIcon\"\r\n ></i\r\n ></span>\r\n <span v-if=\"!a.ToolTipText\">{{ RenderAttributeMarketingDescription(a, pricePlan) }} </span>\r\n <span v-else>\r\n <AttributeTooltipContent\r\n :attribute=\"a\"\r\n :pricePlan=\"pricePlan\"\r\n :tooltipType=\"TooltipType.QuestionTooltipIcon\"\r\n :tooltipText=\"RenderAttributeMarketingDescription(a, pricePlan)\"\r\n />\r\n </span>\r\n </span>\r\n </li>\r\n </ul>\r\n <div v-else-if=\"!badge\">Nothing to display</div>\r\n </div>\r\n </div>\r\n</template>\r\n<script lang=\"ts\" setup>\r\nimport { computed } from \"vue\";\r\nimport { boxBool, trueFalseString } from \"@utility/boolUtils\";\r\nimport { TooltipType } from \"@interfaces/utility/Tooltip\";\r\nimport * as ma from \"@interfaces/attributes/MarketingAttribute\";\r\nimport { PricePlanAttributeRegion } from \"@appEnum/PricePlanAttributeRegion\";\r\nimport { IPricePlan } from \"@interfaces/pricing/IPricePlan\";\r\nimport { IMarketingAttribute } from \"@interfaces/attributes/IMarketingAttribute\";\r\nimport AttributeHtmlContent from \"./attributeHtmlContent.vue\";\r\nimport AttributeTooltipContent from \"./attributeTooltipContent.vue\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n pricePlan: IPricePlan;\r\n toggleAttribute?: boolean;\r\n hideIcons?: boolean;\r\n hideAttributeRegionIndicator?: boolean;\r\n badge: trueFalseString;\r\n showInternal: boolean;\r\n variant?: \"normal\" | \"zebra-striped\";\r\n restrictAtrributeIds?: number[];\r\n }>(),\r\n {\r\n hideIcons: false,\r\n toggleAttribute: false,\r\n hideAttributeRegionIndicator: true,\r\n badge: true,\r\n showInternal: false,\r\n variant: \"normal\",\r\n restrictAtrributeIds: [] as number[],\r\n }\r\n);\r\n\r\nconst { hideIcons } = props;\r\nconst pricePlan = { ...props.pricePlan };\r\nconst MarketingAttributes = [...(pricePlan.MarketingAttributes ?? [])];\r\nconst contentClass = computed<string>(() => (!boxBool(props.badge) ? \"col-xs-6\" : \"\"));\r\n\r\nconst marketingAttributes =\r\n MarketingAttributes && MarketingAttributes.length > 0\r\n ? MarketingAttributes.filter((x) => {\r\n return (\r\n !props.restrictAtrributeIds.includes(x.PricePlanAttributeId) &&\r\n ma.showAttribute(x, props.showInternal)\r\n );\r\n })\r\n : [];\r\nconst primaryContentAttributes = ma.getContentAttributes(\r\n marketingAttributes,\r\n PricePlanAttributeRegion.Feature\r\n);\r\nconst secondaryContentAttributes = ma.getContentAttributes(\r\n marketingAttributes,\r\n PricePlanAttributeRegion.Benefit\r\n);\r\nconst RenderAttributeMarketingDescription = ma.RenderAttributeMarketingDescription;\r\nconst showAttribute = ma.showAttribute;\r\n</script>\r\n<style lang=\"less\" scoped>\r\n.attribute-listing-wrapper.zebra-striped {\r\n ul {\r\n list-style-type: none;\r\n padding: 0;\r\n margin: 0;\r\n }\r\n li:nth-child(odd) {\r\n background-color: #f4f4f4;\r\n }\r\n\r\n li {\r\n background-color: #fff;\r\n text-align: left;\r\n padding: 3px 10px;\r\n color: #55564f;\r\n font-size: 16px;\r\n line-height: 23px;\r\n }\r\n}\r\n</style>\r\n","import script from \"./attributeListingBadge.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./attributeListingBadge.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./attributeListingBadge.vue?vue&type=style&index=0&id=45bdf369&lang=less&scoped=true\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-45bdf369\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { openBlock as _openBlock, createBlock as _createBlock, createCommentVNode as _createCommentVNode, createElementBlock as _createElementBlock } from \"vue\"\n\nimport { ref, onMounted, onUnmounted } from \"vue\";\r\nimport HtmlContent from \"@compUtility/htmlContent.vue\";\r\nimport { useContentStore } from \"@stores/contentStore\";\r\nimport { useExecuteContent } from \"./composables/executeContent\";\r\nimport { IEmbeddedContent } from \"@interfaces/contentManager/IPageContentMapListingItem\";\r\nimport { EmbeddedContentType } from \"@appEnum/EmbeddedContentType\";\r\nimport { decodeHtml } from \"@utility/domUtils\";\r\nimport { createGuid } from \"@utility/utility\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'embeddedContent',\n props: {\n embeddedContent: { default: () => ({} as IEmbeddedContent) },\n htmlContent: { default: () => (undefined) },\n reExecuteOnComponentUpdate: { type: Boolean, default: false }\n },\n emits: [\"unmounted\", \"content-complete\"],\n setup(__props: any, { emit: __emit }) {\n\r\n\r\n\r\nconst $emit = __emit;\r\nconst { validateEmbeddedContent } = useContentStore();\r\nconst { tryExecuteHtmlScript, tryExecuteScript } = useExecuteContent();\r\nconst loading = ref<boolean>(true);\r\nconst contentId: string = `embedded-content-${createGuid()}`;\r\nconst contentLoaded = ref<boolean>(false);\r\n\r\nconst emitSuccess = () => {\r\n loading.value = false;\r\n $emit(\"content-complete\", `Content ${__props.embeddedContent.HtmlEmbeddedContentName} executed successfully.`);\r\n contentLoaded.value = true;\r\n};\r\n\r\nconst emitFailure = (err: any) => {\r\n loading.value = false;\r\n $emit(\r\n \"content-complete\",\r\n `Content ${__props.embeddedContent.HtmlEmbeddedContentName} encountered an error. ${err}`\r\n );\r\n contentLoaded.value = true;\r\n};\r\n\r\nonMounted(() => {\r\n if (contentLoaded.value && !__props.reExecuteOnComponentUpdate) {\r\n return;\r\n }\r\n\r\n if (__props.embeddedContent?.HtmlEmbeddedContentId && __props.embeddedContent?.HtmlEmbeddedContentSignature) {\r\n if (__props.embeddedContent.EmbeddedContentType === EmbeddedContentType.HtmlScript) {\r\n __props.embeddedContent.HtmlEmbeddedContent = decodeHtml(__props.embeddedContent.HtmlEmbeddedContent) ?? \"\";\r\n }\r\n\r\n validateEmbeddedContent(__props.embeddedContent).then((validationSignature) => {\r\n //Fail if the signature doesn't match\r\n if (\r\n validationSignature === undefined ||\r\n validationSignature !== __props.embeddedContent.HtmlEmbeddedContentSignature\r\n ) {\r\n contentLoaded.value = true;\r\n return;\r\n }\r\n\r\n if (__props.embeddedContent.EmbeddedContentType === EmbeddedContentType.HtmlScript) {\r\n tryExecuteHtmlScript(__props.embeddedContent.HtmlEmbeddedContent)\r\n .then((result) => {\r\n console.log(`Script returned: ${result}`);\r\n emitSuccess();\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n emitFailure(err);\r\n });\r\n } else {\r\n //Try to execute the script\r\n tryExecuteScript(__props.embeddedContent.HtmlEmbeddedContent, __props.embeddedContent.RunAsync)\r\n .then((result) => {\r\n console.log(`Script returned: ${result}`);\r\n emitSuccess();\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n emitFailure(err);\r\n });\r\n }\r\n });\r\n }\r\n loading.value = false;\r\n});\r\n\r\nonUnmounted(() => {\r\n $emit(\"unmounted\");\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", { id: contentId }, [\n (_ctx.htmlContent ?? '' !== '')\n ? (_openBlock(), _createBlock(HtmlContent, {\n key: 0,\n \"html-content\": _ctx.htmlContent\n }, null, 8, [\"html-content\"]))\n : _createCommentVNode(\"\", true)\n ]))\n}\n}\n\n})","import script from \"./embeddedContent.vue?vue&type=script&setup=true&lang=ts\"\nexport * from \"./embeddedContent.vue?vue&type=script&setup=true&lang=ts\"\n\nconst __exports__ = script;\n\nexport default __exports__","<template>\r\n <div :id=\"contentId\">\r\n <HtmlContent\r\n :html-content=\"htmlContent\"\r\n v-if=\"htmlContent ?? '' !== ''\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script setup lang=\"ts\">\r\nimport { ref, onMounted, onUnmounted } from \"vue\";\r\nimport HtmlContent from \"@compUtility/htmlContent.vue\";\r\nimport { useContentStore } from \"@stores/contentStore\";\r\nimport { useExecuteContent } from \"./composables/executeContent\";\r\nimport { IEmbeddedContent } from \"@interfaces/contentManager/IPageContentMapListingItem\";\r\nimport { EmbeddedContentType } from \"@appEnum/EmbeddedContentType\";\r\nimport { decodeHtml } from \"@utility/domUtils\";\r\nimport { createGuid } from \"@utility/utility\";\r\n\r\nconst {\r\n embeddedContent = {} as IEmbeddedContent,\r\n htmlContent = undefined,\r\n reExecuteOnComponentUpdate = false,\r\n} = defineProps<{\r\n embeddedContent: IEmbeddedContent;\r\n htmlContent?: string;\r\n reExecuteOnComponentUpdate?: boolean;\r\n}>();\r\n\r\nconst $emit = defineEmits<{ (e: \"unmounted\"): void; (e: \"content-complete\", results: string): void }>();\r\nconst { validateEmbeddedContent } = useContentStore();\r\nconst { tryExecuteHtmlScript, tryExecuteScript } = useExecuteContent();\r\nconst loading = ref<boolean>(true);\r\nconst contentId: string = `embedded-content-${createGuid()}`;\r\nconst contentLoaded = ref<boolean>(false);\r\n\r\nconst emitSuccess = () => {\r\n loading.value = false;\r\n $emit(\"content-complete\", `Content ${embeddedContent.HtmlEmbeddedContentName} executed successfully.`);\r\n contentLoaded.value = true;\r\n};\r\n\r\nconst emitFailure = (err: any) => {\r\n loading.value = false;\r\n $emit(\r\n \"content-complete\",\r\n `Content ${embeddedContent.HtmlEmbeddedContentName} encountered an error. ${err}`\r\n );\r\n contentLoaded.value = true;\r\n};\r\n\r\nonMounted(() => {\r\n if (contentLoaded.value && !reExecuteOnComponentUpdate) {\r\n return;\r\n }\r\n\r\n if (embeddedContent?.HtmlEmbeddedContentId && embeddedContent?.HtmlEmbeddedContentSignature) {\r\n if (embeddedContent.EmbeddedContentType === EmbeddedContentType.HtmlScript) {\r\n embeddedContent.HtmlEmbeddedContent = decodeHtml(embeddedContent.HtmlEmbeddedContent) ?? \"\";\r\n }\r\n\r\n validateEmbeddedContent(embeddedContent).then((validationSignature) => {\r\n //Fail if the signature doesn't match\r\n if (\r\n validationSignature === undefined ||\r\n validationSignature !== embeddedContent.HtmlEmbeddedContentSignature\r\n ) {\r\n contentLoaded.value = true;\r\n return;\r\n }\r\n\r\n if (embeddedContent.EmbeddedContentType === EmbeddedContentType.HtmlScript) {\r\n tryExecuteHtmlScript(embeddedContent.HtmlEmbeddedContent)\r\n .then((result) => {\r\n console.log(`Script returned: ${result}`);\r\n emitSuccess();\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n emitFailure(err);\r\n });\r\n } else {\r\n //Try to execute the script\r\n tryExecuteScript(embeddedContent.HtmlEmbeddedContent, embeddedContent.RunAsync)\r\n .then((result) => {\r\n console.log(`Script returned: ${result}`);\r\n emitSuccess();\r\n })\r\n .catch((err) => {\r\n console.error(err);\r\n emitFailure(err);\r\n });\r\n }\r\n });\r\n }\r\n loading.value = false;\r\n});\r\n\r\nonUnmounted(() => {\r\n $emit(\"unmounted\");\r\n});\r\n</script>\r\n","import { defineComponent as _defineComponent } from 'vue'\nimport { renderList as _renderList, Fragment as _Fragment, openBlock as _openBlock, createElementBlock as _createElementBlock, normalizeStyle as _normalizeStyle, createCommentVNode as _createCommentVNode, renderSlot as _renderSlot } from \"vue\"\n\nconst _hoisted_1 = {\n key: 0,\n class: \"skeleton-box-wrapper\"\n}\nconst _hoisted_2 = { key: 1 }\n\nimport { ref } from \"vue\";\r\ninterface Props {\r\n lines?: number | null | undefined;\r\n maxWidth?: number | null | undefined;\r\n minWidth?: number | null | undefined;\r\n height?: string | null | undefined;\r\n width?: string | null | undefined;\r\n loading?: boolean;\r\n}\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'skeletonBox',\n props: {\n lines: { default: 4 },\n maxWidth: { default: 100 },\n minWidth: { default: 80 },\n height: { default: \"1em\" },\n width: { default: null },\n loading: { type: Boolean, default: true }\n },\n setup(__props: any) {\n\r\nconst props = __props;\r\n\r\nconst getRandomLines = (min, max): number => {\r\n return Math.random() * (max - min) + min;\r\n};\r\n\r\nconst bigness = ref(typeof props.height === \"string\" && props.height.trim() !== \"\" ? props.height : \"1em\");\r\nconst lineCount = ref(\r\n typeof props.lines === \"number\" && props.lines > 0 ? props.lines : getRandomLines(4, 8)\r\n);\r\n\r\nconst computeWidth = (): string => {\r\n // Either use the given fixed width or\r\n // a random width between the given min\r\n // and max values.\r\n return props.width\r\n ? props.width\r\n : `${(\r\n Math.floor(Math.random() * Number(props.maxWidth ?? 100) - Number(props.minWidth ?? 80)) +\r\n Number(props.minWidth ?? 80)\r\n ).toString()}%`;\r\n};\r\n\nreturn (_ctx: any,_cache: any) => {\n return (props.loading)\n ? (_openBlock(), _createElementBlock(\"div\", _hoisted_1, [\n (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(lineCount.value, (n) => {\n return (_openBlock(), _createElementBlock(\"span\", {\n key: n,\n class: \"skeleton-box\",\n style: _normalizeStyle({\r\n height: bigness.value,\r\n width: computeWidth(),\r\n })\n }, null, 4))\n }), 128))\n ]))\n : (_openBlock(), _createElementBlock(\"div\", _hoisted_2, [\n _renderSlot(_ctx.$slots, \"default\")\n ]))\n}\n}\n\n})","<template>\r\n <div\r\n v-if=\"props.loading\"\r\n class=\"skeleton-box-wrapper\"\r\n >\r\n <span\r\n v-for=\"n in lineCount\"\r\n :key=\"n\"\r\n class=\"skeleton-box\"\r\n :style=\"{\r\n height: bigness,\r\n width: computeWidth(),\r\n }\"\r\n >\r\n </span>\r\n </div>\r\n <div v-else>\r\n <slot></slot>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref } from \"vue\";\r\ninterface Props {\r\n lines?: number | null | undefined;\r\n maxWidth?: number | null | undefined;\r\n minWidth?: number | null | undefined;\r\n height?: string | null | undefined;\r\n width?: string | null | undefined;\r\n loading?: boolean;\r\n}\r\n\r\nconst props = withDefaults(defineProps<Props>(), {\r\n lines: 4,\r\n maxWidth: 100,\r\n minWidth: 80,\r\n height: \"1em\",\r\n width: null,\r\n loading: true,\r\n});\r\n\r\nconst getRandomLines = (min, max): number => {\r\n return Math.random() * (max - min) + min;\r\n};\r\n\r\nconst bigness = ref(typeof props.height === \"string\" && props.height.trim() !== \"\" ? props.height : \"1em\");\r\nconst lineCount = ref(\r\n typeof props.lines === \"number\" && props.lines > 0 ? props.lines : getRandomLines(4, 8)\r\n);\r\n\r\nconst computeWidth = (): string => {\r\n // Either use the given fixed width or\r\n // a random width between the given min\r\n // and max values.\r\n return props.width\r\n ? props.width\r\n : `${(\r\n Math.floor(Math.random() * Number(props.maxWidth ?? 100) - Number(props.minWidth ?? 80)) +\r\n Number(props.minWidth ?? 80)\r\n ).toString()}%`;\r\n};\r\n</script>\r\n\r\n<style lang=\"less\" scoped>\r\n.skeleton-box {\r\n display: block;\r\n position: relative;\r\n overflow: hidden;\r\n background-color: #dddbdd;\r\n margin-bottom: 15px;\r\n border-radius: 3px;\r\n\r\n &::after {\r\n position: absolute;\r\n top: 0;\r\n right: 0;\r\n bottom: 0;\r\n left: 0;\r\n transform: translateX(-100%);\r\n background-image: linear-gradient(\r\n 90deg,\r\n rgba(#fff, 0) 0,\r\n rgba(#fff, 0.2) 20%,\r\n rgba(#fff, 0.5) 60%,\r\n rgba(#fff, 0)\r\n );\r\n animation: shimmer 5s infinite;\r\n content: \"\";\r\n }\r\n\r\n @keyframes shimmer {\r\n 100% {\r\n transform: translateX(100%);\r\n }\r\n }\r\n}\r\n</style>\r\n","import script from \"./skeletonBox.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./skeletonBox.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./skeletonBox.vue?vue&type=style&index=0&id=4fbe8fe8&lang=less&scoped=true\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-4fbe8fe8\"]])\n\nexport default __exports__","import { defineComponent as _defineComponent } from 'vue'\nimport { unref as _unref, renderSlot as _renderSlot, normalizeClass as _normalizeClass, createElementVNode as _createElementVNode, normalizeStyle as _normalizeStyle, openBlock as _openBlock, createElementBlock as _createElementBlock, createCommentVNode as _createCommentVNode, Teleport as _Teleport, createBlock as _createBlock } from \"vue\"\n\nconst _hoisted_1 = [\"id\"]\nconst _hoisted_2 = [\"innerHTML\"]\n\nimport { ref, computed, onMounted, onBeforeUnmount, watch } from \"vue\";\r\nimport { trueFalseString, boxBool } from \"@utility/boolUtils\";\r\nimport { ToolTip, TooltipType } from \"@interfaces/utility/Tooltip\";\r\nimport { genComponentId } from \"@components/componentHelpers\";\r\nimport {\r\n mountFloatedPosition,\r\n unmountFloatedPosition,\r\n showFloatedComponent,\r\n hideFloatedComponent,\r\n} from \"@compUtility/composables/floatedPosition\";\r\nimport { isNullOrWhiteSpace } from \"@utility/stringUtils\";\r\n\r\n\nexport default /*@__PURE__*/_defineComponent({\n __name: 'tooltip',\n props: {\n data: { default: {\r\n tooltipText: \"\",\r\n position: \"auto\",\r\n cssClasses: \"\",\r\n tooltipType: TooltipType.AnchorTooltip,\r\n autosizeWithContent: true,\r\n showTrigger: \"manual\",\r\n attachToCustomElementId: undefined,\r\n } as ToolTip },\n showTooltip: { type: [Boolean, String], default: false }\n },\n emits: [\"mounted\"],\n setup(__props: any, { emit: __emit }) {\n\r\nconst props = __props;\r\n\r\nconst $emits = __emit;\r\n\r\nconst showTip = ref(boxBool(props.showTooltip));\r\nconst componentId = genComponentId(\"s1-tooltip\");\r\nconst viewportId = `${componentId}-viewport`;\r\nconst floatStyleObj = ref<IDomPosition | null>(null);\r\nconst showTooltipViewport = ref<boolean>(false);\r\n\r\nconst computedStyle = computed(() => {\r\n if (!floatStyleObj) {\r\n return undefined;\r\n }\r\n\r\n return { opacity: 0.9, ...floatStyleObj.value };\r\n});\r\n\r\nconst attachToElementId = computed<string>(() => {\r\n return !isNullOrWhiteSpace(props.data?.attachToCustomElementId)\r\n ? props.data.attachToCustomElementId!\r\n : componentId;\r\n});\r\n\r\nwatch(\r\n () => props.showTooltip,\r\n (newVal) => {\r\n boxBool(newVal)\r\n ? showFloatedComponent(attachToElementId.value)\r\n : hideFloatedComponent(attachToElementId.value);\r\n }\r\n);\r\n\r\nconst show = computed<boolean>(() => {\r\n if (props.data?.showTrigger === \"manual\") {\r\n return boxBool(props.showTooltip);\r\n }\r\n return showTip.value;\r\n});\r\n\r\nonMounted(() => {\r\n mountFloatedPosition({\r\n componentId: attachToElementId.value,\r\n viewportId: viewportId,\r\n position: props.data?.position,\r\n showTrigger: props.data?.showTrigger ?? \"manual\",\r\n listenForHoverOnParent: isNullOrWhiteSpace(props.data?.attachToCustomElementId),\r\n onPositionChange: (position) => {\r\n floatStyleObj.value = position;\r\n },\r\n onShowToggle: (show) => {\r\n showTip.value = show;\r\n if (!show) {\r\n showTooltipViewport.value = false;\r\n }\r\n },\r\n onBeforeShow: () => {\r\n showTooltipViewport.value = true;\r\n },\r\n });\r\n\r\n if (showTip.value) {\r\n showFloatedComponent(attachToElementId.value);\r\n }\r\n\r\n $emits(\"mounted\");\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n unmountFloatedPosition(attachToElementId.value);\r\n});\r\n\nreturn (_ctx: any,_cache: any) => {\n return (_openBlock(), _createElementBlock(\"div\", {\n id: _unref(componentId),\n class: \"inline-block\"\n }, [\n (showTooltipViewport.value)\n ? (_openBlock(), _createBlock(_Teleport, {\n key: 0,\n to: \"body\"\n }, [\n (show.value)\n ? (_openBlock(), _createElementBlock(\"div\", {\n key: 0,\n class: _normalizeClass([\"tooltip\", props.data.cssClasses]),\n style: _normalizeStyle(computedStyle.value),\n id: viewportId\n }, [\n _createElementVNode(\"div\", {\n class: _normalizeClass([\"tooltip-inner\", props.data?.autosizeWithContent ?? false ? 'autosize' : ''])\n }, [\n _renderSlot(_ctx.$slots, \"tooltip-slot\"),\n _createElementVNode(\"span\", {\n class: _normalizeClass([\"text\", props.data?.cssClasses ?? '']),\n innerHTML: props.data?.tooltipText ?? ''\n }, null, 10, _hoisted_2)\n ], 2)\n ], 6))\n : _createCommentVNode(\"\", true)\n ]))\n : _createCommentVNode(\"\", true)\n ], 8, _hoisted_1))\n}\n}\n\n})","<template>\r\n <div\r\n :id=\"componentId\"\r\n class=\"inline-block\"\r\n >\r\n <Teleport\r\n v-if=\"showTooltipViewport\"\r\n to=\"body\"\r\n >\r\n <div\r\n class=\"tooltip\"\r\n v-if=\"show\"\r\n :style=\"computedStyle\"\r\n :id=\"viewportId\"\r\n :class=\"props.data.cssClasses\"\r\n >\r\n <div\r\n class=\"tooltip-inner\"\r\n :class=\"props.data?.autosizeWithContent ?? false ? 'autosize' : ''\"\r\n >\r\n <slot name=\"tooltip-slot\"></slot>\r\n <span\r\n class=\"text\"\r\n :class=\"props.data?.cssClasses ?? ''\"\r\n v-html=\"props.data?.tooltipText ?? ''\"\r\n />\r\n </div>\r\n </div>\r\n </Teleport>\r\n </div>\r\n</template>\r\n\r\n<script lang=\"ts\" setup>\r\nimport { ref, computed, onMounted, onBeforeUnmount, watch } from \"vue\";\r\nimport { trueFalseString, boxBool } from \"@utility/boolUtils\";\r\nimport { ToolTip, TooltipType } from \"@interfaces/utility/Tooltip\";\r\nimport { genComponentId } from \"@components/componentHelpers\";\r\nimport {\r\n mountFloatedPosition,\r\n unmountFloatedPosition,\r\n showFloatedComponent,\r\n hideFloatedComponent,\r\n} from \"@compUtility/composables/floatedPosition\";\r\nimport { isNullOrWhiteSpace } from \"@utility/stringUtils\";\r\n\r\nconst props = withDefaults(\r\n defineProps<{\r\n data?: ToolTip;\r\n showTooltip?: trueFalseString;\r\n }>(),\r\n {\r\n data: {\r\n tooltipText: \"\",\r\n position: \"auto\",\r\n cssClasses: \"\",\r\n tooltipType: TooltipType.AnchorTooltip,\r\n autosizeWithContent: true,\r\n showTrigger: \"manual\",\r\n attachToCustomElementId: undefined,\r\n } as ToolTip,\r\n showTooltip: false,\r\n }\r\n);\r\n\r\nconst $emits = defineEmits<{\r\n (e: \"mounted\"): void;\r\n}>();\r\n\r\nconst showTip = ref(boxBool(props.showTooltip));\r\nconst componentId = genComponentId(\"s1-tooltip\");\r\nconst viewportId = `${componentId}-viewport`;\r\nconst floatStyleObj = ref<IDomPosition | null>(null);\r\nconst showTooltipViewport = ref<boolean>(false);\r\n\r\nconst computedStyle = computed(() => {\r\n if (!floatStyleObj) {\r\n return undefined;\r\n }\r\n\r\n return { opacity: 0.9, ...floatStyleObj.value };\r\n});\r\n\r\nconst attachToElementId = computed<string>(() => {\r\n return !isNullOrWhiteSpace(props.data?.attachToCustomElementId)\r\n ? props.data.attachToCustomElementId!\r\n : componentId;\r\n});\r\n\r\nwatch(\r\n () => props.showTooltip,\r\n (newVal) => {\r\n boxBool(newVal)\r\n ? showFloatedComponent(attachToElementId.value)\r\n : hideFloatedComponent(attachToElementId.value);\r\n }\r\n);\r\n\r\nconst show = computed<boolean>(() => {\r\n if (props.data?.showTrigger === \"manual\") {\r\n return boxBool(props.showTooltip);\r\n }\r\n return showTip.value;\r\n});\r\n\r\nonMounted(() => {\r\n mountFloatedPosition({\r\n componentId: attachToElementId.value,\r\n viewportId: viewportId,\r\n position: props.data?.position,\r\n showTrigger: props.data?.showTrigger ?? \"manual\",\r\n listenForHoverOnParent: isNullOrWhiteSpace(props.data?.attachToCustomElementId),\r\n onPositionChange: (position) => {\r\n floatStyleObj.value = position;\r\n },\r\n onShowToggle: (show) => {\r\n showTip.value = show;\r\n if (!show) {\r\n showTooltipViewport.value = false;\r\n }\r\n },\r\n onBeforeShow: () => {\r\n showTooltipViewport.value = true;\r\n },\r\n });\r\n\r\n if (showTip.value) {\r\n showFloatedComponent(attachToElementId.value);\r\n }\r\n\r\n $emits(\"mounted\");\r\n});\r\n\r\nonBeforeUnmount(() => {\r\n unmountFloatedPosition(attachToElementId.value);\r\n});\r\n</script>\r\n\r\n<style scoped lang=\"less\">\r\n.autosize {\r\n overflow: auto !important;\r\n max-width: 100% !important;\r\n}\r\n</style>\r\n","import script from \"./tooltip.vue?vue&type=script&lang=ts&setup=true\"\nexport * from \"./tooltip.vue?vue&type=script&lang=ts&setup=true\"\n\nimport \"./tooltip.vue?vue&type=style&index=0&id=f5399a08&scoped=true&lang=less\"\n\nimport exportComponent from \"../../../../../node_modules/vue-loader/dist/exportHelper.js\"\nconst __exports__ = /*#__PURE__*/exportComponent(script, [['__scopeId',\"data-v-f5399a08\"]])\n\nexport default __exports__"],"names":["DeliverySchedule","PricePlanAttributeRegion","PropaneUsageCode","WorkflowNodeInputValidation","WorkflowNodeType","WorryFreeRenewalOption","useExecuteContent","tryExecuteScript","scr","runAsync","Promise","resolve","reject","Function","dynamicFunc","ex","tryExecuteHtmlScript","documentTag","tempDiv","document","createElement","innerHTML","scriptTags","querySelectorAll","linkTags","scriptPromises","scriptTag","src","console","log","scriptElement","push","body","appendChild","head","scriptContent","textContent","error","linkTag","href","linkElement","rel","onload","onerror","all","then","remove","catch","finally","mountSandboxContent","content","targetElement","hasMountedDataAttribute","embeddedContent","EmbeddedContent","htmlContent","HtmlContent","HtmlContentHtml","mount","setMountDataAttribute","tryMountSandboxContent","elementWarnings","forEach","x","HtmlEmbeddedContentTargetElement","$el","querySelector","undefined","length","join","tryMountWidgetContent","widgets","widget","setAttribute","getAttribute","showAttribute","marketingAttribute","internalAttributeListing","AvailableToMarket","PricePlanAttributeMarketingDescription","AttributeEmptyValueDescription","AttributeHasValue","TemplateKeyValue","AttributeValueDisplay","AttributeValue","HtmlContentId","ToolTipText","RenderAttributeMarketingDescription","attribute","pricePlan","keyValue","_renderDescription","stringValue","obj","renderHtmlTemplate","u","getContentAttributes","marketingAttributes","attributeRegion","SortAttributes","filter","PricePlanAttributeRegionEnum","GetHtmlContents","htmlContents","find","h","RestrictAttributes","attributes","restrictions","restrict","useRestriction","PricePlanAttributeId","desc","sort","a","b","SortOrder","HasAttributeByName","attributeName","some","PricePlanAttributeName","ProductPricePlan","constructor","this","BaseContractTypeIds","ProductUtility","ProductCode","BrandType","PricePlans","SelectedPricePlan","SelectedContract","ContractTypes","SelectedContractTypeIds","ProductTankDefaults","PricingAvailableInZip","MaskedProductPricing","ReducePricePlan","node","option","attributeId","priceTypeCode","debug","SelectedOptionIsFinalNode","WorkflowNodeDescription","WorkflowNodeId","pp","p","UsePriceplan","PricingTypeCode","WillCallCashPrice","PreBuy","intVal","parseInt","WorkflowNodeValue","isInt","Number","isInteger","hasAttribute","hasPriceTypeCode","estimatedUsage","GetGallonAmountForPricePlan","NodeData","hasAutoDeliverySchedule","Automatic","offerPropaneBogo","Propane","PropaneEstimatedUsages","EstimatedUsageCode","PrimaryHeating","offerHeatingOilBogo","ProductId","HeatingOil","MinEstimatedUsage","MaxEstimatedUsage","HasBogoAdjustment","MarketingAttributes","every","WorkflowNodeInputValidationEnum","TankLocation","WorkflowNodeTypeEnum","BinaryChoiceButton","isAttributeMatch","isAttributeOnlyMatching","isAttributeAndValueMatching","hasWorryFreeRenewalOptInOptions","OptionalRenewal","RequireRenewal","includes","hasWorryFreeRenewalOptInOptionsOnly","HasAttributeMatch","TemplateValueRaw","nodeData","useTankSize","TankSize","UsableSize","PropaneUsage","WillCallGallons","PreBuyGallons","PricePlanCanBeReduced","productPricePlan","AssociatedAttribute","AssociatedPricingTypeCode","WorkflowNextNode","Final","async","GetPricePlansByProduct","productId","brandTypeId","pricePlans","zipCode","rtn","MaskeProductPricing","HeatingOilPrices","HeatingOilTankDefaults","PropanePrices","PropaneTankDefaults","NaturalGas","NatGasUtilities","NatGasPrices","Electricity","ElectricUtilities","ElectricityPrices","ServiceProduct","ZipSupportsServiceContract","contracts","ZipCode","BrandTypeId","contractTypes","err","Error","maskedProductPricing","getMaskedPricePlans","availability","maskedProducts","MaskedPricePlanProducts","key","maskedProduct","hasOwnProperty","PricingAvailability","y","PricingAvailabilityKey","GetPricePlansForUtility","utilityCode","UtilityCode","ServiceContract","AddOnCoverage","AllEquipmentTypeIds","AllowMonthlyBilling","AnnualBillingDiscount","AsteaContractTemplateId","BaseProductTemplate","BasePrice","CargasServiceContractId","ContractDescriptionOverride","ContractTemplateId","ContractTemplateName","ContractTypeId","ContractsPerSite","CsrReviewNewApplications","HeroImageAssetId","IsPopular","MaximumAllowed","MaximumObjects","MinimumRequired","PlanHighlights","RequireInspection","RequiredEquipmentTypeIds","RequiredStandaloneObjects","StandaloneCoverage","TextDescription","TosUrl","TotalCoveragePrice","CoveredEquipmentTypeIds","IsBaseContract","IsTankProtectionPlan","MonthlyCost","MonthlyCostFormatted","UpfrontCost","UpfrontCostFormatted","RenderedHeroImageAssetUrl","EquipmentIsCovered","equipmentId","map","EquipmentTypeId","SetCoveredEquipment","equipments","Array","isArray","equipment","match","newContractTemplateObj","Unknown","TooltipType","AnalyticProduct","coupon","currency","discount","quantity","price","AnalyticsProduct","name","id","list","brand","category","postion","index","super","Price","PricingPlanDescription","ProductCodeFormatted","PricingPlan","BrandTypeName","Ga4AnalyticsProduct","item_id","item_name","item_brand","item_category","location_id","LifeTimeValue","UtilityDescription","PricePlan","MarketingHeading","ItemCategory","_hoisted_1","for","_hoisted_2","_hoisted_3","_hoisted_4","_hoisted_5","class","_hoisted_6","_hoisted_7","_hoisted_8","_hoisted_9","_hoisted_10","_hoisted_11","_hoisted_12","_hoisted_13","_hoisted_14","_hoisted_15","_hoisted_16","_hoisted_17","__name","props","toggleAttribute","type","Boolean","default","hideIcons","hideAttributeRegionIndicator","badge","String","showInternal","variant","restrictAtrributeIds","setup","__props","contentClass","primaryContentAttributes","Feature","secondaryContentAttributes","Benefit","_ctx","_cache","$props","value","A","Tooltip","InformationalTooltip","contentText","PricePlanAttributeRegionIcon","tooltipType","QuestionTooltipIcon","tooltipText","reExecuteOnComponentUpdate","emits","emit","__emit","$emit","validateEmbeddedContent","loading","contentId","contentLoaded","emitSuccess","HtmlEmbeddedContentName","emitFailure","HtmlEmbeddedContentId","HtmlEmbeddedContentSignature","EmbeddedContentType","HtmlScript","HtmlEmbeddedContent","validationSignature","result","RunAsync","lines","maxWidth","minWidth","height","width","bigness","trim","lineCount","Math","random","n","style","floor","toString","$slots","data","position","cssClasses","AnchorTooltip","autosizeWithContent","showTrigger","attachToCustomElementId","showTooltip","$emits","showTip","componentId","viewportId","floatStyleObj","showTooltipViewport","computedStyle","opacity","attachToElementId","newVal","show","listenForHoverOnParent","onPositionChange","onShowToggle","onBeforeShow","to"],"sourceRoot":""}